surgio 2.15.0 → 2.18.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 (36) hide show
  1. package/CHANGELOG.md +29 -0
  2. package/build/generator/artifact.d.ts +3 -1
  3. package/build/generator/artifact.js +7 -5
  4. package/build/index.d.ts +2 -1
  5. package/build/index.js +6 -3
  6. package/build/provider/ClashProvider.d.ts +9 -2
  7. package/build/provider/ClashProvider.js +15 -7
  8. package/build/provider/CustomProvider.js +14 -5
  9. package/build/provider/Provider.d.ts +4 -1
  10. package/build/provider/Provider.js +36 -9
  11. package/build/provider/ShadowsocksJsonSubscribeProvider.d.ts +5 -3
  12. package/build/provider/ShadowsocksJsonSubscribeProvider.js +42 -4
  13. package/build/provider/ShadowsocksSubscribeProvider.d.ts +4 -2
  14. package/build/provider/ShadowsocksSubscribeProvider.js +7 -5
  15. package/build/provider/ShadowsocksrSubscribeProvider.d.ts +4 -2
  16. package/build/provider/ShadowsocksrSubscribeProvider.js +7 -5
  17. package/build/provider/SsdProvider.d.ts +4 -2
  18. package/build/provider/SsdProvider.js +7 -5
  19. package/build/provider/TrojanProvider.d.ts +9 -2
  20. package/build/provider/TrojanProvider.js +15 -6
  21. package/build/provider/V2rayNSubscribeProvider.d.ts +11 -2
  22. package/build/provider/V2rayNSubscribeProvider.js +16 -14
  23. package/build/types.d.ts +3 -2
  24. package/build/utils/cache.d.ts +4 -3
  25. package/build/utils/cache.js +17 -9
  26. package/build/utils/clash.d.ts +1 -1
  27. package/build/utils/dns.js +5 -5
  28. package/build/utils/env-flag.js +1 -1
  29. package/build/utils/index.d.ts +5 -8
  30. package/build/utils/index.js +8 -269
  31. package/build/utils/loon.js +50 -18
  32. package/build/utils/patch-proxy.js +7 -2
  33. package/build/utils/quantumult.d.ts +6 -0
  34. package/build/utils/quantumult.js +255 -0
  35. package/build/utils/surge.d.ts +1 -1
  36. package/package.json +2 -3
@@ -0,0 +1,255 @@
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.getQuantumultXNodes = exports.getQuantumultNodes = void 0;
7
+ const logger_1 = require("@surgio/logger");
8
+ const lodash_1 = __importDefault(require("lodash"));
9
+ const constant_1 = require("../constant");
10
+ const types_1 = require("../types");
11
+ const filter_1 = require("./filter");
12
+ const index_1 = require("./index");
13
+ const logger = (0, logger_1.createLogger)({ service: 'surgio:utils:quantumult' });
14
+ const getQuantumultNodes = function (list, groupName = 'Surgio', filter) {
15
+ // istanbul ignore next
16
+ if (arguments.length === 3 && typeof filter === 'undefined') {
17
+ throw new Error(constant_1.ERR_INVALID_FILTER);
18
+ }
19
+ function getHeader(wsHeaders) {
20
+ return Object.keys(wsHeaders)
21
+ .map((headerKey) => `${headerKey}:${wsHeaders[headerKey]}`)
22
+ .join('[Rr][Nn]');
23
+ }
24
+ const result = (0, filter_1.applyFilter)(list, filter)
25
+ .map((nodeConfig) => {
26
+ switch (nodeConfig.type) {
27
+ case types_1.NodeTypeEnum.Vmess: {
28
+ const config = [
29
+ 'vmess',
30
+ nodeConfig.hostname,
31
+ nodeConfig.port,
32
+ nodeConfig.method === 'auto'
33
+ ? 'chacha20-ietf-poly1305'
34
+ : nodeConfig.method,
35
+ JSON.stringify(nodeConfig.uuid),
36
+ nodeConfig.alterId,
37
+ `group=${groupName}`,
38
+ `over-tls=${nodeConfig.tls === true ? 'true' : 'false'}`,
39
+ `certificate=1`,
40
+ `obfs=${nodeConfig.network}`,
41
+ `obfs-path=${JSON.stringify(nodeConfig.path || '/')}`,
42
+ `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']))))}`,
43
+ ]
44
+ .filter((value) => !!value)
45
+ .join(',');
46
+ return ('vmess://' + (0, index_1.toBase64)([nodeConfig.nodeName, config].join(' = ')));
47
+ }
48
+ case types_1.NodeTypeEnum.Shadowsocks: {
49
+ return (0, index_1.getShadowsocksNodes)([nodeConfig], groupName);
50
+ }
51
+ case types_1.NodeTypeEnum.Shadowsocksr:
52
+ return (0, index_1.getShadowsocksrNodes)([nodeConfig], groupName);
53
+ case types_1.NodeTypeEnum.HTTPS: {
54
+ const config = [
55
+ nodeConfig.nodeName,
56
+ [
57
+ 'http',
58
+ `upstream-proxy-address=${nodeConfig.hostname}`,
59
+ `upstream-proxy-port=${nodeConfig.port}`,
60
+ 'upstream-proxy-auth=true',
61
+ `upstream-proxy-username=${nodeConfig.username}`,
62
+ `upstream-proxy-password=${nodeConfig.password}`,
63
+ 'over-tls=true',
64
+ 'certificate=1',
65
+ ].join(', '),
66
+ ].join(' = ');
67
+ return 'http://' + (0, index_1.toBase64)(config);
68
+ }
69
+ // istanbul ignore next
70
+ default:
71
+ logger.warn(`不支持为 Quantumult 生成 ${nodeConfig.type} 的节点,节点 ${nodeConfig.nodeName} 会被省略`);
72
+ return void 0;
73
+ }
74
+ })
75
+ .filter((item) => item !== undefined);
76
+ return result.join('\n');
77
+ };
78
+ exports.getQuantumultNodes = getQuantumultNodes;
79
+ /**
80
+ * @see https://github.com/crossutility/Quantumult-X/blob/master/sample.conf
81
+ */
82
+ const getQuantumultXNodes = function (list, filter) {
83
+ // istanbul ignore next
84
+ if (arguments.length === 2 && typeof filter === 'undefined') {
85
+ throw new Error(constant_1.ERR_INVALID_FILTER);
86
+ }
87
+ const result = (0, filter_1.applyFilter)(list, filter)
88
+ .map((nodeConfig) => {
89
+ var _a;
90
+ switch (nodeConfig.type) {
91
+ case types_1.NodeTypeEnum.Vmess: {
92
+ const config = [
93
+ `${nodeConfig.hostname}:${nodeConfig.port}`,
94
+ // method 为 auto 时 qx 会无法识别
95
+ nodeConfig.method === 'auto'
96
+ ? `method=chacha20-ietf-poly1305`
97
+ : `method=${nodeConfig.method}`,
98
+ `password=${nodeConfig.uuid}`,
99
+ ...(nodeConfig['udp-relay'] ? ['udp-relay=true'] : []),
100
+ ...(nodeConfig.tfo ? ['fast-open=true'] : []),
101
+ ...(((_a = nodeConfig.quantumultXConfig) === null || _a === void 0 ? void 0 : _a.vmessAEAD)
102
+ ? ['aead=true']
103
+ : ['aead=false']),
104
+ ];
105
+ switch (nodeConfig.network) {
106
+ case 'ws':
107
+ if (nodeConfig.tls) {
108
+ config.push(`obfs=wss`);
109
+ if (nodeConfig.skipCertVerify) {
110
+ config.push('tls-verification=false');
111
+ }
112
+ else {
113
+ config.push('tls-verification=true');
114
+ }
115
+ // istanbul ignore next
116
+ if (nodeConfig.tls13) {
117
+ config.push(`tls13=true`);
118
+ }
119
+ }
120
+ else {
121
+ config.push(`obfs=ws`);
122
+ }
123
+ config.push(`obfs-uri=${nodeConfig.path || '/'}`);
124
+ config.push(`obfs-host=${nodeConfig.host || nodeConfig.hostname}`);
125
+ break;
126
+ case 'tcp':
127
+ if (nodeConfig.tls) {
128
+ config.push(`obfs=over-tls`);
129
+ if (nodeConfig.skipCertVerify) {
130
+ config.push('tls-verification=false');
131
+ }
132
+ else {
133
+ config.push('tls-verification=true');
134
+ }
135
+ // istanbul ignore next
136
+ if (nodeConfig.tls13) {
137
+ config.push(`tls13=true`);
138
+ }
139
+ }
140
+ break;
141
+ default:
142
+ // do nothing
143
+ }
144
+ config.push(`tag=${nodeConfig.nodeName}`);
145
+ // istanbul ignore next
146
+ if (nodeConfig.wsHeaders &&
147
+ Object.keys(nodeConfig.wsHeaders).length > 1) {
148
+ logger.warn(`Quantumult X 不支持自定义额外的 Header 字段,节点 ${nodeConfig.nodeName} 可能不可用`);
149
+ }
150
+ return `vmess=${config.join(', ')}`;
151
+ }
152
+ case types_1.NodeTypeEnum.Shadowsocks: {
153
+ const config = [
154
+ `${nodeConfig.hostname}:${nodeConfig.port}`,
155
+ ...(0, index_1.pickAndFormatStringList)(nodeConfig, ['method', 'password']),
156
+ ...(nodeConfig.obfs && ['http', 'tls'].includes(nodeConfig.obfs)
157
+ ? [
158
+ `obfs=${nodeConfig.obfs}`,
159
+ `obfs-host=${nodeConfig['obfs-host']}`,
160
+ ]
161
+ : []),
162
+ ...(nodeConfig.obfs && ['ws', 'wss'].includes(nodeConfig.obfs)
163
+ ? [
164
+ `obfs=${nodeConfig.obfs}`,
165
+ `obfs-host=${nodeConfig['obfs-host'] || nodeConfig.hostname}`,
166
+ `obfs-uri=${nodeConfig['obfs-uri'] || '/'}`,
167
+ ]
168
+ : []),
169
+ ...(nodeConfig['udp-relay'] ? [`udp-relay=true`] : []),
170
+ ...(nodeConfig.tfo ? [`fast-open=${nodeConfig.tfo}`] : []),
171
+ ];
172
+ if (nodeConfig.obfs === 'wss') {
173
+ if (nodeConfig.skipCertVerify) {
174
+ config.push('tls-verification=false');
175
+ }
176
+ else {
177
+ config.push('tls-verification=true');
178
+ }
179
+ if (nodeConfig.tls13) {
180
+ config.push('tls13=true');
181
+ }
182
+ }
183
+ // istanbul ignore next
184
+ if (nodeConfig.wsHeaders &&
185
+ Object.keys(lodash_1.default.omit(nodeConfig.wsHeaders, ['host'])).length > 0) {
186
+ logger.warn(`Quantumult X 不支持自定义额外的 Header 字段,节点 ${nodeConfig.nodeName} 可能不可用`);
187
+ }
188
+ config.push(`tag=${nodeConfig.nodeName}`);
189
+ return `shadowsocks=${config.join(', ')}`;
190
+ }
191
+ case types_1.NodeTypeEnum.Shadowsocksr: {
192
+ const config = [
193
+ `${nodeConfig.hostname}:${nodeConfig.port}`,
194
+ ...(0, index_1.pickAndFormatStringList)(nodeConfig, ['method', 'password']),
195
+ `ssr-protocol=${nodeConfig.protocol}`,
196
+ `ssr-protocol-param=${nodeConfig.protoparam}`,
197
+ `obfs=${nodeConfig.obfs}`,
198
+ `obfs-host=${nodeConfig.obfsparam}`,
199
+ ...(nodeConfig['udp-relay'] ? [`udp-relay=true`] : []),
200
+ ...(nodeConfig.tfo ? [`fast-open=${nodeConfig.tfo}`] : []),
201
+ `tag=${nodeConfig.nodeName}`,
202
+ ].join(', ');
203
+ return `shadowsocks=${config}`;
204
+ }
205
+ case types_1.NodeTypeEnum.HTTP:
206
+ case types_1.NodeTypeEnum.HTTPS: {
207
+ const config = [
208
+ `${nodeConfig.hostname}:${nodeConfig.port}`,
209
+ ...(0, index_1.pickAndFormatStringList)(nodeConfig, ['username', 'password']),
210
+ ...(nodeConfig.tfo ? [`fast-open=${nodeConfig.tfo}`] : []),
211
+ ];
212
+ if (nodeConfig.type === types_1.NodeTypeEnum.HTTPS) {
213
+ config.push('over-tls=true', `tls-verification=${nodeConfig.skipCertVerify !== true}`, ...(nodeConfig.tls13 ? [`tls13=${nodeConfig.tls13}`] : []));
214
+ }
215
+ config.push(`tag=${nodeConfig.nodeName}`);
216
+ return `http=${config.join(', ')}`;
217
+ }
218
+ case types_1.NodeTypeEnum.Trojan: {
219
+ const config = [
220
+ `${nodeConfig.hostname}:${nodeConfig.port}`,
221
+ ...(0, index_1.pickAndFormatStringList)(nodeConfig, ['password']),
222
+ 'over-tls=true',
223
+ `tls-verification=${nodeConfig.skipCertVerify !== true}`,
224
+ ...(nodeConfig.sni ? [`tls-host=${nodeConfig.sni}`] : []),
225
+ ...(nodeConfig.tfo ? [`fast-open=${nodeConfig.tfo}`] : []),
226
+ ...(nodeConfig['udp-relay'] ? [`udp-relay=true`] : []),
227
+ ...(nodeConfig.tls13 ? [`tls13=${nodeConfig.tls13}`] : []),
228
+ ];
229
+ if (nodeConfig.network === 'ws') {
230
+ config.push('obfs=wss');
231
+ if (nodeConfig.wsPath) {
232
+ config.push(`obfs-uri=${nodeConfig.wsPath}`);
233
+ }
234
+ if (nodeConfig.wsHeaders && nodeConfig.wsHeaders.host) {
235
+ config.push(`obfs-host=${nodeConfig.wsHeaders.host}`);
236
+ // istanbul ignore next
237
+ if (Object.keys(lodash_1.default.omit(nodeConfig.wsHeaders, ['host'])).length > 0) {
238
+ logger.warn(`Quantumult X 不支持自定义额外的 Header 字段,节点 ${nodeConfig.nodeName} 可能不可用`);
239
+ }
240
+ }
241
+ }
242
+ config.push(`tag=${nodeConfig.nodeName}`);
243
+ return `trojan=${config.join(', ')}`;
244
+ }
245
+ // istanbul ignore next
246
+ default:
247
+ logger.warn(`不支持为 QuantumultX 生成 ${nodeConfig.type} 的节点,节点 ${nodeConfig.nodeName} 会被省略`);
248
+ return void 0;
249
+ }
250
+ })
251
+ .filter((item) => item !== undefined);
252
+ return result.join('\n');
253
+ };
254
+ exports.getQuantumultXNodes = getQuantumultXNodes;
255
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVhbnR1bXVsdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL2xpYi91dGlscy9xdWFudHVtdWx0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLDJDQUE4QztBQUM5QyxvREFBdUI7QUFFdkIsMENBQTBEO0FBQzFELG9DQVNrQjtBQUNsQixxQ0FBdUM7QUFDdkMsbUNBS2lCO0FBRWpCLE1BQU0sTUFBTSxHQUFHLElBQUEscUJBQVksRUFBQyxFQUFFLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxDQUFDLENBQUM7QUFFN0QsTUFBTSxrQkFBa0IsR0FBRyxVQUNoQyxJQUtDLEVBQ0QsU0FBUyxHQUFHLFFBQVEsRUFDcEIsTUFBc0Q7SUFFdEQsdUJBQXVCO0lBQ3ZCLElBQUksU0FBUyxDQUFDLE1BQU0sS0FBSyxDQUFDLElBQUksT0FBTyxNQUFNLEtBQUssV0FBVyxFQUFFO1FBQzNELE1BQU0sSUFBSSxLQUFLLENBQUMsNkJBQWtCLENBQUMsQ0FBQztLQUNyQztJQUVELFNBQVMsU0FBUyxDQUFDLFNBQWlDO1FBQ2xELE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUM7YUFDMUIsR0FBRyxDQUFDLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxHQUFHLFNBQVMsSUFBSSxTQUFTLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQzthQUMxRCxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDdEIsQ0FBQztJQUVELE1BQU0sTUFBTSxHQUEwQixJQUFBLG9CQUFXLEVBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQztTQUM1RCxHQUFHLENBQUMsQ0FBQyxVQUFVLEVBQXNCLEVBQUU7UUFDdEMsUUFBUSxVQUFVLENBQUMsSUFBSSxFQUFFO1lBQ3ZCLEtBQUssb0JBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDdkIsTUFBTSxNQUFNLEdBQUc7b0JBQ2IsT0FBTztvQkFDUCxVQUFVLENBQUMsUUFBUTtvQkFDbkIsVUFBVSxDQUFDLElB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
@@ -3,4 +3,4 @@ export declare const getSurgeExtendHeaders: (wsHeaders: Record<string, string>)
3
3
  /**
4
4
  * @see https://manual.nssurge.com/policy/proxy.html
5
5
  */
6
- export declare const getSurgeNodes: (list: ReadonlyArray<PossibleNodeConfigType>, filter?: NodeFilterType | SortedNodeNameFilterType | undefined) => string;
6
+ export declare const getSurgeNodes: (list: ReadonlyArray<PossibleNodeConfigType>, filter?: SortedNodeNameFilterType | NodeFilterType | undefined) => string;
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "surgio",
3
3
  "description": "Generating rules for Surge, Clash, Quantumult like a PRO",
4
- "version": "2.15.0",
4
+ "version": "2.18.0",
5
5
  "main": "build/index.js",
6
6
  "typings": "build/index.d.ts",
7
7
  "bin": {
@@ -65,9 +65,9 @@
65
65
  "joi": "^17.1.1",
66
66
  "listr": "^0.14.3",
67
67
  "lodash": "^4.17.19",
68
- "lru-cache": "^6.0.0",
69
68
  "merge-stream": "^2.0.0",
70
69
  "ms": "^2.1.3",
70
+ "node-cache": "^5.1.2",
71
71
  "node-dir": "^0.1.17",
72
72
  "nunjucks": "^3.2.1",
73
73
  "ora": "^5.1.0",
@@ -92,7 +92,6 @@
92
92
  "@types/inquirer": "^7.3.0",
93
93
  "@types/listr": "^0.14.2",
94
94
  "@types/lodash": "^4.14.174",
95
- "@types/lru-cache": "^5.1.0",
96
95
  "@types/node": "^16",
97
96
  "@types/nunjucks": "^3.2.0",
98
97
  "@types/sinon": "^10.0.6",