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.
Files changed (259) hide show
  1. package/package.json +48 -50
  2. package/build/base-command.d.ts +0 -20
  3. package/build/base-command.js +0 -75
  4. package/build/base-command.js.map +0 -1
  5. package/build/commands/check.d.ts +0 -10
  6. package/build/commands/check.js +0 -97
  7. package/build/commands/check.js.map +0 -1
  8. package/build/commands/clean-cache.d.ts +0 -6
  9. package/build/commands/clean-cache.js +0 -28
  10. package/build/commands/clean-cache.js.map +0 -1
  11. package/build/commands/doctor.d.ts +0 -6
  12. package/build/commands/doctor.js +0 -20
  13. package/build/commands/doctor.js.map +0 -1
  14. package/build/commands/generate.d.ts +0 -7
  15. package/build/commands/generate.js +0 -100
  16. package/build/commands/generate.js.map +0 -1
  17. package/build/commands/lint.d.ts +0 -6
  18. package/build/commands/lint.js +0 -37
  19. package/build/commands/lint.js.map +0 -1
  20. package/build/commands/new.d.ts +0 -6
  21. package/build/commands/new.js +0 -37
  22. package/build/commands/new.js.map +0 -1
  23. package/build/commands/subscriptions.d.ts +0 -7
  24. package/build/commands/subscriptions.js +0 -105
  25. package/build/commands/subscriptions.js.map +0 -1
  26. package/build/commands/upload.d.ts +0 -6
  27. package/build/commands/upload.js +0 -91
  28. package/build/commands/upload.js.map +0 -1
  29. package/build/config.d.ts +0 -6
  30. package/build/config.js +0 -156
  31. package/build/config.js.map +0 -1
  32. package/build/configurables.d.ts +0 -89
  33. package/build/configurables.js +0 -52
  34. package/build/configurables.js.map +0 -1
  35. package/build/constant/constant.d.ts +0 -36
  36. package/build/constant/constant.js +0 -160
  37. package/build/constant/constant.js.map +0 -1
  38. package/build/constant/env.d.ts +0 -9
  39. package/build/constant/env.js +0 -13
  40. package/build/constant/env.js.map +0 -1
  41. package/build/constant/error.d.ts +0 -1
  42. package/build/constant/error.js +0 -5
  43. package/build/constant/error.js.map +0 -1
  44. package/build/constant/index.d.ts +0 -3
  45. package/build/constant/index.js +0 -20
  46. package/build/constant/index.js.map +0 -1
  47. package/build/filters/classes.d.ts +0 -13
  48. package/build/filters/classes.js +0 -42
  49. package/build/filters/classes.js.map +0 -1
  50. package/build/filters/filters.d.ts +0 -25
  51. package/build/filters/filters.js +0 -107
  52. package/build/filters/filters.js.map +0 -1
  53. package/build/filters/index.d.ts +0 -2
  54. package/build/filters/index.js +0 -42
  55. package/build/filters/index.js.map +0 -1
  56. package/build/filters/utils.d.ts +0 -16
  57. package/build/filters/utils.js +0 -159
  58. package/build/filters/utils.js.map +0 -1
  59. package/build/generator/artifact.d.ts +0 -102
  60. package/build/generator/artifact.js +0 -370
  61. package/build/generator/artifact.js.map +0 -1
  62. package/build/generator/index.d.ts +0 -3
  63. package/build/generator/index.js +0 -25
  64. package/build/generator/index.js.map +0 -1
  65. package/build/generator/json-template.d.ts +0 -11
  66. package/build/generator/json-template.js +0 -66
  67. package/build/generator/json-template.js.map +0 -1
  68. package/build/generator/template.d.ts +0 -8
  69. package/build/generator/template.js +0 -234
  70. package/build/generator/template.js.map +0 -1
  71. package/build/hooks/init.d.ts +0 -3
  72. package/build/hooks/init.js +0 -43
  73. package/build/hooks/init.js.map +0 -1
  74. package/build/index.d.ts +0 -76
  75. package/build/index.js +0 -74
  76. package/build/index.js.map +0 -1
  77. package/build/internal.d.ts +0 -5
  78. package/build/internal.js +0 -25
  79. package/build/internal.js.map +0 -1
  80. package/build/misc/deprecation.d.ts +0 -0
  81. package/build/misc/deprecation.js +0 -2
  82. package/build/misc/deprecation.js.map +0 -1
  83. package/build/misc/flag_cn.d.ts +0 -56
  84. package/build/misc/flag_cn.js +0 -154
  85. package/build/misc/flag_cn.js.map +0 -1
  86. package/build/provider/BlackSSLProvider.d.ts +0 -11
  87. package/build/provider/BlackSSLProvider.js +0 -93
  88. package/build/provider/BlackSSLProvider.js.map +0 -1
  89. package/build/provider/ClashProvider.d.ts +0 -24
  90. package/build/provider/ClashProvider.js +0 -476
  91. package/build/provider/ClashProvider.js.map +0 -1
  92. package/build/provider/CustomProvider.d.ts +0 -10
  93. package/build/provider/CustomProvider.js +0 -144
  94. package/build/provider/CustomProvider.js.map +0 -1
  95. package/build/provider/Provider.d.ts +0 -17
  96. package/build/provider/Provider.js +0 -121
  97. package/build/provider/Provider.js.map +0 -1
  98. package/build/provider/ShadowsocksJsonSubscribeProvider.d.ts +0 -11
  99. package/build/provider/ShadowsocksJsonSubscribeProvider.js +0 -86
  100. package/build/provider/ShadowsocksJsonSubscribeProvider.js.map +0 -1
  101. package/build/provider/ShadowsocksSubscribeProvider.d.ts +0 -18
  102. package/build/provider/ShadowsocksSubscribeProvider.js +0 -84
  103. package/build/provider/ShadowsocksSubscribeProvider.js.map +0 -1
  104. package/build/provider/ShadowsocksrSubscribeProvider.d.ts +0 -15
  105. package/build/provider/ShadowsocksrSubscribeProvider.js +0 -93
  106. package/build/provider/ShadowsocksrSubscribeProvider.js.map +0 -1
  107. package/build/provider/SsdProvider.d.ts +0 -39
  108. package/build/provider/SsdProvider.js +0 -138
  109. package/build/provider/SsdProvider.js.map +0 -1
  110. package/build/provider/TrojanProvider.d.ts +0 -24
  111. package/build/provider/TrojanProvider.js +0 -98
  112. package/build/provider/TrojanProvider.js.map +0 -1
  113. package/build/provider/V2rayNSubscribeProvider.d.ts +0 -25
  114. package/build/provider/V2rayNSubscribeProvider.js +0 -181
  115. package/build/provider/V2rayNSubscribeProvider.js.map +0 -1
  116. package/build/provider/index.d.ts +0 -17
  117. package/build/provider/index.js +0 -54
  118. package/build/provider/index.js.map +0 -1
  119. package/build/provider/types.d.ts +0 -18
  120. package/build/provider/types.js +0 -3
  121. package/build/provider/types.js.map +0 -1
  122. package/build/redis.d.ts +0 -9
  123. package/build/redis.js +0 -63
  124. package/build/redis.js.map +0 -1
  125. package/build/types.d.ts +0 -138
  126. package/build/types.js +0 -31
  127. package/build/types.js.map +0 -1
  128. package/build/utils/cache.d.ts +0 -23
  129. package/build/utils/cache.js +0 -98
  130. package/build/utils/cache.js.map +0 -1
  131. package/build/utils/clash.d.ts +0 -3
  132. package/build/utils/clash.js +0 -451
  133. package/build/utils/clash.js.map +0 -1
  134. package/build/utils/constant.d.ts +0 -1
  135. package/build/utils/constant.js +0 -19
  136. package/build/utils/constant.js.map +0 -1
  137. package/build/utils/dns.d.ts +0 -3
  138. package/build/utils/dns.js +0 -51
  139. package/build/utils/dns.js.map +0 -1
  140. package/build/utils/doctor.d.ts +0 -2
  141. package/build/utils/doctor.js +0 -38
  142. package/build/utils/doctor.js.map +0 -1
  143. package/build/utils/env-flag.d.ts +0 -9
  144. package/build/utils/env-flag.js +0 -41
  145. package/build/utils/env-flag.js.map +0 -1
  146. package/build/utils/error-helper.d.ts +0 -2
  147. package/build/utils/error-helper.js +0 -62
  148. package/build/utils/error-helper.js.map +0 -1
  149. package/build/utils/errors.d.ts +0 -19
  150. package/build/utils/errors.js +0 -60
  151. package/build/utils/errors.js.map +0 -1
  152. package/build/utils/flag.d.ts +0 -3
  153. package/build/utils/flag.js +0 -79
  154. package/build/utils/flag.js.map +0 -1
  155. package/build/utils/http-client.d.ts +0 -3
  156. package/build/utils/http-client.js +0 -92
  157. package/build/utils/http-client.js.map +0 -1
  158. package/build/utils/index.d.ts +0 -90
  159. package/build/utils/index.js +0 -529
  160. package/build/utils/index.js.map +0 -1
  161. package/build/utils/linter.d.ts +0 -4
  162. package/build/utils/linter.js +0 -49
  163. package/build/utils/linter.js.map +0 -1
  164. package/build/utils/loon.d.ts +0 -3
  165. package/build/utils/loon.js +0 -236
  166. package/build/utils/loon.js.map +0 -1
  167. package/build/utils/quantumult.d.ts +0 -6
  168. package/build/utils/quantumult.js +0 -240
  169. package/build/utils/quantumult.js.map +0 -1
  170. package/build/utils/relayable-url.d.ts +0 -1
  171. package/build/utils/relayable-url.js +0 -18
  172. package/build/utils/relayable-url.js.map +0 -1
  173. package/build/utils/remote-snippet.d.ts +0 -8
  174. package/build/utils/remote-snippet.js +0 -208
  175. package/build/utils/remote-snippet.js.map +0 -1
  176. package/build/utils/singbox.d.ts +0 -3
  177. package/build/utils/singbox.js +0 -377
  178. package/build/utils/singbox.js.map +0 -1
  179. package/build/utils/ss.d.ts +0 -3
  180. package/build/utils/ss.js +0 -97
  181. package/build/utils/ss.js.map +0 -1
  182. package/build/utils/ssr.d.ts +0 -7
  183. package/build/utils/ssr.js +0 -53
  184. package/build/utils/ssr.js.map +0 -1
  185. package/build/utils/subscription.d.ts +0 -11
  186. package/build/utils/subscription.js +0 -68
  187. package/build/utils/subscription.js.map +0 -1
  188. package/build/utils/surfboard.d.ts +0 -7
  189. package/build/utils/surfboard.js +0 -184
  190. package/build/utils/surfboard.js.map +0 -1
  191. package/build/utils/surge.d.ts +0 -8
  192. package/build/utils/surge.js +0 -407
  193. package/build/utils/surge.js.map +0 -1
  194. package/build/utils/time.d.ts +0 -1
  195. package/build/utils/time.js +0 -6
  196. package/build/utils/time.js.map +0 -1
  197. package/build/utils/tmp-helper.d.ts +0 -30
  198. package/build/utils/tmp-helper.js +0 -102
  199. package/build/utils/tmp-helper.js.map +0 -1
  200. package/build/utils/trojan.d.ts +0 -2
  201. package/build/utils/trojan.js +0 -38
  202. package/build/utils/trojan.js.map +0 -1
  203. package/build/utils/useragent.d.ts +0 -18
  204. package/build/utils/useragent.js +0 -210
  205. package/build/utils/useragent.js.map +0 -1
  206. package/build/validators/artifact.d.ts +0 -47
  207. package/build/validators/artifact.js +0 -27
  208. package/build/validators/artifact.js.map +0 -1
  209. package/build/validators/common.d.ts +0 -377
  210. package/build/validators/common.js +0 -106
  211. package/build/validators/common.js.map +0 -1
  212. package/build/validators/filter.d.ts +0 -10
  213. package/build/validators/filter.js +0 -15
  214. package/build/validators/filter.js.map +0 -1
  215. package/build/validators/hooks.d.ts +0 -9
  216. package/build/validators/hooks.js +0 -11
  217. package/build/validators/hooks.js.map +0 -1
  218. package/build/validators/http.d.ts +0 -366
  219. package/build/validators/http.js +0 -23
  220. package/build/validators/http.js.map +0 -1
  221. package/build/validators/hysteria2.d.ts +0 -196
  222. package/build/validators/hysteria2.js +0 -15
  223. package/build/validators/hysteria2.js.map +0 -1
  224. package/build/validators/index.d.ts +0 -17
  225. package/build/validators/index.js +0 -34
  226. package/build/validators/index.js.map +0 -1
  227. package/build/validators/provider.d.ts +0 -120
  228. package/build/validators/provider.js +0 -46
  229. package/build/validators/provider.js.map +0 -1
  230. package/build/validators/shadowsocks.d.ts +0 -252
  231. package/build/validators/shadowsocks.js +0 -31
  232. package/build/validators/shadowsocks.js.map +0 -1
  233. package/build/validators/shadowsocksr.d.ts +0 -184
  234. package/build/validators/shadowsocksr.js +0 -19
  235. package/build/validators/shadowsocksr.js.map +0 -1
  236. package/build/validators/snell.d.ts +0 -178
  237. package/build/validators/snell.js +0 -17
  238. package/build/validators/snell.js.map +0 -1
  239. package/build/validators/socks5.d.ts +0 -196
  240. package/build/validators/socks5.js +0 -15
  241. package/build/validators/socks5.js.map +0 -1
  242. package/build/validators/surgio-config.d.ts +0 -392
  243. package/build/validators/surgio-config.js +0 -101
  244. package/build/validators/surgio-config.js.map +0 -1
  245. package/build/validators/trojan.d.ts +0 -255
  246. package/build/validators/trojan.js +0 -16
  247. package/build/validators/trojan.js.map +0 -1
  248. package/build/validators/tuic.d.ts +0 -741
  249. package/build/validators/tuic.js +0 -21
  250. package/build/validators/tuic.js.map +0 -1
  251. package/build/validators/vless.d.ts +0 -389
  252. package/build/validators/vless.js +0 -31
  253. package/build/validators/vless.js.map +0 -1
  254. package/build/validators/vmess.d.ts +0 -425
  255. package/build/validators/vmess.js +0 -86
  256. package/build/validators/vmess.js.map +0 -1
  257. package/build/validators/wireguard.d.ts +0 -230
  258. package/build/validators/wireguard.js +0 -26
  259. package/build/validators/wireguard.js.map +0 -1
@@ -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":"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"}
@@ -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