mirror of
https://github.com/MHSanaei/3x-ui.git
synced 2026-07-26 06:16:12 +00:00
* feat: support latest Wireguard features from Xray-core Implements support for Xray-core PRs #5833, #5643, and #5850 for Wireguard Inbounds: - Adds 'domainStrategy' and 'workers' to Wireguard inbound configuration. - Enables the Stream Settings tab for Wireguard inbounds to configure 'sockopt' and 'finalmask', hiding the irrelevant 'network' transmission dropdown. - Adds the 'randRange' field to the 'noise' UDP Finalmask obfuscation settings. * fix --------- Co-authored-by: Rqzbeh <Rqzbeh@example.com> Co-authored-by: Sanaei <ho3ein.sanaei@gmail.com>
This commit is contained in:
@@ -1,5 +1,20 @@
|
||||
import { z } from 'zod';
|
||||
|
||||
export const WireguardDomainStrategySchema = z.enum([
|
||||
'ForceIP',
|
||||
'ForceIPv4',
|
||||
'ForceIPv4v6',
|
||||
'ForceIPv6',
|
||||
'ForceIPv6v4',
|
||||
]);
|
||||
export type WireguardDomainStrategy = z.infer<typeof WireguardDomainStrategySchema>;
|
||||
|
||||
// AntD InputNumber emits null (not undefined) when the user clears it, and
|
||||
// the form store hands that null straight to safeParse on submit — a bare
|
||||
// .optional() would reject it and block the save.
|
||||
const optionalClearedInt = (schema: z.ZodNumber) =>
|
||||
z.preprocess((v) => (v == null ? undefined : v), schema.optional());
|
||||
|
||||
// Wireguard inbound is peer-based (no clients). Each peer is a client device
|
||||
// the server accepts; secretKey is the server-side private key and pubKey is
|
||||
// derived from it at runtime (not persisted on the wire). Inbound peers
|
||||
@@ -10,14 +25,16 @@ export const WireguardInboundPeerSchema = z.object({
|
||||
publicKey: z.string().min(1),
|
||||
preSharedKey: z.string().optional(),
|
||||
allowedIPs: z.array(z.string()).default([]),
|
||||
keepAlive: z.number().int().min(0).optional(),
|
||||
keepAlive: optionalClearedInt(z.number().int().min(0)),
|
||||
});
|
||||
export type WireguardInboundPeer = z.infer<typeof WireguardInboundPeerSchema>;
|
||||
|
||||
export const WireguardInboundSettingsSchema = z.object({
|
||||
mtu: z.number().int().min(1).optional(),
|
||||
mtu: optionalClearedInt(z.number().int().min(1)),
|
||||
secretKey: z.string().min(1),
|
||||
peers: z.array(WireguardInboundPeerSchema).default([]),
|
||||
noKernelTun: z.boolean().default(false),
|
||||
workers: optionalClearedInt(z.number().int().min(1)),
|
||||
domainStrategy: WireguardDomainStrategySchema.optional(),
|
||||
});
|
||||
export type WireguardInboundSettings = z.infer<typeof WireguardInboundSettingsSchema>;
|
||||
|
||||
Reference in New Issue
Block a user