surgio 2.18.2 → 2.19.0-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 (52) hide show
  1. package/CHANGELOG.md +32 -0
  2. package/build/command/check.js +7 -11
  3. package/build/command/clean-cache.d.ts +1 -1
  4. package/build/command/clean-cache.js +10 -2
  5. package/build/command/doctor.js +6 -14
  6. package/build/command/generate.js +10 -12
  7. package/build/command/lint.js +1 -1
  8. package/build/command/new.js +5 -13
  9. package/build/command/subscriptions.js +5 -10
  10. package/build/command/upload.js +9 -13
  11. package/build/constant/constant.d.ts +4 -0
  12. package/build/constant/constant.js +6 -2
  13. package/build/generator/template.d.ts +1 -1
  14. package/build/index.d.ts +7 -1
  15. package/build/index.js +12 -13
  16. package/build/misc/flag_cn.d.ts +15 -1
  17. package/build/misc/flag_cn.js +69 -30
  18. package/build/provider/ClashProvider.d.ts +1 -1
  19. package/build/provider/Provider.js +47 -24
  20. package/build/provider/ShadowsocksJsonSubscribeProvider.d.ts +1 -1
  21. package/build/provider/ShadowsocksSubscribeProvider.d.ts +1 -1
  22. package/build/provider/ShadowsocksrSubscribeProvider.d.ts +1 -1
  23. package/build/provider/SsdProvider.d.ts +2 -2
  24. package/build/redis.d.ts +9 -0
  25. package/build/redis.js +61 -0
  26. package/build/types.d.ts +8 -1
  27. package/build/utils/cache.d.ts +13 -1
  28. package/build/utils/cache.js +41 -3
  29. package/build/utils/clash.d.ts +2 -2
  30. package/build/utils/command.d.ts +2 -0
  31. package/build/utils/command.js +23 -0
  32. package/build/utils/config.d.ts +3 -1
  33. package/build/utils/config.js +41 -3
  34. package/build/utils/filter.d.ts +4 -4
  35. package/build/utils/http-client.d.ts +1 -1
  36. package/build/utils/index.d.ts +8 -5
  37. package/build/utils/index.js +22 -5
  38. package/build/utils/linter.d.ts +1 -1
  39. package/build/utils/loon.d.ts +1 -1
  40. package/build/utils/patch-proxy.js +2 -7
  41. package/build/utils/quantumult.d.ts +2 -2
  42. package/build/utils/remote-snippet.d.ts +1 -1
  43. package/build/utils/remote-snippet.js +8 -5
  44. package/build/utils/ss.js +13 -15
  45. package/build/utils/ssr.js +4 -7
  46. package/build/utils/surge.d.ts +1 -1
  47. package/build/utils/tmp-helper.d.ts +21 -7
  48. package/build/utils/tmp-helper.js +47 -16
  49. package/build/utils/trojan.js +4 -7
  50. package/build/utils/v2ray.d.ts +1 -1
  51. package/build/utils/v2ray.js +6 -8
  52. package/package.json +10 -20
@@ -5,34 +5,48 @@ declare const _default: {
5
5
  '\uD83C\uDDE6\uD83C\uDDF7': string[];
6
6
  '\uD83C\uDDE6\uD83C\uDDF9': string[];
7
7
  '\uD83C\uDDE6\uD83C\uDDFA': string[];
8
+ '\uD83C\uDDE7\uD83C\uDDEA': string[];
9
+ '\uD83C\uDDE7\uD83C\uDDEC': string[];
8
10
  '\uD83C\uDDF5\uD83C\uDDF0': string[];
9
11
  '\uD83C\uDDE7\uD83C\uDDF7': string[];
10
12
  '\uD83C\uDDE8\uD83C\uDDE6': string[];
11
13
  '\uD83C\uDDE8\uD83C\uDDED': string[];
12
14
  '\uD83C\uDDE9\uD83C\uDDEA': string[];
15
+ '\uD83C\uDDE9\uD83C\uDDF0': string[];
16
+ '\uD83C\uDDEA\uD83C\uDDF8': string[];
17
+ '\uD83C\uDDEA\uD83C\uDDFA': string[];
13
18
  '\uD83C\uDDEB\uD83C\uDDEE': string[];
14
19
  '\uD83C\uDDEB\uD83C\uDDF7': string[];
15
20
  '\uD83C\uDDEC\uD83C\uDDE7': string[];
21
+ '\uD83C\uDDFA\uD83C\uDDE6': string[];
22
+ '\uD83C\uDDED\uD83C\uDDFA': string[];
16
23
  '\uD83C\uDDED\uD83C\uDDF0': string[];
24
+ '\uD83C\uDDEE\uD83C\uDDF3': string[];
17
25
  '\uD83C\uDDEE\uD83C\uDDE9': string[];
18
26
  '\uD83C\uDDEE\uD83C\uDDEA': string[];
19
- '\uD83C\uDDEE\uD83C\uDDF3': string[];
27
+ '\uD83C\uDDEE\uD83C\uDDF1': string[];
20
28
  '\uD83C\uDDEE\uD83C\uDDF9': string[];
21
29
  '\uD83C\uDDF0\uD83C\uDDF5': string[];
22
30
  '\uD83C\uDDF0\uD83C\uDDF7': string[];
31
+ '\uD83C\uDDF1\uD83C\uDDFB': string[];
32
+ '\uD83C\uDDF2\uD83C\uDDFD\uFE0F': string[];
23
33
  '\uD83C\uDDF2\uD83C\uDDF4': string[];
24
34
  '\uD83C\uDDF2\uD83C\uDDFE': string[];
25
35
  '\uD83C\uDDF3\uD83C\uDDF1': string[];
26
36
  '\uD83C\uDDF5\uD83C\uDDED': string[];
27
37
  '\uD83C\uDDF7\uD83C\uDDF4': string[];
28
38
  '\uD83C\uDDF7\uD83C\uDDFA': string[];
39
+ '\uD83C\uDDF8\uD83C\uDDE6': string[];
40
+ '\uD83C\uDDF8\uD83C\uDDEA': string[];
29
41
  '\uD83C\uDDF8\uD83C\uDDEC': string[];
30
42
  '\uD83C\uDDF9\uD83C\uDDED': string[];
31
43
  '\uD83C\uDDF9\uD83C\uDDF7': string[];
32
44
  '\uD83C\uDDFA\uD83C\uDDF8': string[];
33
45
  '\uD83C\uDDFB\uD83C\uDDF3': string[];
34
46
  '\uD83C\uDDFF\uD83C\uDDE6': string[];
47
+ '\uD83C\uDDE6\uD83C\uDDEA': string[];
35
48
  '\uD83C\uDDEF\uD83C\uDDF5': string[];
49
+ '\uD83C\uDDF3\uD83C\uDDF4': string[];
36
50
  '\uD83C\uDDE8\uD83C\uDDF3': string[];
37
51
  };
38
52
  export default _default;
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  // istanbul ignore file
3
3
  // credit: https://github.com/JO2EY/Rules
4
+ // flags from @KOP-XIAO: https://github.com/KOP-XIAO/QuantumultX/blob/master/Scripts/resource-parser.js
4
5
  Object.defineProperty(exports, "__esModule", { value: true });
5
6
  exports.TAIWAN = void 0;
6
7
  exports.TAIWAN = [
@@ -11,59 +12,91 @@ exports.TAIWAN = [
11
12
  '臺',
12
13
  '新北',
13
14
  '彰化',
15
+ 'CHT',
16
+ 'HINET',
14
17
  ];
15
18
  exports.default = {
16
- '🏳️‍🌈': ['流量', '时间'],
19
+ '🏳️‍🌈': ['流量', '时间', '过期', 'BANDWIDTH', 'EXPIRE'],
17
20
  '🇸🇱': ['应急', '测试节点'],
18
- '🇦🇷': ['阿根廷'],
19
- '🇦🇹': ['奥地利', '维也纳'],
20
- '🇦🇺': ['澳大利亚', '悉尼', '澳洲'],
21
- '🇵🇰': ['巴基斯坦'],
22
- '🇧🇷': ['巴西', '圣保罗'],
23
- '🇨🇦': ['CANADA', '加拿大', '蒙特利尔', '温哥华'],
24
- '🇨🇭': ['瑞士', '苏黎世'],
25
- '🇩🇪': ['法兰克福', '德'],
26
- '🇫🇮': ['芬兰', '赫尔辛基'],
27
- '🇫🇷': ['FR', '法國', '法国', '巴黎'],
28
- '🇬🇧': ['UK', '英', '伦敦'],
29
- '🇭🇰': ['HK', '港', 'HONG KONG', 'HGC'],
30
- '🇮🇩': ['印尼', '印度尼西亚', '雅加达'],
31
- '🇮🇪': ['爱尔兰', '都柏林'],
32
- '🇮🇳': ['印度', '孟买'],
33
- '🇮🇹': ['意大利', '米兰', '義大利'],
21
+ '🇦🇷': ['ARGENTINA', '阿根廷'],
22
+ '🇦🇹': ['AUSTRIA', '奥地利', '维也纳'],
23
+ '🇦🇺': ['AUSTRALIA', '澳大利亚', '澳洲', '墨尔本', '悉尼', 'SYDNEY'],
24
+ '🇧🇪': ['BELGIUM', '比利时'],
25
+ '🇧🇬': ['BULGARIA', '保加利亚'],
26
+ '🇵🇰': ['PAKISTAN', '巴基斯坦'],
27
+ '🇧🇷': ['BRAZIL', '巴西', '圣保罗'],
28
+ '🇨🇦': [
29
+ 'CANADA',
30
+ '加拿大',
31
+ 'WATERLOO',
32
+ '蒙特利尔',
33
+ '温哥华',
34
+ '楓葉',
35
+ '枫叶',
36
+ '滑铁卢',
37
+ '多伦多',
38
+ ],
39
+ '🇨🇭': ['SWITZERLAND', '瑞士', '苏黎世'],
40
+ '🇩🇪': ['GERMAN', '德', '法兰克福'],
41
+ '🇩🇰': ['DENMARK', '丹麦'],
42
+ '🇪🇸': ['SPAIN', '西班牙'],
43
+ '🇪🇺': ['欧盟', '欧罗巴'],
44
+ '🇫🇮': ['FINLAND', '芬兰', '赫尔辛基'],
45
+ '🇫🇷': ['FR', 'FRANCE', '法国', '法國', '巴黎'],
46
+ '🇬🇧': ['UK', 'ENGLAND', 'UNITED KINGDOM', '英', '伦敦'],
47
+ '🇺🇦': ['UKRAINE', '乌克兰', '基辅'],
48
+ '🇭🇺': ['HUNGARY', '匈牙利'],
49
+ '🇭🇰': ['HK', '港', 'HONGKONG', 'HONG KONG', 'HGC', 'WTT', 'CMI'],
50
+ '🇮🇳': ['INDIA', '印度', '孟买', 'MUMBAI'],
51
+ '🇮🇩': ['INDONESIA', '印尼', '印度尼西亚', '雅加达'],
52
+ '🇮🇪': ['IRELAND', '爱尔兰', '都柏林'],
53
+ '🇮🇱': ['ISRAEL', '以色列'],
54
+ '🇮🇹': ['ITALY', 'NACHASH', '意大利', '米兰', '義大利'],
34
55
  '🇰🇵': ['朝鲜'],
35
- '🇰🇷': ['KR', 'KOREA', '首尔', '棒子', '韩', '韓'],
36
- '🇲🇴': ['澳门', 'MACAU'],
37
- '🇲🇾': ['马来西亚'],
38
- '🇳🇱': ['荷兰', '阿姆斯特丹'],
39
- '🇵🇭': ['菲律宾'],
40
- '🇷🇴': ['罗马尼亚'],
56
+ '🇰🇷': ['KR', 'KOREA', 'KOR', '首尔', '韩', '韓'],
57
+ '🇱🇻': ['LATVIA', 'LATVIJA', '拉脱维亚'],
58
+ '🇲🇽️': ['MEXICO', '墨西哥'],
59
+ '🇲🇴': ['MACAU', 'MACAO', '澳门', 'CTM'],
60
+ '🇲🇾': ['MALAYSIA', '马来西亚', '吉隆坡'],
61
+ '🇳🇱': ['NETHERLANDS', '荷兰', '荷蘭', '尼德蘭', '阿姆斯特丹'],
62
+ '🇵🇭': ['PHILIPPINES', '菲律宾'],
63
+ '🇷🇴': ['ROMANIA', '罗马尼亚'],
41
64
  '🇷🇺': [
42
65
  'RU',
43
66
  'RUSSIA',
44
67
  '普京',
45
68
  '俄罗斯',
69
+ '俄羅斯',
46
70
  '伯力',
47
71
  '莫斯科',
48
72
  '圣彼得堡',
49
73
  '西伯利亚',
74
+ '京俄',
75
+ '杭俄',
50
76
  ],
77
+ '🇸🇦': ['SAUDI', '沙特'],
78
+ '🇸🇪': ['SWEDEN', '瑞典'],
51
79
  '🇸🇬': [
52
80
  'SG',
53
81
  'SIN',
54
82
  'SINGAPORE',
55
83
  '新加坡',
56
84
  '狮城',
57
- '深新',
58
85
  '沪新',
59
86
  '京新',
60
87
  '中新',
88
+ '泉新',
89
+ '穗新',
90
+ '深新',
91
+ '杭新',
61
92
  '广新',
62
93
  ],
63
- '🇹🇭': ['泰', '曼谷'],
64
- '🇹🇷': ['土耳其', '伊斯坦布尔'],
94
+ '🇹🇭': ['THAILAND', '泰', '曼谷'],
95
+ '🇹🇷': ['TURKEY', '土耳其', '伊斯坦布尔'],
65
96
  '🇺🇸': [
66
97
  'US',
98
+ 'USA',
99
+ 'AMERICA',
67
100
  'UNITED STATES',
68
101
  'LAX',
69
102
  'SFO',
@@ -74,16 +107,21 @@ exports.default = {
74
107
  '凤凰城',
75
108
  '费利蒙',
76
109
  '硅谷',
110
+ '矽谷',
77
111
  '拉斯维加斯',
78
112
  '洛杉矶',
79
113
  '圣何塞',
80
114
  '圣克拉拉',
81
115
  '西雅图',
82
116
  '芝加哥',
117
+ '哥伦布',
118
+ '纽约',
83
119
  ],
84
- '🇻🇳': ['越南'],
85
- '🇿🇦': ['南非'],
86
- '🇯🇵': ['JP', 'JAPAN', '日本', '东京', '大阪', '埼玉', '沪日', '日'],
120
+ '🇻🇳': ['VIETNAM', '越南', '胡志明'],
121
+ '🇿🇦': ['SOUTH AFRICA', '南非'],
122
+ '🇦🇪': ['UNITED ARAB EMIRATES', '阿联酋', '迪拜'],
123
+ '🇯🇵': ['JP', 'JAPAN', '日', '东京', '大阪', '埼玉', 'NTT', 'KDDI'],
124
+ '🇳🇴': ['NORWAY', '挪威'],
87
125
  '🇨🇳': [
88
126
  ...exports.TAIWAN,
89
127
  'CHINA',
@@ -101,6 +139,7 @@ exports.default = {
101
139
  '青岛',
102
140
  '宁波',
103
141
  '镇江',
142
+ 'BACK',
104
143
  ],
105
144
  };
106
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmxhZ19jbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL2xpYi9taXNjL2ZsYWdfY24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLHVCQUF1QjtBQUN2Qix5Q0FBeUM7OztBQUU1QixRQUFBLE1BQU0sR0FBMEI7SUFDM0MsSUFBSTtJQUNKLFFBQVE7SUFDUixJQUFJO0lBQ0osR0FBRztJQUNILEdBQUc7SUFDSCxJQUFJO0lBQ0osSUFBSTtDQUNMLENBQUM7QUFFRixrQkFBZTtJQUNiLFFBQVEsRUFBRSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUM7SUFDdEIsTUFBTSxFQUFFLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQztJQUN0QixNQUFNLEVBQUUsQ0FBQyxLQUFLLENBQUM7SUFDZixNQUFNLEVBQUUsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDO0lBQ3RCLE1BQU0sRUFBRSxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDO0lBQzVCLE1BQU0sRUFBRSxDQUFDLE1BQU0sQ0FBQztJQUNoQixNQUFNLEVBQUUsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDO0lBQ3JCLE1BQU0sRUFBRSxDQUFDLFFBQVEsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLEtBQUssQ0FBQztJQUN4QyxNQUFNLEVBQUUsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDO0lBQ3JCLE1BQU0sRUFBRSxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUM7SUFDckIsTUFBTSxFQUFFLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQztJQUN0QixNQUFNLEVBQUUsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUM7SUFDaEMsTUFBTSxFQUFFLENBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUM7SUFDekIsTUFBTSxFQUFFLENBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRSxXQUFXLEVBQUUsS0FBSyxDQUFDO0lBQ3ZDLE1BQU0sRUFBRSxDQUFDLElBQUksRUFBRSxPQUFPLEVBQUUsS0FBSyxDQUFDO0lBQzlCLE1BQU0sRUFBRSxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUM7SUFDdEIsTUFBTSxFQUFFLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQztJQUNwQixNQUFNLEVBQUUsQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssQ0FBQztJQUM1QixNQUFNLEVBQUUsQ0FBQyxJQUFJLENBQUM7SUFDZCxNQUFNLEVBQUUsQ0FBQyxJQUFJLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQztJQUM3QyxNQUFNLEVBQUUsQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDO0lBQ3ZCLE1BQU0sRUFBRSxDQUFDLE1BQU0sQ0FBQztJQUNoQixNQUFNLEVBQUUsQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDO0lBQ3ZCLE1BQU0sRUFBRSxDQUFDLEtBQUssQ0FBQztJQUNmLE1BQU0sRUFBRSxDQUFDLE1BQU0sQ0FBQztJQUNoQixNQUFNLEVBQUU7UUFDTixJQUFJO1FBQ0osUUFBUTtRQUNSLElBQUk7UUFDSixLQUFLO1FBQ0wsSUFBSTtRQUNKLEtBQUs7UUFDTCxNQUFNO1FBQ04sTUFBTTtLQUNQO0lBQ0QsTUFBTSxFQUFFO1FBQ04sSUFBSTtRQUNKLEtBQUs7UUFDTCxXQUFXO1FBQ1gsS0FBSztRQUNMLElBQUk7UUFDSixJQUFJO1FBQ0osSUFBSTtRQUNKLElBQUk7UUFDSixJQUFJO1FBQ0osSUFBSTtLQUNMO0lBQ0QsTUFBTSxFQUFFLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQztJQUNuQixNQUFNLEVBQUUsQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDO0lBQ3hCLE1BQU0sRUFBRTtRQUNOLElBQUk7UUFDSixlQUFlO1FBQ2YsS0FBSztRQUNMLEtBQUs7UUFDTCxHQUFHO1FBQ0gsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxJQUFJO1FBQ0osT0FBTztRQUNQLEtBQUs7UUFDTCxLQUFLO1FBQ0wsTUFBTTtRQUNOLEtBQUs7UUFDTCxLQUFLO0tBQ047SUFDRCxNQUFNLEVBQUUsQ0FBQyxJQUFJLENBQUM7SUFDZCxNQUFNLEVBQUUsQ0FBQyxJQUFJLENBQUM7SUFDZCxNQUFNLEVBQUUsQ0FBQyxJQUFJLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDO0lBQzFELE1BQU0sRUFBRTtRQUNOLEdBQUcsY0FBTTtRQUNULE9BQU87UUFDUCxJQUFJO1FBQ0osSUFBSTtRQUNKLElBQUk7UUFDSixJQUFJO1FBQ0osSUFBSTtRQUNKLElBQUk7UUFDSixJQUFJO1FBQ0osSUFBSTtRQUNKLElBQUk7UUFDSixJQUFJO1FBQ0osSUFBSTtRQUNKLElBQUk7UUFDSixJQUFJO1FBQ0osSUFBSTtLQUNMO0NBQ0YsQ0FBQyJ9
145
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmxhZ19jbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL2xpYi9taXNjL2ZsYWdfY24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLHVCQUF1QjtBQUN2Qix5Q0FBeUM7QUFDekMsdUdBQXVHOzs7QUFFMUYsUUFBQSxNQUFNLEdBQTBCO0lBQzNDLElBQUk7SUFDSixRQUFRO0lBQ1IsSUFBSTtJQUNKLEdBQUc7SUFDSCxHQUFHO0lBQ0gsSUFBSTtJQUNKLElBQUk7SUFDSixLQUFLO0lBQ0wsT0FBTztDQUNSLENBQUM7QUFFRixrQkFBZTtJQUNiLFFBQVEsRUFBRSxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSxRQUFRLENBQUM7SUFDbkQsTUFBTSxFQUFFLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQztJQUN0QixNQUFNLEVBQUUsQ0FBQyxXQUFXLEVBQUUsS0FBSyxDQUFDO0lBQzVCLE1BQU0sRUFBRSxDQUFDLFNBQVMsRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDO0lBQ2pDLE1BQU0sRUFBRSxDQUFDLFdBQVcsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsUUFBUSxDQUFDO0lBQzFELE1BQU0sRUFBRSxDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUM7SUFDMUIsTUFBTSxFQUFFLENBQUMsVUFBVSxFQUFFLE1BQU0sQ0FBQztJQUM1QixNQUFNLEVBQUUsQ0FBQyxVQUFVLEVBQUUsTUFBTSxDQUFDO0lBQzVCLE1BQU0sRUFBRSxDQUFDLFFBQVEsRUFBRSxJQUFJLEVBQUUsS0FBSyxDQUFDO0lBQy9CLE1BQU0sRUFBRTtRQUNOLFFBQVE7UUFDUixLQUFLO1FBQ0wsVUFBVTtRQUNWLE1BQU07UUFDTixLQUFLO1FBQ0wsSUFBSTtRQUNKLElBQUk7UUFDSixLQUFLO1FBQ0wsS0FBSztLQUNOO0lBQ0QsTUFBTSxFQUFFLENBQUMsYUFBYSxFQUFFLElBQUksRUFBRSxLQUFL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
@@ -23,5 +23,5 @@ export declare const getClashSubscription: ({ url, udpRelay, tls13, requestUserA
23
23
  readonly nodeList: ReadonlyArray<SupportConfigTypes>;
24
24
  readonly subscriptionUserinfo?: SubscriptionUserinfo;
25
25
  }>;
26
- export declare const parseClashConfig: (proxyList: ReadonlyArray<any>, udpRelay?: boolean | undefined, tls13?: boolean | undefined) => ReadonlyArray<SupportConfigTypes>;
26
+ export declare const parseClashConfig: (proxyList: ReadonlyArray<any>, udpRelay?: boolean, tls13?: boolean) => ReadonlyArray<SupportConfigTypes>;
27
27
  export {};
@@ -28,8 +28,11 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
28
28
  Object.defineProperty(exports, "__esModule", { value: true });
29
29
  const logger_1 = require("@surgio/logger");
30
30
  const joi_1 = __importDefault(require("joi"));
31
+ const constant_1 = require("../constant");
31
32
  const types_1 = require("../types");
32
33
  const cache_1 = require("../utils/cache");
34
+ const config_1 = require("../utils/config");
35
+ const env_flag_1 = require("../utils/env-flag");
33
36
  const http_client_1 = __importStar(require("../utils/http-client"));
34
37
  const subscription_1 = require("../utils/subscription");
35
38
  const utils_1 = require("../utils");
@@ -93,29 +96,49 @@ class Provider {
93
96
  });
94
97
  }
95
98
  static async requestCacheableResource(url, options = {}) {
96
- const cacheKey = `${(0, utils_1.toBase64)((0, http_client_1.getUserAgent)(options.requestUserAgent || ''))}:${url}`;
97
- return cache_1.SubscriptionCache.has(cacheKey)
98
- ? cache_1.SubscriptionCache.get(cacheKey)
99
- : await (async () => {
100
- const headers = {};
101
- if (options.requestUserAgent) {
102
- headers['user-agent'] = (0, http_client_1.getUserAgent)(options.requestUserAgent);
103
- }
104
- const res = await http_client_1.default.get(url, {
105
- responseType: 'text',
106
- headers,
107
- });
108
- const subsciptionCacheItem = {
109
- body: res.body,
110
- };
111
- if (res.headers['subscription-userinfo']) {
112
- subsciptionCacheItem.subscriptionUserinfo =
113
- (0, subscription_1.parseSubscriptionUserInfo)(res.headers['subscription-userinfo']);
114
- logger.debug('%s received subscription userinfo - raw: %s | parsed: %j', url, res.headers['subscription-userinfo'], subsciptionCacheItem.subscriptionUserinfo);
115
- }
116
- cache_1.SubscriptionCache.set(cacheKey, subsciptionCacheItem);
117
- return subsciptionCacheItem;
118
- })();
99
+ var _a, _b;
100
+ 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';
101
+ const cacheKey = `${constant_1.CACHE_KEYS.Provider}:${(0, utils_1.toMD5)((0, http_client_1.getUserAgent)(options.requestUserAgent || '') + url)}`;
102
+ const requestResource = async () => {
103
+ const headers = {};
104
+ if (options.requestUserAgent) {
105
+ headers['user-agent'] = (0, http_client_1.getUserAgent)(options.requestUserAgent);
106
+ }
107
+ const res = await http_client_1.default.get(url, {
108
+ responseType: 'text',
109
+ headers,
110
+ });
111
+ const subsciptionCacheItem = {
112
+ body: res.body,
113
+ };
114
+ if (res.headers['subscription-userinfo']) {
115
+ subsciptionCacheItem.subscriptionUserinfo = (0, subscription_1.parseSubscriptionUserInfo)(res.headers['subscription-userinfo']);
116
+ logger.debug('%s received subscription userinfo - raw: %s | parsed: %j', url, res.headers['subscription-userinfo'], subsciptionCacheItem.subscriptionUserinfo);
117
+ }
118
+ return subsciptionCacheItem;
119
+ };
120
+ if (cacheType === 'default') {
121
+ return cache_1.SubscriptionCache.has(cacheKey)
122
+ ? cache_1.SubscriptionCache.get(cacheKey)
123
+ : await (async () => {
124
+ const subsciptionCacheItem = await requestResource();
125
+ cache_1.SubscriptionCache.set(cacheKey, subsciptionCacheItem);
126
+ return subsciptionCacheItem;
127
+ })();
128
+ }
129
+ else {
130
+ const redisCache = new cache_1.RedisCache();
131
+ const cachedValue = await redisCache.getCache(cacheKey);
132
+ return cachedValue
133
+ ? cachedValue
134
+ : await (async () => {
135
+ const subsciptionCacheItem = await requestResource();
136
+ await redisCache.setCache(cacheKey, subsciptionCacheItem, {
137
+ ttl: (0, utils_1.msToSeconds)((0, env_flag_1.getProviderCacheMaxage)()),
138
+ });
139
+ return subsciptionCacheItem;
140
+ })();
141
+ }
119
142
  }
120
143
  get nextPort() {
121
144
  if (this.startPort) {
@@ -133,4 +156,4 @@ class Provider {
133
156
  }
134
157
  }
135
158
  exports.default = Provider;
136
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUHJvdmlkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9saWIvcHJvdmlkZXIvUHJvdmlkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLDJDQUE4QztBQUM5Qyw4Q0FBc0I7QUFFdEIsb0NBS2tCO0FBQ2xCLDBDQUF5RTtBQUN6RSxvRUFBZ0U7QUFDaEUsd0RBQWtFO0FBQ2xFLG9DQUFvQztBQUVwQyxNQUFNLE1BQU0sR0FBRyxJQUFBLHFCQUFZLEVBQUM7SUFDMUIsT0FBTyxFQUFFLGlCQUFpQjtDQUMzQixDQUFDLENBQUM7QUFFSCxNQUFxQixRQUFRO0lBa0IzQixZQUFtQixJQUFZLEVBQUUsTUFBc0I7UUFBcEMsU0FBSSxHQUFKLElBQUksQ0FBUTtRQUM3QixNQUFNLE1BQU0sR0FBRyxhQUFHLENBQUMsTUFBTSxDQUFDO1lBQ3hCLElBQUksRUFBRSxhQUFHLENBQUMsTUFBTSxFQUFFO2lCQUNmLEtBQUssQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQVMsMkJBQW1CLENBQUMsQ0FBQztpQkFDcEQsUUFBUSxFQUFFO1lBQ2IsVUFBVSxFQUFFLGFBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQ3pCLGFBQUcsQ0FBQyxRQUFRLEVBQUUsRUFDZCxhQUFHLENBQUMsTUFBTSxDQUFDO2dCQUNULE1BQU0sRUFBRSxhQUFHLENBQUMsUUFBUSxFQUFFO2dCQUN0QixXQUFXLEVBQUUsYUFBRyxDQUFDLE9BQU8sRUFBRSxDQUFDLE1BQU0sRUFBRTthQUNwQyxDQUFDLENBQ0g7WUFDRCxhQUFhLEVBQUUsYUFBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FDNUIsYUFBRyxDQUFDLFFBQVEsRUFBRSxFQUNkLGFBQUcsQ0FBQyxNQUFNLENBQUM7Z0JBQ1QsTUFBTSxFQUFFLGFBQUcsQ0FBQyxRQUFRLEVBQUU7Z0JBQ3RCLFdBQVcsRUFBRSxhQUFHLENBQUMsT0FBTyxF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
159
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUHJvdmlkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9saWIvcHJvdmlkZXIvUHJvdmlkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLDJDQUE4QztBQUM5Qyw4Q0FBc0I7QUFFdEIsMENBQXlDO0FBQ3pDLG9DQUtrQjtBQUNsQiwwQ0FJd0I7QUFDeEIsNENBQTRDO0FBQzVDLGdEQUEyRDtBQUMzRCxvRUFBZ0U7QUFDaEUsd0RBQWtFO0FBQ2xFLG9DQUE4QztBQUU5QyxNQUFNLE1BQU0sR0FBRyxJQUFBLHFCQUFZLEVBQUM7SUFDMUIsT0FBTyxFQUFFLGlCQUFpQjtDQUMzQixDQUFDLENBQUM7QUFFSCxNQUFxQixRQUFRO0lBa0IzQixZQUFtQixJQUFZLEVBQUUsTUFBc0I7UUFBcEMsU0FBSSxHQUFKLElBQUksQ0FBUTtRQUM3QixNQUFNLE1BQU0sR0FBRyxhQUFHLENBQUMsTUFBTSxDQUFDO1lBQ3hCLElBQUksRUFBRSxhQUFHLENBQUMsTUFBTSxFQUFFO2lCQUNmLEtBQUssQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQVMsMkJBQW1CLENBQUMsQ0FBQztpQkFDcEQsUUFBUSxFQUFFO1lBQ2IsVUFBVSxFQUFFLGFBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQ3pCLGFBQUcsQ0FBQyxRQUFRLEVBQUUsRUFDZCxhQUFHLENBQUMsTUFBTSxDQUFDO2dCQUNULE1BQU0sRUFBRSxhQUFHLENBQUMsUUFBUSxFQUFFO2dCQUN0QixXQUFXLEVBQUUsYUFBRyxDQUFDLE9BQU8sRUFBRSxDQUFDLE1BQU0sRUFBRTthQUNwQyxDQUFDLENBQ0g7WUFDRCxhQUFhLEVBQUUsYUFBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FDNUIsYUFBRyxDQUFDLFFBQVEsRUFBRSxFQUNkLGFBQUcsQ0FBQyxNQUFNLENBQUM7Z0JBQ1QsTUFBTSxFQUFFLGFBQUcsQ0FBQyxRQUFR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
@@ -9,4 +9,4 @@ export default class ShadowsocksJsonSubscribeProvider extends Provider {
9
9
  requestUserAgent?: string;
10
10
  }): ReturnType<typeof getShadowsocksJSONConfig>;
11
11
  }
12
- export declare const getShadowsocksJSONConfig: (url: string, udpRelay?: boolean | undefined, requestUserAgent?: string | undefined) => Promise<ReadonlyArray<ShadowsocksNodeConfig>>;
12
+ export declare const getShadowsocksJSONConfig: (url: string, udpRelay?: boolean, requestUserAgent?: string) => Promise<ReadonlyArray<ShadowsocksNodeConfig>>;
@@ -15,7 +15,7 @@ export default class ShadowsocksSubscribeProvider extends Provider {
15
15
  /**
16
16
  * @see https://shadowsocks.org/en/spec/SIP002-URI-Scheme.html
17
17
  */
18
- export declare const getShadowsocksSubscription: (url: string, udpRelay?: boolean | undefined, requestUserAgent?: string | undefined) => Promise<{
18
+ export declare const getShadowsocksSubscription: (url: string, udpRelay?: boolean, requestUserAgent?: string) => Promise<{
19
19
  readonly nodeList: ReadonlyArray<ShadowsocksNodeConfig>;
20
20
  readonly subscriptionUserinfo?: SubscriptionUserinfo | undefined;
21
21
  }>;
@@ -12,7 +12,7 @@ export default class ShadowsocksrSubscribeProvider extends Provider {
12
12
  requestUserAgent?: string;
13
13
  }): Promise<ReadonlyArray<ShadowsocksrNodeConfig>>;
14
14
  }
15
- export declare const getShadowsocksrSubscription: (url: string, udpRelay?: boolean | undefined, requestUserAgent?: string | undefined) => Promise<{
15
+ export declare const getShadowsocksrSubscription: (url: string, udpRelay?: boolean, requestUserAgent?: string) => Promise<{
16
16
  readonly nodeList: ReadonlyArray<ShadowsocksrNodeConfig>;
17
17
  readonly subscriptionUserinfo?: SubscriptionUserinfo | undefined;
18
18
  }>;
@@ -12,11 +12,11 @@ export default class SsdProvider extends Provider {
12
12
  requestUserAgent?: string;
13
13
  }): Promise<ReadonlyArray<ShadowsocksNodeConfig>>;
14
14
  }
15
- export declare const getSsdSubscription: (url: string, udpRelay?: boolean | undefined, requestUserAgent?: string | undefined) => Promise<{
15
+ export declare const getSsdSubscription: (url: string, udpRelay?: boolean, requestUserAgent?: string) => Promise<{
16
16
  readonly nodeList: ReadonlyArray<ShadowsocksNodeConfig>;
17
17
  readonly subscriptionUserinfo?: SubscriptionUserinfo | undefined;
18
18
  }>;
19
- export declare const parseSsdConfig: (globalConfig: SsdSubscription, server: SsdServer, udpRelay?: boolean | undefined) => ShadowsocksNodeConfig | undefined;
19
+ export declare const parseSsdConfig: (globalConfig: SsdSubscription, server: SsdServer, udpRelay?: boolean) => ShadowsocksNodeConfig | undefined;
20
20
  export interface SsdSubscription {
21
21
  airport: string;
22
22
  port: number;
@@ -0,0 +1,9 @@
1
+ import Redis from 'ioredis';
2
+ declare const redis: {
3
+ hasRedis: () => boolean;
4
+ createRedis(_redisURL: string, customRedis?: any): Redis;
5
+ getRedis(): Redis;
6
+ destroyRedis(): Promise<void>;
7
+ cleanCache(): Promise<void>;
8
+ };
9
+ export default redis;
package/build/redis.js ADDED
@@ -0,0 +1,61 @@
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
+ const logger_1 = require("@surgio/logger");
7
+ const ioredis_1 = __importDefault(require("ioredis"));
8
+ const constant_1 = require("./constant");
9
+ const logger = (0, logger_1.createLogger)({ service: 'surgio:redis' });
10
+ const prepareRedis = () => {
11
+ let client = null;
12
+ let redisURL = null;
13
+ return {
14
+ hasRedis: () => !!client,
15
+ createRedis(_redisURL, customRedis) {
16
+ if (client && redisURL) {
17
+ logger.debug('Redis client already created with URL: %s', redisURL);
18
+ return client;
19
+ }
20
+ redisURL = _redisURL;
21
+ if (customRedis) {
22
+ client = new customRedis(_redisURL);
23
+ }
24
+ else {
25
+ client = new ioredis_1.default(_redisURL);
26
+ }
27
+ return client;
28
+ },
29
+ getRedis() {
30
+ if (!client) {
31
+ throw new Error('Redis client is not initialized');
32
+ }
33
+ return client;
34
+ },
35
+ async destroyRedis() {
36
+ if (client) {
37
+ await client.quit();
38
+ client = null;
39
+ redisURL = null;
40
+ }
41
+ },
42
+ async cleanCache() {
43
+ if (!client) {
44
+ return;
45
+ }
46
+ const keysToRemove = await Promise.all(Object.keys(constant_1.CACHE_KEYS).map((key) => {
47
+ if (!client)
48
+ return;
49
+ return client.keys(`${constant_1.CACHE_KEYS[key]}:*`);
50
+ }));
51
+ await Promise.all(keysToRemove.map((keys) => {
52
+ if (!client || !keys || !keys.length)
53
+ return;
54
+ return client.del(keys);
55
+ }));
56
+ },
57
+ };
58
+ };
59
+ const redis = prepareRedis();
60
+ exports.default = redis;
61
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVkaXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9saWIvcmVkaXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSwyQ0FBOEM7QUFDOUMsc0RBQTRCO0FBRTVCLHlDQUF3QztBQUV4QyxNQUFNLE1BQU0sR0FBRyxJQUFBLHFCQUFZLEVBQUMsRUFBRSxPQUFPLEVBQUUsY0FBYyxFQUFFLENBQUMsQ0FBQztBQUV6RCxNQUFNLFlBQVksR0FBRyxHQUFHLEVBQUU7SUFDeEIsSUFBSSxNQUFNLEdBQWlCLElBQUksQ0FBQztJQUNoQyxJQUFJLFFBQVEsR0FBa0IsSUFBSSxDQUFDO0lBRW5DLE9BQU87UUFDTCxRQUFRLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU07UUFDeEIsV0FBVyxDQUFDLFNBQWlCLEVBQUUsV0FBaUI7WUFDOUMsSUFBSSxNQUFNLElBQUksUUFBUSxFQUFFO2dCQUN0QixNQUFNLENBQUMsS0FBSyxDQUFDLDJDQUEyQyxFQUFFLFFBQVEsQ0FBQyxDQUFDO2dCQUNwRSxPQUFPLE1BQU0sQ0FBQzthQUNmO1lBQ0QsUUFBUSxHQUFHLFNBQVMsQ0FBQztZQUVyQixJQUFJLFdBQVcsRUFBRTtnQkFDZixNQUFNLEdBQUcsSUFBSSxXQUFXLENBQUMsU0FBUyxDQUFDLENBQUM7YUFDckM7aUJBQU07Z0JBQ0wsTUFBTSxHQUFHLElBQUksaUJBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQzthQUMvQjtZQUVELE9BQU8sTUFBZSxDQUFDO1FBQ3pCLENBQUM7UUFDRCxRQUFRO1lBQ04sSUFBSSxDQUFDLE1BQU0sRUFBRTtnQkFDWCxNQUFNLElBQUksS0FBSyxDQUFDLGlDQUFpQyxDQUFDLENBQUM7YUFDcEQ7WUFDRCxPQUFPLE1BQU0sQ0FBQztRQUNoQixDQUFDO1FBQ0QsS0FBSyxDQUFDLFlBQVk7WUFDaEIsSUFBSSxNQUFNLEVBQUU7Z0JBQ1YsTUFBTSxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUM7Z0JBQ3BCLE1BQU0sR0FBRyxJQUFJLENBQUM7Z0JBQ2QsUUFBUSxHQUFHLElBQUksQ0FBQzthQUNqQjtRQUNILENBQUM7UUFDRCxLQUFLLENBQUMsVUFBVTtZQUNkLElBQUksQ0FBQyxNQUFNLEVBQUU7Z0JBQ1gsT0FBTzthQUNSO1lBRUQsTUFBTSxZQUFZLEdBQUcsTUFBTSxPQUFPLENBQUMsR0FBRyxDQUNwQyxNQUFNLENBQUMsSUFBSSxDQUFDLHFCQUFVLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtnQkFDbEMsSUFBSSxDQUFDLE1BQU07b0JBQUUsT0FBTztnQkFFcEIsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcscUJBQVUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDN0MsQ0FBQyxDQUFDLENBQ0gsQ0FBQztZQUVGLE1BQU0sT0FBTyxDQUFDLEdBQUcsQ0FDZixZQUFZLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7Z0JBQ3hCLElBQUksQ0FBQyxNQUFNLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTTtvQkFBRSxPQUFPO2dCQUM3QyxPQUFPLE1BQU0sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDMUIsQ0FBQyxDQUFDLENBQ0gsQ0FBQztRQUNKLENBQUM7S0FDRixDQUFDO0FBQ0osQ0FBQyxDQUFDO0FBQ0YsTUFBTSxLQUFLLEdBQUcsWUFBWSxFQUFFLENBQUM7QUFFN0Isa0JBQWUsS0FBSyxDQUFDIn0=
package/build/types.d.ts CHANGED
@@ -21,11 +21,11 @@ export declare enum SupportProviderEnum {
21
21
  Trojan = "trojan"
22
22
  }
23
23
  export interface CommandConfig {
24
+ publicUrl: string;
24
25
  readonly output: string;
25
26
  readonly artifacts: ReadonlyArray<ArtifactConfig>;
26
27
  readonly remoteSnippets?: ReadonlyArray<RemoteSnippetConfig>;
27
28
  readonly urlBase: string;
28
- publicUrl: string;
29
29
  readonly providerDir: string;
30
30
  readonly templateDir: string;
31
31
  readonly configDir: string;
@@ -71,6 +71,10 @@ export interface CommandConfig {
71
71
  readonly [name: string]: NodeNameFilterType | SortedNodeNameFilterType;
72
72
  };
73
73
  readonly customParams?: PlainObjectOf<string | boolean | number>;
74
+ readonly cache?: {
75
+ readonly type?: 'redis' | 'default';
76
+ readonly redisUrl?: string;
77
+ };
74
78
  }
75
79
  export interface RemoteSnippetConfig {
76
80
  readonly url: string;
@@ -109,6 +113,9 @@ export interface ProviderConfig {
109
113
  readonly renameNode?: (name: string) => string;
110
114
  readonly relayUrl?: boolean | string;
111
115
  readonly requestUserAgent?: string;
116
+ readonly cache?: {
117
+ readonly type?: 'redis' | 'default';
118
+ };
112
119
  }
113
120
  export interface BlackSSLProviderConfig extends ProviderConfig {
114
121
  readonly username: string;
@@ -6,4 +6,16 @@ export interface SubsciptionCacheItem {
6
6
  }
7
7
  export declare const ConfigCache: NodeCache;
8
8
  export declare const SubscriptionCache: NodeCache;
9
- export declare const cleanCaches: () => void;
9
+ export declare class RedisCache {
10
+ namespace?: string | undefined;
11
+ private redisClient;
12
+ constructor(namespace?: string | undefined);
13
+ getCacheKey(key: string): string;
14
+ setCache: (key: string, value: unknown, { ttl }?: {
15
+ ttl?: number | undefined;
16
+ }) => Promise<void>;
17
+ getCache: <T>(key: string) => Promise<T | undefined>;
18
+ hasCache: (key: string) => Promise<boolean>;
19
+ deleteCache: (key: string) => Promise<void>;
20
+ }
21
+ export declare const cleanCaches: () => Promise<void>;
@@ -3,10 +3,11 @@ 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.cleanCaches = exports.SubscriptionCache = exports.ConfigCache = void 0;
6
+ exports.cleanCaches = exports.RedisCache = exports.SubscriptionCache = exports.ConfigCache = void 0;
7
7
  const node_cache_1 = __importDefault(require("node-cache"));
8
8
  const env_flag_1 = require("./env-flag");
9
9
  const index_1 = require("./index");
10
+ const redis_1 = __importDefault(require("../redis"));
10
11
  exports.ConfigCache = new node_cache_1.default({
11
12
  stdTTL: (0, index_1.msToSeconds)((0, env_flag_1.getProviderCacheMaxage)()),
12
13
  maxKeys: 300,
@@ -17,9 +18,46 @@ exports.SubscriptionCache = new node_cache_1.default({
17
18
  maxKeys: 300,
18
19
  useClones: false,
19
20
  });
20
- const cleanCaches = () => {
21
+ class RedisCache {
22
+ constructor(namespace) {
23
+ this.namespace = namespace;
24
+ this.setCache = async (key, value, { ttl } = {}) => {
25
+ const storeValue = JSON.stringify(value);
26
+ if (typeof ttl === 'undefined') {
27
+ await this.redisClient.set(this.getCacheKey(key), storeValue);
28
+ }
29
+ else {
30
+ await this.redisClient.set(this.getCacheKey(key), storeValue, 'EX', ttl);
31
+ }
32
+ };
33
+ this.getCache = async (key) => {
34
+ const value = await this.redisClient.get(this.getCacheKey(key));
35
+ if (!value) {
36
+ return undefined;
37
+ }
38
+ return JSON.parse(value);
39
+ };
40
+ this.hasCache = async (key) => {
41
+ const value = await this.redisClient.exists(this.getCacheKey(key));
42
+ return !!value;
43
+ };
44
+ this.deleteCache = async (key) => {
45
+ await this.redisClient.del(this.getCacheKey(key));
46
+ };
47
+ this.redisClient = redis_1.default.getRedis();
48
+ }
49
+ getCacheKey(key) {
50
+ return this.namespace ? `${this.namespace}:${key}` : key;
51
+ }
52
+ }
53
+ exports.RedisCache = RedisCache;
54
+ // istanbul ignore next
55
+ const cleanCaches = async () => {
21
56
  exports.ConfigCache.flushAll();
22
57
  exports.SubscriptionCache.flushAll();
58
+ if (redis_1.default.hasRedis()) {
59
+ await redis_1.default.cleanCache();
60
+ }
23
61
  };
24
62
  exports.cleanCaches = cleanCaches;
25
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FjaGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9saWIvdXRpbHMvY2FjaGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsNERBQW1DO0FBR25DLHlDQUFvRDtBQUNwRCxtQ0FBc0M7QUFPekIsUUFBQSxXQUFXLEdBQUcsSUFBSSxvQkFBUyxDQUFDO0lBQ3ZDLE1BQU0sRUFBRSxJQUFBLG1CQUFXLEVBQUMsSUFBQSxpQ0FBc0IsR0FBRSxDQUFDO0lBQzdDLE9BQU8sRUFBRSxHQUFHO0lBQ1osU0FBUyxFQUFFLEtBQUs7Q0FDakIsQ0FBQyxDQUFDO0FBRVUsUUFBQSxpQkFBaUIsR0FBRyxJQUFJLG9CQUFTLENBQUM7SUFDN0MsTUFBTSxFQUFFLElBQUEsbUJBQVcsRUFBQyxJQUFBLGlDQUFzQixHQUFFLENBQUM7SUFDN0MsT0FBTyxFQUFFLEdBQUc7SUFDWixTQUFTLEVBQUUsS0FBSztDQUNqQixDQUFDLENBQUM7QUFFSSxNQUFNLFdBQVcsR0FBRyxHQUFHLEVBQUU7SUFDOUIsbUJBQVcsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUN2Qix5QkFBaUIsQ0FBQyxRQUFRLEVBQUUsQ0FBQztBQUMvQixDQUFDLENBQUM7QUFIVyxRQUFBLFdBQVcsZUFHdEIifQ==
63
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FjaGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9saWIvdXRpbHMvY2FjaGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQ0EsNERBQW1DO0FBR25DLHlDQUFvRDtBQUNwRCxtQ0FBc0M7QUFDdEMscURBQTZCO0FBT2hCLFFBQUEsV0FBVyxHQUFHLElBQUksb0JBQVMsQ0FBQztJQUN2QyxNQUFNLEVBQUUsSUFBQSxtQkFBVyxFQUFDLElBQUEsaUNBQXNCLEdBQUUsQ0FBQztJQUM3QyxPQUFPLEVBQUUsR0FBRztJQUNaLFNBQVMsRUFBRSxLQUFLO0NBQ2pCLENBQUMsQ0FBQztBQUVVLFFBQUEsaUJBQWlCLEdBQUcsSUFBSSxvQkFBUyxDQUFDO0lBQzdDLE1BQU0sRUFBRSxJQUFBLG1CQUFXLEVBQUMsSUFBQSxpQ0FBc0IsR0FBRSxDQUFDO0lBQzdDLE9BQU8sRUFBRSxHQUFHO0lBQ1osU0FBUyxFQUFFLEtBQUs7Q0FDakIsQ0FBQyxDQUFDO0FBRUgsTUFBYSxVQUFVO0lBR3JCLFlBQW1CLFNBQWtCO1FBQWxCLGNBQVMsR0FBVCxTQUFTLENBQVM7UUFRckMsYUFBUSxHQUFHLEtBQUssRUFDZCxHQUFXLEVBQ1gsS0FBYyxFQUNkLEVBQUUsR0FBRyxLQUF1QixFQUFFLEVBQzlCLEVBQUU7WUFDRixNQUFNLFVBQVUsR0FBVyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBRWpELElBQUksT0FBTyxHQUFHLEtBQUssV0FBVyxFQUFFO2dCQUM5QixNQUFNLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLEVBQUUsVUFBVSxDQUFDLENBQUM7YUFDL0Q7aUJBQU07Z0JBQ0wsTUFBTSxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUM7YUFDMUU7UUFDSCxDQUFDLENBQUM7UUFFRixhQUFRLEdBQUcsS0FBSyxFQUFLLEdBQVcsRUFBMEIsRUFBRTtZQUMxRCxNQUFNLEtBQUssR0FBRyxNQUFNLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztZQUVoRSxJQUFJLENBQUMsS0FBSyxFQUFFO2dCQUNWLE9BQU8sU0FBUyxDQUFDO2FBQ2xCO1lBRUQsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBTSxDQUFDO1FBQ2hDLENBQUMsQ0FBQztRQUVGLGFBQVEsR0FBRyxLQUFLLEVBQUUsR0FBVyxFQUFvQixFQUFFO1lBQ2pELE1BQU0sS0FBSyxHQUFHLE1BQU0sSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBRW5FLE9BQU8sQ0FBQyxDQUFDLEtBQUssQ0FBQztRQUNqQixDQUFDLENBQUM7UUFFRixnQkFBVyxHQUFHLEtBQUssRUFBRSxHQUFXLEVBQUUsRUFBRTtZQUNsQyxNQUFNLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUNwRCxDQUFDLENBQUM7UUF2Q0EsSUFBSSxDQUFDLFdBQVcsR0FBRyxlQUFLLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDdEMsQ0FBQztJQUVELFdBQVcsQ0FBQyxHQUFXO1FBQ3JCLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsU0FBUyxJQUFJLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUM7SUFDM0QsQ0FBQztDQW1DRjtBQTVDRCxnQ0E0Q0M7QUFFRCx1QkFBdUI7QUFDaEIsTUFBTSxXQUFXLEdBQUcsS0FBSyxJQUFJLEVBQUU7SUFDcEMsbUJBQVcsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUN2Qix5QkFBaUIsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUU3QixJQUFJLGVBQUssQ0FBQyxRQUFRLEVBQUUsRUFBRTtRQUNwQixNQUFNLGVBQUssQ0FBQyxVQUFVLEVBQUUsQ0FBQztLQUMxQjtBQUNILENBQUMsQ0FBQztBQVBXLFFBQUEsV0FBVyxlQU90QiJ9
@@ -1,3 +1,3 @@
1
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>;
2
+ export declare const getClashNodes: (list: ReadonlyArray<PossibleNodeConfigType>, filter?: NodeFilterType | SortedNodeNameFilterType) => ReadonlyArray<any>;
3
+ export declare const getClashNodeNames: (list: ReadonlyArray<SimpleNodeConfig>, filter?: NodeNameFilterType | SortedNodeNameFilterType, existingProxies?: ReadonlyArray<string>) => ReadonlyArray<string>;
@@ -0,0 +1,2 @@
1
+ import CommonBin from 'common-bin';
2
+ export declare const defineGlobalOptions: (yargs: CommonBin['yargs']) => void;
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.defineGlobalOptions = void 0;
4
+ const defineGlobalOptions = (yargs) => {
5
+ yargs.options({
6
+ c: {
7
+ alias: 'config',
8
+ default: './surgio.conf.js',
9
+ description: '配置文件',
10
+ },
11
+ V: {
12
+ alias: 'verbose',
13
+ demandOption: false,
14
+ describe: '打印调试日志',
15
+ type: 'boolean',
16
+ },
17
+ });
18
+ yargs.group(['help', 'version', 'config', 'verbose'], 'Global Options:');
19
+ // 禁用 yargs 内部生成的 help 信息,似乎和 common-bin 的 load 有冲突
20
+ yargs.help(false);
21
+ };
22
+ exports.defineGlobalOptions = defineGlobalOptions;
23
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbWFuZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL2xpYi91dGlscy9jb21tYW5kLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUVPLE1BQU0sbUJBQW1CLEdBQUcsQ0FBQyxLQUF5QixFQUFRLEVBQUU7SUFDckUsS0FBSyxDQUFDLE9BQU8sQ0FBQztRQUNaLENBQUMsRUFBRTtZQUNELEtBQUssRUFBRSxRQUFRO1lBQ2YsT0FBTyxFQUFFLGtCQUFrQjtZQUMzQixXQUFXLEVBQUUsTUFBTTtTQUNwQjtRQUNELENBQUMsRUFBRTtZQUNELEtBQUssRUFBRSxTQUFTO1lBQ2hCLFlBQVksRUFBRSxLQUFLO1lBQ25CLFFBQVEsRUFBRSxRQUFRO1lBQ2xCLElBQUksRUFBRSxTQUFTO1NBQ2hCO0tBQ0YsQ0FBQyxDQUFDO0lBRUgsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLFNBQVMsQ0FBQyxFQUFFLGlCQUFpQixDQUFDLENBQUM7SUFFekUsbURBQW1EO0lBQ25ELEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDcEIsQ0FBQyxDQUFDO0FBbkJXLFFBQUEsbUJBQW1CLHVCQW1COUIifQ==
@@ -1,4 +1,6 @@
1
1
  import { CommandConfig } from '../types';
2
- export declare const loadConfig: (cwd: string, configPath: string, override?: Partial<CommandConfig> | undefined) => CommandConfig;
2
+ export declare const loadConfig: (cwd: string, configPath: string, override?: Partial<CommandConfig>) => CommandConfig;
3
+ export declare const getConfig: () => CommandConfig;
4
+ export declare const setConfig: <T extends keyof CommandConfig>(key: T, value: CommandConfig[T]) => CommandConfig;
3
5
  export declare const normalizeConfig: (cwd: string, userConfig: Partial<CommandConfig>) => CommandConfig;
4
6
  export declare const validateConfig: (userConfig: Partial<CommandConfig>) => void;