surgio 2.14.2 → 2.17.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 (47) hide show
  1. package/CHANGELOG.md +80 -50
  2. package/README.md +2 -5
  3. package/build/command/generate.js +2 -2
  4. package/build/command/lint.js +2 -2
  5. package/build/constant/index.js +6 -2
  6. package/build/generator/artifact.d.ts +3 -1
  7. package/build/generator/artifact.js +7 -5
  8. package/build/index.d.ts +3 -1
  9. package/build/index.js +11 -4
  10. package/build/provider/ClashProvider.d.ts +9 -2
  11. package/build/provider/ClashProvider.js +24 -10
  12. package/build/provider/CustomProvider.js +14 -5
  13. package/build/provider/Provider.d.ts +3 -1
  14. package/build/provider/Provider.js +31 -6
  15. package/build/provider/ShadowsocksJsonSubscribeProvider.d.ts +5 -3
  16. package/build/provider/ShadowsocksJsonSubscribeProvider.js +42 -4
  17. package/build/provider/ShadowsocksSubscribeProvider.d.ts +4 -2
  18. package/build/provider/ShadowsocksSubscribeProvider.js +7 -5
  19. package/build/provider/ShadowsocksrSubscribeProvider.d.ts +4 -2
  20. package/build/provider/ShadowsocksrSubscribeProvider.js +7 -5
  21. package/build/provider/SsdProvider.d.ts +4 -2
  22. package/build/provider/SsdProvider.js +7 -5
  23. package/build/provider/TrojanProvider.d.ts +9 -2
  24. package/build/provider/TrojanProvider.js +15 -6
  25. package/build/provider/V2rayNSubscribeProvider.d.ts +11 -2
  26. package/build/provider/V2rayNSubscribeProvider.js +17 -15
  27. package/build/types.d.ts +3 -0
  28. package/build/utils/cache.d.ts +4 -3
  29. package/build/utils/cache.js +17 -9
  30. package/build/utils/clash.d.ts +3 -0
  31. package/build/utils/clash.js +147 -0
  32. package/build/utils/constant.js +6 -2
  33. package/build/utils/dns.js +5 -5
  34. package/build/utils/env-flag.js +1 -1
  35. package/build/utils/error-helper.js +2 -2
  36. package/build/utils/filter.d.ts +1 -0
  37. package/build/utils/filter.js +27 -3
  38. package/build/utils/http-client.js +6 -2
  39. package/build/utils/index.d.ts +7 -15
  40. package/build/utils/index.js +28 -739
  41. package/build/utils/loon.js +52 -20
  42. package/build/utils/patch-proxy.js +7 -2
  43. package/build/utils/quantumult.d.ts +6 -0
  44. package/build/utils/quantumult.js +255 -0
  45. package/build/utils/surge.d.ts +6 -0
  46. package/build/utils/surge.js +365 -0
  47. package/package.json +5 -5
@@ -6,9 +6,11 @@ export default class ShadowsocksrSubscribeProvider extends Provider {
6
6
  constructor(name: string, config: ShadowsocksrSubscribeProviderConfig);
7
7
  get url(): string;
8
8
  getSubscriptionUserInfo(): Promise<SubscriptionUserinfo | undefined>;
9
- getNodeList(): Promise<ReadonlyArray<ShadowsocksrNodeConfig>>;
9
+ getNodeList({ requestUserAgent, }?: {
10
+ requestUserAgent?: string;
11
+ }): Promise<ReadonlyArray<ShadowsocksrNodeConfig>>;
10
12
  }
11
- export declare const getShadowsocksrSubscription: (url: string, udpRelay?: boolean | undefined) => Promise<{
13
+ export declare const getShadowsocksrSubscription: (url: string, udpRelay?: boolean | undefined, requestUserAgent?: string | undefined) => Promise<{
12
14
  readonly nodeList: ReadonlyArray<ShadowsocksrNodeConfig>;
13
15
  readonly subscriptionUserinfo?: SubscriptionUserinfo | undefined;
14
16
  }>;
@@ -46,15 +46,17 @@ class ShadowsocksrSubscribeProvider extends Provider_1.default {
46
46
  }
47
47
  return undefined;
48
48
  }
49
- async getNodeList() {
50
- const { nodeList } = await (0, exports.getShadowsocksrSubscription)(this.url, this.udpRelay);
49
+ async getNodeList({ requestUserAgent, } = {}) {
50
+ const { nodeList } = await (0, exports.getShadowsocksrSubscription)(this.url, this.udpRelay, requestUserAgent);
51
51
  return nodeList;
52
52
  }
53
53
  }
54
54
  exports.default = ShadowsocksrSubscribeProvider;
55
- const getShadowsocksrSubscription = async (url, udpRelay) => {
55
+ const getShadowsocksrSubscription = async (url, udpRelay, requestUserAgent) => {
56
56
  (0, assert_1.default)(url, '未指定订阅地址 url');
57
- const response = await Provider_1.default.requestCacheableResource(url);
57
+ const response = await Provider_1.default.requestCacheableResource(url, {
58
+ requestUserAgent,
59
+ });
58
60
  const nodeList = (0, utils_1.fromBase64)(response.body)
59
61
  .split('\n')
60
62
  .filter((item) => !!item && item.startsWith('ssr://'))
@@ -78,4 +80,4 @@ const getShadowsocksrSubscription = async (url, udpRelay) => {
78
80
  };
79
81
  };
80
82
  exports.getShadowsocksrSubscription = getShadowsocksrSubscription;
81
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2hhZG93c29ja3NyU3Vic2NyaWJlUHJvdmlkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9saWIvcHJvdmlkZXIvU2hhZG93c29ja3NyU3Vic2NyaWJlUHJvdmlkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsOENBQXNCO0FBQ3RCLDJDQUE4QztBQUM5QyxvREFBNEI7QUFPNUIsb0NBQXNDO0FBQ3RDLDJFQUFrRDtBQUNsRCx3REFBOEQ7QUFDOUQsc0NBQTJDO0FBQzNDLDBEQUFrQztBQUVsQyxNQUFNLE1BQU0sR0FBRyxJQUFBLHFCQUFZLEVBQUM7SUFDMUIsT0FBTyxFQUFFLHNDQUFzQztDQUNoRCxDQUFDLENBQUM7QUFFSCxNQUFxQiw2QkFBOEIsU0FBUSxrQkFBUTtJQUlqRSxZQUFZLElBQVksRUFBRSxNQUEyQztRQUNuRSxLQUFLLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBRXBCLE1BQU0sTUFBTSxHQUFHLGFBQUcsQ0FBQyxNQUFNLENBQUM7WUFDeEIsR0FBRyxFQUFFLGFBQUcsQ0FBQyxNQUFNLEVBQUU7aUJBQ2QsR0FBRyxDQUFDO2dCQUNILE1BQU0sRUFBRSxDQUFDLFFBQVEsQ0FBQzthQUNuQixDQUFDO2lCQUNELFFBQVEsRUFBRTtZQUNiLFFBQVEsRUFBRSxhQUFHLENBQUMsT0FBTyxFQUFFLENBQUMsTUFBTSxFQUFFO1NBQ2pDLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUViLE1BQU0sRUFBRSxLQUFLLEVBQUUsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBRTFDLHVCQUF1QjtRQUN2QixJQUFJLEtBQUssRUFBRTtZQUNULE1BQU0sS0FBSyxDQUFDO1NBQ2I7UUFFRCxJQUFJLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUM7UUFDdkIsSUFBSSxDQUFDLFFBQVEsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDO1FBQ2hDLElBQUks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
83
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2hhZG93c29ja3NyU3Vic2NyaWJlUHJvdmlkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9saWIvcHJvdmlkZXIvU2hhZG93c29ja3NyU3Vic2NyaWJlUHJvdmlkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsOENBQXNCO0FBQ3RCLDJDQUE4QztBQUM5QyxvREFBNEI7QUFPNUIsb0NBQXNDO0FBQ3RDLDJFQUFrRDtBQUNsRCx3REFBOEQ7QUFDOUQsc0NBQTJDO0FBQzNDLDBEQUFrQztBQUVsQyxNQUFNLE1BQU0sR0FBRyxJQUFBLHFCQUFZLEVBQUM7SUFDMUIsT0FBTyxFQUFFLHNDQUFzQztDQUNoRCxDQUFDLENBQUM7QUFFSCxNQUFxQiw2QkFBOEIsU0FBUSxrQkFBUTtJQUlqRSxZQUFZLElBQVksRUFBRSxNQUEyQztRQUNuRSxLQUFLLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBRXBCLE1BQU0sTUFBTSxHQUFHLGFBQUcsQ0FBQyxNQUFNLENBQUM7WUFDeEIsR0FBRyxFQUFFLGFBQUcsQ0FBQyxNQUFNLEVBQUU7aUJBQ2QsR0FBRyxDQUFDO2dCQUNILE1BQU0sRUFBRSxDQUFDLFFBQVEsQ0FBQzthQUNuQixDQUFDO2lCQUNELFFBQVEsRUFBRTtZQUNiLFFBQVEsRUFBRSxhQUFHLENBQUMsT0FBTyxFQUFFLENBQUMsTUFBTSxFQUFFO1NBQ2pDLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUViLE1BQU0sRUFBRSxLQUFLLEVBQUUsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBRTFDLHVCQUF1QjtRQUN2QixJQUFJLEtBQUssRUFBRTtZQUNULE1BQU0sS0FBSyxDQUFDO1NBQ2I7UUFFRCxJQUFJLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUM7UUFDdkIsSUFBSSxDQUFDLFFBQVEsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDO1FBQ2hDLElBQUks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
@@ -6,9 +6,11 @@ export default class SsdProvider extends Provider {
6
6
  constructor(name: string, config: SsdProviderConfig);
7
7
  get url(): string;
8
8
  getSubscriptionUserInfo(): Promise<SubscriptionUserinfo | undefined>;
9
- getNodeList(): Promise<ReadonlyArray<ShadowsocksNodeConfig>>;
9
+ getNodeList({ requestUserAgent, }?: {
10
+ requestUserAgent?: string;
11
+ }): Promise<ReadonlyArray<ShadowsocksNodeConfig>>;
10
12
  }
11
- export declare const getSsdSubscription: (url: string, udpRelay?: boolean | undefined) => Promise<{
13
+ export declare const getSsdSubscription: (url: string, udpRelay?: boolean | undefined, requestUserAgent?: string | undefined) => Promise<{
12
14
  readonly nodeList: ReadonlyArray<ShadowsocksNodeConfig>;
13
15
  readonly subscriptionUserinfo?: SubscriptionUserinfo | undefined;
14
16
  }>;
@@ -46,16 +46,18 @@ class SsdProvider extends Provider_1.default {
46
46
  }
47
47
  return void 0;
48
48
  }
49
- async getNodeList() {
50
- const { nodeList } = await (0, exports.getSsdSubscription)(this.url, this.udpRelay);
49
+ async getNodeList({ requestUserAgent, } = {}) {
50
+ const { nodeList } = await (0, exports.getSsdSubscription)(this.url, this.udpRelay, requestUserAgent);
51
51
  return nodeList;
52
52
  }
53
53
  }
54
54
  exports.default = SsdProvider;
55
55
  // 协议定义:https://github.com/TheCGDF/SSD-Windows/wiki/HTTP%E8%AE%A2%E9%98%85%E5%8D%8F%E5%AE%9A
56
- const getSsdSubscription = async (url, udpRelay) => {
56
+ const getSsdSubscription = async (url, udpRelay, requestUserAgent) => {
57
57
  (0, assert_1.default)(url, '未指定订阅地址 url');
58
- const response = await Provider_1.default.requestCacheableResource(url);
58
+ const response = await Provider_1.default.requestCacheableResource(url, {
59
+ requestUserAgent,
60
+ });
59
61
  // istanbul ignore next
60
62
  if (!response.body.startsWith('ssd://')) {
61
63
  throw new Error(`暂仅支持 ssd:// 开头的订阅地址,${url} 无法处理`);
@@ -113,4 +115,4 @@ const parseSsdConfig = (globalConfig, server, udpRelay) => {
113
115
  : null));
114
116
  };
115
117
  exports.parseSsdConfig = parseSsdConfig;
116
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU3NkUHJvdmlkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9saWIvcHJvdmlkZXIvU3NkUHJvdmlkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsOENBQXNCO0FBQ3RCLDJDQUE4QztBQUM5QyxvREFBNEI7QUFDNUIsa0RBQTBCO0FBRTFCLG9DQUtrQjtBQUNsQixvQ0FBd0Q7QUFDeEQsMkVBQWtEO0FBQ2xELDBEQUFrQztBQUVsQyxNQUFNLE1BQU0sR0FBRyxJQUFBLHFCQUFZLEVBQUM7SUFDMUIsT0FBTyxFQUFFLG9CQUFvQjtDQUM5QixDQUFDLENBQUM7QUFFSCxNQUFxQixXQUFZLFNBQVEsa0JBQVE7SUFJL0MsWUFBWSxJQUFZLEVBQUUsTUFBeUI7UUFDakQsS0FBSyxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztRQUVwQixNQUFNLE1BQU0sR0FBRyxhQUFHLENBQUMsTUFBTSxDQUFDO1lBQ3hCLEdBQUcsRUFBRSxhQUFHLENBQUMsTUFBTSxFQUFFO2lCQUNkLEdBQUcsQ0FBQztnQkFDSCxNQUFNLEVBQUUsQ0FBQyxRQUFRLENBQUM7YUFDbkIsQ0FBQztpQkFDRCxRQUFRLEVBQUU7WUFDYixRQUFRLEVBQUUsYUFBRyxDQUFDLE9BQU8sRUFBRSxDQUFDLE1BQU0sRUFBRTtTQUNqQyxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUM7UUFFYixNQUFNLEVBQUUsS0FBSyxFQUFFLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUUxQyx1QkFBdUI7UUFDdkIsSUFBSSxLQUFLLEVBQUU7WUFDVCxNQUFNLEtBQUssQ0FBQztTQUNiO1FBRUQsSUFBSSxDQUFDLElBQUksR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxRQUFRLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQztRQUNoQyxJQUFJLENBQUMsOEJBQThCLEdBQUcsSUFBSSxDQUFDO0lBQzdDLENBQUM7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
118
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU3NkUHJvdmlkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9saWIvcHJvdmlkZXIvU3NkUHJvdmlkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsOENBQXNCO0FBQ3RCLDJDQUE4QztBQUM5QyxvREFBNEI7QUFDNUIsa0RBQTBCO0FBRTFCLG9DQUtrQjtBQUNsQixvQ0FBd0Q7QUFDeEQsMkVBQWtEO0FBQ2xELDBEQUFrQztBQUVsQyxNQUFNLE1BQU0sR0FBRyxJQUFBLHFCQUFZLEVBQUM7SUFDMUIsT0FBTyxFQUFFLG9CQUFvQjtDQUM5QixDQUFDLENBQUM7QUFFSCxNQUFxQixXQUFZLFNBQVEsa0JBQVE7SUFJL0MsWUFBWSxJQUFZLEVBQUUsTUFBeUI7UUFDakQsS0FBSyxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztRQUVwQixNQUFNLE1BQU0sR0FBRyxhQUFHLENBQUMsTUFBTSxDQUFDO1lBQ3hCLEdBQUcsRUFBRSxhQUFHLENBQUMsTUFBTSxFQUFFO2lCQUNkLEdBQUcsQ0FBQztnQkFDSCxNQUFNLEVBQUUsQ0FBQyxRQUFRLENBQUM7YUFDbkIsQ0FBQztpQkFDRCxRQUFRLEVBQUU7WUFDYixRQUFRLEVBQUUsYUFBRyxDQUFDLE9BQU8sRUFBRSxDQUFDLE1BQU0sRUFBRTtTQUNqQyxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUM7UUFFYixNQUFNLEVBQUUsS0FBSyxFQUFFLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUUxQyx1QkFBdUI7UUFDdkIsSUFBSSxLQUFLLEVBQUU7WUFDVCxNQUFNLEtBQUssQ0FBQztTQUNiO1FBRUQsSUFBSSxDQUFDLElBQUksR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxRQUFRLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQztRQUNoQyxJQUFJLENBQUMsOEJBQThCLEdBQUcsSUFBSSxDQUFDO0lBQzdDLENBQUM7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
@@ -7,12 +7,19 @@ export default class TrojanProvider extends Provider {
7
7
  constructor(name: string, config: TrojanProviderConfig);
8
8
  get url(): string;
9
9
  getSubscriptionUserInfo(): Promise<SubscriptionUserinfo | undefined>;
10
- getNodeList(): Promise<ReadonlyArray<TrojanNodeConfig>>;
10
+ getNodeList({ requestUserAgent, }?: {
11
+ requestUserAgent?: string;
12
+ }): Promise<ReadonlyArray<TrojanNodeConfig>>;
11
13
  }
12
14
  /**
13
15
  * @see https://github.com/trojan-gfw/trojan-url/blob/master/trojan-url.py
14
16
  */
15
- export declare const getTrojanSubscription: (url: string, udpRelay?: boolean | undefined, tls13?: boolean | undefined) => Promise<{
17
+ export declare const getTrojanSubscription: ({ url, udpRelay, tls13, requestUserAgent, }: {
18
+ url: string;
19
+ udpRelay?: boolean | undefined;
20
+ tls13?: boolean | undefined;
21
+ requestUserAgent?: string | undefined;
22
+ }) => Promise<{
16
23
  readonly nodeList: ReadonlyArray<TrojanNodeConfig>;
17
24
  readonly subscriptionUserinfo?: SubscriptionUserinfo | undefined;
18
25
  }>;
@@ -41,14 +41,23 @@ class TrojanProvider extends Provider_1.default {
41
41
  return (0, relayable_url_1.default)(this._url, this.relayUrl);
42
42
  }
43
43
  async getSubscriptionUserInfo() {
44
- const { subscriptionUserinfo } = await (0, exports.getTrojanSubscription)(this.url, this.udpRelay, this.tls13);
44
+ const { subscriptionUserinfo } = await (0, exports.getTrojanSubscription)({
45
+ url: this.url,
46
+ udpRelay: this.udpRelay,
47
+ tls13: this.tls13,
48
+ });
45
49
  if (subscriptionUserinfo) {
46
50
  return subscriptionUserinfo;
47
51
  }
48
52
  return void 0;
49
53
  }
50
- async getNodeList() {
51
- const { nodeList } = await (0, exports.getTrojanSubscription)(this.url, this.udpRelay, this.tls13);
54
+ async getNodeList({ requestUserAgent, } = {}) {
55
+ const { nodeList } = await (0, exports.getTrojanSubscription)({
56
+ url: this.url,
57
+ udpRelay: this.udpRelay,
58
+ tls13: this.tls13,
59
+ requestUserAgent,
60
+ });
52
61
  return nodeList;
53
62
  }
54
63
  }
@@ -56,10 +65,10 @@ exports.default = TrojanProvider;
56
65
  /**
57
66
  * @see https://github.com/trojan-gfw/trojan-url/blob/master/trojan-url.py
58
67
  */
59
- const getTrojanSubscription = async (url, udpRelay, tls13) => {
68
+ const getTrojanSubscription = async ({ url, udpRelay, tls13, requestUserAgent, }) => {
60
69
  (0, assert_1.default)(url, '未指定订阅地址 url');
61
70
  const response = await Provider_1.default.requestCacheableResource(url, {
62
- requestUserAgent: 'shadowrocket',
71
+ requestUserAgent: requestUserAgent || 'shadowrocket',
63
72
  });
64
73
  const config = (0, utils_1.fromBase64)(response.body);
65
74
  const nodeList = config
@@ -75,4 +84,4 @@ const getTrojanSubscription = async (url, udpRelay, tls13) => {
75
84
  };
76
85
  };
77
86
  exports.getTrojanSubscription = getTrojanSubscription;
78
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVHJvamFuUHJvdmlkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9saWIvcHJvdmlkZXIvVHJvamFuUHJvdmlkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsOENBQXNCO0FBQ3RCLG9EQUE0QjtBQUM1QiwyQ0FBOEM7QUFPOUMsb0NBQXNDO0FBQ3RDLDJFQUFrRDtBQUNsRCw0Q0FBaUQ7QUFDakQsMERBQWtDO0FBRWxDLE1BQU0sTUFBTSxHQUFHLElBQUEscUJBQVksRUFBQztJQUMxQixPQUFPLEVBQUUsdUJBQXVCO0NBQ2pDLENBQUMsQ0FBQztBQUVILE1BQXFCLGNBQWUsU0FBUSxrQkFBUTtJQUtsRCxZQUFZLElBQVksRUFBRSxNQUE0QjtRQUNwRCxLQUFLLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBRXBCLE1BQU0sTUFBTSxHQUFHLGFBQUcsQ0FBQyxNQUFNLENBQUM7WUFDeEIsR0FBRyxFQUFFLGFBQUcsQ0FBQyxNQUFNLEVBQUU7aUJBQ2QsR0FBRyxDQUFDO2dCQUNILE1BQU0sRUFBRSxDQUFDLFFBQVEsQ0FBQzthQUNuQixDQUFDO2lCQUNELFFBQVEsRUFBRTtZQUNiLFFBQVEsRUFBRSxhQUFHLENBQUMsSUFBSSxFQUFFLENBQUMsTUFBTSxFQUFFO1lBQzdCLEtBQUssRUFBRSxhQUFHLENBQUMsSUFBSSxFQUFFLENBQUMsTUFBTSxFQUFFO1NBQzNCLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUViLE1BQU0sRUFBRSxLQUFLLEVBQUUsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBRTFDLHVCQUF1QjtRQUN2QixJQUFJLEtBQUssRUFBRTtZQUNULE1BQU0sS0FBSyxDQUFDO1NBQ2I7UUFFRCxJQUFJLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUM7UUFDdkIsSUFBSSxDQUFDLFFBQVEsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDO1FBQ2hDLElBQUksQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQztRQUMxQixJQUFJLENBQUMsOEJBQThCLEdBQUcsSUFBSSxDQUFDO0lBQzdDLENBQUM7SUFFRCx1QkFBdUI7SUFDdkIsSUFBVyxHQUFHO1FBQ1osT0FBTyxJQUFBLHVCQUFZLEVBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDaEQsQ0FBQztJQUVNLEtBQUssQ0FBQyx1QkFBdUI7UUFHbEMsTUFBTSxFQUFFLG9CQUFvQixFQUFFLEdBQUcsTUFBTSxJQUFBLDZCQUFxQixFQUMxRCxJQUFJLENBQUMsR0FBRyxFQUNSLElBQUksQ0FBQyxRQUFRLEVBQ2IsSUFBSSxDQUFDLEtBQUssQ0FDWCxDQUFDO1FBRUYsSUFBSSxvQkFBb0IsRUFBRTtZQUN4QixPQUFPLG9CQUFvQixDQUFDO1NBQzdCO1FBQ0QsT0FBTyxLQUFLLENBQUMsQ0FBQztJQUNoQixDQUFDO0lBRU0sS0FBSyxDQUFDLFdBQVc7UUFDdEIsTUFBTSxFQUFFLFFBQVEsRUFBRSxHQUFHLE1BQU0sSUFBQSw2QkFBcUIsRUFDOUMsSUFBSSxDQUFDLEdBQUcsRUFDUixJQUFJLENBQUMsUUFBUSxFQUNiLElBQUksQ0FBQyxLQUFLLENBQ1gsQ0FBQztRQUVGLE9BQU8sUUFBUSxDQUFDO0lBQ2xCLENBQUM7Q0FDRjtBQTVERCxpQ0E0REM7QUFFRDs7R0FFRztBQUNJLE1BQU0scUJBQXFCLEdBQUcsS0FBSyxFQUN4QyxHQUFXLEVBQ1gsUUFBa0IsRUFDbEIsS0FBZSxFQUlkLEVBQUU7SUFDSCxJQUFBLGdCQUFNLEVBQUMsR0FBRyxFQUFFLGFBQWEsQ0FBQyxDQUFDO0lBRTNCLE1BQU0sUUFBUSxHQUFHLE1BQU0sa0JBQVEsQ0FBQyx3QkFBd0IsQ0FBQyxHQUFHLEVBQUU7UUFDNUQsZ0JBQWdCLEVBQUUsY0FBYztLQUNqQyxDQUFDLENBQUM7SUFDSCxNQUFNLE1BQU0sR0FBRyxJQUFBLGtCQUFVLEVBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3pDLE1BQU0sUUFBUSxHQUFHLE1BQU07U0FDcEIsS0FBSyxDQUFDLElBQUksQ0FBQztTQUNYLE1BQU0sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1NBQ3hELEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBb0IsRUFBRTtRQUM5QixNQUFNLFVBQVUsR0FBRyxJQUFBLHVCQUFjLEVBQUMsSUFBSSxDQUFDLENBQUM7UUFFeEMsdUNBQ0ssVUFBVSxLQUNiLFdBQVcsRUFBRSxRQUFRLEVBQ3JCLEtBQUssSUFDTDtJQUNKLENBQUMsQ0FBQyxDQUFDO0lBRUwsT0FBTztRQUNMLFFBQVE7UUFDUixvQkFBb0IsRUFBRSxRQUFRLENBQUMsb0JBQW9CO0tBQ3BELENBQUM7QUFDSixDQUFDLENBQUM7QUEvQlcsUUFBQSxxQkFBcUIseUJBK0JoQyJ9
87
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVHJvamFuUHJvdmlkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9saWIvcHJvdmlkZXIvVHJvamFuUHJvdmlkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsOENBQXNCO0FBQ3RCLG9EQUE0QjtBQUM1QiwyQ0FBOEM7QUFPOUMsb0NBQXNDO0FBQ3RDLDJFQUFrRDtBQUNsRCw0Q0FBaUQ7QUFDakQsMERBQWtDO0FBRWxDLE1BQU0sTUFBTSxHQUFHLElBQUEscUJBQVksRUFBQztJQUMxQixPQUFPLEVBQUUsdUJBQXVCO0NBQ2pDLENBQUMsQ0FBQztBQUVILE1BQXFCLGNBQWUsU0FBUSxrQkFBUTtJQUtsRCxZQUFZLElBQVksRUFBRSxNQUE0QjtRQUNwRCxLQUFLLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBRXBCLE1BQU0sTUFBTSxHQUFHLGFBQUcsQ0FBQyxNQUFNLENBQUM7WUFDeEIsR0FBRyxFQUFFLGFBQUcsQ0FBQyxNQUFNLEVBQUU7aUJBQ2QsR0FBRyxDQUFDO2dCQUNILE1BQU0sRUFBRSxDQUFDLFFBQVEsQ0FBQzthQUNuQixDQUFDO2lCQUNELFFBQVEsRUFBRTtZQUNiLFFBQVEsRUFBRSxhQUFHLENBQUMsSUFBSSxFQUFFLENBQUMsTUFBTSxFQUFFO1lBQzdCLEtBQUssRUFBRSxhQUFHLENBQUMsSUFBSSxFQUFFLENBQUMsTUFBTSxFQUFFO1NBQzNCLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUViLE1BQU0sRUFBRSxLQUFLLEVBQUUsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBRTFDLHVCQUF1QjtRQUN2QixJQUFJLEtBQUssRUFBRTtZQUNULE1BQU0sS0FBSyxDQUFDO1NBQ2I7UUFFRCxJQUFJLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUM7UUFDdkIsSUFBSSxDQUFDLFFBQVEsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDO1FBQ2hDLElBQUksQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQztRQUMxQixJQUFJLENBQUMsOEJBQThCLEdBQUcsSUFBSSxDQUFDO0lBQzdDLENBQUM7SUFFRCx1QkFBdUI7SUFDdkIsSUFBVyxHQUFHO1FBQ1osT0FBTyxJQUFBLHVCQUFZLEVBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDaEQsQ0FBQztJQUVNLEtBQUssQ0FBQyx1QkFBdUI7UUFHbEMsTUFBTSxFQUFFLG9CQUFvQixFQUFFLEdBQUcsTUFBTSxJQUFBLDZCQUFxQixFQUFDO1lBQzNELEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRztZQUNiLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUTtZQUN2QixLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUs7U0FDbEIsQ0FBQyxDQUFDO1FBRUgsSUFBSSxvQkFBb0IsRUFBRTtZQUN4QixPQUFPLG9CQUFvQixDQUFDO1NBQzdCO1FBQ0QsT0FBTyxLQUFLLENBQUMsQ0FBQztJQUNoQixDQUFDO0lBRU0sS0FBSyxDQUFDLFdBQVcsQ0FBQyxFQUN2QixnQkFBZ0IsTUFDaUIsRUFBRTtRQUduQyxNQUFNLEVBQUUsUUFBUSxFQUFFLEdBQUcsTUFBTSxJQUFBLDZCQUFxQixFQUFDO1lBQy9DLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRztZQUNiLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUTtZQUN2QixLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUs7WUFDakIsZ0JBQWdCO1NBQ2pCLENBQUMsQ0FBQztRQUVILE9BQU8sUUFBUSxDQUFDO0lBQ2xCLENBQUM7Q0FDRjtBQWpFRCxpQ0FpRUM7QUFFRDs7R0FFRztBQUNJLE1BQU0scUJBQXFCLEdBQUcsS0FBSyxFQUFFLEVBQzFDLEdBQUcsRUFDSCxRQUFRLEVBQ1IsS0FBSyxFQUNMLGdCQUFnQixHQU1qQixFQUdFLEVBQUU7SUFDSCxJQUFBLGdCQUFNLEVBQUMsR0FBRyxFQUFFLGFBQWEsQ0FBQyxDQUFDO0lBRTNCLE1BQU0sUUFBUSxHQUFHLE1BQU0sa0JBQVEsQ0FBQyx3QkFBd0IsQ0FBQyxHQUFHLEVBQUU7UUFDNUQsZ0JBQWdCLEVBQUUsZ0JBQWdCLElBQUksY0FBYztLQUNyRCxDQUFDLENBQUM7SUFDSCxNQUFNLE1BQU0sR0FBRyxJQUFBLGtCQUFVLEVBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3pDLE1BQU0sUUFBUSxHQUFHLE1BQU07U0FDcEIsS0FBSyxDQUFDLElBQUksQ0FBQztTQUNYLE1BQU0sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1NBQ3hELEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBb0IsRUFBRTtRQUM5QixNQUFNLFVBQVUsR0FBRyxJQUFBLHVCQUFjLEVBQUMsSUFBSSxDQUFDLENBQUM7UUFFeEMsdUNBQ0ssVUFBVSxLQUNiLFdBQVcsRUFBRSxRQUFRLEVBQ3JCLEtBQUssSUFDTDtJQUNKLENBQUMsQ0FBQyxDQUFDO0lBRUwsT0FBTztRQUNMLFFBQVE7UUFDUixvQkFBb0IsRUFBRSxRQUFRLENBQUMsb0JBQW9CO0tBQ3BELENBQUM7QUFDSixDQUFDLENBQUM7QUFyQ1csUUFBQSxxQkFBcUIseUJBcUNoQyJ9
@@ -8,10 +8,19 @@ export default class V2rayNSubscribeProvider extends Provider {
8
8
  private readonly _url;
9
9
  constructor(name: string, config: V2rayNSubscribeProviderConfig);
10
10
  get url(): string;
11
- getNodeList(): ReturnType<typeof getV2rayNSubscription>;
11
+ getNodeList({ requestUserAgent, }?: {
12
+ requestUserAgent?: string;
13
+ }): ReturnType<typeof getV2rayNSubscription>;
12
14
  }
13
15
  /**
14
16
  * @see https://github.com/2dust/v2rayN/wiki/%E5%88%86%E4%BA%AB%E9%93%BE%E6%8E%A5%E6%A0%BC%E5%BC%8F%E8%AF%B4%E6%98%8E(ver-2)
15
17
  */
16
- export declare const getV2rayNSubscription: (url: string, isCompatibleMode?: boolean | undefined, skipCertVerify?: boolean | undefined, udpRelay?: boolean | undefined, tls13?: boolean | undefined) => Promise<ReadonlyArray<VmessNodeConfig | ShadowsocksNodeConfig>>;
18
+ export declare const getV2rayNSubscription: ({ url, isCompatibleMode, skipCertVerify, tls13, udpRelay, requestUserAgent, }: {
19
+ url: string;
20
+ isCompatibleMode?: boolean | undefined;
21
+ skipCertVerify?: boolean | undefined;
22
+ udpRelay?: boolean | undefined;
23
+ tls13?: boolean | undefined;
24
+ requestUserAgent?: string | undefined;
25
+ }) => Promise<ReadonlyArray<VmessNodeConfig | ShadowsocksNodeConfig>>;
17
26
  export declare const parseJSONConfig: (json: string, isCompatibleMode: boolean | undefined, skipCertVerify?: boolean | undefined, udpRelay?: boolean | undefined, tls13?: boolean | undefined) => VmessNodeConfig | undefined;
@@ -9,8 +9,6 @@ const logger_1 = require("@surgio/logger");
9
9
  const assert_1 = __importDefault(require("assert"));
10
10
  const types_1 = require("../types");
11
11
  const utils_1 = require("../utils");
12
- const cache_1 = require("../utils/cache");
13
- const http_client_1 = __importDefault(require("../utils/http-client"));
14
12
  const relayable_url_1 = __importDefault(require("../utils/relayable-url"));
15
13
  const ss_1 = require("../utils/ss");
16
14
  const Provider_1 = __importDefault(require("./Provider"));
@@ -43,28 +41,32 @@ class V2rayNSubscribeProvider extends Provider_1.default {
43
41
  get url() {
44
42
  return (0, relayable_url_1.default)(this._url, this.relayUrl);
45
43
  }
46
- getNodeList() {
47
- return (0, exports.getV2rayNSubscription)(this.url, this.compatibleMode, this.skipCertVerify, this.udpRelay, this.tls13);
44
+ getNodeList({ requestUserAgent, } = {}) {
45
+ return (0, exports.getV2rayNSubscription)({
46
+ url: this.url,
47
+ skipCertVerify: this.skipCertVerify,
48
+ tls13: this.tls13,
49
+ udpRelay: this.udpRelay,
50
+ isCompatibleMode: this.compatibleMode,
51
+ requestUserAgent,
52
+ });
48
53
  }
49
54
  }
50
55
  exports.default = V2rayNSubscribeProvider;
51
56
  /**
52
57
  * @see https://github.com/2dust/v2rayN/wiki/%E5%88%86%E4%BA%AB%E9%93%BE%E6%8E%A5%E6%A0%BC%E5%BC%8F%E8%AF%B4%E6%98%8E(ver-2)
53
58
  */
54
- const getV2rayNSubscription = async (url, isCompatibleMode, skipCertVerify, udpRelay, tls13) => {
59
+ const getV2rayNSubscription = async ({ url, isCompatibleMode, skipCertVerify, tls13, udpRelay, requestUserAgent, }) => {
55
60
  (0, assert_1.default)(url, '未指定订阅地址 url');
56
61
  if (isCompatibleMode) {
57
62
  logger_1.logger.warn('运行在兼容模式,请注意生成的节点是否正确。');
58
63
  }
59
64
  async function requestConfigFromRemote() {
60
- const response = cache_1.ConfigCache.has(url)
61
- ? cache_1.ConfigCache.get(url)
62
- : await (async () => {
63
- const res = await http_client_1.default.get(url);
64
- cache_1.ConfigCache.set(url, res.body);
65
- return res.body;
66
- })();
67
- const configList = (0, utils_1.fromBase64)(response)
65
+ const response = await Provider_1.default.requestCacheableResource(url, {
66
+ requestUserAgent,
67
+ });
68
+ const configString = response.body;
69
+ const configList = (0, utils_1.fromBase64)(configString)
68
70
  .split('\n')
69
71
  .filter((item) => !!item)
70
72
  .filter((item) => {
@@ -93,7 +95,7 @@ const parseJSONConfig = (json, isCompatibleMode, skipCertVerify, udpRelay, tls13
93
95
  const config = JSON.parse(json);
94
96
  // istanbul ignore next
95
97
  if (!isCompatibleMode && (!config.v || Number(config.v) !== 2)) {
96
- throw new Error(`该节点 ${config.ps} 可能不是一个有效的 V2rayN 节点。请参考 http://url.royli.dev/Qtrci 进行排查, 或者将解析模式改为兼容模式`);
98
+ throw new Error(`该节点 ${config.ps} 可能不是一个有效的 V2rayN 节点。请参考 https://url.royli.dev/Qtrci 进行排查, 或者将解析模式改为兼容模式`);
97
99
  }
98
100
  // istanbul ignore next
99
101
  if (['kcp', 'http'].indexOf(config.net) > -1) {
@@ -108,4 +110,4 @@ const parseJSONConfig = (json, isCompatibleMode, skipCertVerify, udpRelay, tls13
108
110
  : null));
109
111
  };
110
112
  exports.parseJSONConfig = parseJSONConfig;
111
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVjJyYXlOU3Vic2NyaWJlUHJvdmlkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9saWIvcHJvdmlkZXIvVjJyYXlOU3Vic2NyaWJlUHJvdmlkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsOENBQXNCO0FBQ3RCLDJDQUF3QztBQUN4QyxvREFBNEI7QUFFNUIsb0NBS2tCO0FBQ2xCLG9DQUFzQztBQUN0QywwQ0FBNkM7QUFDN0MsdUVBQThDO0FBQzlDLDJFQUFrRDtBQUNsRCxvQ0FBeUM7QUFDekMsMERBQWtDO0FBRWxDLE1BQXFCLHVCQUF3QixTQUFRLGtCQUFRO0lBUTNELFlBQVksSUFBWSxFQUFFLE1BQXFDO1FBQzdELEtBQUssQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFFcEIsTUFBTSxNQUFNLEdBQUcsYUFBRyxDQUFDLE1BQU0sQ0FBQztZQUN4QixHQUFHLEVBQUUsYUFBRyxDQUFDLE1BQU0sRUFBRTtpQkFDZCxHQUFHLENBQUM7Z0JBQ0gsTUFBTSxFQUFFLENBQUMsUUFBUSxDQUFDO2FBQ25CLENBQUM7aUJBQ0QsUUFBUSxFQUFFO1lBQ2IsUUFBUSxFQUFFLGFBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxNQUFNLEVBQUU7WUFDN0IsS0FBSyxFQUFFLGFBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxNQUFNLEVBQUU7WUFDMUIsY0FBYyxFQUFFLGFBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxNQUFNLEVBQUU7WUFDbkMsY0FBYyxFQUFFLGFBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxNQUFNLEVBQUU7U0FDcEMsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBRWIsTUFBTSxFQUFFLEtBQUssRUFBRSxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7UUFFMUMsdUJBQXVCO1FBQ3ZCLElBQUksS0FBSyxFQUFFO1lBQ1QsTUFBTSxLQUFLLENBQUM7U0FDYjtRQUVELElBQUks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
113
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVjJyYXlOU3Vic2NyaWJlUHJvdmlkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9saWIvcHJvdmlkZXIvVjJyYXlOU3Vic2NyaWJlUHJvdmlkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsOENBQXNCO0FBQ3RCLDJDQUF3QztBQUN4QyxvREFBNEI7QUFFNUIsb0NBS2tCO0FBQ2xCLG9DQUFzQztBQUN0QywyRUFBa0Q7QUFDbEQsb0NBQXlDO0FBQ3pDLDBEQUFrQztBQUVsQyxNQUFxQix1QkFBd0IsU0FBUSxrQkFBUTtJQVEzRCxZQUFZLElBQVksRUFBRSxNQUFxQztRQUM3RCxLQUFLLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBRXBCLE1BQU0sTUFBTSxHQUFHLGFBQUcsQ0FBQyxNQUFNLENBQUM7WUFDeEIsR0FBRyxFQUFFLGFBQUcsQ0FBQyxNQUFNLEVBQUU7aUJBQ2QsR0FBRyxDQUFDO2dCQUNILE1BQU0sRUFBRSxDQUFDLFFBQVEsQ0FBQzthQUNuQixDQUFDO2lCQUNELFFBQVEsRUFBRTtZQUNiLFFBQVEsRUFBRSxhQUFHLENBQUMsSUFBSSxFQUFFLENBQUMsTUFBTSxFQUFFO1lBQzdCLEtBQUssRUFBRSxhQUFHLENBQUMsSUFBSSxFQUFFLENBQUMsTUFBTSxFQUFFO1lBQzFCLGNBQWMsRUFBRSxhQUFHLENBQUMsSUFBSSxFQUFFLENBQUMsTUFBTSxFQUFFO1lBQ25DLGNBQWMsRUFBRSxhQUFHLENBQUMsSUFBSSxFQUFFLENBQUMsTUFBTSxFQUFFO1NBQ3BDLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUViLE1BQU0sRUFBRSxLQUFLLEVBQUUsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBRTFDLHVCQUF1QjtRQUN2QixJQUFJLEtBQUssRUFBRTtZQUNULE1BQU0sS0FBSyxDQUFDO1NBQ2I7UUFFRCxJQUFJLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQyxH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
package/build/types.d.ts CHANGED
@@ -228,6 +228,9 @@ export interface TrojanNodeConfig extends SimpleNodeConfig {
228
228
  readonly sni?: string;
229
229
  readonly 'udp-relay'?: boolean;
230
230
  readonly tls13?: boolean;
231
+ readonly network?: 'tcp' | 'ws';
232
+ readonly wsPath?: string;
233
+ readonly wsHeaders?: Record<string, string>;
231
234
  }
232
235
  export interface Socks5NodeConfig extends SimpleNodeConfig {
233
236
  readonly type: NodeTypeEnum.Socks5;
@@ -1,8 +1,9 @@
1
- import LRU from 'lru-cache';
1
+ import NodeCache from 'node-cache';
2
2
  import { SubscriptionUserinfo } from '../types';
3
3
  export interface SubsciptionCacheItem {
4
4
  readonly body: string;
5
5
  subscriptionUserinfo?: SubscriptionUserinfo;
6
6
  }
7
- export declare const ConfigCache: LRU<string, string>;
8
- export declare const SubscriptionCache: LRU<string, SubsciptionCacheItem>;
7
+ export declare const ConfigCache: NodeCache;
8
+ export declare const SubscriptionCache: NodeCache;
9
+ export declare const cleanCaches: () => void;
@@ -3,15 +3,23 @@ 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
- exports.SubscriptionCache = exports.ConfigCache = void 0;
7
- const lru_cache_1 = __importDefault(require("lru-cache"));
6
+ exports.cleanCaches = exports.SubscriptionCache = exports.ConfigCache = void 0;
7
+ const node_cache_1 = __importDefault(require("node-cache"));
8
8
  const env_flag_1 = require("./env-flag");
9
- exports.ConfigCache = new lru_cache_1.default({
10
- maxAge: (0, env_flag_1.getProviderCacheMaxage)(),
11
- max: 100,
9
+ const index_1 = require("./index");
10
+ exports.ConfigCache = new node_cache_1.default({
11
+ stdTTL: (0, index_1.msToSeconds)((0, env_flag_1.getProviderCacheMaxage)()),
12
+ maxKeys: 300,
13
+ useClones: false,
12
14
  });
13
- exports.SubscriptionCache = new lru_cache_1.default({
14
- maxAge: (0, env_flag_1.getProviderCacheMaxage)(),
15
- max: 100,
15
+ exports.SubscriptionCache = new node_cache_1.default({
16
+ stdTTL: (0, index_1.msToSeconds)((0, env_flag_1.getProviderCacheMaxage)()),
17
+ maxKeys: 300,
18
+ useClones: false,
16
19
  });
17
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FjaGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9saWIvdXRpbHMvY2FjaGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsMERBQTRCO0FBRzVCLHlDQUFvRDtBQU92QyxRQUFBLFdBQVcsR0FBRyxJQUFJLG1CQUFHLENBQWlCO0lBQ2pELE1BQU0sRUFBRSxJQUFBLGlDQUFzQixHQUFFO0lBQ2hDLEdBQUcsRUFBRSxHQUFHO0NBQ1QsQ0FBQyxDQUFDO0FBRVUsUUFBQSxpQkFBaUIsR0FBRyxJQUFJLG1CQUFHLENBQStCO0lBQ3JFLE1BQU0sRUFBRSxJQUFBLGlDQUFzQixHQUFFO0lBQ2hDLEdBQUcsRUFBRSxHQUFHO0NBQ1QsQ0FBQyxDQUFDIn0=
20
+ const cleanCaches = () => {
21
+ exports.ConfigCache.flushAll();
22
+ exports.SubscriptionCache.flushAll();
23
+ };
24
+ exports.cleanCaches = cleanCaches;
25
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FjaGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9saWIvdXRpbHMvY2FjaGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsNERBQW1DO0FBR25DLHlDQUFvRDtBQUNwRCxtQ0FBc0M7QUFPekIsUUFBQSxXQUFXLEdBQUcsSUFBSSxvQkFBUyxDQUFDO0lBQ3ZDLE1BQU0sRUFBRSxJQUFBLG1CQUFXLEVBQUMsSUFBQSxpQ0FBc0IsR0FBRSxDQUFDO0lBQzdDLE9BQU8sRUFBRSxHQUFHO0lBQ1osU0FBUyxFQUFFLEtBQUs7Q0FDakIsQ0FBQyxDQUFDO0FBRVUsUUFBQSxpQkFBaUIsR0FBRyxJQUFJLG9CQUFTLENBQUM7SUFDN0MsTUFBTSxFQUFFLElBQUEsbUJBQVcsRUFBQyxJQUFBLGlDQUFzQixHQUFFLENBQUM7SUFDN0MsT0FBTyxFQUFFLEdBQUc7SUFDWixTQUFTLEVBQUUsS0FBSztDQUNqQixDQUFDLENBQUM7QUFFSSxNQUFNLFdBQVcsR0FBRyxHQUFHLEVBQUU7SUFDOUIsbUJBQVcsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUN2Qix5QkFBaUIsQ0FBQyxRQUFRLEVBQUUsQ0FBQztBQUMvQixDQUFDLENBQUM7QUFIVyxRQUFBLFdBQVcsZUFHdEIifQ==
@@ -0,0 +1,3 @@
1
+ import { NodeFilterType, NodeNameFilterType, PossibleNodeConfigType, SimpleNodeConfig, SortedNodeNameFilterType } from '../types';
2
+ export declare const getClashNodes: (list: ReadonlyArray<PossibleNodeConfigType>, filter?: SortedNodeNameFilterType | NodeFilterType | undefined) => ReadonlyArray<any>;
3
+ export declare const getClashNodeNames: (list: ReadonlyArray<SimpleNodeConfig>, filter?: SortedNodeNameFilterType | NodeNameFilterType | undefined, existingProxies?: readonly string[] | undefined) => ReadonlyArray<string>;
@@ -0,0 +1,147 @@
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.getClashNodeNames = exports.getClashNodes = 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 logger = (0, logger_1.createLogger)({ service: 'surgio:utils:clash' });
13
+ const getClashNodes = function (list, filter) {
14
+ // istanbul ignore next
15
+ if (arguments.length === 2 && typeof filter === 'undefined') {
16
+ throw new Error(constant_1.ERR_INVALID_FILTER);
17
+ }
18
+ return (0, filter_1.applyFilter)(list, filter)
19
+ .map((nodeConfig) => {
20
+ var _a, _b, _c, _d, _e;
21
+ // istanbul ignore next
22
+ if (nodeConfig.enable === false) {
23
+ return null;
24
+ }
25
+ switch (nodeConfig.type) {
26
+ case types_1.NodeTypeEnum.Shadowsocks:
27
+ return Object.assign(Object.assign({ type: 'ss', cipher: nodeConfig.method, name: nodeConfig.nodeName, password: nodeConfig.password, port: nodeConfig.port, server: nodeConfig.hostname, udp: nodeConfig['udp-relay'] === true }, (nodeConfig.obfs && ['tls', 'http'].includes(nodeConfig.obfs)
28
+ ? {
29
+ plugin: 'obfs',
30
+ 'plugin-opts': {
31
+ mode: nodeConfig.obfs,
32
+ host: nodeConfig['obfs-host'],
33
+ },
34
+ }
35
+ : null)), (nodeConfig.obfs && ['ws', 'wss'].includes(nodeConfig.obfs)
36
+ ? {
37
+ plugin: 'v2ray-plugin',
38
+ 'plugin-opts': Object.assign(Object.assign({ mode: 'websocket', tls: nodeConfig.obfs === 'wss' }, (typeof nodeConfig.skipCertVerify === 'boolean' &&
39
+ nodeConfig.obfs === 'wss'
40
+ ? {
41
+ 'skip-cert-verify': nodeConfig.skipCertVerify,
42
+ }
43
+ : null)), { host: nodeConfig['obfs-host'], path: nodeConfig['obfs-uri'] || '/', mux: typeof nodeConfig.mux === 'boolean'
44
+ ? nodeConfig.mux
45
+ : false, headers: lodash_1.default.omit(nodeConfig.wsHeaders || {}, ['host']) }),
46
+ }
47
+ : null));
48
+ case types_1.NodeTypeEnum.Vmess:
49
+ return Object.assign(Object.assign(Object.assign(Object.assign({ type: 'vmess', cipher: nodeConfig.method, name: nodeConfig.nodeName, server: nodeConfig.hostname, port: nodeConfig.port, udp: nodeConfig['udp-relay'] === true, uuid: nodeConfig.uuid, alterId: nodeConfig.alterId }, (nodeConfig.network === 'tcp'
50
+ ? null
51
+ : {
52
+ network: nodeConfig.network,
53
+ })), { tls: nodeConfig.tls }), (typeof nodeConfig.skipCertVerify === 'boolean' && nodeConfig.tls
54
+ ? {
55
+ 'skip-cert-verify': nodeConfig.skipCertVerify,
56
+ }
57
+ : null)), (nodeConfig.network === 'ws'
58
+ ? {
59
+ 'ws-opts': {
60
+ path: nodeConfig.path,
61
+ headers: Object.assign(Object.assign({}, (nodeConfig.host ? { host: nodeConfig.host } : null)), lodash_1.default.omit(nodeConfig.wsHeaders, ['host'])),
62
+ },
63
+ }
64
+ : null));
65
+ case types_1.NodeTypeEnum.Shadowsocksr: {
66
+ const ssrFormat = (_a = nodeConfig === null || nodeConfig === void 0 ? void 0 : nodeConfig.clashConfig) === null || _a === void 0 ? void 0 : _a.ssrFormat;
67
+ return Object.assign(Object.assign({ type: 'ssr', name: nodeConfig.nodeName, server: nodeConfig.hostname, port: nodeConfig.port, password: nodeConfig.password, obfs: nodeConfig.obfs, protocol: nodeConfig.protocol, cipher: nodeConfig.method }, (ssrFormat === 'native'
68
+ ? {
69
+ 'obfs-param': (_b = nodeConfig.obfsparam) !== null && _b !== void 0 ? _b : '',
70
+ 'protocol-param': (_c = nodeConfig.protoparam) !== null && _c !== void 0 ? _c : '',
71
+ }
72
+ : {
73
+ obfsparam: (_d = nodeConfig.obfsparam) !== null && _d !== void 0 ? _d : '',
74
+ protocolparam: (_e = nodeConfig.protoparam) !== null && _e !== void 0 ? _e : '',
75
+ })), { udp: nodeConfig['udp-relay'] === true });
76
+ }
77
+ case types_1.NodeTypeEnum.Snell:
78
+ return Object.assign({ type: 'snell', name: nodeConfig.nodeName, server: nodeConfig.hostname, port: nodeConfig.port, psk: nodeConfig.psk, 'obfs-opts': Object.assign({ mode: nodeConfig.obfs }, (nodeConfig['obfs-host']
79
+ ? {
80
+ host: nodeConfig['obfs-host'],
81
+ }
82
+ : null)) }, (nodeConfig.version
83
+ ? {
84
+ version: nodeConfig.version,
85
+ }
86
+ : null));
87
+ case types_1.NodeTypeEnum.HTTPS:
88
+ return {
89
+ type: 'http',
90
+ name: nodeConfig.nodeName,
91
+ server: nodeConfig.hostname,
92
+ port: nodeConfig.port,
93
+ username: nodeConfig.username /* istanbul ignore next */ || '',
94
+ password: nodeConfig.password /* istanbul ignore next */ || '',
95
+ tls: true,
96
+ 'skip-cert-verify': nodeConfig.skipCertVerify === true,
97
+ };
98
+ case types_1.NodeTypeEnum.HTTP:
99
+ return {
100
+ type: 'http',
101
+ name: nodeConfig.nodeName,
102
+ server: nodeConfig.hostname,
103
+ port: nodeConfig.port,
104
+ username: nodeConfig.username /* istanbul ignore next */ || '',
105
+ password: nodeConfig.password /* istanbul ignore next */ || '',
106
+ };
107
+ case types_1.NodeTypeEnum.Trojan:
108
+ return Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({ type: 'trojan', name: nodeConfig.nodeName, server: nodeConfig.hostname, port: nodeConfig.port, password: nodeConfig.password }, (nodeConfig['udp-relay']
109
+ ? { udp: nodeConfig['udp-relay'] }
110
+ : null)), (nodeConfig.alpn ? { alpn: nodeConfig.alpn } : null)), (nodeConfig.sni ? { sni: nodeConfig.sni } : null)), { 'skip-cert-verify': nodeConfig.skipCertVerify === true }), (nodeConfig.network === 'ws'
111
+ ? {
112
+ network: 'ws',
113
+ 'ws-opts': Object.assign({ path: nodeConfig.wsPath || '/' }, nodeConfig.wsHeaders),
114
+ }
115
+ : null));
116
+ case types_1.NodeTypeEnum.Socks5: {
117
+ return Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({ type: 'socks5', name: nodeConfig.nodeName, server: nodeConfig.hostname, port: nodeConfig.port }, (nodeConfig.username ? { username: nodeConfig.username } : null)), (nodeConfig.password ? { password: nodeConfig.password } : null)), (typeof nodeConfig.tls === 'boolean'
118
+ ? { tls: nodeConfig.tls }
119
+ : null)), (typeof nodeConfig.skipCertVerify === 'boolean'
120
+ ? { 'skip-cert-verify': nodeConfig.skipCertVerify }
121
+ : null)), (typeof nodeConfig.udpRelay === 'boolean'
122
+ ? { udp: nodeConfig.udpRelay }
123
+ : null));
124
+ }
125
+ // istanbul ignore next
126
+ default:
127
+ logger.warn(`不支持为 Clash 生成 ${nodeConfig.type} 的节点,节点 ${nodeConfig.nodeName} 会被省略`);
128
+ return null;
129
+ }
130
+ })
131
+ .filter((item) => item !== null);
132
+ };
133
+ exports.getClashNodes = getClashNodes;
134
+ const getClashNodeNames = function (list, filter, existingProxies) {
135
+ // istanbul ignore next
136
+ if (arguments.length === 2 && typeof filter === 'undefined') {
137
+ throw new Error(constant_1.ERR_INVALID_FILTER);
138
+ }
139
+ let result = [];
140
+ if (existingProxies) {
141
+ result = result.concat(existingProxies);
142
+ }
143
+ result = result.concat((0, filter_1.applyFilter)(list, filter).map((item) => item.nodeName));
144
+ return result;
145
+ };
146
+ exports.getClashNodeNames = getClashNodeNames;
147
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc2guanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9saWIvdXRpbHMvY2xhc2gudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsMkNBQThDO0FBQzlDLG9EQUF1QjtBQUV2QiwwQ0FBaUQ7QUFDakQsb0NBT2tCO0FBQ2xCLHFDQUF1QztBQUV2QyxNQUFNLE1BQU0sR0FBRyxJQUFBLHFCQUFZLEVBQUMsRUFBRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsQ0FBQyxDQUFDO0FBRXhELE1BQU0sYUFBYSxHQUFHLFVBQzNCLElBQTJDLEVBQzNDLE1BQWtEO0lBRWxELHVCQUF1QjtJQUN2QixJQUFJLFNBQVMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxJQUFJLE9BQU8sTUFBTSxLQUFLLFdBQVcsRUFBRTtRQUMzRCxNQUFNLElBQUksS0FBSyxDQUFDLDZCQUFrQixDQUFDLENBQUM7S0FDckM7SUFFRCxPQUFPLElBQUEsb0JBQVcsRUFBQyxJQUFJLEVBQUUsTUFBTSxDQUFDO1NBQzdCLEdBQUcsQ0FBQyxDQUFDLFVBQVUsRUFBRSxFQUFFOztRQUNsQix1QkFBdUI7UUFDdkIsSUFBSSxVQUFVLENBQUMsTUFBTSxLQUFLLEtBQUssRUFBRTtZQUMvQixPQUFPLElBQUksQ0FBQztTQUNiO1FBRUQsUUFBUSxVQUFVLENBQUMsSUFBSSxFQUFFO1lBQ3ZCLEtBQUssb0JBQVksQ0FBQyxXQUFXO2dCQUMzQixxQ0FDRSxJQUFJLEVBQUUsSUFBSSxFQUNWLE1BQU0sRUFBRSxVQUFVLENBQUMsTUFBTSxFQUN6QixJQUFJLEVBQUUsVUFBVSxDQUFDLFFBQVEsRUFDekIsUUFBUSxFQUFFLFVBQVUsQ0FBQyxRQUFRLEVBQzdCLElBQUksRUFBRSxVQUFVLENBQUMsSUFBSSxFQUNyQixNQUFNLEVBQUUsVUFBVSxDQUFDLFFBQVEsRUFDM0IsR0FBRyxFQUFFLFVBQVUsQ0FBQyxXQUFXLENBQUMsS0FBSyxJQUFJLElBQ2xDLENBQUMsVUFBVSxDQUFDLElBQUks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
@@ -1,7 +1,11 @@
1
1
  "use strict";
2
2
  var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
3
  if (k2 === undefined) k2 = k;
4
- Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
5
9
  }) : (function(o, m, k, k2) {
6
10
  if (k2 === undefined) k2 = k;
7
11
  o[k2] = m[k];
@@ -12,4 +16,4 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
12
16
  Object.defineProperty(exports, "__esModule", { value: true });
13
17
  // 兼容 Gateway,后续删除
14
18
  __exportStar(require("../constant"), exports);
15
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3RhbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9saWIvdXRpbHMvY29uc3RhbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0FBQUEsa0JBQWtCO0FBQ2xCLDhDQUE0QiJ9
19
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3RhbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9saWIvdXRpbHMvY29uc3RhbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLGtCQUFrQjtBQUNsQiw4Q0FBNEIifQ==
@@ -5,12 +5,12 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.resolve4And6 = exports.resolveDomain = void 0;
7
7
  const dns_1 = require("dns");
8
- const lru_cache_1 = __importDefault(require("lru-cache"));
9
8
  const logger_1 = require("@surgio/logger");
10
9
  const bluebird_1 = __importDefault(require("bluebird"));
10
+ const node_cache_1 = __importDefault(require("node-cache"));
11
11
  const env_flag_1 = require("./env-flag");
12
- const DomainCache = new lru_cache_1.default({
13
- max: 5000,
12
+ const DomainCache = new node_cache_1.default({
13
+ useClones: false,
14
14
  });
15
15
  const logger = (0, logger_1.createLogger)({ service: 'surgio:utils:dns' });
16
16
  const resolveDomain = async (domain, timeout = (0, env_flag_1.getNetworkResolveTimeout)()) => {
@@ -26,7 +26,7 @@ const resolveDomain = async (domain, timeout = (0, env_flag_1.getNetworkResolveT
26
26
  logger.debug(`resolved domain ${domain}: ${JSON.stringify(records)} ${Date.now() - now}ms`);
27
27
  if (records.length) {
28
28
  const address = records.map((item) => item.address);
29
- DomainCache.set(domain, address, records[0].ttl * 1000);
29
+ DomainCache.set(domain, address, records[0].ttl); // ttl is in seconds
30
30
  return address;
31
31
  }
32
32
  // istanbul ignore next
@@ -45,4 +45,4 @@ const resolve4And6 = async (domain) => {
45
45
  return [...ipv4, ...ipv6];
46
46
  };
47
47
  exports.resolve4And6 = resolve4And6;
48
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG5zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vbGliL3V0aWxzL2Rucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSw2QkFBcUQ7QUFDckQsMERBQTRCO0FBQzVCLDJDQUE4QztBQUM5Qyx3REFBZ0M7QUFFaEMseUNBQXNEO0FBRXRELE1BQU0sV0FBVyxHQUFHLElBQUksbUJBQUcsQ0FBZ0M7SUFDekQsR0FBRyxFQUFFLElBQUk7Q0FDVixDQUFDLENBQUM7QUFDSCxNQUFNLE1BQU0sR0FBRyxJQUFBLHFCQUFZLEVBQUMsRUFBRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsQ0FBQyxDQUFDO0FBRXRELE1BQU0sYUFBYSxHQUFHLEtBQUssRUFDaEMsTUFBYyxFQUNkLFVBQWtCLElBQUEsbUNBQXdCLEdBQUUsRUFDWixFQUFFO0lBQ2xDLElBQUksV0FBVyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRTtRQUMzQixPQUFPLFdBQVcsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUEwQixDQUFDO0tBQ3pEO0lBRUQsTUFBTSxDQUFDLEtBQUssQ0FBQyx5QkFBeUIsTUFBTSxFQUFFLENBQUMsQ0FBQztJQUNoRCxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7SUFDdkIsTUFBTSxPQUFPLEdBQUcsTUFBTSxrQkFBUSxDQUFDLElBQUksQ0FBK0I7UUFDaEUsSUFBQSxvQkFBWSxFQUFDLE1BQU0sQ0FBQztRQUNwQixrQkFBUSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDO0tBQ3ZDLENBQUMsQ0FBQztJQUNILE1BQU0sQ0FBQyxLQUFLLENBQ1YsbUJBQW1CLE1BQU0sS0FBSyxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxJQUNuRCxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsR0FDZixJQUFJLENBQ0wsQ0FBQztJQUVGLElBQUksT0FBTyxDQUFDLE1BQU0sRUFBRTtRQUNsQixNQUFNLE9BQU8sR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDcEQsV0FBVyxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLENBQUM7UUFDeEQsT0FBTyxPQUFPLENBQUM7S0FDaEI7SUFFRCx1QkFBdUI7SUFDdkIsT0FBTyxFQUFFLENBQUM7QUFDWixDQUFDLENBQUM7QUE1QlcsUUFBQSxhQUFhLGlCQTRCeEI7QUFFSyxNQUFNLFlBQVksR0FBRyxLQUFLLEVBQy9CLE1BQWMsRUFDeUIsRUFBRTtJQUN6Qyx1QkFBdUI7SUFDdkIsU0FBUyxLQUFLO1FBQ1osT0FBTyxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQsTUFBTSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsR0FBRyxNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQUM7UUFDckMsY0FBRyxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDO1FBQ2hELGNBQUcsQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQztLQUNqRCxDQUFDLENBQUM7SUFFSCxPQUFPLENBQUMsR0FBRyxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQztBQUM1QixDQUFDLENBQUM7QUFkVyxRQUFBLFlBQVksZ0JBY3ZCIn0=
48
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG5zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vbGliL3V0aWxzL2Rucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSw2QkFBcUQ7QUFDckQsMkNBQThDO0FBQzlDLHdEQUFnQztBQUNoQyw0REFBbUM7QUFFbkMseUNBQXNEO0FBRXRELE1BQU0sV0FBVyxHQUFHLElBQUksb0JBQVMsQ0FBQztJQUNoQyxTQUFTLEVBQUUsS0FBSztDQUNqQixDQUFDLENBQUM7QUFDSCxNQUFNLE1BQU0sR0FBRyxJQUFBLHFCQUFZLEVBQUMsRUFBRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsQ0FBQyxDQUFDO0FBRXRELE1BQU0sYUFBYSxHQUFHLEtBQUssRUFDaEMsTUFBYyxFQUNkLFVBQWtCLElBQUEsbUNBQXdCLEdBQUUsRUFDWixFQUFFO0lBQ2xDLElBQUksV0FBVyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRTtRQUMzQixPQUFPLFdBQVcsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUEwQixDQUFDO0tBQ3pEO0lBRUQsTUFBTSxDQUFDLEtBQUssQ0FBQyx5QkFBeUIsTUFBTSxFQUFFLENBQUMsQ0FBQztJQUNoRCxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7SUFDdkIsTUFBTSxPQUFPLEdBQUcsTUFBTSxrQkFBUSxDQUFDLElBQUksQ0FBK0I7UUFDaEUsSUFBQSxvQkFBWSxFQUFDLE1BQU0sQ0FBQztRQUNwQixrQkFBUSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDO0tBQ3ZDLENBQUMsQ0FBQztJQUNILE1BQU0sQ0FBQyxLQUFLLENBQ1YsbUJBQW1CLE1BQU0sS0FBSyxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxJQUNuRCxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsR0FDZixJQUFJLENBQ0wsQ0FBQztJQUVGLElBQUksT0FBTyxDQUFDLE1BQU0sRUFBRTtRQUNsQixNQUFNLE9BQU8sR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDcEQsV0FBVyxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLG9CQUFvQjtRQUN0RSxPQUFPLE9BQU8sQ0FBQztLQUNoQjtJQUVELHVCQUF1QjtJQUN2QixPQUFPLEVBQUUsQ0FBQztBQUNaLENBQUMsQ0FBQztBQTVCVyxRQUFBLGFBQWEsaUJBNEJ4QjtBQUVLLE1BQU0sWUFBWSxHQUFHLEtBQUssRUFDL0IsTUFBYyxFQUN5QixFQUFFO0lBQ3pDLHVCQUF1QjtJQUN2QixTQUFTLEtBQUs7UUFDWixPQUFPLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRCxNQUFNLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxHQUFHLE1BQU0sT0FBTyxDQUFDLEdBQUcsQ0FBQztRQUNyQyxjQUFHLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUM7UUFDaEQsY0FBRyxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDO0tBQ2pELENBQUMsQ0FBQztJQUVILE9BQU8sQ0FBQyxHQUFHLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDO0FBQzVCLENBQUMsQ0FBQztBQWRXLFFBQUEsWUFBWSxnQkFjdkIifQ==