diff --git a/libs/contract/commands/handler/add-user.command.ts b/libs/contract/commands/handler/add-user.command.ts index 8fcca73..d36b094 100644 --- a/libs/contract/commands/handler/add-user.command.ts +++ b/libs/contract/commands/handler/add-user.command.ts @@ -35,7 +35,7 @@ export namespace AddUserCommand { tag: z.string(), username: z.string(), password: z.string(), - cipherType: z.nativeEnum(CipherType), + cipherType: z.enum(CipherType), ivCheck: z.boolean(), }); @@ -64,8 +64,8 @@ export namespace AddUserCommand { ]), ), hashData: z.object({ - vlessUuid: z.string().uuid(), - prevVlessUuid: z.optional(z.string().uuid()), + vlessUuid: z.uuid(), + prevVlessUuid: z.optional(z.uuid()), }), }); diff --git a/libs/contract/commands/handler/add-users.command.ts b/libs/contract/commands/handler/add-users.command.ts index c724266..55e9b67 100644 --- a/libs/contract/commands/handler/add-users.command.ts +++ b/libs/contract/commands/handler/add-users.command.ts @@ -47,8 +47,8 @@ export namespace AddUsersCommand { userData: z.object({ userId: z.string(), - hashUuid: z.string().uuid(), - vlessUuid: z.string().uuid(), + hashUuid: z.uuid(), + vlessUuid: z.uuid(), trojanPassword: z.string(), ssPassword: z.string(), }), diff --git a/libs/contract/commands/handler/remove-user.command.ts b/libs/contract/commands/handler/remove-user.command.ts index cc1e75c..a3df754 100644 --- a/libs/contract/commands/handler/remove-user.command.ts +++ b/libs/contract/commands/handler/remove-user.command.ts @@ -8,7 +8,7 @@ export namespace RemoveUserCommand { export const RequestSchema = z.object({ username: z.string(), hashData: z.object({ - vlessUuid: z.string().uuid(), + vlessUuid: z.uuid(), }), }); diff --git a/libs/contract/commands/handler/remove-users.command.ts b/libs/contract/commands/handler/remove-users.command.ts index 93f6326..e6d0008 100644 --- a/libs/contract/commands/handler/remove-users.command.ts +++ b/libs/contract/commands/handler/remove-users.command.ts @@ -9,7 +9,7 @@ export namespace RemoveUsersCommand { users: z.array( z.object({ userId: z.string(), - hashUuid: z.string().uuid(), + hashUuid: z.uuid(), }), ), }); diff --git a/libs/contract/commands/plugin/nftables/block-ips.schema.ts b/libs/contract/commands/plugin/nftables/block-ips.schema.ts index 19c7861..744b86f 100644 --- a/libs/contract/commands/plugin/nftables/block-ips.schema.ts +++ b/libs/contract/commands/plugin/nftables/block-ips.schema.ts @@ -8,7 +8,7 @@ export namespace BlockIpsCommand { export const RequestSchema = z.object({ ips: z.array( z.object({ - ip: z.string().ip(), + ip: z.union([z.ipv4(), z.ipv6()]), timeout: z.number(), }), ), diff --git a/libs/contract/commands/plugin/nftables/unblock-ips.schema.ts b/libs/contract/commands/plugin/nftables/unblock-ips.schema.ts index ad28c17..ba74c44 100644 --- a/libs/contract/commands/plugin/nftables/unblock-ips.schema.ts +++ b/libs/contract/commands/plugin/nftables/unblock-ips.schema.ts @@ -6,7 +6,7 @@ export namespace UnblockIpsCommand { export const url = REST_API.PLUGIN.NFTABLES.UNBLOCK_IPS; export const RequestSchema = z.object({ - ips: z.array(z.string().ip()), + ips: z.array(z.union([z.ipv4(), z.ipv6()])), }); export type Request = z.infer; diff --git a/libs/contract/commands/plugin/sync.command.ts b/libs/contract/commands/plugin/sync.command.ts index 1471fd8..f805d0f 100644 --- a/libs/contract/commands/plugin/sync.command.ts +++ b/libs/contract/commands/plugin/sync.command.ts @@ -7,8 +7,8 @@ export namespace SyncCommand { export const RequestSchema = z.object({ plugin: z .object({ - config: z.record(z.unknown()), - uuid: z.string().uuid(), + config: z.record(z.string(), z.unknown()), + uuid: z.uuid(), name: z.string(), }) .nullable(), diff --git a/libs/contract/commands/stats/get-user-ip-list.command.ts b/libs/contract/commands/stats/get-user-ip-list.command.ts index 6e33326..f3b18b4 100644 --- a/libs/contract/commands/stats/get-user-ip-list.command.ts +++ b/libs/contract/commands/stats/get-user-ip-list.command.ts @@ -15,9 +15,8 @@ export namespace GetUserIpListCommand { ips: z.array( z.object({ ip: z.string(), - lastSeen: z - .string() - .datetime({ local: true, offset: true, message: 'Invalid date format' }) + lastSeen: z.iso + .datetime({ local: true, offset: true }) .transform((str) => new Date(str)), }), ), diff --git a/libs/contract/commands/stats/get-users-ip-list.command.ts b/libs/contract/commands/stats/get-users-ip-list.command.ts index 3eb20bd..0ab42fc 100644 --- a/libs/contract/commands/stats/get-users-ip-list.command.ts +++ b/libs/contract/commands/stats/get-users-ip-list.command.ts @@ -12,8 +12,7 @@ export namespace GetUsersIpListCommand { ips: z.array( z.object({ ip: z.string(), - lastSeen: z - .string() + lastSeen: z.iso .datetime({ local: true, offset: true, diff --git a/libs/contract/commands/xray/start.command.ts b/libs/contract/commands/xray/start.command.ts index 9c9e2dd..4af6776 100644 --- a/libs/contract/commands/xray/start.command.ts +++ b/libs/contract/commands/xray/start.command.ts @@ -19,7 +19,7 @@ export namespace StartXrayCommand { ), }), }), - xrayConfig: z.record(z.unknown()), + xrayConfig: z.record(z.string(), z.unknown()), }); export type Request = z.infer; diff --git a/libs/contract/models/node-system.schema.ts b/libs/contract/models/node-system.schema.ts index 3c237b8..c7e355a 100644 --- a/libs/contract/models/node-system.schema.ts +++ b/libs/contract/models/node-system.schema.ts @@ -10,7 +10,7 @@ export const NetworkInterfaceSchema = z.object({ export const NodeSystemInfoSchema = z.object({ arch: z.string(), - cpus: z.number().int(), + cpus: z.int(), cpuModel: z.string(), memoryTotal: z.number(), hostname: z.string(), diff --git a/libs/contract/package.json b/libs/contract/package.json index 412b52a..2e4b6d8 100644 --- a/libs/contract/package.json +++ b/libs/contract/package.json @@ -1,31 +1,31 @@ { "name": "@remnawave/node-contract", - "version": "2.7.0", + "version": "2.9.0", "description": "A node-contract library for Remnawave Panel", - "main": "build/index.js", - "types": "build/index.d.ts", - "files": [ - "build/**/*" - ], - "scripts": { - "prepublish": "rm -rf build && tsc", - "build": "tsc" - }, "keywords": [], - "author": "Remnawave", "homepage": "https://github.com/remnawave", - "repository": { - "type": "git", - "url": "https://github.com/remnawave/node" - }, "bugs": { "url": "https://github.com/remnawave/node/issues" }, "license": "AGPL-3.0-only", + "author": "Remnawave", + "repository": { + "type": "git", + "url": "https://github.com/remnawave/node" + }, + "files": [ + "build/**/*" + ], + "main": "build/index.js", + "types": "build/index.d.ts", + "scripts": { + "prepublish": "rm -rf build && tsc", + "build": "tsc" + }, "dependencies": { - "zod": "^3.25.76" + "zod": "4.4.3" }, "devDependencies": { - "typescript": "5.9.3" + "typescript": "~5.9.3" } -} \ No newline at end of file +} diff --git a/package-lock.json b/package-lock.json index 59ea45f..1363e46 100644 --- a/package-lock.json +++ b/package-lock.json @@ -20,7 +20,7 @@ "@nestjs/platform-express": "11.1.27", "@nestjs/schedule": "^6.1.3", "@remnawave/hashed-set": "^0.0.4", - "@remnawave/node-plugins": "0.4.5", + "@remnawave/node-plugins": "0.5.0", "@remnawave/xtls-sdk": "0.16.0", "@remnawave/xtls-sdk-nestjs": "0.6.1", "compression": "^1.8.1", @@ -31,12 +31,12 @@ "lmdb": "^3.5.6", "morgan": "^1.11.0", "nest-winston": "^1.10.2", - "nestjs-zod": "4.3.1", + "nestjs-zod": "5.4.0", "nftables-napi": "0.5.0", "nice-grpc": "^2.1.16", "node-object-hash": "^3.1.1", "object-hash": "^3.0.0", - "p-map": "^7.0.4", + "p-map": "^7.0.5", "p-retry": "^8.0.0", "passport": "0.7.0", "passport-jwt": "4.0.1", @@ -46,7 +46,7 @@ "semver": "^7.8.5", "sockdestroy": "1.4.0", "winston": "^3.19.0", - "zod": "3.25.76" + "zod": "4.4.3" }, "bin": { "cli": "dist/cli.js" @@ -63,9 +63,9 @@ "@types/semver": "^7.7.1", "eslint-plugin-perfectionist": "5.9.1", "knip": "^5.73.3", - "nf3": "^0.3.17", - "oxfmt": "^0.56.0", - "oxlint": "^1.71.0", + "nf3": "^0.3.19", + "oxfmt": "^0.57.0", + "oxlint": "^1.72.0", "source-map-support": "^0.5.21", "ts-loader": "9.5.4", "ts-node": "10.9.2", @@ -1380,32 +1380,6 @@ "@emnapi/runtime": "^1.7.1" } }, - "node_modules/@nest-zod/z": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@nest-zod/z/-/z-2.0.0.tgz", - "integrity": "sha512-OqmJUZlpcx9ECzPYSIjaR/q/xLKrm9FkV+0FIWLEb9MVc9YeP21GmnQJBxE1dPRlLJ1kybNFBlt4D/PB8YAPkA==", - "license": "MIT", - "peerDependencies": { - "@nestjs/common": "^10.0.0 || ^11.0.0", - "@nestjs/core": "^10.0.0 || ^11.0.0", - "@nestjs/swagger": "^7.4.2 || ^8.0.0 || ^11.0.0", - "zod": ">= 3.14.3" - }, - "peerDependenciesMeta": { - "@nestjs/common": { - "optional": true - }, - "@nestjs/core": { - "optional": true - }, - "@nestjs/swagger": { - "optional": true - }, - "zod": { - "optional": false - } - } - }, "node_modules/@nestjs/cli": { "version": "11.0.23", "resolved": "https://registry.npmjs.org/@nestjs/cli/-/cli-11.0.23.tgz", @@ -2021,9 +1995,9 @@ ] }, "node_modules/@oxfmt/binding-android-arm-eabi": { - "version": "0.56.0", - "resolved": "https://registry.npmjs.org/@oxfmt/binding-android-arm-eabi/-/binding-android-arm-eabi-0.56.0.tgz", - "integrity": "sha512-CSCxi7ovYojgfdPOdUb9T508HKeAdDIKeRGg7x8IZwVJrWz9gVgX7MbUnFqtQAE4QvoNo07mj2JlwnOzJw4qqA==", + "version": "0.57.0", + "resolved": "https://registry.npmjs.org/@oxfmt/binding-android-arm-eabi/-/binding-android-arm-eabi-0.57.0.tgz", + "integrity": "sha512-qVBsEO+KugOsCmUHcO8iqNnqc65p7PCKpCs8M66mPZ+Ri+CWbcpoQOEJBg2OTu03+0qu++NK1jj6IzvQVs0Sig==", "cpu": [ "arm" ], @@ -2038,9 +2012,9 @@ } }, "node_modules/@oxfmt/binding-android-arm64": { - "version": "0.56.0", - "resolved": "https://registry.npmjs.org/@oxfmt/binding-android-arm64/-/binding-android-arm64-0.56.0.tgz", - "integrity": "sha512-HYJFnd+PkDwf6S9ZPGzXXtjNqvRWFnnhdbWaouh4mi/SxU8wmDuzlMn3xo/wDTGnr4Q1VA7ZzOaE/D4biW0W6A==", + "version": "0.57.0", + "resolved": "https://registry.npmjs.org/@oxfmt/binding-android-arm64/-/binding-android-arm64-0.57.0.tgz", + "integrity": "sha512-mp6PibWbao3aizijcheOeHQaYEhcUAt8pwLniYbtLfHxL/psFF0BykAwCj+s3c6qIpa8yN8keZICWrqtZ70w8g==", "cpu": [ "arm64" ], @@ -2055,9 +2029,9 @@ } }, "node_modules/@oxfmt/binding-darwin-arm64": { - "version": "0.56.0", - "resolved": "https://registry.npmjs.org/@oxfmt/binding-darwin-arm64/-/binding-darwin-arm64-0.56.0.tgz", - "integrity": "sha512-sftR/bEOr+t1gs+evwsHi/Xbq2FAPA2uU3VMr8n6ZU9PoK/IMSfnfu7+OEe/uy1+knhrFl4Wvy7Vkm3uo9mJ7g==", + "version": "0.57.0", + "resolved": "https://registry.npmjs.org/@oxfmt/binding-darwin-arm64/-/binding-darwin-arm64-0.57.0.tgz", + "integrity": "sha512-T+0stuCBqmUVY+aMIvrgXhzGhHO3sD5tNiiEcYqgSdPsnukskQqn2u5qOVD0sv1l7RLdFS5Z/f5Wi9Ktyjr3Eg==", "cpu": [ "arm64" ], @@ -2072,9 +2046,9 @@ } }, "node_modules/@oxfmt/binding-darwin-x64": { - "version": "0.56.0", - "resolved": "https://registry.npmjs.org/@oxfmt/binding-darwin-x64/-/binding-darwin-x64-0.56.0.tgz", - "integrity": "sha512-z66SdjLqa3MUPKvTp3Mbb5nSjKSbnYxJGeB+Wx987s8T5hPcIRiBMfnJ6zcPgYtQn3x5xjvdzNVkXrSeYH6ZFg==", + "version": "0.57.0", + "resolved": "https://registry.npmjs.org/@oxfmt/binding-darwin-x64/-/binding-darwin-x64-0.57.0.tgz", + "integrity": "sha512-O+3JbqWs/mCI2oi4xfhRO2IVPFJNDDEBV8Odo+ZpmsUOeKJfjXoNH7nDmBEQcDgK7NfjDIyE7kRgYSZcTLDO0A==", "cpu": [ "x64" ], @@ -2089,9 +2063,9 @@ } }, "node_modules/@oxfmt/binding-freebsd-x64": { - "version": "0.56.0", - "resolved": "https://registry.npmjs.org/@oxfmt/binding-freebsd-x64/-/binding-freebsd-x64-0.56.0.tgz", - "integrity": "sha512-t2tkrV1vtZyaItSQ71dTi2ZVKZEI39b/LqLT12V5KMfIeXK6N32TUC1jhOXKVQmhECq9j2ZXMQV3JeT1kh9Vmg==", + "version": "0.57.0", + "resolved": "https://registry.npmjs.org/@oxfmt/binding-freebsd-x64/-/binding-freebsd-x64-0.57.0.tgz", + "integrity": "sha512-pxwhxVC+JkLX9twOQ/8C/vbuOQcMZyKIDmiRDZfO7yITuVcIdZCiLRqqf4QOxb2+8FWrRXzQpm+1DBKcMpHSSQ==", "cpu": [ "x64" ], @@ -2106,9 +2080,9 @@ } }, "node_modules/@oxfmt/binding-linux-arm-gnueabihf": { - "version": "0.56.0", - "resolved": "https://registry.npmjs.org/@oxfmt/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-0.56.0.tgz", - "integrity": "sha512-+gCy+Tp3RHeXQ9y/QrS76lXIpZkbziTyp6hIgjB2MssCwfMph3vG/GEfkhO34Rai1vhYIaUkvv8UT1BcDorJPw==", + "version": "0.57.0", + "resolved": "https://registry.npmjs.org/@oxfmt/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-0.57.0.tgz", + "integrity": "sha512-pxBU4zH2imB/MDBfth2rOMeVxXUMjRQLCazagwLARIFH3hVlxZJBlM4nSnHXaIHJK4/qezoFCIORN6AY8Mra4A==", "cpu": [ "arm" ], @@ -2123,9 +2097,9 @@ } }, "node_modules/@oxfmt/binding-linux-arm-musleabihf": { - "version": "0.56.0", - "resolved": "https://registry.npmjs.org/@oxfmt/binding-linux-arm-musleabihf/-/binding-linux-arm-musleabihf-0.56.0.tgz", - "integrity": "sha512-0kKkVvQ2I+FJ2sxQyUu1zJ0yWP5kcWse/yVFnGQSFCXMwSSkfEaUGu0dW774O7nyy3jrcBGap7OSc8dZmU/CdA==", + "version": "0.57.0", + "resolved": "https://registry.npmjs.org/@oxfmt/binding-linux-arm-musleabihf/-/binding-linux-arm-musleabihf-0.57.0.tgz", + "integrity": "sha512-JAprOzt8tycYou36ZgEw14DlRHTiN8qdtKANdV3VZIRIvTI/lh/cX13c9pJ/EnDk2GT3FASH7KvCgQ2AufAifQ==", "cpu": [ "arm" ], @@ -2140,9 +2114,9 @@ } }, "node_modules/@oxfmt/binding-linux-arm64-gnu": { - "version": "0.56.0", - "resolved": "https://registry.npmjs.org/@oxfmt/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-0.56.0.tgz", - "integrity": "sha512-npkA2siMbyWRh+wEhi1aTAx4RirukGcGNt8V4Ch86pG+xU9aurqS1MZOnKYMu03ISwat3rB6zkQx51SsB9obNw==", + "version": "0.57.0", + "resolved": "https://registry.npmjs.org/@oxfmt/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-0.57.0.tgz", + "integrity": "sha512-ajtjaxSaj9xl4BW7REt+Cef/ttzbAq00Bq4z7JUDZEfgFXdwSjH8K9bF+IcIJzZB9lKqMfQ4eHuSFOvvlvtqOg==", "cpu": [ "arm64" ], @@ -2157,9 +2131,9 @@ } }, "node_modules/@oxfmt/binding-linux-arm64-musl": { - "version": "0.56.0", - "resolved": "https://registry.npmjs.org/@oxfmt/binding-linux-arm64-musl/-/binding-linux-arm64-musl-0.56.0.tgz", - "integrity": "sha512-UekqOjGkV4/MkqreCV9SPIB2jlR3/HbXrmhV1rVXJZ9wfDXMyCMriLtq3tHqLY4PkbVWNtfcm1kMojJ26KLSJw==", + "version": "0.57.0", + "resolved": "https://registry.npmjs.org/@oxfmt/binding-linux-arm64-musl/-/binding-linux-arm64-musl-0.57.0.tgz", + "integrity": "sha512-p4Y/+RYk9Bk5WO+zHSUXAClRmZ2fbJCejMuCAsU2HhyME4jqf6Ftt/mJYEwIah1wGCBDYOB7wEGV1x5bCEZ6hA==", "cpu": [ "arm64" ], @@ -2174,9 +2148,9 @@ } }, "node_modules/@oxfmt/binding-linux-ppc64-gnu": { - "version": "0.56.0", - "resolved": "https://registry.npmjs.org/@oxfmt/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-0.56.0.tgz", - "integrity": "sha512-XSzveSpeZMD5XJpew5lRFVtNnT04xd3rJxENXmk7wkZzN9oWzv2aFJyoNDhOtoz69BYaS/fg4SYl+CfEZRpB0Q==", + "version": "0.57.0", + "resolved": "https://registry.npmjs.org/@oxfmt/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-0.57.0.tgz", + "integrity": "sha512-By6tRALAZsno0F4zedmtG+wdMvJiJmJoXM4d3+A9zHE4HRXLqXITwRH8mgrlcXc5yJM2g2W3riRPwTYdgemZLQ==", "cpu": [ "ppc64" ], @@ -2191,9 +2165,9 @@ } }, "node_modules/@oxfmt/binding-linux-riscv64-gnu": { - "version": "0.56.0", - "resolved": "https://registry.npmjs.org/@oxfmt/binding-linux-riscv64-gnu/-/binding-linux-riscv64-gnu-0.56.0.tgz", - "integrity": "sha512-EkQ0nJa7k7HDDIVuPF7WY+k4k+bzdclLYtyIXNt7/OqVghfNiMym6YGppFBgx1XRIHW6QylxBz5OogumPjPJbQ==", + "version": "0.57.0", + "resolved": "https://registry.npmjs.org/@oxfmt/binding-linux-riscv64-gnu/-/binding-linux-riscv64-gnu-0.57.0.tgz", + "integrity": "sha512-skYeG+RgvyzspqVEBsEprL90OYYZfoVNqB3HcCNR6QDJyXKOzfDRT3zncnHmUaFluIlBHuY23mU1b5WGgR98hA==", "cpu": [ "riscv64" ], @@ -2208,9 +2182,9 @@ } }, "node_modules/@oxfmt/binding-linux-riscv64-musl": { - "version": "0.56.0", - "resolved": "https://registry.npmjs.org/@oxfmt/binding-linux-riscv64-musl/-/binding-linux-riscv64-musl-0.56.0.tgz", - "integrity": "sha512-dyjAGW8jKRge0ik6U/dgvQG0nVpA3iBlRskQTz5qJLvQWIrySxX5jpqzPetLBNIIZ231KA82fDdi1nLTk8ENCw==", + "version": "0.57.0", + "resolved": "https://registry.npmjs.org/@oxfmt/binding-linux-riscv64-musl/-/binding-linux-riscv64-musl-0.57.0.tgz", + "integrity": "sha512-FFgACrZOXAXUh5KQh2mt1CDOVOZmn+QzHP71wM9QobNwyQvoFfyAeefVUltW83g3sm7LTiH3yfFqLLVUpA5ZFQ==", "cpu": [ "riscv64" ], @@ -2225,9 +2199,9 @@ } }, "node_modules/@oxfmt/binding-linux-s390x-gnu": { - "version": "0.56.0", - "resolved": "https://registry.npmjs.org/@oxfmt/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-0.56.0.tgz", - "integrity": "sha512-60ZGH3LtfqlW8X6vcLdSFY4lvCQYINurttYBKaALnHCDVAUCYJ1LsUgS6p1XOzVlzEDx3yNUZvDF1Lvt59zoZw==", + "version": "0.57.0", + "resolved": "https://registry.npmjs.org/@oxfmt/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-0.57.0.tgz", + "integrity": "sha512-Nm/BAOfQeFiiKd502mZn/GAVKJwtd0RdCg17G3Wz/WSOIQmDi3+7/SZH4BHn1Ye5KvTVH3ua8WvfwLLycNIuvA==", "cpu": [ "s390x" ], @@ -2242,9 +2216,9 @@ } }, "node_modules/@oxfmt/binding-linux-x64-gnu": { - "version": "0.56.0", - "resolved": "https://registry.npmjs.org/@oxfmt/binding-linux-x64-gnu/-/binding-linux-x64-gnu-0.56.0.tgz", - "integrity": "sha512-u1suj1tgJHK4ZqB7buCtdbNef2n8+d0lXTPJwLHNmtyK6p+DTpsaoDvmqhQrA56fgKYv4LuRxNtL8YooebKOew==", + "version": "0.57.0", + "resolved": "https://registry.npmjs.org/@oxfmt/binding-linux-x64-gnu/-/binding-linux-x64-gnu-0.57.0.tgz", + "integrity": "sha512-BiSy5Ku3mQqyxS6YIqAJgd403wEUWvI7kerfzPxc2l/txZVmZM0pSj7oDM+4bGBExowxOi7o73jEam1W0EDTZg==", "cpu": [ "x64" ], @@ -2259,9 +2233,9 @@ } }, "node_modules/@oxfmt/binding-linux-x64-musl": { - "version": "0.56.0", - "resolved": "https://registry.npmjs.org/@oxfmt/binding-linux-x64-musl/-/binding-linux-x64-musl-0.56.0.tgz", - "integrity": "sha512-aYGLvlQHt80y+qKEtfJY/Nm27G0125Lv+qyh9SJ4Cjc6lXnXjD+ndfhqQnbV24POpMi7rNRi0jvx/0d70FRpCQ==", + "version": "0.57.0", + "resolved": "https://registry.npmjs.org/@oxfmt/binding-linux-x64-musl/-/binding-linux-x64-musl-0.57.0.tgz", + "integrity": "sha512-BCRkJiotz5s9afLYD2LuMvzAoDYx9H17E/YbDyu4xK7l4zHDPeny9ErSXL//i/nJyaOwRk08x4b8cgJC00+JDg==", "cpu": [ "x64" ], @@ -2276,9 +2250,9 @@ } }, "node_modules/@oxfmt/binding-openharmony-arm64": { - "version": "0.56.0", - "resolved": "https://registry.npmjs.org/@oxfmt/binding-openharmony-arm64/-/binding-openharmony-arm64-0.56.0.tgz", - "integrity": "sha512-H/re/gO+7ysVc+kywHNuzY3C33EN9sQcZhg0kp1ZwOZl7y998ZE5mhnBiuGR/nYI0pqLL5xQfrHVUOJ/cIJsCA==", + "version": "0.57.0", + "resolved": "https://registry.npmjs.org/@oxfmt/binding-openharmony-arm64/-/binding-openharmony-arm64-0.57.0.tgz", + "integrity": "sha512-4Oaxe1qrGgXfpCJ1C/ERJ2iCtV2rN1R79ga9fsfyVHfSQRu/hVW780u2KDqZWFZ/iGTHODJji0JemxqFZ63eIQ==", "cpu": [ "arm64" ], @@ -2293,9 +2267,9 @@ } }, "node_modules/@oxfmt/binding-win32-arm64-msvc": { - "version": "0.56.0", - "resolved": "https://registry.npmjs.org/@oxfmt/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-0.56.0.tgz", - "integrity": "sha512-6qLNXfXmtAs8jXDvYMkxk6Wec5SUJoew+ZX1uOZmqaR7ks0EJFbAohuOCELDyJMWyVlxotVG8Xf8m74Bfq0O2w==", + "version": "0.57.0", + "resolved": "https://registry.npmjs.org/@oxfmt/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-0.57.0.tgz", + "integrity": "sha512-MYLAsDnhdNsSGheLYhWgbk0vfIrlS84iQYun/y21fX6u0jj8iBtYtbpZMdiqYeuf8U12eVPUjVY2xE2NrCfJ0g==", "cpu": [ "arm64" ], @@ -2310,9 +2284,9 @@ } }, "node_modules/@oxfmt/binding-win32-ia32-msvc": { - "version": "0.56.0", - "resolved": "https://registry.npmjs.org/@oxfmt/binding-win32-ia32-msvc/-/binding-win32-ia32-msvc-0.56.0.tgz", - "integrity": "sha512-UXEXuKphAe15bsob4AswNMArCw38XSmUIs3wk1s6e6MX9OWGW/IRWU95s1hZDiVg09STy1jHgyN2qkqbu1FT0w==", + "version": "0.57.0", + "resolved": "https://registry.npmjs.org/@oxfmt/binding-win32-ia32-msvc/-/binding-win32-ia32-msvc-0.57.0.tgz", + "integrity": "sha512-PBwdzZALJY/jcCx2E6is0yu+cuVXeySTDmwuseD+9j0mHqlRNxwlKgsyRTBed/woPeqfVfuXfWjoq4Cx2Zt3Eg==", "cpu": [ "ia32" ], @@ -2327,9 +2301,9 @@ } }, "node_modules/@oxfmt/binding-win32-x64-msvc": { - "version": "0.56.0", - "resolved": "https://registry.npmjs.org/@oxfmt/binding-win32-x64-msvc/-/binding-win32-x64-msvc-0.56.0.tgz", - "integrity": "sha512-HPyNDjky+NIOuaMvHZflR+kst3YWdUOH2JUQYkf99grqZ5mEBTQM6h9iGy501Z8Xt5xMScrwHOuVCOlqDrktRw==", + "version": "0.57.0", + "resolved": "https://registry.npmjs.org/@oxfmt/binding-win32-x64-msvc/-/binding-win32-x64-msvc-0.57.0.tgz", + "integrity": "sha512-bQJdH9i4RRfw55jm7+8/xS7GzHLLTbHx4huhrrDxQJaJtbSDbsyOnODvP1ftT7EG0KFKAYO2S+q6AcioXODx8w==", "cpu": [ "x64" ], @@ -2344,9 +2318,9 @@ } }, "node_modules/@oxlint/binding-android-arm-eabi": { - "version": "1.71.0", - "resolved": "https://registry.npmjs.org/@oxlint/binding-android-arm-eabi/-/binding-android-arm-eabi-1.71.0.tgz", - "integrity": "sha512-ImGmd1njEg4FEJH03jhRnveEegtO3czCtfptvaHivKAZQIYATbVFBrrzbaYMYv0oJioTnxZAZVSyV+oL7W8S2g==", + "version": "1.72.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-android-arm-eabi/-/binding-android-arm-eabi-1.72.0.tgz", + "integrity": "sha512-zhCmvn+1Mj3UchAc/90i99S0t7jJUsHmFVSPg4UWrjO8b8eaSGwscgO6QAUtvHBstkjQwBttQNswEnAF1mIQdA==", "cpu": [ "arm" ], @@ -2361,9 +2335,9 @@ } }, "node_modules/@oxlint/binding-android-arm64": { - "version": "1.71.0", - "resolved": "https://registry.npmjs.org/@oxlint/binding-android-arm64/-/binding-android-arm64-1.71.0.tgz", - "integrity": "sha512-4A5BEexBrwY1YFF8Kiq/lp/wQPRG79G3BWIE1FuWaM5MvmpYSd+7ZySVcKkHdwo0UDzdQGddp6pD9mpctMqLnw==", + "version": "1.72.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-android-arm64/-/binding-android-arm64-1.72.0.tgz", + "integrity": "sha512-mtH+aY/ozv1eZoCUC2owjFAtyNBKHpJHygKeEu9zXXnQGW1Q2/qOpvx+I+Lf23+TvTz66F4iiXUbl2cGvoLPCQ==", "cpu": [ "arm64" ], @@ -2378,9 +2352,9 @@ } }, "node_modules/@oxlint/binding-darwin-arm64": { - "version": "1.71.0", - "resolved": "https://registry.npmjs.org/@oxlint/binding-darwin-arm64/-/binding-darwin-arm64-1.71.0.tgz", - "integrity": "sha512-9wJA9GJulLwS2usU3CEisI/ESDO1n1z9eyTCvApMDrAkbJ1ve0mORgTMjcWWsKxkzkeZ2N/Gpra5IQE7x8tYgQ==", + "version": "1.72.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-darwin-arm64/-/binding-darwin-arm64-1.72.0.tgz", + "integrity": "sha512-EvnajNPDtfknB3ZieeOOyDTwJn9QXDiwfnF4ZDQqART6RG6hjY4WigQcZdGoK2dkB3e1vrmEzN9aYbQCUkh/gQ==", "cpu": [ "arm64" ], @@ -2395,9 +2369,9 @@ } }, "node_modules/@oxlint/binding-darwin-x64": { - "version": "1.71.0", - "resolved": "https://registry.npmjs.org/@oxlint/binding-darwin-x64/-/binding-darwin-x64-1.71.0.tgz", - "integrity": "sha512-PlLCjS06V0PeJMAJwzjrExw1sYNW9Gch3JtNlcwwZDXGlTYDuwHNN89zYH8LTXFfgkVtsYvs2nv0FqrzyuFDzg==", + "version": "1.72.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-darwin-x64/-/binding-darwin-x64-1.72.0.tgz", + "integrity": "sha512-ZkCdEa/G80A7vEHfeCDz/+L3m33DE73v32mDKhgOIgz8Uwf0DFcK7+uu6qC+7LEhmz5fpOe1osWKyjSNMydFIQ==", "cpu": [ "x64" ], @@ -2412,9 +2386,9 @@ } }, "node_modules/@oxlint/binding-freebsd-x64": { - "version": "1.71.0", - "resolved": "https://registry.npmjs.org/@oxlint/binding-freebsd-x64/-/binding-freebsd-x64-1.71.0.tgz", - "integrity": "sha512-Lhil7bWre0ncxbUoDoxfS0JzpTz17BRQKW7iwoAUY8GJ66+WwJEfYPCFJ1P0WgVZR5/O/b3Q2pENlHOjeXLOGQ==", + "version": "1.72.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-freebsd-x64/-/binding-freebsd-x64-1.72.0.tgz", + "integrity": "sha512-NroXv2vh+sxVY1uya/rM5pjhx1hm8BzlYpx9q67QP0Xhw5MH2bf5GJylpvLEC+781p1Xli/317EoV9AlGwViag==", "cpu": [ "x64" ], @@ -2429,9 +2403,9 @@ } }, "node_modules/@oxlint/binding-linux-arm-gnueabihf": { - "version": "1.71.0", - "resolved": "https://registry.npmjs.org/@oxlint/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-1.71.0.tgz", - "integrity": "sha512-Oo9/L58PYD3RC0x05d2upAPLllHytTjHQGsnC06P6Ynn7jKkp5mdImQxXdJ3+FnBaKspNpGogzgVsi6g872LiA==", + "version": "1.72.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-1.72.0.tgz", + "integrity": "sha512-0NDywYgfj279Ou/BcQuCYSj7NJwBfmWn5qc5uGO/Ny7fUWmXyIpvawqX/8acQlWG6IXelJsJhj+JAy6sjsKj0A==", "cpu": [ "arm" ], @@ -2446,9 +2420,9 @@ } }, "node_modules/@oxlint/binding-linux-arm-musleabihf": { - "version": "1.71.0", - "resolved": "https://registry.npmjs.org/@oxlint/binding-linux-arm-musleabihf/-/binding-linux-arm-musleabihf-1.71.0.tgz", - "integrity": "sha512-mSHfyfgJrEbyIR29ejaeS50BdPk+GoNPlC1dckpDiUZbJAIel68sjSMdOt4WY0/gva+ECC7FNITQkxMJU+vSBw==", + "version": "1.72.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-linux-arm-musleabihf/-/binding-linux-arm-musleabihf-1.72.0.tgz", + "integrity": "sha512-4vpXB06h65Ezsy4hRyrGjGrfa1SkVPii09yaajiYhmVpgsFiLD+KNxIx/BNAY+XiO+i1yqp9HHdwqM8VTqa5XQ==", "cpu": [ "arm" ], @@ -2463,9 +2437,9 @@ } }, "node_modules/@oxlint/binding-linux-arm64-gnu": { - "version": "1.71.0", - "resolved": "https://registry.npmjs.org/@oxlint/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.71.0.tgz", - "integrity": "sha512-n9yY4M2tiy3aij4AqtlnspzpfdpeT5JQfK2/w2d8oyp5W0FRwOb1dIeX99nORNcxGr08iD9bH8N5XFz3I2iy8w==", + "version": "1.72.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.72.0.tgz", + "integrity": "sha512-immaN4g2ZGFiOkKrvRX9LvzZdd2GkQM5wR+UyzYyUuyhUTXGQ4HKUJH18xp4G8OfhCVaVAJfKZxwE1r8+4hhaQ==", "cpu": [ "arm64" ], @@ -2480,9 +2454,9 @@ } }, "node_modules/@oxlint/binding-linux-arm64-musl": { - "version": "1.71.0", - "resolved": "https://registry.npmjs.org/@oxlint/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.71.0.tgz", - "integrity": "sha512-fJZrs5sDZtTaPIOiemRQQmo82Ezy+vOGXemPc4Ok7iVVsYsFa7SlW6Z5XN819VfsqBHRm3NJ3rTdnR8+bJYJdQ==", + "version": "1.72.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.72.0.tgz", + "integrity": "sha512-JGHS9Mnr7iWyyLDxgCv1MhzVpAckgptg00F2gnxt/GD7lQ2SW1BRcxHqhSTaSdDpjWRrBkBxMMh4+Hn3aVtExg==", "cpu": [ "arm64" ], @@ -2497,9 +2471,9 @@ } }, "node_modules/@oxlint/binding-linux-ppc64-gnu": { - "version": "1.71.0", - "resolved": "https://registry.npmjs.org/@oxlint/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-1.71.0.tgz", - "integrity": "sha512-cwl7VKGERIy9p+G+AvZdfy/06q0aHXaTt/mMRReC751iuNYJgqKjB7NydXSS30nBT9vtr2tunciOtrR4fD6FUA==", + "version": "1.72.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-1.72.0.tgz", + "integrity": "sha512-AOYgBZqxNshrg83P9v0RYv+m8s10Cqkj4/PxXFDhcS3k7FqsIG5+CxErshZCIN7G8iy4Y+VGfAsuEdar8AcbBg==", "cpu": [ "ppc64" ], @@ -2514,9 +2488,9 @@ } }, "node_modules/@oxlint/binding-linux-riscv64-gnu": { - "version": "1.71.0", - "resolved": "https://registry.npmjs.org/@oxlint/binding-linux-riscv64-gnu/-/binding-linux-riscv64-gnu-1.71.0.tgz", - "integrity": "sha512-eZ8ieVXvzGi8jr7+ybQGPK2STw3mldfxZlgA2738iflfB/rzA69sE6m5rDRpQaxC7dpm745Enlh1Tod0QAk9Gg==", + "version": "1.72.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-linux-riscv64-gnu/-/binding-linux-riscv64-gnu-1.72.0.tgz", + "integrity": "sha512-QMybPS5ij3/vrKG67mqzHwW++91sYxK/PPUVi6SBtNCEzW4niS52fVBdXbQ6nou0wWbUPEpx8Sl/ZjtgE3clXA==", "cpu": [ "riscv64" ], @@ -2531,9 +2505,9 @@ } }, "node_modules/@oxlint/binding-linux-riscv64-musl": { - "version": "1.71.0", - "resolved": "https://registry.npmjs.org/@oxlint/binding-linux-riscv64-musl/-/binding-linux-riscv64-musl-1.71.0.tgz", - "integrity": "sha512-puMDbQYe6+NXwfMusojoA7CXGn2b3utukmd23PQqc1E3XhVCwyZ+FueSMzDYeNgDV2dUfIVXAAKZBcFDeCL6sA==", + "version": "1.72.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-linux-riscv64-musl/-/binding-linux-riscv64-musl-1.72.0.tgz", + "integrity": "sha512-gOc3W7JV0PXRpIL7stUlLe3Wa9Gp0Kdlup87IT3gHDvPKck2xNgMIl/Gs2lldYY2lyXZDC4rWi3hmoLUobkgbQ==", "cpu": [ "riscv64" ], @@ -2548,9 +2522,9 @@ } }, "node_modules/@oxlint/binding-linux-s390x-gnu": { - "version": "1.71.0", - "resolved": "https://registry.npmjs.org/@oxlint/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-1.71.0.tgz", - "integrity": "sha512-4NJLxBs1ujISCt3L/1FcywLs73PWtJuw+piD6feK2V6h6OS6P7xu9/sWt1DTRLibe6QCzmfZzmM/2HPORoV/Lg==", + "version": "1.72.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-1.72.0.tgz", + "integrity": "sha512-rpGxph+FjjHcYI5q6uxB3Az+tnfmEnDbSA8+PK9ZE/VzyUAkvBOMeuY7ZQMhu5mpZH7YQDsTdW6Cx4kV/msc6w==", "cpu": [ "s390x" ], @@ -2565,9 +2539,9 @@ } }, "node_modules/@oxlint/binding-linux-x64-gnu": { - "version": "1.71.0", - "resolved": "https://registry.npmjs.org/@oxlint/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.71.0.tgz", - "integrity": "sha512-cFDaiR8L3430qp88tfZnvFlt3KotFhR/DlbIL0nHOMMYiG/9Wy4l+6f7t8G8pTa9bd8Lt8+M0y/qjRQ/xcB74g==", + "version": "1.72.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.72.0.tgz", + "integrity": "sha512-WND+uhf/Ko13SLqQMWQUgsZuLvYYEvL0ZKgg0tgGYfLqxG7l8Ju123fHDMJyYSDl5E3bUbpFUuii/OvMreFQzw==", "cpu": [ "x64" ], @@ -2582,9 +2556,9 @@ } }, "node_modules/@oxlint/binding-linux-x64-musl": { - "version": "1.71.0", - "resolved": "https://registry.npmjs.org/@oxlint/binding-linux-x64-musl/-/binding-linux-x64-musl-1.71.0.tgz", - "integrity": "sha512-orfixdt76KlpNly9z0PkWBBNfwjKz+JFVLP/7wnVchlKNU9Dpt9InU/ZggeSej6fC7qwHmHNOGlhLnQXcYoGuA==", + "version": "1.72.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-linux-x64-musl/-/binding-linux-x64-musl-1.72.0.tgz", + "integrity": "sha512-SrpbrUL70nG9vh6zP4/oKHWgLuHquwsr7MW9XOn0olBVgh10Uqr8qscKhQoBGEn6olK/IUpn5GSKcdQ5AjUhGA==", "cpu": [ "x64" ], @@ -2599,9 +2573,9 @@ } }, "node_modules/@oxlint/binding-openharmony-arm64": { - "version": "1.71.0", - "resolved": "https://registry.npmjs.org/@oxlint/binding-openharmony-arm64/-/binding-openharmony-arm64-1.71.0.tgz", - "integrity": "sha512-9emQu2lAp6yhPB3XuI+++vR+l/o6JR1X+EpxwcumPdQXBWXEPAsquPGL7l158EqU8SebQMXTUa/S5zN98juyHw==", + "version": "1.72.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-openharmony-arm64/-/binding-openharmony-arm64-1.72.0.tgz", + "integrity": "sha512-qkrsEn6NmgFKr7U/QnezQMb+q/vzAy0Dd9Y95gQGQTyjzDLN+HRZMuM5u70iyH4nBLCfKBzhjMsYCehKay2jyg==", "cpu": [ "arm64" ], @@ -2616,9 +2590,9 @@ } }, "node_modules/@oxlint/binding-win32-arm64-msvc": { - "version": "1.71.0", - "resolved": "https://registry.npmjs.org/@oxlint/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.71.0.tgz", - "integrity": "sha512-bd5kI8spYwTm3BILDtGhi73zoup5dw8MlPQNT8YB3BD5UIsjNe3K9/4ctrzQMX4SZMoK5HgzVLkLJzacEXB7fA==", + "version": "1.72.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.72.0.tgz", + "integrity": "sha512-LWR6ZlFZph+KPjXv8opgZsXRDCdrdQe8VL8Cg9zxCoBS73h6znzZpydVgmdnwj8mB9AuSM5jxEgDJDpQkjboeg==", "cpu": [ "arm64" ], @@ -2633,9 +2607,9 @@ } }, "node_modules/@oxlint/binding-win32-ia32-msvc": { - "version": "1.71.0", - "resolved": "https://registry.npmjs.org/@oxlint/binding-win32-ia32-msvc/-/binding-win32-ia32-msvc-1.71.0.tgz", - "integrity": "sha512-W4HvOHGzVLHcrmFu+bMrJlho+/yrlX5ZNdJZqGe8MEldkQG+RHYhxxad9P4jvWAYFmIqUA5i9DQ8QsJqSU9GIw==", + "version": "1.72.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-win32-ia32-msvc/-/binding-win32-ia32-msvc-1.72.0.tgz", + "integrity": "sha512-yt6HEh7IsHvtjRWtmeZRX134eaXKHq5Gnqlf1xBJdJl1JtdoRUEJw3nAxpZoUDS860cX/foKbztO441anVBtVQ==", "cpu": [ "ia32" ], @@ -2650,9 +2624,9 @@ } }, "node_modules/@oxlint/binding-win32-x64-msvc": { - "version": "1.71.0", - "resolved": "https://registry.npmjs.org/@oxlint/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.71.0.tgz", - "integrity": "sha512-D2kyEIPHk/G/wiZLnwTVC/sVst+T/lKldVOjAFpgTIBUAOlry72e5OiapDbDBF4LfJLkN5ypJb/8Eu6yJzkveQ==", + "version": "1.72.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.72.0.tgz", + "integrity": "sha512-b2eKFD2hX7tIwmo/cyH6TDq8vzWRZ2qNHrzoGntUTmq0h3zQh/uX3eTSHCwI8OB/ADQfJCRelLItK8BsxuucDA==", "cpu": [ "x64" ], @@ -2730,12 +2704,12 @@ "license": "AGPL-3.0-only" }, "node_modules/@remnawave/node-plugins": { - "version": "0.4.5", - "resolved": "https://registry.npmjs.org/@remnawave/node-plugins/-/node-plugins-0.4.5.tgz", - "integrity": "sha512-r9Lce/l/kHQATNhWbcutApFSJ5hH/Yu6Kv0+/qjpUDIEa1+DFb54Q8IwuvqWzxxbGkG9oO0cAeN4busBzz0a5Q==", + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@remnawave/node-plugins/-/node-plugins-0.5.0.tgz", + "integrity": "sha512-hSGrPV9KJ2MgqHeI8f6Jqs6/oILY4JKBhgYDb8hDHYQsKzguTAiSUQBLkwRFJCTugu7ho6nzZ1QKoYqgNunKOA==", "license": "AGPL-3.0-only", "dependencies": { - "zod": "3.25.76" + "zod": "4.4.3" } }, "node_modules/@remnawave/xtls-sdk": { @@ -5947,16 +5921,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/knip/node_modules/zod": { - "version": "4.3.6", - "resolved": "https://registry.npmjs.org/zod/-/zod-4.3.6.tgz", - "integrity": "sha512-rftlrkhHZOcjDwkGlnUtZZkvaPHCsDATp4pGpuOOMDaTdDDXF91wuVDJoWoPsKX/3YPQ5fHuF3STjcYyKr+Qhg==", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/colinhacks" - } - }, "node_modules/kuler": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/kuler/-/kuler-2.0.0.tgz", @@ -6543,39 +6507,29 @@ } }, "node_modules/nestjs-zod": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/nestjs-zod/-/nestjs-zod-4.3.1.tgz", - "integrity": "sha512-gl10NOf/AhWt4HLcnMI1J0WUlBCKyteJBftD6SwNyX71/vzAorr5MJQWiDJoPPkou9QL2CRHHBtyjr55o7++Xw==", + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/nestjs-zod/-/nestjs-zod-5.4.0.tgz", + "integrity": "sha512-dxVpy1fjfK4kp+ztK+7xQP46fpvZxkeR/jcEdIvEGh/2o71iwXuy/hrKOWSPhJ1nQXV4iBdHqMizndn2GTaXDg==", "license": "MIT", "dependencies": { - "@nest-zod/z": "*", "deepmerge": "^4.3.1" }, "peerDependencies": { "@nestjs/common": "^10.0.0 || ^11.0.0", - "@nestjs/core": "^10.0.0 || ^11.0.0", "@nestjs/swagger": "^7.4.2 || ^8.0.0 || ^11.0.0", - "zod": ">= 3.14.3" + "rxjs": "^7.0.0", + "zod": "^3.25.0 || ^4.0.0" }, "peerDependenciesMeta": { - "@nestjs/common": { - "optional": true - }, - "@nestjs/core": { - "optional": true - }, "@nestjs/swagger": { "optional": true - }, - "zod": { - "optional": false } } }, "node_modules/nf3": { - "version": "0.3.17", - "resolved": "https://registry.npmjs.org/nf3/-/nf3-0.3.17.tgz", - "integrity": "sha512-N9zEWySuJFw+gR0lhS5863YsvNeudOdqRyFvNb+jMXbeTJOdrjDqkCpDginIZfUm0LzT1t1nCRiDeqQm/8kirQ==", + "version": "0.3.19", + "resolved": "https://registry.npmjs.org/nf3/-/nf3-0.3.19.tgz", + "integrity": "sha512-tfOXX/ivQBL+4km/fzxQ0HWMmp1Ewx/YpFLbya080gXVfm26bZy0n4a5K5PPnqTLyuAHu0FobVpXXUadIiIwIQ==", "dev": true, "license": "MIT" }, @@ -6844,9 +6798,9 @@ } }, "node_modules/oxfmt": { - "version": "0.56.0", - "resolved": "https://registry.npmjs.org/oxfmt/-/oxfmt-0.56.0.tgz", - "integrity": "sha512-9Dv0wV3zKiyvhjD7bRKaInKmHQ1sPx3RGOjQkGFJbbdQ16576yf8qhMSO9Q9cvHcs+1NpBsRTkuDDYFFPTJ6gw==", + "version": "0.57.0", + "resolved": "https://registry.npmjs.org/oxfmt/-/oxfmt-0.57.0.tgz", + "integrity": "sha512-ZB7Bi+rGDSqmVIo9jwcLyFgjxXvQhDdU+jx+ZrVy6VRiVXK2+CHc4hO3J4dUQjHe7V0ymHB+MDuv5z+NhK07HA==", "dev": true, "license": "MIT", "dependencies": { @@ -6862,25 +6816,25 @@ "url": "https://github.com/sponsors/Boshen" }, "optionalDependencies": { - "@oxfmt/binding-android-arm-eabi": "0.56.0", - "@oxfmt/binding-android-arm64": "0.56.0", - "@oxfmt/binding-darwin-arm64": "0.56.0", - "@oxfmt/binding-darwin-x64": "0.56.0", - "@oxfmt/binding-freebsd-x64": "0.56.0", - "@oxfmt/binding-linux-arm-gnueabihf": "0.56.0", - "@oxfmt/binding-linux-arm-musleabihf": "0.56.0", - "@oxfmt/binding-linux-arm64-gnu": "0.56.0", - "@oxfmt/binding-linux-arm64-musl": "0.56.0", - "@oxfmt/binding-linux-ppc64-gnu": "0.56.0", - "@oxfmt/binding-linux-riscv64-gnu": "0.56.0", - "@oxfmt/binding-linux-riscv64-musl": "0.56.0", - "@oxfmt/binding-linux-s390x-gnu": "0.56.0", - "@oxfmt/binding-linux-x64-gnu": "0.56.0", - "@oxfmt/binding-linux-x64-musl": "0.56.0", - "@oxfmt/binding-openharmony-arm64": "0.56.0", - "@oxfmt/binding-win32-arm64-msvc": "0.56.0", - "@oxfmt/binding-win32-ia32-msvc": "0.56.0", - "@oxfmt/binding-win32-x64-msvc": "0.56.0" + "@oxfmt/binding-android-arm-eabi": "0.57.0", + "@oxfmt/binding-android-arm64": "0.57.0", + "@oxfmt/binding-darwin-arm64": "0.57.0", + "@oxfmt/binding-darwin-x64": "0.57.0", + "@oxfmt/binding-freebsd-x64": "0.57.0", + "@oxfmt/binding-linux-arm-gnueabihf": "0.57.0", + "@oxfmt/binding-linux-arm-musleabihf": "0.57.0", + "@oxfmt/binding-linux-arm64-gnu": "0.57.0", + "@oxfmt/binding-linux-arm64-musl": "0.57.0", + "@oxfmt/binding-linux-ppc64-gnu": "0.57.0", + "@oxfmt/binding-linux-riscv64-gnu": "0.57.0", + "@oxfmt/binding-linux-riscv64-musl": "0.57.0", + "@oxfmt/binding-linux-s390x-gnu": "0.57.0", + "@oxfmt/binding-linux-x64-gnu": "0.57.0", + "@oxfmt/binding-linux-x64-musl": "0.57.0", + "@oxfmt/binding-openharmony-arm64": "0.57.0", + "@oxfmt/binding-win32-arm64-msvc": "0.57.0", + "@oxfmt/binding-win32-ia32-msvc": "0.57.0", + "@oxfmt/binding-win32-x64-msvc": "0.57.0" }, "peerDependencies": { "svelte": "^5.0.0", @@ -6896,9 +6850,9 @@ } }, "node_modules/oxlint": { - "version": "1.71.0", - "resolved": "https://registry.npmjs.org/oxlint/-/oxlint-1.71.0.tgz", - "integrity": "sha512-U1m1X+C0vDj7DC1e13IoZULzEcPczE7UOMTs8VlZGHUEIUaSTZKo5qkPsQEfzpgnQ29Pea/w3Xntk62UCecxZw==", + "version": "1.72.0", + "resolved": "https://registry.npmjs.org/oxlint/-/oxlint-1.72.0.tgz", + "integrity": "sha512-1rhdZIP/EvoI91ABIwNU5Q8+bWf8mjrS5UzIOZld4d4bXxJvtlUhlQvaoTogIGin/qdErMOrwaIJvCSIAKTLhA==", "dev": true, "license": "MIT", "bin": { @@ -6911,25 +6865,25 @@ "url": "https://github.com/sponsors/Boshen" }, "optionalDependencies": { - "@oxlint/binding-android-arm-eabi": "1.71.0", - "@oxlint/binding-android-arm64": "1.71.0", - "@oxlint/binding-darwin-arm64": "1.71.0", - "@oxlint/binding-darwin-x64": "1.71.0", - "@oxlint/binding-freebsd-x64": "1.71.0", - "@oxlint/binding-linux-arm-gnueabihf": "1.71.0", - "@oxlint/binding-linux-arm-musleabihf": "1.71.0", - "@oxlint/binding-linux-arm64-gnu": "1.71.0", - "@oxlint/binding-linux-arm64-musl": "1.71.0", - "@oxlint/binding-linux-ppc64-gnu": "1.71.0", - "@oxlint/binding-linux-riscv64-gnu": "1.71.0", - "@oxlint/binding-linux-riscv64-musl": "1.71.0", - "@oxlint/binding-linux-s390x-gnu": "1.71.0", - "@oxlint/binding-linux-x64-gnu": "1.71.0", - "@oxlint/binding-linux-x64-musl": "1.71.0", - "@oxlint/binding-openharmony-arm64": "1.71.0", - "@oxlint/binding-win32-arm64-msvc": "1.71.0", - "@oxlint/binding-win32-ia32-msvc": "1.71.0", - "@oxlint/binding-win32-x64-msvc": "1.71.0" + "@oxlint/binding-android-arm-eabi": "1.72.0", + "@oxlint/binding-android-arm64": "1.72.0", + "@oxlint/binding-darwin-arm64": "1.72.0", + "@oxlint/binding-darwin-x64": "1.72.0", + "@oxlint/binding-freebsd-x64": "1.72.0", + "@oxlint/binding-linux-arm-gnueabihf": "1.72.0", + "@oxlint/binding-linux-arm-musleabihf": "1.72.0", + "@oxlint/binding-linux-arm64-gnu": "1.72.0", + "@oxlint/binding-linux-arm64-musl": "1.72.0", + "@oxlint/binding-linux-ppc64-gnu": "1.72.0", + "@oxlint/binding-linux-riscv64-gnu": "1.72.0", + "@oxlint/binding-linux-riscv64-musl": "1.72.0", + "@oxlint/binding-linux-s390x-gnu": "1.72.0", + "@oxlint/binding-linux-x64-gnu": "1.72.0", + "@oxlint/binding-linux-x64-musl": "1.72.0", + "@oxlint/binding-openharmony-arm64": "1.72.0", + "@oxlint/binding-win32-arm64-msvc": "1.72.0", + "@oxlint/binding-win32-ia32-msvc": "1.72.0", + "@oxlint/binding-win32-x64-msvc": "1.72.0" }, "peerDependencies": { "oxlint-tsgolint": ">=0.22.1", @@ -6979,9 +6933,9 @@ } }, "node_modules/p-map": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-7.0.4.tgz", - "integrity": "sha512-tkAQEw8ysMzmkhgw8k+1U/iPhWNhykKnSk4Rd5zLoPJCuJaGRPo6YposrZgaxHKzDHdDWWZvE/Sk7hsL2X/CpQ==", + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-7.0.5.tgz", + "integrity": "sha512-e8vJF4XdVkzqqSHguEMz41mQO1wKwxKm5ENrUJQUu9kLDCtn83cxbyHZcszr4QC5zEA7WffRRC4gsTecC7J9oA==", "license": "MIT", "engines": { "node": ">=18" @@ -8751,9 +8705,9 @@ } }, "node_modules/zod": { - "version": "3.25.76", - "resolved": "https://registry.npmjs.org/zod/-/zod-3.25.76.tgz", - "integrity": "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==", + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/zod/-/zod-4.4.3.tgz", + "integrity": "sha512-ytENFjIJFl2UwYglde2jchW2Hwm4GJFLDiSXWdTrJQBIN9Fcyp7n4DhxJEiWNAJMV1/BqWfW/kkg71UDcHJyTQ==", "license": "MIT", "funding": { "url": "https://github.com/sponsors/colinhacks" diff --git a/package.json b/package.json index cbd0a49..34a7876 100644 --- a/package.json +++ b/package.json @@ -43,7 +43,7 @@ "@nestjs/platform-express": "11.1.27", "@nestjs/schedule": "^6.1.3", "@remnawave/hashed-set": "^0.0.4", - "@remnawave/node-plugins": "0.4.5", + "@remnawave/node-plugins": "0.5.0", "@remnawave/xtls-sdk": "0.16.0", "@remnawave/xtls-sdk-nestjs": "0.6.1", "compression": "^1.8.1", @@ -54,12 +54,12 @@ "lmdb": "^3.5.6", "morgan": "^1.11.0", "nest-winston": "^1.10.2", - "nestjs-zod": "4.3.1", + "nestjs-zod": "5.4.0", "nftables-napi": "0.5.0", "nice-grpc": "^2.1.16", "node-object-hash": "^3.1.1", "object-hash": "^3.0.0", - "p-map": "^7.0.4", + "p-map": "^7.0.5", "p-retry": "^8.0.0", "passport": "0.7.0", "passport-jwt": "4.0.1", @@ -69,7 +69,7 @@ "semver": "^7.8.5", "sockdestroy": "1.4.0", "winston": "^3.19.0", - "zod": "3.25.76" + "zod": "4.4.3" }, "devDependencies": { "@nestjs/cli": "11.0.23", @@ -83,9 +83,9 @@ "@types/semver": "^7.7.1", "eslint-plugin-perfectionist": "5.9.1", "knip": "^5.73.3", - "nf3": "^0.3.17", - "oxfmt": "^0.56.0", - "oxlint": "^1.71.0", + "nf3": "^0.3.19", + "oxfmt": "^0.57.0", + "oxlint": "^1.72.0", "source-map-support": "^0.5.21", "ts-loader": "9.5.4", "ts-node": "10.9.2", diff --git a/src/common/config/app-config/config.schema.ts b/src/common/config/app-config/config.schema.ts index 283240d..f51448b 100644 --- a/src/common/config/app-config/config.schema.ts +++ b/src/common/config/app-config/config.schema.ts @@ -24,8 +24,9 @@ export const configSchema = z const parsed = parseNodePayloadFromConfigService(data.SECRET_KEY); data.JWT_PUBLIC_KEY = parsed.jwtPublicKey; } catch { - ctx.addIssue({ - code: z.ZodIssueCode.custom, + ctx.issues.push({ + code: 'custom', + input: data.SECRET_KEY, message: 'Invalid SECRET_KEY payload', }); } diff --git a/src/common/utils/validate-env-config.ts b/src/common/utils/validate-env-config.ts index f479867..9b672da 100644 --- a/src/common/utils/validate-env-config.ts +++ b/src/common/utils/validate-env-config.ts @@ -1,12 +1,12 @@ import { z, ZodError } from 'zod'; -export function validateEnvConfig(schema: z.ZodType, config: Record): T { +export function validateEnvConfig(schema: z.ZodType, config: Record): T { try { return schema.parse(config); } catch (e) { if (e instanceof ZodError) { - const formattedErrors = e.errors - .map((err) => `❌ ${err.path.join('.')}: ${err.message}`) + const formattedErrors = e.issues + .map((issue) => `❌ ${issue.path.join('.')}: ${issue.message}`) .join('\n'); const errorMessage = `