UNPKG

10.9 kBTypeScriptView Raw
1import Provider from './provider/Provider';
2export declare enum NodeTypeEnum {
3 HTTPS = "https",
4 HTTP = "http",
5 Shadowsocks = "shadowsocks",
6 Shadowsocksr = "shadowsocksr",
7 Snell = "snell",
8 Vmess = "vmess",
9 Trojan = "trojan",
10 Socks5 = "socks5",
11 Tuic = "tuic"
12}
13export declare enum SupportProviderEnum {
14 Clash = "clash",
15 Custom = "custom",
16 ShadowsocksSubscribe = "shadowsocks_subscribe",
17 ShadowsocksrSubscribe = "shadowsocksr_subscribe",
18 ShadowsocksJsonSubscribe = "shadowsocks_json_subscribe",
19 V2rayNSubscribe = "v2rayn_subscribe",
20 BlackSSL = "blackssl",
21 Ssd = "ssd",
22 Trojan = "trojan"
23}
24export interface CommandConfig {
25 publicUrl: string;
26 readonly output: string;
27 readonly artifacts: ReadonlyArray<ArtifactConfig>;
28 readonly remoteSnippets?: ReadonlyArray<RemoteSnippetConfig>;
29 readonly urlBase: string;
30 readonly providerDir: string;
31 readonly templateDir: string;
32 readonly configDir: string;
33 readonly analytics?: boolean;
34 readonly checkHostname?: boolean;
35 readonly upload?: {
36 readonly prefix?: string;
37 readonly region?: string;
38 readonly endpoint?: string;
39 readonly bucket: string;
40 readonly accessKeyId: string;
41 readonly accessKeySecret: string;
42 };
43 readonly binPath?: {
44 readonly shadowsocksr?: string;
45 readonly v2ray?: string;
46 vmess?: string;
47 };
48 readonly flags?: {
49 [name: string]: ReadonlyArray<string | RegExp> | string | RegExp;
50 };
51 readonly surgeConfig?: {
52 readonly shadowsocksFormat?: 'ss' | 'custom';
53 readonly v2ray?: 'native' | 'external';
54 readonly resolveHostname?: boolean;
55 readonly vmessAEAD?: boolean;
56 };
57 readonly quantumultXConfig?: {
58 readonly vmessAEAD?: boolean;
59 };
60 readonly clashConfig?: {
61 readonly ssrFormat?: 'native' | 'legacy';
62 readonly enableTuic?: boolean;
63 };
64 readonly surfboardConfig?: {
65 readonly vmessAEAD?: boolean;
66 };
67 readonly gateway?: {
68 readonly accessToken?: string;
69 readonly viewerToken?: string;
70 readonly auth?: boolean;
71 readonly cookieMaxAge?: number;
72 readonly useCacheOnError?: boolean;
73 };
74 readonly proxyTestUrl?: string;
75 readonly proxyTestInterval?: number;
76 readonly customFilters?: {
77 readonly [name: string]: NodeNameFilterType | SortedNodeNameFilterType;
78 };
79 readonly customParams?: PlainObjectOf<string | boolean | number>;
80 readonly cache?: {
81 readonly type?: 'redis' | 'default';
82 readonly redisUrl?: string;
83 };
84}
85export interface RemoteSnippetConfig {
86 readonly url: string;
87 readonly name: string;
88 readonly surgioSnippet?: boolean;
89}
90export interface RemoteSnippet extends RemoteSnippetConfig {
91 readonly main: (...args: string[]) => string;
92 readonly text: string;
93}
94export interface ArtifactConfig {
95 readonly name: string;
96 readonly template: string | undefined;
97 readonly provider: string;
98 readonly combineProviders?: ReadonlyArray<string>;
99 readonly categories?: ReadonlyArray<string>;
100 readonly customParams?: PlainObjectOf<string | boolean | number>;
101 readonly proxyGroupModifier?: ProxyGroupModifier;
102 readonly destDir?: string;
103 readonly templateString?: string;
104 readonly downloadUrl?: string;
105}
106export interface ProviderConfig {
107 readonly type: SupportProviderEnum;
108 readonly nodeFilter?: NodeFilterType | SortedNodeNameFilterType;
109 readonly netflixFilter?: NodeNameFilterType | SortedNodeNameFilterType;
110 readonly youtubePremiumFilter?: NodeNameFilterType | SortedNodeNameFilterType;
111 readonly startPort?: number;
112 readonly customFilters?: {
113 readonly [name: string]: NodeNameFilterType | SortedNodeNameFilterType;
114 };
115 readonly addFlag?: boolean;
116 readonly removeExistingFlag?: boolean;
117 readonly tfo?: boolean;
118 readonly mptcp?: boolean;
119 readonly renameNode?: (name: string) => string;
120 readonly relayUrl?: boolean | string;
121 readonly requestUserAgent?: string;
122 readonly cache?: {
123 readonly type?: 'redis' | 'default';
124 };
125 readonly underlyingProxy?: string;
126}
127export interface BlackSSLProviderConfig extends ProviderConfig {
128 readonly username: string;
129 readonly password: string;
130}
131export interface ShadowsocksJsonSubscribeProviderConfig extends ProviderConfig {
132 readonly url: string;
133 readonly udpRelay?: boolean;
134}
135export interface ShadowsocksSubscribeProviderConfig extends ProviderConfig {
136 readonly url: string;
137 readonly udpRelay?: boolean;
138}
139export interface ShadowsocksrSubscribeProviderConfig extends ProviderConfig {
140 readonly url: string;
141 readonly udpRelay?: boolean;
142}
143export interface V2rayNSubscribeProviderConfig extends ProviderConfig {
144 readonly url: string;
145 readonly compatibleMode?: boolean;
146 readonly skipCertVerify?: boolean;
147 readonly udpRelay?: boolean;
148 readonly tls13?: boolean;
149}
150export interface ClashProviderConfig extends ProviderConfig {
151 readonly url: string;
152 readonly udpRelay?: boolean;
153 readonly tls13?: boolean;
154}
155export interface SsdProviderConfig extends ProviderConfig {
156 readonly url: string;
157 readonly udpRelay?: boolean;
158}
159export interface CustomProviderConfig extends ProviderConfig {
160 readonly nodeList: ReadonlyArray<any>;
161}
162export interface TrojanProviderConfig extends ProviderConfig {
163 readonly url: string;
164 readonly udpRelay?: boolean;
165 readonly tls13?: boolean;
166}
167export interface HttpNodeConfig extends SimpleNodeConfig {
168 readonly type: NodeTypeEnum.HTTP;
169 readonly hostname: string;
170 readonly port: number | string;
171 readonly username: string;
172 readonly password: string;
173}
174export interface HttpsNodeConfig extends TlsNodeConfig {
175 readonly type: NodeTypeEnum.HTTPS;
176 readonly username: string;
177 readonly password: string;
178}
179export interface ShadowsocksNodeConfig extends SimpleNodeConfig {
180 readonly type: NodeTypeEnum.Shadowsocks;
181 readonly hostname: string;
182 readonly port: number | string;
183 readonly method: string;
184 readonly password: string;
185 readonly 'udp-relay'?: boolean;
186 readonly obfs?: 'tls' | 'http' | 'ws' | 'wss';
187 readonly 'obfs-host'?: string;
188 readonly 'obfs-uri'?: string;
189 readonly skipCertVerify?: boolean;
190 readonly wsHeaders?: Record<string, string>;
191 readonly tls13?: boolean;
192 readonly mux?: boolean;
193}
194export interface SnellNodeConfig extends SimpleNodeConfig {
195 readonly type: NodeTypeEnum.Snell;
196 readonly hostname: string;
197 readonly port: number | string;
198 readonly psk: string;
199 readonly obfs?: string;
200 readonly 'obfs-host'?: string;
201 readonly version?: string;
202 readonly reuse?: boolean;
203}
204export interface ShadowsocksrNodeConfig extends SimpleNodeConfig {
205 readonly type: NodeTypeEnum.Shadowsocksr;
206 readonly hostname: string;
207 readonly port: number | string;
208 readonly method: string;
209 readonly protocol: string;
210 readonly obfs: string;
211 readonly password: string;
212 readonly obfsparam: string;
213 readonly protoparam: string;
214 readonly 'udp-relay'?: boolean;
215}
216export interface VmessNodeConfig extends SimpleNodeConfig {
217 readonly type: NodeTypeEnum.Vmess;
218 readonly hostname: string;
219 readonly port: number | string;
220 readonly method: 'auto' | 'aes-128-gcm' | 'chacha20-ietf-poly1305' | 'none';
221 readonly uuid: string;
222 readonly alterId: string;
223 readonly network: 'tcp' | 'ws';
224 readonly tls: boolean;
225 readonly host?: string;
226 readonly path?: string;
227 readonly 'udp-relay'?: boolean;
228 readonly tls13?: boolean;
229 readonly skipCertVerify?: boolean;
230 readonly wsHeaders?: Record<string, string>;
231 readonly serverCertFingerprintSha256?: string;
232}
233export interface TrojanNodeConfig extends TlsNodeConfig {
234 readonly type: NodeTypeEnum.Trojan;
235 readonly password: string;
236 readonly 'udp-relay'?: boolean;
237 readonly network?: 'tcp' | 'ws';
238 readonly wsPath?: string;
239 readonly wsHeaders?: Record<string, string>;
240}
241export interface TuicNodeConfig extends TlsNodeConfig {
242 readonly type: NodeTypeEnum.Tuic;
243 readonly token: string;
244 readonly 'udp-relay'?: boolean;
245}
246export interface Socks5NodeConfig extends SimpleNodeConfig {
247 readonly type: NodeTypeEnum.Socks5;
248 readonly hostname: string;
249 readonly port: number | string;
250 readonly username?: string;
251 readonly password?: string;
252 readonly tls?: boolean;
253 readonly skipCertVerify?: boolean;
254 readonly udpRelay?: boolean;
255 readonly sni?: string;
256 readonly clientCert?: string;
257}
258export interface SimpleNodeConfig {
259 readonly type: NodeTypeEnum;
260 nodeName: string;
261 enable?: boolean;
262 tfo?: boolean;
263 mptcp?: boolean;
264 shadowTls?: {
265 password: string;
266 sni?: string;
267 };
268 binPath?: string;
269 localPort?: number;
270 surgeConfig?: CommandConfig['surgeConfig'];
271 clashConfig?: CommandConfig['clashConfig'];
272 quantumultXConfig?: CommandConfig['quantumultXConfig'];
273 surfboardConfig?: CommandConfig['surfboardConfig'];
274 hostnameIp?: ReadonlyArray<string>;
275 provider?: Provider;
276 underlyingProxy?: string;
277 testUrl?: string;
278}
279export interface TlsNodeConfig extends SimpleNodeConfig {
280 readonly hostname: string;
281 readonly port: number | string;
282 readonly tls13?: boolean;
283 readonly skipCertVerify?: boolean;
284 readonly sni?: string;
285 readonly alpn?: ReadonlyArray<string>;
286 readonly serverCertFingerprintSha256?: string;
287}
288export interface PlainObject {
289 readonly [name: string]: any;
290}
291export interface PlainObjectOf<T> {
292 readonly [name: string]: T;
293}
294export interface CreateServerOptions {
295 readonly cwd?: string;
296}
297export interface SubscriptionUserinfo {
298 readonly upload: number;
299 readonly download: number;
300 readonly total: number;
301 readonly expire: number;
302}
303export declare type NodeFilterType = (nodeConfig: PossibleNodeConfigType) => boolean;
304export declare type NodeNameFilterType = (simpleNodeConfig: SimpleNodeConfig) => boolean;
305export interface SortedNodeNameFilterType {
306 readonly filter: <T>(nodeList: ReadonlyArray<T & SimpleNodeConfig>) => ReadonlyArray<T & SimpleNodeConfig>;
307 readonly supportSort?: boolean;
308}
309export declare type PossibleNodeConfigType = HttpsNodeConfig | HttpNodeConfig | ShadowsocksNodeConfig | ShadowsocksrNodeConfig | SnellNodeConfig | VmessNodeConfig | TrojanNodeConfig | Socks5NodeConfig | TuicNodeConfig;
310export declare type ProxyGroupModifier = (nodeList: ReadonlyArray<PossibleNodeConfigType>, filters: PlainObjectOf<NodeNameFilterType | SortedNodeNameFilterType>) => ReadonlyArray<{
311 readonly name: string;
312 readonly type: 'select' | 'url-test' | 'fallback' | 'load-balance';
313 readonly proxies?: ReadonlyArray<string>;
314 readonly filter?: NodeNameFilterType;
315}>;