UNPKG

@herbertgao/surgio

Version:

Generating rules for Surge, Clash, Quantumult like a PRO

139 lines (138 loc) 7.27 kB
import { z } from 'zod'; import { WireguardNodeConfigValidator, ProviderValidator, ShadowsocksNodeConfigValidator, HttpNodeConfigValidator, HttpsNodeConfigValidator, TrojanNodeConfigValidator, ShadowsocksrNodeConfigValidator, Socks5NodeConfigValidator, VmessNodeConfigValidator, SnellNodeConfigValidator, TuicNodeConfigValidator, SurgioConfigValidator, ArtifactValidator, RemoteSnippetValidator, NodeFilterTypeValidator, SortedNodeFilterTypeValidator, Hysteria2NodeConfigValidator, ClashCoreValidator, VlessNodeConfigValidator } from './validators'; import type { Provider, GetNodeListParams } from './provider'; export declare enum NodeTypeEnum { HTTPS = "https", HTTP = "http", Shadowsocks = "shadowsocks", Shadowsocksr = "shadowsocksr", Snell = "snell", Vmess = "vmess", Vless = "vless", Trojan = "trojan", Socks5 = "socks5", Tuic = "tuic", Wireguard = "wireguard", Hysteria2 = "hysteria2" } export declare enum SupportProviderEnum { Clash = "clash", Custom = "custom", ShadowsocksSubscribe = "shadowsocks_subscribe", ShadowsocksrSubscribe = "shadowsocksr_subscribe", ShadowsocksJsonSubscribe = "shadowsocks_json_subscribe", V2rayNSubscribe = "v2rayn_subscribe", BlackSSL = "blackssl", Ssd = "ssd", Trojan = "trojan" } export type CommandConfigBeforeNormalize = z.input<typeof SurgioConfigValidator>; export type CommandConfigAfterNormalize = z.infer<typeof SurgioConfigValidator>; export type CommandConfig = CommandConfigAfterNormalize & { publicUrl: string; output: string; urlBase: string; providerDir: string; templateDir: string; configDir: string; }; export type RemoteSnippetConfig = z.infer<typeof RemoteSnippetValidator>; export interface RemoteSnippet extends RemoteSnippetConfig { readonly main: (...args: string[]) => string; readonly text: string; } export type ArtifactConfig = z.infer<typeof ArtifactValidator>; export type ArtifactConfigInput = z.input<typeof ArtifactValidator>; export type ProviderConfig = z.infer<typeof ProviderValidator>; export interface BlackSSLProviderConfig extends ProviderConfig { readonly type: SupportProviderEnum.BlackSSL; readonly username: string; readonly password: string; } export interface ShadowsocksJsonSubscribeProviderConfig extends ProviderConfig { readonly type: SupportProviderEnum.ShadowsocksJsonSubscribe; readonly url: string; readonly udpRelay?: boolean; } export interface ShadowsocksSubscribeProviderConfig extends ProviderConfig { readonly type: SupportProviderEnum.ShadowsocksSubscribe; readonly url: string; readonly udpRelay?: boolean; } export interface ShadowsocksrSubscribeProviderConfig extends ProviderConfig { readonly type: SupportProviderEnum.ShadowsocksrSubscribe; readonly url: string; readonly udpRelay?: boolean; } export interface V2rayNSubscribeProviderConfig extends ProviderConfig { readonly type: SupportProviderEnum.V2rayNSubscribe; readonly url: string; readonly compatibleMode?: boolean; readonly skipCertVerify?: boolean; readonly udpRelay?: boolean; readonly tls13?: boolean; } export interface ClashProviderConfig extends ProviderConfig { readonly type: SupportProviderEnum.Clash; readonly url: string; readonly udpRelay?: boolean; readonly tls13?: boolean; } export interface SsdProviderConfig extends ProviderConfig { readonly type: SupportProviderEnum.Ssd; readonly url: string; readonly udpRelay?: boolean; } export type AsyncCustomProviderNodeList = (params: GetNodeListParams) => Promise<ReadonlyArray<PossibleNodeConfigType>>; export interface CustomProviderConfig extends ProviderConfig { readonly type: SupportProviderEnum.Custom; readonly nodeList: ReadonlyArray<PossibleNodeConfigType> | AsyncCustomProviderNodeList; } export interface TrojanProviderConfig extends ProviderConfig { readonly type: SupportProviderEnum.Trojan; readonly url: string; readonly udpRelay?: boolean; readonly tls13?: boolean; } export type HttpNodeConfigInput = z.infer<typeof HttpNodeConfigValidator>; export type HttpNodeConfig = z.infer<typeof HttpNodeConfigValidator> & SurgioInternals; export type HttpsNodeConfigInput = z.infer<typeof HttpsNodeConfigValidator>; export type HttpsNodeConfig = z.infer<typeof HttpsNodeConfigValidator> & SurgioInternals; export type TrojanNodeConfigInput = z.infer<typeof TrojanNodeConfigValidator>; export type TrojanNodeConfig = z.infer<typeof TrojanNodeConfigValidator> & SurgioInternals; export type ShadowsocksNodeConfigInput = z.infer<typeof ShadowsocksNodeConfigValidator>; export type ShadowsocksNodeConfig = z.infer<typeof ShadowsocksNodeConfigValidator> & SurgioInternals; export type ShadowsocksrNodeConfigInput = z.infer<typeof ShadowsocksrNodeConfigValidator>; export type ShadowsocksrNodeConfig = z.infer<typeof ShadowsocksrNodeConfigValidator> & SurgioInternals; export type Socks5NodeConfigInput = z.infer<typeof Socks5NodeConfigValidator>; export type Socks5NodeConfig = z.infer<typeof Socks5NodeConfigValidator> & SurgioInternals; export type SnellNodeConfigInput = z.infer<typeof SnellNodeConfigValidator>; export type SnellNodeConfig = z.infer<typeof SnellNodeConfigValidator> & SurgioInternals; export type VmessNodeConfigInput = z.infer<typeof VmessNodeConfigValidator>; export type VmessNodeConfig = z.infer<typeof VmessNodeConfigValidator> & SurgioInternals; export type VlessNodeConfigInput = z.infer<typeof VlessNodeConfigValidator>; export type VlessNodeConfig = z.infer<typeof VlessNodeConfigValidator> & SurgioInternals; export type TuicNodeConfigInput = z.input<typeof TuicNodeConfigValidator>; export type TuicNodeConfig = z.infer<typeof TuicNodeConfigValidator> & SurgioInternals; export type WireguardNodeConfigInput = z.input<typeof WireguardNodeConfigValidator>; export type WireguardNodeConfig = z.infer<typeof WireguardNodeConfigValidator> & SurgioInternals; export type Hysteria2NodeConfigInput = z.input<typeof Hysteria2NodeConfigValidator>; export type Hysteria2NodeConfig = z.infer<typeof Hysteria2NodeConfigValidator> & SurgioInternals; export interface SurgioInternals { provider?: Provider; } export interface SubscriptionUserinfo { readonly upload: number; readonly download: number; readonly total: number; readonly expire: number; } export interface SubsciptionCacheItem { readonly body: string; subscriptionUserinfo?: SubscriptionUserinfo; } export type NodeFilterType = z.infer<typeof NodeFilterTypeValidator>; export type SortedNodeFilterType = z.infer<typeof SortedNodeFilterTypeValidator>; export type PossibleNodeConfigType = HttpsNodeConfig | HttpNodeConfig | ShadowsocksNodeConfig | ShadowsocksrNodeConfig | SnellNodeConfig | VmessNodeConfig | VlessNodeConfig | TrojanNodeConfig | Socks5NodeConfig | TuicNodeConfig | WireguardNodeConfig | Hysteria2NodeConfig; export type PossibleProviderConfigType = BlackSSLProviderConfig | ClashProviderConfig | CustomProviderConfig | ShadowsocksJsonSubscribeProviderConfig | ShadowsocksrSubscribeProviderConfig | ShadowsocksSubscribeProviderConfig | SsdProviderConfig | TrojanProviderConfig | V2rayNSubscribeProviderConfig; export type ClashCoreType = z.infer<typeof ClashCoreValidator>;