@@ -83,6 +83,7 @@ export interface HostFormValues {
8383 vless_route ?: string
8484 priority : number
8585 ech_config_list ?: string
86+ pinnedPeerCertSha256 ?: string
8687 fragment_settings ?: {
8788 xray ?: {
8889 packets ?: string
@@ -339,12 +340,11 @@ export const HostFormSchema = z.object({
339340 allowinsecure : z . boolean ( ) . default ( false ) ,
340341 random_user_agent : z . boolean ( ) . default ( false ) ,
341342 use_sni_as_host : z . boolean ( ) . default ( false ) ,
342- vless_route : z
343- . union ( [ z . literal ( '' ) , z . string ( ) . regex ( / ^ [ 0 - 9 a - f A - F ] { 4 } $ / , 'VLESS route must be exactly 4 hex characters' ) ] )
344- . optional ( ) ,
343+ vless_route : z . union ( [ z . literal ( '' ) , z . string ( ) . regex ( / ^ [ 0 - 9 a - f A - F ] { 4 } $ / , 'VLESS route must be exactly 4 hex characters' ) ] ) . optional ( ) ,
345344 priority : z . number ( ) . default ( 0 ) ,
346345 is_disabled : z . boolean ( ) . default ( false ) ,
347346 ech_config_list : z . string ( ) . optional ( ) ,
347+ pinnedPeerCertSha256 : z . string ( ) . max ( 128 , 'Pinned peer cert SHA256 must be at most 128 characters' ) . optional ( ) ,
348348 fragment_settings : z
349349 . object ( {
350350 xray : z
@@ -459,6 +459,7 @@ const initialDefaultValues: HostFormValues = {
459459 vless_route : '' ,
460460 priority : 0 ,
461461 ech_config_list : undefined ,
462+ pinnedPeerCertSha256 : undefined ,
462463 fragment_settings : undefined ,
463464}
464465
@@ -538,6 +539,7 @@ export default function HostsList({ data, onAddHost, isDialogOpen, onSubmit, edi
538539 priority : host . priority || 0 ,
539540 is_disabled : host . is_disabled || false ,
540541 ech_config_list : host . ech_config_list || undefined ,
542+ pinnedPeerCertSha256 : host . pinnedPeerCertSha256 || undefined ,
541543 fragment_settings : host . fragment_settings
542544 ? {
543545 xray : host . fragment_settings . xray ?? undefined ,
@@ -598,8 +600,7 @@ export default function HostsList({ data, onAddHost, isDialogOpen, onSubmit, edi
598600 mode : host . transport_settings . xhttp_settings . mode ?? undefined ,
599601 no_grpc_header : host . transport_settings . xhttp_settings . no_grpc_header === null ? undefined : ! ! host . transport_settings . xhttp_settings . no_grpc_header ,
600602 x_padding_bytes : host . transport_settings . xhttp_settings . x_padding_bytes ?? undefined ,
601- x_padding_obfs_mode :
602- host . transport_settings . xhttp_settings . x_padding_obfs_mode === null ? undefined : ! ! host . transport_settings . xhttp_settings . x_padding_obfs_mode ,
603+ x_padding_obfs_mode : host . transport_settings . xhttp_settings . x_padding_obfs_mode === null ? undefined : ! ! host . transport_settings . xhttp_settings . x_padding_obfs_mode ,
603604 x_padding_key : host . transport_settings . xhttp_settings . x_padding_key ?? undefined ,
604605 x_padding_header : host . transport_settings . xhttp_settings . x_padding_header ?? undefined ,
605606 x_padding_placement : host . transport_settings . xhttp_settings . x_padding_placement ?? undefined ,
@@ -642,10 +643,7 @@ export default function HostsList({ data, onAddHost, isDialogOpen, onSubmit, edi
642643 tti : host . transport_settings . kcp_settings . tti ?? undefined ,
643644 uplink_capacity : host . transport_settings . kcp_settings . uplink_capacity ?? undefined ,
644645 downlink_capacity : host . transport_settings . kcp_settings . downlink_capacity ?? undefined ,
645- congestion :
646- host . transport_settings . kcp_settings . congestion === null
647- ? undefined
648- : ! ! host . transport_settings . kcp_settings . congestion ,
646+ congestion : host . transport_settings . kcp_settings . congestion === null ? undefined : ! ! host . transport_settings . kcp_settings . congestion ,
649647 read_buffer_size : host . transport_settings . kcp_settings . read_buffer_size ?? undefined ,
650648 write_buffer_size : host . transport_settings . kcp_settings . write_buffer_size ?? undefined ,
651649 }
@@ -708,6 +706,7 @@ export default function HostsList({ data, onAddHost, isDialogOpen, onSubmit, edi
708706 vless_route : host . vless_route || undefined ,
709707 priority : host . priority ?? 0 , // Use the same priority as the original host
710708 ech_config_list : host . ech_config_list ,
709+ pinnedPeerCertSha256 : host . pinnedPeerCertSha256 || undefined ,
711710 fragment_settings : host . fragment_settings ,
712711 noise_settings : host . noise_settings ,
713712 mux_settings : host . mux_settings ,
@@ -815,6 +814,7 @@ export default function HostsList({ data, onAddHost, isDialogOpen, onSubmit, edi
815814 vless_route : host . vless_route || undefined ,
816815 priority : index , // New priority based on position
817816 ech_config_list : host . ech_config_list ,
817+ pinnedPeerCertSha256 : host . pinnedPeerCertSha256 || undefined ,
818818 fragment_settings : host . fragment_settings ,
819819 noise_settings : host . noise_settings ,
820820 mux_settings : host . mux_settings
@@ -860,8 +860,7 @@ export default function HostsList({ data, onAddHost, isDialogOpen, onSubmit, edi
860860 mode : host . transport_settings . xhttp_settings . mode ?? undefined ,
861861 no_grpc_header : host . transport_settings . xhttp_settings . no_grpc_header === null ? undefined : ! ! host . transport_settings . xhttp_settings . no_grpc_header ,
862862 x_padding_bytes : host . transport_settings . xhttp_settings . x_padding_bytes ?? undefined ,
863- x_padding_obfs_mode :
864- host . transport_settings . xhttp_settings . x_padding_obfs_mode === null ? undefined : ! ! host . transport_settings . xhttp_settings . x_padding_obfs_mode ,
863+ x_padding_obfs_mode : host . transport_settings . xhttp_settings . x_padding_obfs_mode === null ? undefined : ! ! host . transport_settings . xhttp_settings . x_padding_obfs_mode ,
865864 x_padding_key : host . transport_settings . xhttp_settings . x_padding_key ?? undefined ,
866865 x_padding_header : host . transport_settings . xhttp_settings . x_padding_header ?? undefined ,
867866 x_padding_placement : host . transport_settings . xhttp_settings . x_padding_placement ?? undefined ,
@@ -904,10 +903,7 @@ export default function HostsList({ data, onAddHost, isDialogOpen, onSubmit, edi
904903 tti : host . transport_settings . kcp_settings . tti ?? undefined ,
905904 uplink_capacity : host . transport_settings . kcp_settings . uplink_capacity ?? undefined ,
906905 downlink_capacity : host . transport_settings . kcp_settings . downlink_capacity ?? undefined ,
907- congestion :
908- host . transport_settings . kcp_settings . congestion === null
909- ? undefined
910- : ! ! host . transport_settings . kcp_settings . congestion ,
906+ congestion : host . transport_settings . kcp_settings . congestion === null ? undefined : ! ! host . transport_settings . kcp_settings . congestion ,
911907 read_buffer_size : host . transport_settings . kcp_settings . read_buffer_size ?? undefined ,
912908 write_buffer_size : host . transport_settings . kcp_settings . write_buffer_size ?? undefined ,
913909 }
@@ -1046,18 +1042,11 @@ export default function HostsList({ data, onAddHost, isDialogOpen, onSubmit, edi
10461042 getRowId = { host => host . id ?? host . remark ?? 'host' }
10471043 isLoading = { isCurrentlyLoading }
10481044 loadingRows = { 6 }
1049- className = "gap-3 max-w-screen-[2000px] min-h-screen overflow-hidden"
1045+ className = "max-w-screen-[2000px] min-h-screen gap-3 overflow-hidden"
10501046 mode = "grid"
10511047 showEmptyState = { false }
10521048 renderGridItem = { host => (
1053- < SortableHost
1054- key = { host . id ?? 'new' }
1055- host = { host }
1056- onEdit = { handleEdit }
1057- onDuplicate = { handleDuplicate }
1058- onDataChanged = { refreshHostsData }
1059- disabled = { isUpdatingPriorities }
1060- />
1049+ < SortableHost key = { host . id ?? 'new' } host = { host } onEdit = { handleEdit } onDuplicate = { handleDuplicate } onDataChanged = { refreshHostsData } disabled = { isUpdatingPriorities } />
10611050 ) }
10621051 renderGridSkeleton = { index => (
10631052 < Card key = { index } className = "animate-pulse" >
@@ -1087,7 +1076,7 @@ export default function HostsList({ data, onAddHost, isDialogOpen, onSubmit, edi
10871076 getRowId = { host => host . id ?? host . remark ?? 'host' }
10881077 isLoading = { isCurrentlyLoading }
10891078 loadingRows = { 6 }
1090- className = "gap-3 max-w-screen-[2000px] min-h-screen overflow-hidden"
1079+ className = "max-w-screen-[2000px] min-h-screen gap-3 overflow-hidden"
10911080 mode = "list"
10921081 showEmptyState = { false }
10931082 onRowClick = { handleEdit }
0 commit comments