surgio 2.14.1 → 2.16.0
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/CHANGELOG.md +80 -50
- package/README.md +2 -5
- package/build/command/generate.js +2 -2
- package/build/command/lint.js +2 -2
- package/build/constant/index.js +6 -2
- package/build/index.d.ts +1 -0
- package/build/index.js +6 -2
- package/build/provider/ClashProvider.js +10 -4
- package/build/provider/CustomProvider.js +14 -5
- package/build/provider/V2rayNSubscribeProvider.js +2 -2
- package/build/types.d.ts +3 -0
- package/build/utils/clash.d.ts +3 -0
- package/build/utils/clash.js +147 -0
- package/build/utils/constant.js +6 -2
- package/build/utils/error-helper.js +2 -2
- package/build/utils/filter.d.ts +1 -0
- package/build/utils/filter.js +27 -3
- package/build/utils/http-client.js +6 -2
- package/build/utils/index.d.ts +4 -13
- package/build/utils/index.js +23 -698
- package/build/utils/loon.js +52 -20
- package/build/utils/quantumult.d.ts +6 -0
- package/build/utils/quantumult.js +255 -0
- package/build/utils/surge.d.ts +6 -0
- package/build/utils/surge.js +365 -0
- package/package.json +4 -3
package/build/utils/index.js
CHANGED
|
@@ -1,9 +1,23 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
2
16
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
17
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
18
|
};
|
|
5
19
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.isRailway = exports.isPkgBundle = exports.isGitLabCI = exports.isGitHubActions = exports.isHeroku = exports.isVercel = exports.isNow = exports.isIp = exports.lowercaseHeaderKeys = exports.
|
|
20
|
+
exports.isRailway = exports.isPkgBundle = exports.isGitLabCI = exports.isGitHubActions = exports.isHeroku = exports.isVercel = exports.isNow = exports.isIp = exports.lowercaseHeaderKeys = exports.formatV2rayConfig = exports.ensureConfigFolder = exports.normalizeClashProxyGroupConfig = exports.decodeStringList = exports.pickAndFormatStringList = exports.toYaml = exports.generateClashProxyGroup = exports.getNodeNames = exports.getShadowsocksNodesJSON = exports.getV2rayNNodes = exports.getShadowsocksrNodes = exports.getShadowsocksNodes = exports.fromBase64 = exports.toBase64 = exports.fromUrlSafeBase64 = exports.toUrlSafeBase64 = exports.getMellowNodes = exports.getShadowsocksJSONConfig = exports.getUrl = exports.getDownloadUrl = void 0;
|
|
7
21
|
const logger_1 = require("@surgio/logger");
|
|
8
22
|
const assert_1 = __importDefault(require("assert"));
|
|
9
23
|
const fs_extra_1 = __importDefault(require("fs-extra"));
|
|
@@ -21,6 +35,9 @@ const constant_1 = require("../constant");
|
|
|
21
35
|
const filter_1 = require("./filter");
|
|
22
36
|
const http_client_1 = __importDefault(require("./http-client"));
|
|
23
37
|
const v2ray_1 = require("./v2ray");
|
|
38
|
+
__exportStar(require("./surge"), exports);
|
|
39
|
+
__exportStar(require("./clash"), exports);
|
|
40
|
+
__exportStar(require("./quantumult"), exports);
|
|
24
41
|
const logger = (0, logger_1.createLogger)({ service: 'surgio:utils' });
|
|
25
42
|
const getDownloadUrl = (baseUrl = '/', artifactName, inline = true, accessToken) => {
|
|
26
43
|
let urlSearchParams;
|
|
@@ -88,465 +105,12 @@ const getShadowsocksJSONConfig = async (url, udpRelay) => {
|
|
|
88
105
|
return await requestConfigFromRemote();
|
|
89
106
|
};
|
|
90
107
|
exports.getShadowsocksJSONConfig = getShadowsocksJSONConfig;
|
|
91
|
-
/**
|
|
92
|
-
* @see https://manual.nssurge.com/policy/proxy.html
|
|
93
|
-
*/
|
|
94
|
-
const getSurgeNodes = function (list, filter) {
|
|
95
|
-
// istanbul ignore next
|
|
96
|
-
if (arguments.length === 2 && typeof filter === 'undefined') {
|
|
97
|
-
throw new Error(constant_1.ERR_INVALID_FILTER);
|
|
98
|
-
}
|
|
99
|
-
const result = (0, exports.applyFilter)(list, filter)
|
|
100
|
-
.map((nodeConfig) => {
|
|
101
|
-
var _a, _b, _c, _d, _e;
|
|
102
|
-
switch (nodeConfig.type) {
|
|
103
|
-
case types_1.NodeTypeEnum.Shadowsocks: {
|
|
104
|
-
const config = nodeConfig;
|
|
105
|
-
if (config.obfs && ['ws', 'wss'].includes(config.obfs)) {
|
|
106
|
-
logger.warn(`不支持为 Surge 生成 v2ray-plugin 的 Shadowsocks 节点,节点 ${nodeConfig.nodeName} 会被省略`);
|
|
107
|
-
return void 0;
|
|
108
|
-
}
|
|
109
|
-
// Native support for Shadowsocks
|
|
110
|
-
if (((_a = nodeConfig === null || nodeConfig === void 0 ? void 0 : nodeConfig.surgeConfig) === null || _a === void 0 ? void 0 : _a.shadowsocksFormat) === 'ss') {
|
|
111
|
-
return [
|
|
112
|
-
config.nodeName,
|
|
113
|
-
[
|
|
114
|
-
'ss',
|
|
115
|
-
config.hostname,
|
|
116
|
-
config.port,
|
|
117
|
-
'encrypt-method=' + config.method,
|
|
118
|
-
...(0, exports.pickAndFormatStringList)(config, [
|
|
119
|
-
'password',
|
|
120
|
-
'udp-relay',
|
|
121
|
-
'obfs',
|
|
122
|
-
'obfs-host',
|
|
123
|
-
'tfo',
|
|
124
|
-
'mptcp',
|
|
125
|
-
]),
|
|
126
|
-
...(typeof config.testUrl === 'string'
|
|
127
|
-
? [`test-url=${config.testUrl}`]
|
|
128
|
-
: []),
|
|
129
|
-
...(typeof config.underlyingProxy === 'string'
|
|
130
|
-
? [`underlying-proxy=${config.underlyingProxy}`]
|
|
131
|
-
: []),
|
|
132
|
-
].join(', '),
|
|
133
|
-
].join(' = ');
|
|
134
|
-
}
|
|
135
|
-
// Using custom format
|
|
136
|
-
return [
|
|
137
|
-
config.nodeName,
|
|
138
|
-
[
|
|
139
|
-
'custom',
|
|
140
|
-
config.hostname,
|
|
141
|
-
config.port,
|
|
142
|
-
config.method,
|
|
143
|
-
config.password,
|
|
144
|
-
'https://raw.githubusercontent.com/ConnersHua/SSEncrypt/master/SSEncrypt.module',
|
|
145
|
-
...(0, exports.pickAndFormatStringList)(config, [
|
|
146
|
-
'udp-relay',
|
|
147
|
-
'obfs',
|
|
148
|
-
'obfs-host',
|
|
149
|
-
'tfo',
|
|
150
|
-
'mptcp',
|
|
151
|
-
]),
|
|
152
|
-
...(typeof config.testUrl === 'string'
|
|
153
|
-
? [`test-url=${config.testUrl}`]
|
|
154
|
-
: []),
|
|
155
|
-
...(typeof config.underlyingProxy === 'string'
|
|
156
|
-
? [`underlying-proxy=${config.underlyingProxy}`]
|
|
157
|
-
: []),
|
|
158
|
-
].join(', '),
|
|
159
|
-
].join(' = ');
|
|
160
|
-
}
|
|
161
|
-
case types_1.NodeTypeEnum.HTTPS: {
|
|
162
|
-
const config = nodeConfig;
|
|
163
|
-
return [
|
|
164
|
-
config.nodeName,
|
|
165
|
-
[
|
|
166
|
-
'https',
|
|
167
|
-
config.hostname,
|
|
168
|
-
config.port,
|
|
169
|
-
config.username,
|
|
170
|
-
config.password,
|
|
171
|
-
...(typeof config.skipCertVerify === 'boolean'
|
|
172
|
-
? [`skip-cert-verify=${config.skipCertVerify}`]
|
|
173
|
-
: []),
|
|
174
|
-
...(typeof config.underlyingProxy === 'string'
|
|
175
|
-
? [`underlying-proxy=${config.underlyingProxy}`]
|
|
176
|
-
: []),
|
|
177
|
-
...(typeof config.testUrl === 'string'
|
|
178
|
-
? [`test-url=${config.testUrl}`]
|
|
179
|
-
: []),
|
|
180
|
-
...(0, exports.pickAndFormatStringList)(config, [
|
|
181
|
-
'sni',
|
|
182
|
-
'tfo',
|
|
183
|
-
'mptcp',
|
|
184
|
-
'tls13',
|
|
185
|
-
]),
|
|
186
|
-
].join(', '),
|
|
187
|
-
].join(' = ');
|
|
188
|
-
}
|
|
189
|
-
case types_1.NodeTypeEnum.HTTP: {
|
|
190
|
-
const config = nodeConfig;
|
|
191
|
-
return [
|
|
192
|
-
config.nodeName,
|
|
193
|
-
[
|
|
194
|
-
'http',
|
|
195
|
-
config.hostname,
|
|
196
|
-
config.port,
|
|
197
|
-
config.username,
|
|
198
|
-
config.password,
|
|
199
|
-
...(typeof config.underlyingProxy === 'string'
|
|
200
|
-
? [`underlying-proxy=${config.underlyingProxy}`]
|
|
201
|
-
: []),
|
|
202
|
-
...(typeof config.testUrl === 'string'
|
|
203
|
-
? [`test-url=${config.testUrl}`]
|
|
204
|
-
: []),
|
|
205
|
-
...(0, exports.pickAndFormatStringList)(config, ['tfo', 'mptcp']),
|
|
206
|
-
].join(', '),
|
|
207
|
-
].join(' = ');
|
|
208
|
-
}
|
|
209
|
-
case types_1.NodeTypeEnum.Snell: {
|
|
210
|
-
const config = nodeConfig;
|
|
211
|
-
return [
|
|
212
|
-
config.nodeName,
|
|
213
|
-
[
|
|
214
|
-
'snell',
|
|
215
|
-
config.hostname,
|
|
216
|
-
config.port,
|
|
217
|
-
...(typeof config.underlyingProxy === 'string'
|
|
218
|
-
? [`underlying-proxy=${config.underlyingProxy}`]
|
|
219
|
-
: []),
|
|
220
|
-
...(typeof config.testUrl === 'string'
|
|
221
|
-
? [`test-url=${config.testUrl}`]
|
|
222
|
-
: []),
|
|
223
|
-
...(0, exports.pickAndFormatStringList)(config, [
|
|
224
|
-
'psk',
|
|
225
|
-
'obfs',
|
|
226
|
-
'obfs-host',
|
|
227
|
-
'version',
|
|
228
|
-
'tfo',
|
|
229
|
-
'mptcp',
|
|
230
|
-
]),
|
|
231
|
-
].join(', '),
|
|
232
|
-
].join(' = ');
|
|
233
|
-
}
|
|
234
|
-
case types_1.NodeTypeEnum.Shadowsocksr: {
|
|
235
|
-
const config = nodeConfig;
|
|
236
|
-
// istanbul ignore next
|
|
237
|
-
if (!config.binPath) {
|
|
238
|
-
throw new Error('请按照文档 http://url.royli.dev/vdGh2 添加 Shadowsocksr 二进制文件路径');
|
|
239
|
-
}
|
|
240
|
-
const args = [
|
|
241
|
-
'-s',
|
|
242
|
-
config.hostname,
|
|
243
|
-
'-p',
|
|
244
|
-
`${config.port}`,
|
|
245
|
-
'-m',
|
|
246
|
-
config.method,
|
|
247
|
-
'-o',
|
|
248
|
-
config.obfs,
|
|
249
|
-
'-O',
|
|
250
|
-
config.protocol,
|
|
251
|
-
'-k',
|
|
252
|
-
config.password,
|
|
253
|
-
'-l',
|
|
254
|
-
`${config.localPort}`,
|
|
255
|
-
'-b',
|
|
256
|
-
'127.0.0.1',
|
|
257
|
-
];
|
|
258
|
-
if (config.protoparam) {
|
|
259
|
-
args.push('-G', config.protoparam);
|
|
260
|
-
}
|
|
261
|
-
if (config.obfsparam) {
|
|
262
|
-
args.push('-g', config.obfsparam);
|
|
263
|
-
}
|
|
264
|
-
const configString = [
|
|
265
|
-
'external',
|
|
266
|
-
`exec = ${JSON.stringify(config.binPath)}`,
|
|
267
|
-
...args.map((arg) => `args = ${JSON.stringify(arg)}`),
|
|
268
|
-
`local-port = ${config.localPort}`,
|
|
269
|
-
];
|
|
270
|
-
if (config.localPort === 0) {
|
|
271
|
-
throw new Error(`为 Surge 生成 SSR 配置时必须为 Provider ${(_b = config.provider) === null || _b === void 0 ? void 0 : _b.name} 设置 startPort,参考 http://url.royli.dev/bWcpe`);
|
|
272
|
-
}
|
|
273
|
-
if (config.hostnameIp && config.hostnameIp.length) {
|
|
274
|
-
configString.push(...config.hostnameIp.map((item) => `addresses = ${item}`));
|
|
275
|
-
}
|
|
276
|
-
if ((0, exports.isIp)(config.hostname)) {
|
|
277
|
-
configString.push(`addresses = ${config.hostname}`);
|
|
278
|
-
}
|
|
279
|
-
return [config.nodeName, configString.join(', ')].join(' = ');
|
|
280
|
-
}
|
|
281
|
-
case types_1.NodeTypeEnum.Vmess: {
|
|
282
|
-
const config = nodeConfig;
|
|
283
|
-
if (((_c = nodeConfig === null || nodeConfig === void 0 ? void 0 : nodeConfig.surgeConfig) === null || _c === void 0 ? void 0 : _c.v2ray) === 'native') {
|
|
284
|
-
// Native support for vmess
|
|
285
|
-
const configList = [
|
|
286
|
-
'vmess',
|
|
287
|
-
config.hostname,
|
|
288
|
-
config.port,
|
|
289
|
-
`username=${config.uuid}`,
|
|
290
|
-
`encrypt-method=${config.method}`,
|
|
291
|
-
];
|
|
292
|
-
function getHeader(wsHeaders) {
|
|
293
|
-
return Object.keys(wsHeaders)
|
|
294
|
-
.map((headerKey) => `${headerKey}:${wsHeaders[headerKey]}`)
|
|
295
|
-
.join('|');
|
|
296
|
-
}
|
|
297
|
-
if (config.network === 'ws') {
|
|
298
|
-
configList.push('ws=true');
|
|
299
|
-
configList.push(`ws-path=${config.path}`);
|
|
300
|
-
configList.push('ws-headers=' +
|
|
301
|
-
JSON.stringify(getHeader(Object.assign({ host: config.host || config.hostname, 'user-agent': constant_1.OBFS_UA }, lodash_1.default.omit(config.wsHeaders, ['host'])))));
|
|
302
|
-
}
|
|
303
|
-
if (config.tls) {
|
|
304
|
-
configList.push('tls=true', ...(typeof config.tls13 === 'boolean'
|
|
305
|
-
? [`tls13=${config.tls13}`]
|
|
306
|
-
: []), ...(typeof config.skipCertVerify === 'boolean'
|
|
307
|
-
? [`skip-cert-verify=${config.skipCertVerify}`]
|
|
308
|
-
: []), ...(config.host ? [`sni=${config.host}`] : []));
|
|
309
|
-
}
|
|
310
|
-
if (typeof config.tfo === 'boolean') {
|
|
311
|
-
configList.push(`tfo=${config.tfo}`);
|
|
312
|
-
}
|
|
313
|
-
if (typeof config.mptcp === 'boolean') {
|
|
314
|
-
configList.push(`mptcp=${config.mptcp}`);
|
|
315
|
-
}
|
|
316
|
-
if (config['underlyingProxy']) {
|
|
317
|
-
configList.push(`underlying-proxy=${config['underlyingProxy']}`);
|
|
318
|
-
}
|
|
319
|
-
if (config['testUrl']) {
|
|
320
|
-
configList.push(`test-url=${config['testUrl']}`);
|
|
321
|
-
}
|
|
322
|
-
if ((_d = nodeConfig === null || nodeConfig === void 0 ? void 0 : nodeConfig.surgeConfig) === null || _d === void 0 ? void 0 : _d.vmessAEAD) {
|
|
323
|
-
configList.push('vmess-aead=true');
|
|
324
|
-
}
|
|
325
|
-
else {
|
|
326
|
-
configList.push('vmess-aead=false');
|
|
327
|
-
}
|
|
328
|
-
return [config.nodeName, configList.join(', ')].join(' = ');
|
|
329
|
-
}
|
|
330
|
-
else {
|
|
331
|
-
// Using external provider
|
|
332
|
-
// istanbul ignore next
|
|
333
|
-
if (!config.binPath) {
|
|
334
|
-
throw new Error('请按照文档 http://url.royli.dev/vdGh2 添加 V2Ray 二进制文件路径');
|
|
335
|
-
}
|
|
336
|
-
if (config.localPort === 0) {
|
|
337
|
-
throw new Error(`为 Surge 生成 Vmess 配置时必须为 Provider ${(_e = config.provider) === null || _e === void 0 ? void 0 : _e.name} 设置 startPort,参考 http://url.royli.dev/bWcpe`);
|
|
338
|
-
}
|
|
339
|
-
const jsonFileName = `v2ray_${config.localPort}_${config.hostname}_${config.port}.json`;
|
|
340
|
-
const jsonFilePath = (0, path_1.join)((0, exports.ensureConfigFolder)(), jsonFileName);
|
|
341
|
-
const jsonFile = (0, exports.formatV2rayConfig)(config.localPort, nodeConfig);
|
|
342
|
-
const args = [
|
|
343
|
-
'--config',
|
|
344
|
-
jsonFilePath.replace(os_1.default.homedir(), '$HOME'),
|
|
345
|
-
];
|
|
346
|
-
const configString = [
|
|
347
|
-
'external',
|
|
348
|
-
`exec = ${JSON.stringify(config.binPath)}`,
|
|
349
|
-
...args.map((arg) => `args = ${JSON.stringify(arg)}`),
|
|
350
|
-
`local-port = ${config.localPort}`,
|
|
351
|
-
];
|
|
352
|
-
if (config.hostnameIp && config.hostnameIp.length) {
|
|
353
|
-
configString.push(...config.hostnameIp.map((item) => `addresses = ${item}`));
|
|
354
|
-
}
|
|
355
|
-
if ((0, exports.isIp)(config.hostname)) {
|
|
356
|
-
configString.push(`addresses = ${config.hostname}`);
|
|
357
|
-
}
|
|
358
|
-
// istanbul ignore next
|
|
359
|
-
if (process.env.NODE_ENV !== 'test') {
|
|
360
|
-
fs_extra_1.default.writeJSONSync(jsonFilePath, jsonFile);
|
|
361
|
-
}
|
|
362
|
-
return [config.nodeName, configString.join(', ')].join(' = ');
|
|
363
|
-
}
|
|
364
|
-
}
|
|
365
|
-
case types_1.NodeTypeEnum.Trojan: {
|
|
366
|
-
const configList = [
|
|
367
|
-
'trojan',
|
|
368
|
-
nodeConfig.hostname,
|
|
369
|
-
`${nodeConfig.port}`,
|
|
370
|
-
`password=${nodeConfig.password}`,
|
|
371
|
-
...(0, exports.pickAndFormatStringList)(nodeConfig, [
|
|
372
|
-
'tfo',
|
|
373
|
-
'mptcp',
|
|
374
|
-
'sni',
|
|
375
|
-
'tls13',
|
|
376
|
-
]),
|
|
377
|
-
...(typeof nodeConfig.testUrl === 'string'
|
|
378
|
-
? [`test-url=${nodeConfig.testUrl}`]
|
|
379
|
-
: []),
|
|
380
|
-
...(typeof nodeConfig.underlyingProxy === 'string'
|
|
381
|
-
? [`underlying-proxy=${nodeConfig.underlyingProxy}`]
|
|
382
|
-
: []),
|
|
383
|
-
...(typeof nodeConfig.skipCertVerify === 'boolean'
|
|
384
|
-
? [`skip-cert-verify=${nodeConfig.skipCertVerify}`]
|
|
385
|
-
: []),
|
|
386
|
-
];
|
|
387
|
-
return [nodeConfig.nodeName, configList.join(', ')].join(' = ');
|
|
388
|
-
}
|
|
389
|
-
case types_1.NodeTypeEnum.Socks5: {
|
|
390
|
-
const config = [
|
|
391
|
-
nodeConfig.tls === true ? 'socks5-tls' : 'socks5',
|
|
392
|
-
nodeConfig.hostname,
|
|
393
|
-
nodeConfig.port,
|
|
394
|
-
...(typeof nodeConfig.underlyingProxy === 'string'
|
|
395
|
-
? [`underlying-proxy=${nodeConfig.underlyingProxy}`]
|
|
396
|
-
: []),
|
|
397
|
-
...(typeof nodeConfig.testUrl === 'string'
|
|
398
|
-
? [`test-url=${nodeConfig.testUrl}`]
|
|
399
|
-
: []),
|
|
400
|
-
...(0, exports.pickAndFormatStringList)(nodeConfig, [
|
|
401
|
-
'username',
|
|
402
|
-
'password',
|
|
403
|
-
'sni',
|
|
404
|
-
'tfo',
|
|
405
|
-
'mptcp',
|
|
406
|
-
'tls13',
|
|
407
|
-
]),
|
|
408
|
-
];
|
|
409
|
-
if (nodeConfig.tls === true) {
|
|
410
|
-
config.push(...(typeof nodeConfig.skipCertVerify === 'boolean'
|
|
411
|
-
? [`skip-cert-verify=${nodeConfig.skipCertVerify}`]
|
|
412
|
-
: []), ...(typeof nodeConfig.clientCert === 'string'
|
|
413
|
-
? [`client-cert=${nodeConfig.clientCert}`]
|
|
414
|
-
: []));
|
|
415
|
-
}
|
|
416
|
-
return [nodeConfig.nodeName, config.join(', ')].join(' = ');
|
|
417
|
-
}
|
|
418
|
-
// istanbul ignore next
|
|
419
|
-
default:
|
|
420
|
-
logger.warn(`不支持为 Surge 生成 ${nodeConfig.type} 的节点,节点 ${nodeConfig.nodeName} 会被省略`);
|
|
421
|
-
return void 0;
|
|
422
|
-
}
|
|
423
|
-
})
|
|
424
|
-
.filter((item) => item !== undefined);
|
|
425
|
-
return result.join('\n');
|
|
426
|
-
};
|
|
427
|
-
exports.getSurgeNodes = getSurgeNodes;
|
|
428
|
-
const getClashNodes = function (list, filter) {
|
|
429
|
-
// istanbul ignore next
|
|
430
|
-
if (arguments.length === 2 && typeof filter === 'undefined') {
|
|
431
|
-
throw new Error(constant_1.ERR_INVALID_FILTER);
|
|
432
|
-
}
|
|
433
|
-
return (0, exports.applyFilter)(list, filter)
|
|
434
|
-
.map((nodeConfig) => {
|
|
435
|
-
var _a, _b, _c, _d, _e;
|
|
436
|
-
// istanbul ignore next
|
|
437
|
-
if (nodeConfig.enable === false) {
|
|
438
|
-
return null;
|
|
439
|
-
}
|
|
440
|
-
switch (nodeConfig.type) {
|
|
441
|
-
case types_1.NodeTypeEnum.Shadowsocks:
|
|
442
|
-
return Object.assign(Object.assign({ type: 'ss', cipher: nodeConfig.method, name: nodeConfig.nodeName, password: nodeConfig.password, port: nodeConfig.port, server: nodeConfig.hostname, udp: nodeConfig['udp-relay'] === true }, (nodeConfig.obfs && ['tls', 'http'].includes(nodeConfig.obfs)
|
|
443
|
-
? {
|
|
444
|
-
plugin: 'obfs',
|
|
445
|
-
'plugin-opts': {
|
|
446
|
-
mode: nodeConfig.obfs,
|
|
447
|
-
host: nodeConfig['obfs-host'],
|
|
448
|
-
},
|
|
449
|
-
}
|
|
450
|
-
: null)), (nodeConfig.obfs && ['ws', 'wss'].includes(nodeConfig.obfs)
|
|
451
|
-
? {
|
|
452
|
-
plugin: 'v2ray-plugin',
|
|
453
|
-
'plugin-opts': Object.assign(Object.assign({ mode: 'websocket', tls: nodeConfig.obfs === 'wss' }, (typeof nodeConfig.skipCertVerify === 'boolean' &&
|
|
454
|
-
nodeConfig.obfs === 'wss'
|
|
455
|
-
? {
|
|
456
|
-
'skip-cert-verify': nodeConfig.skipCertVerify,
|
|
457
|
-
}
|
|
458
|
-
: null)), { host: nodeConfig['obfs-host'], path: nodeConfig['obfs-uri'] || '/', mux: typeof nodeConfig.mux === 'boolean'
|
|
459
|
-
? nodeConfig.mux
|
|
460
|
-
: false, headers: lodash_1.default.omit(nodeConfig.wsHeaders || {}, ['host']) }),
|
|
461
|
-
}
|
|
462
|
-
: null));
|
|
463
|
-
case types_1.NodeTypeEnum.Vmess:
|
|
464
|
-
return Object.assign(Object.assign(Object.assign(Object.assign({ type: 'vmess', cipher: nodeConfig.method, name: nodeConfig.nodeName, server: nodeConfig.hostname, port: nodeConfig.port, udp: nodeConfig['udp-relay'] === true, uuid: nodeConfig.uuid, alterId: nodeConfig.alterId }, (nodeConfig.network === 'tcp'
|
|
465
|
-
? null
|
|
466
|
-
: {
|
|
467
|
-
network: nodeConfig.network,
|
|
468
|
-
})), { tls: nodeConfig.tls }), (typeof nodeConfig.skipCertVerify === 'boolean' && nodeConfig.tls
|
|
469
|
-
? {
|
|
470
|
-
'skip-cert-verify': nodeConfig.skipCertVerify,
|
|
471
|
-
}
|
|
472
|
-
: null)), (nodeConfig.network === 'ws'
|
|
473
|
-
? {
|
|
474
|
-
'ws-opts': {
|
|
475
|
-
path: nodeConfig.path,
|
|
476
|
-
headers: Object.assign(Object.assign({}, (nodeConfig.host ? { host: nodeConfig.host } : null)), lodash_1.default.omit(nodeConfig.wsHeaders, ['host'])),
|
|
477
|
-
},
|
|
478
|
-
}
|
|
479
|
-
: null));
|
|
480
|
-
case types_1.NodeTypeEnum.Shadowsocksr: {
|
|
481
|
-
const ssrFormat = (_a = nodeConfig === null || nodeConfig === void 0 ? void 0 : nodeConfig.clashConfig) === null || _a === void 0 ? void 0 : _a.ssrFormat;
|
|
482
|
-
return Object.assign(Object.assign({ type: 'ssr', name: nodeConfig.nodeName, server: nodeConfig.hostname, port: nodeConfig.port, password: nodeConfig.password, obfs: nodeConfig.obfs, protocol: nodeConfig.protocol, cipher: nodeConfig.method }, (ssrFormat === 'native'
|
|
483
|
-
? {
|
|
484
|
-
'obfs-param': (_b = nodeConfig.obfsparam) !== null && _b !== void 0 ? _b : '',
|
|
485
|
-
'protocol-param': (_c = nodeConfig.protoparam) !== null && _c !== void 0 ? _c : '',
|
|
486
|
-
}
|
|
487
|
-
: {
|
|
488
|
-
obfsparam: (_d = nodeConfig.obfsparam) !== null && _d !== void 0 ? _d : '',
|
|
489
|
-
protocolparam: (_e = nodeConfig.protoparam) !== null && _e !== void 0 ? _e : '',
|
|
490
|
-
})), { udp: nodeConfig['udp-relay'] === true });
|
|
491
|
-
}
|
|
492
|
-
case types_1.NodeTypeEnum.Snell:
|
|
493
|
-
return Object.assign({ type: 'snell', name: nodeConfig.nodeName, server: nodeConfig.hostname, port: nodeConfig.port, psk: nodeConfig.psk, 'obfs-opts': Object.assign({ mode: nodeConfig.obfs }, (nodeConfig['obfs-host']
|
|
494
|
-
? {
|
|
495
|
-
host: nodeConfig['obfs-host'],
|
|
496
|
-
}
|
|
497
|
-
: null)) }, (nodeConfig.version
|
|
498
|
-
? {
|
|
499
|
-
version: nodeConfig.version,
|
|
500
|
-
}
|
|
501
|
-
: null));
|
|
502
|
-
case types_1.NodeTypeEnum.HTTPS:
|
|
503
|
-
return {
|
|
504
|
-
type: 'http',
|
|
505
|
-
name: nodeConfig.nodeName,
|
|
506
|
-
server: nodeConfig.hostname,
|
|
507
|
-
port: nodeConfig.port,
|
|
508
|
-
username: nodeConfig.username /* istanbul ignore next */ || '',
|
|
509
|
-
password: nodeConfig.password /* istanbul ignore next */ || '',
|
|
510
|
-
tls: true,
|
|
511
|
-
'skip-cert-verify': nodeConfig.skipCertVerify === true,
|
|
512
|
-
};
|
|
513
|
-
case types_1.NodeTypeEnum.HTTP:
|
|
514
|
-
return {
|
|
515
|
-
type: 'http',
|
|
516
|
-
name: nodeConfig.nodeName,
|
|
517
|
-
server: nodeConfig.hostname,
|
|
518
|
-
port: nodeConfig.port,
|
|
519
|
-
username: nodeConfig.username /* istanbul ignore next */ || '',
|
|
520
|
-
password: nodeConfig.password /* istanbul ignore next */ || '',
|
|
521
|
-
};
|
|
522
|
-
case types_1.NodeTypeEnum.Trojan:
|
|
523
|
-
return Object.assign(Object.assign(Object.assign(Object.assign({ type: 'trojan', name: nodeConfig.nodeName, server: nodeConfig.hostname, port: nodeConfig.port, password: nodeConfig.password }, (nodeConfig['udp-relay']
|
|
524
|
-
? { udp: nodeConfig['udp-relay'] }
|
|
525
|
-
: null)), (nodeConfig.alpn ? { alpn: nodeConfig.alpn } : null)), (nodeConfig.sni ? { sni: nodeConfig.sni } : null)), { 'skip-cert-verify': nodeConfig.skipCertVerify === true });
|
|
526
|
-
case types_1.NodeTypeEnum.Socks5: {
|
|
527
|
-
return Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({ type: 'socks5', name: nodeConfig.nodeName, server: nodeConfig.hostname, port: nodeConfig.port }, (nodeConfig.username ? { username: nodeConfig.username } : null)), (nodeConfig.password ? { password: nodeConfig.password } : null)), (typeof nodeConfig.tls === 'boolean'
|
|
528
|
-
? { tls: nodeConfig.tls }
|
|
529
|
-
: null)), (typeof nodeConfig.skipCertVerify === 'boolean'
|
|
530
|
-
? { 'skip-cert-verify': nodeConfig.skipCertVerify }
|
|
531
|
-
: null)), (typeof nodeConfig.udpRelay === 'boolean'
|
|
532
|
-
? { udp: nodeConfig.udpRelay }
|
|
533
|
-
: null));
|
|
534
|
-
}
|
|
535
|
-
// istanbul ignore next
|
|
536
|
-
default:
|
|
537
|
-
logger.warn(`不支持为 Clash 生成 ${nodeConfig.type} 的节点,节点 ${nodeConfig.nodeName} 会被省略`);
|
|
538
|
-
return null;
|
|
539
|
-
}
|
|
540
|
-
})
|
|
541
|
-
.filter((item) => item !== null);
|
|
542
|
-
};
|
|
543
|
-
exports.getClashNodes = getClashNodes;
|
|
544
108
|
const getMellowNodes = function (list, filter) {
|
|
545
109
|
// istanbul ignore next
|
|
546
110
|
if (arguments.length === 2 && typeof filter === 'undefined') {
|
|
547
111
|
throw new Error(constant_1.ERR_INVALID_FILTER);
|
|
548
112
|
}
|
|
549
|
-
const result = (0,
|
|
113
|
+
const result = (0, filter_1.applyFilter)(list, filter)
|
|
550
114
|
.map((nodeConfig) => {
|
|
551
115
|
switch (nodeConfig.type) {
|
|
552
116
|
case types_1.NodeTypeEnum.Vmess: {
|
|
@@ -710,212 +274,6 @@ const getV2rayNNodes = (list) => {
|
|
|
710
274
|
return result.join('\n');
|
|
711
275
|
};
|
|
712
276
|
exports.getV2rayNNodes = getV2rayNNodes;
|
|
713
|
-
const getQuantumultNodes = function (list, groupName = 'Surgio', filter) {
|
|
714
|
-
// istanbul ignore next
|
|
715
|
-
if (arguments.length === 3 && typeof filter === 'undefined') {
|
|
716
|
-
throw new Error(constant_1.ERR_INVALID_FILTER);
|
|
717
|
-
}
|
|
718
|
-
function getHeader(wsHeaders) {
|
|
719
|
-
return Object.keys(wsHeaders)
|
|
720
|
-
.map((headerKey) => `${headerKey}:${wsHeaders[headerKey]}`)
|
|
721
|
-
.join('[Rr][Nn]');
|
|
722
|
-
}
|
|
723
|
-
const result = (0, exports.applyFilter)(list, filter)
|
|
724
|
-
.map((nodeConfig) => {
|
|
725
|
-
switch (nodeConfig.type) {
|
|
726
|
-
case types_1.NodeTypeEnum.Vmess: {
|
|
727
|
-
const config = [
|
|
728
|
-
'vmess',
|
|
729
|
-
nodeConfig.hostname,
|
|
730
|
-
nodeConfig.port,
|
|
731
|
-
nodeConfig.method === 'auto'
|
|
732
|
-
? 'chacha20-ietf-poly1305'
|
|
733
|
-
: nodeConfig.method,
|
|
734
|
-
JSON.stringify(nodeConfig.uuid),
|
|
735
|
-
nodeConfig.alterId,
|
|
736
|
-
`group=${groupName}`,
|
|
737
|
-
`over-tls=${nodeConfig.tls === true ? 'true' : 'false'}`,
|
|
738
|
-
`certificate=1`,
|
|
739
|
-
`obfs=${nodeConfig.network}`,
|
|
740
|
-
`obfs-path=${JSON.stringify(nodeConfig.path || '/')}`,
|
|
741
|
-
`obfs-header=${JSON.stringify(getHeader(Object.assign({ host: nodeConfig.host || nodeConfig.hostname, 'user-agent': constant_1.OBFS_UA }, lodash_1.default.omit(nodeConfig.wsHeaders, ['host']))))}`,
|
|
742
|
-
]
|
|
743
|
-
.filter((value) => !!value)
|
|
744
|
-
.join(',');
|
|
745
|
-
return ('vmess://' + (0, exports.toBase64)([nodeConfig.nodeName, config].join(' = ')));
|
|
746
|
-
}
|
|
747
|
-
case types_1.NodeTypeEnum.Shadowsocks: {
|
|
748
|
-
return (0, exports.getShadowsocksNodes)([nodeConfig], groupName);
|
|
749
|
-
}
|
|
750
|
-
case types_1.NodeTypeEnum.Shadowsocksr:
|
|
751
|
-
return (0, exports.getShadowsocksrNodes)([nodeConfig], groupName);
|
|
752
|
-
case types_1.NodeTypeEnum.HTTPS: {
|
|
753
|
-
const config = [
|
|
754
|
-
nodeConfig.nodeName,
|
|
755
|
-
[
|
|
756
|
-
'http',
|
|
757
|
-
`upstream-proxy-address=${nodeConfig.hostname}`,
|
|
758
|
-
`upstream-proxy-port=${nodeConfig.port}`,
|
|
759
|
-
'upstream-proxy-auth=true',
|
|
760
|
-
`upstream-proxy-username=${nodeConfig.username}`,
|
|
761
|
-
`upstream-proxy-password=${nodeConfig.password}`,
|
|
762
|
-
'over-tls=true',
|
|
763
|
-
'certificate=1',
|
|
764
|
-
].join(', '),
|
|
765
|
-
].join(' = ');
|
|
766
|
-
return 'http://' + (0, exports.toBase64)(config);
|
|
767
|
-
}
|
|
768
|
-
// istanbul ignore next
|
|
769
|
-
default:
|
|
770
|
-
logger.warn(`不支持为 Quantumult 生成 ${nodeConfig.type} 的节点,节点 ${nodeConfig.nodeName} 会被省略`);
|
|
771
|
-
return void 0;
|
|
772
|
-
}
|
|
773
|
-
})
|
|
774
|
-
.filter((item) => item !== undefined);
|
|
775
|
-
return result.join('\n');
|
|
776
|
-
};
|
|
777
|
-
exports.getQuantumultNodes = getQuantumultNodes;
|
|
778
|
-
/**
|
|
779
|
-
* @see https://github.com/crossutility/Quantumult-X/blob/master/sample.conf
|
|
780
|
-
*/
|
|
781
|
-
const getQuantumultXNodes = function (list, filter) {
|
|
782
|
-
// istanbul ignore next
|
|
783
|
-
if (arguments.length === 2 && typeof filter === 'undefined') {
|
|
784
|
-
throw new Error(constant_1.ERR_INVALID_FILTER);
|
|
785
|
-
}
|
|
786
|
-
const result = (0, exports.applyFilter)(list, filter)
|
|
787
|
-
.map((nodeConfig) => {
|
|
788
|
-
var _a;
|
|
789
|
-
switch (nodeConfig.type) {
|
|
790
|
-
case types_1.NodeTypeEnum.Vmess: {
|
|
791
|
-
const config = [
|
|
792
|
-
`${nodeConfig.hostname}:${nodeConfig.port}`,
|
|
793
|
-
// method 为 auto 时 qx 会无法识别
|
|
794
|
-
nodeConfig.method === 'auto'
|
|
795
|
-
? `method=chacha20-ietf-poly1305`
|
|
796
|
-
: `method=${nodeConfig.method}`,
|
|
797
|
-
`password=${nodeConfig.uuid}`,
|
|
798
|
-
...(nodeConfig['udp-relay'] ? ['udp-relay=true'] : []),
|
|
799
|
-
...(nodeConfig.tfo ? ['fast-open=true'] : []),
|
|
800
|
-
...(((_a = nodeConfig.quantumultXConfig) === null || _a === void 0 ? void 0 : _a.vmessAEAD)
|
|
801
|
-
? ['aead=true']
|
|
802
|
-
: ['aead=false']),
|
|
803
|
-
];
|
|
804
|
-
switch (nodeConfig.network) {
|
|
805
|
-
case 'ws':
|
|
806
|
-
if (nodeConfig.tls) {
|
|
807
|
-
config.push(`obfs=wss`);
|
|
808
|
-
}
|
|
809
|
-
else {
|
|
810
|
-
config.push(`obfs=ws`);
|
|
811
|
-
}
|
|
812
|
-
config.push(`obfs-uri=${nodeConfig.path || '/'}`);
|
|
813
|
-
config.push(`obfs-host=${nodeConfig.host || nodeConfig.hostname}`);
|
|
814
|
-
// istanbul ignore next
|
|
815
|
-
if (nodeConfig.tls13) {
|
|
816
|
-
config.push(`tls13=true`);
|
|
817
|
-
}
|
|
818
|
-
break;
|
|
819
|
-
case 'tcp':
|
|
820
|
-
if (nodeConfig.tls) {
|
|
821
|
-
config.push(`obfs=over-tls`);
|
|
822
|
-
}
|
|
823
|
-
// istanbul ignore next
|
|
824
|
-
if (nodeConfig.tls13) {
|
|
825
|
-
config.push(`tls13=true`);
|
|
826
|
-
}
|
|
827
|
-
break;
|
|
828
|
-
default:
|
|
829
|
-
// do nothing
|
|
830
|
-
}
|
|
831
|
-
config.push(`tag=${nodeConfig.nodeName}`);
|
|
832
|
-
// istanbul ignore next
|
|
833
|
-
if (nodeConfig.wsHeaders &&
|
|
834
|
-
Object.keys(nodeConfig.wsHeaders).length > 1) {
|
|
835
|
-
logger.warn(`Quantumult X 不支持自定义额外的 Header 字段,节点 ${nodeConfig.nodeName} 可能不可用`);
|
|
836
|
-
}
|
|
837
|
-
return `vmess=${config.join(', ')}`;
|
|
838
|
-
}
|
|
839
|
-
case types_1.NodeTypeEnum.Shadowsocks: {
|
|
840
|
-
const config = [
|
|
841
|
-
`${nodeConfig.hostname}:${nodeConfig.port}`,
|
|
842
|
-
...(0, exports.pickAndFormatStringList)(nodeConfig, ['method', 'password']),
|
|
843
|
-
...(nodeConfig.obfs && ['http', 'tls'].includes(nodeConfig.obfs)
|
|
844
|
-
? [
|
|
845
|
-
`obfs=${nodeConfig.obfs}`,
|
|
846
|
-
`obfs-host=${nodeConfig['obfs-host']}`,
|
|
847
|
-
]
|
|
848
|
-
: []),
|
|
849
|
-
...(nodeConfig.obfs && ['ws', 'wss'].includes(nodeConfig.obfs)
|
|
850
|
-
? [
|
|
851
|
-
`obfs=${nodeConfig.obfs}`,
|
|
852
|
-
`obfs-host=${nodeConfig['obfs-host'] || nodeConfig.hostname}`,
|
|
853
|
-
`obfs-uri=${nodeConfig['obfs-uri'] || '/'}`,
|
|
854
|
-
]
|
|
855
|
-
: []),
|
|
856
|
-
...(nodeConfig['udp-relay'] ? [`udp-relay=true`] : []),
|
|
857
|
-
...(nodeConfig.tfo ? [`fast-open=${nodeConfig.tfo}`] : []),
|
|
858
|
-
...(nodeConfig.tls13 ? [`tls13=${nodeConfig.tls13}`] : []),
|
|
859
|
-
`tag=${nodeConfig.nodeName}`,
|
|
860
|
-
].join(', ');
|
|
861
|
-
// istanbul ignore next
|
|
862
|
-
if (nodeConfig.wsHeaders &&
|
|
863
|
-
Object.keys(nodeConfig.wsHeaders).length > 1) {
|
|
864
|
-
logger.warn(`Quantumult X 不支持自定义额外的 Header 字段,节点 ${nodeConfig.nodeName} 可能不可用`);
|
|
865
|
-
}
|
|
866
|
-
return `shadowsocks=${config}`;
|
|
867
|
-
}
|
|
868
|
-
case types_1.NodeTypeEnum.Shadowsocksr: {
|
|
869
|
-
const config = [
|
|
870
|
-
`${nodeConfig.hostname}:${nodeConfig.port}`,
|
|
871
|
-
...(0, exports.pickAndFormatStringList)(nodeConfig, ['method', 'password']),
|
|
872
|
-
`ssr-protocol=${nodeConfig.protocol}`,
|
|
873
|
-
`ssr-protocol-param=${nodeConfig.protoparam}`,
|
|
874
|
-
`obfs=${nodeConfig.obfs}`,
|
|
875
|
-
`obfs-host=${nodeConfig.obfsparam}`,
|
|
876
|
-
...(nodeConfig['udp-relay'] ? [`udp-relay=true`] : []),
|
|
877
|
-
...(nodeConfig.tfo ? [`fast-open=${nodeConfig.tfo}`] : []),
|
|
878
|
-
`tag=${nodeConfig.nodeName}`,
|
|
879
|
-
].join(', ');
|
|
880
|
-
return `shadowsocks=${config}`;
|
|
881
|
-
}
|
|
882
|
-
case types_1.NodeTypeEnum.HTTP:
|
|
883
|
-
case types_1.NodeTypeEnum.HTTPS: {
|
|
884
|
-
const config = [
|
|
885
|
-
`${nodeConfig.hostname}:${nodeConfig.port}`,
|
|
886
|
-
...(0, exports.pickAndFormatStringList)(nodeConfig, ['username', 'password']),
|
|
887
|
-
...(nodeConfig.tfo ? [`fast-open=${nodeConfig.tfo}`] : []),
|
|
888
|
-
];
|
|
889
|
-
if (nodeConfig.type === types_1.NodeTypeEnum.HTTPS) {
|
|
890
|
-
config.push('over-tls=true', `tls-verification=${nodeConfig.skipCertVerify !== true}`, ...(nodeConfig.tls13 ? [`tls13=${nodeConfig.tls13}`] : []));
|
|
891
|
-
}
|
|
892
|
-
config.push(`tag=${nodeConfig.nodeName}`);
|
|
893
|
-
return `http=${config.join(', ')}`;
|
|
894
|
-
}
|
|
895
|
-
case types_1.NodeTypeEnum.Trojan: {
|
|
896
|
-
const config = [
|
|
897
|
-
`${nodeConfig.hostname}:${nodeConfig.port}`,
|
|
898
|
-
...(0, exports.pickAndFormatStringList)(nodeConfig, ['password']),
|
|
899
|
-
'over-tls=true',
|
|
900
|
-
`tls-verification=${nodeConfig.skipCertVerify !== true}`,
|
|
901
|
-
...(nodeConfig.sni ? [`tls-host=${nodeConfig.sni}`] : []),
|
|
902
|
-
...(nodeConfig.tfo ? [`fast-open=${nodeConfig.tfo}`] : []),
|
|
903
|
-
...(nodeConfig['udp-relay'] ? [`udp-relay=true`] : []),
|
|
904
|
-
...(nodeConfig.tls13 ? [`tls13=${nodeConfig.tls13}`] : []),
|
|
905
|
-
`tag=${nodeConfig.nodeName}`,
|
|
906
|
-
];
|
|
907
|
-
return `trojan=${config.join(', ')}`;
|
|
908
|
-
}
|
|
909
|
-
// istanbul ignore next
|
|
910
|
-
default:
|
|
911
|
-
logger.warn(`不支持为 QuantumultX 生成 ${nodeConfig.type} 的节点,节点 ${nodeConfig.nodeName} 会被省略`);
|
|
912
|
-
return void 0;
|
|
913
|
-
}
|
|
914
|
-
})
|
|
915
|
-
.filter((item) => item !== undefined);
|
|
916
|
-
return result.join('\n');
|
|
917
|
-
};
|
|
918
|
-
exports.getQuantumultXNodes = getQuantumultXNodes;
|
|
919
277
|
// istanbul ignore next
|
|
920
278
|
const getShadowsocksNodesJSON = (list) => {
|
|
921
279
|
const nodes = list
|
|
@@ -949,29 +307,16 @@ const getNodeNames = function (list, filter, separator) {
|
|
|
949
307
|
if (arguments.length === 2 && typeof filter === 'undefined') {
|
|
950
308
|
throw new Error(constant_1.ERR_INVALID_FILTER);
|
|
951
309
|
}
|
|
952
|
-
return (0,
|
|
310
|
+
return (0, filter_1.applyFilter)(list, filter)
|
|
953
311
|
.map((item) => item.nodeName)
|
|
954
312
|
.join(separator || ', ');
|
|
955
313
|
};
|
|
956
314
|
exports.getNodeNames = getNodeNames;
|
|
957
|
-
const getClashNodeNames = function (list, filter, existingProxies) {
|
|
958
|
-
// istanbul ignore next
|
|
959
|
-
if (arguments.length === 2 && typeof filter === 'undefined') {
|
|
960
|
-
throw new Error(constant_1.ERR_INVALID_FILTER);
|
|
961
|
-
}
|
|
962
|
-
let result = [];
|
|
963
|
-
if (existingProxies) {
|
|
964
|
-
result = result.concat(existingProxies);
|
|
965
|
-
}
|
|
966
|
-
result = result.concat((0, exports.applyFilter)(list, filter).map((item) => item.nodeName));
|
|
967
|
-
return result;
|
|
968
|
-
};
|
|
969
|
-
exports.getClashNodeNames = getClashNodeNames;
|
|
970
315
|
const generateClashProxyGroup = (ruleName, ruleType, nodeNameList, options) => {
|
|
971
316
|
let proxies;
|
|
972
317
|
if (options.existingProxies) {
|
|
973
318
|
if (options.filter) {
|
|
974
|
-
const nodes = (0,
|
|
319
|
+
const nodes = (0, filter_1.applyFilter)(nodeNameList, options.filter);
|
|
975
320
|
proxies = [].concat(options.existingProxies, nodes.map((item) => item.nodeName));
|
|
976
321
|
}
|
|
977
322
|
else {
|
|
@@ -979,7 +324,7 @@ const generateClashProxyGroup = (ruleName, ruleType, nodeNameList, options) => {
|
|
|
979
324
|
}
|
|
980
325
|
}
|
|
981
326
|
else {
|
|
982
|
-
const nodes = (0,
|
|
327
|
+
const nodes = (0, filter_1.applyFilter)(nodeNameList, options.filter);
|
|
983
328
|
proxies = nodes.map((item) => item.nodeName);
|
|
984
329
|
}
|
|
985
330
|
return Object.assign({ type: ruleType, name: ruleName, proxies }, (['url-test', 'fallback', 'load-balance'].includes(ruleType)
|
|
@@ -1118,26 +463,6 @@ const formatV2rayConfig = (localPort, nodeConfig) => {
|
|
|
1118
463
|
return config;
|
|
1119
464
|
};
|
|
1120
465
|
exports.formatV2rayConfig = formatV2rayConfig;
|
|
1121
|
-
const applyFilter = (nodeList, filter) => {
|
|
1122
|
-
// istanbul ignore next
|
|
1123
|
-
if (filter && !(0, filter_1.validateFilter)(filter)) {
|
|
1124
|
-
throw new Error(`使用了无效的过滤器 ${filter}`);
|
|
1125
|
-
}
|
|
1126
|
-
let nodes = nodeList.filter((item) => {
|
|
1127
|
-
const result = item.enable !== false;
|
|
1128
|
-
if (filter && typeof filter === 'function') {
|
|
1129
|
-
return filter(item) && result;
|
|
1130
|
-
}
|
|
1131
|
-
return result;
|
|
1132
|
-
});
|
|
1133
|
-
if (filter &&
|
|
1134
|
-
typeof filter === 'object' &&
|
|
1135
|
-
typeof filter.filter === 'function') {
|
|
1136
|
-
nodes = filter.filter(nodes);
|
|
1137
|
-
}
|
|
1138
|
-
return nodes;
|
|
1139
|
-
};
|
|
1140
|
-
exports.applyFilter = applyFilter;
|
|
1141
466
|
const lowercaseHeaderKeys = (headers) => {
|
|
1142
467
|
const wsHeaders = {};
|
|
1143
468
|
Object.keys(headers).forEach((key) => {
|
|
@@ -1171,4 +496,4 @@ exports.isPkgBundle = isPkgBundle;
|
|
|
1171
496
|
// istanbul ignore next
|
|
1172
497
|
const isRailway = () => typeof process.env.RAILWAY_STATIC_URL !== 'undefined';
|
|
1173
498
|
exports.isRailway = isRailway;
|
|
1174
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9saWIvdXRpbHMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsMkNBQThDO0FBQzlDLG9EQUE0QjtBQUM1Qix3REFBMEI7QUFDMUIsb0RBQXVCO0FBQ3ZCLDRDQUFvQjtBQUNwQiwrQkFBNEI7QUFDNUIsZ0VBQXVDO0FBRXZDLDZCQUEyQztBQUMzQyxvRUFBMkM7QUFDM0MsZ0RBQXdCO0FBQ3hCLDhDQUFzQjtBQUV0QixvQ0Fla0I7QUFDbEIsbUNBQXNDO0FBQ3RDLDBDQUEwRDtBQUMxRCxxQ0FBMEM7QUFDMUMsZ0VBQXVDO0FBQ3ZDLG1DQUF5QztBQUV6QyxNQUFNLE1BQU0sR0FBRyxJQUFBLHFCQUFZLEVBQUMsRUFBRSxPQUFPLEVBQUUsY0FBYyxFQUFFLENBQUMsQ0FBQztBQUVsRCxNQUFNLGNBQWMsR0FBRyxDQUM1QixPQUFPLEdBQUcsR0FBRyxFQUNiLFlBQW9CLEVBQ3BCLE1BQU0sR0FBRyxJQUFJLEVBQ2IsV0FBb0IsRUFDWixFQUFFO0lBQ1YsSUFBSSxlQUFnQyxDQUFDO0lBQ3JDLElBQUksSUFBWSxDQUFDO0lBRWpCLElBQUksWUFBWSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRTtRQUM5QixlQUFlLEdBQUcsSUFBSSxxQkFBZSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNsRSxJQUFJLEdBQUcsWUFBWSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztLQUNuQztTQUFNO1FBQ0wsZUFBZSxHQUFHLElBQUkscUJBQWUsRUFBRSxDQUFDO1FBQ3hDLElBQUksR0FBRyxZQUFZLENBQUM7S0FDckI7SUFFRCxJQUFJLFdBQVcsRUFBRTtRQUNmLGVBQWUsQ0FBQyxHQUFHLENBQUMsY0FBYyxFQUFFLFdBQVcsQ0FBQyxDQUFDO0tBQ2xEO0lB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
|
|
499
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9saWIvdXRpbHMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSwyQ0FBOEM7QUFDOUMsb0RBQTRCO0FBQzVCLHdEQUEwQjtBQUMxQixvREFBdUI7QUFDdkIsNENBQW9CO0FBQ3BCLCtCQUE0QjtBQUM1QixnRUFBdUM7QUFFdkMsNkJBQTJDO0FBQzNDLG9FQUEyQztBQUMzQyxnREFBd0I7QUFDeEIsOENBQXNCO0FBRXRCLG9DQVlrQjtBQUNsQixtQ0FBc0M7QUFDdEMsMENBQTBEO0FBQzFELHFDQUF1RDtBQUN2RCxnRUFBdUM7QUFDdkMsbUNBQXlDO0FBRXpDLDBDQUF3QjtBQUN4QiwwQ0FBd0I7QUFDeEIsK0NBQTZCO0FBRTdCLE1BQU0sTUFBTSxHQUFHLElBQUEscUJBQVksRUFBQyxFQUFFLE9BQU8sRUFBRSxjQUFjLEVBQUUsQ0FBQyxDQUFDO0FBRWxELE1BQU0sY0FBYyxHQUFHLENBQzVCLE9BQU8sR0FBRyxHQUFHLEVBQ2IsWUFBb0IsRUFDcEIsTUFBTSxHQUFHLElBQUksRUFDYixXQUFvQixFQUNaLEVBQUU7SUFDVixJQUFJLGVBQWdDLENBQUM7SUFDckMsSUFBSSxJQUFZLENBQUM7SUFFakIsSUFBSSxZQUFZLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFO1FBQzlCLGVBQWUsR0FBRyxJQUFJLHFCQUFlLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2xFLElBQUksR0FBRyxZQUFZLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0tBQ25DO1NBQU07UUFDTCxlQUFlLEdBQUcsSUFBSSxxQkFBZSxFQUFFLENBQUM7UUFDeEMsSUFBSSxHQUFHLFlBQVksQ0FBQztLQUNyQjtJQUVELElBQUksV0FBVyxFQUFFO1FBQ2Ys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
|