surgio 2.25.3 → 3.0.0-alpha.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 (182) hide show
  1. package/bin/dev +17 -0
  2. package/bin/dev.cmd +3 -0
  3. package/bin/run +8 -0
  4. package/bin/run.cmd +3 -0
  5. package/build/base-command.d.ts +18 -0
  6. package/build/base-command.js +74 -0
  7. package/build/commands/check.d.ts +10 -0
  8. package/build/commands/check.js +88 -0
  9. package/build/commands/clean-cache.d.ts +6 -0
  10. package/build/commands/clean-cache.js +29 -0
  11. package/build/commands/doctor.d.ts +6 -0
  12. package/build/commands/doctor.js +21 -0
  13. package/build/commands/generate.d.ts +7 -0
  14. package/build/commands/generate.js +93 -0
  15. package/build/commands/lint.d.ts +6 -0
  16. package/build/commands/lint.js +36 -0
  17. package/build/commands/new.d.ts +6 -0
  18. package/build/commands/new.js +36 -0
  19. package/build/commands/subscriptions.d.ts +7 -0
  20. package/build/commands/subscriptions.js +96 -0
  21. package/build/commands/upload.d.ts +6 -0
  22. package/build/commands/upload.js +87 -0
  23. package/build/config.d.ts +6 -0
  24. package/build/config.js +151 -0
  25. package/build/constant/constant.d.ts +17 -16
  26. package/build/constant/constant.js +3 -2
  27. package/build/constant/env.js +1 -1
  28. package/build/constant/error.js +1 -1
  29. package/build/constant/index.js +1 -1
  30. package/build/generate.d.ts +0 -1
  31. package/build/generate.js +3 -65
  32. package/build/generator/artifact.d.ts +299 -64
  33. package/build/generator/artifact.js +90 -92
  34. package/build/generator/index.d.ts +2 -0
  35. package/build/generator/index.js +19 -0
  36. package/build/generator/template.js +2 -6
  37. package/build/hooks/init.d.ts +3 -0
  38. package/build/hooks/init.js +32 -0
  39. package/build/index.d.ts +55 -53
  40. package/build/index.js +13 -51
  41. package/build/internal.d.ts +4 -0
  42. package/build/internal.js +21 -0
  43. package/build/misc/deprecation.d.ts +1 -6
  44. package/build/misc/deprecation.js +1 -8
  45. package/build/misc/flag_cn.js +1 -1
  46. package/build/provider/BlackSSLProvider.d.ts +4 -3
  47. package/build/provider/BlackSSLProvider.js +24 -16
  48. package/build/provider/ClashProvider.d.ts +7 -10
  49. package/build/provider/ClashProvider.js +165 -76
  50. package/build/provider/CustomProvider.d.ts +4 -3
  51. package/build/provider/CustomProvider.js +81 -50
  52. package/build/provider/Provider.d.ts +9 -22
  53. package/build/provider/Provider.js +31 -69
  54. package/build/provider/ShadowsocksJsonSubscribeProvider.d.ts +4 -5
  55. package/build/provider/ShadowsocksJsonSubscribeProvider.js +27 -21
  56. package/build/provider/ShadowsocksSubscribeProvider.d.ts +5 -8
  57. package/build/provider/ShadowsocksSubscribeProvider.js +30 -27
  58. package/build/provider/ShadowsocksrSubscribeProvider.d.ts +5 -8
  59. package/build/provider/ShadowsocksrSubscribeProvider.js +30 -23
  60. package/build/provider/SsdProvider.d.ts +5 -8
  61. package/build/provider/SsdProvider.js +56 -39
  62. package/build/provider/TrojanProvider.d.ts +5 -8
  63. package/build/provider/TrojanProvider.js +37 -30
  64. package/build/provider/V2rayNSubscribeProvider.d.ts +4 -5
  65. package/build/provider/V2rayNSubscribeProvider.js +61 -33
  66. package/build/provider/index.d.ts +16 -2
  67. package/build/provider/index.js +12 -5
  68. package/build/provider/types.d.ts +10 -1
  69. package/build/provider/types.js +1 -1
  70. package/build/redis.js +1 -1
  71. package/build/types.d.ts +45 -236
  72. package/build/types.js +2 -1
  73. package/build/utils/cache.js +29 -27
  74. package/build/utils/clash.d.ts +204 -3
  75. package/build/utils/clash.js +247 -110
  76. package/build/utils/configurables.d.ts +71 -0
  77. package/build/utils/configurables.js +8 -0
  78. package/build/utils/constant.js +1 -1
  79. package/build/utils/dns.js +1 -1
  80. package/build/utils/doctor.d.ts +2 -0
  81. package/build/utils/doctor.js +38 -0
  82. package/build/utils/env-flag.js +2 -2
  83. package/build/utils/error-helper.d.ts +2 -2
  84. package/build/utils/error-helper.js +30 -16
  85. package/build/utils/filter.d.ts +46 -43
  86. package/build/utils/filter.js +51 -30
  87. package/build/utils/flag.js +1 -1
  88. package/build/utils/http-client.js +38 -5
  89. package/build/utils/index.d.ts +13 -21
  90. package/build/utils/index.js +98 -117
  91. package/build/utils/linter.js +5 -2
  92. package/build/utils/loon.d.ts +3 -2
  93. package/build/utils/loon.js +67 -5
  94. package/build/utils/quantumult.d.ts +3 -3
  95. package/build/utils/quantumult.js +190 -258
  96. package/build/utils/relayable-url.js +1 -1
  97. package/build/utils/remote-snippet.js +3 -4
  98. package/build/utils/ss.js +27 -17
  99. package/build/utils/ssr.js +3 -4
  100. package/build/utils/subscription.js +7 -7
  101. package/build/utils/surfboard.d.ts +3 -2
  102. package/build/utils/surfboard.js +142 -126
  103. package/build/utils/surge.d.ts +4 -2
  104. package/build/utils/surge.js +328 -300
  105. package/build/utils/time.d.ts +1 -0
  106. package/build/utils/time.js +6 -0
  107. package/build/utils/tmp-helper.js +8 -1
  108. package/build/utils/trojan.js +19 -11
  109. package/build/utils/v2ray.js +2 -2
  110. package/build/validators/artifact.d.ts +35 -0
  111. package/build/validators/artifact.js +17 -0
  112. package/build/validators/common.d.ts +121 -0
  113. package/build/validators/common.js +52 -0
  114. package/build/validators/filter.d.ts +10 -0
  115. package/build/validators/filter.js +15 -0
  116. package/build/validators/hooks.d.ts +7 -0
  117. package/build/validators/hooks.js +8 -0
  118. package/build/validators/http.d.ts +137 -0
  119. package/build/validators/http.js +19 -0
  120. package/build/validators/index.d.ts +15 -0
  121. package/build/validators/index.js +32 -0
  122. package/build/validators/provider.d.ts +109 -0
  123. package/build/validators/provider.js +41 -0
  124. package/build/validators/shadowsocks.d.ts +86 -0
  125. package/build/validators/shadowsocks.js +29 -0
  126. package/build/validators/shadowsocksr.d.ts +77 -0
  127. package/build/validators/shadowsocksr.js +19 -0
  128. package/build/validators/snell.d.ts +71 -0
  129. package/build/validators/snell.js +20 -0
  130. package/build/validators/socks5.d.ts +77 -0
  131. package/build/validators/socks5.js +19 -0
  132. package/build/validators/surgio-config.d.ts +307 -0
  133. package/build/validators/surgio-config.js +95 -0
  134. package/build/validators/trojan.d.ts +86 -0
  135. package/build/validators/trojan.js +15 -0
  136. package/build/validators/tuic.d.ts +301 -0
  137. package/build/validators/tuic.js +21 -0
  138. package/build/validators/vmess.d.ts +92 -0
  139. package/build/validators/vmess.js +29 -0
  140. package/build/validators/wireguard.d.ts +123 -0
  141. package/build/validators/wireguard.js +26 -0
  142. package/config.d.ts +1 -0
  143. package/config.js +1 -0
  144. package/constant.d.ts +1 -0
  145. package/constant.js +1 -0
  146. package/generator.d.ts +1 -0
  147. package/generator.js +1 -0
  148. package/hygen-template/artifact/new/index.js +15 -15
  149. package/hygen-template/provider/new/index.js +8 -7
  150. package/hygen-template/template/new/index.js +3 -3
  151. package/index.d.ts +1 -0
  152. package/index.js +1 -0
  153. package/internal.d.ts +1 -0
  154. package/internal.js +1 -0
  155. package/package.json +112 -75
  156. package/provider.d.ts +1 -0
  157. package/provider.js +1 -0
  158. package/utils.d.ts +1 -0
  159. package/utils.js +1 -0
  160. package/bin/surgio.js +0 -8
  161. package/build/command/check.d.ts +0 -9
  162. package/build/command/check.js +0 -79
  163. package/build/command/clean-cache.d.ts +0 -8
  164. package/build/command/clean-cache.js +0 -43
  165. package/build/command/doctor.d.ts +0 -9
  166. package/build/command/doctor.js +0 -63
  167. package/build/command/generate.d.ts +0 -8
  168. package/build/command/generate.js +0 -64
  169. package/build/command/lint.d.ts +0 -7
  170. package/build/command/lint.js +0 -42
  171. package/build/command/new.d.ts +0 -7
  172. package/build/command/new.js +0 -44
  173. package/build/command/subscriptions.d.ts +0 -10
  174. package/build/command/subscriptions.js +0 -87
  175. package/build/command/upload.d.ts +0 -9
  176. package/build/command/upload.js +0 -101
  177. package/build/utils/command.d.ts +0 -2
  178. package/build/utils/command.js +0 -23
  179. package/build/utils/config.d.ts +0 -6
  180. package/build/utils/config.js +0 -245
  181. package/build/utils/patch-proxy.d.ts +0 -1
  182. package/build/utils/patch-proxy.js +0 -19
@@ -4,11 +4,11 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.parseClashConfig = exports.getClashSubscription = void 0;
7
- const joi_1 = __importDefault(require("joi"));
8
7
  const assert_1 = __importDefault(require("assert"));
9
8
  const yaml_1 = __importDefault(require("yaml"));
10
9
  const lodash_1 = __importDefault(require("lodash"));
11
10
  const logger_1 = require("@surgio/logger");
11
+ const zod_1 = require("zod");
12
12
  const types_1 = require("../types");
13
13
  const utils_1 = require("../utils");
14
14
  const env_flag_1 = require("../utils/env-flag");
@@ -18,52 +18,59 @@ const logger = (0, logger_1.createLogger)({
18
18
  service: 'surgio:ClashProvider',
19
19
  });
20
20
  class ClashProvider extends Provider_1.default {
21
+ #originalUrl;
22
+ udpRelay;
23
+ tls13;
21
24
  constructor(name, config) {
22
25
  super(name, config);
23
- const schema = joi_1.default.object({
24
- url: joi_1.default.string()
25
- .uri({
26
- scheme: [/https?/],
27
- })
28
- .required(),
29
- udpRelay: joi_1.default.bool().strict(),
30
- tls13: joi_1.default.bool().strict(),
31
- }).unknown();
32
- const { error } = schema.validate(config);
26
+ const schema = zod_1.z.object({
27
+ url: zod_1.z.string().url(),
28
+ udpRelay: zod_1.z.boolean().optional(),
29
+ tls13: zod_1.z.boolean().optional(),
30
+ });
31
+ const result = schema.safeParse(config);
33
32
  // istanbul ignore next
34
- if (error) {
35
- throw error;
33
+ if (!result.success) {
34
+ throw result.error;
36
35
  }
37
- this._url = config.url;
38
- this.udpRelay = config.udpRelay;
39
- this.tls13 = config.tls13;
36
+ this.#originalUrl = result.data.url;
37
+ this.udpRelay = result.data.udpRelay;
38
+ this.tls13 = result.data.tls13;
40
39
  this.supportGetSubscriptionUserInfo = true;
41
40
  }
42
41
  // istanbul ignore next
43
42
  get url() {
44
- return (0, relayable_url_1.default)(this._url, this.relayUrl);
43
+ return (0, relayable_url_1.default)(this.#originalUrl, this.config.relayUrl);
45
44
  }
46
- async getSubscriptionUserInfo({ requestUserAgent, } = {}) {
45
+ getSubscriptionUserInfo = async (params = {}) => {
46
+ const requestUserAgent = this.determineRequestUserAgent(params.requestUserAgent);
47
47
  const { subscriptionUserinfo } = await (0, exports.getClashSubscription)({
48
48
  url: this.url,
49
49
  udpRelay: this.udpRelay,
50
50
  tls13: this.tls13,
51
- requestUserAgent: requestUserAgent || this.requestUserAgent,
51
+ requestUserAgent,
52
52
  });
53
53
  if (subscriptionUserinfo) {
54
54
  return subscriptionUserinfo;
55
55
  }
56
- return void 0;
57
- }
58
- async getNodeList({ requestUserAgent, } = {}) {
56
+ return undefined;
57
+ };
58
+ getNodeList = async (params = {}) => {
59
+ const requestUserAgent = this.determineRequestUserAgent(params.requestUserAgent);
59
60
  const { nodeList } = await (0, exports.getClashSubscription)({
60
61
  url: this.url,
61
62
  udpRelay: this.udpRelay,
62
63
  tls13: this.tls13,
63
- requestUserAgent: requestUserAgent || this.requestUserAgent,
64
+ requestUserAgent,
64
65
  });
66
+ if (this.config.hooks?.afterFetchNodeList) {
67
+ const newList = await this.config.hooks.afterFetchNodeList(nodeList, params);
68
+ if (newList) {
69
+ return newList;
70
+ }
71
+ }
65
72
  return nodeList;
66
- }
73
+ };
67
74
  }
68
75
  exports.default = ClashProvider;
69
76
  const getClashSubscription = async ({ url, udpRelay, tls13, requestUserAgent, }) => {
@@ -96,50 +103,71 @@ const getClashSubscription = async ({ url, udpRelay, tls13, requestUserAgent, })
96
103
  exports.getClashSubscription = getClashSubscription;
97
104
  const parseClashConfig = (proxyList, udpRelay, tls13) => {
98
105
  const nodeList = proxyList.map((item) => {
99
- var _a, _b, _c, _d;
100
106
  switch (item.type) {
101
107
  case 'ss': {
102
108
  // istanbul ignore next
103
109
  if (item.plugin && !['obfs', 'v2ray-plugin'].includes(item.plugin)) {
104
110
  logger.warn(`不支持从 Clash 订阅中读取 ${item.plugin} 类型的 Shadowsocks 节点,节点 ${item.name} 会被省略`);
105
- return void 0;
111
+ return undefined;
106
112
  }
107
113
  // istanbul ignore next
108
114
  if (item.plugin === 'v2ray-plugin' &&
109
115
  item['plugin-opts'].mode.toLowerCase() === 'quic') {
110
116
  logger.warn(`不支持从 Clash 订阅中读取 QUIC 模式的 Shadowsocks 节点,节点 ${item.name} 会被省略`);
111
- return void 0;
117
+ return undefined;
112
118
  }
113
119
  const wsHeaders = (0, utils_1.lowercaseHeaderKeys)(lodash_1.default.get(item, 'plugin-opts.headers', {}));
114
- return Object.assign(Object.assign(Object.assign({ type: types_1.NodeTypeEnum.Shadowsocks, nodeName: item.name, hostname: item.server, port: item.port, method: item.cipher, password: item.password, 'udp-relay': resolveUdpRelay(item.udp, udpRelay) }, (item.plugin && item.plugin === 'obfs'
115
- ? {
116
- obfs: item['plugin-opts'].mode,
117
- 'obfs-host': item['plugin-opts'].host || 'www.bing.com',
118
- }
119
- : null)), (item.obfs
120
- ? {
121
- obfs: item.obfs,
122
- 'obfs-host': item['obfs-host'] || 'www.bing.com',
123
- }
124
- : null)), (item.plugin &&
125
- item.plugin === 'v2ray-plugin' &&
126
- item['plugin-opts'].mode === 'websocket'
127
- ? Object.assign(Object.assign({ obfs: item['plugin-opts'].tls === true ? 'wss' : 'ws', 'obfs-host': item['plugin-opts'].host || item.server, 'obfs-uri': item['plugin-opts'].path || '/', wsHeaders }, (item['plugin-opts'].tls === true
120
+ return {
121
+ type: types_1.NodeTypeEnum.Shadowsocks,
122
+ nodeName: item.name,
123
+ hostname: item.server,
124
+ port: item.port,
125
+ method: item.cipher,
126
+ password: item.password,
127
+ udpRelay: resolveUdpRelay(item.udp, udpRelay),
128
+ // obfs-local 新格式
129
+ ...(item.plugin && item.plugin === 'obfs'
130
+ ? {
131
+ obfs: item['plugin-opts'].mode,
132
+ obfsHost: item['plugin-opts'].host || 'www.bing.com',
133
+ }
134
+ : null),
135
+ // obfs-local 旧格式
136
+ ...(item.obfs
128
137
  ? {
129
- skipCertVerify: item['plugin-opts']['skip-cert-verify'] === true,
130
- tls13: tls13 !== null && tls13 !== void 0 ? tls13 : false,
138
+ obfs: item.obfs,
139
+ obfsHost: item['obfs-host'] || 'www.bing.com',
131
140
  }
132
- : null)), (typeof item['plugin-opts'].mux === 'boolean'
141
+ : null),
142
+ // v2ray-plugin
143
+ ...(item.plugin &&
144
+ item.plugin === 'v2ray-plugin' &&
145
+ item['plugin-opts'].mode === 'websocket'
133
146
  ? {
134
- mux: item['plugin-opts'].mux,
147
+ obfs: item['plugin-opts'].tls === true ? 'wss' : 'ws',
148
+ obfsHost: item['plugin-opts'].host || item.server,
149
+ obfsUri: item['plugin-opts'].path || '/',
150
+ wsHeaders,
151
+ ...(item['plugin-opts'].tls === true
152
+ ? {
153
+ skipCertVerify: item['plugin-opts']['skip-cert-verify'] === true,
154
+ tls13: tls13 ?? false,
155
+ }
156
+ : null),
157
+ ...(typeof item['plugin-opts'].mux === 'boolean'
158
+ ? {
159
+ mux: item['plugin-opts'].mux,
160
+ }
161
+ : null),
135
162
  }
136
- : null)) : null));
163
+ : null),
164
+ };
137
165
  }
138
166
  case 'vmess': {
139
167
  // istanbul ignore next
140
168
  if (item.network && !['tcp', 'ws'].includes(item.network)) {
141
169
  logger.warn(`不支持从 Clash 订阅中读取 network 类型为 ${item.network} 的 Vmess 节点,节点 ${item.name} 会被省略`);
142
- return void 0;
170
+ return undefined;
143
171
  }
144
172
  const isNewConfig = 'ws-opts' in item;
145
173
  const wsHeaders = isNewConfig
@@ -152,18 +180,31 @@ const parseClashConfig = (proxyList, udpRelay, tls13) => {
152
180
  path: lodash_1.default.get(item, 'ws-path', '/'),
153
181
  headers: wsHeaders,
154
182
  };
155
- return Object.assign(Object.assign({ type: types_1.NodeTypeEnum.Vmess, nodeName: item.name, hostname: item.server, port: item.port, uuid: item.uuid, alterId: item.alterId ? `${item.alterId}` : '0', method: item.cipher || 'auto', 'udp-relay': resolveUdpRelay(item.udp, udpRelay), tls: (_a = item.tls) !== null && _a !== void 0 ? _a : false, network: item.network || 'tcp' }, (item.network === 'ws'
156
- ? {
157
- host: wsHost,
158
- path: lodash_1.default.get(wsOpts, 'path', '/'),
159
- wsHeaders,
160
- }
161
- : null)), (item.tls
162
- ? {
163
- skipCertVerify: item['skip-cert-verify'] === true,
164
- tls13: tls13 !== null && tls13 !== void 0 ? tls13 : false,
165
- }
166
- : null));
183
+ return {
184
+ type: types_1.NodeTypeEnum.Vmess,
185
+ nodeName: item.name,
186
+ hostname: item.server,
187
+ port: item.port,
188
+ uuid: item.uuid,
189
+ alterId: item.alterId ? `${item.alterId}` : '0',
190
+ method: item.cipher || 'auto',
191
+ udpRelay: resolveUdpRelay(item.udp, udpRelay),
192
+ tls: item.tls ?? false,
193
+ network: item.network || 'tcp',
194
+ ...(item.network === 'ws'
195
+ ? {
196
+ host: wsHost,
197
+ path: lodash_1.default.get(wsOpts, 'path', '/'),
198
+ wsHeaders,
199
+ }
200
+ : null),
201
+ ...(item.tls
202
+ ? {
203
+ skipCertVerify: item['skip-cert-verify'] === true,
204
+ tls13: tls13 ?? false,
205
+ }
206
+ : null),
207
+ };
167
208
  }
168
209
  case 'http':
169
210
  if (!item.tls) {
@@ -183,13 +224,22 @@ const parseClashConfig = (proxyList, udpRelay, tls13) => {
183
224
  port: item.port,
184
225
  username: item.username || '',
185
226
  password: item.password || '',
186
- tls13: tls13 !== null && tls13 !== void 0 ? tls13 : false,
227
+ tls13: tls13 ?? false,
187
228
  skipCertVerify: item['skip-cert-verify'] === true,
188
229
  };
189
230
  case 'snell':
190
- return Object.assign(Object.assign({ type: types_1.NodeTypeEnum.Snell, nodeName: item.name, hostname: item.server, port: item.port, psk: item.psk, obfs: lodash_1.default.get(item, 'obfs-opts.mode', 'http') }, (typeof ((_b = item === null || item === void 0 ? void 0 : item['obfs-opts']) === null || _b === void 0 ? void 0 : _b.host) !== 'undefined'
191
- ? { 'obfs-host': item['obfs-opts'].host }
192
- : null)), ('version' in item ? { version: item.version } : null));
231
+ return {
232
+ type: types_1.NodeTypeEnum.Snell,
233
+ nodeName: item.name,
234
+ hostname: item.server,
235
+ port: item.port,
236
+ psk: item.psk,
237
+ obfs: lodash_1.default.get(item, 'obfs-opts.mode', 'http'),
238
+ ...(typeof item?.['obfs-opts']?.host !== 'undefined'
239
+ ? { obfsHost: item['obfs-opts'].host }
240
+ : null),
241
+ ...('version' in item ? { version: item.version } : null),
242
+ };
193
243
  // istanbul ignore next
194
244
  case 'ssr':
195
245
  return {
@@ -199,30 +249,69 @@ const parseClashConfig = (proxyList, udpRelay, tls13) => {
199
249
  port: item.port,
200
250
  password: item.password,
201
251
  obfs: item.obfs,
202
- obfsparam: (_c = item['obfs-param']) !== null && _c !== void 0 ? _c : item.obfsparam,
252
+ obfsparam: item['obfs-param'] ?? item.obfsparam,
203
253
  protocol: item.protocol,
204
- protoparam: (_d = item['protocol-param']) !== null && _d !== void 0 ? _d : item.protocolparam,
254
+ protoparam: item['protocol-param'] ?? item.protocolparam,
205
255
  method: item.cipher,
206
- 'udp-relay': resolveUdpRelay(item.udp, udpRelay),
256
+ udpRelay: resolveUdpRelay(item.udp, udpRelay),
207
257
  };
208
258
  case 'trojan': {
209
259
  const network = item.network;
210
260
  const wsOpts = lodash_1.default.get(item, 'ws-opts', {});
211
261
  const wsHeaders = (0, utils_1.lowercaseHeaderKeys)(lodash_1.default.get(wsOpts, 'headers', {}));
212
- return Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({ type: types_1.NodeTypeEnum.Trojan, nodeName: item.name, hostname: item.server, port: item.port, password: item.password }, ('skip-cert-verify' in item
213
- ? { skipCertVerify: item['skip-cert-verify'] === true }
214
- : null)), ('alpn' in item ? { alpn: item.alpn } : null)), ('sni' in item ? { sni: item.sni } : null)), { 'udp-relay': resolveUdpRelay(item.udp, udpRelay), tls13: tls13 !== null && tls13 !== void 0 ? tls13 : false }), (network === 'ws'
215
- ? { network: 'ws', wsPath: lodash_1.default.get(wsOpts, 'path', '/'), wsHeaders }
216
- : null));
262
+ return {
263
+ type: types_1.NodeTypeEnum.Trojan,
264
+ nodeName: item.name,
265
+ hostname: item.server,
266
+ port: item.port,
267
+ password: item.password,
268
+ ...('skip-cert-verify' in item
269
+ ? { skipCertVerify: item['skip-cert-verify'] === true }
270
+ : null),
271
+ ...('alpn' in item ? { alpn: item.alpn } : null),
272
+ ...('sni' in item ? { sni: item.sni } : null),
273
+ udpRelay: resolveUdpRelay(item.udp, udpRelay),
274
+ tls13: tls13 ?? false,
275
+ ...(network === 'ws'
276
+ ? { network: 'ws', wsPath: lodash_1.default.get(wsOpts, 'path', '/'), wsHeaders }
277
+ : null),
278
+ };
217
279
  }
218
280
  case 'tuic': {
219
- return Object.assign(Object.assign(Object.assign(Object.assign({ type: types_1.NodeTypeEnum.Tuic, nodeName: item.name, hostname: item.server, port: item.port, token: item.token, 'udp-relay': resolveUdpRelay(item.udp, udpRelay) }, ('skip-cert-verify' in item
220
- ? { skipCertVerify: item['skip-cert-verify'] === true }
221
- : null)), { tls13: tls13 !== null && tls13 !== void 0 ? tls13 : false }), ('sni' in item ? { sni: item.sni } : null)), ('alpn' in item ? { alpn: item.alpn } : null));
281
+ if (item.version >= 5) {
282
+ return {
283
+ type: types_1.NodeTypeEnum.Tuic,
284
+ version: item.version,
285
+ nodeName: item.name,
286
+ hostname: item.server,
287
+ port: item.port,
288
+ password: item.password,
289
+ uuid: item.uuid,
290
+ ...('skip-cert-verify' in item
291
+ ? { skipCertVerify: item['skip-cert-verify'] === true }
292
+ : null),
293
+ tls13: tls13 ?? false,
294
+ ...('sni' in item ? { sni: item.sni } : null),
295
+ ...('alpn' in item ? { alpn: item.alpn } : null),
296
+ };
297
+ }
298
+ return {
299
+ type: types_1.NodeTypeEnum.Tuic,
300
+ nodeName: item.name,
301
+ hostname: item.server,
302
+ port: item.port,
303
+ token: item.token,
304
+ ...('skip-cert-verify' in item
305
+ ? { skipCertVerify: item['skip-cert-verify'] === true }
306
+ : null),
307
+ tls13: tls13 ?? false,
308
+ ...('sni' in item ? { sni: item.sni } : null),
309
+ ...('alpn' in item ? { alpn: item.alpn } : null),
310
+ };
222
311
  }
223
312
  default:
224
313
  logger.warn(`不支持从 Clash 订阅中读取 ${item.type} 的节点,节点 ${item.name} 会被省略`);
225
- return void 0;
314
+ return undefined;
226
315
  }
227
316
  });
228
317
  return nodeList.filter((item) => item !== undefined);
@@ -234,4 +323,4 @@ function resolveUdpRelay(val, defaultVal = false) {
234
323
  }
235
324
  return defaultVal;
236
325
  }
237
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ2xhc2hQcm92aWRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL2xpYi9wcm92aWRlci9DbGFzaFByb3ZpZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLDhDQUFzQjtBQUN0QixvREFBNEI7QUFDNUIsZ0RBQXdCO0FBQ3hCLG9EQUF1QjtBQUN2QiwyQ0FBOEM7QUFFOUMsb0NBWWtCO0FBQ2xCLG9DQUErQztBQUMvQyxnREFBc0Q7QUFDdEQsMkVBQWtEO0FBQ2xELDBEQUFrQztBQVlsQyxNQUFNLE1BQU0sR0FBRyxJQUFBLHFCQUFZLEVBQUM7SUFDMUIsT0FBTyxFQUFFLHNCQUFzQjtDQUNoQyxDQUFDLENBQUM7QUFFSCxNQUFxQixhQUFjLFNBQVEsa0JBQVE7SUFLakQsWUFBWSxJQUFZLEVBQUUsTUFBMkI7UUFDbkQsS0FBSyxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztRQUVwQixNQUFNLE1BQU0sR0FBRyxhQUFHLENBQUMsTUFBTSxDQUFDO1lBQ3hCLEdBQUcsRUFBRSxhQUFHLENBQUMsTUFBTSxFQUFFO2lCQUNkLEdBQUcsQ0FBQztnQkFDSCxNQUFNLEVBQUUsQ0FBQyxRQUFRLENBQUM7YUFDbkIsQ0FBQztpQkFDRCxRQUFRLEVBQUU7WUFDYixRQUFRLEVBQUUsYUFBRyxDQUFDLElBQUksRUFBRSxDQUFDLE1BQU0sRUFBRTtZQUM3QixLQUFLLEVBQUUsYUFBRyxDQUFDLElBQUksRUFBRSxDQUFDLE1BQU0sRUFBRTtTQUMzQixDQUFDLENBQUMsT0FBTyxFQUFFLENBQUM7UUFFYixNQUFNLEVBQUUsS0FBSyxFQUFFLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUUxQyx1QkFBdUI7UUFDdkIsSUFBSSxLQUFLLEVBQUU7WUFDVCxNQUFNLEtBQUssQ0FBQztTQUNiO1FBRUQsSUFBSSxDQUFDLElBQUksR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDO1FBQ3ZCLElBQUksQ0FB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
326
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ2xhc2hQcm92aWRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wcm92aWRlci9DbGFzaFByb3ZpZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLG9EQUEyQjtBQUMzQixnREFBdUI7QUFDdkIsb0RBQXNCO0FBQ3RCLDJDQUE2QztBQUM3Qyw2QkFBdUI7QUFFdkIsb0NBWWlCO0FBQ2pCLG9DQUE4QztBQUM5QyxnREFBcUQ7QUFDckQsMkVBQWlEO0FBQ2pELDBEQUFpQztBQWFqQyxNQUFNLE1BQU0sR0FBRyxJQUFBLHFCQUFZLEVBQUM7SUFDMUIsT0FBTyxFQUFFLHNCQUFzQjtDQUNoQyxDQUFDLENBQUE7QUFFRixNQUFxQixhQUFjLFNBQVEsa0JBQVE7SUFDeEMsWUFBWSxDQUFRO0lBQ2IsUUFBUSxDQUFVO0lBQ2xCLEtBQUssQ0FBVTtJQUUvQixZQUFZLElBQVksRUFBRSxNQUEyQjtRQUNuRCxLQUFLLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFBO1FBRW5CLE1BQU0sTUFBTSxHQUFHLE9BQUMsQ0FBQyxNQUFNLENBQUM7WUFDdEIsR0FBRyxFQUFFLE9BQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLEVBQUU7WUFDckIsUUFBUSxFQUFFLE9BQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxRQUFRLEVBQUU7WUFDaEMsS0FBSyxFQUFFLE9BQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxRQUFRLEVBQUU7U0FDOUIsQ0FBQyxDQUFBO1FBQ0YsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQTtRQUV2Qyx1QkFBdUI7UUFDdkIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUU7WUFDbkIsTUFBTSxNQUFNLENBQUMsS0FBSyxDQUFBO1NBQ25CO1FBRUQsSUFBSSxDQUFDLFlBQVksR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQTtRQUNuQyxJQUFJLENB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
@@ -1,8 +1,9 @@
1
- import { CustomProviderConfig, PossibleNodeConfigType } from '../types';
1
+ import { CustomProviderConfig } from '../types';
2
2
  import Provider from './Provider';
3
+ import { GetNodeListFunction, GetNodeListParams } from './types';
3
4
  export default class CustomProvider extends Provider {
4
- readonly nodeList: ReadonlyArray<any>;
5
+ readonly nodeList: unknown[] | ((params: GetNodeListParams) => Promise<unknown[]>);
5
6
  readonly underlyingProxy?: string;
6
7
  constructor(name: string, config: CustomProviderConfig);
7
- getNodeList(): Promise<ReadonlyArray<PossibleNodeConfigType>>;
8
+ getNodeList: GetNodeListFunction;
8
9
  }
@@ -3,70 +3,101 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- const joi_1 = __importDefault(require("joi"));
6
+ const zod_1 = require("zod");
7
7
  const types_1 = require("../types");
8
8
  const Provider_1 = __importDefault(require("./Provider"));
9
+ const validators_1 = require("../validators");
9
10
  class CustomProvider extends Provider_1.default {
11
+ nodeList;
12
+ underlyingProxy;
10
13
  constructor(name, config) {
11
14
  super(name, config);
12
- const nodeSchema = joi_1.default.object({
13
- type: joi_1.default.string()
14
- .valid(...Object.values(types_1.NodeTypeEnum))
15
- .required(),
16
- nodeName: joi_1.default.string().required(),
17
- enable: joi_1.default.boolean().strict(),
18
- tfo: joi_1.default.boolean().strict(),
19
- mptcp: joi_1.default.boolean().strict(),
20
- shadowTls: joi_1.default.object({
21
- password: joi_1.default.string().required(),
22
- sni: joi_1.default.string(),
23
- version: joi_1.default.string(),
24
- }),
25
- binPath: joi_1.default.string(),
26
- localPort: joi_1.default.number(),
27
- underlyingProxy: joi_1.default.string(),
28
- skipCertVerify: joi_1.default.boolean().strict(),
29
- sni: joi_1.default.string(),
30
- alpn: joi_1.default.array().items(joi_1.default.string()),
31
- serverCertFingerprintSha256: joi_1.default.string(),
32
- }).unknown();
33
- const schema = joi_1.default.object({
34
- nodeList: joi_1.default.array().items(nodeSchema).required(),
35
- underlyingProxy: joi_1.default.string(),
36
- }).unknown();
37
- const { error, value } = schema.validate(config);
15
+ const schema = zod_1.z.object({
16
+ nodeList: zod_1.z.union([
17
+ zod_1.z.array(zod_1.z.any()),
18
+ zod_1.z.function().args(zod_1.z.any()).returns(zod_1.z.any()),
19
+ ]),
20
+ underlyingProxy: zod_1.z.ostring(),
21
+ });
22
+ const result = schema.safeParse(config);
38
23
  // istanbul ignore next
39
- if (error) {
40
- throw error;
24
+ if (!result.success) {
25
+ throw result.error;
41
26
  }
42
- this.nodeList = value.nodeList;
43
- this.underlyingProxy = value.underlyingProxy;
27
+ this.nodeList = result.data.nodeList;
28
+ this.underlyingProxy = result.data.underlyingProxy;
44
29
  }
45
- async getNodeList() {
46
- const udpRelayCheckSchema = joi_1.default.object({
47
- 'udp-relay': joi_1.default.bool().strict(),
48
- }).unknown();
49
- return this.nodeList.map((item) => {
50
- const { error: udpRelayCheckError } = udpRelayCheckSchema.validate(item);
51
- const lowercaseKeys = ['wsHeaders'];
30
+ getNodeList = async (params = {}) => {
31
+ let nodeList;
32
+ const parsedNodeList = [];
33
+ if (typeof this.nodeList === 'function') {
34
+ nodeList = await this.nodeList(params);
35
+ }
36
+ else {
37
+ nodeList = this.nodeList;
38
+ }
39
+ for (const node of nodeList) {
40
+ const type = node.type;
52
41
  // istanbul ignore next
53
- if (udpRelayCheckError) {
54
- throw udpRelayCheckError;
42
+ if (node['udp-relay']) {
43
+ throw new Error('udp-relay is abandoned, please use udpRelay instead');
55
44
  }
56
- if (this.underlyingProxy && !item.underlyingProxy) {
57
- item.underlyingProxy = this.underlyingProxy;
45
+ // istanbul ignore next
46
+ if (node['obfs-host']) {
47
+ throw new Error('obfs-host is abandoned, please use obfsHost instead');
58
48
  }
59
- lowercaseKeys.forEach((key) => {
60
- if (item[key]) {
61
- item[key] = Object.keys(item[key]).reduce((acc, curr) => {
62
- acc[curr.toLowerCase()] = item[key][curr];
49
+ // istanbul ignore next
50
+ if (node['obfs-uri']) {
51
+ throw new Error('obfs-uri is abandoned, please use obfsUri instead');
52
+ }
53
+ const parsedNode = (() => {
54
+ switch (type) {
55
+ case types_1.NodeTypeEnum.Shadowsocks:
56
+ return validators_1.ShadowsocksNodeConfigValidator.parse(node);
57
+ case types_1.NodeTypeEnum.Shadowsocksr:
58
+ return validators_1.ShadowsocksrNodeConfigValidator.parse(node);
59
+ case types_1.NodeTypeEnum.Vmess:
60
+ return validators_1.VmessNodeConfigValidator.parse(node);
61
+ case types_1.NodeTypeEnum.Trojan:
62
+ return validators_1.TrojanNodeConfigValidator.parse(node);
63
+ case types_1.NodeTypeEnum.Socks5:
64
+ return validators_1.Socks5NodeConfigValidator.parse(node);
65
+ case types_1.NodeTypeEnum.HTTP:
66
+ return validators_1.HttpNodeConfigValidator.parse(node);
67
+ case types_1.NodeTypeEnum.HTTPS:
68
+ return validators_1.HttpsNodeConfigValidator.parse(node);
69
+ case types_1.NodeTypeEnum.Snell:
70
+ return validators_1.SnellNodeConfigValidator.parse(node);
71
+ case types_1.NodeTypeEnum.Tuic:
72
+ return validators_1.TuicNodeConfigValidator.parse(node);
73
+ case types_1.NodeTypeEnum.Wireguard:
74
+ return validators_1.WireguardNodeConfigValidator.parse(node);
75
+ default:
76
+ throw new TypeError(`Unexpected object: ${type}`);
77
+ }
78
+ })();
79
+ const propertyKeysMustBeLowercase = ['wsHeaders'];
80
+ if (this.underlyingProxy && !parsedNode.underlyingProxy) {
81
+ parsedNode.underlyingProxy = this.underlyingProxy;
82
+ }
83
+ propertyKeysMustBeLowercase.forEach((key) => {
84
+ if (parsedNode[key]) {
85
+ parsedNode[key] = Object.keys(parsedNode[key]).reduce((acc, curr) => {
86
+ acc[curr.toLowerCase()] = parsedNode[key][curr];
63
87
  return acc;
64
88
  }, {});
65
89
  }
66
90
  });
67
- return item;
68
- });
69
- }
91
+ parsedNodeList.push(parsedNode);
92
+ }
93
+ if (this.config.hooks?.afterFetchNodeList) {
94
+ const newList = await this.config.hooks.afterFetchNodeList(parsedNodeList, params);
95
+ if (newList) {
96
+ return newList;
97
+ }
98
+ }
99
+ return parsedNodeList;
100
+ };
70
101
  }
71
102
  exports.default = CustomProvider;
72
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ3VzdG9tUHJvdmlkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9saWIvcHJvdmlkZXIvQ3VzdG9tUHJvdmlkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSw4Q0FBc0I7QUFDdEIsb0NBSWtCO0FBQ2xCLDBEQUFrQztBQUVsQyxNQUFxQixjQUFlLFNBQVEsa0JBQVE7SUFJbEQsWUFBWSxJQUFZLEVBQUUsTUFBNEI7UUFDcEQsS0FBSyxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztRQUVwQixNQUFNLFVBQVUsR0FBRyxhQUFHLENBQUMsTUFBTSxDQUFDO1lBQzVCLElBQUksRUFBRSxhQUFHLENBQUMsTUFBTSxFQUFFO2lCQUNmLEtBQUssQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQVMsb0JBQVksQ0FBQyxDQUFDO2lCQUM3QyxRQUFRLEVBQUU7WUFDYixRQUFRLEVBQUUsYUFBRyxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsRUFBRTtZQUNqQyxNQUFNLEVBQUUsYUFBRyxDQUFDLE9BQU8sRUFBRSxDQUFDLE1BQU0sRUFBRTtZQUM5QixHQUFHLEVBQUUsYUFBRyxDQUFDLE9BQU8sRUFBRSxDQUFDLE1BQU0sRUFBRTtZQUMzQixLQUFLLEVBQUUsYUFBRyxDQUFDLE9BQU8sRUFBRSxDQUFDLE1BQU0sRUFBRTtZQUM3QixTQUFTLEVBQUUsYUFBRyxDQUFDLE1BQU0sQ0FBQztnQkFDcEIsUUFBUSxFQUFFLGFBQUcsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxRQUFRLEVBQUU7Z0JBQ2pDLEdBQUcsRUFBRSxhQUFHLENBQUMsTUFBTSxFQUFFO2dCQUNqQixPQUFPLEVBQUUsYUFBRyxDQUFDLE1BQU0sRUFBRTthQUN0QixDQUFDO1lBQ0YsT0FBTyxFQUFFLGFBQUcsQ0FBQyxNQUFNLEVBQUU7WUFDckIsU0FBUyxFQUFFLGFBQUcsQ0FBQyxNQUFNLEVBQUU7WUFDdkIsZUFBZSxFQUFFLGFBQUcsQ0FBQyxNQUFNLEVB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
103
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ3VzdG9tUHJvdmlkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcHJvdmlkZXIvQ3VzdG9tUHJvdmlkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSw2QkFBdUI7QUFFdkIsb0NBSWlCO0FBQ2pCLDBEQUFpQztBQUNqQyw4Q0FXc0I7QUFHdEIsTUFBcUIsY0FBZSxTQUFRLGtCQUFRO0lBQ2xDLFFBQVEsQ0FFK0I7SUFDdkMsZUFBZSxDQUFTO0lBRXhDLFlBQVksSUFBWSxFQUFFLE1BQTRCO1FBQ3BELEtBQUssQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUE7UUFFbkIsTUFBTSxNQUFNLEdBQUcsT0FBQyxDQUFDLE1BQU0sQ0FBQztZQUN0QixRQUFRLEVBQUUsT0FBQyxDQUFDLEtBQUssQ0FBQztnQkFDaEIsT0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7Z0JBQ2hCLE9BQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLE9BQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQzthQUM1QyxDQUFDO1lBQ0YsZUFBZSxFQUFFLE9BQUMsQ0FBQyxPQUFPLEVBQUU7U0FDN0IsQ0FBQyxDQUFBO1FBQ0YsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQTtRQUV2Qyx1QkFBdUI7UUFDdkIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUU7WUFDbkIsTUFBTSxNQUFNLENBQUMsS0FBSyxDQUFBO1NBQ25CO1FBRUQsSUFBSSxDQUFDLFFBQVEsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQTtRQUNwQyxJQUFJLENBQUMsZUFBZSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFBO0lBQ3BELENBQUM7SUFFTSxXQUFXLEdBQXdCLEtBQUssRUFD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
@@ -1,31 +1,18 @@
1
- import { ProviderConfig, SupportProviderEnum, PossibleNodeConfigType, SubscriptionUserinfo } from '../types';
1
+ import { ProviderConfig, SupportProviderEnum } from '../types';
2
2
  import { SubsciptionCacheItem } from '../utils/cache';
3
- export default class Provider {
3
+ import { GetNodeListFunction, GetSubscriptionUserInfoFunction } from './types';
4
+ export default abstract class Provider {
4
5
  name: string;
5
6
  readonly type: SupportProviderEnum;
6
- readonly nodeFilter?: ProviderConfig['nodeFilter'];
7
- readonly netflixFilter?: ProviderConfig['netflixFilter'];
8
- readonly youtubePremiumFilter?: ProviderConfig['youtubePremiumFilter'];
9
- readonly customFilters?: ProviderConfig['customFilters'];
10
- readonly addFlag?: boolean;
11
- readonly removeExistingFlag?: boolean;
12
- readonly tfo?: boolean;
13
- readonly underlyingProxy?: string;
14
- readonly mptcp?: boolean;
15
- readonly renameNode?: ProviderConfig['renameNode'];
16
- readonly relayUrl?: boolean | string;
17
- readonly requestUserAgent?: string;
7
+ readonly config: ProviderConfig;
18
8
  supportGetSubscriptionUserInfo: boolean;
19
- startPort?: number;
20
- constructor(name: string, config: ProviderConfig);
9
+ passGatewayRequestUserAgent: boolean;
10
+ protected constructor(name: string, config: ProviderConfig);
21
11
  static requestCacheableResource(url: string, options?: {
22
12
  requestUserAgent?: string;
23
13
  }): Promise<SubsciptionCacheItem>;
14
+ determineRequestUserAgent(requestUserAgent?: string | undefined): string | undefined;
24
15
  get nextPort(): number;
25
- getSubscriptionUserInfo({}?: {
26
- requestUserAgent?: string;
27
- }): Promise<SubscriptionUserinfo | undefined>;
28
- getNodeList({}?: {
29
- requestUserAgent?: string;
30
- }): Promise<ReadonlyArray<PossibleNodeConfigType>>;
16
+ getSubscriptionUserInfo: GetSubscriptionUserInfoFunction;
17
+ getNodeList: GetNodeListFunction;
31
18
  }