surgio 2.25.2 → 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.
- package/bin/dev +17 -0
- package/bin/dev.cmd +3 -0
- package/bin/run +8 -0
- package/bin/run.cmd +3 -0
- package/build/base-command.d.ts +18 -0
- package/build/base-command.js +74 -0
- package/build/commands/check.d.ts +10 -0
- package/build/commands/check.js +88 -0
- package/build/commands/clean-cache.d.ts +6 -0
- package/build/commands/clean-cache.js +29 -0
- package/build/commands/doctor.d.ts +6 -0
- package/build/commands/doctor.js +21 -0
- package/build/commands/generate.d.ts +7 -0
- package/build/commands/generate.js +93 -0
- package/build/commands/lint.d.ts +6 -0
- package/build/commands/lint.js +36 -0
- package/build/commands/new.d.ts +6 -0
- package/build/commands/new.js +36 -0
- package/build/commands/subscriptions.d.ts +7 -0
- package/build/commands/subscriptions.js +96 -0
- package/build/commands/upload.d.ts +6 -0
- package/build/commands/upload.js +87 -0
- package/build/config.d.ts +6 -0
- package/build/config.js +151 -0
- package/build/constant/constant.d.ts +17 -16
- package/build/constant/constant.js +3 -2
- package/build/constant/env.js +1 -1
- package/build/constant/error.js +1 -1
- package/build/constant/index.js +1 -1
- package/build/generate.d.ts +0 -1
- package/build/generate.js +3 -65
- package/build/generator/artifact.d.ts +299 -64
- package/build/generator/artifact.js +90 -92
- package/build/generator/index.d.ts +2 -0
- package/build/generator/index.js +19 -0
- package/build/generator/template.js +2 -6
- package/build/hooks/init.d.ts +3 -0
- package/build/hooks/init.js +32 -0
- package/build/index.d.ts +55 -53
- package/build/index.js +13 -51
- package/build/internal.d.ts +4 -0
- package/build/internal.js +21 -0
- package/build/misc/deprecation.d.ts +1 -6
- package/build/misc/deprecation.js +1 -8
- package/build/misc/flag_cn.js +1 -1
- package/build/provider/BlackSSLProvider.d.ts +4 -3
- package/build/provider/BlackSSLProvider.js +24 -16
- package/build/provider/ClashProvider.d.ts +7 -10
- package/build/provider/ClashProvider.js +165 -76
- package/build/provider/CustomProvider.d.ts +4 -3
- package/build/provider/CustomProvider.js +81 -50
- package/build/provider/Provider.d.ts +9 -22
- package/build/provider/Provider.js +31 -69
- package/build/provider/ShadowsocksJsonSubscribeProvider.d.ts +4 -5
- package/build/provider/ShadowsocksJsonSubscribeProvider.js +27 -21
- package/build/provider/ShadowsocksSubscribeProvider.d.ts +5 -8
- package/build/provider/ShadowsocksSubscribeProvider.js +30 -27
- package/build/provider/ShadowsocksrSubscribeProvider.d.ts +5 -8
- package/build/provider/ShadowsocksrSubscribeProvider.js +30 -23
- package/build/provider/SsdProvider.d.ts +5 -8
- package/build/provider/SsdProvider.js +56 -39
- package/build/provider/TrojanProvider.d.ts +5 -8
- package/build/provider/TrojanProvider.js +37 -30
- package/build/provider/V2rayNSubscribeProvider.d.ts +4 -5
- package/build/provider/V2rayNSubscribeProvider.js +61 -33
- package/build/provider/index.d.ts +16 -2
- package/build/provider/index.js +12 -5
- package/build/provider/types.d.ts +10 -1
- package/build/provider/types.js +1 -1
- package/build/redis.js +1 -1
- package/build/types.d.ts +45 -236
- package/build/types.js +2 -1
- package/build/utils/cache.js +29 -27
- package/build/utils/clash.d.ts +204 -3
- package/build/utils/clash.js +247 -106
- package/build/utils/configurables.d.ts +71 -0
- package/build/utils/configurables.js +8 -0
- package/build/utils/constant.js +1 -1
- package/build/utils/dns.js +1 -1
- package/build/utils/doctor.d.ts +2 -0
- package/build/utils/doctor.js +38 -0
- package/build/utils/env-flag.js +2 -2
- package/build/utils/error-helper.d.ts +2 -2
- package/build/utils/error-helper.js +30 -16
- package/build/utils/filter.d.ts +46 -43
- package/build/utils/filter.js +51 -30
- package/build/utils/flag.js +1 -1
- package/build/utils/http-client.js +38 -5
- package/build/utils/index.d.ts +13 -21
- package/build/utils/index.js +98 -117
- package/build/utils/linter.js +5 -2
- package/build/utils/loon.d.ts +3 -2
- package/build/utils/loon.js +67 -5
- package/build/utils/quantumult.d.ts +3 -3
- package/build/utils/quantumult.js +190 -258
- package/build/utils/relayable-url.js +1 -1
- package/build/utils/remote-snippet.js +3 -4
- package/build/utils/ss.js +27 -17
- package/build/utils/ssr.js +3 -4
- package/build/utils/subscription.js +7 -7
- package/build/utils/surfboard.d.ts +3 -2
- package/build/utils/surfboard.js +142 -126
- package/build/utils/surge.d.ts +4 -2
- package/build/utils/surge.js +328 -300
- package/build/utils/time.d.ts +1 -0
- package/build/utils/time.js +6 -0
- package/build/utils/tmp-helper.js +8 -1
- package/build/utils/trojan.js +19 -11
- package/build/utils/v2ray.js +2 -2
- package/build/validators/artifact.d.ts +35 -0
- package/build/validators/artifact.js +17 -0
- package/build/validators/common.d.ts +121 -0
- package/build/validators/common.js +52 -0
- package/build/validators/filter.d.ts +10 -0
- package/build/validators/filter.js +15 -0
- package/build/validators/hooks.d.ts +7 -0
- package/build/validators/hooks.js +8 -0
- package/build/validators/http.d.ts +137 -0
- package/build/validators/http.js +19 -0
- package/build/validators/index.d.ts +15 -0
- package/build/validators/index.js +32 -0
- package/build/validators/provider.d.ts +109 -0
- package/build/validators/provider.js +41 -0
- package/build/validators/shadowsocks.d.ts +86 -0
- package/build/validators/shadowsocks.js +29 -0
- package/build/validators/shadowsocksr.d.ts +77 -0
- package/build/validators/shadowsocksr.js +19 -0
- package/build/validators/snell.d.ts +71 -0
- package/build/validators/snell.js +20 -0
- package/build/validators/socks5.d.ts +77 -0
- package/build/validators/socks5.js +19 -0
- package/build/validators/surgio-config.d.ts +307 -0
- package/build/validators/surgio-config.js +95 -0
- package/build/validators/trojan.d.ts +86 -0
- package/build/validators/trojan.js +15 -0
- package/build/validators/tuic.d.ts +301 -0
- package/build/validators/tuic.js +21 -0
- package/build/validators/vmess.d.ts +92 -0
- package/build/validators/vmess.js +29 -0
- package/build/validators/wireguard.d.ts +123 -0
- package/build/validators/wireguard.js +26 -0
- package/config.d.ts +1 -0
- package/config.js +1 -0
- package/constant.d.ts +1 -0
- package/constant.js +1 -0
- package/generator.d.ts +1 -0
- package/generator.js +1 -0
- package/hygen-template/artifact/new/index.js +15 -15
- package/hygen-template/provider/new/index.js +8 -7
- package/hygen-template/template/new/index.js +3 -3
- package/index.d.ts +1 -0
- package/index.js +1 -0
- package/internal.d.ts +1 -0
- package/internal.js +1 -0
- package/package.json +112 -75
- package/provider.d.ts +1 -0
- package/provider.js +1 -0
- package/utils.d.ts +1 -0
- package/utils.js +1 -0
- package/bin/surgio.js +0 -8
- package/build/command/check.d.ts +0 -9
- package/build/command/check.js +0 -79
- package/build/command/clean-cache.d.ts +0 -8
- package/build/command/clean-cache.js +0 -43
- package/build/command/doctor.d.ts +0 -9
- package/build/command/doctor.js +0 -63
- package/build/command/generate.d.ts +0 -8
- package/build/command/generate.js +0 -64
- package/build/command/lint.d.ts +0 -7
- package/build/command/lint.js +0 -42
- package/build/command/new.d.ts +0 -7
- package/build/command/new.js +0 -44
- package/build/command/subscriptions.d.ts +0 -10
- package/build/command/subscriptions.js +0 -87
- package/build/command/upload.d.ts +0 -9
- package/build/command/upload.js +0 -101
- package/build/utils/command.d.ts +0 -2
- package/build/utils/command.js +0 -23
- package/build/utils/config.d.ts +0 -6
- package/build/utils/config.js +0 -245
- package/build/utils/patch-proxy.d.ts +0 -1
- 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 =
|
|
22
|
-
url:
|
|
23
|
-
|
|
24
|
-
|
|
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 (
|
|
32
|
-
throw error;
|
|
29
|
+
if (!result.success) {
|
|
30
|
+
throw result.error;
|
|
33
31
|
}
|
|
34
|
-
this
|
|
35
|
-
this.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
|
|
38
|
+
return (0, relayable_url_1.default)(this.#originalUrl, this.config.relayUrl);
|
|
41
39
|
}
|
|
42
|
-
async
|
|
43
|
-
const
|
|
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
|
|
48
|
-
}
|
|
49
|
-
async
|
|
50
|
-
const
|
|
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 =
|
|
90
|
-
const pluginOptsString =
|
|
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
|
|
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
|
|
108
|
+
return undefined;
|
|
104
109
|
}
|
|
105
|
-
return
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
:
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
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,
|
|
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
|
-
|
|
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
|
|
10
|
-
|
|
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:
|
|
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
|
|
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 =
|
|
21
|
-
url:
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
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 (
|
|
32
|
-
throw error;
|
|
26
|
+
if (!result.success) {
|
|
27
|
+
throw result.error;
|
|
33
28
|
}
|
|
34
|
-
this
|
|
35
|
-
this.udpRelay =
|
|
36
|
-
this.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
|
|
36
|
+
return (0, relayable_url_1.default)(this.#originalUrl, this.config.relayUrl);
|
|
42
37
|
}
|
|
43
|
-
async
|
|
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
|
|
54
|
-
}
|
|
55
|
-
async
|
|
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
|
|
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
|
|
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,
|
|
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
|
|
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<
|
|
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 =
|
|
19
|
-
url:
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
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 (
|
|
32
|
-
throw error;
|
|
32
|
+
if (!result.success) {
|
|
33
|
+
throw result.error;
|
|
33
34
|
}
|
|
34
|
-
this
|
|
35
|
-
this.compatibleMode =
|
|
36
|
-
this.skipCertVerify =
|
|
37
|
-
this.tls13 =
|
|
38
|
-
this.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
|
|
43
|
+
return (0, relayable_url_1.default)(this.#originalUrl, this.config.relayUrl);
|
|
43
44
|
}
|
|
44
|
-
getNodeList
|
|
45
|
-
|
|
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
|
|
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
|
|
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
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
:
|
|
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,
|
|
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
|
-
|
|
3
|
-
export
|
|
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>;
|
package/build/provider/index.js
CHANGED
|
@@ -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,
|
|
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
|
|
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>;
|
package/build/provider/types.js
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
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,
|
|
61
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVkaXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvcmVkaXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSwyQ0FBNkM7QUFDN0Msc0RBQTJCO0FBRTNCLHlDQUF1QztBQUV2QyxNQUFNLE1BQU0sR0FBRyxJQUFBLHFCQUFZLEVBQUMsRUFBRSxPQUFPLEVBQUUsY0FBYyxFQUFFLENBQUMsQ0FBQTtBQUV4RCxNQUFNLFlBQVksR0FBRyxHQUFHLEVBQUU7SUFDeEIsSUFBSSxNQUFNLEdBQWlCLElBQUksQ0FBQTtJQUMvQixJQUFJLFFBQVEsR0FBa0IsSUFBSSxDQUFBO0lBRWxDLE9BQU87UUFDTCxRQUFRLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU07UUFDeEIsV0FBVyxDQUFDLFNBQWlCLEVBQUUsV0FBaUI7WUFDOUMsSUFBSSxNQUFNLElBQUksUUFBUSxFQUFFO2dCQUN0QixNQUFNLENBQUMsS0FBSyxDQUFDLDJDQUEyQyxFQUFFLFFBQVEsQ0FBQyxDQUFBO2dCQUNuRSxPQUFPLE1BQU0sQ0FBQTthQUNkO1lBQ0QsUUFBUSxHQUFHLFNBQVMsQ0FBQTtZQUVwQixJQUFJLFdBQVcsRUFBRTtnQkFDZixNQUFNLEdBQUcsSUFBSSxXQUFXLENBQUMsU0FBUyxDQUFDLENBQUE7YUFDcEM7aUJBQU07Z0JBQ0wsTUFBTSxHQUFHLElBQUksaUJBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQTthQUM5QjtZQUVELE9BQU8sTUFBZSxDQUFBO1FBQ3hCLENBQUM7UUFDRCxRQUFRO1lBQ04sSUFBSSxDQUFDLE1BQU0sRUFBRTtnQkFDWCxNQUFNLElBQUksS0FBSyxDQUFDLGlDQUFpQyxDQUFDLENBQUE7YUFDbkQ7WUFDRCxPQUFPLE1BQU0sQ0FBQTtRQUNmLENBQUM7UUFDRCxLQUFLLENBQUMsWUFBWTtZQUNoQixJQUFJLE1BQU0sRUFBRTtnQkFDVixNQUFNLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQTtnQkFDbkIsTUFBTSxHQUFHLElBQUksQ0FBQTtnQkFDYixRQUFRLEdBQUcsSUFBSSxDQUFBO2FBQ2hCO1FBQ0gsQ0FBQztRQUNELEtBQUssQ0FBQyxVQUFVO1lBQ2QsSUFBSSxDQUFDLE1BQU0sRUFBRTtnQkFDWCxPQUFNO2FBQ1A7WUFFRCxNQUFNLFlBQVksR0FBRyxNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQ3BDLE1BQU0sQ0FBQyxJQUFJLENBQUMscUJBQVUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO2dCQUNsQyxJQUFJLENBQUMsTUFBTTtvQkFBRSxPQUFNO2dCQUVuQixPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxxQkFBVSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQTtZQUM1QyxDQUFDLENBQUMsQ0FDSCxDQUFBO1lBRUQsTUFBTSxPQUFPLENBQUMsR0FBRyxDQUNmLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtnQkFDeEIsSUFBSSxDQUFDLE1BQU0sSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNO29CQUFFLE9BQU07Z0JBQzVDLE9BQU8sTUFBTSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQTtZQUN6QixDQUFDLENBQUMsQ0FDSCxDQUFBO1FBQ0gsQ0FBQztLQUNGLENBQUE7QUFDSCxDQUFDLENBQUE7QUFDRCxNQUFNLEtBQUssR0FBRyxZQUFZLEVBQUUsQ0FBQTtBQUU1QixrQkFBZSxLQUFLLENBQUEifQ==
|