decentralised sync engine

refactor: start project from new

serenity 6e2b55c3 0fc33067

+3
.example.env
···
+
# port for the lattice server to run on.
+
# defaults to 7338.
+
SERVER_PORT="7338"
+7 -2
eslint.config.mts
···
import js from "@eslint/js";
import globals from "globals";
import tseslint from "typescript-eslint";
-
import { defineConfig } from "eslint/config";
+
import { defineConfig, globalIgnores } from "eslint/config";
export default defineConfig([
+
globalIgnores(["*.config.*", "dist/*"]),
{
files: ["**/*.{js,mjs,cjs,ts,mts,cts}"],
plugins: { js },
···
{
rules: {
"@typescript-eslint/consistent-type-imports": "error",
+
"@typescript-eslint/array-type": ["error", { default: "generic" }],
},
languageOptions: {
-
parserOptions: { projectService: true, tsconfigRootDir: __dirname },
+
parserOptions: {
+
projectService: true,
+
tsconfigRootDir: import.meta.dirname,
+
},
},
},
]);
+5 -4
package.json
···
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
-
"dev": "tsc && tsc-alias && node dist/index.js",
+
"dev": "tsx src/index.ts",
"lint": "eslint src/"
},
"keywords": [],
···
"globals": "^16.4.0",
"jiti": "^2.6.1",
"prettier": "^3.6.2",
-
"ts-node": "^10.9.2",
-
"tsc-alias": "^1.8.16",
-
"tsconfig-paths": "^4.2.0",
+
"tsx": "^4.20.6",
"typescript": "^5.9.3",
"typescript-eslint": "^8.46.0"
},
"dependencies": {
+
"@fastify/websocket": "^11.2.0",
+
"dotenv": "^17.2.3",
+
"fastify": "^5.6.1",
"ws": "^8.18.3",
"zod": "^4.1.12"
}
+660 -259
pnpm-lock.yaml
···
.:
dependencies:
+
'@fastify/websocket':
+
specifier: ^11.2.0
+
version: 11.2.0
+
dotenv:
+
specifier: ^17.2.3
+
version: 17.2.3
+
fastify:
+
specifier: ^5.6.1
+
version: 5.6.1
ws:
specifier: ^8.18.3
version: 8.18.3
···
prettier:
specifier: ^3.6.2
version: 3.6.2
-
ts-node:
-
specifier: ^10.9.2
-
version: 10.9.2(@types/node@24.7.1)(typescript@5.9.3)
-
tsc-alias:
-
specifier: ^1.8.16
-
version: 1.8.16
-
tsconfig-paths:
-
specifier: ^4.2.0
-
version: 4.2.0
+
tsx:
+
specifier: ^4.20.6
+
version: 4.20.6
typescript:
specifier: ^5.9.3
version: 5.9.3
···
packages:
-
'@cspotcode/source-map-support@0.8.1':
-
resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==}
-
engines: {node: '>=12'}
+
'@esbuild/aix-ppc64@0.25.11':
+
resolution: {integrity: sha512-Xt1dOL13m8u0WE8iplx9Ibbm+hFAO0GsU2P34UNoDGvZYkY8ifSiy6Zuc1lYxfG7svWE2fzqCUmFp5HCn51gJg==}
+
engines: {node: '>=18'}
+
cpu: [ppc64]
+
os: [aix]
+
+
'@esbuild/android-arm64@0.25.11':
+
resolution: {integrity: sha512-9slpyFBc4FPPz48+f6jyiXOx/Y4v34TUeDDXJpZqAWQn/08lKGeD8aDp9TMn9jDz2CiEuHwfhRmGBvpnd/PWIQ==}
+
engines: {node: '>=18'}
+
cpu: [arm64]
+
os: [android]
+
+
'@esbuild/android-arm@0.25.11':
+
resolution: {integrity: sha512-uoa7dU+Dt3HYsethkJ1k6Z9YdcHjTrSb5NUy66ZfZaSV8hEYGD5ZHbEMXnqLFlbBflLsl89Zke7CAdDJ4JI+Gg==}
+
engines: {node: '>=18'}
+
cpu: [arm]
+
os: [android]
+
+
'@esbuild/android-x64@0.25.11':
+
resolution: {integrity: sha512-Sgiab4xBjPU1QoPEIqS3Xx+R2lezu0LKIEcYe6pftr56PqPygbB7+szVnzoShbx64MUupqoE0KyRlN7gezbl8g==}
+
engines: {node: '>=18'}
+
cpu: [x64]
+
os: [android]
+
+
'@esbuild/darwin-arm64@0.25.11':
+
resolution: {integrity: sha512-VekY0PBCukppoQrycFxUqkCojnTQhdec0vevUL/EDOCnXd9LKWqD/bHwMPzigIJXPhC59Vd1WFIL57SKs2mg4w==}
+
engines: {node: '>=18'}
+
cpu: [arm64]
+
os: [darwin]
+
+
'@esbuild/darwin-x64@0.25.11':
+
resolution: {integrity: sha512-+hfp3yfBalNEpTGp9loYgbknjR695HkqtY3d3/JjSRUyPg/xd6q+mQqIb5qdywnDxRZykIHs3axEqU6l1+oWEQ==}
+
engines: {node: '>=18'}
+
cpu: [x64]
+
os: [darwin]
+
+
'@esbuild/freebsd-arm64@0.25.11':
+
resolution: {integrity: sha512-CmKjrnayyTJF2eVuO//uSjl/K3KsMIeYeyN7FyDBjsR3lnSJHaXlVoAK8DZa7lXWChbuOk7NjAc7ygAwrnPBhA==}
+
engines: {node: '>=18'}
+
cpu: [arm64]
+
os: [freebsd]
+
+
'@esbuild/freebsd-x64@0.25.11':
+
resolution: {integrity: sha512-Dyq+5oscTJvMaYPvW3x3FLpi2+gSZTCE/1ffdwuM6G1ARang/mb3jvjxs0mw6n3Lsw84ocfo9CrNMqc5lTfGOw==}
+
engines: {node: '>=18'}
+
cpu: [x64]
+
os: [freebsd]
+
+
'@esbuild/linux-arm64@0.25.11':
+
resolution: {integrity: sha512-Qr8AzcplUhGvdyUF08A1kHU3Vr2O88xxP0Tm8GcdVOUm25XYcMPp2YqSVHbLuXzYQMf9Bh/iKx7YPqECs6ffLA==}
+
engines: {node: '>=18'}
+
cpu: [arm64]
+
os: [linux]
+
+
'@esbuild/linux-arm@0.25.11':
+
resolution: {integrity: sha512-TBMv6B4kCfrGJ8cUPo7vd6NECZH/8hPpBHHlYI3qzoYFvWu2AdTvZNuU/7hsbKWqu/COU7NIK12dHAAqBLLXgw==}
+
engines: {node: '>=18'}
+
cpu: [arm]
+
os: [linux]
+
+
'@esbuild/linux-ia32@0.25.11':
+
resolution: {integrity: sha512-TmnJg8BMGPehs5JKrCLqyWTVAvielc615jbkOirATQvWWB1NMXY77oLMzsUjRLa0+ngecEmDGqt5jiDC6bfvOw==}
+
engines: {node: '>=18'}
+
cpu: [ia32]
+
os: [linux]
+
+
'@esbuild/linux-loong64@0.25.11':
+
resolution: {integrity: sha512-DIGXL2+gvDaXlaq8xruNXUJdT5tF+SBbJQKbWy/0J7OhU8gOHOzKmGIlfTTl6nHaCOoipxQbuJi7O++ldrxgMw==}
+
engines: {node: '>=18'}
+
cpu: [loong64]
+
os: [linux]
+
+
'@esbuild/linux-mips64el@0.25.11':
+
resolution: {integrity: sha512-Osx1nALUJu4pU43o9OyjSCXokFkFbyzjXb6VhGIJZQ5JZi8ylCQ9/LFagolPsHtgw6himDSyb5ETSfmp4rpiKQ==}
+
engines: {node: '>=18'}
+
cpu: [mips64el]
+
os: [linux]
+
+
'@esbuild/linux-ppc64@0.25.11':
+
resolution: {integrity: sha512-nbLFgsQQEsBa8XSgSTSlrnBSrpoWh7ioFDUmwo158gIm5NNP+17IYmNWzaIzWmgCxq56vfr34xGkOcZ7jX6CPw==}
+
engines: {node: '>=18'}
+
cpu: [ppc64]
+
os: [linux]
+
+
'@esbuild/linux-riscv64@0.25.11':
+
resolution: {integrity: sha512-HfyAmqZi9uBAbgKYP1yGuI7tSREXwIb438q0nqvlpxAOs3XnZ8RsisRfmVsgV486NdjD7Mw2UrFSw51lzUk1ww==}
+
engines: {node: '>=18'}
+
cpu: [riscv64]
+
os: [linux]
+
+
'@esbuild/linux-s390x@0.25.11':
+
resolution: {integrity: sha512-HjLqVgSSYnVXRisyfmzsH6mXqyvj0SA7pG5g+9W7ESgwA70AXYNpfKBqh1KbTxmQVaYxpzA/SvlB9oclGPbApw==}
+
engines: {node: '>=18'}
+
cpu: [s390x]
+
os: [linux]
+
+
'@esbuild/linux-x64@0.25.11':
+
resolution: {integrity: sha512-HSFAT4+WYjIhrHxKBwGmOOSpphjYkcswF449j6EjsjbinTZbp8PJtjsVK1XFJStdzXdy/jaddAep2FGY+wyFAQ==}
+
engines: {node: '>=18'}
+
cpu: [x64]
+
os: [linux]
+
+
'@esbuild/netbsd-arm64@0.25.11':
+
resolution: {integrity: sha512-hr9Oxj1Fa4r04dNpWr3P8QKVVsjQhqrMSUzZzf+LZcYjZNqhA3IAfPQdEh1FLVUJSiu6sgAwp3OmwBfbFgG2Xg==}
+
engines: {node: '>=18'}
+
cpu: [arm64]
+
os: [netbsd]
+
+
'@esbuild/netbsd-x64@0.25.11':
+
resolution: {integrity: sha512-u7tKA+qbzBydyj0vgpu+5h5AeudxOAGncb8N6C9Kh1N4n7wU1Xw1JDApsRjpShRpXRQlJLb9wY28ELpwdPcZ7A==}
+
engines: {node: '>=18'}
+
cpu: [x64]
+
os: [netbsd]
+
+
'@esbuild/openbsd-arm64@0.25.11':
+
resolution: {integrity: sha512-Qq6YHhayieor3DxFOoYM1q0q1uMFYb7cSpLD2qzDSvK1NAvqFi8Xgivv0cFC6J+hWVw2teCYltyy9/m/14ryHg==}
+
engines: {node: '>=18'}
+
cpu: [arm64]
+
os: [openbsd]
+
+
'@esbuild/openbsd-x64@0.25.11':
+
resolution: {integrity: sha512-CN+7c++kkbrckTOz5hrehxWN7uIhFFlmS/hqziSFVWpAzpWrQoAG4chH+nN3Be+Kzv/uuo7zhX716x3Sn2Jduw==}
+
engines: {node: '>=18'}
+
cpu: [x64]
+
os: [openbsd]
+
+
'@esbuild/openharmony-arm64@0.25.11':
+
resolution: {integrity: sha512-rOREuNIQgaiR+9QuNkbkxubbp8MSO9rONmwP5nKncnWJ9v5jQ4JxFnLu4zDSRPf3x4u+2VN4pM4RdyIzDty/wQ==}
+
engines: {node: '>=18'}
+
cpu: [arm64]
+
os: [openharmony]
+
+
'@esbuild/sunos-x64@0.25.11':
+
resolution: {integrity: sha512-nq2xdYaWxyg9DcIyXkZhcYulC6pQ2FuCgem3LI92IwMgIZ69KHeY8T4Y88pcwoLIjbed8n36CyKoYRDygNSGhA==}
+
engines: {node: '>=18'}
+
cpu: [x64]
+
os: [sunos]
+
+
'@esbuild/win32-arm64@0.25.11':
+
resolution: {integrity: sha512-3XxECOWJq1qMZ3MN8srCJ/QfoLpL+VaxD/WfNRm1O3B4+AZ/BnLVgFbUV3eiRYDMXetciH16dwPbbHqwe1uU0Q==}
+
engines: {node: '>=18'}
+
cpu: [arm64]
+
os: [win32]
+
+
'@esbuild/win32-ia32@0.25.11':
+
resolution: {integrity: sha512-3ukss6gb9XZ8TlRyJlgLn17ecsK4NSQTmdIXRASVsiS2sQ6zPPZklNJT5GR5tE/MUarymmy8kCEf5xPCNCqVOA==}
+
engines: {node: '>=18'}
+
cpu: [ia32]
+
os: [win32]
+
+
'@esbuild/win32-x64@0.25.11':
+
resolution: {integrity: sha512-D7Hpz6A2L4hzsRpPaCYkQnGOotdUpDzSGRIv9I+1ITdHROSFUWW95ZPZWQmGka1Fg7W3zFJowyn9WGwMJ0+KPA==}
+
engines: {node: '>=18'}
+
cpu: [x64]
+
os: [win32]
'@eslint-community/eslint-utils@4.9.0':
resolution: {integrity: sha512-ayVFHdtZ+hsq1t2Dy24wCmGXGe4q9Gu3smhLYALJrr473ZH27MsnSL+LKUlimp4BWJqMDMLmPpx/Q9R3OAlL4g==}
···
resolution: {integrity: sha512-sB5uyeq+dwCWyPi31B2gQlVlo+j5brPlWx4yZBrEaRo/nhdDE8Xke1gsGgtiBdaBTxuTkceLVuVt/pclrasb0A==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+
'@fastify/ajv-compiler@4.0.5':
+
resolution: {integrity: sha512-KoWKW+MhvfTRWL4qrhUwAAZoaChluo0m0vbiJlGMt2GXvL4LVPQEjt8kSpHI3IBq5Rez8fg+XeH3cneztq+C7A==}
+
+
'@fastify/error@4.2.0':
+
resolution: {integrity: sha512-RSo3sVDXfHskiBZKBPRgnQTtIqpi/7zhJOEmAxCiBcM7d0uwdGdxLlsCaLzGs8v8NnxIRlfG0N51p5yFaOentQ==}
+
+
'@fastify/fast-json-stringify-compiler@5.0.3':
+
resolution: {integrity: sha512-uik7yYHkLr6fxd8hJSZ8c+xF4WafPK+XzneQDPU+D10r5X19GW8lJcom2YijX2+qtFF1ENJlHXKFM9ouXNJYgQ==}
+
+
'@fastify/forwarded@3.0.1':
+
resolution: {integrity: sha512-JqDochHFqXs3C3Ml3gOY58zM7OqO9ENqPo0UqAjAjH8L01fRZqwX9iLeX34//kiJubF7r2ZQHtBRU36vONbLlw==}
+
+
'@fastify/merge-json-schemas@0.2.1':
+
resolution: {integrity: sha512-OA3KGBCy6KtIvLf8DINC5880o5iBlDX4SxzLQS8HorJAbqluzLRn80UXU0bxZn7UOFhFgpRJDasfwn9nG4FG4A==}
+
+
'@fastify/proxy-addr@5.1.0':
+
resolution: {integrity: sha512-INS+6gh91cLUjB+PVHfu1UqcB76Sqtpyp7bnL+FYojhjygvOPA9ctiD/JDKsyD9Xgu4hUhCSJBPig/w7duNajw==}
+
+
'@fastify/websocket@11.2.0':
+
resolution: {integrity: sha512-3HrDPbAG1CzUCqnslgJxppvzaAZffieOVbLp1DAy1huCSynUWPifSvfdEDUR8HlJLp3sp1A36uOM2tJogADS8w==}
+
'@humanfs/core@0.19.1':
resolution: {integrity: sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==}
engines: {node: '>=18.18.0'}
···
resolution: {integrity: sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==}
engines: {node: '>=18.18'}
-
'@jridgewell/resolve-uri@3.1.2':
-
resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==}
-
engines: {node: '>=6.0.0'}
-
-
'@jridgewell/sourcemap-codec@1.5.5':
-
resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==}
-
-
'@jridgewell/trace-mapping@0.3.9':
-
resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==}
-
'@nodelib/fs.scandir@2.1.5':
resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==}
engines: {node: '>= 8'}
···
resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==}
engines: {node: '>= 8'}
-
'@tsconfig/node10@1.0.11':
-
resolution: {integrity: sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==}
-
-
'@tsconfig/node12@1.0.11':
-
resolution: {integrity: sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==}
-
-
'@tsconfig/node14@1.0.3':
-
resolution: {integrity: sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==}
-
-
'@tsconfig/node16@1.0.4':
-
resolution: {integrity: sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==}
+
'@pinojs/redact@0.4.0':
+
resolution: {integrity: sha512-k2ENnmBugE/rzQfEcdWHcCY+/FM3VLzH9cYEsbdsoqrvzAKRhUZeRNhAZvB8OitQJ1TBed3yqWtdjzS6wJKBwg==}
'@types/estree@1.0.8':
resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==}
···
resolution: {integrity: sha512-FrvMpAK+hTbFy7vH5j1+tMYHMSKLE6RzluFJlkFNKD0p9YsUT75JlBSmr5so3QRzvMwU5/bIEdeNrxm8du8l3Q==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+
abstract-logging@2.0.1:
+
resolution: {integrity: sha512-2BjRTZxTPvheOvGbBslFSYOUkr+SjPtOnrLP33f+VIWLzezQpZcqVg7ja3L4dBXmzzgwT+a029jRx5PCi3JuiA==}
+
acorn-jsx@5.3.2:
resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==}
peerDependencies:
acorn: ^6.0.0 || ^7.0.0 || ^8.0.0
-
-
acorn-walk@8.3.4:
-
resolution: {integrity: sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==}
-
engines: {node: '>=0.4.0'}
acorn@8.15.0:
resolution: {integrity: sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==}
engines: {node: '>=0.4.0'}
hasBin: true
+
ajv-formats@3.0.1:
+
resolution: {integrity: sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ==}
+
peerDependencies:
+
ajv: ^8.0.0
+
peerDependenciesMeta:
+
ajv:
+
optional: true
+
ajv@6.12.6:
resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==}
+
ajv@8.17.1:
+
resolution: {integrity: sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==}
+
ansi-styles@4.3.0:
resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==}
engines: {node: '>=8'}
-
anymatch@3.1.3:
-
resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==}
-
engines: {node: '>= 8'}
-
-
arg@4.1.3:
-
resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==}
-
argparse@2.0.1:
resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==}
-
array-union@2.1.0:
-
resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==}
-
engines: {node: '>=8'}
+
atomic-sleep@1.0.0:
+
resolution: {integrity: sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==}
+
engines: {node: '>=8.0.0'}
+
+
avvio@9.1.0:
+
resolution: {integrity: sha512-fYASnYi600CsH/j9EQov7lECAniYiBFiiAtBNuZYLA2leLe9qOvZzqYHFjtIj6gD2VMoMLP14834LFWvr4IfDw==}
balanced-match@1.0.2:
resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
-
binary-extensions@2.3.0:
-
resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==}
-
engines: {node: '>=8'}
-
brace-expansion@1.1.12:
resolution: {integrity: sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==}
···
resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==}
engines: {node: '>=10'}
-
chokidar@3.6.0:
-
resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==}
-
engines: {node: '>= 8.10.0'}
-
color-convert@2.0.1:
resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==}
engines: {node: '>=7.0.0'}
···
color-name@1.1.4:
resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
-
commander@9.5.0:
-
resolution: {integrity: sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==}
-
engines: {node: ^12.20.0 || >=14}
-
concat-map@0.0.1:
resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==}
-
create-require@1.1.1:
-
resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==}
+
cookie@1.0.2:
+
resolution: {integrity: sha512-9Kr/j4O16ISv8zBBhJoi4bXOYNTkFLOqSL3UDB0njXxCXNezjeyVrJyGOWtgfs/q2km1gwBcfH8q1yEGoMYunA==}
+
engines: {node: '>=18'}
cross-spawn@7.0.6:
resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==}
···
deep-is@0.1.4:
resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==}
-
diff@4.0.2:
-
resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==}
-
engines: {node: '>=0.3.1'}
+
dequal@2.0.3:
+
resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==}
+
engines: {node: '>=6'}
+
+
dotenv@17.2.3:
+
resolution: {integrity: sha512-JVUnt+DUIzu87TABbhPmNfVdBDt18BLOWjMUFJMSi/Qqg7NTYtabbvSNJGOJ7afbRuv9D/lngizHtP7QyLQ+9w==}
+
engines: {node: '>=12'}
+
+
duplexify@4.1.3:
+
resolution: {integrity: sha512-M3BmBhwJRZsSx38lZyhE53Csddgzl5R7xGJNk7CVddZD6CcmwMCH8J+7AprIrQKH7TonKxaCjcv27Qmf+sQ+oA==}
+
+
end-of-stream@1.4.5:
+
resolution: {integrity: sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==}
-
dir-glob@3.0.1:
-
resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==}
-
engines: {node: '>=8'}
+
esbuild@0.25.11:
+
resolution: {integrity: sha512-KohQwyzrKTQmhXDW1PjCv3Tyspn9n5GcY2RTDqeORIdIJY8yKIF7sTSopFmn/wpMPW4rdPXI0UE5LJLuq3bx0Q==}
+
engines: {node: '>=18'}
+
hasBin: true
escape-string-regexp@4.0.0:
resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==}
···
resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==}
engines: {node: '>=0.10.0'}
+
fast-decode-uri-component@1.0.1:
+
resolution: {integrity: sha512-WKgKWg5eUxvRZGwW8FvfbaH7AXSh2cL+3j5fMGzUMCxWBJ3dV3a7Wz8y2f/uQ0e3B6WmodD3oS54jTQ9HVTIIg==}
+
fast-deep-equal@3.1.3:
resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==}
···
fast-json-stable-stringify@2.1.0:
resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==}
+
+
fast-json-stringify@6.1.1:
+
resolution: {integrity: sha512-DbgptncYEXZqDUOEl4krff4mUiVrTZZVI7BBrQR/T3BqMj/eM1flTC1Uk2uUoLcWCxjT95xKulV/Lc6hhOZsBQ==}
fast-levenshtein@2.0.6:
resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==}
+
fast-querystring@1.1.2:
+
resolution: {integrity: sha512-g6KuKWmFXc0fID8WWH0jit4g0AGBoJhCkJMb1RmbsSEUNvQ+ZC8D6CUZ+GtF8nMzSPXnhiePyyqqipzNNEnHjg==}
+
+
fast-uri@3.1.0:
+
resolution: {integrity: sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==}
+
+
fastify-plugin@5.1.0:
+
resolution: {integrity: sha512-FAIDA8eovSt5qcDgcBvDuX/v0Cjz0ohGhENZ/wpc3y+oZCY2afZ9Baqql3g/lC+OHRnciQol4ww7tuthOb9idw==}
+
+
fastify@5.6.1:
+
resolution: {integrity: sha512-WjjlOciBF0K8pDUPZoGPhqhKrQJ02I8DKaDIfO51EL0kbSMwQFl85cRwhOvmSDWoukNOdTo27gLN549pLCcH7Q==}
+
fastq@1.19.1:
resolution: {integrity: sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==}
···
resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==}
engines: {node: '>=8'}
+
find-my-way@9.3.0:
+
resolution: {integrity: sha512-eRoFWQw+Yv2tuYlK2pjFS2jGXSxSppAs3hSQjfxVKxM5amECzIgYYc1FEI8ZmhSh/Ig+FrKEz43NLRKJjYCZVg==}
+
engines: {node: '>=20'}
+
find-up@5.0.0:
resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==}
engines: {node: '>=10'}
···
engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
os: [darwin]
-
get-tsconfig@4.12.0:
-
resolution: {integrity: sha512-LScr2aNr2FbjAjZh2C6X6BxRx1/x+aTDExct/xyq2XKbYOiG5c0aK7pMsSuyc0brz3ibr/lbQiHD9jzt4lccJw==}
+
get-tsconfig@4.13.0:
+
resolution: {integrity: sha512-1VKTZJCwBrvbd+Wn3AOgQP/2Av+TfTCOlE4AcRJE72W1ksZXbAx8PPBR9RzgTeSPzlPMHrbANMH3LbltH73wxQ==}
glob-parent@5.1.2:
resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==}
···
resolution: {integrity: sha512-ob/2LcVVaVGCYN+r14cnwnoDPUufjiYgSqRhiFD0Q1iI4Odora5RE8Iv1D24hAz5oMophRGkGz+yuvQmmUMnMw==}
engines: {node: '>=18'}
-
globby@11.1.0:
-
resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==}
-
engines: {node: '>=10'}
-
graphemer@1.4.0:
resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==}
···
resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==}
engines: {node: '>=0.8.19'}
-
is-binary-path@2.1.0:
-
resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==}
-
engines: {node: '>=8'}
+
inherits@2.0.4:
+
resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
+
+
ipaddr.js@2.2.0:
+
resolution: {integrity: sha512-Ag3wB2o37wslZS19hZqorUnrnzSkpOVy+IiiDEiTqNubEYpYuHWIf6K4psgN2ZWKExS4xhVCrRVfb/wfW8fWJA==}
+
engines: {node: '>= 10'}
is-extglob@2.1.1:
resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==}
···
json-buffer@3.0.1:
resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==}
+
json-schema-ref-resolver@3.0.0:
+
resolution: {integrity: sha512-hOrZIVL5jyYFjzk7+y7n5JDzGlU8rfWDuYyHwGa2WA8/pcmMHezp2xsVwxrebD/Q9t8Nc5DboieySDpCp4WG4A==}
+
json-schema-traverse@0.4.1:
resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==}
+
json-schema-traverse@1.0.0:
+
resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==}
+
json-stable-stringify-without-jsonify@1.0.1:
resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==}
-
json5@2.2.3:
-
resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==}
-
engines: {node: '>=6'}
-
hasBin: true
-
keyv@4.5.4:
resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==}
···
resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==}
engines: {node: '>= 0.8.0'}
+
light-my-request@6.6.0:
+
resolution: {integrity: sha512-CHYbu8RtboSIoVsHZ6Ye4cj4Aw/yg2oAFimlF7mNvfDV192LR7nDiKtSIfCuLT7KokPSTn/9kfVLm5OGN0A28A==}
+
locate-path@6.0.0:
resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==}
engines: {node: '>=10'}
lodash.merge@4.6.2:
resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==}
-
-
make-error@1.3.6:
-
resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==}
merge2@1.4.1:
resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==}
···
resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==}
engines: {node: '>=16 || 14 >=14.17'}
-
minimist@1.2.8:
-
resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==}
-
ms@2.1.3:
resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}
-
-
mylas@2.1.13:
-
resolution: {integrity: sha512-+MrqnJRtxdF+xngFfUUkIMQrUUL0KsxbADUkn23Z/4ibGg192Q+z+CQyiYwvWTsYjJygmMR8+w3ZDa98Zh6ESg==}
-
engines: {node: '>=12.0.0'}
natural-compare@1.4.0:
resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==}
-
normalize-path@3.0.0:
-
resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==}
-
engines: {node: '>=0.10.0'}
+
on-exit-leak-free@2.1.2:
+
resolution: {integrity: sha512-0eJJY6hXLGf1udHwfNftBqH+g73EU4B504nZeKpz1sYRKafAghwxEJunB2O7rDZkL4PGfsMVnTXZ2EjibbqcsA==}
+
engines: {node: '>=14.0.0'}
+
+
once@1.4.0:
+
resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==}
optionator@0.9.4:
resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==}
···
resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==}
engines: {node: '>=8'}
-
path-type@4.0.0:
-
resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==}
-
engines: {node: '>=8'}
-
picomatch@2.3.1:
resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==}
engines: {node: '>=8.6'}
-
plimit-lit@1.6.1:
-
resolution: {integrity: sha512-B7+VDyb8Tl6oMJT9oSO2CW8XC/T4UcJGrwOVoNGwOQsQYhlpfajmrMj5xeejqaASq3V/EqThyOeATEOMuSEXiA==}
-
engines: {node: '>=12'}
+
pino-abstract-transport@2.0.0:
+
resolution: {integrity: sha512-F63x5tizV6WCh4R6RHyi2Ml+M70DNRXt/+HANowMflpgGFMAym/VKm6G7ZOQRjqN7XbGxK1Lg9t6ZrtzOaivMw==}
+
+
pino-std-serializers@7.0.0:
+
resolution: {integrity: sha512-e906FRY0+tV27iq4juKzSYPbUj2do2X2JX4EzSca1631EB2QJQUqGbDuERal7LCtOpxl6x3+nvo9NPZcmjkiFA==}
+
+
pino@9.14.0:
+
resolution: {integrity: sha512-8OEwKp5juEvb/MjpIc4hjqfgCNysrS94RIOMXYvpYCdm/jglrKEiAYmiumbmGhCvs+IcInsphYDFwqrjr7398w==}
+
hasBin: true
prelude-ls@1.2.1:
resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==}
···
engines: {node: '>=14'}
hasBin: true
+
process-warning@4.0.1:
+
resolution: {integrity: sha512-3c2LzQ3rY9d0hc1emcsHhfT9Jwz0cChib/QN89oME2R451w5fy3f0afAhERFZAwrbDU43wk12d0ORBpDVME50Q==}
+
+
process-warning@5.0.0:
+
resolution: {integrity: sha512-a39t9ApHNx2L4+HBnQKqxxHNs1r7KF+Intd8Q/g1bUh6q0WIp9voPXJ/x0j+ZL45KF1pJd9+q2jLIRMfvEshkA==}
+
punycode@2.3.1:
resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==}
engines: {node: '>=6'}
-
queue-lit@1.5.2:
-
resolution: {integrity: sha512-tLc36IOPeMAubu8BkW8YDBV+WyIgKlYU7zUNs0J5Vk9skSZ4JfGlPOqplP0aHdfv7HL0B2Pg6nwiq60Qc6M2Hw==}
-
engines: {node: '>=12'}
-
queue-microtask@1.2.3:
resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==}
-
readdirp@3.6.0:
-
resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==}
-
engines: {node: '>=8.10.0'}
+
quick-format-unescaped@4.0.4:
+
resolution: {integrity: sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg==}
+
+
readable-stream@3.6.2:
+
resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==}
+
engines: {node: '>= 6'}
+
+
real-require@0.2.0:
+
resolution: {integrity: sha512-57frrGM/OCTLqLOAh0mhVA9VBMHd+9U7Zb2THMGdBUoZVOtGbJzjxsYGDJ3A9AYYCP4hn6y1TVbaOfzWtm5GFg==}
+
engines: {node: '>= 12.13.0'}
+
+
require-from-string@2.0.2:
+
resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==}
+
engines: {node: '>=0.10.0'}
resolve-from@4.0.0:
resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==}
···
resolve-pkg-maps@1.0.0:
resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==}
+
ret@0.5.0:
+
resolution: {integrity: sha512-I1XxrZSQ+oErkRR4jYbAyEEu2I0avBvvMM5JN+6EBprOGRCs63ENqZ3vjavq8fBw2+62G5LF5XelKwuJpcvcxw==}
+
engines: {node: '>=10'}
+
reusify@1.1.0:
resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==}
engines: {iojs: '>=1.0.0', node: '>=0.10.0'}
+
rfdc@1.4.1:
+
resolution: {integrity: sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==}
+
run-parallel@1.2.0:
resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==}
+
+
safe-buffer@5.2.1:
+
resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==}
+
+
safe-regex2@5.0.0:
+
resolution: {integrity: sha512-YwJwe5a51WlK7KbOJREPdjNrpViQBI3p4T50lfwPuDhZnE3XGVTlGvi+aolc5+RvxDD6bnUmjVsU9n1eboLUYw==}
+
+
safe-stable-stringify@2.5.0:
+
resolution: {integrity: sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA==}
+
engines: {node: '>=10'}
+
+
secure-json-parse@4.1.0:
+
resolution: {integrity: sha512-l4KnYfEyqYJxDwlNVyRfO2E4NTHfMKAWdUuA8J0yve2Dz/E/PdBepY03RvyJpssIpRFwJoCD55wA+mEDs6ByWA==}
semver@7.7.3:
resolution: {integrity: sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==}
engines: {node: '>=10'}
hasBin: true
+
set-cookie-parser@2.7.1:
+
resolution: {integrity: sha512-IOc8uWeOZgnb3ptbCURJWNjWUPcO3ZnTTdzsurqERrP6nPyv+paC55vJM0LpOlT2ne+Ix+9+CRG1MNLlyZ4GjQ==}
+
shebang-command@2.0.0:
resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==}
engines: {node: '>=8'}
···
resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==}
engines: {node: '>=8'}
-
slash@3.0.0:
-
resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==}
-
engines: {node: '>=8'}
+
sonic-boom@4.2.0:
+
resolution: {integrity: sha512-INb7TM37/mAcsGmc9hyyI6+QR3rR1zVRu36B0NeGXKnOOLiZOfER5SA+N7X7k3yUYRzLWafduTDvJAfDswwEww==}
-
strip-bom@3.0.0:
-
resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==}
-
engines: {node: '>=4'}
+
split2@4.2.0:
+
resolution: {integrity: sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==}
+
engines: {node: '>= 10.x'}
+
+
stream-shift@1.0.3:
+
resolution: {integrity: sha512-76ORR0DO1o1hlKwTbi/DM3EXWGf3ZJYO8cXX5RJwnul2DEg2oyoZyjLNoQM8WsvZiFKCRfC1O0J7iCvie3RZmQ==}
+
+
string_decoder@1.3.0:
+
resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==}
strip-json-comments@3.1.1:
resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==}
···
resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==}
engines: {node: '>=8'}
+
thread-stream@3.1.0:
+
resolution: {integrity: sha512-OqyPZ9u96VohAyMfJykzmivOrY2wfMSf3C5TtFJVgN+Hm6aj+voFhlK+kZEIv2FBh1X6Xp3DlnCOfEQ3B2J86A==}
+
to-regex-range@5.0.1:
resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
engines: {node: '>=8.0'}
+
toad-cache@3.7.0:
+
resolution: {integrity: sha512-/m8M+2BJUpoJdgAHoG+baCwBT+tf2VraSfkBgl0Y00qIWt41DJ8R5B8nsEw0I58YwF5IZH6z24/2TobDKnqSWw==}
+
engines: {node: '>=12'}
+
ts-api-utils@2.1.0:
resolution: {integrity: sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==}
engines: {node: '>=18.12'}
peerDependencies:
typescript: '>=4.8.4'
-
ts-node@10.9.2:
-
resolution: {integrity: sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==}
+
tsx@4.20.6:
+
resolution: {integrity: sha512-ytQKuwgmrrkDTFP4LjR0ToE2nqgy886GpvRSpU0JAnrdBYppuY5rLkRUYPU1yCryb24SsKBTL/hlDQAEFVwtZg==}
+
engines: {node: '>=18.0.0'}
hasBin: true
-
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
-
-
tsc-alias@1.8.16:
-
resolution: {integrity: sha512-QjCyu55NFyRSBAl6+MTFwplpFcnm2Pq01rR/uxfqJoLMm6X3O14KEGtaSDZpJYaE1bJBGDjD0eSuiIWPe2T58g==}
-
engines: {node: '>=16.20.2'}
-
hasBin: true
-
-
tsconfig-paths@4.2.0:
-
resolution: {integrity: sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg==}
-
engines: {node: '>=6'}
type-check@0.4.0:
resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==}
···
uri-js@4.4.1:
resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==}
-
v8-compile-cache-lib@3.0.1:
-
resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==}
+
util-deprecate@1.0.2:
+
resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==}
which@2.0.2:
resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==}
···
resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==}
engines: {node: '>=0.10.0'}
+
wrappy@1.0.2:
+
resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==}
+
ws@8.18.3:
resolution: {integrity: sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg==}
engines: {node: '>=10.0.0'}
···
utf-8-validate:
optional: true
-
yn@3.1.1:
-
resolution: {integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==}
-
engines: {node: '>=6'}
-
yocto-queue@0.1.0:
resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==}
engines: {node: '>=10'}
···
snapshots:
-
'@cspotcode/source-map-support@0.8.1':
-
dependencies:
-
'@jridgewell/trace-mapping': 0.3.9
+
'@esbuild/aix-ppc64@0.25.11':
+
optional: true
+
+
'@esbuild/android-arm64@0.25.11':
+
optional: true
+
+
'@esbuild/android-arm@0.25.11':
+
optional: true
+
+
'@esbuild/android-x64@0.25.11':
+
optional: true
+
+
'@esbuild/darwin-arm64@0.25.11':
+
optional: true
+
+
'@esbuild/darwin-x64@0.25.11':
+
optional: true
+
+
'@esbuild/freebsd-arm64@0.25.11':
+
optional: true
+
+
'@esbuild/freebsd-x64@0.25.11':
+
optional: true
+
+
'@esbuild/linux-arm64@0.25.11':
+
optional: true
+
+
'@esbuild/linux-arm@0.25.11':
+
optional: true
+
+
'@esbuild/linux-ia32@0.25.11':
+
optional: true
+
+
'@esbuild/linux-loong64@0.25.11':
+
optional: true
+
+
'@esbuild/linux-mips64el@0.25.11':
+
optional: true
+
+
'@esbuild/linux-ppc64@0.25.11':
+
optional: true
+
+
'@esbuild/linux-riscv64@0.25.11':
+
optional: true
+
+
'@esbuild/linux-s390x@0.25.11':
+
optional: true
+
+
'@esbuild/linux-x64@0.25.11':
+
optional: true
+
+
'@esbuild/netbsd-arm64@0.25.11':
+
optional: true
+
+
'@esbuild/netbsd-x64@0.25.11':
+
optional: true
+
+
'@esbuild/openbsd-arm64@0.25.11':
+
optional: true
+
+
'@esbuild/openbsd-x64@0.25.11':
+
optional: true
+
+
'@esbuild/openharmony-arm64@0.25.11':
+
optional: true
+
+
'@esbuild/sunos-x64@0.25.11':
+
optional: true
+
+
'@esbuild/win32-arm64@0.25.11':
+
optional: true
+
+
'@esbuild/win32-ia32@0.25.11':
+
optional: true
+
+
'@esbuild/win32-x64@0.25.11':
+
optional: true
'@eslint-community/eslint-utils@4.9.0(eslint@9.37.0(jiti@2.6.1))':
dependencies:
···
'@eslint/core': 0.16.0
levn: 0.4.1
+
'@fastify/ajv-compiler@4.0.5':
+
dependencies:
+
ajv: 8.17.1
+
ajv-formats: 3.0.1(ajv@8.17.1)
+
fast-uri: 3.1.0
+
+
'@fastify/error@4.2.0': {}
+
+
'@fastify/fast-json-stringify-compiler@5.0.3':
+
dependencies:
+
fast-json-stringify: 6.1.1
+
+
'@fastify/forwarded@3.0.1': {}
+
+
'@fastify/merge-json-schemas@0.2.1':
+
dependencies:
+
dequal: 2.0.3
+
+
'@fastify/proxy-addr@5.1.0':
+
dependencies:
+
'@fastify/forwarded': 3.0.1
+
ipaddr.js: 2.2.0
+
+
'@fastify/websocket@11.2.0':
+
dependencies:
+
duplexify: 4.1.3
+
fastify-plugin: 5.1.0
+
ws: 8.18.3
+
transitivePeerDependencies:
+
- bufferutil
+
- utf-8-validate
+
'@humanfs/core@0.19.1': {}
'@humanfs/node@0.16.7':
···
'@humanwhocodes/retry@0.4.3': {}
-
'@jridgewell/resolve-uri@3.1.2': {}
-
-
'@jridgewell/sourcemap-codec@1.5.5': {}
-
-
'@jridgewell/trace-mapping@0.3.9':
-
dependencies:
-
'@jridgewell/resolve-uri': 3.1.2
-
'@jridgewell/sourcemap-codec': 1.5.5
-
'@nodelib/fs.scandir@2.1.5':
dependencies:
'@nodelib/fs.stat': 2.0.5
···
'@nodelib/fs.scandir': 2.1.5
fastq: 1.19.1
-
'@tsconfig/node10@1.0.11': {}
-
-
'@tsconfig/node12@1.0.11': {}
-
-
'@tsconfig/node14@1.0.3': {}
-
-
'@tsconfig/node16@1.0.4': {}
+
'@pinojs/redact@0.4.0': {}
'@types/estree@1.0.8': {}
···
'@typescript-eslint/types': 8.46.0
eslint-visitor-keys: 4.2.1
-
acorn-jsx@5.3.2(acorn@8.15.0):
-
dependencies:
-
acorn: 8.15.0
+
abstract-logging@2.0.1: {}
-
acorn-walk@8.3.4:
+
acorn-jsx@5.3.2(acorn@8.15.0):
dependencies:
acorn: 8.15.0
acorn@8.15.0: {}
+
+
ajv-formats@3.0.1(ajv@8.17.1):
+
optionalDependencies:
+
ajv: 8.17.1
ajv@6.12.6:
dependencies:
···
json-schema-traverse: 0.4.1
uri-js: 4.4.1
+
ajv@8.17.1:
+
dependencies:
+
fast-deep-equal: 3.1.3
+
fast-uri: 3.1.0
+
json-schema-traverse: 1.0.0
+
require-from-string: 2.0.2
+
ansi-styles@4.3.0:
dependencies:
color-convert: 2.0.1
-
anymatch@3.1.3:
-
dependencies:
-
normalize-path: 3.0.0
-
picomatch: 2.3.1
+
argparse@2.0.1: {}
-
arg@4.1.3: {}
+
atomic-sleep@1.0.0: {}
-
argparse@2.0.1: {}
-
-
array-union@2.1.0: {}
+
avvio@9.1.0:
+
dependencies:
+
'@fastify/error': 4.2.0
+
fastq: 1.19.1
balanced-match@1.0.2: {}
-
-
binary-extensions@2.3.0: {}
brace-expansion@1.1.12:
dependencies:
···
ansi-styles: 4.3.0
supports-color: 7.2.0
-
chokidar@3.6.0:
-
dependencies:
-
anymatch: 3.1.3
-
braces: 3.0.3
-
glob-parent: 5.1.2
-
is-binary-path: 2.1.0
-
is-glob: 4.0.3
-
normalize-path: 3.0.0
-
readdirp: 3.6.0
-
optionalDependencies:
-
fsevents: 2.3.3
-
color-convert@2.0.1:
dependencies:
color-name: 1.1.4
color-name@1.1.4: {}
-
commander@9.5.0: {}
-
concat-map@0.0.1: {}
-
create-require@1.1.1: {}
+
cookie@1.0.2: {}
cross-spawn@7.0.6:
dependencies:
···
deep-is@0.1.4: {}
-
diff@4.0.2: {}
+
dequal@2.0.3: {}
-
dir-glob@3.0.1:
+
dotenv@17.2.3: {}
+
+
duplexify@4.1.3:
dependencies:
-
path-type: 4.0.0
+
end-of-stream: 1.4.5
+
inherits: 2.0.4
+
readable-stream: 3.6.2
+
stream-shift: 1.0.3
+
+
end-of-stream@1.4.5:
+
dependencies:
+
once: 1.4.0
+
+
esbuild@0.25.11:
+
optionalDependencies:
+
'@esbuild/aix-ppc64': 0.25.11
+
'@esbuild/android-arm': 0.25.11
+
'@esbuild/android-arm64': 0.25.11
+
'@esbuild/android-x64': 0.25.11
+
'@esbuild/darwin-arm64': 0.25.11
+
'@esbuild/darwin-x64': 0.25.11
+
'@esbuild/freebsd-arm64': 0.25.11
+
'@esbuild/freebsd-x64': 0.25.11
+
'@esbuild/linux-arm': 0.25.11
+
'@esbuild/linux-arm64': 0.25.11
+
'@esbuild/linux-ia32': 0.25.11
+
'@esbuild/linux-loong64': 0.25.11
+
'@esbuild/linux-mips64el': 0.25.11
+
'@esbuild/linux-ppc64': 0.25.11
+
'@esbuild/linux-riscv64': 0.25.11
+
'@esbuild/linux-s390x': 0.25.11
+
'@esbuild/linux-x64': 0.25.11
+
'@esbuild/netbsd-arm64': 0.25.11
+
'@esbuild/netbsd-x64': 0.25.11
+
'@esbuild/openbsd-arm64': 0.25.11
+
'@esbuild/openbsd-x64': 0.25.11
+
'@esbuild/openharmony-arm64': 0.25.11
+
'@esbuild/sunos-x64': 0.25.11
+
'@esbuild/win32-arm64': 0.25.11
+
'@esbuild/win32-ia32': 0.25.11
+
'@esbuild/win32-x64': 0.25.11
escape-string-regexp@4.0.0: {}
···
esutils@2.0.3: {}
+
fast-decode-uri-component@1.0.1: {}
+
fast-deep-equal@3.1.3: {}
fast-glob@3.3.3:
···
fast-json-stable-stringify@2.1.0: {}
+
fast-json-stringify@6.1.1:
+
dependencies:
+
'@fastify/merge-json-schemas': 0.2.1
+
ajv: 8.17.1
+
ajv-formats: 3.0.1(ajv@8.17.1)
+
fast-uri: 3.1.0
+
json-schema-ref-resolver: 3.0.0
+
rfdc: 1.4.1
+
fast-levenshtein@2.0.6: {}
+
fast-querystring@1.1.2:
+
dependencies:
+
fast-decode-uri-component: 1.0.1
+
+
fast-uri@3.1.0: {}
+
+
fastify-plugin@5.1.0: {}
+
+
fastify@5.6.1:
+
dependencies:
+
'@fastify/ajv-compiler': 4.0.5
+
'@fastify/error': 4.2.0
+
'@fastify/fast-json-stringify-compiler': 5.0.3
+
'@fastify/proxy-addr': 5.1.0
+
abstract-logging: 2.0.1
+
avvio: 9.1.0
+
fast-json-stringify: 6.1.1
+
find-my-way: 9.3.0
+
light-my-request: 6.6.0
+
pino: 9.14.0
+
process-warning: 5.0.0
+
rfdc: 1.4.1
+
secure-json-parse: 4.1.0
+
semver: 7.7.3
+
toad-cache: 3.7.0
+
fastq@1.19.1:
dependencies:
reusify: 1.1.0
···
dependencies:
to-regex-range: 5.0.1
+
find-my-way@9.3.0:
+
dependencies:
+
fast-deep-equal: 3.1.3
+
fast-querystring: 1.1.2
+
safe-regex2: 5.0.0
+
find-up@5.0.0:
dependencies:
locate-path: 6.0.0
···
fsevents@2.3.3:
optional: true
-
get-tsconfig@4.12.0:
+
get-tsconfig@4.13.0:
dependencies:
resolve-pkg-maps: 1.0.0
···
globals@16.4.0: {}
-
globby@11.1.0:
-
dependencies:
-
array-union: 2.1.0
-
dir-glob: 3.0.1
-
fast-glob: 3.3.3
-
ignore: 5.3.2
-
merge2: 1.4.1
-
slash: 3.0.0
-
graphemer@1.4.0: {}
has-flag@4.0.0: {}
···
imurmurhash@0.1.4: {}
-
is-binary-path@2.1.0:
-
dependencies:
-
binary-extensions: 2.3.0
+
inherits@2.0.4: {}
+
+
ipaddr.js@2.2.0: {}
is-extglob@2.1.1: {}
···
json-buffer@3.0.1: {}
+
json-schema-ref-resolver@3.0.0:
+
dependencies:
+
dequal: 2.0.3
+
json-schema-traverse@0.4.1: {}
-
json-stable-stringify-without-jsonify@1.0.1: {}
+
json-schema-traverse@1.0.0: {}
-
json5@2.2.3: {}
+
json-stable-stringify-without-jsonify@1.0.1: {}
keyv@4.5.4:
dependencies:
···
prelude-ls: 1.2.1
type-check: 0.4.0
+
light-my-request@6.6.0:
+
dependencies:
+
cookie: 1.0.2
+
process-warning: 4.0.1
+
set-cookie-parser: 2.7.1
+
locate-path@6.0.0:
dependencies:
p-locate: 5.0.0
lodash.merge@4.6.2: {}
-
make-error@1.3.6: {}
-
merge2@1.4.1: {}
micromatch@4.0.8:
···
dependencies:
brace-expansion: 2.0.2
-
minimist@1.2.8: {}
-
ms@2.1.3: {}
-
mylas@2.1.13: {}
-
natural-compare@1.4.0: {}
-
normalize-path@3.0.0: {}
+
on-exit-leak-free@2.1.2: {}
+
+
once@1.4.0:
+
dependencies:
+
wrappy: 1.0.2
optionator@0.9.4:
dependencies:
···
path-key@3.1.1: {}
-
path-type@4.0.0: {}
+
picomatch@2.3.1: {}
+
+
pino-abstract-transport@2.0.0:
+
dependencies:
+
split2: 4.2.0
-
picomatch@2.3.1: {}
+
pino-std-serializers@7.0.0: {}
-
plimit-lit@1.6.1:
+
pino@9.14.0:
dependencies:
-
queue-lit: 1.5.2
+
'@pinojs/redact': 0.4.0
+
atomic-sleep: 1.0.0
+
on-exit-leak-free: 2.1.2
+
pino-abstract-transport: 2.0.0
+
pino-std-serializers: 7.0.0
+
process-warning: 5.0.0
+
quick-format-unescaped: 4.0.4
+
real-require: 0.2.0
+
safe-stable-stringify: 2.5.0
+
sonic-boom: 4.2.0
+
thread-stream: 3.1.0
prelude-ls@1.2.1: {}
prettier@3.6.2: {}
-
punycode@2.3.1: {}
+
process-warning@4.0.1: {}
-
queue-lit@1.5.2: {}
+
process-warning@5.0.0: {}
+
+
punycode@2.3.1: {}
queue-microtask@1.2.3: {}
-
readdirp@3.6.0:
+
quick-format-unescaped@4.0.4: {}
+
+
readable-stream@3.6.2:
dependencies:
-
picomatch: 2.3.1
+
inherits: 2.0.4
+
string_decoder: 1.3.0
+
util-deprecate: 1.0.2
+
+
real-require@0.2.0: {}
+
+
require-from-string@2.0.2: {}
resolve-from@4.0.0: {}
resolve-pkg-maps@1.0.0: {}
+
ret@0.5.0: {}
+
reusify@1.1.0: {}
+
rfdc@1.4.1: {}
+
run-parallel@1.2.0:
dependencies:
queue-microtask: 1.2.3
+
safe-buffer@5.2.1: {}
+
+
safe-regex2@5.0.0:
+
dependencies:
+
ret: 0.5.0
+
+
safe-stable-stringify@2.5.0: {}
+
+
secure-json-parse@4.1.0: {}
+
semver@7.7.3: {}
+
+
set-cookie-parser@2.7.1: {}
shebang-command@2.0.0:
dependencies:
···
shebang-regex@3.0.0: {}
-
slash@3.0.0: {}
+
sonic-boom@4.2.0:
+
dependencies:
+
atomic-sleep: 1.0.0
-
strip-bom@3.0.0: {}
+
split2@4.2.0: {}
+
+
stream-shift@1.0.3: {}
+
+
string_decoder@1.3.0:
+
dependencies:
+
safe-buffer: 5.2.1
strip-json-comments@3.1.1: {}
···
dependencies:
has-flag: 4.0.0
+
thread-stream@3.1.0:
+
dependencies:
+
real-require: 0.2.0
+
to-regex-range@5.0.1:
dependencies:
is-number: 7.0.0
+
toad-cache@3.7.0: {}
+
ts-api-utils@2.1.0(typescript@5.9.3):
dependencies:
typescript: 5.9.3
-
ts-node@10.9.2(@types/node@24.7.1)(typescript@5.9.3):
+
tsx@4.20.6:
dependencies:
-
'@cspotcode/source-map-support': 0.8.1
-
'@tsconfig/node10': 1.0.11
-
'@tsconfig/node12': 1.0.11
-
'@tsconfig/node14': 1.0.3
-
'@tsconfig/node16': 1.0.4
-
'@types/node': 24.7.1
-
acorn: 8.15.0
-
acorn-walk: 8.3.4
-
arg: 4.1.3
-
create-require: 1.1.1
-
diff: 4.0.2
-
make-error: 1.3.6
-
typescript: 5.9.3
-
v8-compile-cache-lib: 3.0.1
-
yn: 3.1.1
-
-
tsc-alias@1.8.16:
-
dependencies:
-
chokidar: 3.6.0
-
commander: 9.5.0
-
get-tsconfig: 4.12.0
-
globby: 11.1.0
-
mylas: 2.1.13
-
normalize-path: 3.0.0
-
plimit-lit: 1.6.1
-
-
tsconfig-paths@4.2.0:
-
dependencies:
-
json5: 2.2.3
-
minimist: 1.2.8
-
strip-bom: 3.0.0
+
esbuild: 0.25.11
+
get-tsconfig: 4.13.0
+
optionalDependencies:
+
fsevents: 2.3.3
type-check@0.4.0:
dependencies:
···
dependencies:
punycode: 2.3.1
-
v8-compile-cache-lib@3.0.1: {}
+
util-deprecate@1.0.2: {}
which@2.0.2:
dependencies:
···
word-wrap@1.2.5: {}
-
ws@8.18.3: {}
+
wrappy@1.0.2: {}
-
yn@3.1.1: {}
+
ws@8.18.3: {}
yocto-queue@0.1.0: {}
+43
src/index.old.ts
···
+
import type { ShardMessage } from "@/lib/types/messages";
+
import { rawDataToString } from "@/lib/utils";
+
import { validateNewMessage } from "@/lib/validators";
+
import type { RawData } from "ws";
+
import WebSocket from "ws";
+
+
const wss = new WebSocket.Server({ port: 8080 });
+
+
const messages: ShardMessage[] = [];
+
const clients = new Set<WebSocket>();
+
+
wss.on("connection", (ws) => {
+
clients.add(ws);
+
+
ws.send(
+
JSON.stringify({
+
type: "shard/history",
+
messages: messages,
+
}),
+
);
+
+
ws.on("message", (data: RawData) => {
+
const jsonText = rawDataToString(data);
+
const jsonData: unknown = JSON.parse(jsonText);
+
+
const shardMessage = validateNewMessage(jsonData);
+
if (!shardMessage) return;
+
+
messages.push(shardMessage);
+
+
clients.forEach((client) => {
+
if (client.readyState === WebSocket.OPEN) {
+
client.send(JSON.stringify(shardMessage));
+
}
+
});
+
});
+
+
ws.on("close", () => {
+
clients.delete(ws);
+
});
+
});
+
+
console.log("Server running on ws://localhost:8080");
+37 -38
src/index.ts
···
-
import type { ShardMessage } from "@/lib/types/messages";
-
import { rawDataToString } from "@/lib/utils";
-
import { validateNewMessage } from "@/lib/validators";
-
import type { RawData } from "ws";
-
import WebSocket from "ws";
+
import { SERVER_PORT } from "@/lib/env";
+
import { routes } from "@/routes";
+
import { setupServer } from "@/server";
-
const wss = new WebSocket.Server({ port: 8080 });
-
-
const messages: ShardMessage[] = [];
-
const clients = new Set<WebSocket>();
-
-
wss.on("connection", (ws) => {
-
clients.add(ws);
+
const main = async () => {
+
const server = await setupServer();
+
for (const [url, route] of Object.entries(routes)) {
+
if (!route.wsHandler) {
+
const { handler, method } = route;
+
server.route({
+
url,
+
method,
+
handler,
+
});
+
} else {
+
const { wsHandler, method, handler } = route;
+
server.route({
+
url,
+
method: method ?? "GET",
+
handler: handler ?? (() => new Response()),
+
wsHandler,
+
});
+
}
+
}
-
ws.send(
-
JSON.stringify({
-
type: "shard/history",
-
messages: messages,
-
}),
-
);
-
-
ws.on("message", (data: RawData) => {
-
const jsonText = rawDataToString(data);
-
const jsonData: unknown = JSON.parse(jsonText);
-
-
const shardMessage = validateNewMessage(jsonData);
-
if (!shardMessage) return;
-
-
messages.push(shardMessage);
-
-
clients.forEach((client) => {
-
if (client.readyState === WebSocket.OPEN) {
-
client.send(JSON.stringify(shardMessage));
-
}
-
});
+
server.listen({ port: SERVER_PORT }).catch((err: unknown) => {
+
server.log.error(err);
+
process.exit(1);
});
+
};
-
ws.on("close", () => {
-
clients.delete(ws);
+
main()
+
.then(() => {
+
console.log(`Server is running on port ${SERVER_PORT.toString()}`);
+
})
+
.catch((err: unknown) => {
+
console.error("Something went wrong :(");
+
console.error(
+
"=========================== FULL ERROR BELOW ===========================",
+
);
+
console.error(err);
});
-
});
-
-
console.log("Server running on ws://localhost:8080");
+14
src/lib/env.ts
···
+
import "dotenv/config";
+
+
const nodeEnv = process.env.NODE_ENV;
+
export const NODE_ENV = nodeEnv ?? "development";
+
+
export const isDev = NODE_ENV === "development";
+
export const __DEV__ = isDev;
+
+
const serverPort = process.env.SERVER_PORT;
+
if (!serverPort)
+
console.warn(
+
"Environment variable SERVER_PORT not set. Defaulting to 7338",
+
);
+
export const SERVER_PORT = Number.parseInt(serverPort ?? "7338");
+26
src/lib/types/routes.ts
···
+
import type { FastifyReply, FastifyRequest } from "fastify";
+
import type { WebSocket } from "ws";
+
+
export type RouteHandler = (
+
req: FastifyRequest,
+
reply: FastifyReply,
+
) => Response | Promise<Response>;
+
+
export type Method = "GET" | "POST" | "PUT" | "DELETE" | "PATCH";
+
+
export interface Route {
+
method: Method;
+
handler: RouteHandler;
+
wsHandler?: undefined;
+
}
+
+
export type WsRouteHandler = (
+
socket: WebSocket,
+
req: FastifyRequest | undefined,
+
) => void;
+
+
export interface WsRoute {
+
method?: Method;
+
handler?: RouteHandler;
+
wsHandler: WsRouteHandler;
+
}
+6
src/routes/index.ts
···
+
import type { Route, WsRoute } from "@/lib/types/routes";
+
import { indexRoute } from "@/routes/route";
+
+
export const routes: Record<string, Route | WsRoute> = {
+
"/": indexRoute,
+
};
+10
src/routes/route.ts
···
+
import type { Route } from "@/lib/types/routes";
+
+
export const indexRoute: Route = {
+
method: "GET",
+
handler: () => {
+
return new Response("this is a gemstone systems lattice", {
+
headers: { "content-type": "text/plain; charset=utf-8" },
+
});
+
},
+
};
+12
src/server/index.ts
···
+
import websocket from "@fastify/websocket";
+
import Fastify from "fastify";
+
+
export const setupServer = async () => {
+
const fastify = Fastify({
+
logger: true,
+
});
+
+
await fastify.register(websocket);
+
+
return fastify;
+
};
+2 -7
tsconfig.json
···
/* Modules */
"module": "nodenext" /* Specify what module code is generated. */,
"rootDir": "./src/" /* Specify the root folder within your source files. */,
-
"moduleResolution": "nodenext" /* Specify how TypeScript looks up a file from a given module specifier. */,
+
"moduleResolution": "bundler" /* Specify how TypeScript looks up a file from a given module specifier. */,
"baseUrl": "./" /* Specify the base directory to resolve non-relative module names. */,
"paths": {
"@/*": [
···
"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. */,
+
"declaration": false /* 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. */,
···
{
"name": "next"
}
-
]
-
},
-
"ts-node": {
-
"require": [
-
"tsconfig-paths/register"
]
},
"include": [