@liblaf/sub-store 0.2.1 → 0.2.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/sub-store.js CHANGED
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env bun
2
2
  // @bun
3
- var q="0.2.1";import{buildApplication as _e,buildRouteMap as We}from"@stricli/core";import{buildCommand as de}from"@stricli/core";var X=de({docs:{brief:"Print a friendly, customizable greeting."},parameters:{flags:{greeting:{kind:"parsed",parse:String,brief:"use TEXT as the greeting message",default:"Hello, world!"}}},async func({greeting:e}){console.log(e)}});import*as C from"fs/promises";import te from"path";import ue from"ky";function u(){return ue.create({cf:{cacheEverything:!0,cacheTtl:1,cacheTtlByStatus:{"200":60}},redirect:"follow"})}import fe from"consola";class h{client;constructor(e=process.env.SUB_STORE_URL??"https://sub.liblaf.me",r=process.env.SUB_STORE_TOKEN){let t=u();this.client=t.extend({headers:{Authorization:`Bearer ${r}`},prefixUrl:e})}async listProfiles(){let e=await this.client.get("api/profiles").json(),r={};for(let t of e.result)r[t.id]=t;return r}async uploadProfileArtifact(e,r,t){await this.client.post(`api/profiles/${e}/${r}`,{body:t})}async createProvider(e){await this.client.post(`api/providers/${e.id}`,{json:e})}async listProviders(){let e=await this.client.get("api/providers").json(),r={};for(let t of e.result)r[t.id]=t;return r}async downloadProviderArtifact(e,r){let t=await this.client.get(`api/providers/${e}/${r}`);if(t.headers.get("X-From-Cache")==="true")fe.warn(`providers/${e}/${r} is from cache, it may be outdated.`);return t}async uploadProviderArtifact(e,r,t){if(r.endsWith(".json")){await this.client.post(`api/providers/${e}/${r}`,{json:t});return}else await this.client.post(`api/providers/${e}/${r}`,{body:t})}}var n={name:{common:"Unknown"},cca2:"UN",flag:"\uD83C\uDDFA\uD83C\uDDF3"};class k{wrapped;provider;country=n;emby=!1;info=!1;multiplier=1;constructor(e,r){this.wrapped=e;this.provider=r}get prettyName(){let e=this.name;if(e=this.name.match(/@(?<name>[\w-]+)/)?.groups?.name??this.name,e.startsWith("\u3010"))return`[${this.provider.id}]${e}`;return`[${this.provider.id}] ${e}`}}class T extends k{get name(){return this.wrapped.name}get type(){return this.wrapped.type}get server(){return this.wrapped.server}render(){return{...this.wrapped,name:this.prettyName}}}import he from"js-yaml";function v(e){return he.load(e)}import*as J from"fs/promises";var B={"allow-lan":!0,"bind-address":"*","lan-allowed-ips":["100.64.0.0/10","127.0.0.0/8","172.16.0.0/12","::1/128"],"skip-auth-prefixes":["127.0.0.0/8","::1/128"],"log-level":"warning",ipv6:!0,"external-controller":"127.0.0.1:9090","external-ui":"ui","external-ui-url":"https://github.com/Zephyruso/zashboard/releases/latest/download/dist.zip",profile:{"store-selected":!0,"store-fake-ip":!0},"unified-delay":!1,"tcp-concurrent":!0,"geo-auto-update":!0,"geo-update-interval":24,"geox-url":{geoip:"https://testingcf.jsdelivr.net/gh/MetaCubeX/meta-rules-dat@release/geoip.dat",geosite:"https://testingcf.jsdelivr.net/gh/MetaCubeX/meta-rules-dat@release/geosite.dat",mmdb:"https://testingcf.jsdelivr.net/gh/MetaCubeX/meta-rules-dat@release/country.mmdb",asn:"https://testingcf.jsdelivr.net/gh/MetaCubeX/meta-rules-dat@release/GeoLite2-ASN.mmdb"},dns:{enable:!0,"cache-algorithm":"arc","prefer-h3":!1,ipv6:!0,"enhanced-mode":"redir-host","use-hosts":!0,"use-system-hosts":!0,"respect-rules":!0,"default-nameserver":["system","101.6.6.6","119.29.29.29","223.5.5.5"],"proxy-server-nameserver":["system","https://101.6.6.6/dns-query","https://doh.pub/dns-query","https://dns.alidns.com/dns-query"],"direct-nameserver":["system","https://101.6.6.6/dns-query","https://doh.pub/dns-query","https://dns.alidns.com/dns-query"],"direct-nameserver-follow-policy":!1,nameserver:["system","https://101.6.6.6/dns-query","https://doh.pub/dns-query","https://dns.alidns.com/dns-query"],fallback:["https://cloudflare-dns.com/dns-query","https://dns.google/dns-query"],"fallback-filter":{geoip:!0,"geoip-code":"cn"},"nameserver-policy":{"ruleset:domain-direct":["system","https://101.6.6.6/dns-query","https://doh.pub/dns-query","https://dns.alidns.com/dns-query"],"ruleset:domain-domestic":["system","https://101.6.6.6/dns-query","https://doh.pub/dns-query","https://dns.alidns.com/dns-query"],"ruleset:domain-local":["system","https://101.6.6.6/dns-query","https://doh.pub/dns-query","https://dns.alidns.com/dns-query"],"ruleset:domain-ai":["https://cloudflare-dns.com/dns-query","https://dns.google/dns-query"],"ruleset:domain-binance":["https://cloudflare-dns.com/dns-query","https://dns.google/dns-query"],"ruleset:domain-download":["https://cloudflare-dns.com/dns-query","https://dns.google/dns-query"],"ruleset:domain-global":["https://cloudflare-dns.com/dns-query","https://dns.google/dns-query"],"ruleset:domain-stream":["https://cloudflare-dns.com/dns-query","https://dns.google/dns-query"],"ruleset:domain-telegram":["https://cloudflare-dns.com/dns-query","https://dns.google/dns-query"]}},sniffer:{enable:!0,sniff:{HTTP:{ports:[80,8080],"override-destination":!0},TLS:{ports:[443,8443]},QUIC:{ports:[443,8443]}},"skip-domain":["Mijia Cloud","+.push.apple.com"]},"mixed-port":7892,rules:["AND,((DST-PORT,443),(NETWORK,UDP)),REJECT","RULE-SET,domain-direct,DIRECT","RULE-SET,domain-domestic,DIRECT","RULE-SET,domain-local,DIRECT","RULE-SET,domain-ai,AI","RULE-SET,domain-binance,Binance","RULE-SET,domain-download,Download","RULE-SET,domain-stream,Stream","RULE-SET,domain-telegram,PROXY","RULE-SET,domain-global,PROXY","RULE-SET,ipcidr-domestic,DIRECT","RULE-SET,ipcidr-local,DIRECT","RULE-SET,ipcidr-stream,Stream","RULE-SET,ipcidr-telegram,PROXY","RULE-SET,ipcidr-global,PROXY","MATCH,PROXY"],"__rule-providers-anchors":{classical:{type:"http",behavior:"classical",format:"text",interval:86400},domain:{type:"http",behavior:"domain",format:"mrs",interval:86400},ipcidr:{type:"http",behavior:"ipcidr",format:"mrs",interval:86400}},"rule-providers":{"domain-ai":{interval:86400,format:"mrs",behavior:"domain",type:"http",url:"https://testingcf.jsdelivr.net/gh/liblaf/route-rules@mihomo/mihomo/ai.domain.mrs",path:"./rules/ai.domain.mrs"},"domain-binance":{interval:86400,format:"mrs",behavior:"domain",type:"http",url:"https://testingcf.jsdelivr.net/gh/liblaf/route-rules@mihomo/mihomo/binance.domain.mrs",path:"./rules/binance.domain.mrs"},"domain-direct":{interval:86400,format:"mrs",behavior:"domain",type:"http",url:"https://testingcf.jsdelivr.net/gh/liblaf/route-rules@mihomo/mihomo/direct.domain.mrs",path:"./rules/direct.domain.mrs"},"domain-domestic":{interval:86400,format:"mrs",behavior:"domain",type:"http",url:"https://testingcf.jsdelivr.net/gh/liblaf/route-rules@mihomo/mihomo/domestic.domain.mrs",path:"./rules/domestic.domain.mrs"},"ipcidr-domestic":{interval:86400,format:"mrs",behavior:"ipcidr",type:"http",url:"https://testingcf.jsdelivr.net/gh/liblaf/route-rules@mihomo/mihomo/domestic.ipcidr.mrs",path:"./rules/domestic.ipcidr.mrs"},"domain-download":{interval:86400,format:"mrs",behavior:"domain",type:"http",url:"https://testingcf.jsdelivr.net/gh/liblaf/route-rules@mihomo/mihomo/download.domain.mrs",path:"./rules/download.domain.mrs"},"domain-global":{interval:86400,format:"mrs",behavior:"domain",type:"http",url:"https://testingcf.jsdelivr.net/gh/liblaf/route-rules@mihomo/mihomo/global.domain.mrs",path:"./rules/global.domain.mrs"},"ipcidr-global":{interval:86400,format:"mrs",behavior:"ipcidr",type:"http",url:"https://testingcf.jsdelivr.net/gh/liblaf/route-rules@mihomo/mihomo/global.ipcidr.mrs",path:"./rules/global.ipcidr.mrs"},"domain-local":{interval:86400,format:"mrs",behavior:"domain",type:"http",url:"https://testingcf.jsdelivr.net/gh/liblaf/route-rules@mihomo/mihomo/local.domain.mrs",path:"./rules/local.domain.mrs"},"ipcidr-local":{interval:86400,format:"mrs",behavior:"ipcidr",type:"http",url:"https://testingcf.jsdelivr.net/gh/liblaf/route-rules@mihomo/mihomo/local.ipcidr.mrs",path:"./rules/local.ipcidr.mrs"},"domain-stream":{interval:86400,format:"mrs",behavior:"domain",type:"http",url:"https://testingcf.jsdelivr.net/gh/liblaf/route-rules@mihomo/mihomo/stream.domain.mrs",path:"./rules/stream.domain.mrs"},"ipcidr-stream":{interval:86400,format:"mrs",behavior:"ipcidr",type:"http",url:"https://testingcf.jsdelivr.net/gh/liblaf/route-rules@mihomo/mihomo/stream.ipcidr.mrs",path:"./rules/stream.ipcidr.mrs"},"domain-telegram":{interval:86400,format:"mrs",behavior:"domain",type:"http",url:"https://testingcf.jsdelivr.net/gh/liblaf/route-rules@mihomo/mihomo/telegram.domain.mrs",path:"./rules/telegram.domain.mrs"},"ipcidr-telegram":{interval:86400,format:"mrs",behavior:"ipcidr",type:"http",url:"https://testingcf.jsdelivr.net/gh/liblaf/route-rules@mihomo/mihomo/telegram.ipcidr.mrs",path:"./rules/telegram.ipcidr.mrs"}}};var Y={"allow-lan":!0,"bind-address":"*","lan-allowed-ips":["100.64.0.0/10","127.0.0.0/8","172.16.0.0/12","::1/128"],"skip-auth-prefixes":["127.0.0.0/8","::1/128"],"log-level":"warning",ipv6:!0,"external-controller":"127.0.0.1:9090","external-ui":"ui","external-ui-url":"https://github.com/Zephyruso/zashboard/releases/latest/download/dist.zip",profile:{"store-selected":!0,"store-fake-ip":!0},"unified-delay":!1,"tcp-concurrent":!0,"geo-auto-update":!0,"geo-update-interval":24,"geox-url":{geoip:"https://testingcf.jsdelivr.net/gh/MetaCubeX/meta-rules-dat@release/geoip.dat",geosite:"https://testingcf.jsdelivr.net/gh/MetaCubeX/meta-rules-dat@release/geosite.dat",mmdb:"https://testingcf.jsdelivr.net/gh/MetaCubeX/meta-rules-dat@release/country.mmdb",asn:"https://testingcf.jsdelivr.net/gh/MetaCubeX/meta-rules-dat@release/GeoLite2-ASN.mmdb"},dns:{enable:!0,"cache-algorithm":"arc","prefer-h3":!1,ipv6:!0,"enhanced-mode":"redir-host","use-hosts":!0,"use-system-hosts":!0,"respect-rules":!0,"default-nameserver":["system","101.6.6.6","119.29.29.29","223.5.5.5"],"proxy-server-nameserver":["system","https://101.6.6.6/dns-query","https://doh.pub/dns-query","https://dns.alidns.com/dns-query"],"direct-nameserver":["system","https://101.6.6.6/dns-query","https://doh.pub/dns-query","https://dns.alidns.com/dns-query"],"direct-nameserver-follow-policy":!1,nameserver:["system","https://101.6.6.6/dns-query","https://doh.pub/dns-query","https://dns.alidns.com/dns-query"],fallback:["https://cloudflare-dns.com/dns-query","https://dns.google/dns-query"],"fallback-filter":{geoip:!0,"geoip-code":"cn"}},sniffer:{enable:!0,sniff:{HTTP:{ports:[80,8080],"override-destination":!0},TLS:{ports:[443,8443]},QUIC:{ports:[443,8443]}},"skip-domain":["Mijia Cloud","+.push.apple.com"]},"mixed-port":7892,rules:["AND,((DST-PORT,443),(NETWORK,UDP)),REJECT","RULE-SET,domain-direct,DIRECT","RULE-SET,domain-domestic,DIRECT","RULE-SET,domain-local,DIRECT","RULE-SET,domain-ai,AI","RULE-SET,domain-binance,Binance","RULE-SET,domain-download,Download","RULE-SET,domain-stream,Stream","RULE-SET,domain-telegram,PROXY","RULE-SET,domain-global,PROXY","RULE-SET,ipcidr-domestic,DIRECT","RULE-SET,ipcidr-local,DIRECT","RULE-SET,ipcidr-stream,Stream","RULE-SET,ipcidr-telegram,PROXY","RULE-SET,ipcidr-global,PROXY","MATCH,PROXY"],"__rule-providers-anchors":{classical:{type:"http",behavior:"classical",format:"text",interval:86400},domain:{type:"http",behavior:"domain",format:"mrs",interval:86400},ipcidr:{type:"http",behavior:"ipcidr",format:"mrs",interval:86400}},"rule-providers":{"domain-ai":{interval:86400,format:"mrs",behavior:"domain",type:"http",url:"https://testingcf.jsdelivr.net/gh/liblaf/route-rules@mihomo/mihomo/ai.domain.mrs",path:"./rules/ai.domain.mrs"},"domain-binance":{interval:86400,format:"mrs",behavior:"domain",type:"http",url:"https://testingcf.jsdelivr.net/gh/liblaf/route-rules@mihomo/mihomo/binance.domain.mrs",path:"./rules/binance.domain.mrs"},"domain-direct":{interval:86400,format:"mrs",behavior:"domain",type:"http",url:"https://testingcf.jsdelivr.net/gh/liblaf/route-rules@mihomo/mihomo/direct.domain.mrs",path:"./rules/direct.domain.mrs"},"domain-domestic":{interval:86400,format:"mrs",behavior:"domain",type:"http",url:"https://testingcf.jsdelivr.net/gh/liblaf/route-rules@mihomo/mihomo/domestic.domain.mrs",path:"./rules/domestic.domain.mrs"},"ipcidr-domestic":{interval:86400,format:"mrs",behavior:"ipcidr",type:"http",url:"https://testingcf.jsdelivr.net/gh/liblaf/route-rules@mihomo/mihomo/domestic.ipcidr.mrs",path:"./rules/domestic.ipcidr.mrs"},"domain-download":{interval:86400,format:"mrs",behavior:"domain",type:"http",url:"https://testingcf.jsdelivr.net/gh/liblaf/route-rules@mihomo/mihomo/download.domain.mrs",path:"./rules/download.domain.mrs"},"domain-global":{interval:86400,format:"mrs",behavior:"domain",type:"http",url:"https://testingcf.jsdelivr.net/gh/liblaf/route-rules@mihomo/mihomo/global.domain.mrs",path:"./rules/global.domain.mrs"},"ipcidr-global":{interval:86400,format:"mrs",behavior:"ipcidr",type:"http",url:"https://testingcf.jsdelivr.net/gh/liblaf/route-rules@mihomo/mihomo/global.ipcidr.mrs",path:"./rules/global.ipcidr.mrs"},"domain-local":{interval:86400,format:"mrs",behavior:"domain",type:"http",url:"https://testingcf.jsdelivr.net/gh/liblaf/route-rules@mihomo/mihomo/local.domain.mrs",path:"./rules/local.domain.mrs"},"ipcidr-local":{interval:86400,format:"mrs",behavior:"ipcidr",type:"http",url:"https://testingcf.jsdelivr.net/gh/liblaf/route-rules@mihomo/mihomo/local.ipcidr.mrs",path:"./rules/local.ipcidr.mrs"},"domain-stream":{interval:86400,format:"mrs",behavior:"domain",type:"http",url:"https://testingcf.jsdelivr.net/gh/liblaf/route-rules@mihomo/mihomo/stream.domain.mrs",path:"./rules/stream.domain.mrs"},"ipcidr-stream":{interval:86400,format:"mrs",behavior:"ipcidr",type:"http",url:"https://testingcf.jsdelivr.net/gh/liblaf/route-rules@mihomo/mihomo/stream.ipcidr.mrs",path:"./rules/stream.ipcidr.mrs"},"domain-telegram":{interval:86400,format:"mrs",behavior:"domain",type:"http",url:"https://testingcf.jsdelivr.net/gh/liblaf/route-rules@mihomo/mihomo/telegram.domain.mrs",path:"./rules/telegram.domain.mrs"},"ipcidr-telegram":{interval:86400,format:"mrs",behavior:"ipcidr",type:"http",url:"https://testingcf.jsdelivr.net/gh/liblaf/route-rules@mihomo/mihomo/telegram.ipcidr.mrs",path:"./rules/telegram.ipcidr.mrs"}}};var{$:ve}=globalThis.Bun;import we from"consola";import Pe from"js-yaml";import*as P from"lodash-es";import a from"zod";var ye=a.object({name:a.string(),type:a.string(),server:a.string()}),w=a.object({name:a.string(),type:a.enum(["select","url-test"]),proxies:a.array(a.string()),url:a.string().url().default("https://cp.cloudflare.com"),lazy:a.boolean().default(!0),"expected-status":a.number().int().min(100).max(599).default(204),icon:a.string().url().optional()}).passthrough(),pr=a.object({proxies:a.array(ye).optional(),"proxy-groups":a.array(w).optional(),rules:a.array(a.string()).optional()});var xe={"builtin://mihomo.yaml":B,"builtin://stash.yaml":Y};class x{template;static async load(e){let r=xe[e];if(!r){let t=await J.readFile(e,"utf-8");r=v(t)}return new x(r)}constructor(e){this.template=e}render(e,r){let t=P.cloneDeep(this.template),o=this.renderDefaultGroup(),i=[o];for(let s of r)for(let[m,l]of s.group(e)){let p=this.renderGroup(m,l);o.proxies.push(p.name),i.push(p)}return t.proxies=e.map((s)=>s.render()),t["proxy-groups"]=i,t=this.sanitize(t),this.serialize(t)}renderDefaultGroup(){return w.parse({name:"PROXY",type:"select",proxies:[]})}renderGroup(e,r){let t=r.map((i)=>i.prettyName);return w.parse({name:e.name,type:e.type,proxies:t,url:e.url,"expected-status":e["expected-status"],icon:e.icon})}sanitize(e){e=P.omitBy(e,(i,s)=>{return s.startsWith("__")});let r=e.rules??[],t=["DIRECT","REJECT","REJECT-DROP","PASS"];for(let i of e.proxies??[])t.push(i.name);for(let i of e["proxy-groups"]??[])t.push(i.name);let o=new Set(t);return e.rules=r.filter((i)=>{i=i.replace(/,no-resolve$/,"");let s=i.split(","),m=s[s.length-1].trim(),l=o.has(m);if(!l)we.warn(`delete invalid rule: ${i}`);return l}),e}serialize(e){return Pe.dump(e,{indent:2,noRefs:!0,sortKeys:!0})}async test(e){await ve`mihomo -f ${e} -t`}}class R{}class c extends R{*group(e){let r=e.filter(this.filter);if(r.length>0)yield[this.meta,r]}}function d(e){return!e.emby&&!e.info&&e.type!=="hysteria2"}class I extends c{meta={name:"Info",type:"url-test",emoji:"\u2139\uFE0F",icon:"https://cdn.jsdelivr.net/gh/Koolson/Qure/IconSet/Color/Airport.png"};filter(e){return e.info}}class j extends c{meta={name:"Auto",type:"url-test",emoji:"\uD83D\uDE80",icon:"https://cdn.jsdelivr.net/gh/Koolson/Qure/IconSet/Color/Auto.png"};filter(e){return d(e)&&e.multiplier<=2}}class M extends c{static BINANCE_EXCLUDE_REGIONS=new Set(["CA","CN","CU","HK","IR","KP","MO","NL","TW","US"]);meta={name:"Binance",type:"url-test",emoji:"\uD83E\uDE99",url:"https://api.binance.com/api/v3/ping"};filter(e){return d(e)&&!!e.country&&!M.BINANCE_EXCLUDE_REGIONS.has(e.country.cca2)}}class E extends c{static AI_EXCLUDE_REGIONS=new Set(["HK","MO"]);meta={name:"AI",type:"url-test",emoji:"\uD83E\uDD16",icon:"https://cdn.jsdelivr.net/gh/Koolson/Qure/IconSet/Color/AI.png"};filter(e){return d(e)&&!!e.country&&!E.AI_EXCLUDE_REGIONS.has(e.country.cca2)}}class L extends c{meta={name:"Download",type:"url-test",emoji:"\uD83D\uDCE5",icon:"https://cdn.jsdelivr.net/gh/Koolson/Qure/IconSet/Color/Download.png"};filter(e){return d(e)&&e.multiplier<=1}}class A extends c{meta={name:"Stream",type:"url-test",emoji:"\uD83D\uDCFA",icon:"https://cdn.jsdelivr.net/gh/Koolson/Qure/IconSet/Color/YouTube.png"};filter(e){return d(e)&&e.multiplier<2}}import S from"@twemoji/api";class U extends R{*group(e){let r={};for(let t of e){if(!d(t))continue;let o=t.country.cca2,i=t.country,s=r[o]?.[1]??[];s.push(t),r[o]=[i,s]}for(let t of Object.keys(r).sort()){let[o,i]=r[t],s=o.flag,m="".concat(S.base,S.size,"/",S.convert.toCodePoint(s),S.ext);yield[{name:o.name.common,type:o.cca2===n.cca2?"select":"url-test",emoji:s,icon:m},i]}}}function Q(){return[new j,new E,new M,new L,new I,new A,new U]}import V from"dns/promises";import Ce from"dataloader";import{z as Oe}from"zod";import Re from"dataloader";import Me from"ky";import*as Z from"lodash-es";import{z as f}from"zod";var Ee=f.object({ip:f.string().ip(),location:f.object({country_code:f.string().length(2)}).passthrough().optional()}).passthrough(),Se=f.record(f.string(),Ee);class G{endpoint="https://api.ipapi.is/";loader;key;constructor(){this.loader=new Re(async(e)=>await this.batchLoadFn(e),{maxBatchSize:100}),this.key=process.env.IPAPI_IS_KEY}async lookup(e){return await this.loader.load(e)}async batchLoadFn(e){let r=await Me.post(this.endpoint,{json:{ips:e,key:this.key}}).json();r=Z.omit(r,["total_elapsed_ms"]);let t=Se.parse(r);return e.map((o)=>t[o])}}class D{api;loader;constructor(){this.api=new G,this.loader=new Ce(async(e)=>await this.batchLoadFn(e))}async lookup(e){return await this.loader.load(e)}async batchLoadFn(e){return await Promise.all(e.map(async(r)=>await this.loadFn(r)))}async loadFn(e){let r=[];if(ke(e))r=[e];else r=(await V.lookup(e,{all:!0})).map((i)=>i.address);let t=await Promise.all(r.map(async(o)=>await this.api.lookup(o)));for(let o of t){if(!o.location?.country_code)continue;return o}return{ip:r[0]??"",location:{country_code:n.cca2}}}}function ke(e){return Oe.string().ip().safeParse(e).success}import Te from"world-countries";function ee(e){return Te.find((r)=>r.cca2===e)}import _ from"consola";import Ie from"world-countries";class g{async process(e){return await Promise.all(e.map(async(r)=>await this.processSingle(r)))}processSingle(e){throw Error("processSingle() Not Implemented")}}class z extends g{geoip=new D;async processSingle(e){if(e.emby||e.info)return e.country=n,e;if(e.country.cca2===n.cca2)e=this.inferFromName(e);if(e.country.cca2===n.cca2)e=await this.inferFromServer(e);if(e.country.cca2===n.cca2)_.fail(`${e.prettyName} (${W(e.country)})`);return e}inferFromName(e){let r=e.name;for(let t of Ie){if(t.cca2==="CN")continue;for(let o of je(t)){if(!o)continue;if(o.test(r))return _.success(`${e.prettyName} ~ ${o} (${W(t)})`),e.country=t,e}}return e}async inferFromServer(e){let r=await this.geoip.lookup(e.server);if(r.location?.country_code)e.country=ee(r.location.country_code)||n;else e.country=n;if(e.country.cca2!==n.cca2)_.success(`${e.prettyName} -> ${r.ip} (${W(e.country)})`);return e}}function*je(e){let r=new Set(["GB"]);function t(i){if(!i)return;if(r.has(i))return;return new RegExp(`\\b${i}\\b`)}function o(i){if(!i)return;if(r.has(i))return;return new RegExp(i,"iu")}for(let i of["en","zh"])for(let s of["narrow","short","long"]){let m=new Intl.DisplayNames(i,{style:s,type:"region"});if(s==="narrow"||s==="short")yield t(m.of(e.cca2));else if(s==="long")yield o(m.of(e.cca2))}yield o(e.name.common),yield o(e.name.official);for(let i in e.name.native)yield o(e.name.native[i].common),yield o(e.name.native[i].official);yield t(e.cca2),yield t(e.cca3),yield t(e.cioc);for(let i of e.capital)yield o(i);yield o(e.flag)}function W(e){return`${e.flag} ${e.name.common} (${e.cca2})`}import Le from"consola";class F extends g{pattern=/Expire|Traffic|\u5269\u4F59|\u5957\u9910\u5230\u671F/iu;async processSingle(e){if(e.info=this.pattern.test(e.name),e.info)Le.success(`${e.prettyName} ~ \u2139\uFE0F INFO`);return e}}function re(){return[new F,new z]}import{buildCommand as Ae}from"@stricli/core";import oe from"consola";var ie=Ae({docs:{brief:""},parameters:{flags:{filename:{kind:"parsed",parse:String,brief:"",default:"mihomo.yaml"},template:{kind:"parsed",parse:String,brief:"",default:"builtin://mihomo.yaml"}}},async func(e){let r=await x.load(e.template),t=Q(),o=re(),i=new h,s=await i.listProfiles(),m=await i.listProviders(),l=(await Promise.all(Object.values(m).map(async(p)=>await Ue(i,p)))).flat();for(let p of o)l=await p.process(l);for(let p of Object.values(s)){let K=r.render(l.filter((le)=>{return p.providers.includes(le.provider.id)}),t),y=te.join("outputs",p.id,e.filename);await C.mkdir(te.dirname(y),{recursive:!0}),await C.writeFile(y,K),await r.test(y),oe.success(`-> ${y}`),await i.uploadProfileArtifact(p.id,e.filename,K)}}});async function Ue(e,r){let o=await(await e.downloadProviderArtifact(r.id,"mihomo.yaml")).text(),i=v(o);if(!i.proxies)return oe.warn(`No proxies found in ${r.id}/mihomo.yaml`),[];return i.proxies.map((s)=>new T(s,r))}import{NotFoundException as Ge}from"chanfana";import{z as b}from"zod/v3";var ut=b.object({upload:b.number().optional(),download:b.number().optional(),total:b.number().optional(),expire:b.number().optional()}).passthrough();function se(e){let r={};if(!e)return r;for(let t of e.split(";")){let[o,i]=t.split("=");if(!o||!i)continue;if(o=o.trim(),i=i.trim(),!o||!i)continue;if(o==="upload"||o==="download"||o==="total"||o==="expire")r[o]=+i;else r[o]=i}return r}import ae from"js-yaml";async function O(e,r){r=r??u();let t=await r.get(e,{headers:{"User-Agent":"clash.meta"}}),o=await t.text();if(!ae.load(o).proxies)throw Error("empty subscription");let s=se(t.headers.get("Subscription-Userinfo"));return{content:o,userinfo:s}}class H{url;fetcher;constructor(e=process.env.SUBLINK_URL??"https://sublink.liblaf.me",r){this.url=e;this.fetcher=r}get client(){return u().extend({fetch:this.fetcher?.fetch.bind(this.fetcher),prefixUrl:this.url})}async clash(e){let r=new URL(`${this.url}/clash`);return r.searchParams.set("config",e),r.searchParams.set("ua","clash.meta"),await O(r,this.client)}}class ${sublink;constructor(e){this.sublink=e??new H}}class N extends ${async fetch(e){if(e.mihomo)return await O(e.mihomo);let r=e.singbox??e.surge??e.xray;if(!r){let{id:t}=e;throw new Ge(`Provider ${t} does not support mihomo`)}return await this.sublink.clash(r)}}import{buildCommand as De}from"@stricli/core";var ne=De({docs:{brief:""},parameters:{flags:{provider:{kind:"parsed",parse:String,brief:""},bwcounter:{kind:"parsed",parse:String,brief:"",optional:!0},mihomo:{kind:"parsed",parse:String,brief:"",optional:!0},singbox:{kind:"parsed",parse:String,brief:"",optional:!0},xray:{kind:"parsed",parse:String,brief:"",optional:!0}}},async func(e){let r=new h,t=e.provider,o={id:t,bwcounter:e.bwcounter,mihomo:e.mihomo,singbox:e.singbox,xray:e.xray};await r.createProvider(o);let i=new N,{content:s,userinfo:m}=await i.fetch(o);await r.uploadProviderArtifact(t,"mihomo.yaml",s),await r.uploadProviderArtifact(t,"userinfo.json",m)}});var ze=We({docs:{brief:""},routes:{hello:X,merge:ie,upload:ne}}),me=_e(ze,{name:"sub-store",versionInfo:{currentVersion:q},scanner:{caseStyle:"allow-kebab-for-camel"}});import Fe from"fs";import He from"os";import $e from"path";var pe={process,os:He,fs:Fe,path:$e};import{run as Ne}from"@stricli/core";await Ne(me,process.argv.slice(2),pe);
3
+ var K="0.2.3";import{buildApplication as _e,buildRouteMap as De}from"@stricli/core";import{buildCommand as de}from"@stricli/core";var q=de({docs:{brief:"Print a friendly, customizable greeting."},parameters:{flags:{greeting:{kind:"parsed",parse:String,brief:"use TEXT as the greeting message",default:"Hello, world!"}}},async func({greeting:e}){console.log(e)}});import*as C from"fs/promises";import te from"path";import ue from"ky";function u(){return ue.create({cf:{cacheEverything:!0,cacheTtl:1,cacheTtlByStatus:{"200":60}},redirect:"follow"})}import fe from"consola";class h{client;constructor(e=process.env.SUB_STORE_URL??"https://sub.liblaf.me",r=process.env.SUB_STORE_TOKEN){let t=u();this.client=t.extend({headers:{Authorization:`Bearer ${r}`},prefixUrl:e})}async listProfiles(){let e=await this.client.get("api/profiles").json(),r={};for(let t of e.result)r[t.id]=t;return r}async uploadProfileArtifact(e,r,t){await this.client.post(`api/profiles/${e}/${r}`,{body:t})}async createProvider(e){await this.client.post(`api/providers/${e.id}`,{json:e})}async listProviders(){let e=await this.client.get("api/providers").json(),r={};for(let t of e.result)r[t.id]=t;return r}async downloadProviderArtifact(e,r){let t=await this.client.get(`api/providers/${e}/${r}`);if(t.headers.get("X-From-Cache")==="true")fe.warn(`providers/${e}/${r} is from cache, it may be outdated.`);return t}async uploadProviderArtifact(e,r,t){if(r.endsWith(".json")){await this.client.post(`api/providers/${e}/${r}`,{json:t});return}else await this.client.post(`api/providers/${e}/${r}`,{body:t})}}var n={name:{common:"Unknown"},cca2:"UN",flag:"\uD83C\uDDFA\uD83C\uDDF3"};class k{wrapped;provider;country=n;emby=!1;info=!1;multiplier=1;constructor(e,r){this.wrapped=e;this.provider=r}get prettyName(){let e=this.name;if(e=this.name.match(/@(?<name>[\w-]+)/)?.groups?.name??this.name,e.startsWith("\u3010"))return`[${this.provider.id}]${e}`;return`[${this.provider.id}] ${e}`}}class T extends k{get name(){return this.wrapped.name}get type(){return this.wrapped.type}get server(){return this.wrapped.server}render(){return{...this.wrapped,name:this.prettyName}}}import he from"js-yaml";function v(e){return he.load(e)}import*as Y from"fs/promises";var X={"allow-lan":!0,"bind-address":"*","lan-allowed-ips":["100.64.0.0/10","127.0.0.0/8","172.16.0.0/12","::1/128"],"skip-auth-prefixes":["127.0.0.0/8","::1/128"],"log-level":"warning",ipv6:!0,"external-controller":"127.0.0.1:9090","external-ui":"ui","external-ui-url":"https://github.com/Zephyruso/zashboard/releases/latest/download/dist.zip",profile:{"store-selected":!0,"store-fake-ip":!0},"unified-delay":!1,"tcp-concurrent":!0,"geo-auto-update":!0,"geo-update-interval":24,"geox-url":{geoip:"https://testingcf.jsdelivr.net/gh/MetaCubeX/meta-rules-dat@release/geoip.dat",geosite:"https://testingcf.jsdelivr.net/gh/MetaCubeX/meta-rules-dat@release/geosite.dat",mmdb:"https://testingcf.jsdelivr.net/gh/MetaCubeX/meta-rules-dat@release/country.mmdb",asn:"https://testingcf.jsdelivr.net/gh/MetaCubeX/meta-rules-dat@release/GeoLite2-ASN.mmdb"},dns:{enable:!0,"cache-algorithm":"arc","prefer-h3":!1,ipv6:!0,"enhanced-mode":"redir-host","use-hosts":!0,"use-system-hosts":!0,"respect-rules":!0,"default-nameserver":["system","101.6.6.6","119.29.29.29","223.5.5.5"],"proxy-server-nameserver":["system","https://101.6.6.6/dns-query","https://doh.pub/dns-query","https://dns.alidns.com/dns-query"],"direct-nameserver":["system","https://101.6.6.6/dns-query","https://doh.pub/dns-query","https://dns.alidns.com/dns-query"],"direct-nameserver-follow-policy":!1,nameserver:["system","https://101.6.6.6/dns-query","https://doh.pub/dns-query","https://dns.alidns.com/dns-query"],fallback:["https://cloudflare-dns.com/dns-query","https://dns.google/dns-query"],"fallback-filter":{geoip:!0,"geoip-code":"cn"},"nameserver-policy":{"ruleset:domain-direct":["system","https://101.6.6.6/dns-query","https://doh.pub/dns-query","https://dns.alidns.com/dns-query"],"ruleset:domain-domestic":["system","https://101.6.6.6/dns-query","https://doh.pub/dns-query","https://dns.alidns.com/dns-query"],"ruleset:domain-local":["system","https://101.6.6.6/dns-query","https://doh.pub/dns-query","https://dns.alidns.com/dns-query"],"ruleset:domain-ai":["https://cloudflare-dns.com/dns-query","https://dns.google/dns-query"],"ruleset:domain-binance":["https://cloudflare-dns.com/dns-query","https://dns.google/dns-query"],"ruleset:domain-download":["https://cloudflare-dns.com/dns-query","https://dns.google/dns-query"],"ruleset:domain-global":["https://cloudflare-dns.com/dns-query","https://dns.google/dns-query"],"ruleset:domain-stream":["https://cloudflare-dns.com/dns-query","https://dns.google/dns-query"],"ruleset:domain-telegram":["https://cloudflare-dns.com/dns-query","https://dns.google/dns-query"]}},sniffer:{enable:!0,sniff:{HTTP:{ports:[80,8080],"override-destination":!0},TLS:{ports:[443,8443]},QUIC:{ports:[443,8443]}},"skip-domain":["Mijia Cloud","+.push.apple.com"]},"mixed-port":7892,rules:["AND,((DST-PORT,443),(NETWORK,UDP)),REJECT","RULE-SET,domain-direct,DIRECT","RULE-SET,domain-domestic,DIRECT","RULE-SET,domain-local,DIRECT","RULE-SET,domain-ai,AI","RULE-SET,domain-binance,Binance","RULE-SET,domain-stream,Stream","RULE-SET,domain-telegram,PROXY","RULE-SET,domain-global,PROXY","RULE-SET,ipcidr-domestic,DIRECT","RULE-SET,ipcidr-local,DIRECT","RULE-SET,ipcidr-stream,Stream","RULE-SET,ipcidr-telegram,PROXY","RULE-SET,ipcidr-global,PROXY","MATCH,PROXY"],"__rule-providers-anchors":{classical:{type:"http",behavior:"classical",format:"text",interval:86400},domain:{type:"http",behavior:"domain",format:"mrs",interval:86400},ipcidr:{type:"http",behavior:"ipcidr",format:"mrs",interval:86400}},"rule-providers":{"domain-ai":{interval:86400,format:"mrs",behavior:"domain",type:"http",url:"https://testingcf.jsdelivr.net/gh/liblaf/route-rules@mihomo/mihomo/ai.domain.mrs",path:"./rules/ai.domain.mrs"},"domain-binance":{interval:86400,format:"mrs",behavior:"domain",type:"http",url:"https://testingcf.jsdelivr.net/gh/liblaf/route-rules@mihomo/mihomo/binance.domain.mrs",path:"./rules/binance.domain.mrs"},"domain-direct":{interval:86400,format:"mrs",behavior:"domain",type:"http",url:"https://testingcf.jsdelivr.net/gh/liblaf/route-rules@mihomo/mihomo/direct.domain.mrs",path:"./rules/direct.domain.mrs"},"domain-domestic":{interval:86400,format:"mrs",behavior:"domain",type:"http",url:"https://testingcf.jsdelivr.net/gh/liblaf/route-rules@mihomo/mihomo/domestic.domain.mrs",path:"./rules/domestic.domain.mrs"},"ipcidr-domestic":{interval:86400,format:"mrs",behavior:"ipcidr",type:"http",url:"https://testingcf.jsdelivr.net/gh/liblaf/route-rules@mihomo/mihomo/domestic.ipcidr.mrs",path:"./rules/domestic.ipcidr.mrs"},"domain-download":{interval:86400,format:"mrs",behavior:"domain",type:"http",url:"https://testingcf.jsdelivr.net/gh/liblaf/route-rules@mihomo/mihomo/download.domain.mrs",path:"./rules/download.domain.mrs"},"domain-global":{interval:86400,format:"mrs",behavior:"domain",type:"http",url:"https://testingcf.jsdelivr.net/gh/liblaf/route-rules@mihomo/mihomo/global.domain.mrs",path:"./rules/global.domain.mrs"},"ipcidr-global":{interval:86400,format:"mrs",behavior:"ipcidr",type:"http",url:"https://testingcf.jsdelivr.net/gh/liblaf/route-rules@mihomo/mihomo/global.ipcidr.mrs",path:"./rules/global.ipcidr.mrs"},"domain-local":{interval:86400,format:"mrs",behavior:"domain",type:"http",url:"https://testingcf.jsdelivr.net/gh/liblaf/route-rules@mihomo/mihomo/local.domain.mrs",path:"./rules/local.domain.mrs"},"ipcidr-local":{interval:86400,format:"mrs",behavior:"ipcidr",type:"http",url:"https://testingcf.jsdelivr.net/gh/liblaf/route-rules@mihomo/mihomo/local.ipcidr.mrs",path:"./rules/local.ipcidr.mrs"},"domain-stream":{interval:86400,format:"mrs",behavior:"domain",type:"http",url:"https://testingcf.jsdelivr.net/gh/liblaf/route-rules@mihomo/mihomo/stream.domain.mrs",path:"./rules/stream.domain.mrs"},"ipcidr-stream":{interval:86400,format:"mrs",behavior:"ipcidr",type:"http",url:"https://testingcf.jsdelivr.net/gh/liblaf/route-rules@mihomo/mihomo/stream.ipcidr.mrs",path:"./rules/stream.ipcidr.mrs"},"domain-telegram":{interval:86400,format:"mrs",behavior:"domain",type:"http",url:"https://testingcf.jsdelivr.net/gh/liblaf/route-rules@mihomo/mihomo/telegram.domain.mrs",path:"./rules/telegram.domain.mrs"},"ipcidr-telegram":{interval:86400,format:"mrs",behavior:"ipcidr",type:"http",url:"https://testingcf.jsdelivr.net/gh/liblaf/route-rules@mihomo/mihomo/telegram.ipcidr.mrs",path:"./rules/telegram.ipcidr.mrs"}}};var B={"allow-lan":!0,"bind-address":"*","lan-allowed-ips":["100.64.0.0/10","127.0.0.0/8","172.16.0.0/12","::1/128"],"skip-auth-prefixes":["127.0.0.0/8","::1/128"],"log-level":"warning",ipv6:!0,"external-controller":"127.0.0.1:9090","external-ui":"ui","external-ui-url":"https://github.com/Zephyruso/zashboard/releases/latest/download/dist.zip",profile:{"store-selected":!0,"store-fake-ip":!0},"unified-delay":!1,"tcp-concurrent":!0,"geo-auto-update":!0,"geo-update-interval":24,"geox-url":{geoip:"https://testingcf.jsdelivr.net/gh/MetaCubeX/meta-rules-dat@release/geoip.dat",geosite:"https://testingcf.jsdelivr.net/gh/MetaCubeX/meta-rules-dat@release/geosite.dat",mmdb:"https://testingcf.jsdelivr.net/gh/MetaCubeX/meta-rules-dat@release/country.mmdb",asn:"https://testingcf.jsdelivr.net/gh/MetaCubeX/meta-rules-dat@release/GeoLite2-ASN.mmdb"},dns:{enable:!0,"cache-algorithm":"arc","prefer-h3":!1,ipv6:!0,"enhanced-mode":"redir-host","use-hosts":!0,"use-system-hosts":!0,"respect-rules":!0,"default-nameserver":["system","101.6.6.6","119.29.29.29","223.5.5.5"],"proxy-server-nameserver":["system","https://101.6.6.6/dns-query","https://doh.pub/dns-query","https://dns.alidns.com/dns-query"],"direct-nameserver":["system","https://101.6.6.6/dns-query","https://doh.pub/dns-query","https://dns.alidns.com/dns-query"],"direct-nameserver-follow-policy":!1,nameserver:["system","https://101.6.6.6/dns-query","https://doh.pub/dns-query","https://dns.alidns.com/dns-query"],fallback:["https://cloudflare-dns.com/dns-query","https://dns.google/dns-query"],"fallback-filter":{geoip:!0,"geoip-code":"cn"}},sniffer:{enable:!0,sniff:{HTTP:{ports:[80,8080],"override-destination":!0},TLS:{ports:[443,8443]},QUIC:{ports:[443,8443]}},"skip-domain":["Mijia Cloud","+.push.apple.com"]},"mixed-port":7892,rules:["AND,((DST-PORT,443),(NETWORK,UDP)),REJECT","RULE-SET,domain-direct,DIRECT","RULE-SET,domain-domestic,DIRECT","RULE-SET,domain-local,DIRECT","RULE-SET,domain-ai,AI","RULE-SET,domain-binance,Binance","RULE-SET,domain-stream,Stream","RULE-SET,domain-telegram,PROXY","RULE-SET,domain-global,PROXY","RULE-SET,ipcidr-domestic,DIRECT","RULE-SET,ipcidr-local,DIRECT","RULE-SET,ipcidr-stream,Stream","RULE-SET,ipcidr-telegram,PROXY","RULE-SET,ipcidr-global,PROXY","MATCH,PROXY"],"__rule-providers-anchors":{classical:{type:"http",behavior:"classical",format:"text",interval:86400},domain:{type:"http",behavior:"domain",format:"mrs",interval:86400},ipcidr:{type:"http",behavior:"ipcidr",format:"mrs",interval:86400}},"rule-providers":{"domain-ai":{interval:86400,format:"mrs",behavior:"domain",type:"http",url:"https://testingcf.jsdelivr.net/gh/liblaf/route-rules@mihomo/mihomo/ai.domain.mrs",path:"./rules/ai.domain.mrs"},"domain-binance":{interval:86400,format:"mrs",behavior:"domain",type:"http",url:"https://testingcf.jsdelivr.net/gh/liblaf/route-rules@mihomo/mihomo/binance.domain.mrs",path:"./rules/binance.domain.mrs"},"domain-direct":{interval:86400,format:"mrs",behavior:"domain",type:"http",url:"https://testingcf.jsdelivr.net/gh/liblaf/route-rules@mihomo/mihomo/direct.domain.mrs",path:"./rules/direct.domain.mrs"},"domain-domestic":{interval:86400,format:"mrs",behavior:"domain",type:"http",url:"https://testingcf.jsdelivr.net/gh/liblaf/route-rules@mihomo/mihomo/domestic.domain.mrs",path:"./rules/domestic.domain.mrs"},"ipcidr-domestic":{interval:86400,format:"mrs",behavior:"ipcidr",type:"http",url:"https://testingcf.jsdelivr.net/gh/liblaf/route-rules@mihomo/mihomo/domestic.ipcidr.mrs",path:"./rules/domestic.ipcidr.mrs"},"domain-download":{interval:86400,format:"mrs",behavior:"domain",type:"http",url:"https://testingcf.jsdelivr.net/gh/liblaf/route-rules@mihomo/mihomo/download.domain.mrs",path:"./rules/download.domain.mrs"},"domain-global":{interval:86400,format:"mrs",behavior:"domain",type:"http",url:"https://testingcf.jsdelivr.net/gh/liblaf/route-rules@mihomo/mihomo/global.domain.mrs",path:"./rules/global.domain.mrs"},"ipcidr-global":{interval:86400,format:"mrs",behavior:"ipcidr",type:"http",url:"https://testingcf.jsdelivr.net/gh/liblaf/route-rules@mihomo/mihomo/global.ipcidr.mrs",path:"./rules/global.ipcidr.mrs"},"domain-local":{interval:86400,format:"mrs",behavior:"domain",type:"http",url:"https://testingcf.jsdelivr.net/gh/liblaf/route-rules@mihomo/mihomo/local.domain.mrs",path:"./rules/local.domain.mrs"},"ipcidr-local":{interval:86400,format:"mrs",behavior:"ipcidr",type:"http",url:"https://testingcf.jsdelivr.net/gh/liblaf/route-rules@mihomo/mihomo/local.ipcidr.mrs",path:"./rules/local.ipcidr.mrs"},"domain-stream":{interval:86400,format:"mrs",behavior:"domain",type:"http",url:"https://testingcf.jsdelivr.net/gh/liblaf/route-rules@mihomo/mihomo/stream.domain.mrs",path:"./rules/stream.domain.mrs"},"ipcidr-stream":{interval:86400,format:"mrs",behavior:"ipcidr",type:"http",url:"https://testingcf.jsdelivr.net/gh/liblaf/route-rules@mihomo/mihomo/stream.ipcidr.mrs",path:"./rules/stream.ipcidr.mrs"},"domain-telegram":{interval:86400,format:"mrs",behavior:"domain",type:"http",url:"https://testingcf.jsdelivr.net/gh/liblaf/route-rules@mihomo/mihomo/telegram.domain.mrs",path:"./rules/telegram.domain.mrs"},"ipcidr-telegram":{interval:86400,format:"mrs",behavior:"ipcidr",type:"http",url:"https://testingcf.jsdelivr.net/gh/liblaf/route-rules@mihomo/mihomo/telegram.ipcidr.mrs",path:"./rules/telegram.ipcidr.mrs"}}};var{$:ve}=globalThis.Bun;import we from"consola";import Pe from"js-yaml";import*as P from"lodash-es";import a from"zod";var ye=a.object({name:a.string(),type:a.string(),server:a.string()}),w=a.object({name:a.string(),type:a.enum(["select","url-test"]),proxies:a.array(a.string()),url:a.string().url().default("https://cp.cloudflare.com"),lazy:a.boolean().default(!0),"expected-status":a.number().int().min(100).max(599).default(204),icon:a.string().url().optional()}).passthrough(),mr=a.object({proxies:a.array(ye).optional(),"proxy-groups":a.array(w).optional(),rules:a.array(a.string()).optional()});var xe={"builtin://mihomo.yaml":X,"builtin://stash.yaml":B};class x{template;static async load(e){let r=xe[e];if(!r){let t=await Y.readFile(e,"utf-8");r=v(t)}return new x(r)}constructor(e){this.template=e}render(e,r){let t=P.cloneDeep(this.template),o=this.renderDefaultGroup(),i=[o];for(let s of r)for(let[m,l]of s.group(e)){let p=this.renderGroup(m,l);o.proxies.push(p.name),i.push(p)}return t.proxies=e.map((s)=>s.render()),t["proxy-groups"]=i,t=this.sanitize(t),this.serialize(t)}renderDefaultGroup(){return w.parse({name:"PROXY",type:"select",proxies:[]})}renderGroup(e,r){let t=r.map((i)=>i.prettyName);return w.parse({name:e.name,type:e.type,proxies:t,url:e.url,"expected-status":e["expected-status"],icon:e.icon})}sanitize(e){e=P.omitBy(e,(i,s)=>{return s.startsWith("__")});let r=e.rules??[],t=["DIRECT","REJECT","REJECT-DROP","PASS"];for(let i of e.proxies??[])t.push(i.name);for(let i of e["proxy-groups"]??[])t.push(i.name);let o=new Set(t);return e.rules=r.filter((i)=>{i=i.replace(/,no-resolve$/,"");let s=i.split(","),m=s[s.length-1].trim(),l=o.has(m);if(!l)we.warn(`delete invalid rule: ${i}`);return l}),e}serialize(e){return Pe.dump(e,{indent:2,noRefs:!0,sortKeys:!0})}async test(e){await ve`mihomo -f ${e} -t`}}class R{}class d extends R{*group(e){let r=e.filter(this.filter);if(r.length>0)yield[this.meta,r]}}function f(e){return!e.emby&&!e.info&&e.type!=="hysteria2"}class I extends d{meta={name:"Info",type:"url-test",emoji:"\u2139\uFE0F",icon:"https://cdn.jsdelivr.net/gh/Koolson/Qure/IconSet/Color/Airport.png"};filter(e){return e.info}}class j extends d{meta={name:"Auto",type:"url-test",emoji:"\uD83D\uDE80",icon:"https://cdn.jsdelivr.net/gh/Koolson/Qure/IconSet/Color/Auto.png"};filter(e){return f(e)&&e.multiplier<=2}}class M extends d{static BINANCE_EXCLUDE_REGIONS=new Set(["CA","CN","CU","HK","IR","KP","MO","NL","TW","US"]);meta={name:"Binance",type:"url-test",emoji:"\uD83E\uDE99",url:"https://api.binance.com/api/v3/ping"};filter(e){return f(e)&&!!e.country&&!M.BINANCE_EXCLUDE_REGIONS.has(e.country.cca2)}}class E extends d{static AI_EXCLUDE_REGIONS=new Set(["HK","MO"]);meta={name:"AI",type:"url-test",emoji:"\uD83E\uDD16",icon:"https://cdn.jsdelivr.net/gh/Koolson/Qure/IconSet/Color/AI.png"};filter(e){return f(e)&&!!e.country&&!E.AI_EXCLUDE_REGIONS.has(e.country.cca2)}}class L extends d{meta={name:"Stream",type:"url-test",emoji:"\uD83D\uDCFA",icon:"https://cdn.jsdelivr.net/gh/Koolson/Qure/IconSet/Color/YouTube.png"};filter(e){return f(e)&&e.multiplier<2}}import S from"@twemoji/api";class A extends R{*group(e){let r={};for(let t of e){if(!f(t))continue;let o=t.country.cca2,i=t.country,s=r[o]?.[1]??[];s.push(t),r[o]=[i,s]}for(let t of Object.keys(r).sort()){let[o,i]=r[t],s=o.flag,m="".concat(S.base,S.size,"/",S.convert.toCodePoint(s),S.ext);yield[{name:o.name.common,type:o.cca2===n.cca2?"select":"url-test",emoji:s,icon:m},i]}}}function J(){return[new j,new E,new M,new I,new L,new A]}import Z from"dns/promises";import Ce from"dataloader";import{z as V}from"zod";import Re from"dataloader";import Me from"ky";import*as Q from"lodash-es";import{z as c}from"zod";var Ee=c.looseObject({ip:c.union([c.ipv4(),c.ipv6()]),location:c.looseObject({country_code:c.string().length(2)}).optional()}),Se=c.record(c.string(),Ee);class U{endpoint=process.env.IPAPI_IS_URL??"https://api.ipapi.is/";loader;key;constructor(){this.loader=new Re(async(e)=>await this.batchLoadFn(e),{maxBatchSize:100}),this.key=process.env.IPAPI_IS_KEY}async lookup(e){return await this.loader.load(e)}async batchLoadFn(e){let r=await Me.post(this.endpoint,{json:{ips:e,key:this.key}}).json();r=Q.omit(r,["total_elapsed_ms"]);let t=Se.parse(r);return e.map((o)=>t[o])}}class G{api;loader;constructor(){this.api=new U,this.loader=new Ce(async(e)=>await this.batchLoadFn(e))}async lookup(e){return await this.loader.load(e)}async batchLoadFn(e){return await Promise.all(e.map(async(r)=>await this.loadFn(r)))}async loadFn(e){let r=[];if(Oe(e))r=[e];else r=(await Z.lookup(e,{all:!0})).map((i)=>i.address);let t=await Promise.all(r.map(async(o)=>await this.api.lookup(o)));for(let o of t){if(!o.location?.country_code)continue;return o}return{ip:r[0]??"",location:{country_code:n.cca2}}}}function Oe(e){return V.ipv4().safeParse(e).success||V.ipv6().safeParse(e).success}import ke from"world-countries";function ee(e){return ke.find((r)=>r.cca2===e)}import _ from"consola";import Te from"world-countries";class g{async process(e){return await Promise.all(e.map(async(r)=>await this.processSingle(r)))}processSingle(e){throw Error("processSingle() Not Implemented")}}class W extends g{geoip=new G;async processSingle(e){if(e.emby||e.info)return e.country=n,e;if(e.country.cca2===n.cca2)e=this.inferFromName(e);if(e.country.cca2===n.cca2)e=await this.inferFromServer(e);if(e.country.cca2===n.cca2)_.fail(`${e.prettyName} (${D(e.country)})`);return e}inferFromName(e){let r=e.name;for(let t of Te){if(t.cca2==="CN")continue;for(let o of Ie(t)){if(!o)continue;if(o.test(r))return _.success(`${e.prettyName} ~ ${o} (${D(t)})`),e.country=t,e}}return e}async inferFromServer(e){let r=await this.geoip.lookup(e.server);if(r.location?.country_code)e.country=ee(r.location.country_code)||n;else e.country=n;if(e.country.cca2!==n.cca2)_.success(`${e.prettyName} -> ${r.ip} (${D(e.country)})`);return e}}function*Ie(e){let r=new Set(["GB"]);function t(i){if(!i)return;if(r.has(i))return;return new RegExp(`\\b${i}\\b`)}function o(i){if(!i)return;if(r.has(i))return;return new RegExp(i,"iu")}for(let i of["en","zh"])for(let s of["narrow","short","long"]){let m=new Intl.DisplayNames(i,{style:s,type:"region"});if(s==="narrow"||s==="short")yield t(m.of(e.cca2));else if(s==="long")yield o(m.of(e.cca2))}yield o(e.name.common),yield o(e.name.official);for(let i in e.name.native)yield o(e.name.native[i].common),yield o(e.name.native[i].official);yield t(e.cca2),yield t(e.cca3),yield t(e.cioc);for(let i of e.capital)yield o(i);yield o(e.flag)}function D(e){return`${e.flag} ${e.name.common} (${e.cca2})`}import je from"consola";class z extends g{pattern=/Expire|Traffic|\u5269\u4F59|\u5957\u9910\u5230\u671F/iu;async processSingle(e){if(e.info=this.pattern.test(e.name),e.info)je.success(`${e.prettyName} ~ \u2139\uFE0F INFO`);return e}}function re(){return[new z,new W]}import{buildCommand as Le}from"@stricli/core";import oe from"consola";var ie=Le({docs:{brief:""},parameters:{flags:{filename:{kind:"parsed",parse:String,brief:"",default:"mihomo.yaml"},template:{kind:"parsed",parse:String,brief:"",default:"builtin://mihomo.yaml"}}},async func(e){let r=await x.load(e.template),t=J(),o=re(),i=new h,s=await i.listProfiles(),m=await i.listProviders(),l=(await Promise.all(Object.values(m).map(async(p)=>await Ae(i,p)))).flat();for(let p of o)l=await p.process(l);for(let p of Object.values(s)){let N=r.render(l.filter((le)=>{return p.providers.includes(le.provider.id)}),t),y=te.join("outputs",p.id,e.filename);await C.mkdir(te.dirname(y),{recursive:!0}),await C.writeFile(y,N),await r.test(y),oe.success(`-> ${y}`),await i.uploadProfileArtifact(p.id,e.filename,N)}}});async function Ae(e,r){let o=await(await e.downloadProviderArtifact(r.id,"mihomo.yaml")).text(),i=v(o);if(!i.proxies)return oe.warn(`No proxies found in ${r.id}/mihomo.yaml`),[];return i.proxies.map((s)=>new T(s,r))}import{NotFoundException as Ue}from"chanfana";import{z as b}from"zod";var dt=b.object({upload:b.number().optional(),download:b.number().optional(),total:b.number().optional(),expire:b.number().optional()}).passthrough();function se(e){let r={};if(!e)return r;for(let t of e.split(";")){let[o,i]=t.split("=");if(!o||!i)continue;if(o=o.trim(),i=i.trim(),!o||!i)continue;if(o==="upload"||o==="download"||o==="total"||o==="expire")r[o]=+i;else r[o]=i}return r}import ae from"js-yaml";async function O(e,r){r=r??u();let t=await r.get(e,{headers:{"User-Agent":"clash.meta"}}),o=await t.text();if(!ae.load(o).proxies)throw Error("empty subscription");let s=se(t.headers.get("Subscription-Userinfo"));return{content:o,userinfo:s}}class F{url;fetcher;constructor(e=process.env.SUBLINK_URL??"https://sublink.liblaf.me",r){this.url=e;this.fetcher=r}get client(){return u().extend({fetch:this.fetcher?.fetch.bind(this.fetcher),prefixUrl:this.url})}async clash(e){let r=new URL(`${this.url}/clash`);return r.searchParams.set("config",e),r.searchParams.set("ua","clash.meta"),await O(r,this.client)}}class H{sublink;constructor(e){this.sublink=e??new F}}class $ extends H{async fetch(e){if(e.mihomo)return await O(e.mihomo);let r=e.singbox??e.surge??e.xray;if(!r){let{id:t}=e;throw new Ue(`Provider ${t} does not support mihomo`)}return await this.sublink.clash(r)}}import{buildCommand as Ge}from"@stricli/core";var ne=Ge({docs:{brief:""},parameters:{flags:{provider:{kind:"parsed",parse:String,brief:""},bwcounter:{kind:"parsed",parse:String,brief:"",optional:!0},mihomo:{kind:"parsed",parse:String,brief:"",optional:!0},singbox:{kind:"parsed",parse:String,brief:"",optional:!0},xray:{kind:"parsed",parse:String,brief:"",optional:!0}}},async func(e){let r=new h,t=e.provider,o={id:t,bwcounter:e.bwcounter,mihomo:e.mihomo,singbox:e.singbox,xray:e.xray};await r.createProvider(o);let i=new $,{content:s,userinfo:m}=await i.fetch(o);await r.uploadProviderArtifact(t,"mihomo.yaml",s),await r.uploadProviderArtifact(t,"userinfo.json",m)}});var We=De({docs:{brief:""},routes:{hello:q,merge:ie,upload:ne}}),me=_e(We,{name:"sub-store",versionInfo:{currentVersion:K},scanner:{caseStyle:"allow-kebab-for-camel"}});import ze from"fs";import Fe from"os";import He from"path";var pe={process,os:Fe,fs:ze,path:He};import{run as $e}from"@stricli/core";await $e(me,process.argv.slice(2),pe);
4
4
 
5
- //# debugId=3E784C91661ED36964756E2164756E21
5
+ //# debugId=E23CF9C553D71FFA64756E2164756E21
6
6
  //# sourceMappingURL=sub-store.js.map
@@ -16,16 +16,16 @@
16
16
  "import type { OutboundWrapper } from \"@core/formats/shared/outbound\";\n\nexport type GroupMeta = {\n name: string;\n type: \"select\" | \"url-test\";\n emoji?: string;\n icon?: string;\n url?: string;\n \"expected-status\"?: number;\n};\n\nexport abstract class Grouper {\n abstract group<T = unknown>(\n outbounds: OutboundWrapper<T>[],\n ): Generator<[GroupMeta, OutboundWrapper<T>[]]>;\n}\n\nexport abstract class FilterGrouper extends Grouper {\n abstract meta: GroupMeta;\n\n override *group<T = unknown>(\n outbounds: OutboundWrapper<T>[],\n ): Generator<[GroupMeta, OutboundWrapper<T>[]]> {\n const grouped: OutboundWrapper<T>[] = outbounds.filter(this.filter);\n if (grouped.length > 0) {\n yield [this.meta, grouped];\n }\n }\n\n abstract filter(outbound: OutboundWrapper): boolean;\n}\n",
17
17
  "import type { OutboundWrapper } from \"@core/formats/shared/outbound\";\nimport type { GroupMeta } from \"./abc\";\nimport { FilterGrouper } from \"./abc\";\n\nexport function good<T = unknown>(outbound: OutboundWrapper<T>): boolean {\n // connection quality of Hysteria2 is poor\n return !outbound.emby && !outbound.info && outbound.type !== \"hysteria2\";\n}\n\nexport class Info extends FilterGrouper {\n override meta: GroupMeta = {\n name: \"Info\",\n type: \"url-test\",\n emoji: \"ℹ️\",\n icon: \"https://cdn.jsdelivr.net/gh/Koolson/Qure/IconSet/Color/Airport.png\",\n };\n\n override filter(outbound: OutboundWrapper): boolean {\n return outbound.info;\n }\n}\n\nexport class Auto extends FilterGrouper {\n override meta: GroupMeta = {\n name: \"Auto\",\n type: \"url-test\",\n emoji: \"🚀\",\n icon: \"https://cdn.jsdelivr.net/gh/Koolson/Qure/IconSet/Color/Auto.png\",\n };\n\n override filter(outbound: OutboundWrapper): boolean {\n return good(outbound) && outbound.multiplier <= 2.0;\n }\n}\n\nexport class Binance extends FilterGrouper {\n static BINANCE_EXCLUDE_REGIONS: Set<string> = new Set([\n \"CA\",\n \"CN\",\n \"CU\",\n \"HK\",\n \"IR\",\n \"KP\",\n \"MO\",\n \"NL\",\n \"TW\",\n \"US\",\n ]);\n\n override meta: GroupMeta = {\n name: \"Binance\",\n type: \"url-test\",\n emoji: \"🪙\",\n // TODO: add icon\n url: \"https://api.binance.com/api/v3/ping\",\n };\n\n override filter(outbound: OutboundWrapper): boolean {\n return (\n good(outbound) &&\n !!outbound.country &&\n !Binance.BINANCE_EXCLUDE_REGIONS.has(outbound.country.cca2)\n );\n }\n}\n\nexport class Ai extends FilterGrouper {\n static AI_EXCLUDE_REGIONS: Set<string> = new Set([\"HK\", \"MO\"]);\n\n override meta: GroupMeta = {\n name: \"AI\",\n type: \"url-test\",\n emoji: \"🤖\",\n icon: \"https://cdn.jsdelivr.net/gh/Koolson/Qure/IconSet/Color/AI.png\",\n };\n\n override filter(outbound: OutboundWrapper): boolean {\n return (\n good(outbound) &&\n !!outbound.country &&\n !Ai.AI_EXCLUDE_REGIONS.has(outbound.country.cca2)\n );\n }\n}\n\nexport class Download extends FilterGrouper {\n override meta: GroupMeta = {\n name: \"Download\",\n type: \"url-test\",\n emoji: \"📥\",\n icon: \"https://cdn.jsdelivr.net/gh/Koolson/Qure/IconSet/Color/Download.png\",\n };\n\n override filter(outbound: OutboundWrapper): boolean {\n return good(outbound) && outbound.multiplier <= 1.0;\n }\n}\n\nexport class Stream extends FilterGrouper {\n override meta: GroupMeta = {\n name: \"Stream\",\n type: \"url-test\",\n emoji: \"📺\",\n icon: \"https://cdn.jsdelivr.net/gh/Koolson/Qure/IconSet/Color/YouTube.png\",\n };\n\n override filter(outbound: OutboundWrapper): boolean {\n return good(outbound) && outbound.multiplier < 2.0;\n }\n}\n",
18
18
  "import type { OutboundWrapper } from \"@core/formats/shared/outbound\";\nimport { COUNTRY_UNKNOWN } from \"@core/geo/constants\";\nimport twemoji from \"@twemoji/api\";\nimport type { Country } from \"world-countries\";\nimport type { GroupMeta } from \"./abc\";\nimport { Grouper } from \"./abc\";\nimport { good } from \"./common\";\n\nexport class CountryGrouper extends Grouper {\n override *group<T = unknown>(\n outbounds: OutboundWrapper<T>[],\n ): Generator<[GroupMeta, OutboundWrapper<T>[]]> {\n const groups: Record<string, [Country, OutboundWrapper<T>[]]> = {};\n for (const outbound of outbounds) {\n if (!good(outbound)) continue;\n const cca2: string = outbound.country.cca2;\n const country = outbound.country;\n const filtered: OutboundWrapper<T>[] = groups[cca2]?.[1] ?? [];\n filtered.push(outbound);\n groups[cca2] = [country, filtered];\n }\n for (const cca2 of Object.keys(groups).sort()) {\n const [country, outbounds] = groups[cca2]!;\n const emoji: string = country.flag;\n const icon: string = \"\".concat(\n twemoji.base,\n twemoji.size,\n \"/\",\n twemoji.convert.toCodePoint(emoji),\n twemoji.ext,\n );\n const meta: GroupMeta = {\n name: country.name.common,\n type: country.cca2 === COUNTRY_UNKNOWN.cca2 ? \"select\" : \"url-test\",\n emoji,\n icon,\n };\n yield [meta, outbounds];\n }\n }\n}\n",
19
- "import type { Grouper } from \"./abc\";\nimport { Ai, Auto, Binance, Download, Info, Stream } from \"./common\";\nimport { CountryGrouper } from \"./country\";\n\nexport function defaultGroupers(): Grouper[] {\n return [\n new Auto(),\n new Ai(),\n new Binance(),\n new Download(),\n new Info(),\n new Stream(),\n new CountryGrouper(),\n ];\n}\n",
20
- "import type { LookupAddress } from \"node:dns\";\nimport dns from \"node:dns/promises\";\nimport DataLoader from \"dataloader\";\nimport { z } from \"zod\";\nimport { COUNTRY_UNKNOWN } from \"../constants\";\nimport type { GeoIpApiResponse } from \"./ipapi.is\";\nimport { IpapiIs } from \"./ipapi.is\";\n\nexport class GeoIP {\n private api: IpapiIs;\n private loader: DataLoader<string, GeoIpApiResponse>;\n\n public constructor() {\n this.api = new IpapiIs();\n this.loader = new DataLoader(\n async (servers: readonly string[]): Promise<GeoIpApiResponse[]> =>\n await this.batchLoadFn(servers),\n );\n }\n\n public async lookup(server: string): Promise<GeoIpApiResponse> {\n return await this.loader.load(server);\n }\n\n protected async batchLoadFn(\n servers: readonly string[],\n ): Promise<GeoIpApiResponse[]> {\n return await Promise.all(\n servers.map(\n async (server: string): Promise<GeoIpApiResponse> =>\n await this.loadFn(server),\n ),\n );\n }\n\n protected async loadFn(server: string): Promise<GeoIpApiResponse> {\n let ips: string[] = [];\n if (isIpAddr(server)) {\n ips = [server];\n } else {\n const addresses: LookupAddress[] = await dns.lookup(server, {\n all: true,\n });\n ips = addresses.map((addr: LookupAddress): string => addr.address);\n }\n const responses: GeoIpApiResponse[] = await Promise.all(\n ips.map(\n async (ip: string): Promise<GeoIpApiResponse> =>\n await this.api.lookup(ip),\n ),\n );\n for (const response of responses) {\n if (!response.location?.country_code) continue;\n return response;\n }\n return {\n ip: ips[0] ?? \"\",\n location: { country_code: COUNTRY_UNKNOWN.cca2 },\n };\n }\n}\n\nfunction isIpAddr(data: string): boolean {\n return z.string().ip().safeParse(data).success;\n}\n",
21
- "import DataLoader from \"dataloader\";\nimport ky from \"ky\";\nimport * as _ from \"lodash-es\";\nimport { z } from \"zod\";\n\nconst RESPONSE_SCHEMA = z\n .object({\n ip: z.string().ip(),\n location: z\n .object({ country_code: z.string().length(2) })\n .passthrough()\n .optional(),\n })\n .passthrough();\nexport type GeoIpApiResponse = z.infer<typeof RESPONSE_SCHEMA>;\n\nconst BULK_RESPONSE_SCHEMA = z.record(z.string(), RESPONSE_SCHEMA);\ntype BulkApiResponse = z.infer<typeof BULK_RESPONSE_SCHEMA>;\n\nexport class IpapiIs {\n endpoint: string = \"https://api.ipapi.is/\";\n private loader: DataLoader<string, GeoIpApiResponse>;\n private key?: string;\n\n public constructor() {\n this.loader = new DataLoader(\n async (ips: readonly string[]): Promise<GeoIpApiResponse[]> =>\n await this.batchLoadFn(ips),\n { maxBatchSize: 100 },\n );\n this.key = process.env.IPAPI_IS_KEY;\n }\n\n public async lookup(ip: string): Promise<GeoIpApiResponse> {\n return await this.loader.load(ip);\n }\n\n protected async batchLoadFn(\n ips: readonly string[],\n ): Promise<GeoIpApiResponse[]> {\n let data: any = await ky\n .post(this.endpoint, { json: { ips, key: this.key } })\n .json();\n data = _.omit(data, [\"total_elapsed_ms\"]);\n const response: BulkApiResponse = BULK_RESPONSE_SCHEMA.parse(data);\n return ips.map((ip: string): GeoIpApiResponse => response[ip]!);\n }\n}\n",
19
+ "import type { Grouper } from \"./abc\";\nimport { Ai, Auto, Binance, Info, Stream } from \"./common\";\nimport { CountryGrouper } from \"./country\";\n\nexport function defaultGroupers(): Grouper[] {\n return [\n new Auto(),\n new Ai(),\n new Binance(),\n // new Download(),\n new Info(),\n new Stream(),\n new CountryGrouper(),\n ];\n}\n",
20
+ "import type { LookupAddress } from \"node:dns\";\nimport dns from \"node:dns/promises\";\nimport DataLoader from \"dataloader\";\nimport { z } from \"zod\";\nimport { COUNTRY_UNKNOWN } from \"../constants\";\nimport type { GeoIpApiResponse } from \"./ipapi.is\";\nimport { IpapiIs } from \"./ipapi.is\";\n\nexport class GeoIP {\n private api: IpapiIs;\n private loader: DataLoader<string, GeoIpApiResponse>;\n\n public constructor() {\n this.api = new IpapiIs();\n this.loader = new DataLoader(\n async (servers: readonly string[]): Promise<GeoIpApiResponse[]> =>\n await this.batchLoadFn(servers),\n );\n }\n\n public async lookup(server: string): Promise<GeoIpApiResponse> {\n return await this.loader.load(server);\n }\n\n protected async batchLoadFn(\n servers: readonly string[],\n ): Promise<GeoIpApiResponse[]> {\n return await Promise.all(\n servers.map(\n async (server: string): Promise<GeoIpApiResponse> =>\n await this.loadFn(server),\n ),\n );\n }\n\n protected async loadFn(server: string): Promise<GeoIpApiResponse> {\n let ips: string[] = [];\n if (isIpAddr(server)) {\n ips = [server];\n } else {\n const addresses: LookupAddress[] = await dns.lookup(server, {\n all: true,\n });\n ips = addresses.map((addr: LookupAddress): string => addr.address);\n }\n const responses: GeoIpApiResponse[] = await Promise.all(\n ips.map(\n async (ip: string): Promise<GeoIpApiResponse> =>\n await this.api.lookup(ip),\n ),\n );\n for (const response of responses) {\n if (!response.location?.country_code) continue;\n return response;\n }\n return {\n ip: ips[0] ?? \"\",\n location: { country_code: COUNTRY_UNKNOWN.cca2 },\n };\n }\n}\n\nfunction isIpAddr(data: string): boolean {\n return z.ipv4().safeParse(data).success || z.ipv6().safeParse(data).success;\n}\n",
21
+ "import DataLoader from \"dataloader\";\nimport ky from \"ky\";\nimport * as _ from \"lodash-es\";\nimport { z } from \"zod\";\n\nconst RESPONSE_SCHEMA = z.looseObject({\n ip: z.union([z.ipv4(), z.ipv6()]),\n location: z.looseObject({ country_code: z.string().length(2) }).optional(),\n});\nexport type GeoIpApiResponse = z.infer<typeof RESPONSE_SCHEMA>;\n\nconst BULK_RESPONSE_SCHEMA = z.record(z.string(), RESPONSE_SCHEMA);\ntype BulkApiResponse = z.infer<typeof BULK_RESPONSE_SCHEMA>;\n\nexport class IpapiIs {\n endpoint: string = process.env.IPAPI_IS_URL ?? \"https://api.ipapi.is/\";\n private loader: DataLoader<string, GeoIpApiResponse>;\n private key?: string;\n\n public constructor() {\n this.loader = new DataLoader(\n async (ips: readonly string[]): Promise<GeoIpApiResponse[]> =>\n await this.batchLoadFn(ips),\n { maxBatchSize: 100 },\n );\n this.key = process.env.IPAPI_IS_KEY;\n }\n\n public async lookup(ip: string): Promise<GeoIpApiResponse> {\n return await this.loader.load(ip);\n }\n\n protected async batchLoadFn(\n ips: readonly string[],\n ): Promise<GeoIpApiResponse[]> {\n let data: any = await ky\n .post(this.endpoint, { json: { ips, key: this.key } })\n .json();\n data = _.omit(data, [\"total_elapsed_ms\"]);\n const response: BulkApiResponse = BULK_RESPONSE_SCHEMA.parse(data);\n return ips.map((ip: string): GeoIpApiResponse => response[ip]!);\n }\n}\n",
22
22
  "import type { Country } from \"world-countries\";\nimport countries from \"world-countries\";\n\nexport function lookupCountry(cca2: string): Country | undefined {\n return countries.find((c: Country): boolean => c.cca2 === cca2);\n}\n",
23
23
  "import type { OutboundWrapper } from \"@core/formats/shared/outbound\";\nimport { COUNTRY_UNKNOWN } from \"@core/geo/constants\";\nimport { GeoIP } from \"@core/geo/geoip/geoip\";\nimport type { GeoIpApiResponse } from \"@core/geo/geoip/ipapi.is\";\nimport { lookupCountry } from \"@core/geo/lookup\";\nimport consola from \"consola\";\nimport countries, { type Country } from \"world-countries\";\nimport { Processor } from \"./abc\";\n\nexport class ProcessorCountry extends Processor {\n private readonly geoip: GeoIP = new GeoIP();\n\n public override async processSingle<\n O extends OutboundWrapper<T>,\n T = unknown,\n >(outbound: O): Promise<O> {\n if (outbound.emby || outbound.info) {\n outbound.country = COUNTRY_UNKNOWN;\n return outbound;\n }\n if (outbound.country.cca2 === COUNTRY_UNKNOWN.cca2)\n outbound = this.inferFromName(outbound);\n if (outbound.country.cca2 === COUNTRY_UNKNOWN.cca2)\n outbound = await this.inferFromServer(outbound);\n if (outbound.country.cca2 === COUNTRY_UNKNOWN.cca2) {\n consola.fail(\n `${outbound.prettyName} (${prettyCountry(outbound.country)})`,\n );\n }\n return outbound;\n }\n\n protected inferFromName<T extends OutboundWrapper>(outbound: T): T {\n const name: string = outbound.name;\n for (const country of countries) {\n if (country.cca2 === \"CN\") continue;\n for (const pattern of patterns(country)) {\n if (!pattern) continue;\n if (pattern.test(name)) {\n consola.success(\n `${outbound.prettyName} ~ ${pattern} (${prettyCountry(country)})`,\n );\n outbound.country = country;\n return outbound;\n }\n }\n }\n return outbound;\n }\n\n protected async inferFromServer<T extends OutboundWrapper>(\n outbound: T,\n ): Promise<T> {\n const response: GeoIpApiResponse = await this.geoip.lookup(outbound.server);\n if (response.location?.country_code) {\n outbound.country =\n lookupCountry(response.location.country_code) || COUNTRY_UNKNOWN;\n } else {\n outbound.country = COUNTRY_UNKNOWN;\n }\n if (outbound.country.cca2 !== COUNTRY_UNKNOWN.cca2) {\n consola.success(\n `${outbound.prettyName} -> ${response.ip} (${prettyCountry(outbound.country)})`,\n );\n }\n return outbound;\n }\n}\n\nfunction* patterns(country: Country): Generator<RegExp | undefined> {\n const EXCLUDE_PATTERNS = new Set([\n \"GB\", // gigabyte\n ]);\n\n function short(pattern?: string): RegExp | undefined {\n if (!pattern) return undefined;\n if (EXCLUDE_PATTERNS.has(pattern)) return undefined;\n return new RegExp(`\\\\b${pattern}\\\\b`);\n }\n\n function long(pattern?: string): RegExp | undefined {\n if (!pattern) return undefined;\n if (EXCLUDE_PATTERNS.has(pattern)) return undefined;\n return new RegExp(pattern, \"iu\");\n }\n\n for (const locale of [\"en\", \"zh\"]) {\n for (const style of [\"narrow\", \"short\", \"long\"]) {\n const display = new Intl.DisplayNames(locale, {\n style: style as Intl.RelativeTimeFormatStyle,\n type: \"region\",\n });\n if (style === \"narrow\" || style === \"short\") {\n yield short(display.of(country.cca2));\n } else if (style === \"long\") {\n yield long(display.of(country.cca2));\n }\n }\n }\n yield long(country.name.common);\n yield long(country.name.official);\n for (const lang in country.name.native) {\n yield long(country.name.native[lang]!.common);\n yield long(country.name.native[lang]!.official);\n }\n yield short(country.cca2);\n // yield long(country.ccn3);\n yield short(country.cca3);\n yield short(country.cioc);\n for (const capital of country.capital) yield long(capital);\n // for (const alt of country.altSpellings) yield long(alt);\n yield long(country.flag);\n}\n\nfunction prettyCountry(country: Country): string {\n return `${country.flag} ${country.name.common} (${country.cca2})`;\n}\n",
24
24
  "import type { OutboundWrapper } from \"@core/formats/shared/outbound\";\n\nexport abstract class Processor {\n async process<O extends OutboundWrapper<T>, T = unknown>(\n outbounds: O[],\n ): Promise<O[]> {\n return await Promise.all(\n outbounds.map(async (o: O): Promise<O> => await this.processSingle(o)),\n );\n }\n\n processSingle<O extends OutboundWrapper<T>, T = unknown>(\n _outbound: O,\n ): Promise<O> {\n throw new Error(\"processSingle() Not Implemented\");\n }\n}\n",
25
25
  "import type { OutboundWrapper } from \"@core/formats/shared/outbound\";\nimport consola from \"consola\";\nimport { Processor } from \"./abc\";\n\nexport class ProcessorInfo extends Processor {\n pattern: RegExp = /Expire|Traffic|剩余|套餐到期/iu;\n\n override async processSingle<O extends OutboundWrapper<T>, T = unknown>(\n outbound: O,\n ): Promise<O> {\n outbound.info = this.pattern.test(outbound.name);\n if (outbound.info) consola.success(`${outbound.prettyName} ~ ℹ️ INFO`);\n return outbound;\n }\n}\n",
26
26
  "import type { Processor } from \"./abc\";\nimport { ProcessorCountry } from \"./country\";\nimport { ProcessorInfo } from \"./info\";\n\nexport function defaultProcessors(): Processor[] {\n return [new ProcessorInfo(), new ProcessorCountry()];\n}\n",
27
27
  "import type { Provider } from \"@shared/schema/provider\";\nimport { NotFoundException } from \"chanfana\";\nimport { LocalFetcher } from \"./abc\";\nimport { fetchMihomoDirect } from \"./direct/mihomo\";\nimport type { LocalFetchResult } from \"./types\";\n\nexport class MihomoLocalFetcher extends LocalFetcher<string> {\n override async fetch(provider: Provider): Promise<LocalFetchResult<string>> {\n if (provider.mihomo) {\n return await fetchMihomoDirect(provider.mihomo);\n }\n const url: string | undefined =\n provider.singbox ?? provider.surge ?? provider.xray;\n if (!url) {\n const { id } = provider;\n throw new NotFoundException(`Provider ${id} does not support mihomo`);\n }\n return await this.sublink.clash(url);\n }\n}\n",
28
- "import { z } from \"zod/v3\";\n\nexport const USERINFO_SCHEMA = z\n .object({\n upload: z.number().optional(),\n download: z.number().optional(),\n total: z.number().optional(),\n expire: z.number().optional(),\n })\n .passthrough();\nexport type Userinfo = z.infer<typeof USERINFO_SCHEMA>;\n\nexport function parseUserinfo(header: string | null): Userinfo {\n const userinfo: Userinfo = {};\n if (!header) return userinfo;\n for (const part of header.split(\";\")) {\n let [key, value] = part.split(\"=\");\n if (!key || !value) continue;\n key = key.trim();\n value = value.trim();\n if (!key || !value) continue;\n if (\n key === \"upload\" ||\n key === \"download\" ||\n key === \"total\" ||\n key === \"expire\"\n ) {\n userinfo[key] = +value;\n } else {\n userinfo[key] = value;\n }\n }\n return userinfo;\n}\n\nexport function serializeUserinfo(userinfo: Userinfo): string {\n return Object.entries(userinfo)\n .map(([key, value]: [string, unknown]): string => `${key}=${value}`)\n .join(\"; \");\n}\n",
28
+ "import { z } from \"zod\";\n\nexport const USERINFO_SCHEMA = z\n .object({\n upload: z.number().optional(),\n download: z.number().optional(),\n total: z.number().optional(),\n expire: z.number().optional(),\n })\n .passthrough();\nexport type Userinfo = z.infer<typeof USERINFO_SCHEMA>;\n\nexport function parseUserinfo(header: string | null): Userinfo {\n const userinfo: Userinfo = {};\n if (!header) return userinfo;\n for (const part of header.split(\";\")) {\n let [key, value] = part.split(\"=\");\n if (!key || !value) continue;\n key = key.trim();\n value = value.trim();\n if (!key || !value) continue;\n if (\n key === \"upload\" ||\n key === \"download\" ||\n key === \"total\" ||\n key === \"expire\"\n ) {\n userinfo[key] = +value;\n } else {\n userinfo[key] = value;\n }\n }\n return userinfo;\n}\n\nexport function serializeUserinfo(userinfo: Userinfo): string {\n return Object.entries(userinfo)\n .map(([key, value]: [string, unknown]): string => `${key}=${value}`)\n .join(\"; \");\n}\n",
29
29
  "import type { Userinfo } from \"@shared/schema/userinfo\";\nimport { parseUserinfo } from \"@shared/schema/userinfo\";\nimport { defaultClient } from \"@shared/utils\";\nimport yaml from \"js-yaml\";\nimport type { KyInstance, KyResponse } from \"ky\";\nimport type { LocalFetchResult } from \"../types\";\n\ntype ClashConfig = {\n proxies: unknown[];\n};\n\nexport async function fetchMihomoDirect(\n input: string | URL,\n client?: KyInstance,\n): Promise<LocalFetchResult<string>> {\n client = client ?? defaultClient();\n const response: KyResponse = await client.get(input, {\n headers: { \"User-Agent\": \"clash.meta\" },\n });\n const content: string = await response.text();\n const config = yaml.load(content) as ClashConfig;\n if (!config.proxies) {\n throw new Error(\"empty subscription\");\n }\n const userinfo: Userinfo = parseUserinfo(\n response.headers.get(\"Subscription-Userinfo\"),\n );\n return { content, userinfo };\n}\n",
30
30
  "import { defaultClient } from \"@shared/utils\";\nimport type { KyInstance } from \"ky\";\nimport { fetchMihomoDirect } from \"./direct/mihomo\";\nimport type { LocalFetchResult } from \"./types\";\n\nexport class Sublink {\n constructor(\n private url: string = process.env.SUBLINK_URL ??\n \"https://sublink.liblaf.me\",\n private fetcher?: Fetcher,\n ) {}\n\n get client(): KyInstance {\n const client: KyInstance = defaultClient();\n return client.extend({\n fetch: this.fetcher?.fetch.bind(this.fetcher),\n prefixUrl: this.url,\n });\n }\n\n async clash(url: string): Promise<LocalFetchResult<string>> {\n const input = new URL(`${this.url}/clash`);\n input.searchParams.set(\"config\", url);\n input.searchParams.set(\"ua\", \"clash.meta\");\n return await fetchMihomoDirect(input, this.client);\n }\n}\n",
31
31
  "import type { Provider } from \"@shared/schema/provider\";\nimport { Sublink } from \"./sublink\";\nimport type { LocalFetchResult } from \"./types\";\n\nexport abstract class LocalFetcher<T> {\n protected sublink: Sublink;\n\n constructor(sublink?: Sublink) {\n this.sublink = sublink ?? new Sublink();\n }\n\n abstract fetch(provider: Provider): Promise<LocalFetchResult<T>>;\n}\n",
@@ -33,7 +33,7 @@
33
33
  "import fs from \"node:fs\";\nimport os from \"node:os\";\nimport path from \"node:path\";\nimport type { StricliAutoCompleteContext } from \"@stricli/auto-complete\";\nimport type { CommandContext } from \"@stricli/core\";\n\nexport interface Context extends CommandContext, StricliAutoCompleteContext {\n readonly process: NodeJS.Process;\n}\n\nexport const context: Context = { process, os, fs, path };\n",
34
34
  "#!/usr/bin/env bun\nimport app from \"@cli/app\";\nimport { context } from \"@cli/types\";\nimport { run } from \"@stricli/core\";\n\nawait run(app, process.argv.slice(2), context);\n"
35
35
  ],
36
- "mappings": "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",
37
- "debugId": "3E784C91661ED36964756E2164756E21",
36
+ "mappings": "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",
37
+ "debugId": "E23CF9C553D71FFA64756E2164756E21",
38
38
  "names": []
39
39
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@liblaf/sub-store",
3
- "version": "0.2.1",
3
+ "version": "0.2.3",
4
4
  "description": "",
5
5
  "keywords": [],
6
6
  "homepage": "https://github.com/liblaf/sub-store",
@@ -53,32 +53,32 @@
53
53
  "trailingComma": "none"
54
54
  },
55
55
  "dependencies": {
56
- "@scalar/hono-api-reference": "^0.9.30",
57
- "@scalar/openapi-to-markdown": "^0.3.12",
58
- "@stricli/core": "^1.2.4",
56
+ "@scalar/hono-api-reference": "^0.9.32",
57
+ "@scalar/openapi-to-markdown": "^0.3.18",
58
+ "@stricli/core": "^1.2.5",
59
59
  "@twemoji/api": "^17.0.2",
60
- "chanfana": "^2.8.3",
60
+ "chanfana": "^3.0.0",
61
61
  "consola": "^3.4.2",
62
62
  "dataloader": "^2.2.3",
63
- "hono": "^4.11.3",
63
+ "hono": "^4.11.4",
64
64
  "js-yaml": "^4.1.1",
65
65
  "ky": "^1.14.2",
66
66
  "lodash-es": "^4.17.22",
67
67
  "world-countries": "^5.1.0",
68
- "zod": "^3.25.76"
68
+ "zod": "^4.3.5"
69
69
  },
70
70
  "devDependencies": {
71
- "@biomejs/biome": "^2.3.10",
71
+ "@biomejs/biome": "^2.3.11",
72
72
  "@liblaf/config": "^0.1.3",
73
- "@stricli/auto-complete": "^1.2.4",
74
- "@types/bun": "^1.3.5",
73
+ "@stricli/auto-complete": "^1.2.5",
74
+ "@types/bun": "^1.3.6",
75
75
  "@types/js-yaml": "^4.0.9",
76
76
  "@types/lodash-es": "^4.17.12",
77
- "bunup": "^0.16.11",
77
+ "bunup": "^0.16.17",
78
78
  "prettier": "^3.7.4",
79
- "prettier-plugin-packagejson": "^2.5.20",
79
+ "prettier-plugin-packagejson": "^2.5.21",
80
80
  "typescript": "^5.9.3",
81
- "wrangler": "^4.54.0"
81
+ "wrangler": "^4.59.1"
82
82
  },
83
83
  "peerDependencies": {
84
84
  "typescript": "^5"