diff --git a/CHANGELOG.md b/CHANGELOG.md
index 8e1083a..04a746d 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,16 +1,16 @@
+
# Changelog
## [1.4.3](https://github.com/perfect-panel/ppanel-web/compare/v1.4.2...v1.4.3) (2025-09-16)
-
### 🐛 Bug Fixes
-* Add success toast message for sorting in nodes and servers pages ([2d5175d](https://github.com/perfect-panel/ppanel-web/commit/2d5175d))
-* Implement encryption and obfuscation features in protocol configuration ([54de16b](https://github.com/perfect-panel/ppanel-web/commit/54de16b))
-* Refactor toB64 function to toB64Url for URL-safe base64 encoding in VlessX25519Pair generation ([8700cf6](https://github.com/perfect-panel/ppanel-web/commit/8700cf6))
-* Simplify initialValues assignment and update node submission logic in NodesPage ([05d6c89](https://github.com/perfect-panel/ppanel-web/commit/05d6c89))
-* Update bun.lockb to reflect dependency changes ([ebcebd7](https://github.com/perfect-panel/ppanel-web/commit/ebcebd7))
+- Add success toast message for sorting in nodes and servers pages ([2d5175d](https://github.com/perfect-panel/ppanel-web/commit/2d5175d))
+- Implement encryption and obfuscation features in protocol configuration ([54de16b](https://github.com/perfect-panel/ppanel-web/commit/54de16b))
+- Refactor toB64 function to toB64Url for URL-safe base64 encoding in VlessX25519Pair generation ([8700cf6](https://github.com/perfect-panel/ppanel-web/commit/8700cf6))
+- Simplify initialValues assignment and update node submission logic in NodesPage ([05d6c89](https://github.com/perfect-panel/ppanel-web/commit/05d6c89))
+- Update bun.lockb to reflect dependency changes ([ebcebd7](https://github.com/perfect-panel/ppanel-web/commit/ebcebd7))
diff --git a/apps/admin/app/dashboard/servers/form-schema/defaults.ts b/apps/admin/app/dashboard/servers/form-schema/defaults.ts
index 1dc8e1b..2560e57 100644
--- a/apps/admin/app/dashboard/servers/form-schema/defaults.ts
+++ b/apps/admin/app/dashboard/servers/form-schema/defaults.ts
@@ -1,3 +1,4 @@
+import { XHTTP_MODES } from './constants';
import type { ProtocolType } from './types';
export function getProtocolDefaultConfig(proto: ProtocolType) {
@@ -5,6 +6,7 @@ export function getProtocolDefaultConfig(proto: ProtocolType) {
case 'shadowsocks':
return {
type: 'shadowsocks',
+ enable: false,
port: null,
cipher: 'chacha20-ietf-poly1305',
server_key: null,
@@ -13,14 +15,36 @@ export function getProtocolDefaultConfig(proto: ProtocolType) {
obfs_path: null,
} as any;
case 'vmess':
- return { type: 'vmess', port: null, transport: 'tcp', security: 'none' } as any;
+ return {
+ type: 'vmess',
+ enable: false,
+ port: null,
+ transport: 'tcp',
+ security: 'none',
+ } as any;
case 'vless':
- return { type: 'vless', port: null, transport: 'tcp', security: 'none', flow: 'none' } as any;
+ return {
+ type: 'vless',
+ enable: false,
+ port: null,
+ transport: 'tcp',
+ security: 'none',
+ flow: 'none',
+ xhttp_mode: XHTTP_MODES[0], // 'auto'
+ xhttp_extra: null,
+ } as any;
case 'trojan':
- return { type: 'trojan', port: null, transport: 'tcp', security: 'tls' } as any;
+ return {
+ type: 'trojan',
+ enable: false,
+ port: null,
+ transport: 'tcp',
+ security: 'tls',
+ } as any;
case 'hysteria2':
return {
type: 'hysteria2',
+ enable: false,
port: null,
hop_ports: null,
hop_interval: null,
@@ -33,6 +57,7 @@ export function getProtocolDefaultConfig(proto: ProtocolType) {
case 'tuic':
return {
type: 'tuic',
+ enable: false,
port: null,
disable_sni: false,
reduce_rtt: false,
@@ -46,17 +71,20 @@ export function getProtocolDefaultConfig(proto: ProtocolType) {
case 'socks':
return {
type: 'socks',
+ enable: false,
port: null,
} as any;
case 'naive':
return {
type: 'naive',
+ enable: false,
port: null,
security: 'none',
} as any;
case 'http':
return {
type: 'http',
+ enable: false,
port: null,
security: 'none',
} as any;
diff --git a/apps/admin/app/dashboard/servers/form-schema/fields.ts b/apps/admin/app/dashboard/servers/form-schema/fields.ts
index 2f06c97..f3a31d6 100644
--- a/apps/admin/app/dashboard/servers/form-schema/fields.ts
+++ b/apps/admin/app/dashboard/servers/form-schema/fields.ts
@@ -211,7 +211,7 @@ export const PROTOCOL_FIELDS: Record = {
condition: (p) => p.transport === 'grpc',
},
{
- name: 'mode',
+ name: 'xhttp_mode',
type: 'select',
label: 'mode',
options: XHTTP_MODES,
@@ -220,7 +220,7 @@ export const PROTOCOL_FIELDS: Record = {
condition: (p) => p.transport === 'xhttp',
},
{
- name: 'extra',
+ name: 'xhttp_extra',
type: 'textarea',
label: 'extra',
placeholder: '{}',
diff --git a/apps/admin/app/dashboard/servers/form-schema/schemas.ts b/apps/admin/app/dashboard/servers/form-schema/schemas.ts
index 911ea0f..7c06900 100644
--- a/apps/admin/app/dashboard/servers/form-schema/schemas.ts
+++ b/apps/admin/app/dashboard/servers/form-schema/schemas.ts
@@ -10,6 +10,7 @@ import {
TRANSPORTS,
TUIC_CONGESTION,
TUIC_UDP_RELAY_MODES,
+ XHTTP_MODES,
} from './constants';
const nullableString = z.string().nullish();
@@ -18,9 +19,10 @@ const nullablePort = z.number().int().min(0).max(65535).nullish();
const ss = z.object({
type: z.literal('shadowsocks'),
+ enable: nullableBool,
host: nullableString,
port: nullablePort,
- cipher: z.enum(SS_CIPHERS as any).nullish(),
+ cipher: z.enum(SS_CIPHERS).nullish(),
server_key: nullableString,
obfs: z.enum(['none', 'http', 'tls'] as const).nullish(),
obfs_host: nullableString,
@@ -29,10 +31,11 @@ const ss = z.object({
const vmess = z.object({
type: z.literal('vmess'),
+ enable: nullableBool,
host: nullableString,
port: nullablePort,
- transport: z.enum(TRANSPORTS.vmess as any).nullish(),
- security: z.enum(SECURITY.vmess as any).nullish(),
+ transport: z.enum(TRANSPORTS.vmess).nullish(),
+ security: z.enum(SECURITY.vmess).nullish(),
path: nullableString,
service_name: nullableString,
sni: nullableString,
@@ -42,13 +45,14 @@ const vmess = z.object({
const vless = z.object({
type: z.literal('vless'),
+ enable: nullableBool,
host: nullableString,
port: nullablePort,
- transport: z.enum(TRANSPORTS.vless as any).nullish(),
- security: z.enum(SECURITY.vless as any).nullish(),
+ transport: z.enum(TRANSPORTS.vless).nullish(),
+ security: z.enum(SECURITY.vless).nullish(),
path: nullableString,
service_name: nullableString,
- flow: z.enum(FLOWS.vless as any).nullish(),
+ flow: z.enum(FLOWS.vless).nullish(),
sni: nullableString,
allow_insecure: nullableBool,
fingerprint: nullableString,
@@ -57,11 +61,11 @@ const vless = z.object({
reality_private_key: nullableString,
reality_public_key: nullableString,
reality_short_id: nullableString,
- mode: nullableString,
- extra: nullableString,
- encryption: z.enum(ENCRYPTION_TYPES as any).nullish(),
- encryption_mode: z.enum(ENCRYPTION_MODES as any).nullish(),
- encryption_rtt: z.enum(ENCRYPTION_RTT as any).nullish(),
+ xhttp_mode: z.enum(XHTTP_MODES).nullish(),
+ xhttp_extra: nullableString,
+ encryption: z.enum(ENCRYPTION_TYPES).nullish(),
+ encryption_mode: z.enum(ENCRYPTION_MODES).nullish(),
+ encryption_rtt: z.enum(ENCRYPTION_RTT).nullish(),
encryption_ticket: nullableString,
encryption_server_padding: nullableString,
encryption_private_key: nullableString,
@@ -71,10 +75,11 @@ const vless = z.object({
const trojan = z.object({
type: z.literal('trojan'),
+ enable: nullableBool,
host: nullableString,
port: nullablePort,
- transport: z.enum(TRANSPORTS.trojan as any).nullish(),
- security: z.enum(SECURITY.trojan as any).nullish(),
+ transport: z.enum(TRANSPORTS.trojan).nullish(),
+ security: z.enum(SECURITY.trojan).nullish(),
path: nullableString,
service_name: nullableString,
sni: nullableString,
@@ -84,12 +89,13 @@ const trojan = z.object({
const hysteria2 = z.object({
type: z.literal('hysteria2'),
+ enable: nullableBool,
hop_ports: nullableString,
hop_interval: z.number().nullish(),
obfs_password: nullableString,
obfs: z.enum(['none', 'salamander'] as const).nullish(),
port: nullablePort,
- security: z.enum(SECURITY.hysteria2 as any).nullish(),
+ security: z.enum(SECURITY.hysteria2).nullish(),
sni: nullableString,
allow_insecure: nullableBool,
fingerprint: nullableString,
@@ -99,13 +105,14 @@ const hysteria2 = z.object({
const tuic = z.object({
type: z.literal('tuic'),
+ enable: nullableBool,
host: nullableString,
port: nullablePort,
disable_sni: z.boolean().nullish(),
reduce_rtt: z.boolean().nullish(),
- udp_relay_mode: z.enum(TUIC_UDP_RELAY_MODES as any).nullish(),
- congestion_controller: z.enum(TUIC_CONGESTION as any).nullish(),
- security: z.enum(SECURITY.tuic as any).nullish(),
+ udp_relay_mode: z.enum(TUIC_UDP_RELAY_MODES).nullish(),
+ congestion_controller: z.enum(TUIC_CONGESTION).nullish(),
+ security: z.enum(SECURITY.tuic).nullish(),
sni: nullableString,
allow_insecure: nullableBool,
fingerprint: nullableString,
@@ -113,8 +120,9 @@ const tuic = z.object({
const anytls = z.object({
type: z.literal('anytls'),
+ enable: nullableBool,
port: nullablePort,
- security: z.enum(SECURITY.anytls as any).nullish(),
+ security: z.enum(SECURITY.anytls).nullish(),
sni: nullableString,
allow_insecure: nullableBool,
fingerprint: nullableString,
@@ -123,13 +131,15 @@ const anytls = z.object({
const socks = z.object({
type: z.literal('socks'),
+ enable: nullableBool,
port: nullablePort,
});
const naive = z.object({
type: z.literal('naive'),
+ enable: nullableBool,
port: nullablePort,
- security: z.enum(SECURITY.naive as any).nullish(),
+ security: z.enum(SECURITY.naive).nullish(),
sni: nullableString,
allow_insecure: nullableBool,
fingerprint: nullableString,
@@ -137,8 +147,9 @@ const naive = z.object({
const http = z.object({
type: z.literal('http'),
+ enable: nullableBool,
port: nullablePort,
- security: z.enum(SECURITY.http as any).nullish(),
+ security: z.enum(SECURITY.http).nullish(),
sni: nullableString,
allow_insecure: nullableBool,
fingerprint: nullableString,
@@ -146,9 +157,10 @@ const http = z.object({
const mieru = z.object({
type: z.literal('mieru'),
+ enable: nullableBool,
port: nullablePort,
multiplex: z.enum(multiplexLevels).nullish(),
- transport: z.enum(TRANSPORTS.mieru as any).nullish(),
+ transport: z.enum(TRANSPORTS.mieru).nullish(),
});
export const protocolApiScheme = z.discriminatedUnion('type', [
diff --git a/apps/admin/app/dashboard/servers/generate/mlkem768.ts b/apps/admin/app/dashboard/servers/generate/mlkem768.ts
index 7e4261c..94c50db 100644
--- a/apps/admin/app/dashboard/servers/generate/mlkem768.ts
+++ b/apps/admin/app/dashboard/servers/generate/mlkem768.ts
@@ -14,21 +14,3 @@ export async function generateMLKEM768KeyPair() {
privateKey: toB64Url(new Uint8Array(mlkemPrivateKeyRaw)),
};
}
-const test = await generateMLKEM768KeyPair();
-
-console.log('生成的密钥信息:');
-console.log('私钥长度:', test.privateKey.length);
-console.log('公钥长度:', test.publicKey.length);
-console.log(test);
-
-// 从 VLESS 配置字符串中提取的密钥
-const extractedKeys = {
- decryptionKey:
- 'B2qLcDHhiztvBaB4BhMCnU-fM-axE4DZowMK9TIvL5qma2M5fVAmFswPdfej2N1SmlJa5ppidC1ksHLVfoEvjw',
- encryptionKey:
- 'FgEI5sTIzBgZS4psemcdGDCRb5JvdDFqzOeVvLJYEmmZFSgxG1SkYxx8DUO-txGqvYdhFruja-ZzmIQoGOCQEMd0RbK4BhYRm4jE96GXTytu7Hi7pYo9-2SEuKC10righ2ceqis0LoggubajmAFvkop6igZfcmEA3MJ9aHpjGiUszDWy0pA99WY7c1ebTom8xQetW2J2OnkrA_UE8Cuy8AhMPvSBQrsFNmBqnttfVlmKzPS3RWBkIpAZIie1XMGk76nDEXgEsBulEhmYO2Mc-oRfirQfGmYfD1ybYBs9gAKgzQixTrkJtOuRU4GjkwQpxuyeVuww8Pin19IzAlVpUdeEJPVlRHwQDNJ__YsZDJB6rSIaY4tM4ysSs3N-1mmYvkVs1WSa0uy14KRheqMIPfsw_KxLBvp2_ZdZeQIrW3dDxgOuxXWip-g78desyONwwkx0bQK-JDcELHEH0TVmTOe4mSqW1fPI6jJI_ZChmQwBxZKpp2RN2xKmw6W3z4ETdUQDTZgePEkXDveneltNHrGT73WJQ7uEs6hwfXwD2vGcuFx6DKybfYAzgWh9t4IM3mBI7OiGqDItigqIDgaBF6LPTXwby3VxgfEVXXqXzMVdc0BL4da1BPGF-lAtvVJtbpBp7_O_JlB1wWajv8eLCpKjRiKGQey7oLZyRROQ3loNFyRDBjoBVSa2etCmFRCV1wegIBqmJRImJQxPsIV_kkIxeWmPfUIik1GpSTtrWkAFCXZAl4oSFiNhLwlmW_g_s_glGeqcZBNAkiw-OlssPESmqLti-bSJPbmoJMNE0poJXCYX27YyPKVyCtJKM5pzOkUBqMIVsxliU4N2IaWHb8uMYKW8U0tQ8aaeR3Bf5ll0fza78aY3lSQw7At21XkN9LhugzWv-_CPGZQpStGCWtJl5dChLPlmZbRddmekp7UEfXAPW6ONyNrFZ9WUvBCwsdmXcChTXwkg-FIMFHpU25c6IwWqyveuZrQmpvZYEQSgyWhsUBMPywI1vqiLfuhnaqBNU9wPbGA0IrG-w9UGpQErl9ssqPdZRjaIbiM-PKKooehp34QzU3ENj5h944gC4yHMkMzOPUaFl8YUWwmkGCsTNnJyq7NLucTOdQSUsLM2QWEkxWk9c6YyQkwx2mUsR1eGmrsbo8BGK6ppbgotpzMjGZfPOQRdHYh0lzGQ28HGetJ97Vei8Vxxl2u4j6CfHTPET4EHZ_uTuPtRIaaMegKOtUgyKqKj4BqsB5tatIECz8N1H_LP5qlRvUxYqrU-JikuRCoAdfl7VFYLLhe_80cny2UoWFpJ1iovprnALDbIIKZ03LG0OXI8dfEolQijO1xhwoUb7Ci3Xma-wKyEWHhSw0e600SRT0RhDuOh5hVg4KVLILUDDuMIJQyiPRBW3qwAMCk1SzCeXvFqbWFU-TQnVoLGNboaygQ6aumgP_B4DBcmEdyVqAMHIOdAPENvLauALKSiBHVjEHgeB7KpVCGsIGOjdCgb4UmKdsxnXBxC7peXspcmGgmHL-VU6KdMhwHwq1mYeNVEzeshb5mWYj5fgysp_e5U--geYKefs5Y',
-};
-
-console.log('提取的密钥信息:');
-console.log('私钥长度:', extractedKeys.decryptionKey.length);
-console.log('公钥长度:', extractedKeys.encryptionKey.length);
diff --git a/apps/admin/app/dashboard/servers/server-form.tsx b/apps/admin/app/dashboard/servers/server-form.tsx
index 2f53ae8..a78c7a4 100644
--- a/apps/admin/app/dashboard/servers/server-form.tsx
+++ b/apps/admin/app/dashboard/servers/server-form.tsx
@@ -364,24 +364,18 @@ export default function ServerForm(props: {
}, [initialValues]);
async function handleSubmit(values: Record) {
- const filtered = (values?.protocols || []).filter((p: any, index: number) => {
- const port = Number(p?.port);
- const protocolType = PROTOCOLS[index];
- return protocolType && p && Number.isFinite(port) && port > 0 && port <= 65535;
+ const filteredProtocols = (values?.protocols || []).filter((protocol: any) => {
+ const port = Number(protocol?.port);
+ return protocol && Number.isFinite(port) && port > 0 && port <= 65535;
});
- if (filtered.length === 0) {
- toast.error(t('validation_failed'));
- return;
- }
-
const result = {
name: values.name,
country: values.country,
city: values.city,
- ratio: Number(values.ratio || 1),
+ ratio: values.ratio || 1,
address: values.address,
- protocols: filtered,
+ protocols: filteredProtocols,
};
const ok = await onSubmit(result);
@@ -507,6 +501,7 @@ export default function ServerForm(props: {
{t('protocol_configurations_desc')}
+
t === type),
);
const current = (protocolsValues[i] || {}) as Record;
- const isEnabled = current.port && Number(current.port) > 0;
const fields = PROTOCOL_FIELDS[type] || [];
return (
-
-
+
+
{type}
-
-
+ {current.transport.toUpperCase()}
+
)}
- >
- {isEnabled ? t('enabled') : t('disabled')}
-
-
-
- {current.transport && (
-
- {current.transport.toUpperCase()}
-
- )}
- {current.security && current.security !== 'none' && (
-
- {current.security.toUpperCase()}
-
- )}
-
- {current.port && {current.port}}
+ {current.security && current.security !== 'none' && (
+
+ {current.security.toUpperCase()}
+
+ )}
+ {current.port && {current.port}}
+
+
+
+ {current.enable ? t('enabled') : t('disabled')}
+
+
+
{
+ form.setValue(`protocols.${i}.enable`, checked);
+ }}
+ onClick={(e) => e.stopPropagation()}
+ />
@@ -621,7 +622,8 @@ export default function ServerForm(props: {
return false;
})}
>
- {loading && } {t('confirm')}
+ {loading && }
+ {t('confirm')}
diff --git a/apps/admin/services/admin/index.ts b/apps/admin/services/admin/index.ts
index 4ebecd4..bdf189b 100644
--- a/apps/admin/services/admin/index.ts
+++ b/apps/admin/services/admin/index.ts
@@ -1,5 +1,5 @@
// @ts-ignore
-
+
// API 更新时间:
// API 唯一标识:
import * as ads from './ads';
diff --git a/apps/admin/services/admin/typings.d.ts b/apps/admin/services/admin/typings.d.ts
index 8a04a81..7dbb5b1 100644
--- a/apps/admin/services/admin/typings.d.ts
+++ b/apps/admin/services/admin/typings.d.ts
@@ -1496,6 +1496,7 @@ declare namespace API {
type Protocol = {
type: string;
port: number;
+ enable: boolean;
security?: string;
sni?: string;
allow_insecure?: boolean;
@@ -1519,10 +1520,6 @@ declare namespace API {
reduce_rtt?: boolean;
udp_relay_mode?: string;
congestion_controller?: string;
- /** obfs, v2ray-plugin, simple-obfs */
- plugin?: string;
- /** plugin options, eg: obfs=http;obfs-host=www.bing.com */
- plugin_options?: string;
/** mux, eg: off/low/medium/high */
multiplex?: string;
/** padding scheme */
@@ -1531,6 +1528,32 @@ declare namespace API {
up_mbps?: number;
/** download speed limit */
down_mbps?: number;
+ /** obfs, 'none', 'http', 'tls' */
+ obfs?: string;
+ /** obfs host */
+ obfs_host?: string;
+ /** obfs path */
+ obfs_path?: string;
+ /** xhttp mode */
+ xhttp_mode?: string;
+ /** xhttp extra path */
+ xhttp_extra?: string;
+ /** encryption,'none', 'mlkem768x25519plus' */
+ encryption?: string;
+ /** encryption mode,'native', 'xorpub', 'random' */
+ encryption_mode?: string;
+ /** encryption rtt,'0rtt', '1rtt' */
+ encryption_rtt?: string;
+ /** encryption ticket */
+ encryption_ticket?: string;
+ /** encryption server padding */
+ encryption_server_padding?: string;
+ /** encryption private key */
+ encryption_private_key?: string;
+ /** encryption client padding */
+ encryption_client_padding?: string;
+ /** encryption password */
+ encryption_password?: string;
};
type PubilcRegisterConfig = {
diff --git a/apps/admin/services/common/index.ts b/apps/admin/services/common/index.ts
index 73b3bda..61ba129 100644
--- a/apps/admin/services/common/index.ts
+++ b/apps/admin/services/common/index.ts
@@ -1,5 +1,5 @@
// @ts-ignore
-
+
// API 更新时间:
// API 唯一标识:
import * as auth from './auth';
diff --git a/apps/admin/services/common/typings.d.ts b/apps/admin/services/common/typings.d.ts
index 93bc507..3fcee7f 100644
--- a/apps/admin/services/common/typings.d.ts
+++ b/apps/admin/services/common/typings.d.ts
@@ -504,6 +504,7 @@ declare namespace API {
type Protocol = {
type: string;
port: number;
+ enable: boolean;
security?: string;
sni?: string;
allow_insecure?: boolean;
@@ -527,10 +528,6 @@ declare namespace API {
reduce_rtt?: boolean;
udp_relay_mode?: string;
congestion_controller?: string;
- /** obfs, v2ray-plugin, simple-obfs */
- plugin?: string;
- /** plugin options, eg: obfs=http;obfs-host=www.bing.com */
- plugin_options?: string;
/** mux, eg: off/low/medium/high */
multiplex?: string;
/** padding scheme */
@@ -539,6 +536,32 @@ declare namespace API {
up_mbps?: number;
/** download speed limit */
down_mbps?: number;
+ /** obfs, 'none', 'http', 'tls' */
+ obfs?: string;
+ /** obfs host */
+ obfs_host?: string;
+ /** obfs path */
+ obfs_path?: string;
+ /** xhttp mode */
+ xhttp_mode?: string;
+ /** xhttp extra path */
+ xhttp_extra?: string;
+ /** encryption,'none', 'mlkem768x25519plus' */
+ encryption?: string;
+ /** encryption mode,'native', 'xorpub', 'random' */
+ encryption_mode?: string;
+ /** encryption rtt,'0rtt', '1rtt' */
+ encryption_rtt?: string;
+ /** encryption ticket */
+ encryption_ticket?: string;
+ /** encryption server padding */
+ encryption_server_padding?: string;
+ /** encryption private key */
+ encryption_private_key?: string;
+ /** encryption client padding */
+ encryption_client_padding?: string;
+ /** encryption password */
+ encryption_password?: string;
};
type PubilcRegisterConfig = {
diff --git a/apps/user/services/common/index.ts b/apps/user/services/common/index.ts
index 73b3bda..61ba129 100644
--- a/apps/user/services/common/index.ts
+++ b/apps/user/services/common/index.ts
@@ -1,5 +1,5 @@
// @ts-ignore
-
+
// API 更新时间:
// API 唯一标识:
import * as auth from './auth';
diff --git a/apps/user/services/common/typings.d.ts b/apps/user/services/common/typings.d.ts
index 93bc507..3fcee7f 100644
--- a/apps/user/services/common/typings.d.ts
+++ b/apps/user/services/common/typings.d.ts
@@ -504,6 +504,7 @@ declare namespace API {
type Protocol = {
type: string;
port: number;
+ enable: boolean;
security?: string;
sni?: string;
allow_insecure?: boolean;
@@ -527,10 +528,6 @@ declare namespace API {
reduce_rtt?: boolean;
udp_relay_mode?: string;
congestion_controller?: string;
- /** obfs, v2ray-plugin, simple-obfs */
- plugin?: string;
- /** plugin options, eg: obfs=http;obfs-host=www.bing.com */
- plugin_options?: string;
/** mux, eg: off/low/medium/high */
multiplex?: string;
/** padding scheme */
@@ -539,6 +536,32 @@ declare namespace API {
up_mbps?: number;
/** download speed limit */
down_mbps?: number;
+ /** obfs, 'none', 'http', 'tls' */
+ obfs?: string;
+ /** obfs host */
+ obfs_host?: string;
+ /** obfs path */
+ obfs_path?: string;
+ /** xhttp mode */
+ xhttp_mode?: string;
+ /** xhttp extra path */
+ xhttp_extra?: string;
+ /** encryption,'none', 'mlkem768x25519plus' */
+ encryption?: string;
+ /** encryption mode,'native', 'xorpub', 'random' */
+ encryption_mode?: string;
+ /** encryption rtt,'0rtt', '1rtt' */
+ encryption_rtt?: string;
+ /** encryption ticket */
+ encryption_ticket?: string;
+ /** encryption server padding */
+ encryption_server_padding?: string;
+ /** encryption private key */
+ encryption_private_key?: string;
+ /** encryption client padding */
+ encryption_client_padding?: string;
+ /** encryption password */
+ encryption_password?: string;
};
type PubilcRegisterConfig = {
diff --git a/apps/user/services/user/index.ts b/apps/user/services/user/index.ts
index f988131..12fe8d0 100644
--- a/apps/user/services/user/index.ts
+++ b/apps/user/services/user/index.ts
@@ -1,5 +1,5 @@
// @ts-ignore
-
+
// API 更新时间:
// API 唯一标识:
import * as announcement from './announcement';
diff --git a/apps/user/services/user/typings.d.ts b/apps/user/services/user/typings.d.ts
index 825904d..9bbdda5 100644
--- a/apps/user/services/user/typings.d.ts
+++ b/apps/user/services/user/typings.d.ts
@@ -543,6 +543,7 @@ declare namespace API {
type Protocol = {
type: string;
port: number;
+ enable: boolean;
security?: string;
sni?: string;
allow_insecure?: boolean;
@@ -566,10 +567,6 @@ declare namespace API {
reduce_rtt?: boolean;
udp_relay_mode?: string;
congestion_controller?: string;
- /** obfs, v2ray-plugin, simple-obfs */
- plugin?: string;
- /** plugin options, eg: obfs=http;obfs-host=www.bing.com */
- plugin_options?: string;
/** mux, eg: off/low/medium/high */
multiplex?: string;
/** padding scheme */
@@ -578,6 +575,32 @@ declare namespace API {
up_mbps?: number;
/** download speed limit */
down_mbps?: number;
+ /** obfs, 'none', 'http', 'tls' */
+ obfs?: string;
+ /** obfs host */
+ obfs_host?: string;
+ /** obfs path */
+ obfs_path?: string;
+ /** xhttp mode */
+ xhttp_mode?: string;
+ /** xhttp extra path */
+ xhttp_extra?: string;
+ /** encryption,'none', 'mlkem768x25519plus' */
+ encryption?: string;
+ /** encryption mode,'native', 'xorpub', 'random' */
+ encryption_mode?: string;
+ /** encryption rtt,'0rtt', '1rtt' */
+ encryption_rtt?: string;
+ /** encryption ticket */
+ encryption_ticket?: string;
+ /** encryption server padding */
+ encryption_server_padding?: string;
+ /** encryption private key */
+ encryption_private_key?: string;
+ /** encryption client padding */
+ encryption_client_padding?: string;
+ /** encryption password */
+ encryption_password?: string;
};
type PubilcRegisterConfig = {