@@ -475,6 +475,66 @@ function ScriptOperator(
475475 } ;
476476}
477477
478+ const ADD_PROXIES_FROM_SUBSCRIPTION_OPERATOR =
479+ 'Add Proxies From Subscription Operator' ;
480+
481+ function normalizeMihomoConfig ( content ) {
482+ if ( ! content ) return { } ;
483+
484+ const config = YAML . safeLoad ( content ) ;
485+ return isPlainObject ( config ) ? config : { } ;
486+ }
487+
488+ function getMihomoProfileProxies ( config ) {
489+ return Array . isArray ( config ?. proxies ) ? config . proxies : [ ] ;
490+ }
491+
492+ function AddProxiesFromSubscriptionOperator ( {
493+ sourceType = 'subscription' ,
494+ sourceName,
495+ includeUnsupportedProxy,
496+ position = 'replace' ,
497+ } = { } ) {
498+ const apply = async ( input ) => {
499+ if ( input ?. $file ?. type !== 'mihomoProfile' ) return input ;
500+
501+ const config = normalizeMihomoConfig ( input . $content ) ;
502+ const currentProxies = getMihomoProfileProxies ( config ) ;
503+ const proxies = await produceArtifact ( {
504+ type : sourceType ,
505+ name : sourceName ,
506+ platform : 'mihomo' ,
507+ produceType : 'internal' ,
508+ produceOpts : {
509+ 'delete-underscore-fields' : true ,
510+ 'include-unsupported-proxy' : includeUnsupportedProxy ,
511+ } ,
512+ } ) ;
513+
514+ switch ( position ) {
515+ case 'front' :
516+ config . proxies = [ ...proxies , ...currentProxies ] ;
517+ break ;
518+ case 'back' :
519+ config . proxies = [ ...currentProxies , ...proxies ] ;
520+ break ;
521+ case 'replace' :
522+ default :
523+ config . proxies = proxies ;
524+ break ;
525+ }
526+
527+ input . $content = ProxyUtils . yaml . safeDump ( config ) ;
528+ return input ;
529+ } ;
530+
531+ return {
532+ name : ADD_PROXIES_FROM_SUBSCRIPTION_OPERATOR ,
533+ func : apply ,
534+ nodeFunc : apply ,
535+ } ;
536+ }
537+
478538function parseIP4P ( IP4P ) {
479539 let server ;
480540 let port ;
@@ -1136,6 +1196,8 @@ export default {
11361196 'Regex Rename Operator' : RegexRenameOperator ,
11371197 'Regex Delete Operator' : RegexDeleteOperator ,
11381198 'Script Operator' : ScriptOperator ,
1199+ [ ADD_PROXIES_FROM_SUBSCRIPTION_OPERATOR ] :
1200+ AddProxiesFromSubscriptionOperator ,
11391201 [ RESPONSE_TRANSFORMER ] : ResponseTransformer ,
11401202 'Handle Duplicate Operator' : HandleDuplicateOperator ,
11411203 'Resolve Domain Operator' : ResolveDomainOperator ,
0 commit comments