UNPKG

@herbertgao/surgio

Version:

Generating rules for Surge, Clash, Quantumult like a PRO

106 lines 4.24 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.MultiplexValidator = exports.TlsNodeConfigValidator = exports.SimpleNodeConfigValidator = exports.IntegersVersionValidator = exports.AlterIdValiator = exports.PortValidator = exports.getPositiveIntegersNumberValidatior = void 0; const zod_1 = require("zod"); const types_1 = require("../types"); const surgio_config_1 = require("./surgio-config"); const getPositiveIntegersNumberValidatior = (validator, message) => zod_1.z.union([zod_1.z.string(), zod_1.z.number()]).transform((v, ctx) => { const num = Number(v); const isInputString = typeof v === 'string'; if (validator(num) && Number.isInteger(num)) { return isInputString ? `${num}` : num; } else { ctx.addIssue({ code: zod_1.z.ZodIssueCode.custom, message, }); return zod_1.z.NEVER; } }); exports.getPositiveIntegersNumberValidatior = getPositiveIntegersNumberValidatior; exports.PortValidator = zod_1.z .union([zod_1.z.string(), zod_1.z.number()]) .transform((v, ctx) => { const port = Number(v); const isInputString = typeof v === 'string'; if (port > 0 && port < 65536 && Number.isInteger(port)) { return isInputString ? `${port}` : port; } else { ctx.addIssue({ code: zod_1.z.ZodIssueCode.custom, message: '端口号必须为 0 ~ 65535 之间的整数', }); return zod_1.z.NEVER; } }); exports.AlterIdValiator = (0, exports.getPositiveIntegersNumberValidatior)((n) => n >= 0, 'alterId 必须为大于等于 0 的整数').default('0'); exports.IntegersVersionValidator = (0, exports.getPositiveIntegersNumberValidatior)((n) => n > 0, '版本号必须为大于 0 的整数'); exports.SimpleNodeConfigValidator = zod_1.z.object({ type: zod_1.z.nativeEnum(types_1.NodeTypeEnum), nodeName: zod_1.z.string(), enable: zod_1.z.boolean().optional(), // TCP features tfo: zod_1.z.oboolean(), mptcp: zod_1.z.oboolean(), ecn: zod_1.z.oboolean(), shadowTls: zod_1.z .object({ version: exports.IntegersVersionValidator.optional(), password: zod_1.z.string(), sni: zod_1.z.string(), }) .optional(), // UDP features blockQuic: zod_1.z .union([zod_1.z.literal('auto'), zod_1.z.literal('on'), zod_1.z.literal('off')]) .optional(), // Misc portHopping: zod_1.z .string() .transform((val) => { if (val.includes(',')) { return val.replaceAll(',', ';'); } return val; }) .optional(), portHoppingInterval: zod_1.z.number().optional(), underlyingProxy: zod_1.z.string().optional(), testUrl: zod_1.z.string().optional(), testTimeout: zod_1.z.number().optional(), surgeConfig: surgio_config_1.SurgeConfigValidator.optional(), surfboardConfig: surgio_config_1.SurfboardConfigValidator.optional(), quantumultXConfig: surgio_config_1.QuantumultXConfigValidator.optional(), clashConfig: surgio_config_1.ClashConfigValidator.optional(), hostnameIp: zod_1.z.array(zod_1.z.string()).readonly().optional(), binPath: zod_1.z.string().optional(), localPort: zod_1.z.number().optional(), interfaceName: zod_1.z.string().optional(), ipVersion: zod_1.z.string().optional(), }); exports.TlsNodeConfigValidator = exports.SimpleNodeConfigValidator.extend({ hostname: zod_1.z.string(), port: exports.PortValidator, tls13: zod_1.z.oboolean(), skipCertVerify: zod_1.z.oboolean(), sni: zod_1.z.ostring(), alpn: zod_1.z.array(zod_1.z.string()).nonempty().optional(), serverCertFingerprintSha256: zod_1.z.ostring(), clientFingerprint: zod_1.z.ostring(), }); exports.MultiplexValidator = zod_1.z.object({ protocol: zod_1.z.enum(['smux', 'yamux', 'h2mux']), maxConnections: zod_1.z.number().optional(), minStreams: zod_1.z.number().optional(), maxStreams: zod_1.z.number().optional(), padding: zod_1.z.boolean().optional(), brutal: zod_1.z .object({ upMbps: zod_1.z.number(), downMbps: zod_1.z.number(), }) .optional(), }); //# sourceMappingURL=common.js.map