@@ -840,19 +840,27 @@ const anytlsParser = (proxy = {}) => {
840840} ;
841841
842842const wireguardParser = ( proxy = { } ) => {
843- const local_address = [ 'ip' , 'ipv6' ]
843+ const address = [ 'ip' , 'ipv6' ]
844844 . map ( ( i ) => proxy [ i ] )
845845 . map ( ( i ) => {
846846 if ( isIPv4 ( i ) ) return `${ i } /32` ;
847847 if ( isIPv6 ( i ) ) return `${ i } /128` ;
848848 } )
849849 . filter ( ( i ) => i ) ;
850850 const parsedProxy = {
851+ system : ! ! proxy . system ,
852+ mtu : proxy . mtu ? parseInt ( `${ proxy . mtu } ` , 10 ) : undefined ,
853+ udp_timeout : proxy [ 'udp-timeout' ]
854+ ? parseInt ( `${ proxy [ 'udp-timeout' ] } ` , 10 )
855+ : undefined ,
856+ workers : proxy [ 'workers' ]
857+ ? parseInt ( `${ proxy [ 'workers' ] } ` , 10 )
858+ : undefined ,
851859 tag : proxy . name ,
852860 type : 'wireguard' ,
853861 server : proxy . server ,
854862 server_port : parseInt ( `${ proxy . port } ` , 10 ) ,
855- local_address ,
863+ address ,
856864 private_key : proxy [ 'private-key' ] ,
857865 peer_public_key : proxy [ 'public-key' ] ,
858866 pre_shared_key : proxy [ 'pre-shared-key' ] ,
@@ -868,14 +876,42 @@ const wireguardParser = (proxy = {}) => {
868876 } else {
869877 delete parsedProxy . reserved ;
870878 }
879+ if ( ! Array . isArray ( proxy . peers ) || proxy . peers . length === 0 ) {
880+ proxy . peers = [ { } ] ;
881+ }
871882 if ( proxy . peers && proxy . peers . length > 0 ) {
872883 parsedProxy . peers = [ ] ;
873884 for ( const p of proxy . peers ) {
885+ let address ;
886+ let port ;
887+ if ( p . server && p . port ) {
888+ address = p . server ;
889+ port = parseInt ( `${ p . port } ` , 10 ) ;
890+ } else {
891+ address = parsedProxy . server ;
892+ port = parseInt ( `${ parsedProxy . server_port } ` , 10 ) ;
893+ }
874894 const peer = {
875- server : p . server ,
876- server_port : parseInt ( `${ p . port } ` , 10 ) ,
877- public_key : p [ 'public-key' ] ,
878- allowed_ips : p [ 'allowed-ips' ] || p . allowed_ips ,
895+ address,
896+ port,
897+ persistent_keepalive_interval : p [
898+ 'persistent-keepalive-interval'
899+ ]
900+ ? parseInt ( `${ p [ 'persistent-keepalive-interval' ] } ` , 10 )
901+ : undefined ,
902+ public_key :
903+ p [ 'public-key' ] ||
904+ p [ 'public_key' ] ||
905+ parsedProxy . peer_public_key ,
906+ pre_shared_key :
907+ p [ 'pre-shared-key' ] ||
908+ p [ 'pre_shared_key' ] ||
909+ parsedProxy . pre_shared_key ,
910+ allowed_ips : p [ 'allowed-ips' ] ||
911+ p . allowed_ips || [
912+ '0.0.0.0/0' ,
913+ ...( proxy . ipv6 ? [ '::/0' ] : [ ] ) ,
914+ ] ,
879915 reserved : [ ] ,
880916 } ;
881917 if ( typeof p . reserved === 'string' ) {
@@ -885,7 +921,10 @@ const wireguardParser = (proxy = {}) => {
885921 } else {
886922 delete peer . reserved ;
887923 }
888- if ( p [ 'pre-shared-key' ] ) peer . pre_shared_key = p [ 'pre-shared-key' ] ;
924+ if ( ! Array . isArray ( peer . reserved ) || peer . reserved . length === 0 ) {
925+ peer . reserved = parsedProxy . reserved ;
926+ }
927+ // if (p['pre-shared-key']) peer.pre_shared_key = p['pre-shared-key'];
889928 parsedProxy . peers . push ( peer ) ;
890929 }
891930 }
@@ -894,6 +933,11 @@ const wireguardParser = (proxy = {}) => {
894933 detourParser ( proxy , parsedProxy ) ;
895934 smuxParser ( proxy . smux , parsedProxy ) ;
896935 ipVersionParser ( proxy , parsedProxy ) ;
936+ delete parsedProxy . server ;
937+ delete parsedProxy . server_port ;
938+ delete parsedProxy . pre_shared_key ;
939+ delete parsedProxy . peer_public_key ;
940+ delete parsedProxy . reserved ;
897941 return parsedProxy ;
898942} ;
899943
@@ -1052,9 +1096,21 @@ export default function singbox_Producer() {
10521096 }
10531097 } ) ;
10541098
1055- return type === 'internal'
1056- ? list
1057- : JSON . stringify ( { outbounds : list } , null , 2 ) ;
1099+ if ( type === 'internal' ) return list ;
1100+
1101+ const categorized = list . reduce (
1102+ ( result , item ) => {
1103+ if ( [ 'wireguard' ] . includes ( item . type ) ) {
1104+ result . endpoints . push ( item ) ;
1105+ } else {
1106+ result . outbounds . push ( item ) ;
1107+ }
1108+ return result ;
1109+ } ,
1110+ { outbounds : [ ] , endpoints : [ ] } ,
1111+ ) ;
1112+
1113+ return JSON . stringify ( categorized , null , 2 ) ;
10581114 } ;
10591115 return { type, produce } ;
10601116}
0 commit comments