From eba2dab543609d723d648e57cdaf9ca319c7e95a Mon Sep 17 00:00:00 2001 From: Hri7566 Date: Wed, 6 Sep 2023 19:27:56 -0400 Subject: [PATCH] new --- .gitmodules | 3 - config/channels.yml | 6 + mpp.hri7566.info | 1 - Quotas.js => oldfloat/Quotas.js | 0 banned.json => oldfloat/banned.json | 0 color-tester.js => oldfloat/color-tester.js | 0 config.js => oldfloat/config.js | 0 {coverage => oldfloat/coverage}/clover.xml | 0 .../coverage}/coverage-final.json | 0 .../coverage}/lcov-report/Crown.js.html | 0 .../coverage}/lcov-report/base.css | 0 .../coverage}/lcov-report/block-navigation.js | 0 .../coverage}/lcov-report/favicon.png | Bin .../coverage}/lcov-report/index.html | 0 .../coverage}/lcov-report/prettify.css | 0 .../coverage}/lcov-report/prettify.js | 0 .../lcov-report/sort-arrow-sprite.png | Bin .../coverage}/lcov-report/sorter.js | 0 {coverage => oldfloat/coverage}/lcov.info | 0 index.js => oldfloat/index.js | 0 mppclonebot.js => oldfloat/mppclonebot.js | 0 nodemon.json => oldfloat/nodemon.json | 0 yarn.lock => oldfloat/yarn.lock | 0 {src => oldsrc}/Channel.js | 0 {src => oldsrc}/Client.js | 0 {src => oldsrc}/Color.js | 0 {src => oldsrc}/ColorEncoder.js | 0 {src => oldsrc}/Cow.js | 0 {src => oldsrc}/Crown.js | 0 {src => oldsrc}/Database.js | 0 {src => oldsrc}/InternalBot/Command.js | 0 {src => oldsrc}/InternalBot/InternalBot.js | 0 {src => oldsrc}/InternalBot/index.js | 0 {src => oldsrc}/InventoryModel.js | 0 {src => oldsrc}/Logger.js | 0 {src => oldsrc}/MOTDGenerator.js | 0 {src => oldsrc}/Message.js | 0 {src => oldsrc}/Notification.js | 0 {src => oldsrc}/Quota.js | 0 {src => oldsrc}/Ratelimit.js | 0 {src => oldsrc}/RoomSettings.js | 0 {src => oldsrc}/Server.js | 0 {src => oldsrc}/User.js | 0 {src => oldsrc}/UserModel.js | 0 {src => oldsrc}/cycle.js | 0 {src => oldsrc}/scripts/ebbattle.js | 0 {src => oldsrc}/scripts/fish.js | 0 {src => oldsrc}/scripts/fishing.js | 0 {src => oldsrc}/scripts/spooky.js | 0 out/http/fastify.js | 1 + out/http/index.js | 1 + out/http/socket.js | 1 + out/index.js | 1 + out/util/config.js | 22 + out/util/env.js | 22 + package.json | 51 +- pnpm-lock.yaml | 642 ++++++++++++++++++ src/http/fastify.ts | 0 src/http/index.ts | 0 src/http/socket.ts | 0 src/index.ts | 0 src/util/config.ts | 15 + src/util/env.ts | 19 + tsconfig.json | 111 +++ 64 files changed, 860 insertions(+), 36 deletions(-) create mode 100644 config/channels.yml delete mode 160000 mpp.hri7566.info rename Quotas.js => oldfloat/Quotas.js (100%) rename banned.json => oldfloat/banned.json (100%) rename color-tester.js => oldfloat/color-tester.js (100%) rename config.js => oldfloat/config.js (100%) rename {coverage => oldfloat/coverage}/clover.xml (100%) rename {coverage => oldfloat/coverage}/coverage-final.json (100%) rename {coverage => oldfloat/coverage}/lcov-report/Crown.js.html (100%) rename {coverage => oldfloat/coverage}/lcov-report/base.css (100%) rename {coverage => oldfloat/coverage}/lcov-report/block-navigation.js (100%) rename {coverage => oldfloat/coverage}/lcov-report/favicon.png (100%) rename {coverage => oldfloat/coverage}/lcov-report/index.html (100%) rename {coverage => oldfloat/coverage}/lcov-report/prettify.css (100%) rename {coverage => oldfloat/coverage}/lcov-report/prettify.js (100%) rename {coverage => oldfloat/coverage}/lcov-report/sort-arrow-sprite.png (100%) rename {coverage => oldfloat/coverage}/lcov-report/sorter.js (100%) rename {coverage => oldfloat/coverage}/lcov.info (100%) rename index.js => oldfloat/index.js (100%) rename mppclonebot.js => oldfloat/mppclonebot.js (100%) rename nodemon.json => oldfloat/nodemon.json (100%) rename yarn.lock => oldfloat/yarn.lock (100%) rename {src => oldsrc}/Channel.js (100%) rename {src => oldsrc}/Client.js (100%) rename {src => oldsrc}/Color.js (100%) rename {src => oldsrc}/ColorEncoder.js (100%) rename {src => oldsrc}/Cow.js (100%) rename {src => oldsrc}/Crown.js (100%) rename {src => oldsrc}/Database.js (100%) rename {src => oldsrc}/InternalBot/Command.js (100%) rename {src => oldsrc}/InternalBot/InternalBot.js (100%) rename {src => oldsrc}/InternalBot/index.js (100%) rename {src => oldsrc}/InventoryModel.js (100%) rename {src => oldsrc}/Logger.js (100%) rename {src => oldsrc}/MOTDGenerator.js (100%) rename {src => oldsrc}/Message.js (100%) rename {src => oldsrc}/Notification.js (100%) rename {src => oldsrc}/Quota.js (100%) rename {src => oldsrc}/Ratelimit.js (100%) rename {src => oldsrc}/RoomSettings.js (100%) rename {src => oldsrc}/Server.js (100%) rename {src => oldsrc}/User.js (100%) rename {src => oldsrc}/UserModel.js (100%) rename {src => oldsrc}/cycle.js (100%) rename {src => oldsrc}/scripts/ebbattle.js (100%) rename {src => oldsrc}/scripts/fish.js (100%) rename {src => oldsrc}/scripts/fishing.js (100%) rename {src => oldsrc}/scripts/spooky.js (100%) create mode 100644 out/http/fastify.js create mode 100644 out/http/index.js create mode 100644 out/http/socket.js create mode 100644 out/index.js create mode 100644 out/util/config.js create mode 100644 out/util/env.js create mode 100644 pnpm-lock.yaml create mode 100644 src/http/fastify.ts create mode 100644 src/http/index.ts create mode 100644 src/http/socket.ts create mode 100644 src/index.ts create mode 100644 src/util/config.ts create mode 100644 src/util/env.ts create mode 100644 tsconfig.json diff --git a/.gitmodules b/.gitmodules index d6e1b82..e69de29 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,3 +0,0 @@ -[submodule "mpp.hri7566.info"] - path = mpp.hri7566.info - url = git@github.com:Hri7566/mpp.hri7566.info.git diff --git a/config/channels.yml b/config/channels.yml new file mode 100644 index 0000000..9ed3414 --- /dev/null +++ b/config/channels.yml @@ -0,0 +1,6 @@ +alwaysLoad: + - lobby + - test/awkward + +lobbySettings: + lobby: true diff --git a/mpp.hri7566.info b/mpp.hri7566.info deleted file mode 160000 index 1bcce0f..0000000 --- a/mpp.hri7566.info +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 1bcce0f2b59d1d5407c510d738438a3d78ce199a diff --git a/Quotas.js b/oldfloat/Quotas.js similarity index 100% rename from Quotas.js rename to oldfloat/Quotas.js diff --git a/banned.json b/oldfloat/banned.json similarity index 100% rename from banned.json rename to oldfloat/banned.json diff --git a/color-tester.js b/oldfloat/color-tester.js similarity index 100% rename from color-tester.js rename to oldfloat/color-tester.js diff --git a/config.js b/oldfloat/config.js similarity index 100% rename from config.js rename to oldfloat/config.js diff --git a/coverage/clover.xml b/oldfloat/coverage/clover.xml similarity index 100% rename from coverage/clover.xml rename to oldfloat/coverage/clover.xml diff --git a/coverage/coverage-final.json b/oldfloat/coverage/coverage-final.json similarity index 100% rename from coverage/coverage-final.json rename to oldfloat/coverage/coverage-final.json diff --git a/coverage/lcov-report/Crown.js.html b/oldfloat/coverage/lcov-report/Crown.js.html similarity index 100% rename from coverage/lcov-report/Crown.js.html rename to oldfloat/coverage/lcov-report/Crown.js.html diff --git a/coverage/lcov-report/base.css b/oldfloat/coverage/lcov-report/base.css similarity index 100% rename from coverage/lcov-report/base.css rename to oldfloat/coverage/lcov-report/base.css diff --git a/coverage/lcov-report/block-navigation.js b/oldfloat/coverage/lcov-report/block-navigation.js similarity index 100% rename from coverage/lcov-report/block-navigation.js rename to oldfloat/coverage/lcov-report/block-navigation.js diff --git a/coverage/lcov-report/favicon.png b/oldfloat/coverage/lcov-report/favicon.png similarity index 100% rename from coverage/lcov-report/favicon.png rename to oldfloat/coverage/lcov-report/favicon.png diff --git a/coverage/lcov-report/index.html b/oldfloat/coverage/lcov-report/index.html similarity index 100% rename from coverage/lcov-report/index.html rename to oldfloat/coverage/lcov-report/index.html diff --git a/coverage/lcov-report/prettify.css b/oldfloat/coverage/lcov-report/prettify.css similarity index 100% rename from coverage/lcov-report/prettify.css rename to oldfloat/coverage/lcov-report/prettify.css diff --git a/coverage/lcov-report/prettify.js b/oldfloat/coverage/lcov-report/prettify.js similarity index 100% rename from coverage/lcov-report/prettify.js rename to oldfloat/coverage/lcov-report/prettify.js diff --git a/coverage/lcov-report/sort-arrow-sprite.png b/oldfloat/coverage/lcov-report/sort-arrow-sprite.png similarity index 100% rename from coverage/lcov-report/sort-arrow-sprite.png rename to oldfloat/coverage/lcov-report/sort-arrow-sprite.png diff --git a/coverage/lcov-report/sorter.js b/oldfloat/coverage/lcov-report/sorter.js similarity index 100% rename from coverage/lcov-report/sorter.js rename to oldfloat/coverage/lcov-report/sorter.js diff --git a/coverage/lcov.info b/oldfloat/coverage/lcov.info similarity index 100% rename from coverage/lcov.info rename to oldfloat/coverage/lcov.info diff --git a/index.js b/oldfloat/index.js similarity index 100% rename from index.js rename to oldfloat/index.js diff --git a/mppclonebot.js b/oldfloat/mppclonebot.js similarity index 100% rename from mppclonebot.js rename to oldfloat/mppclonebot.js diff --git a/nodemon.json b/oldfloat/nodemon.json similarity index 100% rename from nodemon.json rename to oldfloat/nodemon.json diff --git a/yarn.lock b/oldfloat/yarn.lock similarity index 100% rename from yarn.lock rename to oldfloat/yarn.lock diff --git a/src/Channel.js b/oldsrc/Channel.js similarity index 100% rename from src/Channel.js rename to oldsrc/Channel.js diff --git a/src/Client.js b/oldsrc/Client.js similarity index 100% rename from src/Client.js rename to oldsrc/Client.js diff --git a/src/Color.js b/oldsrc/Color.js similarity index 100% rename from src/Color.js rename to oldsrc/Color.js diff --git a/src/ColorEncoder.js b/oldsrc/ColorEncoder.js similarity index 100% rename from src/ColorEncoder.js rename to oldsrc/ColorEncoder.js diff --git a/src/Cow.js b/oldsrc/Cow.js similarity index 100% rename from src/Cow.js rename to oldsrc/Cow.js diff --git a/src/Crown.js b/oldsrc/Crown.js similarity index 100% rename from src/Crown.js rename to oldsrc/Crown.js diff --git a/src/Database.js b/oldsrc/Database.js similarity index 100% rename from src/Database.js rename to oldsrc/Database.js diff --git a/src/InternalBot/Command.js b/oldsrc/InternalBot/Command.js similarity index 100% rename from src/InternalBot/Command.js rename to oldsrc/InternalBot/Command.js diff --git a/src/InternalBot/InternalBot.js b/oldsrc/InternalBot/InternalBot.js similarity index 100% rename from src/InternalBot/InternalBot.js rename to oldsrc/InternalBot/InternalBot.js diff --git a/src/InternalBot/index.js b/oldsrc/InternalBot/index.js similarity index 100% rename from src/InternalBot/index.js rename to oldsrc/InternalBot/index.js diff --git a/src/InventoryModel.js b/oldsrc/InventoryModel.js similarity index 100% rename from src/InventoryModel.js rename to oldsrc/InventoryModel.js diff --git a/src/Logger.js b/oldsrc/Logger.js similarity index 100% rename from src/Logger.js rename to oldsrc/Logger.js diff --git a/src/MOTDGenerator.js b/oldsrc/MOTDGenerator.js similarity index 100% rename from src/MOTDGenerator.js rename to oldsrc/MOTDGenerator.js diff --git a/src/Message.js b/oldsrc/Message.js similarity index 100% rename from src/Message.js rename to oldsrc/Message.js diff --git a/src/Notification.js b/oldsrc/Notification.js similarity index 100% rename from src/Notification.js rename to oldsrc/Notification.js diff --git a/src/Quota.js b/oldsrc/Quota.js similarity index 100% rename from src/Quota.js rename to oldsrc/Quota.js diff --git a/src/Ratelimit.js b/oldsrc/Ratelimit.js similarity index 100% rename from src/Ratelimit.js rename to oldsrc/Ratelimit.js diff --git a/src/RoomSettings.js b/oldsrc/RoomSettings.js similarity index 100% rename from src/RoomSettings.js rename to oldsrc/RoomSettings.js diff --git a/src/Server.js b/oldsrc/Server.js similarity index 100% rename from src/Server.js rename to oldsrc/Server.js diff --git a/src/User.js b/oldsrc/User.js similarity index 100% rename from src/User.js rename to oldsrc/User.js diff --git a/src/UserModel.js b/oldsrc/UserModel.js similarity index 100% rename from src/UserModel.js rename to oldsrc/UserModel.js diff --git a/src/cycle.js b/oldsrc/cycle.js similarity index 100% rename from src/cycle.js rename to oldsrc/cycle.js diff --git a/src/scripts/ebbattle.js b/oldsrc/scripts/ebbattle.js similarity index 100% rename from src/scripts/ebbattle.js rename to oldsrc/scripts/ebbattle.js diff --git a/src/scripts/fish.js b/oldsrc/scripts/fish.js similarity index 100% rename from src/scripts/fish.js rename to oldsrc/scripts/fish.js diff --git a/src/scripts/fishing.js b/oldsrc/scripts/fishing.js similarity index 100% rename from src/scripts/fishing.js rename to oldsrc/scripts/fishing.js diff --git a/src/scripts/spooky.js b/oldsrc/scripts/spooky.js similarity index 100% rename from src/scripts/spooky.js rename to oldsrc/scripts/spooky.js diff --git a/out/http/fastify.js b/out/http/fastify.js new file mode 100644 index 0000000..3918c74 --- /dev/null +++ b/out/http/fastify.js @@ -0,0 +1 @@ +"use strict"; diff --git a/out/http/index.js b/out/http/index.js new file mode 100644 index 0000000..3918c74 --- /dev/null +++ b/out/http/index.js @@ -0,0 +1 @@ +"use strict"; diff --git a/out/http/socket.js b/out/http/socket.js new file mode 100644 index 0000000..3918c74 --- /dev/null +++ b/out/http/socket.js @@ -0,0 +1 @@ +"use strict"; diff --git a/out/index.js b/out/index.js new file mode 100644 index 0000000..3918c74 --- /dev/null +++ b/out/index.js @@ -0,0 +1 @@ +"use strict"; diff --git a/out/util/config.js b/out/util/config.js new file mode 100644 index 0000000..87a81a9 --- /dev/null +++ b/out/util/config.js @@ -0,0 +1,22 @@ +"use strict"; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.loadConfig = void 0; +const yaml_1 = __importDefault(require("yaml")); +const fs_1 = require("fs"); +function loadConfig(filepath, def) { + try { + const data = (0, fs_1.readFileSync)(filepath).toString(); + const parsed = yaml_1.default.parse(data); + return parsed || def; + } + catch (err) { + console.error("Unable to load config:", err); + } + finally { + return def; + } +} +exports.loadConfig = loadConfig; diff --git a/out/util/env.js b/out/util/env.js new file mode 100644 index 0000000..1d3962c --- /dev/null +++ b/out/util/env.js @@ -0,0 +1,22 @@ +"use strict"; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.env = void 0; +const dotenv_1 = __importDefault(require("dotenv")); +const env_core_1 = require("@t3-oss/env-core"); +const zod_1 = require("zod"); +dotenv_1.default.config(); +exports.env = (0, env_core_1.createEnv)({ + server: { + PORT: zod_1.z.coerce.number(), + SALT: zod_1.z.string().min(10), + ADMIN_PASS: zod_1.z.string() + }, + isServer: true, + clientPrefix: "", + client: {}, + runtimeEnv: process.env +}); +exports.default = exports.env; diff --git a/package.json b/package.json index eb30cb2..62b7ea0 100644 --- a/package.json +++ b/package.json @@ -1,44 +1,31 @@ { - "name": "mpp-server-master", - "version": "1.1.0", - "description": "Attempt at making a MPP Server.", + "name": "mpp-server", + "version": "2.0.0", + "description": "Hri7566's MPP Server", "main": "index.js", "scripts": { "start": "node .", - "test": "jest", - "coverage": "jest --verbose --coverage", - "watch-test": "jest --watchAll --verbose" + "build": "npx tsc" }, - "repository": { - "type": "git", - "url": "git+https://github.com/BopItFreak/mpp-server.git" - }, - "keywords": [ - "mpp", - "server", - "multiplayerpiano" - ], - "author": "BopItFreak", + "keywords": [], + "author": "Hri7566", "license": "ISC", - "bugs": { - "url": "https://github.com/BopItFreak/mpp-server/issues" - }, - "homepage": "https://github.com/BopItFreak/mpp-server#readme", "dependencies": { - "@types/jest": "^28.1.3", - "asyncconsole": "^1.3.9", - "chalk": "^4.1.1", - "date-holidays": "^3.16.4", - "dotenv": "^8.2.0", - "events": "^3.1.0", - "express": "^4.18.1", + "@t3-oss/env-core": "^0.6.1", + "date-holidays": "^3.21.5", + "dotenv": "^8.6.0", + "events": "^3.3.0", "fancy-text-converter": "^1.0.9", + "fastify": "^4.22.2", "keccak": "^2.1.0", - "level": "^7.0.0", - "mongoose": "^5.12.7", - "mppclone-client": "^1.0.0", - "nodemon": "^2.0.15", + "mppclone-client": "^1.1.3", "unique-names-generator": "^4.7.1", - "ws": "^7.2.3" + "ws": "^7.5.9", + "yaml": "^2.3.2", + "zod": "^3.22.2" + }, + "devDependencies": { + "@types/node": "^20.5.9", + "typescript": "^5.2.2" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml new file mode 100644 index 0000000..935c43d --- /dev/null +++ b/pnpm-lock.yaml @@ -0,0 +1,642 @@ +lockfileVersion: '6.0' + +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false + +dependencies: + '@t3-oss/env-core': + specifier: ^0.6.1 + version: 0.6.1(typescript@5.2.2)(zod@3.22.2) + date-holidays: + specifier: ^3.21.5 + version: 3.21.5 + dotenv: + specifier: ^8.6.0 + version: 8.6.0 + events: + specifier: ^3.3.0 + version: 3.3.0 + fancy-text-converter: + specifier: ^1.0.9 + version: 1.0.9 + fastify: + specifier: ^4.22.2 + version: 4.22.2 + keccak: + specifier: ^2.1.0 + version: 2.1.0 + mppclone-client: + specifier: ^1.1.3 + version: 1.1.3 + unique-names-generator: + specifier: ^4.7.1 + version: 4.7.1 + ws: + specifier: ^7.5.9 + version: 7.5.9 + yaml: + specifier: ^2.3.2 + version: 2.3.2 + zod: + specifier: ^3.22.2 + version: 3.22.2 + +devDependencies: + '@types/node': + specifier: ^20.5.9 + version: 20.5.9 + typescript: + specifier: ^5.2.2 + version: 5.2.2 + +packages: + + /@fastify/ajv-compiler@3.5.0: + resolution: {integrity: sha512-ebbEtlI7dxXF5ziNdr05mOY8NnDiPB1XvAlLHctRt/Rc+C3LCOVW5imUVX+mhvUhnNzmPBHewUkOFgGlCxgdAA==} + dependencies: + ajv: 8.12.0 + ajv-formats: 2.1.1(ajv@8.12.0) + fast-uri: 2.2.0 + dev: false + + /@fastify/deepmerge@1.3.0: + resolution: {integrity: sha512-J8TOSBq3SoZbDhM9+R/u77hP93gz/rajSA+K2kGyijPpORPWUXHUpTaleoj+92As0S9uPRP7Oi8IqMf0u+ro6A==} + dev: false + + /@fastify/error@3.3.0: + resolution: {integrity: sha512-dj7vjIn1Ar8sVXj2yAXiMNCJDmS9MQ9XMlIecX2dIzzhjSHCyKo4DdXjXMs7wKW2kj6yvVRSpuQjOZ3YLrh56w==} + dev: false + + /@fastify/fast-json-stringify-compiler@4.3.0: + resolution: {integrity: sha512-aZAXGYo6m22Fk1zZzEUKBvut/CIIQe/BapEORnxiD5Qr0kPHqqI69NtEMCme74h+at72sPhbkb4ZrLd1W3KRLA==} + dependencies: + fast-json-stringify: 5.8.0 + dev: false + + /@t3-oss/env-core@0.6.1(typescript@5.2.2)(zod@3.22.2): + resolution: {integrity: sha512-KQD7qEDJtkWIWWmTVjNvk0wnHpkvAQ6CRbUxbWMFNG/fiosBQDQvtRpBNu6USxBscJCoC4z6y7P9MN52/mLOzw==} + peerDependencies: + typescript: '>=4.7.2' + zod: ^3.0.0 + dependencies: + typescript: 5.2.2 + zod: 3.22.2 + dev: false + + /@types/node@20.5.9: + resolution: {integrity: sha512-PcGNd//40kHAS3sTlzKB9C9XL4K0sTup8nbG5lC14kzEteTNuAFh9u5nA0o5TWnSG2r/JNPRXFVcHJIIeRlmqQ==} + dev: true + + /abort-controller@3.0.0: + resolution: {integrity: sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==} + engines: {node: '>=6.5'} + dependencies: + event-target-shim: 5.0.1 + dev: false + + /abstract-logging@2.0.1: + resolution: {integrity: sha512-2BjRTZxTPvheOvGbBslFSYOUkr+SjPtOnrLP33f+VIWLzezQpZcqVg7ja3L4dBXmzzgwT+a029jRx5PCi3JuiA==} + dev: false + + /ajv-formats@2.1.1(ajv@8.12.0): + resolution: {integrity: sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==} + peerDependencies: + ajv: ^8.0.0 + peerDependenciesMeta: + ajv: + optional: true + dependencies: + ajv: 8.12.0 + dev: false + + /ajv@8.12.0: + resolution: {integrity: sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==} + dependencies: + fast-deep-equal: 3.1.3 + json-schema-traverse: 1.0.0 + require-from-string: 2.0.2 + uri-js: 4.4.1 + dev: false + + /archy@1.0.0: + resolution: {integrity: sha512-Xg+9RwCg/0p32teKdGMPTPnVXKD0w3DfHnFTficozsAgsvq2XenPJq/MYpzzQ/v8zrOyJn6Ds39VA4JIDwFfqw==} + dev: false + + /argparse@2.0.1: + resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + dev: false + + /astronomia@4.1.1: + resolution: {integrity: sha512-TcJD9lUC5eAo0/Ji7rnQauX/yQbi0yZWM+JsNr77W3OA5fsrgvuFgubLMFwfw4VlZ29cu9dG/yfJbfvuTSftjg==} + engines: {node: '>=12.0.0'} + dev: false + + /atomic-sleep@1.0.0: + resolution: {integrity: sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==} + engines: {node: '>=8.0.0'} + dev: false + + /avvio@8.2.1: + resolution: {integrity: sha512-TAlMYvOuwGyLK3PfBb5WKBXZmXz2fVCgv23d6zZFdle/q3gPjmxBaeuC0pY0Dzs5PWMSgfqqEZkrye19GlDTgw==} + dependencies: + archy: 1.0.0 + debug: 4.3.4 + fastq: 1.15.0 + transitivePeerDependencies: + - supports-color + dev: false + + /base64-js@1.5.1: + resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} + dev: false + + /bindings@1.5.0: + resolution: {integrity: sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==} + dependencies: + file-uri-to-path: 1.0.0 + dev: false + + /buffer@6.0.3: + resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==} + dependencies: + base64-js: 1.5.1 + ieee754: 1.2.1 + dev: false + + /caldate@2.0.5: + resolution: {integrity: sha512-JndhrUuDuE975KUhFqJaVR1OQkCHZqpOrJur/CFXEIEhWhBMjxO85cRSK8q4FW+B+yyPq6GYua2u4KvNzTcq0w==} + engines: {node: '>=12.0.0'} + dependencies: + moment-timezone: 0.5.43 + dev: false + + /cookie@0.5.0: + resolution: {integrity: sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==} + engines: {node: '>= 0.6'} + dev: false + + /date-bengali-revised@2.0.2: + resolution: {integrity: sha512-q9iDru4+TSA9k4zfm0CFHJj6nBsxP7AYgWC/qodK/i7oOIlj5K2z5IcQDtESfs/Qwqt/xJYaP86tkazd/vRptg==} + engines: {node: '>=12.0.0'} + dev: false + + /date-chinese@2.1.4: + resolution: {integrity: sha512-WY+6+Qw92ZGWFvGtStmNQHEYpNa87b8IAQ5T8VKt4wqrn24lBXyyBnWI5jAIyy7h/KVwJZ06bD8l/b7yss82Ww==} + engines: {node: '>=12.0.0'} + dependencies: + astronomia: 4.1.1 + dev: false + + /date-easter@1.0.2: + resolution: {integrity: sha512-mpC1izx7lUSLYl4B88V2W57eNB4xS2ic+ahxK2AYUsaBTsCeHzT6K5ymUKzL9YPFf/GlygFqpiD4/NO1hxDsLw==} + engines: {node: '>=12.0.0'} + dev: false + + /date-holidays-parser@3.4.4: + resolution: {integrity: sha512-R5aO4oT8H51ZKdvApqHrqYEiNBrqT6tRj2PFXNcZfqMI4nxY7KKKly0ZsmquR5gY+x9ldKR8SAMdozzIInaoXg==} + engines: {node: '>=12.0.0'} + dependencies: + astronomia: 4.1.1 + caldate: 2.0.5 + date-bengali-revised: 2.0.2 + date-chinese: 2.1.4 + date-easter: 1.0.2 + deepmerge: 4.3.1 + jalaali-js: 1.2.6 + moment-timezone: 0.5.43 + dev: false + + /date-holidays@3.21.5: + resolution: {integrity: sha512-5X/UK7FunfIiM/q7CwepNfzh1XkkukdZNfTPyKlD5kx01MQzJ9DqKyTcFNzlQJ+HgpAxqUqSs3+F8mwV9bzo/w==} + engines: {node: '>=12.0.0'} + hasBin: true + dependencies: + date-holidays-parser: 3.4.4 + js-yaml: 4.1.0 + lodash.omit: 4.5.0 + lodash.pick: 4.4.0 + prepin: 1.0.3 + dev: false + + /debug@4.3.4: + resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + dependencies: + ms: 2.1.2 + dev: false + + /deepmerge@4.3.1: + resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} + engines: {node: '>=0.10.0'} + dev: false + + /dotenv@8.6.0: + resolution: {integrity: sha512-IrPdXQsk2BbzvCBGBOTmmSH5SodmqZNt4ERAZDmW4CT+tL8VtvinqywuANaFu4bOMWki16nqf0e4oC0QIaDr/g==} + engines: {node: '>=10'} + dev: false + + /event-target-shim@5.0.1: + resolution: {integrity: sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==} + engines: {node: '>=6'} + dev: false + + /events@3.3.0: + resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==} + engines: {node: '>=0.8.x'} + dev: false + + /fancy-text-converter@1.0.9: + resolution: {integrity: sha512-tFUAWpEfZOYhdsjILVu7c0PL9Ud9pTQmonm/2mdvFC7WcEHIYi9NYS5irJYFdBJDIRSqi64XV+IhHPc/ngxtyw==} + dev: false + + /fast-content-type-parse@1.0.0: + resolution: {integrity: sha512-Xbc4XcysUXcsP5aHUU7Nq3OwvHq97C+WnbkeIefpeYLX+ryzFJlU6OStFJhs6Ol0LkUGpcK+wL0JwfM+FCU5IA==} + dev: false + + /fast-decode-uri-component@1.0.1: + resolution: {integrity: sha512-WKgKWg5eUxvRZGwW8FvfbaH7AXSh2cL+3j5fMGzUMCxWBJ3dV3a7Wz8y2f/uQ0e3B6WmodD3oS54jTQ9HVTIIg==} + dev: false + + /fast-deep-equal@3.1.3: + resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} + dev: false + + /fast-json-stringify@5.8.0: + resolution: {integrity: sha512-VVwK8CFMSALIvt14U8AvrSzQAwN/0vaVRiFFUVlpnXSnDGrSkOAO5MtzyN8oQNjLd5AqTW5OZRgyjoNuAuR3jQ==} + dependencies: + '@fastify/deepmerge': 1.3.0 + ajv: 8.12.0 + ajv-formats: 2.1.1(ajv@8.12.0) + fast-deep-equal: 3.1.3 + fast-uri: 2.2.0 + rfdc: 1.3.0 + dev: false + + /fast-querystring@1.1.2: + resolution: {integrity: sha512-g6KuKWmFXc0fID8WWH0jit4g0AGBoJhCkJMb1RmbsSEUNvQ+ZC8D6CUZ+GtF8nMzSPXnhiePyyqqipzNNEnHjg==} + dependencies: + fast-decode-uri-component: 1.0.1 + dev: false + + /fast-redact@3.3.0: + resolution: {integrity: sha512-6T5V1QK1u4oF+ATxs1lWUmlEk6P2T9HqJG3e2DnHOdVgZy2rFJBoEnrIedcTXlkAHU/zKC+7KETJ+KGGKwxgMQ==} + engines: {node: '>=6'} + dev: false + + /fast-uri@2.2.0: + resolution: {integrity: sha512-cIusKBIt/R/oI6z/1nyfe2FvGKVTohVRfvkOhvx0nCEW+xf5NoCXjAHcWp93uOUBchzYcsvPlrapAdX1uW+YGg==} + dev: false + + /fastify@4.22.2: + resolution: {integrity: sha512-rK8mF/1mZJHH6H/L22OhmilTgrp5XMkk3RHcSy03LC+TJ6+wLhbq+4U62bjns15VzIbBNgxTqAForBqtGAa0NQ==} + dependencies: + '@fastify/ajv-compiler': 3.5.0 + '@fastify/error': 3.3.0 + '@fastify/fast-json-stringify-compiler': 4.3.0 + abstract-logging: 2.0.1 + avvio: 8.2.1 + fast-content-type-parse: 1.0.0 + fast-json-stringify: 5.8.0 + find-my-way: 7.6.2 + light-my-request: 5.10.0 + pino: 8.15.0 + process-warning: 2.2.0 + proxy-addr: 2.0.7 + rfdc: 1.3.0 + secure-json-parse: 2.7.0 + semver: 7.5.4 + tiny-lru: 11.0.1 + transitivePeerDependencies: + - supports-color + dev: false + + /fastq@1.15.0: + resolution: {integrity: sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==} + dependencies: + reusify: 1.0.4 + dev: false + + /file-uri-to-path@1.0.0: + resolution: {integrity: sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==} + dev: false + + /find-my-way@7.6.2: + resolution: {integrity: sha512-0OjHn1b1nCX3eVbm9ByeEHiscPYiHLfhei1wOUU9qffQkk98wE0Lo8VrVYfSGMgnSnDh86DxedduAnBf4nwUEw==} + engines: {node: '>=14'} + dependencies: + fast-deep-equal: 3.1.3 + fast-querystring: 1.1.2 + safe-regex2: 2.0.0 + dev: false + + /forwarded@0.2.0: + resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==} + engines: {node: '>= 0.6'} + dev: false + + /ieee754@1.2.1: + resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} + dev: false + + /inherits@2.0.4: + resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + dev: false + + /ipaddr.js@1.9.1: + resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==} + engines: {node: '>= 0.10'} + dev: false + + /jalaali-js@1.2.6: + resolution: {integrity: sha512-io974va+Qyu+UfuVX3UIAgJlxLhAMx9Y8VMfh+IG00Js7hXQo1qNQuwSiSa0xxco0SVgx5HWNkaiCcV+aZ8WPw==} + dev: false + + /js-yaml@4.1.0: + resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} + hasBin: true + dependencies: + argparse: 2.0.1 + dev: false + + /json-schema-traverse@1.0.0: + resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} + dev: false + + /keccak@2.1.0: + resolution: {integrity: sha512-m1wbJRTo+gWbctZWay9i26v5fFnYkOn7D5PCxJ3fZUGUEb49dE1Pm4BREUYCt/aoO6di7jeoGmhvqN9Nzylm3Q==} + engines: {node: '>=5.12.0'} + requiresBuild: true + dependencies: + bindings: 1.5.0 + inherits: 2.0.4 + nan: 2.17.0 + safe-buffer: 5.2.1 + dev: false + + /light-my-request@5.10.0: + resolution: {integrity: sha512-ZU2D9GmAcOUculTTdH9/zryej6n8TzT+fNGdNtm6SDp5MMMpHrJJkvAdE3c6d8d2chE9i+a//dS9CWZtisknqA==} + dependencies: + cookie: 0.5.0 + process-warning: 2.2.0 + set-cookie-parser: 2.6.0 + dev: false + + /lodash.omit@4.5.0: + resolution: {integrity: sha512-XeqSp49hNGmlkj2EJlfrQFIzQ6lXdNro9sddtQzcJY8QaoC2GO0DT7xaIokHeyM+mIT0mPMlPvkYzg2xCuHdZg==} + dev: false + + /lodash.pick@4.4.0: + resolution: {integrity: sha512-hXt6Ul/5yWjfklSGvLQl8vM//l3FtyHZeuelpzK6mm99pNvN9yTDruNZPEJZD1oWrqo+izBmB7oUfWgcCX7s4Q==} + dev: false + + /lru-cache@6.0.0: + resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} + engines: {node: '>=10'} + dependencies: + yallist: 4.0.0 + dev: false + + /moment-timezone@0.5.43: + resolution: {integrity: sha512-72j3aNyuIsDxdF1i7CEgV2FfxM1r6aaqJyLB2vwb33mXYyoyLly+F1zbWqhA3/bVIoJ4szlUoMbUnVdid32NUQ==} + dependencies: + moment: 2.29.4 + dev: false + + /moment@2.29.4: + resolution: {integrity: sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w==} + dev: false + + /mppclone-client@1.1.3: + resolution: {integrity: sha512-5DSkQmZOj823/BPwi6CQa4UWkoAX7itfNxf6L26NJS/qj9AljuKoqnIZxhtSKdak75qZd5Jgx+zD1aXflRNxHg==} + dependencies: + ws: 8.14.0 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + dev: false + + /ms@2.1.2: + resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} + dev: false + + /nan@2.17.0: + resolution: {integrity: sha512-2ZTgtl0nJsO0KQCjEpxcIr5D+Yv90plTitZt9JBfQvVJDS5seMl3FOvsh3+9CoYWXf/1l5OaZzzF6nDm4cagaQ==} + dev: false + + /on-exit-leak-free@2.1.0: + resolution: {integrity: sha512-VuCaZZAjReZ3vUwgOB8LxAosIurDiAW0s13rI1YwmaP++jvcxP77AWoQvenZebpCA2m8WC1/EosPYPMjnRAp/w==} + dev: false + + /pino-abstract-transport@1.0.0: + resolution: {integrity: sha512-c7vo5OpW4wIS42hUVcT5REsL8ZljsUfBjqV/e2sFxmFEFZiq1XLUp5EYLtuDH6PEHq9W1egWqRbnLUP5FuZmOA==} + dependencies: + readable-stream: 4.4.2 + split2: 4.2.0 + dev: false + + /pino-std-serializers@6.2.2: + resolution: {integrity: sha512-cHjPPsE+vhj/tnhCy/wiMh3M3z3h/j15zHQX+S9GkTBgqJuTuJzYJ4gUyACLhDaJ7kk9ba9iRDmbH2tJU03OiA==} + dev: false + + /pino@8.15.0: + resolution: {integrity: sha512-olUADJByk4twxccmAxb1RiGKOSvddHugCV3wkqjyv+3Sooa2KLrmXrKEWOKi0XPCLasRR5jBXxioE1jxUa4KzQ==} + hasBin: true + dependencies: + atomic-sleep: 1.0.0 + fast-redact: 3.3.0 + on-exit-leak-free: 2.1.0 + pino-abstract-transport: 1.0.0 + pino-std-serializers: 6.2.2 + process-warning: 2.2.0 + quick-format-unescaped: 4.0.4 + real-require: 0.2.0 + safe-stable-stringify: 2.4.3 + sonic-boom: 3.3.0 + thread-stream: 2.4.0 + dev: false + + /prepin@1.0.3: + resolution: {integrity: sha512-0XL2hreherEEvUy0fiaGEfN/ioXFV+JpImqIzQjxk6iBg4jQ2ARKqvC4+BmRD8w/pnpD+lbxvh0Ub+z7yBEjvA==} + hasBin: true + dev: false + + /process-warning@2.2.0: + resolution: {integrity: sha512-/1WZ8+VQjR6avWOgHeEPd7SDQmFQ1B5mC1eRXsCm5TarlNmx/wCsa5GEaxGm05BORRtyG/Ex/3xq3TuRvq57qg==} + dev: false + + /process@0.11.10: + resolution: {integrity: sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==} + engines: {node: '>= 0.6.0'} + dev: false + + /proxy-addr@2.0.7: + resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==} + engines: {node: '>= 0.10'} + dependencies: + forwarded: 0.2.0 + ipaddr.js: 1.9.1 + dev: false + + /punycode@2.3.0: + resolution: {integrity: sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==} + engines: {node: '>=6'} + dev: false + + /quick-format-unescaped@4.0.4: + resolution: {integrity: sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg==} + dev: false + + /readable-stream@4.4.2: + resolution: {integrity: sha512-Lk/fICSyIhodxy1IDK2HazkeGjSmezAWX2egdtJnYhtzKEsBPJowlI6F6LPb5tqIQILrMbx22S5o3GuJavPusA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dependencies: + abort-controller: 3.0.0 + buffer: 6.0.3 + events: 3.3.0 + process: 0.11.10 + string_decoder: 1.3.0 + dev: false + + /real-require@0.2.0: + resolution: {integrity: sha512-57frrGM/OCTLqLOAh0mhVA9VBMHd+9U7Zb2THMGdBUoZVOtGbJzjxsYGDJ3A9AYYCP4hn6y1TVbaOfzWtm5GFg==} + engines: {node: '>= 12.13.0'} + dev: false + + /require-from-string@2.0.2: + resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} + engines: {node: '>=0.10.0'} + dev: false + + /ret@0.2.2: + resolution: {integrity: sha512-M0b3YWQs7R3Z917WRQy1HHA7Ba7D8hvZg6UE5mLykJxQVE2ju0IXbGlaHPPlkY+WN7wFP+wUMXmBFA0aV6vYGQ==} + engines: {node: '>=4'} + dev: false + + /reusify@1.0.4: + resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} + engines: {iojs: '>=1.0.0', node: '>=0.10.0'} + dev: false + + /rfdc@1.3.0: + resolution: {integrity: sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==} + dev: false + + /safe-buffer@5.2.1: + resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} + dev: false + + /safe-regex2@2.0.0: + resolution: {integrity: sha512-PaUSFsUaNNuKwkBijoAPHAK6/eM6VirvyPWlZ7BAQy4D+hCvh4B6lIG+nPdhbFfIbP+gTGBcrdsOaUs0F+ZBOQ==} + dependencies: + ret: 0.2.2 + dev: false + + /safe-stable-stringify@2.4.3: + resolution: {integrity: sha512-e2bDA2WJT0wxseVd4lsDP4+3ONX6HpMXQa1ZhFQ7SU+GjvORCmShbCMltrtIDfkYhVHrOcPtj+KhmDBdPdZD1g==} + engines: {node: '>=10'} + dev: false + + /secure-json-parse@2.7.0: + resolution: {integrity: sha512-6aU+Rwsezw7VR8/nyvKTx8QpWH9FrcYiXXlqC4z5d5XQBDRqtbfsRjnwGyqbi3gddNtWHuEk9OANUotL26qKUw==} + dev: false + + /semver@7.5.4: + resolution: {integrity: sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==} + engines: {node: '>=10'} + hasBin: true + dependencies: + lru-cache: 6.0.0 + dev: false + + /set-cookie-parser@2.6.0: + resolution: {integrity: sha512-RVnVQxTXuerk653XfuliOxBP81Sf0+qfQE73LIYKcyMYHG94AuH0kgrQpRDuTZnSmjpysHmzxJXKNfa6PjFhyQ==} + dev: false + + /sonic-boom@3.3.0: + resolution: {integrity: sha512-LYxp34KlZ1a2Jb8ZQgFCK3niIHzibdwtwNUWKg0qQRzsDoJ3Gfgkf8KdBTFU3SkejDEIlWwnSnpVdOZIhFMl/g==} + dependencies: + atomic-sleep: 1.0.0 + dev: false + + /split2@4.2.0: + resolution: {integrity: sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==} + engines: {node: '>= 10.x'} + dev: false + + /string_decoder@1.3.0: + resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} + dependencies: + safe-buffer: 5.2.1 + dev: false + + /thread-stream@2.4.0: + resolution: {integrity: sha512-xZYtOtmnA63zj04Q+F9bdEay5r47bvpo1CaNqsKi7TpoJHcotUez8Fkfo2RJWpW91lnnaApdpRbVwCWsy+ifcw==} + dependencies: + real-require: 0.2.0 + dev: false + + /tiny-lru@11.0.1: + resolution: {integrity: sha512-iNgFugVuQgBKrqeO/mpiTTgmBsTP0WL6yeuLfLs/Ctf0pI/ixGqIRm8sDCwMcXGe9WWvt2sGXI5mNqZbValmJg==} + engines: {node: '>=12'} + dev: false + + /typescript@5.2.2: + resolution: {integrity: sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==} + engines: {node: '>=14.17'} + hasBin: true + + /unique-names-generator@4.7.1: + resolution: {integrity: sha512-lMx9dX+KRmG8sq6gulYYpKWZc9RlGsgBR6aoO8Qsm3qvkSJ+3rAymr+TnV8EDMrIrwuFJ4kruzMWM/OpYzPoow==} + engines: {node: '>=8'} + dev: false + + /uri-js@4.4.1: + resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} + dependencies: + punycode: 2.3.0 + dev: false + + /ws@7.5.9: + resolution: {integrity: sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==} + engines: {node: '>=8.3.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: ^5.0.2 + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + dev: false + + /ws@8.14.0: + resolution: {integrity: sha512-WR0RJE9Ehsio6U4TuM+LmunEsjQ5ncHlw4sn9ihD6RoJKZrVyH9FWV3dmnwu8B2aNib1OvG2X6adUCyFpQyWcg==} + engines: {node: '>=10.0.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: '>=5.0.2' + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + dev: false + + /yallist@4.0.0: + resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} + dev: false + + /yaml@2.3.2: + resolution: {integrity: sha512-N/lyzTPaJasoDmfV7YTrYCI0G/3ivm/9wdG0aHuheKowWQwGTsK0Eoiw6utmzAnI6pkJa0DUVygvp3spqqEKXg==} + engines: {node: '>= 14'} + dev: false + + /zod@3.22.2: + resolution: {integrity: sha512-wvWkphh5WQsJbVk1tbx1l1Ly4yg+XecD+Mq280uBGt9wa5BKSWf4Mhp6GmrkPixhMxmabYY7RbzlwVP32pbGCg==} + dev: false diff --git a/src/http/fastify.ts b/src/http/fastify.ts new file mode 100644 index 0000000..e69de29 diff --git a/src/http/index.ts b/src/http/index.ts new file mode 100644 index 0000000..e69de29 diff --git a/src/http/socket.ts b/src/http/socket.ts new file mode 100644 index 0000000..e69de29 diff --git a/src/index.ts b/src/index.ts new file mode 100644 index 0000000..e69de29 diff --git a/src/util/config.ts b/src/util/config.ts new file mode 100644 index 0000000..b45e11e --- /dev/null +++ b/src/util/config.ts @@ -0,0 +1,15 @@ +import YAML from "yaml"; +import { readFileSync } from "fs"; + +export function loadConfig(filepath: string, def: T) { + try { + const data = readFileSync(filepath).toString(); + const parsed = YAML.parse(data); + + return parsed as T || def; + } catch (err) { + console.error("Unable to load config:", err); + } finally { + return def; + } +} diff --git a/src/util/env.ts b/src/util/env.ts new file mode 100644 index 0000000..fa583ae --- /dev/null +++ b/src/util/env.ts @@ -0,0 +1,19 @@ +import dotenv from "dotenv"; +import { createEnv } from "@t3-oss/env-core"; +import { z } from "zod"; + +dotenv.config(); + +export const env = createEnv({ + server: { + PORT: z.coerce.number(), + SALT: z.string().min(10), + ADMIN_PASS: z.string() + }, + isServer: true, + clientPrefix: "", + client: {}, + runtimeEnv: process.env +}); + +export default env; diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 0000000..85c7aaa --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,111 @@ +{ + "compilerOptions": { + /* Visit https://aka.ms/tsconfig to read more about this file */ + + /* Projects */ + // "incremental": true, /* Save .tsbuildinfo files to allow for incremental compilation of projects. */ + // "composite": true, /* Enable constraints that allow a TypeScript project to be used with project references. */ + // "tsBuildInfoFile": "./.tsbuildinfo", /* Specify the path to .tsbuildinfo incremental compilation file. */ + // "disableSourceOfProjectReferenceRedirect": true, /* Disable preferring source files instead of declaration files when referencing composite projects. */ + // "disableSolutionSearching": true, /* Opt a project out of multi-project reference checking when editing. */ + // "disableReferencedProjectLoad": true, /* Reduce the number of projects loaded automatically by TypeScript. */ + + /* Language and Environment */ + "target": "es2016", /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */ + // "lib": [], /* Specify a set of bundled library declaration files that describe the target runtime environment. */ + // "jsx": "preserve", /* Specify what JSX code is generated. */ + // "experimentalDecorators": true, /* Enable experimental support for legacy experimental decorators. */ + // "emitDecoratorMetadata": true, /* Emit design-type metadata for decorated declarations in source files. */ + // "jsxFactory": "", /* Specify the JSX factory function used when targeting React JSX emit, e.g. 'React.createElement' or 'h'. */ + // "jsxFragmentFactory": "", /* Specify the JSX Fragment reference used for fragments when targeting React JSX emit e.g. 'React.Fragment' or 'Fragment'. */ + // "jsxImportSource": "", /* Specify module specifier used to import the JSX factory functions when using 'jsx: react-jsx*'. */ + // "reactNamespace": "", /* Specify the object invoked for 'createElement'. This only applies when targeting 'react' JSX emit. */ + // "noLib": true, /* Disable including any library files, including the default lib.d.ts. */ + // "useDefineForClassFields": true, /* Emit ECMAScript-standard-compliant class fields. */ + // "moduleDetection": "auto", /* Control what method is used to detect module-format JS files. */ + + /* Modules */ + "module": "commonjs", /* Specify what module code is generated. */ + // "rootDir": "./", /* Specify the root folder within your source files. */ + // "moduleResolution": "node10", /* Specify how TypeScript looks up a file from a given module specifier. */ + // "baseUrl": "./", /* Specify the base directory to resolve non-relative module names. */ + "baseUrl": "./src/", + // "paths": {}, /* Specify a set of entries that re-map imports to additional lookup locations. */ + // "rootDirs": [], /* Allow multiple folders to be treated as one when resolving modules. */ + // "typeRoots": [], /* Specify multiple folders that act like './node_modules/@types'. */ + // "types": [], /* Specify type package names to be included without being referenced in a source file. */ + // "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */ + // "moduleSuffixes": [], /* List of file name suffixes to search when resolving a module. */ + // "allowImportingTsExtensions": true, /* Allow imports to include TypeScript file extensions. Requires '--moduleResolution bundler' and either '--noEmit' or '--emitDeclarationOnly' to be set. */ + // "resolvePackageJsonExports": true, /* Use the package.json 'exports' field when resolving package imports. */ + // "resolvePackageJsonImports": true, /* Use the package.json 'imports' field when resolving imports. */ + // "customConditions": [], /* Conditions to set in addition to the resolver-specific defaults when resolving imports. */ + // "resolveJsonModule": true, /* Enable importing .json files. */ + // "allowArbitraryExtensions": true, /* Enable importing files with any extension, provided a declaration file is present. */ + // "noResolve": true, /* Disallow 'import's, 'require's or ''s from expanding the number of files TypeScript should add to a project. */ + + /* JavaScript Support */ + // "allowJs": true, /* Allow JavaScript files to be a part of your program. Use the 'checkJS' option to get errors from these files. */ + // "checkJs": true, /* Enable error reporting in type-checked JavaScript files. */ + // "maxNodeModuleJsDepth": 1, /* Specify the maximum folder depth used for checking JavaScript files from 'node_modules'. Only applicable with 'allowJs'. */ + + /* Emit */ + // "declaration": true, /* Generate .d.ts files from TypeScript and JavaScript files in your project. */ + // "declarationMap": true, /* Create sourcemaps for d.ts files. */ + // "emitDeclarationOnly": true, /* Only output d.ts files and not JavaScript files. */ + // "sourceMap": true, /* Create source map files for emitted JavaScript files. */ + // "inlineSourceMap": true, /* Include sourcemap files inside the emitted JavaScript. */ + // "outFile": "./", /* Specify a file that bundles all outputs into one JavaScript file. If 'declaration' is true, also designates a file that bundles all .d.ts output. */ + // "outDir": "./", /* Specify an output folder for all emitted files. */ + "outDir": "./out/", + // "removeComments": true, /* Disable emitting comments. */ + // "noEmit": true, /* Disable emitting files from a compilation. */ + // "importHelpers": true, /* Allow importing helper functions from tslib once per project, instead of including them per-file. */ + // "importsNotUsedAsValues": "remove", /* Specify emit/checking behavior for imports that are only used for types. */ + // "downlevelIteration": true, /* Emit more compliant, but verbose and less performant JavaScript for iteration. */ + // "sourceRoot": "", /* Specify the root path for debuggers to find the reference source code. */ + // "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */ + // "inlineSources": true, /* Include source code in the sourcemaps inside the emitted JavaScript. */ + // "emitBOM": true, /* Emit a UTF-8 Byte Order Mark (BOM) in the beginning of output files. */ + // "newLine": "crlf", /* Set the newline character for emitting files. */ + // "stripInternal": true, /* Disable emitting declarations that have '@internal' in their JSDoc comments. */ + // "noEmitHelpers": true, /* Disable generating custom helper functions like '__extends' in compiled output. */ + // "noEmitOnError": true, /* Disable emitting files if any type checking errors are reported. */ + // "preserveConstEnums": true, /* Disable erasing 'const enum' declarations in generated code. */ + // "declarationDir": "./", /* Specify the output directory for generated declaration files. */ + // "preserveValueImports": true, /* Preserve unused imported values in the JavaScript output that would otherwise be removed. */ + + /* Interop Constraints */ + // "isolatedModules": true, /* Ensure that each file can be safely transpiled without relying on other imports. */ + // "verbatimModuleSyntax": true, /* Do not transform or elide any imports or exports not marked as type-only, ensuring they are written in the output file's format based on the 'module' setting. */ + // "allowSyntheticDefaultImports": true, /* Allow 'import x from y' when a module doesn't have a default export. */ + "esModuleInterop": true, /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables 'allowSyntheticDefaultImports' for type compatibility. */ + // "preserveSymlinks": true, /* Disable resolving symlinks to their realpath. This correlates to the same flag in node. */ + "forceConsistentCasingInFileNames": true, /* Ensure that casing is correct in imports. */ + + /* Type Checking */ + "strict": true, /* Enable all strict type-checking options. */ + // "noImplicitAny": true, /* Enable error reporting for expressions and declarations with an implied 'any' type. */ + // "strictNullChecks": true, /* When type checking, take into account 'null' and 'undefined'. */ + // "strictFunctionTypes": true, /* When assigning functions, check to ensure parameters and the return values are subtype-compatible. */ + // "strictBindCallApply": true, /* Check that the arguments for 'bind', 'call', and 'apply' methods match the original function. */ + // "strictPropertyInitialization": true, /* Check for class properties that are declared but not set in the constructor. */ + // "noImplicitThis": true, /* Enable error reporting when 'this' is given the type 'any'. */ + // "useUnknownInCatchVariables": true, /* Default catch clause variables as 'unknown' instead of 'any'. */ + // "alwaysStrict": true, /* Ensure 'use strict' is always emitted. */ + // "noUnusedLocals": true, /* Enable error reporting when local variables aren't read. */ + // "noUnusedParameters": true, /* Raise an error when a function parameter isn't read. */ + // "exactOptionalPropertyTypes": true, /* Interpret optional property types as written, rather than adding 'undefined'. */ + // "noImplicitReturns": true, /* Enable error reporting for codepaths that do not explicitly return in a function. */ + // "noFallthroughCasesInSwitch": true, /* Enable error reporting for fallthrough cases in switch statements. */ + // "noUncheckedIndexedAccess": true, /* Add 'undefined' to a type when accessed using an index. */ + // "noImplicitOverride": true, /* Ensure overriding members in derived classes are marked with an override modifier. */ + // "noPropertyAccessFromIndexSignature": true, /* Enforces using indexed accessors for keys declared using an indexed type. */ + // "allowUnusedLabels": true, /* Disable error reporting for unused labels. */ + // "allowUnreachableCode": true, /* Disable error reporting for unreachable code. */ + + /* Completeness */ + // "skipDefaultLibCheck": true, /* Skip type checking .d.ts files that are included with TypeScript. */ + "skipLibCheck": true /* Skip type checking all .d.ts files. */ + } +}