surgio 2.25.3 → 3.0.0-alpha.1

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 (265) hide show
  1. package/LICENSE +1 -1
  2. package/bin/dev +17 -0
  3. package/bin/dev.cmd +3 -0
  4. package/bin/run +8 -0
  5. package/bin/run.cmd +3 -0
  6. package/build/base-command.d.ts +19 -0
  7. package/build/base-command.js +75 -0
  8. package/build/base-command.js.map +1 -0
  9. package/build/commands/check.d.ts +10 -0
  10. package/build/commands/check.js +88 -0
  11. package/build/commands/check.js.map +1 -0
  12. package/build/commands/clean-cache.d.ts +6 -0
  13. package/build/commands/clean-cache.js +29 -0
  14. package/build/commands/clean-cache.js.map +1 -0
  15. package/build/commands/doctor.d.ts +6 -0
  16. package/build/commands/doctor.js +21 -0
  17. package/build/commands/doctor.js.map +1 -0
  18. package/build/commands/generate.d.ts +7 -0
  19. package/build/commands/generate.js +93 -0
  20. package/build/commands/generate.js.map +1 -0
  21. package/build/commands/lint.d.ts +6 -0
  22. package/build/commands/lint.js +36 -0
  23. package/build/commands/lint.js.map +1 -0
  24. package/build/commands/new.d.ts +6 -0
  25. package/build/commands/new.js +36 -0
  26. package/build/commands/new.js.map +1 -0
  27. package/build/commands/subscriptions.d.ts +7 -0
  28. package/build/commands/subscriptions.js +96 -0
  29. package/build/commands/subscriptions.js.map +1 -0
  30. package/build/commands/upload.d.ts +6 -0
  31. package/build/commands/upload.js +89 -0
  32. package/build/commands/upload.js.map +1 -0
  33. package/build/config.d.ts +6 -0
  34. package/build/config.js +151 -0
  35. package/build/config.js.map +1 -0
  36. package/build/configurables.d.ts +80 -0
  37. package/build/configurables.js +52 -0
  38. package/build/configurables.js.map +1 -0
  39. package/build/constant/constant.d.ts +16 -16
  40. package/build/constant/constant.js +3 -13
  41. package/build/constant/constant.js.map +1 -0
  42. package/build/constant/env.js +1 -1
  43. package/build/constant/env.js.map +1 -0
  44. package/build/constant/error.js +1 -1
  45. package/build/constant/error.js.map +1 -0
  46. package/build/constant/index.js +1 -1
  47. package/build/constant/index.js.map +1 -0
  48. package/build/generator/artifact.d.ts +302 -67
  49. package/build/generator/artifact.js +141 -101
  50. package/build/generator/artifact.js.map +1 -0
  51. package/build/generator/index.d.ts +2 -0
  52. package/build/generator/index.js +19 -0
  53. package/build/generator/index.js.map +1 -0
  54. package/build/generator/template.js +2 -28
  55. package/build/generator/template.js.map +1 -0
  56. package/build/hooks/init.d.ts +3 -0
  57. package/build/hooks/init.js +33 -0
  58. package/build/hooks/init.js.map +1 -0
  59. package/build/index.d.ts +68 -66
  60. package/build/index.js +11 -51
  61. package/build/index.js.map +1 -0
  62. package/build/internal.d.ts +5 -0
  63. package/build/internal.js +25 -0
  64. package/build/internal.js.map +1 -0
  65. package/build/misc/deprecation.d.ts +1 -6
  66. package/build/misc/deprecation.js +1 -8
  67. package/build/misc/deprecation.js.map +1 -0
  68. package/build/misc/flag_cn.d.ts +49 -50
  69. package/build/misc/flag_cn.js +3 -3
  70. package/build/misc/flag_cn.js.map +1 -0
  71. package/build/provider/BlackSSLProvider.d.ts +4 -3
  72. package/build/provider/BlackSSLProvider.js +28 -16
  73. package/build/provider/BlackSSLProvider.js.map +1 -0
  74. package/build/provider/ClashProvider.d.ts +7 -10
  75. package/build/provider/ClashProvider.js +168 -76
  76. package/build/provider/ClashProvider.js.map +1 -0
  77. package/build/provider/CustomProvider.d.ts +4 -3
  78. package/build/provider/CustomProvider.js +98 -54
  79. package/build/provider/CustomProvider.js.map +1 -0
  80. package/build/provider/Provider.d.ts +9 -22
  81. package/build/provider/Provider.js +34 -69
  82. package/build/provider/Provider.js.map +1 -0
  83. package/build/provider/ShadowsocksJsonSubscribeProvider.d.ts +4 -5
  84. package/build/provider/ShadowsocksJsonSubscribeProvider.js +31 -21
  85. package/build/provider/ShadowsocksJsonSubscribeProvider.js.map +1 -0
  86. package/build/provider/ShadowsocksSubscribeProvider.d.ts +5 -8
  87. package/build/provider/ShadowsocksSubscribeProvider.js +33 -27
  88. package/build/provider/ShadowsocksSubscribeProvider.js.map +1 -0
  89. package/build/provider/ShadowsocksrSubscribeProvider.d.ts +5 -8
  90. package/build/provider/ShadowsocksrSubscribeProvider.js +33 -23
  91. package/build/provider/ShadowsocksrSubscribeProvider.js.map +1 -0
  92. package/build/provider/SsdProvider.d.ts +5 -8
  93. package/build/provider/SsdProvider.js +59 -39
  94. package/build/provider/SsdProvider.js.map +1 -0
  95. package/build/provider/TrojanProvider.d.ts +5 -8
  96. package/build/provider/TrojanProvider.js +40 -30
  97. package/build/provider/TrojanProvider.js.map +1 -0
  98. package/build/provider/V2rayNSubscribeProvider.d.ts +4 -5
  99. package/build/provider/V2rayNSubscribeProvider.js +64 -33
  100. package/build/provider/V2rayNSubscribeProvider.js.map +1 -0
  101. package/build/provider/index.d.ts +16 -2
  102. package/build/provider/index.js +12 -5
  103. package/build/provider/index.js.map +1 -0
  104. package/build/provider/types.d.ts +10 -1
  105. package/build/provider/types.js +1 -1
  106. package/build/provider/types.js.map +1 -0
  107. package/build/redis.js +1 -1
  108. package/build/redis.js.map +1 -0
  109. package/build/types.d.ts +42 -236
  110. package/build/types.js +2 -1
  111. package/build/types.js.map +1 -0
  112. package/build/utils/cache.js +29 -27
  113. package/build/utils/cache.js.map +1 -0
  114. package/build/utils/clash.d.ts +204 -3
  115. package/build/utils/clash.js +247 -110
  116. package/build/utils/clash.js.map +1 -0
  117. package/build/utils/constant.js +1 -1
  118. package/build/utils/constant.js.map +1 -0
  119. package/build/utils/dns.js +1 -1
  120. package/build/utils/dns.js.map +1 -0
  121. package/build/utils/doctor.d.ts +2 -0
  122. package/build/utils/doctor.js +38 -0
  123. package/build/utils/doctor.js.map +1 -0
  124. package/build/utils/env-flag.js +2 -2
  125. package/build/utils/env-flag.js.map +1 -0
  126. package/build/utils/error-helper.d.ts +2 -2
  127. package/build/utils/error-helper.js +51 -16
  128. package/build/utils/error-helper.js.map +1 -0
  129. package/build/utils/errors.d.ts +19 -0
  130. package/build/utils/errors.js +60 -0
  131. package/build/utils/errors.js.map +1 -0
  132. package/build/utils/filter.d.ts +46 -43
  133. package/build/utils/filter.js +57 -59
  134. package/build/utils/filter.js.map +1 -0
  135. package/build/utils/flag.js +6 -6
  136. package/build/utils/flag.js.map +1 -0
  137. package/build/utils/http-client.js +38 -5
  138. package/build/utils/http-client.js.map +1 -0
  139. package/build/utils/index.d.ts +14 -21
  140. package/build/utils/index.js +102 -118
  141. package/build/utils/index.js.map +1 -0
  142. package/build/utils/linter.js +5 -2
  143. package/build/utils/linter.js.map +1 -0
  144. package/build/utils/loon.d.ts +3 -2
  145. package/build/utils/loon.js +67 -5
  146. package/build/utils/loon.js.map +1 -0
  147. package/build/utils/quantumult.d.ts +3 -3
  148. package/build/utils/quantumult.js +190 -258
  149. package/build/utils/quantumult.js.map +1 -0
  150. package/build/utils/relayable-url.js +1 -1
  151. package/build/utils/relayable-url.js.map +1 -0
  152. package/build/utils/remote-snippet.js +37 -14
  153. package/build/utils/remote-snippet.js.map +1 -0
  154. package/build/utils/ss.js +27 -17
  155. package/build/utils/ss.js.map +1 -0
  156. package/build/utils/ssr.js +3 -4
  157. package/build/utils/ssr.js.map +1 -0
  158. package/build/utils/subscription.js +10 -9
  159. package/build/utils/subscription.js.map +1 -0
  160. package/build/utils/surfboard.d.ts +3 -2
  161. package/build/utils/surfboard.js +142 -126
  162. package/build/utils/surfboard.js.map +1 -0
  163. package/build/utils/surge.d.ts +4 -2
  164. package/build/utils/surge.js +328 -300
  165. package/build/utils/surge.js.map +1 -0
  166. package/build/utils/time.d.ts +1 -0
  167. package/build/utils/time.js +6 -0
  168. package/build/utils/time.js.map +1 -0
  169. package/build/utils/tmp-helper.js +8 -1
  170. package/build/utils/tmp-helper.js.map +1 -0
  171. package/build/utils/trojan.js +19 -11
  172. package/build/utils/trojan.js.map +1 -0
  173. package/build/validators/artifact.d.ts +35 -0
  174. package/build/validators/artifact.js +17 -0
  175. package/build/validators/artifact.js.map +1 -0
  176. package/build/validators/common.d.ts +121 -0
  177. package/build/validators/common.js +65 -0
  178. package/build/validators/common.js.map +1 -0
  179. package/build/validators/filter.d.ts +10 -0
  180. package/build/validators/filter.js +15 -0
  181. package/build/validators/filter.js.map +1 -0
  182. package/build/validators/hooks.d.ts +9 -0
  183. package/build/validators/hooks.js +11 -0
  184. package/build/validators/hooks.js.map +1 -0
  185. package/build/validators/http.d.ts +137 -0
  186. package/build/validators/http.js +19 -0
  187. package/build/validators/http.js.map +1 -0
  188. package/build/validators/index.d.ts +15 -0
  189. package/build/validators/index.js +32 -0
  190. package/build/validators/index.js.map +1 -0
  191. package/build/validators/provider.d.ts +114 -0
  192. package/build/validators/provider.js +42 -0
  193. package/build/validators/provider.js.map +1 -0
  194. package/build/validators/shadowsocks.d.ts +86 -0
  195. package/build/validators/shadowsocks.js +29 -0
  196. package/build/validators/shadowsocks.js.map +1 -0
  197. package/build/validators/shadowsocksr.d.ts +77 -0
  198. package/build/validators/shadowsocksr.js +19 -0
  199. package/build/validators/shadowsocksr.js.map +1 -0
  200. package/build/validators/snell.d.ts +71 -0
  201. package/build/validators/snell.js +17 -0
  202. package/build/validators/snell.js.map +1 -0
  203. package/build/validators/socks5.d.ts +77 -0
  204. package/build/validators/socks5.js +19 -0
  205. package/build/validators/socks5.js.map +1 -0
  206. package/build/validators/surgio-config.d.ts +307 -0
  207. package/build/validators/surgio-config.js +95 -0
  208. package/build/validators/surgio-config.js.map +1 -0
  209. package/build/validators/trojan.d.ts +86 -0
  210. package/build/validators/trojan.js +15 -0
  211. package/build/validators/trojan.js.map +1 -0
  212. package/build/validators/tuic.d.ts +301 -0
  213. package/build/validators/tuic.js +21 -0
  214. package/build/validators/tuic.js.map +1 -0
  215. package/build/validators/vmess.d.ts +92 -0
  216. package/build/validators/vmess.js +29 -0
  217. package/build/validators/vmess.js.map +1 -0
  218. package/build/validators/wireguard.d.ts +123 -0
  219. package/build/validators/wireguard.js +26 -0
  220. package/build/validators/wireguard.js.map +1 -0
  221. package/config.d.ts +1 -0
  222. package/config.js +1 -0
  223. package/constant.d.ts +1 -0
  224. package/constant.js +1 -0
  225. package/generator.d.ts +1 -0
  226. package/generator.js +1 -0
  227. package/hygen-template/artifact/new/index.js +15 -15
  228. package/hygen-template/provider/new/index.js +8 -7
  229. package/hygen-template/template/new/index.js +3 -3
  230. package/index.d.ts +1 -0
  231. package/index.js +1 -0
  232. package/internal.d.ts +1 -0
  233. package/internal.js +1 -0
  234. package/package.json +120 -80
  235. package/provider.d.ts +1 -0
  236. package/provider.js +1 -0
  237. package/utils.d.ts +1 -0
  238. package/utils.js +1 -0
  239. package/bin/surgio.js +0 -8
  240. package/build/command/check.d.ts +0 -9
  241. package/build/command/check.js +0 -79
  242. package/build/command/clean-cache.d.ts +0 -8
  243. package/build/command/clean-cache.js +0 -43
  244. package/build/command/doctor.d.ts +0 -9
  245. package/build/command/doctor.js +0 -63
  246. package/build/command/generate.d.ts +0 -8
  247. package/build/command/generate.js +0 -64
  248. package/build/command/lint.d.ts +0 -7
  249. package/build/command/lint.js +0 -42
  250. package/build/command/new.d.ts +0 -7
  251. package/build/command/new.js +0 -44
  252. package/build/command/subscriptions.d.ts +0 -10
  253. package/build/command/subscriptions.js +0 -87
  254. package/build/command/upload.d.ts +0 -9
  255. package/build/command/upload.js +0 -101
  256. package/build/generate.d.ts +0 -4
  257. package/build/generate.js +0 -75
  258. package/build/utils/command.d.ts +0 -2
  259. package/build/utils/command.js +0 -23
  260. package/build/utils/config.d.ts +0 -6
  261. package/build/utils/config.js +0 -245
  262. package/build/utils/patch-proxy.d.ts +0 -1
  263. package/build/utils/patch-proxy.js +0 -19
  264. package/build/utils/v2ray.d.ts +0 -4
  265. package/build/utils/v2ray.js +0 -41
@@ -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
  }
@@ -22,85 +22,45 @@ var __importStar = (this && this.__importStar) || function (mod) {
22
22
  __setModuleDefault(result, mod);
23
23
  return result;
24
24
  };
25
- var __importDefault = (this && this.__importDefault) || function (mod) {
26
- return (mod && mod.__esModule) ? mod : { "default": mod };
27
- };
28
25
  Object.defineProperty(exports, "__esModule", { value: true });
29
26
  const logger_1 = require("@surgio/logger");
30
- const joi_1 = __importDefault(require("joi"));
31
27
  const constant_1 = require("../constant");
32
- const types_1 = require("../types");
33
28
  const cache_1 = require("../utils/cache");
34
- const config_1 = require("../utils/config");
29
+ const config_1 = require("../config");
35
30
  const env_flag_1 = require("../utils/env-flag");
36
31
  const http_client_1 = __importStar(require("../utils/http-client"));
37
- const subscription_1 = require("../utils/subscription");
38
32
  const utils_1 = require("../utils");
33
+ const validators_1 = require("../validators");
39
34
  const logger = (0, logger_1.createLogger)({
40
35
  service: 'surgio:Provider',
41
36
  });
42
37
  class Provider {
38
+ name;
39
+ type;
40
+ config;
41
+ // 是否支持在订阅中获取用户流量信息
42
+ supportGetSubscriptionUserInfo;
43
+ // 是否传递 Gateway 请求的 User-Agent
44
+ passGatewayRequestUserAgent;
43
45
  constructor(name, config) {
44
46
  this.name = name;
45
- const schema = joi_1.default.object({
46
- type: joi_1.default.string()
47
- .valid(...Object.values(types_1.SupportProviderEnum))
48
- .required(),
49
- nodeFilter: joi_1.default.any().allow(joi_1.default.function(), joi_1.default.object({
50
- filter: joi_1.default.function(),
51
- supportSort: joi_1.default.boolean().strict(),
52
- })),
53
- netflixFilter: joi_1.default.any().allow(joi_1.default.function(), joi_1.default.object({
54
- filter: joi_1.default.function(),
55
- supportSort: joi_1.default.boolean().strict(),
56
- })),
57
- youtubePremiumFilter: joi_1.default.any().allow(joi_1.default.function(), joi_1.default.object({
58
- filter: joi_1.default.function(),
59
- supportSort: joi_1.default.boolean().strict(),
60
- })),
61
- customFilters: joi_1.default.object().pattern(joi_1.default.string(), joi_1.default.any().allow(joi_1.default.function(), joi_1.default.object({
62
- filter: joi_1.default.function(),
63
- supportSort: joi_1.default.boolean().strict(),
64
- }))),
65
- addFlag: joi_1.default.boolean().strict(),
66
- removeExistingFlag: joi_1.default.boolean().strict(),
67
- mptcp: joi_1.default.boolean().strict(),
68
- tfo: joi_1.default.boolean().strict(),
69
- underlyingProxy: joi_1.default.string(),
70
- startPort: joi_1.default.number().integer().min(1024).max(65535),
71
- relayUrl: [joi_1.default.boolean().strict(), joi_1.default.string()],
72
- renameNode: joi_1.default.function(),
73
- requestUserAgent: joi_1.default.string(),
74
- }).unknown();
75
- const { error, value } = schema.validate(config);
47
+ const result = validators_1.ProviderValidator.safeParse(config);
76
48
  // istanbul ignore next
77
- if (error) {
78
- throw error;
49
+ if (!result.success) {
50
+ throw new utils_1.SurgioError('Provider 配置校验失败', {
51
+ cause: result.error,
52
+ providerName: name,
53
+ });
79
54
  }
80
55
  this.supportGetSubscriptionUserInfo = false;
81
- [
82
- 'type',
83
- 'nodeFilter',
84
- 'netflixFilter',
85
- 'youtubePremiumFilter',
86
- 'customFilters',
87
- 'addFlag',
88
- 'removeExistingFlag',
89
- 'tfo',
90
- 'mptcp',
91
- 'startPort',
92
- 'renameNode',
93
- 'relayUrl',
94
- 'requestUserAgent',
95
- 'underlyingProxy',
96
- ].forEach((key) => {
97
- this[key] = value[key];
98
- });
56
+ this.config = result.data;
57
+ this.type = result.data.type;
58
+ this.passGatewayRequestUserAgent =
59
+ (0, config_1.getConfig)()?.gateway?.passRequestUserAgent ?? false;
99
60
  }
100
61
  static async requestCacheableResource(url, options = {}) {
101
- var _a, _b;
102
- const cacheType = ((_b = (_a = (0, config_1.getConfig)()) === null || _a === void 0 ? void 0 : _a.cache) === null || _b === void 0 ? void 0 : _b.type) || 'default';
103
- const cacheKey = `${constant_1.CACHE_KEYS.Provider}:${(0, utils_1.toMD5)((0, http_client_1.getUserAgent)(options.requestUserAgent || '') + url)}`;
62
+ const cacheType = (0, config_1.getConfig)()?.cache?.type || 'default';
63
+ const cacheKey = `${constant_1.CACHE_KEYS.Provider}:${(0, utils_1.toMD5)((0, http_client_1.getUserAgent)(options.requestUserAgent) + url)}`;
104
64
  const requestResource = async () => {
105
65
  const headers = {};
106
66
  if (options.requestUserAgent) {
@@ -114,7 +74,7 @@ class Provider {
114
74
  body: res.body,
115
75
  };
116
76
  if (res.headers['subscription-userinfo']) {
117
- subsciptionCacheItem.subscriptionUserinfo = (0, subscription_1.parseSubscriptionUserInfo)(res.headers['subscription-userinfo']);
77
+ subsciptionCacheItem.subscriptionUserinfo = (0, utils_1.parseSubscriptionUserInfo)(res.headers['subscription-userinfo']);
118
78
  logger.debug('%s received subscription userinfo - raw: %s | parsed: %j', url, res.headers['subscription-userinfo'], subsciptionCacheItem.subscriptionUserinfo);
119
79
  }
120
80
  return subsciptionCacheItem;
@@ -142,20 +102,25 @@ class Provider {
142
102
  })();
143
103
  }
144
104
  }
105
+ determineRequestUserAgent(requestUserAgent) {
106
+ return this.passGatewayRequestUserAgent
107
+ ? requestUserAgent || this.config.requestUserAgent
108
+ : this.config.requestUserAgent;
109
+ }
145
110
  get nextPort() {
146
- if (this.startPort) {
147
- return this.startPort++;
111
+ if (this.config.startPort) {
112
+ return this.config.startPort++;
148
113
  }
149
114
  return 0;
150
115
  }
151
116
  // istanbul ignore next
152
- async getSubscriptionUserInfo({} = {}) {
117
+ getSubscriptionUserInfo = async () => {
153
118
  throw new Error('此 Provider 不支持该功能');
154
- }
119
+ };
155
120
  // istanbul ignore next
156
- getNodeList({} = {}) {
121
+ getNodeList = () => {
157
122
  return Promise.resolve([]);
158
- }
123
+ };
159
124
  }
160
125
  exports.default = Provider;
161
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUHJvdmlkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9saWIvcHJvdmlkZXIvUHJvdmlkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLDJDQUE4QztBQUM5Qyw4Q0FBc0I7QUFFdEIsMENBQXlDO0FBQ3pDLG9DQUtrQjtBQUNsQiwwQ0FJd0I7QUFDeEIsNENBQTRDO0FBQzVDLGdEQUEyRDtBQUMzRCxvRUFBZ0U7QUFDaEUsd0RBQWtFO0FBQ2xFLG9DQUE4QztBQUU5QyxNQUFNLE1BQU0sR0FBRyxJQUFBLHFCQUFZLEVBQUM7SUFDMUIsT0FBTyxFQUFFLGlCQUFpQjtDQUMzQixDQUFDLENBQUM7QUFFSCxNQUFxQixRQUFRO0lBbUIzQixZQUFtQixJQUFZLEVBQUUsTUFBc0I7UUFBcEMsU0FBSSxHQUFKLElBQUksQ0FBUTtRQUM3QixNQUFNLE1BQU0sR0FBRyxhQUFHLENBQUMsTUFBTSxDQUFDO1lBQ3hCLElBQUksRUFBRSxhQUFHLENBQUMsTUFBTSxFQUFFO2lCQUNmLEtBQUssQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQVMsMkJBQW1CLENBQUMsQ0FBQztpQkFDcEQsUUFBUSxFQUFFO1lBQ2IsVUFBVSxFQUFFLGFBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQ3pCLGFBQUcsQ0FBQyxRQUFRLEVBQUUsRUFDZCxhQUFHLENBQUMsTUFBTSxDQUFDO2dCQUNULE1BQU0sRUFBRSxhQUFHLENBQUMsUUFBUSxFQUFFO2dCQUN0QixXQUFXLEVBQUUsYUFBRyxDQUFDLE9BQU8sRUFBRSxDQUFDLE1BQU0sRUFBRTthQUNwQyxDQUFDLENBQ0g7WUFDRCxhQUFhLEVBQUUsYUFBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FDNUIsYUFBRyxDQUFDLFFBQVEsRUFBRSxFQUNkLGFBQUcsQ0FBQyxNQUFNLENBQUM7Z0JBQ1QsTUFBTSxFQUFFLGFBQUcsQ0FBQyxRQUFR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
126
+ //# sourceMappingURL=Provider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Provider.js","sourceRoot":"","sources":["../../src/provider/Provider.ts"],"names":[],"mappings":"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"}
@@ -1,12 +1,11 @@
1
1
  import { ShadowsocksJsonSubscribeProviderConfig, ShadowsocksNodeConfig } from '../types';
2
2
  import Provider from './Provider';
3
+ import { GetNodeListFunction } from './types';
3
4
  export default class ShadowsocksJsonSubscribeProvider extends Provider {
5
+ #private;
4
6
  readonly udpRelay?: boolean;
5
- private readonly _url;
6
7
  constructor(name: string, config: ShadowsocksJsonSubscribeProviderConfig);
7
8
  get url(): string;
8
- getNodeList({ requestUserAgent, }?: {
9
- requestUserAgent?: string;
10
- }): ReturnType<typeof getShadowsocksJSONConfig>;
9
+ getNodeList: GetNodeListFunction;
11
10
  }
12
- export declare const getShadowsocksJSONConfig: (url: string, udpRelay?: boolean, requestUserAgent?: string) => Promise<ReadonlyArray<ShadowsocksNodeConfig>>;
11
+ export declare const getShadowsocksJSONConfig: (url: string, udpRelay?: boolean, requestUserAgent?: string) => Promise<Array<ShadowsocksNodeConfig>>;
@@ -5,36 +5,46 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.getShadowsocksJSONConfig = void 0;
7
7
  const assert_1 = __importDefault(require("assert"));
8
- const joi_1 = __importDefault(require("joi"));
8
+ const zod_1 = require("zod");
9
9
  const types_1 = require("../types");
10
+ const utils_1 = require("../utils");
10
11
  const relayable_url_1 = __importDefault(require("../utils/relayable-url"));
11
12
  const Provider_1 = __importDefault(require("./Provider"));
12
13
  class ShadowsocksJsonSubscribeProvider extends Provider_1.default {
14
+ #originalUrl;
15
+ udpRelay;
13
16
  constructor(name, config) {
14
17
  super(name, config);
15
- const schema = joi_1.default.object({
16
- url: joi_1.default.string()
17
- .uri({
18
- scheme: [/https?/],
19
- })
20
- .required(),
21
- udpRelay: joi_1.default.boolean().strict(),
22
- }).unknown();
23
- const { error } = schema.validate(config);
18
+ const schema = zod_1.z.object({
19
+ url: zod_1.z.string().url(),
20
+ udpRelay: zod_1.z.boolean().optional(),
21
+ });
22
+ const result = schema.safeParse(config);
24
23
  // istanbul ignore next
25
- if (error) {
26
- throw error;
24
+ if (!result.success) {
25
+ throw new utils_1.SurgioError('ShadowsocksJsonSubscribeProvider 配置校验失败', {
26
+ cause: result.error,
27
+ providerName: name,
28
+ });
27
29
  }
28
- this._url = config.url;
29
- this.udpRelay = config.udpRelay;
30
+ this.#originalUrl = result.data.url;
31
+ this.udpRelay = result.data.udpRelay;
30
32
  }
31
33
  // istanbul ignore next
32
34
  get url() {
33
- return (0, relayable_url_1.default)(this._url, this.relayUrl);
34
- }
35
- getNodeList({ requestUserAgent, } = {}) {
36
- return (0, exports.getShadowsocksJSONConfig)(this.url, this.udpRelay, requestUserAgent || this.requestUserAgent);
35
+ return (0, relayable_url_1.default)(this.#originalUrl, this.config.relayUrl);
37
36
  }
37
+ getNodeList = async (params = {}) => {
38
+ const requestUserAgent = this.determineRequestUserAgent(params.requestUserAgent);
39
+ const nodeList = await (0, exports.getShadowsocksJSONConfig)(this.url, this.udpRelay, requestUserAgent);
40
+ if (this.config.hooks?.afterNodeListResponse) {
41
+ const newList = await this.config.hooks.afterNodeListResponse(nodeList, params);
42
+ if (newList) {
43
+ return newList;
44
+ }
45
+ }
46
+ return nodeList;
47
+ };
38
48
  }
39
49
  exports.default = ShadowsocksJsonSubscribeProvider;
40
50
  const getShadowsocksJSONConfig = async (url, udpRelay, requestUserAgent) => {
@@ -57,14 +67,14 @@ const getShadowsocksJSONConfig = async (url, udpRelay, requestUserAgent) => {
57
67
  password: item.password,
58
68
  };
59
69
  if (typeof udpRelay === 'boolean') {
60
- nodeConfig['udp-relay'] = udpRelay;
70
+ nodeConfig.udpRelay = udpRelay;
61
71
  }
62
72
  if (item.plugin === 'obfs-local') {
63
73
  const obfs = item.plugin_opts.match(/obfs=(\w+)/);
64
74
  const obfsHost = item.plugin_opts.match(/obfs-host=(.+)$/);
65
75
  if (obfs) {
66
76
  nodeConfig.obfs = obfs[1];
67
- nodeConfig['obfs-host'] = obfsHost ? obfsHost[1] : 'www.bing.com';
77
+ nodeConfig.obfsHost = obfsHost ? obfsHost[1] : 'www.bing.com';
68
78
  }
69
79
  }
70
80
  return nodeConfig;
@@ -73,4 +83,4 @@ const getShadowsocksJSONConfig = async (url, udpRelay, requestUserAgent) => {
73
83
  return await requestConfigFromRemote();
74
84
  };
75
85
  exports.getShadowsocksJSONConfig = getShadowsocksJSONConfig;
76
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2hhZG93c29ja3NKc29uU3Vic2NyaWJlUHJvdmlkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9saWIvcHJvdmlkZXIvU2hhZG93c29ja3NKc29uU3Vic2NyaWJlUHJvdmlkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsb0RBQTRCO0FBQzVCLDhDQUFzQjtBQUN0QixvQ0FJa0I7QUFDbEIsMkVBQWtEO0FBQ2xELDBEQUFrQztBQUVsQyxNQUFxQixnQ0FBaUMsU0FBUSxrQkFBUTtJQUlwRSxZQUFZLElBQVksRUFBRSxNQUE4QztRQUN0RSxLQUFLLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBRXBCLE1BQU0sTUFBTSxHQUFHLGFBQUcsQ0FBQyxNQUFNLENBQUM7WUFDeEIsR0FBRyxFQUFFLGFBQUcsQ0FBQyxNQUFNLEVBQUU7aUJBQ2QsR0FBRyxDQUFDO2dCQUNILE1BQU0sRUFBRSxDQUFDLFFBQVEsQ0FBQzthQUNuQixDQUFDO2lCQUNELFFBQVEsRUFBRTtZQUNiLFFBQVEsRUFBRSxhQUFHLENBQUMsT0FBTyxFQUFFLENBQUMsTUFBTSxFQUFFO1NBQ2pDLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUViLE1BQU0sRUFBRSxLQUFLLEVBQUUsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBRTFDLHVCQUF1QjtRQUN2QixJQUFJLEtBQUssRUFBRTtZQUNULE1BQU0sS0FBSyxDQUFDO1NBQ2I7UUFFRCxJQUFJLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUM7UUFDdkIsSUFBSSxDQUFDLFFBQVEsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDO0lBQ2xDLENBQUM7SUFFRCx1QkFBdUI7SUFDdkIsSUFBVyxHQUFHO1FBQ1osT0FBTyxJQUFBLHVCQUFZLEVBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDaEQsQ0FBQztJQUVNLFdBQVcsQ0FBQyxFQUNqQixnQkFBZ0IsTUFDaUIsRUFBRTtRQUduQyxPQUFPLElBQUEsZ0NBQXdCLEVBQzdCLElBQUksQ0FBQyxHQUFHLEVBQ1IsSUFBSSxDQUFDLFFBQVEsRUFDYixnQkFBZ0IsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLENBQzFDLENBQUM7SUFDSixDQUFDO0NBQ0Y7QUEzQ0QsbURBMkNDO0FBRU0sTUFBTSx3QkFBd0IsR0FBRyxLQUFLLEVBQzNDLEdBQVcsRUFDWCxRQUFrQixFQUNsQixnQkFBeUIsRUFDc0IsRUFBRTtJQUNqRCxJQUFBLGdCQUFNLEVBQUMsR0FBRyxFQUFFLGFBQWEsQ0FBQyxDQUFDO0lBRTNCLEtBQUssVUFBVSx1QkFBdUI7UUFHcEMsTUFBTSxRQUFRLEdBQUcsTUFBTSxrQkFBUSxDQUFDLHdCQUF3QixDQUFDLEdBQUcsRUFBRTtZQUM1RCxnQkFBZ0IsRUFBRSxnQkFBZ0IsSUFBSSxjQUFjO1NBQ3JELENBQUMsQ0FBQztRQUNILE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLElBQUksQ0FFdEMsQ0FBQztRQUVGLElBQUksQ0FBQyxNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFO1lBQzlCLE1BQU0sSUFBSSxLQUFLLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztTQUNuQztRQUVELE9BQU8sTUFBTSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQXlCLEVBQUU7WUFDeEQsTUFBTSxVQUFVLEdBQVE7Z0JBQ3RCLFFBQVEsRUFBRSxJQUFJLENBQUMsT0FBaUI7Z0JBQ2hDLElBQUksRUFBRSxvQkFBWSxDQUFDLFdBQVc7Z0JBQzlCLFFBQVEsRUFBRSxJQUFJLENBQUMsTUFBZ0I7Z0JBQy9CLElBQUksRUFBRSxJQUFJLENBQUMsV0FBcUI7Z0JBQ2hDLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBZ0I7Z0JBQzdCLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBa0I7YUFDbEMsQ0FBQztZQUVGLElBQUksT0FBTyxRQUFRLEtBQUssU0FBUyxFQUFFO2dCQUNqQyxVQUFVLENBQUMsV0FBVyxDQUFDLEdBQUcsUUFBUSxDQUFDO2FBQ3BDO1lBQ0QsSUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLFlBQVksRUFBRTtnQkFDaEMsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLENBQUM7Z0JBQ2xELE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLGlCQUFpQixDQUFDLENBQUM7Z0JBRTNELElBQUksSUFBSSxFQUFFO29CQUNSLFVBQVUsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO29CQUMxQixVQUFVLENBQUMsV0FBVyxDQUFDLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQztpQkFDbkU7YUFDRjtZQUVELE9BQU8sVUFBVSxDQUFDO1FBQ3BCLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELE9BQU8sTUFBTSx1QkFBdUIsRUFBRSxDQUFDO0FBQ3pDLENBQUMsQ0FBQztBQWpEVyxRQUFBLHdCQUF3Qiw0QkFpRG5DIn0=
86
+ //# sourceMappingURL=ShadowsocksJsonSubscribeProvider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ShadowsocksJsonSubscribeProvider.js","sourceRoot":"","sources":["../../src/provider/ShadowsocksJsonSubscribeProvider.ts"],"names":[],"mappings":"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"}
@@ -1,21 +1,18 @@
1
1
  import { ShadowsocksNodeConfig, ShadowsocksSubscribeProviderConfig, SubscriptionUserinfo } from '../types';
2
2
  import Provider from './Provider';
3
+ import { GetNodeListFunction, GetSubscriptionUserInfoFunction } from './types';
3
4
  export default class ShadowsocksSubscribeProvider extends Provider {
5
+ #private;
4
6
  readonly udpRelay?: boolean;
5
- private readonly _url;
6
7
  constructor(name: string, config: ShadowsocksSubscribeProviderConfig);
7
8
  get url(): string;
8
- getSubscriptionUserInfo({ requestUserAgent, }?: {
9
- requestUserAgent?: string;
10
- }): Promise<SubscriptionUserinfo | undefined>;
11
- getNodeList({ requestUserAgent, }?: {
12
- requestUserAgent?: string;
13
- }): Promise<ReadonlyArray<ShadowsocksNodeConfig>>;
9
+ getSubscriptionUserInfo: GetSubscriptionUserInfoFunction;
10
+ getNodeList: GetNodeListFunction;
14
11
  }
15
12
  /**
16
13
  * @see https://shadowsocks.org/en/spec/SIP002-URI-Scheme.html
17
14
  */
18
15
  export declare const getShadowsocksSubscription: (url: string, udpRelay?: boolean, requestUserAgent?: string) => Promise<{
19
- readonly nodeList: ReadonlyArray<ShadowsocksNodeConfig>;
16
+ readonly nodeList: Array<ShadowsocksNodeConfig>;
20
17
  readonly subscriptionUserinfo?: SubscriptionUserinfo | undefined;
21
18
  }>;
@@ -4,51 +4,56 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.getShadowsocksSubscription = void 0;
7
- const joi_1 = __importDefault(require("joi"));
8
7
  const assert_1 = __importDefault(require("assert"));
9
- const logger_1 = require("@surgio/logger");
8
+ const zod_1 = require("zod");
10
9
  const utils_1 = require("../utils");
11
10
  const relayable_url_1 = __importDefault(require("../utils/relayable-url"));
12
11
  const ss_1 = require("../utils/ss");
13
12
  const Provider_1 = __importDefault(require("./Provider"));
14
- const logger = (0, logger_1.createLogger)({
15
- service: 'surgio:ShadowsocksSubscribeProvider',
16
- });
17
13
  class ShadowsocksSubscribeProvider extends Provider_1.default {
14
+ udpRelay;
15
+ #originalUrl;
18
16
  constructor(name, config) {
19
17
  super(name, config);
20
- const schema = joi_1.default.object({
21
- url: joi_1.default.string()
22
- .uri({
23
- scheme: [/https?/],
24
- })
25
- .required(),
26
- udpRelay: joi_1.default.boolean().strict(),
27
- }).unknown();
28
- const { error } = schema.validate(config);
18
+ const schema = zod_1.z.object({
19
+ url: zod_1.z.string().url(),
20
+ udpRelay: zod_1.z.boolean().optional(),
21
+ });
22
+ const result = schema.safeParse(config);
29
23
  // istanbul ignore next
30
- if (error) {
31
- throw error;
24
+ if (!result.success) {
25
+ throw new utils_1.SurgioError('ShadowsocksSubscribeProvider 配置校验失败', {
26
+ cause: result.error,
27
+ providerName: name,
28
+ });
32
29
  }
33
- this._url = config.url;
34
- this.udpRelay = config.udpRelay;
30
+ this.#originalUrl = result.data.url;
31
+ this.udpRelay = result.data.udpRelay;
35
32
  this.supportGetSubscriptionUserInfo = true;
36
33
  }
37
34
  // istanbul ignore next
38
35
  get url() {
39
- return (0, relayable_url_1.default)(this._url, this.relayUrl);
36
+ return (0, relayable_url_1.default)(this.#originalUrl, this.config.relayUrl);
40
37
  }
41
- async getSubscriptionUserInfo({ requestUserAgent, } = {}) {
42
- const { subscriptionUserinfo } = await (0, exports.getShadowsocksSubscription)(this.url, this.udpRelay, requestUserAgent || this.requestUserAgent);
38
+ getSubscriptionUserInfo = async (params = {}) => {
39
+ const requestUserAgent = this.determineRequestUserAgent(params.requestUserAgent);
40
+ const { subscriptionUserinfo } = await (0, exports.getShadowsocksSubscription)(this.url, this.udpRelay, requestUserAgent);
43
41
  if (subscriptionUserinfo) {
44
42
  return subscriptionUserinfo;
45
43
  }
46
44
  return undefined;
47
- }
48
- async getNodeList({ requestUserAgent, } = {}) {
49
- const { nodeList } = await (0, exports.getShadowsocksSubscription)(this.url, this.udpRelay, requestUserAgent || this.requestUserAgent);
45
+ };
46
+ getNodeList = async (params = {}) => {
47
+ const requestUserAgent = this.determineRequestUserAgent(params.requestUserAgent);
48
+ const { nodeList } = await (0, exports.getShadowsocksSubscription)(this.url, this.udpRelay, requestUserAgent);
49
+ if (this.config.hooks?.afterNodeListResponse) {
50
+ const newList = await this.config.hooks.afterNodeListResponse(nodeList, params);
51
+ if (newList) {
52
+ return newList;
53
+ }
54
+ }
50
55
  return nodeList;
51
- }
56
+ };
52
57
  }
53
58
  exports.default = ShadowsocksSubscribeProvider;
54
59
  /**
@@ -65,7 +70,8 @@ const getShadowsocksSubscription = async (url, udpRelay, requestUserAgent) => {
65
70
  .map((item) => {
66
71
  const nodeConfig = (0, ss_1.parseSSUri)(item);
67
72
  if (udpRelay !== void 0) {
68
- nodeConfig['udp-relay'] = udpRelay;
73
+ ;
74
+ nodeConfig.udpRelay = udpRelay;
69
75
  }
70
76
  return nodeConfig;
71
77
  });
@@ -75,4 +81,4 @@ const getShadowsocksSubscription = async (url, udpRelay, requestUserAgent) => {
75
81
  };
76
82
  };
77
83
  exports.getShadowsocksSubscription = getShadowsocksSubscription;
78
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2hhZG93c29ja3NTdWJzY3JpYmVQcm92aWRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL2xpYi9wcm92aWRlci9TaGFkb3dzb2Nrc1N1YnNjcmliZVByb3ZpZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLDhDQUFzQjtBQUN0QixvREFBNEI7QUFDNUIsMkNBQThDO0FBTzlDLG9DQUFzQztBQUN0QywyRUFBa0Q7QUFDbEQsb0NBQXlDO0FBQ3pDLDBEQUFrQztBQUVsQyxNQUFNLE1BQU0sR0FBRyxJQUFBLHFCQUFZLEVBQUM7SUFDMUIsT0FBTyxFQUFFLHFDQUFxQztDQUMvQyxDQUFDLENBQUM7QUFFSCxNQUFxQiw0QkFBNkIsU0FBUSxrQkFBUTtJQUloRSxZQUFZLElBQVksRUFBRSxNQUEwQztRQUNsRSxLQUFLLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBRXBCLE1BQU0sTUFBTSxHQUFHLGFBQUcsQ0FBQyxNQUFNLENBQUM7WUFDeEIsR0FBRyxFQUFFLGFBQUcsQ0FBQyxNQUFNLEVBQUU7aUJBQ2QsR0FBRyxDQUFDO2dCQUNILE1BQU0sRUFBRSxDQUFDLFFBQVEsQ0FBQzthQUNuQixDQUFDO2lCQUNELFFBQVEsRUFBRTtZQUNiLFFBQVEsRUFBRSxhQUFHLENBQUMsT0FBTyxFQUFFLENBQUMsTUFBTSxFQUFFO1NBQ2pDLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUViLE1BQU0sRUFBRSxLQUFLLEVBQUUsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBRTFDLHVCQUF1QjtRQUN2QixJQUFJLEtBQUssRUFBRTtZQUNULE1BQU0sS0FBSyxDQUFDO1NBQ2I7UUFFRCxJQUFJLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUM7UUFDdkIsSUFBSSxDQUFDLFFBQVEsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDO1FBQ2hDLElBQUksQ0FBQyw4QkFBOEIsR0FBRyxJQUFJLENBQUM7SUFDN0MsQ0FBQztJQUVELHVCQUF1QjtJQUN2QixJQUFXLEdBQUc7UUFDWixPQUFPLElBQUEsdUJBQVksRUFBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUNoRCxDQUFDO0lBRU0sS0FBSyxDQUFDLHVCQUF1QixDQUFDLEVBQ25DLGdCQUFnQixNQUNpQixFQUFFO1FBR25DLE1BQU0sRUFBRSxvQkFBb0IsRUFBRSxHQUFHLE1BQU0sSUFBQSxrQ0FBMEIsRUFDL0QsSUFBSSxDQUFDLEdBQUcsRUFDUixJQUFJLENBQUMsUUFBUSxFQUNiLGdCQUFnQixJQUFJLElBQUksQ0FBQyxnQkFBZ0IsQ0FDMUMsQ0FBQztRQUVGLElBQUksb0JBQW9CLEVBQUU7WUFDeEIsT0FBTyxvQkFBb0IsQ0FBQztTQUM3QjtRQUNELE9BQU8sU0FBUyxDQUFDO0lBQ25CLENBQUM7SUFFTSxLQUFLLENBQUMsV0FBVyxDQUFDLEVBQ3ZCLGdCQUFnQixNQUNpQixFQUFFO1FBR25DLE1BQU0sRUFBRSxRQUFRLEVBQUUsR0FBRyxNQUFNLElBQUEsa0NBQTBCLEVBQ25ELElBQUksQ0FBQyxHQUFHLEVBQ1IsSUFBSSxDQUFDLFFBQVEsRUFDYixnQkFBZ0IsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLENBQzFDLENBQUM7UUFFRixPQUFPLFFBQVEsQ0FBQztJQUNsQixDQUFDO0NBQ0Y7QUEvREQsK0NBK0RDO0FBRUQ7O0dBRUc7QUFDSSxNQUFNLDBCQUEwQixHQUFHLEtBQUssRUFDN0MsR0FBVyxFQUNYLFFBQWtCLEVBQ2xCLGdCQUF5QixFQUl4QixFQUFFO0lBQ0gsSUFBQSxnQkFBTSxFQUFDLEdBQUcsRUFBRSxhQUFhLENBQUMsQ0FBQztJQUUzQixNQUFNLFFBQVEsR0FBRyxNQUFNLGtCQUFRLENBQUMsd0JBQXdCLENBQUMsR0FBRyxFQUFFO1FBQzVELGdCQUFnQjtLQUNqQixDQUFDLENBQUM7SUFDSCxNQUFNLFFBQVEsR0FBRyxJQUFBLGtCQUFVLEVBQUMsUUFBUSxDQUFDLElBQUksQ0FBQztTQUN2QyxLQUFLLENBQUMsSUFBSSxDQUFDO1NBQ1gsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUM7U0FDcEQsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUF5QixFQUFFO1FBQ25DLE1BQU0sVUFBVSxHQUFHLElBQUEsZUFBVSxFQUFDLElBQUksQ0FBQyxDQUFDO1FBRXBDLElBQUksUUFBUSxLQUFLLEtBQUssQ0FBQyxFQUFFO1lBQ3RCLFVBQVUsQ0FBQyxXQUFXLENBQWEsR0FBRyxRQUFRLENBQUM7U0FDakQ7UUFFRCxPQUFPLFVBQVUsQ0FBQztJQUNwQixDQUFDLENBQUMsQ0FBQztJQUVMLE9BQU87UUFDTCxRQUFRO1FBQ1Isb0JBQW9CLEVBQUUsUUFBUSxDQUFDLG9CQUFvQjtLQUNwRCxDQUFDO0FBQ0osQ0FBQyxDQUFDO0FBOUJXLFFBQUEsMEJBQTBCLDhCQThCckMifQ==
84
+ //# sourceMappingURL=ShadowsocksSubscribeProvider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ShadowsocksSubscribeProvider.js","sourceRoot":"","sources":["../../src/provider/ShadowsocksSubscribeProvider.ts"],"names":[],"mappings":"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"}
@@ -1,18 +1,15 @@
1
1
  import { ShadowsocksrNodeConfig, ShadowsocksrSubscribeProviderConfig, SubscriptionUserinfo } from '../types';
2
2
  import Provider from './Provider';
3
+ import { GetNodeListFunction, GetSubscriptionUserInfoFunction } from './types';
3
4
  export default class ShadowsocksrSubscribeProvider extends Provider {
5
+ #private;
4
6
  readonly udpRelay?: boolean;
5
- private readonly _url;
6
7
  constructor(name: string, config: ShadowsocksrSubscribeProviderConfig);
7
8
  get url(): string;
8
- getSubscriptionUserInfo({ requestUserAgent, }?: {
9
- requestUserAgent?: string;
10
- }): Promise<SubscriptionUserinfo | undefined>;
11
- getNodeList({ requestUserAgent, }?: {
12
- requestUserAgent?: string;
13
- }): Promise<ReadonlyArray<ShadowsocksrNodeConfig>>;
9
+ getSubscriptionUserInfo: GetSubscriptionUserInfoFunction;
10
+ getNodeList: GetNodeListFunction;
14
11
  }
15
12
  export declare const getShadowsocksrSubscription: (url: string, udpRelay?: boolean, requestUserAgent?: string) => Promise<{
16
- readonly nodeList: ReadonlyArray<ShadowsocksrNodeConfig>;
13
+ readonly nodeList: Array<ShadowsocksrNodeConfig>;
17
14
  readonly subscriptionUserinfo?: SubscriptionUserinfo | undefined;
18
15
  }>;
@@ -4,9 +4,9 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.getShadowsocksrSubscription = void 0;
7
- const joi_1 = __importDefault(require("joi"));
8
7
  const logger_1 = require("@surgio/logger");
9
8
  const assert_1 = __importDefault(require("assert"));
9
+ const zod_1 = require("zod");
10
10
  const utils_1 = require("../utils");
11
11
  const relayable_url_1 = __importDefault(require("../utils/relayable-url"));
12
12
  const subscription_1 = require("../utils/subscription");
@@ -16,40 +16,49 @@ const logger = (0, logger_1.createLogger)({
16
16
  service: 'surgio:ShadowsocksrSubscribeProvider',
17
17
  });
18
18
  class ShadowsocksrSubscribeProvider extends Provider_1.default {
19
+ udpRelay;
20
+ #originalUrl;
19
21
  constructor(name, config) {
20
22
  super(name, config);
21
- const schema = joi_1.default.object({
22
- url: joi_1.default.string()
23
- .uri({
24
- scheme: [/https?/],
25
- })
26
- .required(),
27
- udpRelay: joi_1.default.boolean().strict(),
28
- }).unknown();
29
- const { error } = schema.validate(config);
23
+ const schema = zod_1.z.object({
24
+ url: zod_1.z.string().url(),
25
+ udpRelay: zod_1.z.boolean().optional(),
26
+ });
27
+ const result = schema.safeParse(config);
30
28
  // istanbul ignore next
31
- if (error) {
32
- throw error;
29
+ if (!result.success) {
30
+ throw new utils_1.SurgioError('ShadowsocksrSubscribeProvider 配置校验失败', {
31
+ cause: result.error,
32
+ providerName: name,
33
+ });
33
34
  }
34
- this._url = config.url;
35
- this.udpRelay = config.udpRelay;
35
+ this.#originalUrl = result.data.url;
36
+ this.udpRelay = result.data.udpRelay;
36
37
  this.supportGetSubscriptionUserInfo = true;
37
38
  }
38
39
  // istanbul ignore next
39
40
  get url() {
40
- return (0, relayable_url_1.default)(this._url, this.relayUrl);
41
+ return (0, relayable_url_1.default)(this.#originalUrl, this.config.relayUrl);
41
42
  }
42
- async getSubscriptionUserInfo({ requestUserAgent, } = {}) {
43
- const { subscriptionUserinfo } = await (0, exports.getShadowsocksrSubscription)(this.url, this.udpRelay, requestUserAgent || this.requestUserAgent);
43
+ getSubscriptionUserInfo = async (params = {}) => {
44
+ const requestUserAgent = this.determineRequestUserAgent(params.requestUserAgent);
45
+ const { subscriptionUserinfo } = await (0, exports.getShadowsocksrSubscription)(this.url, this.udpRelay, requestUserAgent);
44
46
  if (subscriptionUserinfo) {
45
47
  return subscriptionUserinfo;
46
48
  }
47
49
  return undefined;
48
- }
49
- async getNodeList({ requestUserAgent, } = {}) {
50
- const { nodeList } = await (0, exports.getShadowsocksrSubscription)(this.url, this.udpRelay, requestUserAgent || this.requestUserAgent);
50
+ };
51
+ getNodeList = async (params = {}) => {
52
+ const requestUserAgent = this.determineRequestUserAgent(params.requestUserAgent);
53
+ const { nodeList } = await (0, exports.getShadowsocksrSubscription)(this.url, this.udpRelay, requestUserAgent);
54
+ if (this.config.hooks?.afterNodeListResponse) {
55
+ const newList = await this.config.hooks.afterNodeListResponse(nodeList, params);
56
+ if (newList) {
57
+ return newList;
58
+ }
59
+ }
51
60
  return nodeList;
52
- }
61
+ };
53
62
  }
54
63
  exports.default = ShadowsocksrSubscribeProvider;
55
64
  const getShadowsocksrSubscription = async (url, udpRelay, requestUserAgent) => {
@@ -63,7 +72,8 @@ const getShadowsocksrSubscription = async (url, udpRelay, requestUserAgent) => {
63
72
  .map((str) => {
64
73
  const nodeConfig = (0, ssr_1.parseSSRUri)(str);
65
74
  if (udpRelay !== void 0) {
66
- nodeConfig['udp-relay'] = udpRelay;
75
+ ;
76
+ nodeConfig.udpRelay = udpRelay;
67
77
  }
68
78
  return nodeConfig;
69
79
  });
@@ -80,4 +90,4 @@ const getShadowsocksrSubscription = async (url, udpRelay, requestUserAgent) => {
80
90
  };
81
91
  };
82
92
  exports.getShadowsocksrSubscription = getShadowsocksrSubscription;
83
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2hhZG93c29ja3NyU3Vic2NyaWJlUHJvdmlkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9saWIvcHJvdmlkZXIvU2hhZG93c29ja3NyU3Vic2NyaWJlUHJvdmlkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsOENBQXNCO0FBQ3RCLDJDQUE4QztBQUM5QyxvREFBNEI7QUFPNUIsb0NBQXNDO0FBQ3RDLDJFQUFrRDtBQUNsRCx3REFBOEQ7QUFDOUQsc0NBQTJDO0FBQzNDLDBEQUFrQztBQUVsQyxNQUFNLE1BQU0sR0FBRyxJQUFBLHFCQUFZLEVBQUM7SUFDMUIsT0FBTyxFQUFFLHNDQUFzQztDQUNoRCxDQUFDLENBQUM7QUFFSCxNQUFxQiw2QkFBOEIsU0FBUSxrQkFBUTtJQUlqRSxZQUFZLElBQVksRUFBRSxNQUEyQztRQUNuRSxLQUFLLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBRXBCLE1BQU0sTUFBTSxHQUFHLGFBQUcsQ0FBQyxNQUFNLENBQUM7WUFDeEIsR0FBRyxFQUFFLGFBQUcsQ0FBQyxNQUFNLEVBQUU7aUJBQ2QsR0FBRyxDQUFDO2dCQUNILE1BQU0sRUFBRSxDQUFDLFFBQVEsQ0FBQzthQUNuQixDQUFDO2lCQUNELFFBQVEsRUFBRTtZQUNiLFFBQVEsRUFBRSxhQUFHLENBQUMsT0FBTyxFQUFFLENBQUMsTUFBTSxFQUFFO1NBQ2pDLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUViLE1BQU0sRUFBRSxLQUFLLEVBQUUsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBRTFDLHVCQUF1QjtRQUN2QixJQUFJLEtBQUssRUFBRTtZQUNULE1BQU0sS0FBSyxDQUFDO1NBQ2I7UUFFRCxJQUFJLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUM7UUFDdkIsSUFBSSxDQUFDLFFBQVEsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDO1FBQ2hDLElBQUks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
93
+ //# sourceMappingURL=ShadowsocksrSubscribeProvider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ShadowsocksrSubscribeProvider.js","sourceRoot":"","sources":["../../src/provider/ShadowsocksrSubscribeProvider.ts"],"names":[],"mappings":"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"}
@@ -1,19 +1,16 @@
1
1
  import { ShadowsocksNodeConfig, SsdProviderConfig, SubscriptionUserinfo } from '../types';
2
2
  import Provider from './Provider';
3
+ import { GetNodeListFunction, GetSubscriptionUserInfoFunction } from './types';
3
4
  export default class SsdProvider extends Provider {
4
- readonly _url: string;
5
+ #private;
5
6
  readonly udpRelay?: boolean;
6
7
  constructor(name: string, config: SsdProviderConfig);
7
8
  get url(): string;
8
- getSubscriptionUserInfo({ requestUserAgent, }?: {
9
- requestUserAgent?: string;
10
- }): Promise<SubscriptionUserinfo | undefined>;
11
- getNodeList({ requestUserAgent, }?: {
12
- requestUserAgent?: string;
13
- }): Promise<ReadonlyArray<ShadowsocksNodeConfig>>;
9
+ getSubscriptionUserInfo: GetSubscriptionUserInfoFunction;
10
+ getNodeList: GetNodeListFunction;
14
11
  }
15
12
  export declare const getSsdSubscription: (url: string, udpRelay?: boolean, requestUserAgent?: string) => Promise<{
16
- readonly nodeList: ReadonlyArray<ShadowsocksNodeConfig>;
13
+ readonly nodeList: Array<ShadowsocksNodeConfig>;
17
14
  readonly subscriptionUserinfo?: SubscriptionUserinfo | undefined;
18
15
  }>;
19
16
  export declare const parseSsdConfig: (globalConfig: SsdSubscription, server: SsdServer, udpRelay?: boolean) => ShadowsocksNodeConfig | undefined;