From 213bf2eefa1087cb378950836cd7e5983c5bd498 Mon Sep 17 00:00:00 2001 From: kastov Date: Mon, 30 Mar 2026 18:26:43 +0300 Subject: [PATCH] feat: ASN support for Node Pluging --- .../models/node-plugins.schema.ts | 29 ++++++++++++------- libs/node-plugins/package.json | 2 +- 2 files changed, 19 insertions(+), 12 deletions(-) diff --git a/libs/node-plugins/models/node-plugins.schema.ts b/libs/node-plugins/models/node-plugins.schema.ts index 28ddaabb..051f1853 100644 --- a/libs/node-plugins/models/node-plugins.schema.ts +++ b/libs/node-plugins/models/node-plugins.schema.ts @@ -15,17 +15,24 @@ const IpCidrOrExtSchema = z }), ); -export const SharedListSchema = z.object({ - name: z.string().startsWith('ext:'), - type: z.enum(['ipList']), - items: z.array( - z.union([ - z.string().cidr({ version: 'v4' }), - z.string().cidr({ version: 'v6' }), - z.string().ip(), - ]), - ), -}); +export const SharedListSchema = z.discriminatedUnion('type', [ + z.object({ + name: z.string().startsWith('ext:'), + type: z.literal('ipList'), + items: z.array( + z.union([ + z.string().cidr({ version: 'v4' }), + z.string().cidr({ version: 'v6' }), + z.string().ip(), + ]), + ), + }), + z.object({ + name: z.string().startsWith('ext:'), + type: z.literal('asList'), + items: z.array(z.number().int().min(1).max(4294967295)), + }), +]); export const TorrentBlockerPluginSchema = z.object({ enabled: z.boolean().describe( diff --git a/libs/node-plugins/package.json b/libs/node-plugins/package.json index 1e63e87b..a3935502 100644 --- a/libs/node-plugins/package.json +++ b/libs/node-plugins/package.json @@ -1,6 +1,6 @@ { "name": "@remnawave/node-plugins", - "version": "0.4.4", + "version": "0.4.5", "public": true, "license": "AGPL-3.0-only", "description": "A library for Remnawave Node Plugins.",