surgio 2.25.3 → 3.0.0-alpha.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (182) hide show
  1. package/bin/dev +17 -0
  2. package/bin/dev.cmd +3 -0
  3. package/bin/run +8 -0
  4. package/bin/run.cmd +3 -0
  5. package/build/base-command.d.ts +18 -0
  6. package/build/base-command.js +74 -0
  7. package/build/commands/check.d.ts +10 -0
  8. package/build/commands/check.js +88 -0
  9. package/build/commands/clean-cache.d.ts +6 -0
  10. package/build/commands/clean-cache.js +29 -0
  11. package/build/commands/doctor.d.ts +6 -0
  12. package/build/commands/doctor.js +21 -0
  13. package/build/commands/generate.d.ts +7 -0
  14. package/build/commands/generate.js +93 -0
  15. package/build/commands/lint.d.ts +6 -0
  16. package/build/commands/lint.js +36 -0
  17. package/build/commands/new.d.ts +6 -0
  18. package/build/commands/new.js +36 -0
  19. package/build/commands/subscriptions.d.ts +7 -0
  20. package/build/commands/subscriptions.js +96 -0
  21. package/build/commands/upload.d.ts +6 -0
  22. package/build/commands/upload.js +87 -0
  23. package/build/config.d.ts +6 -0
  24. package/build/config.js +151 -0
  25. package/build/constant/constant.d.ts +17 -16
  26. package/build/constant/constant.js +3 -2
  27. package/build/constant/env.js +1 -1
  28. package/build/constant/error.js +1 -1
  29. package/build/constant/index.js +1 -1
  30. package/build/generate.d.ts +0 -1
  31. package/build/generate.js +3 -65
  32. package/build/generator/artifact.d.ts +299 -64
  33. package/build/generator/artifact.js +90 -92
  34. package/build/generator/index.d.ts +2 -0
  35. package/build/generator/index.js +19 -0
  36. package/build/generator/template.js +2 -6
  37. package/build/hooks/init.d.ts +3 -0
  38. package/build/hooks/init.js +32 -0
  39. package/build/index.d.ts +55 -53
  40. package/build/index.js +13 -51
  41. package/build/internal.d.ts +4 -0
  42. package/build/internal.js +21 -0
  43. package/build/misc/deprecation.d.ts +1 -6
  44. package/build/misc/deprecation.js +1 -8
  45. package/build/misc/flag_cn.js +1 -1
  46. package/build/provider/BlackSSLProvider.d.ts +4 -3
  47. package/build/provider/BlackSSLProvider.js +24 -16
  48. package/build/provider/ClashProvider.d.ts +7 -10
  49. package/build/provider/ClashProvider.js +165 -76
  50. package/build/provider/CustomProvider.d.ts +4 -3
  51. package/build/provider/CustomProvider.js +81 -50
  52. package/build/provider/Provider.d.ts +9 -22
  53. package/build/provider/Provider.js +31 -69
  54. package/build/provider/ShadowsocksJsonSubscribeProvider.d.ts +4 -5
  55. package/build/provider/ShadowsocksJsonSubscribeProvider.js +27 -21
  56. package/build/provider/ShadowsocksSubscribeProvider.d.ts +5 -8
  57. package/build/provider/ShadowsocksSubscribeProvider.js +30 -27
  58. package/build/provider/ShadowsocksrSubscribeProvider.d.ts +5 -8
  59. package/build/provider/ShadowsocksrSubscribeProvider.js +30 -23
  60. package/build/provider/SsdProvider.d.ts +5 -8
  61. package/build/provider/SsdProvider.js +56 -39
  62. package/build/provider/TrojanProvider.d.ts +5 -8
  63. package/build/provider/TrojanProvider.js +37 -30
  64. package/build/provider/V2rayNSubscribeProvider.d.ts +4 -5
  65. package/build/provider/V2rayNSubscribeProvider.js +61 -33
  66. package/build/provider/index.d.ts +16 -2
  67. package/build/provider/index.js +12 -5
  68. package/build/provider/types.d.ts +10 -1
  69. package/build/provider/types.js +1 -1
  70. package/build/redis.js +1 -1
  71. package/build/types.d.ts +45 -236
  72. package/build/types.js +2 -1
  73. package/build/utils/cache.js +29 -27
  74. package/build/utils/clash.d.ts +204 -3
  75. package/build/utils/clash.js +247 -110
  76. package/build/utils/configurables.d.ts +71 -0
  77. package/build/utils/configurables.js +8 -0
  78. package/build/utils/constant.js +1 -1
  79. package/build/utils/dns.js +1 -1
  80. package/build/utils/doctor.d.ts +2 -0
  81. package/build/utils/doctor.js +38 -0
  82. package/build/utils/env-flag.js +2 -2
  83. package/build/utils/error-helper.d.ts +2 -2
  84. package/build/utils/error-helper.js +30 -16
  85. package/build/utils/filter.d.ts +46 -43
  86. package/build/utils/filter.js +51 -30
  87. package/build/utils/flag.js +1 -1
  88. package/build/utils/http-client.js +38 -5
  89. package/build/utils/index.d.ts +13 -21
  90. package/build/utils/index.js +98 -117
  91. package/build/utils/linter.js +5 -2
  92. package/build/utils/loon.d.ts +3 -2
  93. package/build/utils/loon.js +67 -5
  94. package/build/utils/quantumult.d.ts +3 -3
  95. package/build/utils/quantumult.js +190 -258
  96. package/build/utils/relayable-url.js +1 -1
  97. package/build/utils/remote-snippet.js +3 -4
  98. package/build/utils/ss.js +27 -17
  99. package/build/utils/ssr.js +3 -4
  100. package/build/utils/subscription.js +7 -7
  101. package/build/utils/surfboard.d.ts +3 -2
  102. package/build/utils/surfboard.js +142 -126
  103. package/build/utils/surge.d.ts +4 -2
  104. package/build/utils/surge.js +328 -300
  105. package/build/utils/time.d.ts +1 -0
  106. package/build/utils/time.js +6 -0
  107. package/build/utils/tmp-helper.js +8 -1
  108. package/build/utils/trojan.js +19 -11
  109. package/build/utils/v2ray.js +2 -2
  110. package/build/validators/artifact.d.ts +35 -0
  111. package/build/validators/artifact.js +17 -0
  112. package/build/validators/common.d.ts +121 -0
  113. package/build/validators/common.js +52 -0
  114. package/build/validators/filter.d.ts +10 -0
  115. package/build/validators/filter.js +15 -0
  116. package/build/validators/hooks.d.ts +7 -0
  117. package/build/validators/hooks.js +8 -0
  118. package/build/validators/http.d.ts +137 -0
  119. package/build/validators/http.js +19 -0
  120. package/build/validators/index.d.ts +15 -0
  121. package/build/validators/index.js +32 -0
  122. package/build/validators/provider.d.ts +109 -0
  123. package/build/validators/provider.js +41 -0
  124. package/build/validators/shadowsocks.d.ts +86 -0
  125. package/build/validators/shadowsocks.js +29 -0
  126. package/build/validators/shadowsocksr.d.ts +77 -0
  127. package/build/validators/shadowsocksr.js +19 -0
  128. package/build/validators/snell.d.ts +71 -0
  129. package/build/validators/snell.js +20 -0
  130. package/build/validators/socks5.d.ts +77 -0
  131. package/build/validators/socks5.js +19 -0
  132. package/build/validators/surgio-config.d.ts +307 -0
  133. package/build/validators/surgio-config.js +95 -0
  134. package/build/validators/trojan.d.ts +86 -0
  135. package/build/validators/trojan.js +15 -0
  136. package/build/validators/tuic.d.ts +301 -0
  137. package/build/validators/tuic.js +21 -0
  138. package/build/validators/vmess.d.ts +92 -0
  139. package/build/validators/vmess.js +29 -0
  140. package/build/validators/wireguard.d.ts +123 -0
  141. package/build/validators/wireguard.js +26 -0
  142. package/config.d.ts +1 -0
  143. package/config.js +1 -0
  144. package/constant.d.ts +1 -0
  145. package/constant.js +1 -0
  146. package/generator.d.ts +1 -0
  147. package/generator.js +1 -0
  148. package/hygen-template/artifact/new/index.js +15 -15
  149. package/hygen-template/provider/new/index.js +8 -7
  150. package/hygen-template/template/new/index.js +3 -3
  151. package/index.d.ts +1 -0
  152. package/index.js +1 -0
  153. package/internal.d.ts +1 -0
  154. package/internal.js +1 -0
  155. package/package.json +112 -75
  156. package/provider.d.ts +1 -0
  157. package/provider.js +1 -0
  158. package/utils.d.ts +1 -0
  159. package/utils.js +1 -0
  160. package/bin/surgio.js +0 -8
  161. package/build/command/check.d.ts +0 -9
  162. package/build/command/check.js +0 -79
  163. package/build/command/clean-cache.d.ts +0 -8
  164. package/build/command/clean-cache.js +0 -43
  165. package/build/command/doctor.d.ts +0 -9
  166. package/build/command/doctor.js +0 -63
  167. package/build/command/generate.d.ts +0 -8
  168. package/build/command/generate.js +0 -64
  169. package/build/command/lint.d.ts +0 -7
  170. package/build/command/lint.js +0 -42
  171. package/build/command/new.d.ts +0 -7
  172. package/build/command/new.js +0 -44
  173. package/build/command/subscriptions.d.ts +0 -10
  174. package/build/command/subscriptions.js +0 -87
  175. package/build/command/upload.d.ts +0 -9
  176. package/build/command/upload.js +0 -101
  177. package/build/utils/command.d.ts +0 -2
  178. package/build/utils/command.js +0 -23
  179. package/build/utils/config.d.ts +0 -6
  180. package/build/utils/config.js +0 -245
  181. package/build/utils/patch-proxy.d.ts +0 -1
  182. package/build/utils/patch-proxy.js +0 -19
@@ -4,10 +4,10 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.parseSsdConfig = exports.getSsdSubscription = 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"));
10
9
  const bytes_1 = __importDefault(require("bytes"));
10
+ const zod_1 = require("zod");
11
11
  const types_1 = require("../types");
12
12
  const utils_1 = require("../utils");
13
13
  const relayable_url_1 = __importDefault(require("../utils/relayable-url"));
@@ -16,40 +16,46 @@ const logger = (0, logger_1.createLogger)({
16
16
  service: 'surgio:SsdProvider',
17
17
  });
18
18
  class SsdProvider extends Provider_1.default {
19
+ #originalUrl;
20
+ udpRelay;
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 result.error;
33
31
  }
34
- this._url = config.url;
35
- this.udpRelay = config.udpRelay;
32
+ this.#originalUrl = result.data.url;
33
+ this.udpRelay = result.data.udpRelay;
36
34
  this.supportGetSubscriptionUserInfo = true;
37
35
  }
38
36
  // istanbul ignore next
39
37
  get url() {
40
- return (0, relayable_url_1.default)(this._url, this.relayUrl);
38
+ return (0, relayable_url_1.default)(this.#originalUrl, this.config.relayUrl);
41
39
  }
42
- async getSubscriptionUserInfo({ requestUserAgent, } = {}) {
43
- const { subscriptionUserinfo } = await (0, exports.getSsdSubscription)(this.url, this.udpRelay, requestUserAgent || this.requestUserAgent);
40
+ getSubscriptionUserInfo = async (params = {}) => {
41
+ const requestUserAgent = this.determineRequestUserAgent(params.requestUserAgent);
42
+ const { subscriptionUserinfo } = await (0, exports.getSsdSubscription)(this.url, this.udpRelay, requestUserAgent);
44
43
  if (subscriptionUserinfo) {
45
44
  return subscriptionUserinfo;
46
45
  }
47
- return void 0;
48
- }
49
- async getNodeList({ requestUserAgent, } = {}) {
50
- const { nodeList } = await (0, exports.getSsdSubscription)(this.url, this.udpRelay, requestUserAgent || this.requestUserAgent);
46
+ return undefined;
47
+ };
48
+ getNodeList = async (params = {}) => {
49
+ const requestUserAgent = this.determineRequestUserAgent(params.requestUserAgent);
50
+ const { nodeList } = await (0, exports.getSsdSubscription)(this.url, this.udpRelay, requestUserAgent);
51
+ if (this.config.hooks?.afterFetchNodeList) {
52
+ const newList = await this.config.hooks.afterFetchNodeList(nodeList, params);
53
+ if (newList) {
54
+ return newList;
55
+ }
56
+ }
51
57
  return nodeList;
52
- }
58
+ };
53
59
  }
54
60
  exports.default = SsdProvider;
55
61
  // 协议定义:https://github.com/TheCGDF/SSD-Windows/wiki/HTTP%E8%AE%A2%E9%98%85%E5%8D%8F%E5%AE%9A
@@ -84,35 +90,46 @@ const getSsdSubscription = async (url, udpRelay, requestUserAgent) => {
84
90
  };
85
91
  exports.getSsdSubscription = getSsdSubscription;
86
92
  const parseSsdConfig = (globalConfig, server, udpRelay) => {
87
- var _a, _b, _c, _d, _e, _f, _g;
88
93
  const { airport, port, encryption, password } = globalConfig;
89
- const plugin = (_a = server.plugin) !== null && _a !== void 0 ? _a : globalConfig.plugin;
90
- const pluginOptsString = (_b = server.plugin_options) !== null && _b !== void 0 ? _b : globalConfig.plugin_options;
94
+ const plugin = server.plugin ?? globalConfig.plugin;
95
+ const pluginOptsString = server.plugin_options ?? globalConfig.plugin_options;
91
96
  const pluginOpts = pluginOptsString
92
97
  ? (0, utils_1.decodeStringList)(pluginOptsString.split(';'))
93
98
  : {};
94
99
  // istanbul ignore next
95
100
  if (plugin && !['simple-obfs', 'v2ray-plugin'].includes(plugin)) {
96
101
  logger.warn(`不支持从 SSD 订阅中读取 ${plugin} 类型的 Shadowsocks 节点,节点 ${server.remarks} 会被省略`);
97
- return void 0;
102
+ return undefined;
98
103
  }
99
104
  // istanbul ignore next
100
105
  if (plugin === 'v2ray-plugin' &&
101
106
  pluginOpts.mode.toLowerCase() === 'quic') {
102
107
  logger.warn(`不支持从 SSD 订阅中读取 QUIC 模式的 Shadowsocks 节点,节点 ${server.remarks} 会被省略`);
103
- return void 0;
108
+ return undefined;
104
109
  }
105
- return Object.assign(Object.assign({ type: types_1.NodeTypeEnum.Shadowsocks, nodeName: (_c = server.remarks) !== null && _c !== void 0 ? _c : `${airport} ${server.server}:${(_d = server.port) !== null && _d !== void 0 ? _d : port}`, hostname: server.server, port: (_e = server.port) !== null && _e !== void 0 ? _e : port, method: (_f = server.encryption) !== null && _f !== void 0 ? _f : encryption, password: (_g = server.password) !== null && _g !== void 0 ? _g : password, 'udp-relay': udpRelay === true }, (plugin && plugin === 'simple-obfs'
106
- ? {
107
- obfs: pluginOpts.obfs,
108
- 'obfs-host': pluginOpts['obfs-host'] || 'www.bing.com',
109
- }
110
- : null)), (plugin && plugin === 'v2ray-plugin'
111
- ? {
112
- obfs: pluginOpts.tls ? 'wss' : 'ws',
113
- 'obfs-host': pluginOpts.host,
114
- }
115
- : null));
110
+ return {
111
+ type: types_1.NodeTypeEnum.Shadowsocks,
112
+ nodeName: server.remarks ?? `${airport} ${server.server}:${server.port ?? port}`,
113
+ hostname: server.server,
114
+ port: server.port ?? port,
115
+ method: server.encryption ?? encryption,
116
+ password: server.password ?? password,
117
+ udpRelay: udpRelay === true,
118
+ // obfs-local
119
+ ...(plugin && plugin === 'simple-obfs'
120
+ ? {
121
+ obfs: pluginOpts.obfs,
122
+ obfsHost: pluginOpts['obfs-host'] || 'www.bing.com',
123
+ }
124
+ : null),
125
+ // v2ray-plugin
126
+ ...(plugin && plugin === 'v2ray-plugin'
127
+ ? {
128
+ obfs: pluginOpts.tls ? 'wss' : 'ws',
129
+ obfsHost: pluginOpts.host,
130
+ }
131
+ : null),
132
+ };
116
133
  };
117
134
  exports.parseSsdConfig = parseSsdConfig;
118
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU3NkUHJvdmlkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9saWIvcHJvdmlkZXIvU3NkUHJvdmlkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsOENBQXNCO0FBQ3RCLDJDQUE4QztBQUM5QyxvREFBNEI7QUFDNUIsa0RBQTBCO0FBRTFCLG9DQUtrQjtBQUNsQixvQ0FBd0Q7QUFDeEQsMkVBQWtEO0FBQ2xELDBEQUFrQztBQUVsQyxNQUFNLE1BQU0sR0FBRyxJQUFBLHFCQUFZLEVBQUM7SUFDMUIsT0FBTyxFQUFFLG9CQUFvQjtDQUM5QixDQUFDLENBQUM7QUFFSCxNQUFxQixXQUFZLFNBQVEsa0JBQVE7SUFJL0MsWUFBWSxJQUFZLEVBQUUsTUFBeUI7UUFDakQsS0FBSyxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztRQUVwQixNQUFNLE1BQU0sR0FBRyxhQUFHLENBQUMsTUFBTSxDQUFDO1lBQ3hCLEdBQUcsRUFBRSxhQUFHLENBQUMsTUFBTSxFQUFFO2lCQUNkLEdBQUcsQ0FBQztnQkFDSCxNQUFNLEVBQUUsQ0FBQyxRQUFRLENBQUM7YUFDbkIsQ0FBQztpQkFDRCxRQUFRLEVBQUU7WUFDYixRQUFRLEVBQUUsYUFBRyxDQUFDLE9BQU8sRUFBRSxDQUFDLE1BQU0sRUFBRTtTQUNqQyxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUM7UUFFYixNQUFNLEVBQUUsS0FBSyxFQUFFLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUUxQyx1QkFBdUI7UUFDdkIsSUFBSSxLQUFLLEVBQUU7WUFDVCxNQUFNLEtBQUssQ0FBQztTQUNiO1FBRUQsSUFBSSxDQUFDLElBQUksR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxRQUFRLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQztRQUNoQyxJQUFJLENBQUMsOEJBQThCLEdBQUcsSUFBSSxDQUFDO0lBQzdDLENBQUM7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
135
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU3NkUHJvdmlkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcHJvdmlkZXIvU3NkUHJvdmlkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsMkNBQTZDO0FBQzdDLG9EQUEyQjtBQUMzQixrREFBeUI7QUFDekIsNkJBQXVCO0FBRXZCLG9DQUtpQjtBQUNqQixvQ0FBdUQ7QUFDdkQsMkVBQWlEO0FBQ2pELDBEQUFpQztBQUdqQyxNQUFNLE1BQU0sR0FBRyxJQUFBLHFCQUFZLEVBQUM7SUFDMUIsT0FBTyxFQUFFLG9CQUFvQjtDQUM5QixDQUFDLENBQUE7QUFFRixNQUFxQixXQUFZLFNBQVEsa0JBQVE7SUFDdEMsWUFBWSxDQUFRO0lBQ2IsUUFBUSxDQUFVO0lBRWxDLFlBQVksSUFBWSxFQUFFLE1BQXlCO1FBQ2pELEtBQUssQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUE7UUFFbkIsTUFBTSxNQUFNLEdBQUcsT0FBQyxDQUFDLE1BQU0sQ0FBQztZQUN0QixHQUFHLEVBQUUsT0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsRUFBRTtZQUNyQixRQUFRLEVBQUUsT0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDLFFBQVEsRUFBRTtTQUNqQyxDQUFDLENBQUE7UUFDRixNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFBO1FBRXZDLHVCQUF1QjtRQUN2QixJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRTtZQUNuQixNQUFNLE1BQU0sQ0FBQyxLQUFLLENBQUE7U0FDbkI7UUFFRCxJQUFJLENBQUMsWUFBWSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFBO1FBQ25DLElBQUksQ0FBQyxRQUFRLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUE7UUFDcEMsSUFBSSxDQUFDLDhCQUE4QixHQUFHLElBQUksQ0FBQTtJQUM1QyxDQUFDO0lBRUQs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
@@ -1,17 +1,14 @@
1
1
  import { SubscriptionUserinfo, TrojanNodeConfig, TrojanProviderConfig } from '../types';
2
2
  import Provider from './Provider';
3
+ import { GetNodeListFunction, GetSubscriptionUserInfoFunction } from './types';
3
4
  export default class TrojanProvider extends Provider {
4
- readonly _url: string;
5
+ #private;
5
6
  readonly udpRelay?: boolean;
6
7
  readonly tls13?: boolean;
7
8
  constructor(name: string, config: TrojanProviderConfig);
8
9
  get url(): string;
9
- getSubscriptionUserInfo({ requestUserAgent, }?: {
10
- requestUserAgent?: string;
11
- }): Promise<SubscriptionUserinfo | undefined>;
12
- getNodeList({ requestUserAgent, }?: {
13
- requestUserAgent?: string;
14
- }): Promise<ReadonlyArray<TrojanNodeConfig>>;
10
+ getSubscriptionUserInfo: GetSubscriptionUserInfoFunction;
11
+ getNodeList: GetNodeListFunction;
15
12
  }
16
13
  /**
17
14
  * @see https://github.com/trojan-gfw/trojan-url/blob/master/trojan-url.py
@@ -22,6 +19,6 @@ export declare const getTrojanSubscription: ({ url, udpRelay, tls13, requestUser
22
19
  tls13?: boolean | undefined;
23
20
  requestUserAgent?: string | undefined;
24
21
  }) => Promise<{
25
- readonly nodeList: ReadonlyArray<TrojanNodeConfig>;
22
+ readonly nodeList: Array<TrojanNodeConfig>;
26
23
  readonly subscriptionUserinfo?: SubscriptionUserinfo | undefined;
27
24
  }>;
@@ -4,63 +4,66 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.getTrojanSubscription = 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 trojan_1 = require("../utils/trojan");
13
12
  const Provider_1 = __importDefault(require("./Provider"));
14
- const logger = (0, logger_1.createLogger)({
15
- service: 'surgio:TrojanProvider',
16
- });
17
13
  class TrojanProvider extends Provider_1.default {
14
+ #originalUrl;
15
+ udpRelay;
16
+ tls13;
18
17
  constructor(name, config) {
19
18
  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.bool().strict(),
27
- tls13: joi_1.default.bool().strict(),
28
- }).unknown();
29
- const { error } = schema.validate(config);
19
+ const schema = zod_1.z.object({
20
+ url: zod_1.z.string().url(),
21
+ udpRelay: zod_1.z.boolean().optional(),
22
+ tls13: zod_1.z.boolean().optional(),
23
+ });
24
+ const result = schema.safeParse(config);
30
25
  // istanbul ignore next
31
- if (error) {
32
- throw error;
26
+ if (!result.success) {
27
+ throw result.error;
33
28
  }
34
- this._url = config.url;
35
- this.udpRelay = config.udpRelay;
36
- this.tls13 = config.tls13;
29
+ this.#originalUrl = result.data.url;
30
+ this.udpRelay = result.data.udpRelay;
31
+ this.tls13 = result.data.tls13;
37
32
  this.supportGetSubscriptionUserInfo = true;
38
33
  }
39
34
  // istanbul ignore next
40
35
  get url() {
41
- return (0, relayable_url_1.default)(this._url, this.relayUrl);
36
+ return (0, relayable_url_1.default)(this.#originalUrl, this.config.relayUrl);
42
37
  }
43
- async getSubscriptionUserInfo({ requestUserAgent, } = {}) {
38
+ getSubscriptionUserInfo = async (params = {}) => {
39
+ const requestUserAgent = this.determineRequestUserAgent(params.requestUserAgent);
44
40
  const { subscriptionUserinfo } = await (0, exports.getTrojanSubscription)({
45
41
  url: this.url,
46
42
  udpRelay: this.udpRelay,
47
43
  tls13: this.tls13,
48
- requestUserAgent: requestUserAgent || this.requestUserAgent,
44
+ requestUserAgent: requestUserAgent || this.config.requestUserAgent,
49
45
  });
50
46
  if (subscriptionUserinfo) {
51
47
  return subscriptionUserinfo;
52
48
  }
53
- return void 0;
54
- }
55
- async getNodeList({ requestUserAgent, } = {}) {
49
+ return undefined;
50
+ };
51
+ getNodeList = async (params = {}) => {
52
+ const requestUserAgent = this.determineRequestUserAgent(params.requestUserAgent);
56
53
  const { nodeList } = await (0, exports.getTrojanSubscription)({
57
54
  url: this.url,
58
55
  udpRelay: this.udpRelay,
59
56
  tls13: this.tls13,
60
- requestUserAgent: requestUserAgent || this.requestUserAgent,
57
+ requestUserAgent: requestUserAgent,
61
58
  });
59
+ if (this.config.hooks?.afterFetchNodeList) {
60
+ const newList = await this.config.hooks.afterFetchNodeList(nodeList, params);
61
+ if (newList) {
62
+ return newList;
63
+ }
64
+ }
62
65
  return nodeList;
63
- }
66
+ };
64
67
  }
65
68
  exports.default = TrojanProvider;
66
69
  /**
@@ -77,7 +80,11 @@ const getTrojanSubscription = async ({ url, udpRelay, tls13, requestUserAgent, }
77
80
  .filter((item) => !!item && item.startsWith('trojan://'))
78
81
  .map((item) => {
79
82
  const nodeConfig = (0, trojan_1.parseTrojanUri)(item);
80
- return Object.assign(Object.assign({}, nodeConfig), { 'udp-relay': udpRelay, tls13 });
83
+ return {
84
+ ...nodeConfig,
85
+ udpRelay,
86
+ tls13,
87
+ };
81
88
  });
82
89
  return {
83
90
  nodeList,
@@ -85,4 +92,4 @@ const getTrojanSubscription = async ({ url, udpRelay, tls13, requestUserAgent, }
85
92
  };
86
93
  };
87
94
  exports.getTrojanSubscription = getTrojanSubscription;
88
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVHJvamFuUHJvdmlkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9saWIvcHJvdmlkZXIvVHJvamFuUHJvdmlkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsOENBQXNCO0FBQ3RCLG9EQUE0QjtBQUM1QiwyQ0FBOEM7QUFPOUMsb0NBQXNDO0FBQ3RDLDJFQUFrRDtBQUNsRCw0Q0FBaUQ7QUFDakQsMERBQWtDO0FBRWxDLE1BQU0sTUFBTSxHQUFHLElBQUEscUJBQVksRUFBQztJQUMxQixPQUFPLEVBQUUsdUJBQXVCO0NBQ2pDLENBQUMsQ0FBQztBQUVILE1BQXFCLGNBQWUsU0FBUSxrQkFBUTtJQUtsRCxZQUFZLElBQVksRUFBRSxNQUE0QjtRQUNwRCxLQUFLLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBRXBCLE1BQU0sTUFBTSxHQUFHLGFBQUcsQ0FBQyxNQUFNLENBQUM7WUFDeEIsR0FBRyxFQUFFLGFBQUcsQ0FBQyxNQUFNLEVBQUU7aUJBQ2QsR0FBRyxDQUFDO2dCQUNILE1BQU0sRUFBRSxDQUFDLFFBQVEsQ0FBQzthQUNuQixDQUFDO2lCQUNELFFBQVEsRUFBRTtZQUNiLFFBQVEsRUFBRSxhQUFHLENBQUMsSUFBSSxFQUFFLENBQUMsTUFBTSxFQUFFO1lBQzdCLEtBQUssRUFBRSxhQUFHLENBQUMsSUFBSSxFQUFFLENBQUMsTUFBTSxFQUFFO1NBQzNCLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUViLE1BQU0sRUFBRSxLQUFLLEVBQUUsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBRTFDLHVCQUF1QjtRQUN2QixJQUFJLEtBQUssRUFBRTtZQUNULE1BQU0sS0FBSyxDQUFDO1NBQ2I7UUFFRCxJQUFJLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUM7UUFDdkIsSUFBSSxDQUFDLFFBQVEsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDO1FBQ2hD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
95
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVHJvamFuUHJvdmlkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcHJvdmlkZXIvVHJvamFuUHJvdmlkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsb0RBQTJCO0FBQzNCLDZCQUF1QjtBQU92QixvQ0FBcUM7QUFDckMsMkVBQWlEO0FBQ2pELDRDQUFnRDtBQUNoRCwwREFBaUM7QUFHakMsTUFBcUIsY0FBZSxTQUFRLGtCQUFRO0lBQ3pDLFlBQVksQ0FBUTtJQUNiLFFBQVEsQ0FBVTtJQUNsQixLQUFLLENBQVU7SUFFL0IsWUFBWSxJQUFZLEVBQUUsTUFBNEI7UUFDcEQsS0FBSyxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQTtRQUVuQixNQUFNLE1BQU0sR0FBRyxPQUFDLENBQUMsTUFBTSxDQUFDO1lBQ3RCLEdBQUcsRUFBRSxPQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxFQUFFO1lBQ3JCLFFBQVEsRUFBRSxPQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsUUFBUSxFQUFFO1lBQ2hDLEtBQUssRUFBRSxPQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsUUFBUSxFQUFFO1NBQzlCLENBQUMsQ0FBQTtRQUNGLE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUE7UUFFdkMsdUJBQXVCO1FBQ3ZCLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFO1lBQ25CLE1BQU0sTUFBTSxDQUFDLEtBQUssQ0FBQTtTQUNuQjtRQUVELElBQUksQ0FBQyxZQUFZLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUE7UUFDbkMsSUFBSSxDQUFDLFFBQVEsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQTtRQUNwQyxJQUFJLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFBO1FBQzlCLElBQUksQ0FBQyw4QkFBOEIsR0FB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
@@ -1,16 +1,15 @@
1
1
  import { ShadowsocksNodeConfig, V2rayNSubscribeProviderConfig, VmessNodeConfig } from '../types';
2
2
  import Provider from './Provider';
3
+ import { GetNodeListFunction } from './types';
3
4
  export default class V2rayNSubscribeProvider extends Provider {
5
+ #private;
4
6
  readonly compatibleMode?: boolean;
5
7
  readonly skipCertVerify?: boolean;
6
8
  readonly udpRelay?: boolean;
7
9
  readonly tls13?: boolean;
8
- private readonly _url;
9
10
  constructor(name: string, config: V2rayNSubscribeProviderConfig);
10
11
  get url(): string;
11
- getNodeList({ requestUserAgent, }?: {
12
- requestUserAgent?: string;
13
- }): ReturnType<typeof getV2rayNSubscription>;
12
+ getNodeList: GetNodeListFunction;
14
13
  }
15
14
  /**
16
15
  * @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)
@@ -22,5 +21,5 @@ export declare const getV2rayNSubscription: ({ url, isCompatibleMode, skipCertVe
22
21
  udpRelay?: boolean | undefined;
23
22
  tls13?: boolean | undefined;
24
23
  requestUserAgent?: string | undefined;
25
- }) => Promise<ReadonlyArray<VmessNodeConfig | ShadowsocksNodeConfig>>;
24
+ }) => Promise<Array<VmessNodeConfig | ShadowsocksNodeConfig>>;
26
25
  export declare const parseJSONConfig: (json: string, isCompatibleMode: boolean | undefined, skipCertVerify?: boolean | undefined, udpRelay?: boolean | undefined, tls13?: boolean | undefined) => VmessNodeConfig | undefined;
@@ -4,53 +4,62 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.parseJSONConfig = exports.getV2rayNSubscription = 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 types_1 = require("../types");
11
11
  const utils_1 = require("../utils");
12
12
  const relayable_url_1 = __importDefault(require("../utils/relayable-url"));
13
13
  const ss_1 = require("../utils/ss");
14
14
  const Provider_1 = __importDefault(require("./Provider"));
15
15
  class V2rayNSubscribeProvider extends Provider_1.default {
16
+ compatibleMode;
17
+ skipCertVerify;
18
+ udpRelay;
19
+ tls13;
20
+ #originalUrl;
16
21
  constructor(name, config) {
17
22
  super(name, config);
18
- const schema = joi_1.default.object({
19
- url: joi_1.default.string()
20
- .uri({
21
- scheme: [/https?/],
22
- })
23
- .required(),
24
- udpRelay: joi_1.default.bool().strict(),
25
- tls13: joi_1.default.bool().strict(),
26
- compatibleMode: joi_1.default.bool().strict(),
27
- skipCertVerify: joi_1.default.bool().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
+ tls13: zod_1.z.boolean().optional(),
27
+ compatibleMode: zod_1.z.boolean().optional(),
28
+ skipCertVerify: zod_1.z.boolean().optional(),
29
+ });
30
+ const result = schema.safeParse(config);
30
31
  // istanbul ignore next
31
- if (error) {
32
- throw error;
32
+ if (!result.success) {
33
+ throw result.error;
33
34
  }
34
- this._url = config.url;
35
- this.compatibleMode = config.compatibleMode;
36
- this.skipCertVerify = config.skipCertVerify;
37
- this.tls13 = config.tls13;
38
- this.udpRelay = config.udpRelay;
35
+ this.#originalUrl = result.data.url;
36
+ this.compatibleMode = result.data.compatibleMode;
37
+ this.skipCertVerify = result.data.skipCertVerify;
38
+ this.tls13 = result.data.tls13;
39
+ this.udpRelay = result.data.udpRelay;
39
40
  }
40
41
  // istanbul ignore next
41
42
  get url() {
42
- return (0, relayable_url_1.default)(this._url, this.relayUrl);
43
+ return (0, relayable_url_1.default)(this.#originalUrl, this.config.relayUrl);
43
44
  }
44
- getNodeList({ requestUserAgent, } = {}) {
45
- return (0, exports.getV2rayNSubscription)({
45
+ getNodeList = async (params = {}) => {
46
+ const requestUserAgent = this.determineRequestUserAgent(params.requestUserAgent);
47
+ const nodeList = await (0, exports.getV2rayNSubscription)({
46
48
  url: this.url,
47
49
  skipCertVerify: this.skipCertVerify,
48
50
  tls13: this.tls13,
49
51
  udpRelay: this.udpRelay,
50
52
  isCompatibleMode: this.compatibleMode,
51
- requestUserAgent: requestUserAgent || this.requestUserAgent,
53
+ requestUserAgent: requestUserAgent,
52
54
  });
53
- }
55
+ if (this.config.hooks?.afterFetchNodeList) {
56
+ const newList = await this.config.hooks.afterFetchNodeList(nodeList, params);
57
+ if (newList) {
58
+ return newList;
59
+ }
60
+ }
61
+ return nodeList;
62
+ };
54
63
  }
55
64
  exports.default = V2rayNSubscribeProvider;
56
65
  /**
@@ -82,7 +91,12 @@ const getV2rayNSubscription = async ({ url, isCompatibleMode, skipCertVerify, tl
82
91
  return (0, exports.parseJSONConfig)((0, utils_1.fromBase64)(item.replace('vmess://', '')), isCompatibleMode, skipCertVerify, udpRelay, tls13);
83
92
  }
84
93
  if (item.startsWith('ss://')) {
85
- return Object.assign(Object.assign({}, (0, ss_1.parseSSUri)(item)), { 'udp-relay': udpRelay, skipCertVerify: skipCertVerify, tls13: tls13 });
94
+ return {
95
+ ...(0, ss_1.parseSSUri)(item),
96
+ udpRelay: udpRelay,
97
+ skipCertVerify: skipCertVerify,
98
+ tls13: tls13,
99
+ };
86
100
  }
87
101
  return undefined;
88
102
  })
@@ -102,12 +116,26 @@ const parseJSONConfig = (json, isCompatibleMode, skipCertVerify, udpRelay, tls13
102
116
  logger_1.logger.warn(`不支持读取 network 类型为 ${config.net} 的 Vmess 节点,节点 ${config.ps} 会被省略。`);
103
117
  return undefined;
104
118
  }
105
- return Object.assign({ nodeName: config.ps, type: types_1.NodeTypeEnum.Vmess, hostname: config.add, port: config.port, method: 'auto', uuid: config.id, alterId: config.aid || '0', network: config.net, tls: config.tls === 'tls', host: config.host, path: config.path || '/', 'udp-relay': udpRelay === true }, (config.tls === 'tls'
106
- ? {
107
- skipCertVerify: skipCertVerify !== null && skipCertVerify !== void 0 ? skipCertVerify : false,
108
- tls13: tls13 !== null && tls13 !== void 0 ? tls13 : false,
109
- }
110
- : null));
119
+ return {
120
+ nodeName: config.ps,
121
+ type: types_1.NodeTypeEnum.Vmess,
122
+ hostname: config.add,
123
+ port: config.port,
124
+ method: 'auto',
125
+ uuid: config.id,
126
+ alterId: config.aid || '0',
127
+ network: config.net,
128
+ tls: config.tls === 'tls',
129
+ host: config.host,
130
+ path: config.path || '/',
131
+ udpRelay: udpRelay === true,
132
+ ...(config.tls === 'tls'
133
+ ? {
134
+ skipCertVerify: skipCertVerify ?? false,
135
+ tls13: tls13 ?? false,
136
+ }
137
+ : null),
138
+ };
111
139
  };
112
140
  exports.parseJSONConfig = parseJSONConfig;
113
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVjJyYXlOU3Vic2NyaWJlUHJvdmlkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9saWIvcHJvdmlkZXIvVjJyYXlOU3Vic2NyaWJlUHJvdmlkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsOENBQXNCO0FBQ3RCLDJDQUF3QztBQUN4QyxvREFBNEI7QUFFNUIsb0NBS2tCO0FBQ2xCLG9DQUFzQztBQUN0QywyRUFBa0Q7QUFDbEQsb0NBQXlDO0FBQ3pDLDBEQUFrQztBQUVsQyxNQUFxQix1QkFBd0IsU0FBUSxrQkFBUTtJQVEzRCxZQUFZLElBQVksRUFBRSxNQUFxQztRQUM3RCxLQUFLLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBRXBCLE1BQU0sTUFBTSxHQUFHLGFBQUcsQ0FBQyxNQUFNLENBQUM7WUFDeEIsR0FBRyxFQUFFLGFBQUcsQ0FBQyxNQUFNLEVBQUU7aUJBQ2QsR0FBRyxDQUFDO2dCQUNILE1BQU0sRUFBRSxDQUFDLFFBQVEsQ0FBQzthQUNuQixDQUFDO2lCQUNELFFBQVEsRUFBRTtZQUNiLFFBQVEsRUFBRSxhQUFHLENBQUMsSUFBSSxFQUFFLENBQUMsTUFBTSxFQUFFO1lBQzdCLEtBQUssRUFBRSxhQUFHLENBQUMsSUFBSSxFQUFFLENBQUMsTUFBTSxFQUFFO1lBQzFCLGNBQWMsRUFBRSxhQUFHLENBQUMsSUFBSSxFQUFFLENBQUMsTUFBTSxFQUFFO1lBQ25DLGNBQWMsRUFBRSxhQUFHLENBQUMsSUFBSSxFQUFFLENBQUMsTUFBTSxFQUFFO1NBQ3BDLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUViLE1BQU0sRUFBRSxLQUFLLEVBQUUsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBRTFDLHVCQUF1QjtRQUN2QixJQUFJLEtBQUssRUFBRTtZQUNULE1BQU0sS0FBSyxDQUFDO1NBQ2I7UUFFRCxJQUFJLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUM7UUFDdkIsSUFBSSxDQUFDLGNBQWMsR0FBRyxNQUFNLENBQUMsY0FBYyxDQUFDO1FBQzVDLElBQUksQ0FBQyxjQUFjLEdBQUcsTUFBTSxDQUFDLGNBQWMsQ0FBQztRQUM1QyxJQUFJLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUM7UUFDMUIsSUFBSSxDQUFDLFFBQVEsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDO0lBQ2xDLENBQUM7SUFFRCx1QkFBdUI7SUFDdkIsSUFBVyxHQUFHO1FBQ1osT0FBTyxJQUFBLHVCQUFZLEVBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDaEQsQ0FBQztJQUVNLFdBQVcsQ0FBQyxFQUNqQixnQkFBZ0IsTUFDaUIsRUFBRTtRQUduQyxPQUFPLElBQUEsNkJBQXFCLEVBQUM7WUFDM0IsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHO1lBQ2IsY0FBYyxFQUFFLElBQUksQ0FBQyxjQUFjO1lBQ25DLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSztZQUNqQixRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVE7WUFDdkIsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLGNBQWM7WUFDckMsZ0JBQWdCLEVBQUUsZ0JBQWdCLElBQUksSUFBSSxDQUFDLGdCQUFnQjtTQUM1RCxDQUFDLENBQUM7SUFDTCxDQUFDO0NBQ0Y7QUF4REQsMENBd0RDO0FBRUQ7O0dBRUc7QUFDSSxNQUFNLHFCQUFxQixHQUFHLEtBQUssRUFBRSxFQUMxQyxHQUFHLEVBQ0gsZ0JBQWdCLEVBQ2hCLGNBQWMsRUFDZCxLQUFLLEVBQ0wsUUFBUSxFQUNSLGdCQUFnQixHQVFqQixFQUFtRSxFQUFFO0lBQ3BFLElBQUEsZ0JBQU0sRUFBQyxHQUFHLEVBQUUsYUFBYSxDQUFDLENBQUM7SUFFM0IsSUFBSSxnQkFBZ0IsRUFBRTtRQUNwQixlQUFNLENBQUMsSUFBSSxDQUFDLHVCQUF1QixDQUFDLENBQUM7S0FDdEM7SUFFRCxLQUFLLFVBQVUsdUJBQXVCO1FBR3BDLE1BQU0sUUFBUSxHQUFHLE1BQU0sa0JBQVEsQ0FBQyx3QkFBd0IsQ0FBQyxHQUFHLEVBQUU7WUFDNUQsZ0JBQWdCO1NBQ2pCLENBQUMsQ0FBQztRQUNILE1BQU0sWUFBWSxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUM7UUFFbkMsTUFBTSxVQUFVLEdBQUcsSUFBQSxrQkFBVSxFQUFDLFlBQVksQ0FBQzthQUN4QyxLQUFLLENBQUMsSUFBSSxDQUFDO2FBQ1gsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO2FBQ3hCLE1BQU0sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFO1lBQ2YsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBRXJFLElBQUksQ0FBQyxJQUFJLEVBQUU7Z0JBQ1QsZUFBTSxDQUFDLElBQUksQ0FDVCx1QkFBdUIsSUFBSSxXQUFXLENBQ3ZDLENBQUM7YUFDSDtZQUVELE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQyxDQUFDLENBQUM7UUFFTCxPQUFPLFVBQVU7YUFDZCxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQXVELEVBQUU7WUFDakUsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxFQUFFO2dCQUMvQixPQUFPLElBQUEsdUJBQWUsRUFDcEIsSUFBQSxrQkFBVSxFQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQ3hDLGdCQUFnQixFQUNoQixjQUFjLEVBQ2QsUUFBUSxFQUNSLEtBQUssQ0FDTixDQUFDO2FBQ0g7WUFFRCxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLEVBQUU7Z0JBQzVCLHVDQUNLLElBQUEsZUFBVSxFQUFDLElBQUksQ0FBQyxLQUNuQixXQUFXLEVBQUUsUUFBUSxFQUNyQixjQUFjLEVBQUUsY0FBYyxFQUM5QixLQUFLLEVBQUUsS0FBSyxJQUNaO2FBQ0g7WUFFRCxPQUFPLFNBQVMsQ0FBQztRQUNuQixDQUFDLENBQUM7YUFDRCxNQUFNLENBQ0wsQ0FBQyxJQUFJLEVBQW1ELEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUNsRSxDQUFDO0lBQ04sQ0FBQztJQUVELE9BQU8sTUFBTSx1QkFBdUIsRUFBRSxDQUFDO0FBQ3pDLENBQUMsQ0FBQztBQXpFVyxRQUFBLHFCQUFxQix5QkF5RWhDO0FBRUssTUFBTSxlQUFlLEdBQUcsQ0FDN0IsSUFBWSxFQUNaLGdCQUFxQyxFQUNyQyxjQUFvQyxFQUNwQyxRQUE4QixFQUM5QixLQUEyQixFQUNFLEVBQUU7SUFDL0IsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUVoQyx1QkFBdUI7SUFDdkIsSUFBSSxDQUFDLGdCQUFnQixJQUFJLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUU7UUFDOUQsTUFBTSxJQUFJLEtBQUssQ0FDYixPQUFPLE1BQU0sQ0FBQyxFQUFFLDBFQUEwRSxDQUMzRixDQUFDO0tBQ0g7SUFDRCx1QkFBdUI7SUFDdkIsSUFBSSxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFO1FBQzVDLGVBQU0sQ0FBQyxJQUFJLENBQ1QscUJBQXFCLE1BQU0sQ0FBQyxHQUFHLGtCQUFrQixNQUFNLENBQUMsRUFBRSxRQUFRLENBQ25FLENBQUM7UUFDRixPQUFPLFNBQVMsQ0FBQztLQUNsQjtJQUVELHVCQUNFLFFBQVEsRUFBRSxNQUFNLENBQUMsRUFBRSxFQUNuQixJQUFJLEVBQUUsb0JBQVksQ0FBQyxLQUFLLEVBQ3hCLFFBQVEsRUFBRSxNQUFNLENBQUMsR0FBRyxFQUNwQixJQUFJLEVBQUUsTUFBTSxDQUFDLElBQUksRUFDakIsTUFBTSxFQUFFLE1BQU0sRUFDZCxJQUFJLEVBQUUsTUFBTSxDQUFDLEVBQUUsRUFDZixPQUFPLEVBQUUsTUFBTSxDQUFDLEdBQUcsSUFBSSxHQUFHLEVBQzFCLE9BQU8sRUFBRSxNQUFNLENBQUMsR0FBRyxFQUNuQixHQUFHLEVBQUUsTUFBTSxDQUFDLEdBQUcsS0FBSyxLQUFLLEVBQ3pCLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSSxFQUNqQixJQUFJLEVBQUUsTUFBTSxDQUFDLElBQUksSUFBSSxHQUFHLEVBQ3hCLFdBQVcsRUFBRSxRQUFRLEtBQUssSUFBSSxJQUMzQixDQUFDLE1BQU0sQ0FBQyxHQUFHLEtBQUssS0FBSztRQUN0QixDQUFDLENBQUM7WUFDRSxjQUFjLEVBQUUsY0FBYyxhQUFkLGNBQWMsY0FBZCxjQUFjLEdBQUksS0FBSztZQUN2QyxLQUFLLEVBQUUsS0FBSyxhQUFMLEtBQUssY0FBTCxLQUFLLEdBQUksS0FBSztTQUN0QjtRQUNILENBQUMsQ0FBQyxJQUFJLENBQUMsRUFDVDtBQUNKLENBQUMsQ0FBQztBQTNDVyxRQUFBLGVBQWUsbUJBMkMxQiJ9
141
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVjJyYXlOU3Vic2NyaWJlUHJvdmlkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcHJvdmlkZXIvVjJyYXlOU3Vic2NyaWJlUHJvdmlkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsMkNBQXVDO0FBQ3ZDLG9EQUEyQjtBQUMzQiw2QkFBdUI7QUFFdkIsb0NBS2lCO0FBQ2pCLG9DQUFxQztBQUNyQywyRUFBaUQ7QUFDakQsb0NBQXdDO0FBQ3hDLDBEQUFpQztBQUdqQyxNQUFxQix1QkFBd0IsU0FBUSxrQkFBUTtJQUMzQyxjQUFjLENBQVU7SUFDeEIsY0FBYyxDQUFVO0lBQ3hCLFFBQVEsQ0FBVTtJQUNsQixLQUFLLENBQVU7SUFFdEIsWUFBWSxDQUFRO0lBRTdCLFlBQVksSUFBWSxFQUFFLE1BQXFDO1FBQzdELEtBQUssQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUE7UUFFbkIsTUFBTSxNQUFNLEdBQUcsT0FBQyxDQUFDLE1BQU0sQ0FBQztZQUN0QixHQUFHLEVBQUUsT0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsRUFBRTtZQUNyQixRQUFRLEVBQUUsT0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDLFFBQVEsRUFBRTtZQUNoQyxLQUFLLEVBQUUsT0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDLFFBQVEsRUFBRTtZQUM3QixjQUFjLEVBQUUsT0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDLFFBQVEsRUFBRTtZQUN0QyxjQUFjLEVBQUUsT0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDLFFBQVEsRUFBRTtTQUN2QyxDQUFDLENBQUE7UUFDRixNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFBO1FBRXZDLHVCQUF1QjtRQUN2QixJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRTtZQUNuQixNQUFNLE1BQU0sQ0FBQyxLQUFLLENBQUE7U0FDbkI7UUFFRCxJQUFJLENB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
@@ -1,3 +1,17 @@
1
+ import { PossibleProviderConfigType } from '../types';
2
+ import { defineProvider } from '../utils/configurables';
3
+ import BlackSSLProvider from './BlackSSLProvider';
4
+ import ClashProvider from './ClashProvider';
5
+ import CustomProvider from './CustomProvider';
6
+ import ShadowsocksJsonSubscribeProvider from './ShadowsocksJsonSubscribeProvider';
7
+ import ShadowsocksrSubscribeProvider from './ShadowsocksrSubscribeProvider';
8
+ import ShadowsocksSubscribeProvider from './ShadowsocksSubscribeProvider';
9
+ import SsdProvider from './SsdProvider';
10
+ import TrojanProvider from './TrojanProvider';
11
+ import V2rayNSubscribeProvider from './V2rayNSubscribeProvider';
1
12
  import { PossibleProviderType } from './types';
2
- export { PossibleProviderType };
3
- export declare function getProvider(name: string, config: any): Promise<PossibleProviderType>;
13
+ import Provider from './Provider';
14
+ export { BlackSSLProvider, ClashProvider, CustomProvider, ShadowsocksJsonSubscribeProvider, ShadowsocksrSubscribeProvider, ShadowsocksSubscribeProvider, SsdProvider, TrojanProvider, V2rayNSubscribeProvider, };
15
+ export type { Provider };
16
+ export type * from './types';
17
+ export declare function getProvider(name: string, config: ReturnType<typeof defineProvider> | PossibleProviderConfigType): Promise<PossibleProviderType>;
@@ -3,19 +3,27 @@ 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.getProvider = void 0;
6
+ exports.getProvider = exports.V2rayNSubscribeProvider = exports.TrojanProvider = exports.SsdProvider = exports.ShadowsocksSubscribeProvider = exports.ShadowsocksrSubscribeProvider = exports.ShadowsocksJsonSubscribeProvider = exports.CustomProvider = exports.ClashProvider = exports.BlackSSLProvider = void 0;
7
7
  const types_1 = require("../types");
8
8
  const BlackSSLProvider_1 = __importDefault(require("./BlackSSLProvider"));
9
+ exports.BlackSSLProvider = BlackSSLProvider_1.default;
9
10
  const ClashProvider_1 = __importDefault(require("./ClashProvider"));
11
+ exports.ClashProvider = ClashProvider_1.default;
10
12
  const CustomProvider_1 = __importDefault(require("./CustomProvider"));
13
+ exports.CustomProvider = CustomProvider_1.default;
11
14
  const ShadowsocksJsonSubscribeProvider_1 = __importDefault(require("./ShadowsocksJsonSubscribeProvider"));
15
+ exports.ShadowsocksJsonSubscribeProvider = ShadowsocksJsonSubscribeProvider_1.default;
12
16
  const ShadowsocksrSubscribeProvider_1 = __importDefault(require("./ShadowsocksrSubscribeProvider"));
17
+ exports.ShadowsocksrSubscribeProvider = ShadowsocksrSubscribeProvider_1.default;
13
18
  const ShadowsocksSubscribeProvider_1 = __importDefault(require("./ShadowsocksSubscribeProvider"));
19
+ exports.ShadowsocksSubscribeProvider = ShadowsocksSubscribeProvider_1.default;
14
20
  const SsdProvider_1 = __importDefault(require("./SsdProvider"));
21
+ exports.SsdProvider = SsdProvider_1.default;
15
22
  const TrojanProvider_1 = __importDefault(require("./TrojanProvider"));
23
+ exports.TrojanProvider = TrojanProvider_1.default;
16
24
  const V2rayNSubscribeProvider_1 = __importDefault(require("./V2rayNSubscribeProvider"));
25
+ exports.V2rayNSubscribeProvider = V2rayNSubscribeProvider_1.default;
17
26
  async function getProvider(name, config) {
18
- // 函数形式,需要先获取到返回值
19
27
  if (typeof config === 'function') {
20
28
  config = await config();
21
29
  }
@@ -28,9 +36,8 @@ async function getProvider(name, config) {
28
36
  return new ShadowsocksSubscribeProvider_1.default(name, config);
29
37
  case types_1.SupportProviderEnum.ShadowsocksrSubscribe:
30
38
  return new ShadowsocksrSubscribeProvider_1.default(name, config);
31
- case types_1.SupportProviderEnum.Custom: {
39
+ case types_1.SupportProviderEnum.Custom:
32
40
  return new CustomProvider_1.default(name, config);
33
- }
34
41
  case types_1.SupportProviderEnum.V2rayNSubscribe:
35
42
  return new V2rayNSubscribeProvider_1.default(name, config);
36
43
  case types_1.SupportProviderEnum.Clash:
@@ -44,4 +51,4 @@ async function getProvider(name, config) {
44
51
  }
45
52
  }
46
53
  exports.getProvider = getProvider;
47
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9saWIvcHJvdmlkZXIvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsb0NBQStDO0FBQy9DLDBFQUFrRDtBQUNsRCxvRUFBNEM7QUFDNUMsc0VBQThDO0FBQzlDLDBHQUFrRjtBQUNsRixvR0FBNEU7QUFDNUUsa0dBQTBFO0FBQzFFLGdFQUF3QztBQUN4QyxzRUFBOEM7QUFFOUMsd0ZBQWdFO0FBSXpELEtBQUssVUFBVSxXQUFXLENBQy9CLElBQVksRUFDWixNQUFXO0lBRVgsaUJBQWlCO0lBQ2pCLElBQUksT0FBTyxNQUFNLEtBQUssVUFBVSxFQUFFO1FBQ2hDLE1BQU0sR0FBRyxNQUFNLE1BQU0sRUFBRSxDQUFDO0tBQ3pCO0lBRUQsUUFBUSxNQUFNLENBQUMsSUFBSSxFQUFFO1FBQ25CLEtBQUssMkJBQW1CLENBQUMsUUFBUTtZQUMvQixPQUFPLElBQUksMEJBQWdCLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBRTVDLEtBQUssMkJBQW1CLENBQUMsd0JBQXdCO1lBQy9DLE9BQU8sSUFBSSwwQ0FBZ0MsQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFFNUQsS0FBSywyQkFBbUIsQ0FBQyxvQkFBb0I7WUFDM0MsT0FBTyxJQUFJLHNDQUE0QixDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztRQUV4RCxLQUFLLDJCQUFtQixDQUFDLHFCQUFxQjtZQUM1QyxPQUFPLElBQUksdUNBQTZCLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBRXpELEtBQUssMkJBQW1CLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDL0IsT0FBTyxJQUFJLHdCQUFjLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1NBQ3pDO1FBRUQsS0FBSywyQkFBbUIsQ0FBQyxlQUFlO1lBQ3RDLE9BQU8sSUFBSSxpQ0FBdUIsQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFFbkQsS0FBSywyQkFBbUIsQ0FBQyxLQUFLO1lBQzVCLE9BQU8sSUFBSSx1QkFBYSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztRQUV6QyxLQUFLLDJCQUFtQixDQUFDLEdBQUc7WUFDMUIsT0FBTyxJQUFJLHFCQUFXLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBRXZDLEtBQUssMkJBQW1CLENBQUMsTUFBTTtZQUM3QixPQUFPLElBQUksd0JBQWMsQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFFMUM7WUFDRSxNQUFNLElBQUksS0FBSyxDQUFDLDhCQUE4QixNQUFNLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztLQUNoRTtBQUNILENBQUM7QUF6Q0Qsa0NBeUNDIn0=
54
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcHJvdmlkZXIvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsb0NBQTBFO0FBRTFFLDBFQUFpRDtBQWEvQywyQkFiSywwQkFBZ0IsQ0FhTDtBQVpsQixvRUFBMkM7QUFhekMsd0JBYkssdUJBQWEsQ0FhTDtBQVpmLHNFQUE2QztBQWEzQyx5QkFiSyx3QkFBYyxDQWFMO0FBWmhCLDBHQUFpRjtBQWEvRSwyQ0FiSywwQ0FBZ0MsQ0FhTDtBQVpsQyxvR0FBMkU7QUFhekUsd0NBYkssdUNBQTZCLENBYUw7QUFaL0Isa0dBQXlFO0FBYXZFLHVDQWJLLHNDQUE0QixDQWFMO0FBWjlCLGdFQUF1QztBQWFyQyxzQkFiSyxxQkFBVyxDQWFMO0FBWmIsc0VBQTZDO0FBYTNDLHlCQWJLLHdCQUFjLENBYUw7QUFaaEIsd0ZBQStEO0FBYTdELGtDQWJLLGlDQUF1QixDQWFMO0FBTWxCLEtBQUssVUFBVSxXQUFXLENBQy9CLElBQVksRUFDWixNQUFzRTtJQUV0RSxJQUFJLE9BQU8sTUFBTSxLQUFLLFVBQVUsRUFBRTtRQUNoQyxNQUFNLEdBQUcsTUFBTSxNQUFNLEVBQUUsQ0FBQTtLQUN4QjtJQUVELFFBQVEsTUFBTSxDQUFDLElBQUksRUFBRTtRQUNuQixLQUFLLDJCQUFtQixDQUFDLFFBQVE7WUFDL0IsT0FBTyxJQUFJLDBCQUFnQixDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQTtRQUUzQyxLQUFLLDJCQUFtQixDQUFDLHdCQUF3QjtZQUMvQyxPQUFPLElBQUksMENBQWdDLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFBO1FBRTNELEtBQUssMkJBQW1CLENBQUMsb0JBQW9CO1lBQzNDLE9BQU8sSUFBSSxzQ0FBNEIsQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUE7UUFFdkQsS0FBSywyQkFBbUIsQ0FBQyxxQkFBcUI7WUFDNUMsT0FBTyxJQUFJLHVDQUE2QixDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQTtRQUV4RCxLQUFLLDJCQUFtQixDQUFDLE1BQU07WUFDN0IsT0FBTyxJQUFJLHdCQUFjLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFBO1FBRXpDLEtBQUssMkJBQW1CLENBQUMsZUFBZTtZQUN0QyxPQUFPLElBQUksaUNBQXVCLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFBO1FBRWxELEtBQUssMkJBQW1CLENBQUMsS0FBSztZQUM1QixPQUFPLElBQUksdUJBQWEsQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUE7UUFFeEMsS0FBSywyQkFBbUIsQ0FBQyxHQUFHO1lBQzFCLE9BQU8sSUFBSSxxQkFBVyxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQTtRQUV0QyxLQUFLLDJCQUFtQixDQUFDLE1BQU07WUFDN0IsT0FBTyxJQUFJLHdCQUFjLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFBO1FBRXpDO1lBQ0UsTUFBTSxJQUFJLEtBQUssQ0FBQyw4QkFBK0IsTUFBYyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUE7S0FDeEU7QUFDSCxDQUFDO0FBdkNELGtDQXVDQyJ9
@@ -1,3 +1,4 @@
1
+ import { PossibleNodeConfigType, SubscriptionUserinfo } from '../types';
1
2
  import BlackSSLProvider from './BlackSSLProvider';
2
3
  import ClashProvider from './ClashProvider';
3
4
  import CustomProvider from './CustomProvider';
@@ -5,5 +6,13 @@ import ShadowsocksJsonSubscribeProvider from './ShadowsocksJsonSubscribeProvider
5
6
  import ShadowsocksrSubscribeProvider from './ShadowsocksrSubscribeProvider';
6
7
  import ShadowsocksSubscribeProvider from './ShadowsocksSubscribeProvider';
7
8
  import SsdProvider from './SsdProvider';
9
+ import TrojanProvider from './TrojanProvider';
8
10
  import V2rayNSubscribeProvider from './V2rayNSubscribeProvider';
9
- export declare type PossibleProviderType = BlackSSLProvider | ShadowsocksJsonSubscribeProvider | ShadowsocksSubscribeProvider | CustomProvider | V2rayNSubscribeProvider | ShadowsocksrSubscribeProvider | ClashProvider | SsdProvider;
11
+ export type PossibleProviderType = BlackSSLProvider | ShadowsocksJsonSubscribeProvider | ShadowsocksSubscribeProvider | CustomProvider | V2rayNSubscribeProvider | ShadowsocksrSubscribeProvider | ClashProvider | SsdProvider | TrojanProvider;
12
+ export type GetNodeListParams = Record<string, string | string[] | undefined> & {
13
+ requestUserAgent?: string;
14
+ };
15
+ export type GetNodeListFunction = (params?: GetNodeListParams) => Promise<ReadonlyArray<PossibleNodeConfigType>>;
16
+ export type GetSubscriptionUserInfoFunction = (params?: {
17
+ requestUserAgent?: string;
18
+ }) => Promise<SubscriptionUserinfo | undefined>;
@@ -1,3 +1,3 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9saWIvcHJvdmlkZXIvdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiJ9
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcHJvdmlkZXIvdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiJ9
package/build/redis.js CHANGED
@@ -58,4 +58,4 @@ const prepareRedis = () => {
58
58
  };
59
59
  const redis = prepareRedis();
60
60
  exports.default = redis;
61
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVkaXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9saWIvcmVkaXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSwyQ0FBOEM7QUFDOUMsc0RBQTRCO0FBRTVCLHlDQUF3QztBQUV4QyxNQUFNLE1BQU0sR0FBRyxJQUFBLHFCQUFZLEVBQUMsRUFBRSxPQUFPLEVBQUUsY0FBYyxFQUFFLENBQUMsQ0FBQztBQUV6RCxNQUFNLFlBQVksR0FBRyxHQUFHLEVBQUU7SUFDeEIsSUFBSSxNQUFNLEdBQWlCLElBQUksQ0FBQztJQUNoQyxJQUFJLFFBQVEsR0FBa0IsSUFBSSxDQUFDO0lBRW5DLE9BQU87UUFDTCxRQUFRLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU07UUFDeEIsV0FBVyxDQUFDLFNBQWlCLEVBQUUsV0FBaUI7WUFDOUMsSUFBSSxNQUFNLElBQUksUUFBUSxFQUFFO2dCQUN0QixNQUFNLENBQUMsS0FBSyxDQUFDLDJDQUEyQyxFQUFFLFFBQVEsQ0FBQyxDQUFDO2dCQUNwRSxPQUFPLE1BQU0sQ0FBQzthQUNmO1lBQ0QsUUFBUSxHQUFHLFNBQVMsQ0FBQztZQUVyQixJQUFJLFdBQVcsRUFBRTtnQkFDZixNQUFNLEdBQUcsSUFBSSxXQUFXLENBQUMsU0FBUyxDQUFDLENBQUM7YUFDckM7aUJBQU07Z0JBQ0wsTUFBTSxHQUFHLElBQUksaUJBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQzthQUMvQjtZQUVELE9BQU8sTUFBZSxDQUFDO1FBQ3pCLENBQUM7UUFDRCxRQUFRO1lBQ04sSUFBSSxDQUFDLE1BQU0sRUFBRTtnQkFDWCxNQUFNLElBQUksS0FBSyxDQUFDLGlDQUFpQyxDQUFDLENBQUM7YUFDcEQ7WUFDRCxPQUFPLE1BQU0sQ0FBQztRQUNoQixDQUFDO1FBQ0QsS0FBSyxDQUFDLFlBQVk7WUFDaEIsSUFBSSxNQUFNLEVBQUU7Z0JBQ1YsTUFBTSxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUM7Z0JBQ3BCLE1BQU0sR0FBRyxJQUFJLENBQUM7Z0JBQ2QsUUFBUSxHQUFHLElBQUksQ0FBQzthQUNqQjtRQUNILENBQUM7UUFDRCxLQUFLLENBQUMsVUFBVTtZQUNkLElBQUksQ0FBQyxNQUFNLEVBQUU7Z0JBQ1gsT0FBTzthQUNSO1lBRUQsTUFBTSxZQUFZLEdBQUcsTUFBTSxPQUFPLENBQUMsR0FBRyxDQUNwQyxNQUFNLENBQUMsSUFBSSxDQUFDLHFCQUFVLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtnQkFDbEMsSUFBSSxDQUFDLE1BQU07b0JBQUUsT0FBTztnQkFFcEIsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcscUJBQVUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDN0MsQ0FBQyxDQUFDLENBQ0gsQ0FBQztZQUVGLE1BQU0sT0FBTyxDQUFDLEdBQUcsQ0FDZixZQUFZLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7Z0JBQ3hCLElBQUksQ0FBQyxNQUFNLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTTtvQkFBRSxPQUFPO2dCQUM3QyxPQUFPLE1BQU0sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDMUIsQ0FBQyxDQUFDLENBQ0gsQ0FBQztRQUNKLENBQUM7S0FDRixDQUFDO0FBQ0osQ0FBQyxDQUFDO0FBQ0YsTUFBTSxLQUFLLEdBQUcsWUFBWSxFQUFFLENBQUM7QUFFN0Isa0JBQWUsS0FBSyxDQUFDIn0=
61
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVkaXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvcmVkaXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSwyQ0FBNkM7QUFDN0Msc0RBQTJCO0FBRTNCLHlDQUF1QztBQUV2QyxNQUFNLE1BQU0sR0FBRyxJQUFBLHFCQUFZLEVBQUMsRUFBRSxPQUFPLEVBQUUsY0FBYyxFQUFFLENBQUMsQ0FBQTtBQUV4RCxNQUFNLFlBQVksR0FBRyxHQUFHLEVBQUU7SUFDeEIsSUFBSSxNQUFNLEdBQWlCLElBQUksQ0FBQTtJQUMvQixJQUFJLFFBQVEsR0FBa0IsSUFBSSxDQUFBO0lBRWxDLE9BQU87UUFDTCxRQUFRLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU07UUFDeEIsV0FBVyxDQUFDLFNBQWlCLEVBQUUsV0FBaUI7WUFDOUMsSUFBSSxNQUFNLElBQUksUUFBUSxFQUFFO2dCQUN0QixNQUFNLENBQUMsS0FBSyxDQUFDLDJDQUEyQyxFQUFFLFFBQVEsQ0FBQyxDQUFBO2dCQUNuRSxPQUFPLE1BQU0sQ0FBQTthQUNkO1lBQ0QsUUFBUSxHQUFHLFNBQVMsQ0FBQTtZQUVwQixJQUFJLFdBQVcsRUFBRTtnQkFDZixNQUFNLEdBQUcsSUFBSSxXQUFXLENBQUMsU0FBUyxDQUFDLENBQUE7YUFDcEM7aUJBQU07Z0JBQ0wsTUFBTSxHQUFHLElBQUksaUJBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQTthQUM5QjtZQUVELE9BQU8sTUFBZSxDQUFBO1FBQ3hCLENBQUM7UUFDRCxRQUFRO1lBQ04sSUFBSSxDQUFDLE1BQU0sRUFBRTtnQkFDWCxNQUFNLElBQUksS0FBSyxDQUFDLGlDQUFpQyxDQUFDLENBQUE7YUFDbkQ7WUFDRCxPQUFPLE1BQU0sQ0FBQTtRQUNmLENBQUM7UUFDRCxLQUFLLENBQUMsWUFBWTtZQUNoQixJQUFJLE1BQU0sRUFBRTtnQkFDVixNQUFNLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQTtnQkFDbkIsTUFBTSxHQUFHLElBQUksQ0FBQTtnQkFDYixRQUFRLEdBQUcsSUFBSSxDQUFBO2FBQ2hCO1FBQ0gsQ0FBQztRQUNELEtBQUssQ0FBQyxVQUFVO1lBQ2QsSUFBSSxDQUFDLE1BQU0sRUFBRTtnQkFDWCxPQUFNO2FBQ1A7WUFFRCxNQUFNLFlBQVksR0FBRyxNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQ3BDLE1BQU0sQ0FBQyxJQUFJLENBQUMscUJBQVUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO2dCQUNsQyxJQUFJLENBQUMsTUFBTTtvQkFBRSxPQUFNO2dCQUVuQixPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxxQkFBVSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQTtZQUM1QyxDQUFDLENBQUMsQ0FDSCxDQUFBO1lBRUQsTUFBTSxPQUFPLENBQUMsR0FBRyxDQUNmLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtnQkFDeEIsSUFBSSxDQUFDLE1BQU0sSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNO29CQUFFLE9BQU07Z0JBQzVDLE9BQU8sTUFBTSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQTtZQUN6QixDQUFDLENBQUMsQ0FDSCxDQUFBO1FBQ0gsQ0FBQztLQUNGLENBQUE7QUFDSCxDQUFDLENBQUE7QUFDRCxNQUFNLEtBQUssR0FBRyxZQUFZLEVBQUUsQ0FBQTtBQUU1QixrQkFBZSxLQUFLLENBQUEifQ==