surgio 3.11.3 → 3.12.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/package.json +48 -50
- package/build/base-command.d.ts +0 -20
- package/build/base-command.js +0 -75
- package/build/base-command.js.map +0 -1
- package/build/commands/check.d.ts +0 -10
- package/build/commands/check.js +0 -97
- package/build/commands/check.js.map +0 -1
- package/build/commands/clean-cache.d.ts +0 -6
- package/build/commands/clean-cache.js +0 -28
- package/build/commands/clean-cache.js.map +0 -1
- package/build/commands/doctor.d.ts +0 -6
- package/build/commands/doctor.js +0 -20
- package/build/commands/doctor.js.map +0 -1
- package/build/commands/generate.d.ts +0 -7
- package/build/commands/generate.js +0 -100
- package/build/commands/generate.js.map +0 -1
- package/build/commands/lint.d.ts +0 -6
- package/build/commands/lint.js +0 -37
- package/build/commands/lint.js.map +0 -1
- package/build/commands/new.d.ts +0 -6
- package/build/commands/new.js +0 -37
- package/build/commands/new.js.map +0 -1
- package/build/commands/subscriptions.d.ts +0 -7
- package/build/commands/subscriptions.js +0 -105
- package/build/commands/subscriptions.js.map +0 -1
- package/build/commands/upload.d.ts +0 -6
- package/build/commands/upload.js +0 -91
- package/build/commands/upload.js.map +0 -1
- package/build/config.d.ts +0 -6
- package/build/config.js +0 -156
- package/build/config.js.map +0 -1
- package/build/configurables.d.ts +0 -89
- package/build/configurables.js +0 -52
- package/build/configurables.js.map +0 -1
- package/build/constant/constant.d.ts +0 -36
- package/build/constant/constant.js +0 -160
- package/build/constant/constant.js.map +0 -1
- package/build/constant/env.d.ts +0 -9
- package/build/constant/env.js +0 -13
- package/build/constant/env.js.map +0 -1
- package/build/constant/error.d.ts +0 -1
- package/build/constant/error.js +0 -5
- package/build/constant/error.js.map +0 -1
- package/build/constant/index.d.ts +0 -3
- package/build/constant/index.js +0 -20
- package/build/constant/index.js.map +0 -1
- package/build/filters/classes.d.ts +0 -13
- package/build/filters/classes.js +0 -42
- package/build/filters/classes.js.map +0 -1
- package/build/filters/filters.d.ts +0 -25
- package/build/filters/filters.js +0 -107
- package/build/filters/filters.js.map +0 -1
- package/build/filters/index.d.ts +0 -2
- package/build/filters/index.js +0 -42
- package/build/filters/index.js.map +0 -1
- package/build/filters/utils.d.ts +0 -16
- package/build/filters/utils.js +0 -159
- package/build/filters/utils.js.map +0 -1
- package/build/generator/artifact.d.ts +0 -102
- package/build/generator/artifact.js +0 -370
- package/build/generator/artifact.js.map +0 -1
- package/build/generator/index.d.ts +0 -3
- package/build/generator/index.js +0 -25
- package/build/generator/index.js.map +0 -1
- package/build/generator/json-template.d.ts +0 -11
- package/build/generator/json-template.js +0 -66
- package/build/generator/json-template.js.map +0 -1
- package/build/generator/template.d.ts +0 -8
- package/build/generator/template.js +0 -234
- package/build/generator/template.js.map +0 -1
- package/build/hooks/init.d.ts +0 -3
- package/build/hooks/init.js +0 -43
- package/build/hooks/init.js.map +0 -1
- package/build/index.d.ts +0 -76
- package/build/index.js +0 -74
- package/build/index.js.map +0 -1
- package/build/internal.d.ts +0 -5
- package/build/internal.js +0 -25
- package/build/internal.js.map +0 -1
- package/build/misc/deprecation.d.ts +0 -0
- package/build/misc/deprecation.js +0 -2
- package/build/misc/deprecation.js.map +0 -1
- package/build/misc/flag_cn.d.ts +0 -56
- package/build/misc/flag_cn.js +0 -154
- package/build/misc/flag_cn.js.map +0 -1
- package/build/provider/BlackSSLProvider.d.ts +0 -11
- package/build/provider/BlackSSLProvider.js +0 -93
- package/build/provider/BlackSSLProvider.js.map +0 -1
- package/build/provider/ClashProvider.d.ts +0 -24
- package/build/provider/ClashProvider.js +0 -476
- package/build/provider/ClashProvider.js.map +0 -1
- package/build/provider/CustomProvider.d.ts +0 -10
- package/build/provider/CustomProvider.js +0 -144
- package/build/provider/CustomProvider.js.map +0 -1
- package/build/provider/Provider.d.ts +0 -17
- package/build/provider/Provider.js +0 -121
- package/build/provider/Provider.js.map +0 -1
- package/build/provider/ShadowsocksJsonSubscribeProvider.d.ts +0 -11
- package/build/provider/ShadowsocksJsonSubscribeProvider.js +0 -86
- package/build/provider/ShadowsocksJsonSubscribeProvider.js.map +0 -1
- package/build/provider/ShadowsocksSubscribeProvider.d.ts +0 -18
- package/build/provider/ShadowsocksSubscribeProvider.js +0 -84
- package/build/provider/ShadowsocksSubscribeProvider.js.map +0 -1
- package/build/provider/ShadowsocksrSubscribeProvider.d.ts +0 -15
- package/build/provider/ShadowsocksrSubscribeProvider.js +0 -93
- package/build/provider/ShadowsocksrSubscribeProvider.js.map +0 -1
- package/build/provider/SsdProvider.d.ts +0 -39
- package/build/provider/SsdProvider.js +0 -138
- package/build/provider/SsdProvider.js.map +0 -1
- package/build/provider/TrojanProvider.d.ts +0 -24
- package/build/provider/TrojanProvider.js +0 -98
- package/build/provider/TrojanProvider.js.map +0 -1
- package/build/provider/V2rayNSubscribeProvider.d.ts +0 -25
- package/build/provider/V2rayNSubscribeProvider.js +0 -181
- package/build/provider/V2rayNSubscribeProvider.js.map +0 -1
- package/build/provider/index.d.ts +0 -17
- package/build/provider/index.js +0 -54
- package/build/provider/index.js.map +0 -1
- package/build/provider/types.d.ts +0 -18
- package/build/provider/types.js +0 -3
- package/build/provider/types.js.map +0 -1
- package/build/redis.d.ts +0 -9
- package/build/redis.js +0 -63
- package/build/redis.js.map +0 -1
- package/build/types.d.ts +0 -138
- package/build/types.js +0 -31
- package/build/types.js.map +0 -1
- package/build/utils/cache.d.ts +0 -23
- package/build/utils/cache.js +0 -98
- package/build/utils/cache.js.map +0 -1
- package/build/utils/clash.d.ts +0 -3
- package/build/utils/clash.js +0 -451
- package/build/utils/clash.js.map +0 -1
- package/build/utils/constant.d.ts +0 -1
- package/build/utils/constant.js +0 -19
- package/build/utils/constant.js.map +0 -1
- package/build/utils/dns.d.ts +0 -3
- package/build/utils/dns.js +0 -51
- package/build/utils/dns.js.map +0 -1
- package/build/utils/doctor.d.ts +0 -2
- package/build/utils/doctor.js +0 -38
- package/build/utils/doctor.js.map +0 -1
- package/build/utils/env-flag.d.ts +0 -9
- package/build/utils/env-flag.js +0 -41
- package/build/utils/env-flag.js.map +0 -1
- package/build/utils/error-helper.d.ts +0 -2
- package/build/utils/error-helper.js +0 -62
- package/build/utils/error-helper.js.map +0 -1
- package/build/utils/errors.d.ts +0 -19
- package/build/utils/errors.js +0 -60
- package/build/utils/errors.js.map +0 -1
- package/build/utils/flag.d.ts +0 -3
- package/build/utils/flag.js +0 -79
- package/build/utils/flag.js.map +0 -1
- package/build/utils/http-client.d.ts +0 -3
- package/build/utils/http-client.js +0 -92
- package/build/utils/http-client.js.map +0 -1
- package/build/utils/index.d.ts +0 -90
- package/build/utils/index.js +0 -529
- package/build/utils/index.js.map +0 -1
- package/build/utils/linter.d.ts +0 -4
- package/build/utils/linter.js +0 -49
- package/build/utils/linter.js.map +0 -1
- package/build/utils/loon.d.ts +0 -3
- package/build/utils/loon.js +0 -236
- package/build/utils/loon.js.map +0 -1
- package/build/utils/quantumult.d.ts +0 -6
- package/build/utils/quantumult.js +0 -240
- package/build/utils/quantumult.js.map +0 -1
- package/build/utils/relayable-url.d.ts +0 -1
- package/build/utils/relayable-url.js +0 -18
- package/build/utils/relayable-url.js.map +0 -1
- package/build/utils/remote-snippet.d.ts +0 -8
- package/build/utils/remote-snippet.js +0 -208
- package/build/utils/remote-snippet.js.map +0 -1
- package/build/utils/singbox.d.ts +0 -3
- package/build/utils/singbox.js +0 -377
- package/build/utils/singbox.js.map +0 -1
- package/build/utils/ss.d.ts +0 -3
- package/build/utils/ss.js +0 -97
- package/build/utils/ss.js.map +0 -1
- package/build/utils/ssr.d.ts +0 -7
- package/build/utils/ssr.js +0 -53
- package/build/utils/ssr.js.map +0 -1
- package/build/utils/subscription.d.ts +0 -11
- package/build/utils/subscription.js +0 -68
- package/build/utils/subscription.js.map +0 -1
- package/build/utils/surfboard.d.ts +0 -7
- package/build/utils/surfboard.js +0 -184
- package/build/utils/surfboard.js.map +0 -1
- package/build/utils/surge.d.ts +0 -8
- package/build/utils/surge.js +0 -407
- package/build/utils/surge.js.map +0 -1
- package/build/utils/time.d.ts +0 -1
- package/build/utils/time.js +0 -6
- package/build/utils/time.js.map +0 -1
- package/build/utils/tmp-helper.d.ts +0 -30
- package/build/utils/tmp-helper.js +0 -102
- package/build/utils/tmp-helper.js.map +0 -1
- package/build/utils/trojan.d.ts +0 -2
- package/build/utils/trojan.js +0 -38
- package/build/utils/trojan.js.map +0 -1
- package/build/utils/useragent.d.ts +0 -18
- package/build/utils/useragent.js +0 -210
- package/build/utils/useragent.js.map +0 -1
- package/build/validators/artifact.d.ts +0 -47
- package/build/validators/artifact.js +0 -27
- package/build/validators/artifact.js.map +0 -1
- package/build/validators/common.d.ts +0 -377
- package/build/validators/common.js +0 -106
- package/build/validators/common.js.map +0 -1
- package/build/validators/filter.d.ts +0 -10
- package/build/validators/filter.js +0 -15
- package/build/validators/filter.js.map +0 -1
- package/build/validators/hooks.d.ts +0 -9
- package/build/validators/hooks.js +0 -11
- package/build/validators/hooks.js.map +0 -1
- package/build/validators/http.d.ts +0 -366
- package/build/validators/http.js +0 -23
- package/build/validators/http.js.map +0 -1
- package/build/validators/hysteria2.d.ts +0 -196
- package/build/validators/hysteria2.js +0 -15
- package/build/validators/hysteria2.js.map +0 -1
- package/build/validators/index.d.ts +0 -17
- package/build/validators/index.js +0 -34
- package/build/validators/index.js.map +0 -1
- package/build/validators/provider.d.ts +0 -120
- package/build/validators/provider.js +0 -46
- package/build/validators/provider.js.map +0 -1
- package/build/validators/shadowsocks.d.ts +0 -252
- package/build/validators/shadowsocks.js +0 -31
- package/build/validators/shadowsocks.js.map +0 -1
- package/build/validators/shadowsocksr.d.ts +0 -184
- package/build/validators/shadowsocksr.js +0 -19
- package/build/validators/shadowsocksr.js.map +0 -1
- package/build/validators/snell.d.ts +0 -178
- package/build/validators/snell.js +0 -17
- package/build/validators/snell.js.map +0 -1
- package/build/validators/socks5.d.ts +0 -196
- package/build/validators/socks5.js +0 -15
- package/build/validators/socks5.js.map +0 -1
- package/build/validators/surgio-config.d.ts +0 -392
- package/build/validators/surgio-config.js +0 -101
- package/build/validators/surgio-config.js.map +0 -1
- package/build/validators/trojan.d.ts +0 -255
- package/build/validators/trojan.js +0 -16
- package/build/validators/trojan.js.map +0 -1
- package/build/validators/tuic.d.ts +0 -741
- package/build/validators/tuic.js +0 -21
- package/build/validators/tuic.js.map +0 -1
- package/build/validators/vless.d.ts +0 -389
- package/build/validators/vless.js +0 -31
- package/build/validators/vless.js.map +0 -1
- package/build/validators/vmess.d.ts +0 -425
- package/build/validators/vmess.js +0 -86
- package/build/validators/vmess.js.map +0 -1
- package/build/validators/wireguard.d.ts +0 -230
- package/build/validators/wireguard.js +0 -26
- package/build/validators/wireguard.js.map +0 -1
package/build/filters/utils.js
DELETED
|
@@ -1,159 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.mergeReversedFilters = exports.reverseFilter = exports.mergeSortedFilters = exports.useSortedKeywords = exports.discardProviders = exports.useProviders = exports.discardGlob = exports.useGlob = exports.matchGlob = exports.useRegexp = exports.discardKeywords = exports.useKeywords = exports.mergeFilters = exports.applyFilter = exports.validateFilter = void 0;
|
|
7
|
-
const lodash_1 = __importDefault(require("lodash"));
|
|
8
|
-
const micromatch_1 = __importDefault(require("micromatch"));
|
|
9
|
-
const classes_1 = require("./classes");
|
|
10
|
-
const validateFilter = (filter) => {
|
|
11
|
-
if (filter === null || filter === undefined) {
|
|
12
|
-
return false;
|
|
13
|
-
}
|
|
14
|
-
if (typeof filter === 'function') {
|
|
15
|
-
return true;
|
|
16
|
-
}
|
|
17
|
-
return (typeof filter === 'object' &&
|
|
18
|
-
'supportSort' in filter &&
|
|
19
|
-
'filter' in filter &&
|
|
20
|
-
typeof filter.supportSort === 'boolean' &&
|
|
21
|
-
typeof filter.filter === 'function');
|
|
22
|
-
};
|
|
23
|
-
exports.validateFilter = validateFilter;
|
|
24
|
-
const applyFilter = (nodeList, filter) => {
|
|
25
|
-
// istanbul ignore next
|
|
26
|
-
if (filter && !(0, exports.validateFilter)(filter)) {
|
|
27
|
-
throw new Error(`使用了无效的过滤器 ${filter}`);
|
|
28
|
-
}
|
|
29
|
-
let newNodeList = nodeList.filter((item) => {
|
|
30
|
-
// Only checks the enable property when it's present, default to true
|
|
31
|
-
const isEnabled = item.enable !== false;
|
|
32
|
-
if (filter && typeof filter === 'function') {
|
|
33
|
-
return filter(item) && isEnabled;
|
|
34
|
-
}
|
|
35
|
-
return isEnabled;
|
|
36
|
-
});
|
|
37
|
-
if (filter &&
|
|
38
|
-
typeof filter === 'object' &&
|
|
39
|
-
typeof filter.filter === 'function') {
|
|
40
|
-
newNodeList = filter.filter(newNodeList);
|
|
41
|
-
}
|
|
42
|
-
return newNodeList;
|
|
43
|
-
};
|
|
44
|
-
exports.applyFilter = applyFilter;
|
|
45
|
-
const mergeFilters = (filters, isStrict) => {
|
|
46
|
-
filters.forEach((filter) => {
|
|
47
|
-
if ('supportSort' in filter && filter.supportSort) {
|
|
48
|
-
throw new Error('mergeFilters 不支持包含排序功能的过滤器');
|
|
49
|
-
}
|
|
50
|
-
// istanbul ignore next
|
|
51
|
-
if (typeof filter !== 'function') {
|
|
52
|
-
throw new Error('mergeFilters 传入了无效的过滤器');
|
|
53
|
-
}
|
|
54
|
-
});
|
|
55
|
-
return (item) => {
|
|
56
|
-
return filters[isStrict ? 'every' : 'some']((filter) => filter(item));
|
|
57
|
-
};
|
|
58
|
-
};
|
|
59
|
-
exports.mergeFilters = mergeFilters;
|
|
60
|
-
const useKeywords = (keywords, isStrict) => {
|
|
61
|
-
// istanbul ignore next
|
|
62
|
-
if (!Array.isArray(keywords)) {
|
|
63
|
-
throw new Error('keywords 请使用数组');
|
|
64
|
-
}
|
|
65
|
-
return (item) => keywords[isStrict ? 'every' : 'some']((keyword) => item.nodeName.includes(keyword));
|
|
66
|
-
};
|
|
67
|
-
exports.useKeywords = useKeywords;
|
|
68
|
-
const discardKeywords = (keywords, isStrict) => {
|
|
69
|
-
// istanbul ignore next
|
|
70
|
-
if (!Array.isArray(keywords)) {
|
|
71
|
-
throw new Error('keywords 请使用数组');
|
|
72
|
-
}
|
|
73
|
-
return (item) => !keywords[isStrict ? 'every' : 'some']((keyword) => item.nodeName.includes(keyword));
|
|
74
|
-
};
|
|
75
|
-
exports.discardKeywords = discardKeywords;
|
|
76
|
-
const useRegexp = (regexp) => {
|
|
77
|
-
// istanbul ignore next
|
|
78
|
-
if (!lodash_1.default.isRegExp(regexp)) {
|
|
79
|
-
throw new Error('入参不是一个合法的正则表达式');
|
|
80
|
-
}
|
|
81
|
-
return (item) => regexp.test(item.nodeName);
|
|
82
|
-
};
|
|
83
|
-
exports.useRegexp = useRegexp;
|
|
84
|
-
const matchGlob = (str, glob) => {
|
|
85
|
-
return micromatch_1.default.contains(str, glob);
|
|
86
|
-
};
|
|
87
|
-
exports.matchGlob = matchGlob;
|
|
88
|
-
const useGlob = (glob) => {
|
|
89
|
-
return (item) => (0, exports.matchGlob)(item.nodeName, glob);
|
|
90
|
-
};
|
|
91
|
-
exports.useGlob = useGlob;
|
|
92
|
-
const discardGlob = (glob) => {
|
|
93
|
-
return (item) => !(0, exports.matchGlob)(item.nodeName, glob);
|
|
94
|
-
};
|
|
95
|
-
exports.discardGlob = discardGlob;
|
|
96
|
-
const useProviders = (keywords, isStrict = true) => {
|
|
97
|
-
// istanbul ignore next
|
|
98
|
-
if (!Array.isArray(keywords)) {
|
|
99
|
-
throw new Error('keywords 请使用数组');
|
|
100
|
-
}
|
|
101
|
-
return (item) => keywords.some((keyword) => isStrict
|
|
102
|
-
? item?.provider?.name === keyword
|
|
103
|
-
: item?.provider?.name.includes(keyword));
|
|
104
|
-
};
|
|
105
|
-
exports.useProviders = useProviders;
|
|
106
|
-
const discardProviders = (keywords, isStrict = true) => {
|
|
107
|
-
// istanbul ignore next
|
|
108
|
-
if (!Array.isArray(keywords)) {
|
|
109
|
-
throw new Error('keywords 请使用数组');
|
|
110
|
-
}
|
|
111
|
-
return (item) => !keywords.some((keyword) => isStrict
|
|
112
|
-
? item?.provider?.name === keyword
|
|
113
|
-
: item?.provider?.name.includes(keyword));
|
|
114
|
-
};
|
|
115
|
-
exports.discardProviders = discardProviders;
|
|
116
|
-
const useSortedKeywords = (keywords) => {
|
|
117
|
-
// istanbul ignore next
|
|
118
|
-
if (!Array.isArray(keywords)) {
|
|
119
|
-
throw new Error('keywords 请使用数组');
|
|
120
|
-
}
|
|
121
|
-
return new classes_1.SortFilterWithSortedKeywords(keywords);
|
|
122
|
-
};
|
|
123
|
-
exports.useSortedKeywords = useSortedKeywords;
|
|
124
|
-
const mergeSortedFilters = (filters) => {
|
|
125
|
-
filters.forEach((filter) => {
|
|
126
|
-
if ('supportSort' in filter && filter.supportSort) {
|
|
127
|
-
throw new Error('mergeSortedFilters 不支持包含排序功能的过滤器');
|
|
128
|
-
}
|
|
129
|
-
// istanbul ignore next
|
|
130
|
-
if (typeof filter !== 'function') {
|
|
131
|
-
throw new Error('mergeSortedFilters 传入了无效的过滤器');
|
|
132
|
-
}
|
|
133
|
-
});
|
|
134
|
-
return new classes_1.SortFilterWithSortedFilters(filters);
|
|
135
|
-
};
|
|
136
|
-
exports.mergeSortedFilters = mergeSortedFilters;
|
|
137
|
-
const reverseFilter = (filter) => {
|
|
138
|
-
if ('supportSort' in filter && filter.supportSort) {
|
|
139
|
-
throw new Error('reverseFilter 不支持包含排序功能的过滤器');
|
|
140
|
-
}
|
|
141
|
-
return (item) => !filter(item);
|
|
142
|
-
};
|
|
143
|
-
exports.reverseFilter = reverseFilter;
|
|
144
|
-
const mergeReversedFilters = (filters, isStrict) => {
|
|
145
|
-
filters.forEach((filter) => {
|
|
146
|
-
if ('supportSort' in filter && filter.supportSort) {
|
|
147
|
-
throw new Error('mergeReversedFilters 不支持包含排序功能的过滤器');
|
|
148
|
-
}
|
|
149
|
-
// istanbul ignore next
|
|
150
|
-
if (typeof filter !== 'function') {
|
|
151
|
-
throw new Error('mergeReversedFilters 传入了无效的过滤器');
|
|
152
|
-
}
|
|
153
|
-
});
|
|
154
|
-
return (item) => {
|
|
155
|
-
return filters[isStrict ? 'some' : 'every']((filter) => filter(item));
|
|
156
|
-
};
|
|
157
|
-
};
|
|
158
|
-
exports.mergeReversedFilters = mergeReversedFilters;
|
|
159
|
-
//# sourceMappingURL=utils.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/filters/utils.ts"],"names":[],"mappings":";;;;;;AAAA,oDAAsB;AACtB,4DAAmC;AAQnC,uCAGkB;AAEX,MAAM,cAAc,GAAG,CAAC,MAAe,EAAW,EAAE;IACzD,IAAI,MAAM,KAAK,IAAI,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QAC5C,OAAO,KAAK,CAAA;IACd,CAAC;IACD,IAAI,OAAO,MAAM,KAAK,UAAU,EAAE,CAAC;QACjC,OAAO,IAAI,CAAA;IACb,CAAC;IACD,OAAO,CACL,OAAO,MAAM,KAAK,QAAQ;QAC1B,aAAa,IAAI,MAAM;QACvB,QAAQ,IAAI,MAAM;QAClB,OAAO,MAAM,CAAC,WAAW,KAAK,SAAS;QACvC,OAAO,MAAM,CAAC,MAAM,KAAK,UAAU,CACpC,CAAA;AACH,CAAC,CAAA;AAdY,QAAA,cAAc,kBAc1B;AAEM,MAAM,WAAW,GAAG,CACzB,QAA0B,EAC1B,MAA8C,EAC5B,EAAE;IACpB,uBAAuB;IACvB,IAAI,MAAM,IAAI,CAAC,IAAA,sBAAc,EAAC,MAAM,CAAC,EAAE,CAAC;QACtC,MAAM,IAAI,KAAK,CAAC,aAAa,MAAM,EAAE,CAAC,CAAA;IACxC,CAAC;IAED,IAAI,WAAW,GAAqB,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE;QAC3D,qEAAqE;QACrE,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,KAAK,KAAK,CAAA;QAEvC,IAAI,MAAM,IAAI,OAAO,MAAM,KAAK,UAAU,EAAE,CAAC;YAC3C,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,SAAS,CAAA;QAClC,CAAC;QAED,OAAO,SAAS,CAAA;IAClB,CAAC,CAAC,CAAA;IAEF,IACE,MAAM;QACN,OAAO,MAAM,KAAK,QAAQ;QAC1B,OAAO,MAAM,CAAC,MAAM,KAAK,UAAU,EACnC,CAAC;QACD,WAAW,GAAG,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAA;IAC1C,CAAC;IAED,OAAO,WAAW,CAAA;AACpB,CAAC,CAAA;AA7BY,QAAA,WAAW,eA6BvB;AAEM,MAAM,YAAY,GAAG,CAC1B,OAA8B,EAC9B,QAAkB,EACF,EAAE;IAClB,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE;QACzB,IAAI,aAAa,IAAI,MAAM,IAAI,MAAM,CAAC,WAAW,EAAE,CAAC;YAClD,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAA;QAC/C,CAAC;QAED,uBAAuB;QACvB,IAAI,OAAO,MAAM,KAAK,UAAU,EAAE,CAAC;YACjC,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAA;QAC3C,CAAC;IACH,CAAC,CAAC,CAAA;IAEF,OAAO,CAAC,IAAI,EAAE,EAAE;QACd,OAAO,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAA;IACvE,CAAC,CAAA;AACH,CAAC,CAAA;AAlBY,QAAA,YAAY,gBAkBxB;AAEM,MAAM,WAAW,GAAG,CACzB,QAAuB,EACvB,QAAkB,EACF,EAAE;IAClB,uBAAuB;IACvB,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC7B,MAAM,IAAI,KAAK,CAAC,gBAAgB,CAAC,CAAA;IACnC,CAAC;IAED,OAAO,CAAC,IAAI,EAAE,EAAE,CACd,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,EAAE,EAAE,CAChD,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,CAChC,CAAA;AACL,CAAC,CAAA;AAbY,QAAA,WAAW,eAavB;AAEM,MAAM,eAAe,GAAG,CAC7B,QAAuB,EACvB,QAAkB,EACF,EAAE;IAClB,uBAAuB;IACvB,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC7B,MAAM,IAAI,KAAK,CAAC,gBAAgB,CAAC,CAAA;IACnC,CAAC;IAED,OAAO,CAAC,IAAI,EAAE,EAAE,CACd,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,EAAE,EAAE,CACjD,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,CAChC,CAAA;AACL,CAAC,CAAA;AAbY,QAAA,eAAe,mBAa3B;AAEM,MAAM,SAAS,GAAG,CAAC,MAAc,EAAkB,EAAE;IAC1D,uBAAuB;IACvB,IAAI,CAAC,gBAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QACxB,MAAM,IAAI,KAAK,CAAC,gBAAgB,CAAC,CAAA;IACnC,CAAC;IAED,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;AAC7C,CAAC,CAAA;AAPY,QAAA,SAAS,aAOrB;AAEM,MAAM,SAAS,GAAG,CAAC,GAAW,EAAE,IAAY,EAAW,EAAE;IAC9D,OAAO,oBAAU,CAAC,QAAQ,CAAC,GAAG,EAAE,IAAI,CAAC,CAAA;AACvC,CAAC,CAAA;AAFY,QAAA,SAAS,aAErB;AAEM,MAAM,OAAO,GAAG,CAAC,IAAY,EAAkB,EAAE;IACtD,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,IAAA,iBAAS,EAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAA;AACjD,CAAC,CAAA;AAFY,QAAA,OAAO,WAEnB;AAEM,MAAM,WAAW,GAAG,CAAC,IAAY,EAAkB,EAAE;IAC1D,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAA,iBAAS,EAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAA;AAClD,CAAC,CAAA;AAFY,QAAA,WAAW,eAEvB;AAEM,MAAM,YAAY,GAAG,CAC1B,QAAuB,EACvB,QAAQ,GAAG,IAAI,EACC,EAAE;IAClB,uBAAuB;IACvB,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC7B,MAAM,IAAI,KAAK,CAAC,gBAAgB,CAAC,CAAA;IACnC,CAAC;IAED,OAAO,CAAC,IAAI,EAAE,EAAE,CACd,QAAQ,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CACxB,QAAQ;QACN,CAAC,CAAC,IAAI,EAAE,QAAQ,EAAE,IAAI,KAAK,OAAO;QAClC,CAAC,CAAC,IAAI,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAC3C,CAAA;AACL,CAAC,CAAA;AAfY,QAAA,YAAY,gBAexB;AAEM,MAAM,gBAAgB,GAAG,CAC9B,QAAuB,EACvB,QAAQ,GAAG,IAAI,EACC,EAAE;IAClB,uBAAuB;IACvB,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC7B,MAAM,IAAI,KAAK,CAAC,gBAAgB,CAAC,CAAA;IACnC,CAAC;IAED,OAAO,CAAC,IAAI,EAAE,EAAE,CACd,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CACzB,QAAQ;QACN,CAAC,CAAC,IAAI,EAAE,QAAQ,EAAE,IAAI,KAAK,OAAO;QAClC,CAAC,CAAC,IAAI,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAC3C,CAAA;AACL,CAAC,CAAA;AAfY,QAAA,gBAAgB,oBAe5B;AAEM,MAAM,iBAAiB,GAAG,CAC/B,QAAuB,EACD,EAAE;IACxB,uBAAuB;IACvB,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC7B,MAAM,IAAI,KAAK,CAAC,gBAAgB,CAAC,CAAA;IACnC,CAAC;IAED,OAAO,IAAI,sCAA4B,CAAC,QAAQ,CAAC,CAAA;AACnD,CAAC,CAAA;AATY,QAAA,iBAAiB,qBAS7B;AAEM,MAAM,kBAAkB,GAAG,CAChC,OAA8B,EACR,EAAE;IACxB,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE;QACzB,IAAI,aAAa,IAAI,MAAM,IAAI,MAAM,CAAC,WAAW,EAAE,CAAC;YAClD,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAA;QACrD,CAAC;QAED,uBAAuB;QACvB,IAAI,OAAO,MAAM,KAAK,UAAU,EAAE,CAAC;YACjC,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAA;QACjD,CAAC;IACH,CAAC,CAAC,CAAA;IAEF,OAAO,IAAI,qCAA2B,CAAC,OAAO,CAAC,CAAA;AACjD,CAAC,CAAA;AAfY,QAAA,kBAAkB,sBAe9B;AAEM,MAAM,aAAa,GAAG,CAAC,MAAsB,EAAkB,EAAE;IACtE,IAAI,aAAa,IAAI,MAAM,IAAI,MAAM,CAAC,WAAW,EAAE,CAAC;QAClD,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAA;IAChD,CAAC;IACD,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;AAChC,CAAC,CAAA;AALY,QAAA,aAAa,iBAKzB;AAEM,MAAM,oBAAoB,GAAG,CAClC,OAA8B,EAC9B,QAAkB,EACF,EAAE;IAClB,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE;QACzB,IAAI,aAAa,IAAI,MAAM,IAAI,MAAM,CAAC,WAAW,EAAE,CAAC;YAClD,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAA;QACvD,CAAC;QAED,uBAAuB;QACvB,IAAI,OAAO,MAAM,KAAK,UAAU,EAAE,CAAC;YACjC,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAA;QACnD,CAAC;IACH,CAAC,CAAC,CAAA;IAEF,OAAO,CAAC,IAAI,EAAE,EAAE;QACd,OAAO,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAA;IACvE,CAAC,CAAA;AACH,CAAC,CAAA;AAlBY,QAAA,oBAAoB,wBAkBhC"}
|
|
@@ -1,102 +0,0 @@
|
|
|
1
|
-
import { EventEmitter } from 'events';
|
|
2
|
-
import _ from 'lodash';
|
|
3
|
-
import { Environment } from 'nunjucks';
|
|
4
|
-
import { GetNodeListParams, PossibleProviderType } from '../provider';
|
|
5
|
-
import { ArtifactConfig, ArtifactConfigInput, CommandConfig, PossibleNodeConfigType, RemoteSnippet } from '../types';
|
|
6
|
-
export interface ArtifactOptions {
|
|
7
|
-
readonly remoteSnippetList?: ReadonlyArray<RemoteSnippet>;
|
|
8
|
-
readonly templateEngine?: Environment;
|
|
9
|
-
}
|
|
10
|
-
export type ExtendableRenderContext = Record<string, string>;
|
|
11
|
-
export declare class Artifact extends EventEmitter {
|
|
12
|
-
surgioConfig: CommandConfig;
|
|
13
|
-
private options;
|
|
14
|
-
initProgress: number;
|
|
15
|
-
artifact: ArtifactConfig;
|
|
16
|
-
providerNameList: ReadonlyArray<string>;
|
|
17
|
-
nodeConfigListMap: Map<string, ReadonlyArray<PossibleNodeConfigType>>;
|
|
18
|
-
providerMap: Map<string, PossibleProviderType>;
|
|
19
|
-
nodeList: PossibleNodeConfigType[];
|
|
20
|
-
private customFilters;
|
|
21
|
-
private netflixFilter;
|
|
22
|
-
private youtubePremiumFilter;
|
|
23
|
-
constructor(surgioConfig: CommandConfig, artifactConfig: ArtifactConfigInput, options?: ArtifactOptions);
|
|
24
|
-
get isReady(): boolean;
|
|
25
|
-
getRenderContext(extendRenderContext?: ExtendableRenderContext): {
|
|
26
|
-
readonly netflixFilter: NonNullable<((nodeConfig: PossibleNodeConfigType) => boolean) | {
|
|
27
|
-
readonly filter: <T extends PossibleNodeConfigType>(nodeList: ReadonlyArray<T>) => ReadonlyArray<T>;
|
|
28
|
-
readonly supportSort: true;
|
|
29
|
-
} | undefined>;
|
|
30
|
-
readonly youtubePremiumFilter: NonNullable<((nodeConfig: PossibleNodeConfigType) => boolean) | {
|
|
31
|
-
readonly filter: <T extends PossibleNodeConfigType>(nodeList: ReadonlyArray<T>) => ReadonlyArray<T>;
|
|
32
|
-
readonly supportSort: true;
|
|
33
|
-
} | undefined>;
|
|
34
|
-
readonly customFilters: Record<string, ((nodeConfig: PossibleNodeConfigType) => boolean) | {
|
|
35
|
-
readonly filter: <T extends PossibleNodeConfigType>(nodeList: ReadonlyArray<T>) => ReadonlyArray<T>;
|
|
36
|
-
readonly supportSort: true;
|
|
37
|
-
}>;
|
|
38
|
-
readonly customParams: Readonly<Record<string, any>>;
|
|
39
|
-
readonly usFilter: import("../types").NodeFilterType;
|
|
40
|
-
readonly hkFilter: import("../types").NodeFilterType;
|
|
41
|
-
readonly japanFilter: import("../types").NodeFilterType;
|
|
42
|
-
readonly koreaFilter: import("../types").NodeFilterType;
|
|
43
|
-
readonly singaporeFilter: import("../types").NodeFilterType;
|
|
44
|
-
readonly germanyFilter: import("../types").NodeFilterType;
|
|
45
|
-
readonly taiwanFilter: import("../types").NodeFilterType;
|
|
46
|
-
readonly chinaBackFilter: import("../types").NodeFilterType;
|
|
47
|
-
readonly chinaOutFilter: import("../types").NodeFilterType;
|
|
48
|
-
readonly shadowsocksFilter: import("../types").NodeFilterType;
|
|
49
|
-
readonly shadowsocksrFilter: import("../types").NodeFilterType;
|
|
50
|
-
readonly vmessFilter: import("../types").NodeFilterType;
|
|
51
|
-
readonly v2rayFilter: import("../types").NodeFilterType;
|
|
52
|
-
readonly snellFilter: import("../types").NodeFilterType;
|
|
53
|
-
readonly tuicFilter: import("../types").NodeFilterType;
|
|
54
|
-
readonly httpFilter: import("../types").NodeFilterType;
|
|
55
|
-
readonly httpsFilter: import("../types").NodeFilterType;
|
|
56
|
-
readonly trojanFilter: import("../types").NodeFilterType;
|
|
57
|
-
readonly socks5Filter: import("../types").NodeFilterType;
|
|
58
|
-
readonly wireguardFilter: import("../types").NodeFilterType;
|
|
59
|
-
readonly hysteria2Filter: import("../types").NodeFilterType;
|
|
60
|
-
readonly vlessFilter: import("../types").NodeFilterType;
|
|
61
|
-
readonly proxyTestUrl: string | undefined;
|
|
62
|
-
readonly proxyTestInterval: number | undefined;
|
|
63
|
-
readonly internetTestUrl: string | undefined;
|
|
64
|
-
readonly internetTestInterval: number | undefined;
|
|
65
|
-
readonly downloadUrl: string;
|
|
66
|
-
readonly snippet: (filePath: string) => RemoteSnippet;
|
|
67
|
-
readonly remoteSnippets: _.Dictionary<RemoteSnippet>;
|
|
68
|
-
readonly nodeList: PossibleNodeConfigType[];
|
|
69
|
-
readonly provider: string;
|
|
70
|
-
readonly providerName: string;
|
|
71
|
-
readonly artifactName: string;
|
|
72
|
-
readonly getDownloadUrl: (name: string) => string;
|
|
73
|
-
readonly getUrl: (p: string) => string;
|
|
74
|
-
readonly getNodeNames: (list: ReadonlyArray<PossibleNodeConfigType>, filter?: import("../types").NodeFilterType | import("../types").SortedNodeFilterType, separator?: string) => string;
|
|
75
|
-
readonly getClashNodes: (list: ReadonlyArray<PossibleNodeConfigType>, filter?: import("../types").NodeFilterType | import("../types").SortedNodeFilterType) => Record<string, any>[];
|
|
76
|
-
readonly getClashNodeNames: (list: ReadonlyArray<PossibleNodeConfigType>, filter?: import("../types").NodeFilterType | import("../types").SortedNodeFilterType, prependNodeNames?: ReadonlyArray<string>, defaultNodeNames?: ReadonlyArray<string>) => ReadonlyArray<string>;
|
|
77
|
-
readonly getSingboxNodes: (list: ReadonlyArray<PossibleNodeConfigType>, filter?: import("../types").NodeFilterType | import("../types").SortedNodeFilterType) => Record<string, any>[];
|
|
78
|
-
readonly getSingboxNodeNames: (list: ReadonlyArray<PossibleNodeConfigType>, filter?: import("../types").NodeFilterType | import("../types").SortedNodeFilterType) => ReadonlyArray<string>;
|
|
79
|
-
readonly getSurgeNodes: (nodeList: ReadonlyArray<PossibleNodeConfigType>, filter?: import("../types").NodeFilterType | import("../types").SortedNodeFilterType) => string;
|
|
80
|
-
readonly getSurgeNodeNames: (nodeList: ReadonlyArray<PossibleNodeConfigType>, filter?: import("../types").NodeFilterType | import("../types").SortedNodeFilterType) => string;
|
|
81
|
-
readonly getSurgeWireguardNodes: (nodeList: ReadonlyArray<PossibleNodeConfigType>) => string;
|
|
82
|
-
readonly getSurfboardNodes: (list: ReadonlyArray<PossibleNodeConfigType>, filter?: import("../types").NodeFilterType | import("../types").SortedNodeFilterType) => string;
|
|
83
|
-
readonly getSurfboardNodeNames: (list: ReadonlyArray<PossibleNodeConfigType>, filter?: import("../types").NodeFilterType | import("../types").SortedNodeFilterType) => string;
|
|
84
|
-
readonly getShadowsocksNodes: (list: ReadonlyArray<import("../types").ShadowsocksNodeConfig>, groupName?: string) => string;
|
|
85
|
-
readonly getShadowsocksNodesJSON: (list: ReadonlyArray<import("../types").ShadowsocksNodeConfig>) => string;
|
|
86
|
-
readonly getShadowsocksrNodes: (list: ReadonlyArray<import("../types").ShadowsocksrNodeConfig>, groupName: string) => string;
|
|
87
|
-
readonly getV2rayNNodes: (list: ReadonlyArray<import("../types").VmessNodeConfig>) => string;
|
|
88
|
-
readonly getQuantumultXNodes: (nodeList: ReadonlyArray<PossibleNodeConfigType>, filter?: import("../types").NodeFilterType | import("../types").SortedNodeFilterType) => string;
|
|
89
|
-
readonly getQuantumultXNodeNames: (nodeList: ReadonlyArray<PossibleNodeConfigType>, filter?: import("../types").NodeFilterType | import("../types").SortedNodeFilterType) => string;
|
|
90
|
-
readonly getLoonNodes: (list: ReadonlyArray<PossibleNodeConfigType>, filter?: import("../types").NodeFilterType | import("../types").SortedNodeFilterType) => string;
|
|
91
|
-
readonly getLoonNodeNames: (list: ReadonlyArray<PossibleNodeConfigType>, filter?: import("../types").NodeFilterType | import("../types").SortedNodeFilterType, separator?: string) => string;
|
|
92
|
-
readonly toUrlSafeBase64: (str: string) => string;
|
|
93
|
-
readonly toBase64: (str: string) => string;
|
|
94
|
-
readonly encodeURIComponent: typeof encodeURIComponent;
|
|
95
|
-
};
|
|
96
|
-
init(params?: {
|
|
97
|
-
getNodeListParams?: GetNodeListParams;
|
|
98
|
-
}): Promise<this>;
|
|
99
|
-
getMergedCustomParams(extendableCustomParams?: Record<string, any>): Readonly<Record<string, any>>;
|
|
100
|
-
render(templateEngine?: Environment, extendRenderContext?: ExtendableRenderContext): string;
|
|
101
|
-
private providerMapper;
|
|
102
|
-
}
|
|
@@ -1,370 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.Artifact = void 0;
|
|
7
|
-
const events_1 = require("events");
|
|
8
|
-
const path_1 = __importDefault(require("path"));
|
|
9
|
-
const logger_1 = require("@surgio/logger");
|
|
10
|
-
const bluebird_1 = __importDefault(require("bluebird"));
|
|
11
|
-
const fs_extra_1 = __importDefault(require("fs-extra"));
|
|
12
|
-
const lodash_1 = __importDefault(require("lodash"));
|
|
13
|
-
const provider_1 = require("../provider");
|
|
14
|
-
const types_1 = require("../types");
|
|
15
|
-
const utils_1 = require("../utils");
|
|
16
|
-
const dns_1 = require("../utils/dns");
|
|
17
|
-
const filters_1 = require("../filters");
|
|
18
|
-
const flag_1 = require("../utils/flag");
|
|
19
|
-
const validators_1 = require("../validators");
|
|
20
|
-
const template_1 = require("./template");
|
|
21
|
-
const json_template_1 = require("./json-template");
|
|
22
|
-
class Artifact extends events_1.EventEmitter {
|
|
23
|
-
surgioConfig;
|
|
24
|
-
options;
|
|
25
|
-
initProgress = 0;
|
|
26
|
-
artifact;
|
|
27
|
-
providerNameList;
|
|
28
|
-
nodeConfigListMap = new Map();
|
|
29
|
-
providerMap = new Map();
|
|
30
|
-
nodeList = [];
|
|
31
|
-
customFilters = {};
|
|
32
|
-
netflixFilter = filters_1.internalFilters.netflixFilter;
|
|
33
|
-
youtubePremiumFilter = filters_1.internalFilters.youtubePremiumFilter;
|
|
34
|
-
constructor(surgioConfig, artifactConfig, options = {}) {
|
|
35
|
-
super();
|
|
36
|
-
this.surgioConfig = surgioConfig;
|
|
37
|
-
this.options = options;
|
|
38
|
-
this.artifact = validators_1.ArtifactValidator.parse(artifactConfig);
|
|
39
|
-
const mainProviderName = this.artifact.provider;
|
|
40
|
-
const combineProviders = this.artifact.combineProviders || [];
|
|
41
|
-
this.providerNameList = [mainProviderName].concat(combineProviders);
|
|
42
|
-
}
|
|
43
|
-
get isReady() {
|
|
44
|
-
return this.initProgress === this.providerNameList.length;
|
|
45
|
-
}
|
|
46
|
-
getRenderContext(extendRenderContext = {}) {
|
|
47
|
-
const config = this.surgioConfig;
|
|
48
|
-
const gatewayConfig = config.gateway;
|
|
49
|
-
const gatewayToken = gatewayConfig?.viewerToken || gatewayConfig?.accessToken;
|
|
50
|
-
const { name: artifactName, downloadUrl } = this.artifact;
|
|
51
|
-
const { nodeList, netflixFilter, youtubePremiumFilter, customFilters } = this;
|
|
52
|
-
const remoteSnippets = lodash_1.default.keyBy(this.options.remoteSnippetList || [], (item) => item.name);
|
|
53
|
-
const mergedCustomParams = this.getMergedCustomParams(extendRenderContext);
|
|
54
|
-
return {
|
|
55
|
-
proxyTestUrl: config.proxyTestUrl,
|
|
56
|
-
proxyTestInterval: config.proxyTestInterval,
|
|
57
|
-
internetTestUrl: config.internetTestUrl,
|
|
58
|
-
internetTestInterval: config.internetTestInterval,
|
|
59
|
-
downloadUrl: downloadUrl
|
|
60
|
-
? downloadUrl
|
|
61
|
-
: (0, utils_1.getDownloadUrl)(config.urlBase, artifactName, true, gatewayToken),
|
|
62
|
-
snippet: (filePath) => {
|
|
63
|
-
return (0, template_1.loadLocalSnippet)(config.templateDir, filePath);
|
|
64
|
-
},
|
|
65
|
-
remoteSnippets,
|
|
66
|
-
nodeList,
|
|
67
|
-
provider: this.artifact.provider,
|
|
68
|
-
providerName: this.artifact.provider,
|
|
69
|
-
artifactName,
|
|
70
|
-
getDownloadUrl: (name) => (0, utils_1.getDownloadUrl)(config.urlBase, name, true, gatewayToken),
|
|
71
|
-
getUrl: (p) => (0, utils_1.getUrl)(config.publicUrl, p, gatewayToken),
|
|
72
|
-
getNodeNames: utils_1.getNodeNames,
|
|
73
|
-
getClashNodes: utils_1.getClashNodes,
|
|
74
|
-
getClashNodeNames: utils_1.getClashNodeNames,
|
|
75
|
-
getSingboxNodes: utils_1.getSingboxNodes,
|
|
76
|
-
getSingboxNodeNames: utils_1.getSingboxNodeNames,
|
|
77
|
-
getSurgeNodes: utils_1.getSurgeNodes,
|
|
78
|
-
getSurgeNodeNames: utils_1.getSurgeNodeNames,
|
|
79
|
-
getSurgeWireguardNodes: utils_1.getSurgeWireguardNodes,
|
|
80
|
-
getSurfboardNodes: utils_1.getSurfboardNodes,
|
|
81
|
-
getSurfboardNodeNames: utils_1.getSurfboardNodeNames,
|
|
82
|
-
getShadowsocksNodes: utils_1.getShadowsocksNodes,
|
|
83
|
-
getShadowsocksNodesJSON: utils_1.getShadowsocksNodesJSON,
|
|
84
|
-
getShadowsocksrNodes: utils_1.getShadowsocksrNodes,
|
|
85
|
-
getV2rayNNodes: utils_1.getV2rayNNodes,
|
|
86
|
-
getQuantumultXNodes: utils_1.getQuantumultXNodes,
|
|
87
|
-
getQuantumultXNodeNames: utils_1.getQuantumultXNodeNames,
|
|
88
|
-
getLoonNodes: utils_1.getLoonNodes,
|
|
89
|
-
getLoonNodeNames: utils_1.getLoonNodeNames,
|
|
90
|
-
toUrlSafeBase64: utils_1.toUrlSafeBase64,
|
|
91
|
-
toBase64: utils_1.toBase64,
|
|
92
|
-
encodeURIComponent,
|
|
93
|
-
...filters_1.internalFilters,
|
|
94
|
-
netflixFilter,
|
|
95
|
-
youtubePremiumFilter,
|
|
96
|
-
customFilters,
|
|
97
|
-
customParams: mergedCustomParams,
|
|
98
|
-
};
|
|
99
|
-
}
|
|
100
|
-
async init(params = {}) {
|
|
101
|
-
if (this.isReady) {
|
|
102
|
-
throw new Error('Artifact 已经初始化完成');
|
|
103
|
-
}
|
|
104
|
-
this.emit('initArtifact:start', { artifact: this.artifact });
|
|
105
|
-
await bluebird_1.default.map(this.providerNameList, async (providerName) => {
|
|
106
|
-
await this.providerMapper(providerName, params.getNodeListParams);
|
|
107
|
-
}, {
|
|
108
|
-
concurrency: (0, utils_1.getNetworkConcurrency)(),
|
|
109
|
-
});
|
|
110
|
-
this.providerNameList.forEach((providerName) => {
|
|
111
|
-
const nodeConfigList = this.nodeConfigListMap.get(providerName);
|
|
112
|
-
if (nodeConfigList) {
|
|
113
|
-
nodeConfigList.forEach((nodeConfig) => {
|
|
114
|
-
if (nodeConfig) {
|
|
115
|
-
this.nodeList.push(nodeConfig);
|
|
116
|
-
}
|
|
117
|
-
});
|
|
118
|
-
}
|
|
119
|
-
});
|
|
120
|
-
this.emit('initArtifact:end', { artifact: this.artifact });
|
|
121
|
-
return this;
|
|
122
|
-
}
|
|
123
|
-
getMergedCustomParams(extendableCustomParams = {}) {
|
|
124
|
-
const globalCustomParams = this.surgioConfig.customParams;
|
|
125
|
-
const { customParams: artifactCustomParams } = this.artifact;
|
|
126
|
-
const merged = lodash_1.default.merge({}, globalCustomParams, artifactCustomParams, extendableCustomParams);
|
|
127
|
-
return Object.freeze(merged);
|
|
128
|
-
}
|
|
129
|
-
render(templateEngine, extendRenderContext) {
|
|
130
|
-
if (!this.isReady) {
|
|
131
|
-
throw new Error('Artifact 还未初始化');
|
|
132
|
-
}
|
|
133
|
-
const targetTemplateEngine = templateEngine || this.options.templateEngine;
|
|
134
|
-
if (!targetTemplateEngine) {
|
|
135
|
-
throw new Error('没有可用的 Nunjucks 环境');
|
|
136
|
-
}
|
|
137
|
-
if (this.artifact.templateType === 'json' &&
|
|
138
|
-
!this.artifact.extendTemplate) {
|
|
139
|
-
throw new Error('JSON 模板需要提供 extendTemplate 函数');
|
|
140
|
-
}
|
|
141
|
-
const renderContext = this.getRenderContext(extendRenderContext);
|
|
142
|
-
const { templateString, template, templateType } = this.artifact;
|
|
143
|
-
const result = templateString
|
|
144
|
-
? targetTemplateEngine.renderString(templateString, {
|
|
145
|
-
templateEngine: targetTemplateEngine,
|
|
146
|
-
...renderContext,
|
|
147
|
-
})
|
|
148
|
-
: templateType === 'default'
|
|
149
|
-
? targetTemplateEngine.render(`${template}.tpl`, {
|
|
150
|
-
templateEngine: targetTemplateEngine,
|
|
151
|
-
...renderContext,
|
|
152
|
-
})
|
|
153
|
-
: (0, json_template_1.render)(this.surgioConfig.templateDir, `${template}.json`, this.artifact.extendTemplate, renderContext);
|
|
154
|
-
this.emit('renderArtifact', { artifact: this.artifact, result });
|
|
155
|
-
return result;
|
|
156
|
-
}
|
|
157
|
-
async providerMapper(providerName, getNodeListParams = {}) {
|
|
158
|
-
const config = this.surgioConfig;
|
|
159
|
-
const mainProviderName = this.artifact.provider;
|
|
160
|
-
const filePath = path_1.default.resolve(config.providerDir, `${providerName}.js`);
|
|
161
|
-
this.emit('initProvider:start', {
|
|
162
|
-
artifact: this.artifact,
|
|
163
|
-
providerName,
|
|
164
|
-
});
|
|
165
|
-
if (!fs_extra_1.default.existsSync(filePath)) {
|
|
166
|
-
throw new Error(`文件 ${filePath} 不存在`);
|
|
167
|
-
}
|
|
168
|
-
let provider;
|
|
169
|
-
let nodeConfigList;
|
|
170
|
-
try {
|
|
171
|
-
// eslint-disable-next-line prefer-const
|
|
172
|
-
provider = await (0, provider_1.getProvider)(providerName, require(filePath));
|
|
173
|
-
this.providerMap.set(providerName, provider);
|
|
174
|
-
}
|
|
175
|
-
catch (err) /* istanbul ignore next */ {
|
|
176
|
-
if ((0, utils_1.isSurgioError)(err)) {
|
|
177
|
-
err.providerName = providerName;
|
|
178
|
-
err.providerPath = filePath;
|
|
179
|
-
throw err;
|
|
180
|
-
}
|
|
181
|
-
else {
|
|
182
|
-
throw new utils_1.SurgioError((0, utils_1.isError)(err) ? err.message : '处理 Provider 失败', {
|
|
183
|
-
cause: err,
|
|
184
|
-
providerName,
|
|
185
|
-
providerPath: filePath,
|
|
186
|
-
});
|
|
187
|
-
}
|
|
188
|
-
}
|
|
189
|
-
try {
|
|
190
|
-
try {
|
|
191
|
-
nodeConfigList = await provider.getNodeList(this.getMergedCustomParams(getNodeListParams));
|
|
192
|
-
}
|
|
193
|
-
catch (err) {
|
|
194
|
-
if (provider.config.hooks?.onError && (0, utils_1.isError)(err)) {
|
|
195
|
-
const result = await provider.config.hooks.onError(err);
|
|
196
|
-
if (Array.isArray(result)) {
|
|
197
|
-
const adHocProvider = new provider_1.CustomProvider('ad-hoc', {
|
|
198
|
-
type: types_1.SupportProviderEnum.Custom,
|
|
199
|
-
nodeList: result,
|
|
200
|
-
});
|
|
201
|
-
nodeConfigList = await adHocProvider.getNodeList();
|
|
202
|
-
}
|
|
203
|
-
else {
|
|
204
|
-
nodeConfigList = [];
|
|
205
|
-
}
|
|
206
|
-
}
|
|
207
|
-
else {
|
|
208
|
-
throw err;
|
|
209
|
-
}
|
|
210
|
-
}
|
|
211
|
-
}
|
|
212
|
-
catch (err) /* istanbul ignore next */ {
|
|
213
|
-
if ((0, utils_1.isSurgioError)(err)) {
|
|
214
|
-
err.providerName = providerName;
|
|
215
|
-
err.providerPath = filePath;
|
|
216
|
-
throw err;
|
|
217
|
-
}
|
|
218
|
-
else {
|
|
219
|
-
throw new utils_1.SurgioError((0, utils_1.isError)(err) ? err.message : '处理 Provider 失败', {
|
|
220
|
-
cause: err,
|
|
221
|
-
providerName,
|
|
222
|
-
providerPath: filePath,
|
|
223
|
-
});
|
|
224
|
-
}
|
|
225
|
-
}
|
|
226
|
-
// Filter 仅使用第一个 Provider 中的定义
|
|
227
|
-
if (providerName === mainProviderName) {
|
|
228
|
-
if (provider.config.netflixFilter !== undefined) {
|
|
229
|
-
this.netflixFilter = provider.config.netflixFilter;
|
|
230
|
-
}
|
|
231
|
-
if (provider.config.youtubePremiumFilter !== undefined) {
|
|
232
|
-
this.youtubePremiumFilter = provider.config.youtubePremiumFilter;
|
|
233
|
-
}
|
|
234
|
-
this.customFilters = {
|
|
235
|
-
...this.customFilters,
|
|
236
|
-
...config.customFilters,
|
|
237
|
-
...provider.config.customFilters,
|
|
238
|
-
};
|
|
239
|
-
}
|
|
240
|
-
if ((0, filters_1.validateFilter)(provider.config.nodeFilter) &&
|
|
241
|
-
typeof provider.config.nodeFilter === 'object' &&
|
|
242
|
-
provider.config.nodeFilter.supportSort) {
|
|
243
|
-
nodeConfigList = provider.config.nodeFilter.filter(nodeConfigList);
|
|
244
|
-
}
|
|
245
|
-
nodeConfigList = (await bluebird_1.default.map(nodeConfigList, async (nodeConfig) => {
|
|
246
|
-
let isValid = false;
|
|
247
|
-
if (nodeConfig.enable === false) {
|
|
248
|
-
return undefined;
|
|
249
|
-
}
|
|
250
|
-
if (!provider.config.nodeFilter) {
|
|
251
|
-
isValid = true;
|
|
252
|
-
}
|
|
253
|
-
else if ((0, filters_1.validateFilter)(provider.config.nodeFilter)) {
|
|
254
|
-
isValid =
|
|
255
|
-
typeof provider.config.nodeFilter === 'function'
|
|
256
|
-
? provider.config.nodeFilter(nodeConfig)
|
|
257
|
-
: true;
|
|
258
|
-
}
|
|
259
|
-
if (isValid) {
|
|
260
|
-
if (config.binPath &&
|
|
261
|
-
nodeConfig.type === types_1.NodeTypeEnum.Shadowsocksr &&
|
|
262
|
-
config.binPath[nodeConfig.type]) {
|
|
263
|
-
nodeConfig.binPath = config.binPath[nodeConfig.type];
|
|
264
|
-
nodeConfig.localPort = provider.nextPort;
|
|
265
|
-
}
|
|
266
|
-
nodeConfig.provider = provider;
|
|
267
|
-
nodeConfig.surgeConfig = Object.freeze({
|
|
268
|
-
...config.surgeConfig,
|
|
269
|
-
...nodeConfig.surgeConfig,
|
|
270
|
-
});
|
|
271
|
-
nodeConfig.clashConfig = Object.freeze({
|
|
272
|
-
...config.clashConfig,
|
|
273
|
-
...nodeConfig.clashConfig,
|
|
274
|
-
});
|
|
275
|
-
nodeConfig.quantumultXConfig = Object.freeze({
|
|
276
|
-
...config.quantumultXConfig,
|
|
277
|
-
...nodeConfig.quantumultXConfig,
|
|
278
|
-
});
|
|
279
|
-
nodeConfig.surfboardConfig = Object.freeze({
|
|
280
|
-
...config.surfboardConfig,
|
|
281
|
-
...nodeConfig.surfboardConfig,
|
|
282
|
-
});
|
|
283
|
-
if (provider.config.renameNode) {
|
|
284
|
-
const newName = provider.config.renameNode(nodeConfig.nodeName);
|
|
285
|
-
if (newName) {
|
|
286
|
-
nodeConfig.nodeName = newName;
|
|
287
|
-
}
|
|
288
|
-
}
|
|
289
|
-
if (provider.config.addFlag) {
|
|
290
|
-
// 给节点名加国旗
|
|
291
|
-
nodeConfig.nodeName = (0, flag_1.prependFlag)(nodeConfig.nodeName, provider.config.removeExistingFlag);
|
|
292
|
-
}
|
|
293
|
-
else if (provider.config.removeExistingFlag) {
|
|
294
|
-
// 去掉名称中的国旗
|
|
295
|
-
nodeConfig.nodeName = (0, flag_1.removeFlag)(nodeConfig.nodeName);
|
|
296
|
-
}
|
|
297
|
-
// TCP Fast Open
|
|
298
|
-
if (typeof nodeConfig.tfo === 'undefined' && provider.config.tfo) {
|
|
299
|
-
nodeConfig.tfo = provider.config.tfo;
|
|
300
|
-
}
|
|
301
|
-
// MPTCP
|
|
302
|
-
if (typeof nodeConfig.mptcp === 'undefined' &&
|
|
303
|
-
provider.config.mptcp) {
|
|
304
|
-
nodeConfig.mptcp = provider.config.mptcp;
|
|
305
|
-
}
|
|
306
|
-
// ECN
|
|
307
|
-
if (typeof nodeConfig.ecn === 'undefined' && provider.config.ecn) {
|
|
308
|
-
nodeConfig.ecn = provider.config.ecn;
|
|
309
|
-
}
|
|
310
|
-
// Block QUIC
|
|
311
|
-
if (typeof nodeConfig.blockQuic === 'undefined' &&
|
|
312
|
-
provider.config.blockQuic) {
|
|
313
|
-
nodeConfig.blockQuic = provider.config.blockQuic;
|
|
314
|
-
}
|
|
315
|
-
// Underlying Proxy
|
|
316
|
-
if (!nodeConfig.underlyingProxy && provider.config.underlyingProxy) {
|
|
317
|
-
nodeConfig.underlyingProxy = provider.config.underlyingProxy;
|
|
318
|
-
}
|
|
319
|
-
// Check whether the hostname resolves in case of blocking clash's node heurestic
|
|
320
|
-
if (config?.checkHostname &&
|
|
321
|
-
'hostname' in nodeConfig &&
|
|
322
|
-
!(0, utils_1.isIp)(nodeConfig.hostname)) {
|
|
323
|
-
try {
|
|
324
|
-
const domains = await (0, dns_1.resolveDomain)(nodeConfig.hostname);
|
|
325
|
-
/* istanbul ignore next */
|
|
326
|
-
if (domains.length < 1) {
|
|
327
|
-
logger_1.logger.warn(`DNS 解析结果中 ${nodeConfig.hostname} 未有对应 IP 地址,将忽略该节点`);
|
|
328
|
-
return undefined;
|
|
329
|
-
} /* istanbul ignore next */
|
|
330
|
-
else {
|
|
331
|
-
nodeConfig.hostnameIp = domains;
|
|
332
|
-
}
|
|
333
|
-
}
|
|
334
|
-
catch (err) /* istanbul ignore next */ {
|
|
335
|
-
logger_1.logger.warn(`${nodeConfig.hostname} 无法解析,将忽略该节点`);
|
|
336
|
-
return undefined;
|
|
337
|
-
}
|
|
338
|
-
}
|
|
339
|
-
if (config?.resolveHostname &&
|
|
340
|
-
'hostname' in nodeConfig &&
|
|
341
|
-
!(0, utils_1.isIp)(nodeConfig.hostname)) {
|
|
342
|
-
/* istanbul ignore next */
|
|
343
|
-
if (nodeConfig.hostnameIp) {
|
|
344
|
-
nodeConfig.hostname = nodeConfig.hostnameIp[0];
|
|
345
|
-
} /* istanbul ignore next */
|
|
346
|
-
else {
|
|
347
|
-
try {
|
|
348
|
-
nodeConfig.hostnameIp = await (0, dns_1.resolveDomain)(nodeConfig.hostname);
|
|
349
|
-
nodeConfig.hostname = nodeConfig.hostnameIp[0];
|
|
350
|
-
}
|
|
351
|
-
catch (err) {
|
|
352
|
-
logger_1.logger.warn(`${nodeConfig.hostname} 无法解析,将忽略该域名的解析结果`);
|
|
353
|
-
}
|
|
354
|
-
}
|
|
355
|
-
}
|
|
356
|
-
return nodeConfig;
|
|
357
|
-
}
|
|
358
|
-
return undefined;
|
|
359
|
-
})).filter((item) => item !== undefined);
|
|
360
|
-
this.nodeConfigListMap.set(providerName, nodeConfigList);
|
|
361
|
-
this.initProgress++;
|
|
362
|
-
this.emit('initProvider:end', {
|
|
363
|
-
artifact: this.artifact,
|
|
364
|
-
providerName,
|
|
365
|
-
provider,
|
|
366
|
-
});
|
|
367
|
-
}
|
|
368
|
-
}
|
|
369
|
-
exports.Artifact = Artifact;
|
|
370
|
-
//# sourceMappingURL=artifact.js.map
|