@@ -521,88 +521,99 @@ async function downloadCollection(req, res) {
521521 ua : reqUA ,
522522 } ) ;
523523 let subUserInfoOfSub ;
524- // forward flow header from the first subscription in this collection
525- const allSubs = $ . read ( SUBS_KEY ) ;
526- const subnames = collection . subscriptions ;
527- if ( subnames . length > 0 ) {
528- const sub = findByName ( allSubs , subnames [ 0 ] ) ;
529- if (
530- sub . source !== 'local' ||
531- [ 'localFirst' , 'remoteFirst' ] . includes ( sub . mergeSources )
532- ) {
533- try {
534- let url =
535- `${ sub . url } `
536- . split ( / [ \r \n ] + / )
537- . map ( ( i ) => i . trim ( ) )
538- . filter ( ( i ) => i . length ) ?. [ 0 ] || '' ;
539-
540- let $arguments = { } ;
541- const rawArgs = url . split ( '#' ) ;
542- url = url . split ( '#' ) [ 0 ] ;
543- if ( rawArgs . length > 1 ) {
544- try {
545- // 支持 `#${encodeURIComponent(JSON.stringify({arg1: "1"}))}`
546- $arguments = JSON . parse (
547- decodeURIComponent ( rawArgs [ 1 ] ) ,
548- ) ;
549- } catch ( e ) {
550- for ( const pair of rawArgs [ 1 ] . split ( '&' ) ) {
551- const key = pair . split ( '=' ) [ 0 ] ;
552- const value = pair . split ( '=' ) [ 1 ] ;
553- // 部分兼容之前的逻辑 const value = pair.split('=')[1] || true;
554- $arguments [ key ] =
555- value == null || value === ''
556- ? true
557- : decodeURIComponent ( value ) ;
524+ // 默认透传第一个子订阅的流量信息,除非 firstSubFlow 显式设置为 false
525+ if ( collection . firstSubFlow !== false ) {
526+ // forward flow header from the first subscription in this collection
527+ const allSubs = $ . read ( SUBS_KEY ) ;
528+ const subnames = collection . subscriptions ;
529+ if ( subnames . length > 0 ) {
530+ const sub = findByName ( allSubs , subnames [ 0 ] ) ;
531+ if (
532+ sub . source !== 'local' ||
533+ [ 'localFirst' , 'remoteFirst' ] . includes ( sub . mergeSources )
534+ ) {
535+ try {
536+ let url =
537+ `${ sub . url } `
538+ . split ( / [ \r \n ] + / )
539+ . map ( ( i ) => i . trim ( ) )
540+ . filter ( ( i ) => i . length ) ?. [ 0 ] || '' ;
541+
542+ let $arguments = { } ;
543+ const rawArgs = url . split ( '#' ) ;
544+ url = url . split ( '#' ) [ 0 ] ;
545+ if ( rawArgs . length > 1 ) {
546+ try {
547+ // 支持 `#${encodeURIComponent(JSON.stringify({arg1: "1"}))}`
548+ $arguments = JSON . parse (
549+ decodeURIComponent ( rawArgs [ 1 ] ) ,
550+ ) ;
551+ } catch ( e ) {
552+ for ( const pair of rawArgs [ 1 ] . split ( '&' ) ) {
553+ const key = pair . split ( '=' ) [ 0 ] ;
554+ const value = pair . split ( '=' ) [ 1 ] ;
555+ // 部分兼容之前的逻辑 const value = pair.split('=')[1] || true;
556+ $arguments [ key ] =
557+ value == null || value === ''
558+ ? true
559+ : decodeURIComponent ( value ) ;
560+ }
558561 }
559562 }
560- }
561- if ( ! $arguments . noFlow && / ^ h t t p s ? : / . test ( url ) ) {
562- subUserInfoOfSub = await getFlowHeaders (
563- $arguments ?. insecure ? `${ url } #insecure` : url ,
564- $arguments . flowUserAgent ,
565- undefined ,
566- proxy || sub . proxy || collection . proxy ,
567- $arguments . flowUrl ,
563+ if ( ! $arguments . noFlow && / ^ h t t p s ? : / . test ( url ) ) {
564+ subUserInfoOfSub = await getFlowHeaders (
565+ $arguments ?. insecure
566+ ? `${ url } #insecure`
567+ : url ,
568+ $arguments . flowUserAgent ,
569+ undefined ,
570+ proxy || sub . proxy || collection . proxy ,
571+ $arguments . flowUrl ,
572+ ) ;
573+ }
574+ } catch ( err ) {
575+ $ . error (
576+ `组合订阅 ${ name } 中的子订阅 ${
577+ sub . name
578+ } 获取流量信息时发生错误: ${
579+ err . message ?? err
580+ } `,
568581 ) ;
569582 }
570- } catch ( err ) {
571- $ . error (
572- `组合订阅 ${ name } 中的子订阅 ${
573- sub . name
574- } 获取流量信息时发生错误: ${ err . message ?? err } `,
575- ) ;
576583 }
577- }
578- if ( sub . subUserinfo ) {
579- let subUserInfo ;
580- if ( / ^ h t t p s ? : \/ \/ / . test ( sub . subUserinfo ) ) {
581- try {
582- subUserInfo = await getFlowHeaders (
583- undefined ,
584- undefined ,
585- undefined ,
586- proxy || sub . proxy ,
587- sub . subUserinfo ,
588- ) ;
589- } catch ( e ) {
590- $ . error (
591- `组合订阅 ${ name } 使用自定义流量链接 ${
592- sub . subUserinfo
593- } 获取流量信息时发生错误: ${ JSON . stringify ( e ) } `,
594- ) ;
584+ if ( sub . subUserinfo ) {
585+ let subUserInfo ;
586+ if ( / ^ h t t p s ? : \/ \/ / . test ( sub . subUserinfo ) ) {
587+ try {
588+ subUserInfo = await getFlowHeaders (
589+ undefined ,
590+ undefined ,
591+ undefined ,
592+ proxy || sub . proxy ,
593+ sub . subUserinfo ,
594+ ) ;
595+ } catch ( e ) {
596+ $ . error (
597+ `组合订阅 ${ name } 使用自定义流量链接 ${
598+ sub . subUserinfo
599+ } 获取流量信息时发生错误: ${ JSON . stringify (
600+ e ,
601+ ) } `,
602+ ) ;
603+ }
604+ } else {
605+ subUserInfo = sub . subUserinfo ;
595606 }
596- } else {
597- subUserInfo = sub . subUserinfo ;
607+ subUserInfoOfSub = [ subUserInfo , subUserInfoOfSub ]
608+ . filter ( ( i ) => i )
609+ . join ( '; ' ) ;
598610 }
599- subUserInfoOfSub = [ subUserInfo , subUserInfoOfSub ]
600- . filter ( ( i ) => i )
601- . join ( '; ' ) ;
602611 }
603- }
604612
605- $ . info ( `组合订阅 ${ name } 透传的的流量信息: ${ subUserInfoOfSub } ` ) ;
613+ $ . info (
614+ `组合订阅 ${ name } 透传的的流量信息: ${ subUserInfoOfSub } ` ,
615+ ) ;
616+ }
606617
607618 let subUserInfoOfCol ;
608619 if ( / ^ h t t p s ? : \/ \/ / . test ( collection . subUserinfo ) ) {
0 commit comments