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
|
@@ -22,85 +22,42 @@ var __importStar = (this && this.__importStar) || function (mod) {
|
|
|
22
22
|
__setModuleDefault(result, mod);
|
|
23
23
|
return result;
|
|
24
24
|
};
|
|
25
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
26
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
27
|
-
};
|
|
28
25
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
29
26
|
const logger_1 = require("@surgio/logger");
|
|
30
|
-
const joi_1 = __importDefault(require("joi"));
|
|
31
27
|
const constant_1 = require("../constant");
|
|
32
|
-
const types_1 = require("../types");
|
|
33
28
|
const cache_1 = require("../utils/cache");
|
|
34
|
-
const config_1 = require("../
|
|
29
|
+
const config_1 = require("../config");
|
|
35
30
|
const env_flag_1 = require("../utils/env-flag");
|
|
36
31
|
const http_client_1 = __importStar(require("../utils/http-client"));
|
|
37
|
-
const subscription_1 = require("../utils/subscription");
|
|
38
32
|
const utils_1 = require("../utils");
|
|
33
|
+
const validators_1 = require("../validators");
|
|
39
34
|
const logger = (0, logger_1.createLogger)({
|
|
40
35
|
service: 'surgio:Provider',
|
|
41
36
|
});
|
|
42
37
|
class Provider {
|
|
38
|
+
name;
|
|
39
|
+
type;
|
|
40
|
+
config;
|
|
41
|
+
// 是否支持在订阅中获取用户流量信息
|
|
42
|
+
supportGetSubscriptionUserInfo;
|
|
43
|
+
// 是否传递 Gateway 请求的 User-Agent
|
|
44
|
+
passGatewayRequestUserAgent;
|
|
43
45
|
constructor(name, config) {
|
|
44
46
|
this.name = name;
|
|
45
|
-
const
|
|
46
|
-
type: joi_1.default.string()
|
|
47
|
-
.valid(...Object.values(types_1.SupportProviderEnum))
|
|
48
|
-
.required(),
|
|
49
|
-
nodeFilter: joi_1.default.any().allow(joi_1.default.function(), joi_1.default.object({
|
|
50
|
-
filter: joi_1.default.function(),
|
|
51
|
-
supportSort: joi_1.default.boolean().strict(),
|
|
52
|
-
})),
|
|
53
|
-
netflixFilter: joi_1.default.any().allow(joi_1.default.function(), joi_1.default.object({
|
|
54
|
-
filter: joi_1.default.function(),
|
|
55
|
-
supportSort: joi_1.default.boolean().strict(),
|
|
56
|
-
})),
|
|
57
|
-
youtubePremiumFilter: joi_1.default.any().allow(joi_1.default.function(), joi_1.default.object({
|
|
58
|
-
filter: joi_1.default.function(),
|
|
59
|
-
supportSort: joi_1.default.boolean().strict(),
|
|
60
|
-
})),
|
|
61
|
-
customFilters: joi_1.default.object().pattern(joi_1.default.string(), joi_1.default.any().allow(joi_1.default.function(), joi_1.default.object({
|
|
62
|
-
filter: joi_1.default.function(),
|
|
63
|
-
supportSort: joi_1.default.boolean().strict(),
|
|
64
|
-
}))),
|
|
65
|
-
addFlag: joi_1.default.boolean().strict(),
|
|
66
|
-
removeExistingFlag: joi_1.default.boolean().strict(),
|
|
67
|
-
mptcp: joi_1.default.boolean().strict(),
|
|
68
|
-
tfo: joi_1.default.boolean().strict(),
|
|
69
|
-
underlyingProxy: joi_1.default.string(),
|
|
70
|
-
startPort: joi_1.default.number().integer().min(1024).max(65535),
|
|
71
|
-
relayUrl: [joi_1.default.boolean().strict(), joi_1.default.string()],
|
|
72
|
-
renameNode: joi_1.default.function(),
|
|
73
|
-
requestUserAgent: joi_1.default.string(),
|
|
74
|
-
}).unknown();
|
|
75
|
-
const { error, value } = schema.validate(config);
|
|
47
|
+
const result = validators_1.ProviderValidator.safeParse(config);
|
|
76
48
|
// istanbul ignore next
|
|
77
|
-
if (
|
|
78
|
-
throw error;
|
|
49
|
+
if (!result.success) {
|
|
50
|
+
throw result.error;
|
|
79
51
|
}
|
|
80
52
|
this.supportGetSubscriptionUserInfo = false;
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
'youtubePremiumFilter',
|
|
86
|
-
'customFilters',
|
|
87
|
-
'addFlag',
|
|
88
|
-
'removeExistingFlag',
|
|
89
|
-
'tfo',
|
|
90
|
-
'mptcp',
|
|
91
|
-
'startPort',
|
|
92
|
-
'renameNode',
|
|
93
|
-
'relayUrl',
|
|
94
|
-
'requestUserAgent',
|
|
95
|
-
'underlyingProxy',
|
|
96
|
-
].forEach((key) => {
|
|
97
|
-
this[key] = value[key];
|
|
98
|
-
});
|
|
53
|
+
this.config = result.data;
|
|
54
|
+
this.type = result.data.type;
|
|
55
|
+
this.passGatewayRequestUserAgent =
|
|
56
|
+
(0, config_1.getConfig)()?.gateway?.passRequestUserAgent ?? false;
|
|
99
57
|
}
|
|
100
58
|
static async requestCacheableResource(url, options = {}) {
|
|
101
|
-
|
|
102
|
-
const
|
|
103
|
-
const cacheKey = `${constant_1.CACHE_KEYS.Provider}:${(0, utils_1.toMD5)((0, http_client_1.getUserAgent)(options.requestUserAgent || '') + url)}`;
|
|
59
|
+
const cacheType = (0, config_1.getConfig)()?.cache?.type || 'default';
|
|
60
|
+
const cacheKey = `${constant_1.CACHE_KEYS.Provider}:${(0, utils_1.toMD5)((0, http_client_1.getUserAgent)(options.requestUserAgent) + url)}`;
|
|
104
61
|
const requestResource = async () => {
|
|
105
62
|
const headers = {};
|
|
106
63
|
if (options.requestUserAgent) {
|
|
@@ -114,7 +71,7 @@ class Provider {
|
|
|
114
71
|
body: res.body,
|
|
115
72
|
};
|
|
116
73
|
if (res.headers['subscription-userinfo']) {
|
|
117
|
-
subsciptionCacheItem.subscriptionUserinfo = (0,
|
|
74
|
+
subsciptionCacheItem.subscriptionUserinfo = (0, utils_1.parseSubscriptionUserInfo)(res.headers['subscription-userinfo']);
|
|
118
75
|
logger.debug('%s received subscription userinfo - raw: %s | parsed: %j', url, res.headers['subscription-userinfo'], subsciptionCacheItem.subscriptionUserinfo);
|
|
119
76
|
}
|
|
120
77
|
return subsciptionCacheItem;
|
|
@@ -142,20 +99,25 @@ class Provider {
|
|
|
142
99
|
})();
|
|
143
100
|
}
|
|
144
101
|
}
|
|
102
|
+
determineRequestUserAgent(requestUserAgent) {
|
|
103
|
+
return this.passGatewayRequestUserAgent
|
|
104
|
+
? requestUserAgent || this.config.requestUserAgent
|
|
105
|
+
: this.config.requestUserAgent;
|
|
106
|
+
}
|
|
145
107
|
get nextPort() {
|
|
146
|
-
if (this.startPort) {
|
|
147
|
-
return this.startPort++;
|
|
108
|
+
if (this.config.startPort) {
|
|
109
|
+
return this.config.startPort++;
|
|
148
110
|
}
|
|
149
111
|
return 0;
|
|
150
112
|
}
|
|
151
113
|
// istanbul ignore next
|
|
152
|
-
|
|
114
|
+
getSubscriptionUserInfo = async () => {
|
|
153
115
|
throw new Error('此 Provider 不支持该功能');
|
|
154
|
-
}
|
|
116
|
+
};
|
|
155
117
|
// istanbul ignore next
|
|
156
|
-
getNodeList
|
|
118
|
+
getNodeList = () => {
|
|
157
119
|
return Promise.resolve([]);
|
|
158
|
-
}
|
|
120
|
+
};
|
|
159
121
|
}
|
|
160
122
|
exports.default = Provider;
|
|
161
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
123
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUHJvdmlkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcHJvdmlkZXIvUHJvdmlkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLDJDQUE2QztBQUU3QywwQ0FBd0M7QUFFeEMsMENBSXVCO0FBQ3ZCLHNDQUFxQztBQUNyQyxnREFBMEQ7QUFDMUQsb0VBQStEO0FBQy9ELG9DQUF3RTtBQUN4RSw4Q0FBaUQ7QUFHakQsTUFBTSxNQUFNLEdBQUcsSUFBQSxxQkFBWSxFQUFDO0lBQzFCLE9BQU8sRUFBRSxpQkFBaUI7Q0FDM0IsQ0FBQyxDQUFBO0FBRUYsTUFBOEIsUUFBUTtJQVNQO0lBUmIsSUFBSSxDQUFxQjtJQUN6QixNQUFNLENBQWdCO0lBRXRDLG1CQUFtQjtJQUNaLDhCQUE4QixDQUFTO0lBQzlDLDhCQUE4QjtJQUN2QiwyQkFBMkIsQ0FBUztJQUUzQyxZQUE2QixJQUFZLEVBQUUsTUFBc0I7UUFBcEMsU0FBSSxHQUFKLElBQUksQ0FBUTtRQUN2QyxNQUFNLE1BQU0sR0FBRyw4QkFBaUIsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUE7UUFFbEQsdUJBQXVCO1FBQ3ZCLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFO1lBQ25CLE1BQU0sTUFBTSxDQUFDLEtBQUssQ0FBQTtTQUNuQjtRQUVELElBQUksQ0FBQyw4QkFBOEIsR0FBRyxLQUFLLENBQUE7UUFDM0MsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUMsSUFBc0IsQ0FBQTtRQUMzQyxJQUFJLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFBO1FBQzVCLElBQUksQ0FBQywyQkFBMkI7WUFDOUIsSUFBQSxrQkFBUyxHQUFFLEVBQUUsT0FBTyxFQUFFLG9CQUFvQixJQUFJLEtBQUssQ0FBQTtJQUN2RCxDQUFDO0lBRUQsTUFBTSxDQUFDLEtBQUssQ0FBQyx3QkFBd0Is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
|
|
@@ -1,12 +1,11 @@
|
|
|
1
1
|
import { ShadowsocksJsonSubscribeProviderConfig, ShadowsocksNodeConfig } from '../types';
|
|
2
2
|
import Provider from './Provider';
|
|
3
|
+
import { GetNodeListFunction } from './types';
|
|
3
4
|
export default class ShadowsocksJsonSubscribeProvider extends Provider {
|
|
5
|
+
#private;
|
|
4
6
|
readonly udpRelay?: boolean;
|
|
5
|
-
private readonly _url;
|
|
6
7
|
constructor(name: string, config: ShadowsocksJsonSubscribeProviderConfig);
|
|
7
8
|
get url(): string;
|
|
8
|
-
getNodeList
|
|
9
|
-
requestUserAgent?: string;
|
|
10
|
-
}): ReturnType<typeof getShadowsocksJSONConfig>;
|
|
9
|
+
getNodeList: GetNodeListFunction;
|
|
11
10
|
}
|
|
12
|
-
export declare const getShadowsocksJSONConfig: (url: string, udpRelay?: boolean, requestUserAgent?: string) => Promise<
|
|
11
|
+
export declare const getShadowsocksJSONConfig: (url: string, udpRelay?: boolean, requestUserAgent?: string) => Promise<Array<ShadowsocksNodeConfig>>;
|
|
@@ -5,36 +5,42 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
exports.getShadowsocksJSONConfig = void 0;
|
|
7
7
|
const assert_1 = __importDefault(require("assert"));
|
|
8
|
-
const
|
|
8
|
+
const zod_1 = require("zod");
|
|
9
9
|
const types_1 = require("../types");
|
|
10
10
|
const relayable_url_1 = __importDefault(require("../utils/relayable-url"));
|
|
11
11
|
const Provider_1 = __importDefault(require("./Provider"));
|
|
12
12
|
class ShadowsocksJsonSubscribeProvider extends Provider_1.default {
|
|
13
|
+
#originalUrl;
|
|
14
|
+
udpRelay;
|
|
13
15
|
constructor(name, config) {
|
|
14
16
|
super(name, config);
|
|
15
|
-
const schema =
|
|
16
|
-
url:
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
.required(),
|
|
21
|
-
udpRelay: joi_1.default.boolean().strict(),
|
|
22
|
-
}).unknown();
|
|
23
|
-
const { error } = schema.validate(config);
|
|
17
|
+
const schema = zod_1.z.object({
|
|
18
|
+
url: zod_1.z.string().url(),
|
|
19
|
+
udpRelay: zod_1.z.boolean().optional(),
|
|
20
|
+
});
|
|
21
|
+
const result = schema.safeParse(config);
|
|
24
22
|
// istanbul ignore next
|
|
25
|
-
if (
|
|
26
|
-
throw error;
|
|
23
|
+
if (!result.success) {
|
|
24
|
+
throw result.error;
|
|
27
25
|
}
|
|
28
|
-
this
|
|
29
|
-
this.udpRelay =
|
|
26
|
+
this.#originalUrl = result.data.url;
|
|
27
|
+
this.udpRelay = result.data.udpRelay;
|
|
30
28
|
}
|
|
31
29
|
// istanbul ignore next
|
|
32
30
|
get url() {
|
|
33
|
-
return (0, relayable_url_1.default)(this
|
|
34
|
-
}
|
|
35
|
-
getNodeList({ requestUserAgent, } = {}) {
|
|
36
|
-
return (0, exports.getShadowsocksJSONConfig)(this.url, this.udpRelay, requestUserAgent || this.requestUserAgent);
|
|
31
|
+
return (0, relayable_url_1.default)(this.#originalUrl, this.config.relayUrl);
|
|
37
32
|
}
|
|
33
|
+
getNodeList = async (params = {}) => {
|
|
34
|
+
const requestUserAgent = this.determineRequestUserAgent(params.requestUserAgent);
|
|
35
|
+
const nodeList = await (0, exports.getShadowsocksJSONConfig)(this.url, this.udpRelay, requestUserAgent);
|
|
36
|
+
if (this.config.hooks?.afterFetchNodeList) {
|
|
37
|
+
const newList = await this.config.hooks.afterFetchNodeList(nodeList, params);
|
|
38
|
+
if (newList) {
|
|
39
|
+
return newList;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
return nodeList;
|
|
43
|
+
};
|
|
38
44
|
}
|
|
39
45
|
exports.default = ShadowsocksJsonSubscribeProvider;
|
|
40
46
|
const getShadowsocksJSONConfig = async (url, udpRelay, requestUserAgent) => {
|
|
@@ -57,14 +63,14 @@ const getShadowsocksJSONConfig = async (url, udpRelay, requestUserAgent) => {
|
|
|
57
63
|
password: item.password,
|
|
58
64
|
};
|
|
59
65
|
if (typeof udpRelay === 'boolean') {
|
|
60
|
-
nodeConfig
|
|
66
|
+
nodeConfig.udpRelay = udpRelay;
|
|
61
67
|
}
|
|
62
68
|
if (item.plugin === 'obfs-local') {
|
|
63
69
|
const obfs = item.plugin_opts.match(/obfs=(\w+)/);
|
|
64
70
|
const obfsHost = item.plugin_opts.match(/obfs-host=(.+)$/);
|
|
65
71
|
if (obfs) {
|
|
66
72
|
nodeConfig.obfs = obfs[1];
|
|
67
|
-
nodeConfig
|
|
73
|
+
nodeConfig.obfsHost = obfsHost ? obfsHost[1] : 'www.bing.com';
|
|
68
74
|
}
|
|
69
75
|
}
|
|
70
76
|
return nodeConfig;
|
|
@@ -73,4 +79,4 @@ const getShadowsocksJSONConfig = async (url, udpRelay, requestUserAgent) => {
|
|
|
73
79
|
return await requestConfigFromRemote();
|
|
74
80
|
};
|
|
75
81
|
exports.getShadowsocksJSONConfig = getShadowsocksJSONConfig;
|
|
76
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
82
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2hhZG93c29ja3NKc29uU3Vic2NyaWJlUHJvdmlkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcHJvdmlkZXIvU2hhZG93c29ja3NKc29uU3Vic2NyaWJlUHJvdmlkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsb0RBQTJCO0FBQzNCLDZCQUF1QjtBQUV2QixvQ0FJaUI7QUFDakIsMkVBQWlEO0FBQ2pELDBEQUFpQztBQUdqQyxNQUFxQixnQ0FBaUMsU0FBUSxrQkFBUTtJQUMzRCxZQUFZLENBQVE7SUFDYixRQUFRLENBQVU7SUFFbEMsWUFBWSxJQUFZLEVBQUUsTUFBOEM7UUFDdEUsS0FBSyxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQTtRQUVuQixNQUFNLE1BQU0sR0FBRyxPQUFDLENBQUMsTUFBTSxDQUFDO1lBQ3RCLEdBQUcsRUFBRSxPQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxFQUFFO1lBQ3JCLFFBQVEsRUFBRSxPQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsUUFBUSxFQUFFO1NBQ2pDLENBQUMsQ0FBQTtRQUNGLE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUE7UUFFdkMsdUJBQXVCO1FBQ3ZCLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFO1lBQ25CLE1BQU0sTUFBTSxDQUFDLEtBQUssQ0FBQTtTQUNuQjtRQUVELElBQUksQ0FBQyxZQUFZLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUE7UUFDbkMsSUFBSSxDQUFDLFFBQVEsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQTtJQUN0QyxDQUFDO0lBRUQsdUJBQXVCO0lBQ3ZCLElBQVcsR0FBRztRQUNaLE9BQU8sSUFBQSx1QkFBWSxFQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQTtJQUM5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
|
|
@@ -1,21 +1,18 @@
|
|
|
1
1
|
import { ShadowsocksNodeConfig, ShadowsocksSubscribeProviderConfig, SubscriptionUserinfo } from '../types';
|
|
2
2
|
import Provider from './Provider';
|
|
3
|
+
import { GetNodeListFunction, GetSubscriptionUserInfoFunction } from './types';
|
|
3
4
|
export default class ShadowsocksSubscribeProvider extends Provider {
|
|
5
|
+
#private;
|
|
4
6
|
readonly udpRelay?: boolean;
|
|
5
|
-
private readonly _url;
|
|
6
7
|
constructor(name: string, config: ShadowsocksSubscribeProviderConfig);
|
|
7
8
|
get url(): string;
|
|
8
|
-
getSubscriptionUserInfo
|
|
9
|
-
|
|
10
|
-
}): Promise<SubscriptionUserinfo | undefined>;
|
|
11
|
-
getNodeList({ requestUserAgent, }?: {
|
|
12
|
-
requestUserAgent?: string;
|
|
13
|
-
}): Promise<ReadonlyArray<ShadowsocksNodeConfig>>;
|
|
9
|
+
getSubscriptionUserInfo: GetSubscriptionUserInfoFunction;
|
|
10
|
+
getNodeList: GetNodeListFunction;
|
|
14
11
|
}
|
|
15
12
|
/**
|
|
16
13
|
* @see https://shadowsocks.org/en/spec/SIP002-URI-Scheme.html
|
|
17
14
|
*/
|
|
18
15
|
export declare const getShadowsocksSubscription: (url: string, udpRelay?: boolean, requestUserAgent?: string) => Promise<{
|
|
19
|
-
readonly nodeList:
|
|
16
|
+
readonly nodeList: Array<ShadowsocksNodeConfig>;
|
|
20
17
|
readonly subscriptionUserinfo?: SubscriptionUserinfo | undefined;
|
|
21
18
|
}>;
|
|
@@ -4,51 +4,53 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
exports.getShadowsocksSubscription = void 0;
|
|
7
|
-
const joi_1 = __importDefault(require("joi"));
|
|
8
7
|
const assert_1 = __importDefault(require("assert"));
|
|
9
|
-
const
|
|
8
|
+
const zod_1 = require("zod");
|
|
10
9
|
const utils_1 = require("../utils");
|
|
11
10
|
const relayable_url_1 = __importDefault(require("../utils/relayable-url"));
|
|
12
11
|
const ss_1 = require("../utils/ss");
|
|
13
12
|
const Provider_1 = __importDefault(require("./Provider"));
|
|
14
|
-
const logger = (0, logger_1.createLogger)({
|
|
15
|
-
service: 'surgio:ShadowsocksSubscribeProvider',
|
|
16
|
-
});
|
|
17
13
|
class ShadowsocksSubscribeProvider extends Provider_1.default {
|
|
14
|
+
udpRelay;
|
|
15
|
+
#originalUrl;
|
|
18
16
|
constructor(name, config) {
|
|
19
17
|
super(name, config);
|
|
20
|
-
const schema =
|
|
21
|
-
url:
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
.required(),
|
|
26
|
-
udpRelay: joi_1.default.boolean().strict(),
|
|
27
|
-
}).unknown();
|
|
28
|
-
const { error } = schema.validate(config);
|
|
18
|
+
const schema = zod_1.z.object({
|
|
19
|
+
url: zod_1.z.string().url(),
|
|
20
|
+
udpRelay: zod_1.z.boolean().optional(),
|
|
21
|
+
});
|
|
22
|
+
const result = schema.safeParse(config);
|
|
29
23
|
// istanbul ignore next
|
|
30
|
-
if (
|
|
31
|
-
throw error;
|
|
24
|
+
if (!result.success) {
|
|
25
|
+
throw result.error;
|
|
32
26
|
}
|
|
33
|
-
this
|
|
34
|
-
this.udpRelay =
|
|
27
|
+
this.#originalUrl = result.data.url;
|
|
28
|
+
this.udpRelay = result.data.udpRelay;
|
|
35
29
|
this.supportGetSubscriptionUserInfo = true;
|
|
36
30
|
}
|
|
37
31
|
// istanbul ignore next
|
|
38
32
|
get url() {
|
|
39
|
-
return (0, relayable_url_1.default)(this
|
|
33
|
+
return (0, relayable_url_1.default)(this.#originalUrl, this.config.relayUrl);
|
|
40
34
|
}
|
|
41
|
-
async
|
|
42
|
-
const
|
|
35
|
+
getSubscriptionUserInfo = async (params = {}) => {
|
|
36
|
+
const requestUserAgent = this.determineRequestUserAgent(params.requestUserAgent);
|
|
37
|
+
const { subscriptionUserinfo } = await (0, exports.getShadowsocksSubscription)(this.url, this.udpRelay, requestUserAgent);
|
|
43
38
|
if (subscriptionUserinfo) {
|
|
44
39
|
return subscriptionUserinfo;
|
|
45
40
|
}
|
|
46
41
|
return undefined;
|
|
47
|
-
}
|
|
48
|
-
async
|
|
49
|
-
const
|
|
42
|
+
};
|
|
43
|
+
getNodeList = async (params = {}) => {
|
|
44
|
+
const requestUserAgent = this.determineRequestUserAgent(params.requestUserAgent);
|
|
45
|
+
const { nodeList } = await (0, exports.getShadowsocksSubscription)(this.url, this.udpRelay, requestUserAgent);
|
|
46
|
+
if (this.config.hooks?.afterFetchNodeList) {
|
|
47
|
+
const newList = await this.config.hooks.afterFetchNodeList(nodeList, params);
|
|
48
|
+
if (newList) {
|
|
49
|
+
return newList;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
50
52
|
return nodeList;
|
|
51
|
-
}
|
|
53
|
+
};
|
|
52
54
|
}
|
|
53
55
|
exports.default = ShadowsocksSubscribeProvider;
|
|
54
56
|
/**
|
|
@@ -65,7 +67,8 @@ const getShadowsocksSubscription = async (url, udpRelay, requestUserAgent) => {
|
|
|
65
67
|
.map((item) => {
|
|
66
68
|
const nodeConfig = (0, ss_1.parseSSUri)(item);
|
|
67
69
|
if (udpRelay !== void 0) {
|
|
68
|
-
|
|
70
|
+
;
|
|
71
|
+
nodeConfig.udpRelay = udpRelay;
|
|
69
72
|
}
|
|
70
73
|
return nodeConfig;
|
|
71
74
|
});
|
|
@@ -75,4 +78,4 @@ const getShadowsocksSubscription = async (url, udpRelay, requestUserAgent) => {
|
|
|
75
78
|
};
|
|
76
79
|
};
|
|
77
80
|
exports.getShadowsocksSubscription = getShadowsocksSubscription;
|
|
78
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
81
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2hhZG93c29ja3NTdWJzY3JpYmVQcm92aWRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wcm92aWRlci9TaGFkb3dzb2Nrc1N1YnNjcmliZVByb3ZpZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLG9EQUEyQjtBQUMzQiw2QkFBdUI7QUFPdkIsb0NBQXFDO0FBQ3JDLDJFQUFpRDtBQUNqRCxvQ0FBd0M7QUFDeEMsMERBQWlDO0FBR2pDLE1BQXFCLDRCQUE2QixTQUFRLGtCQUFRO0lBQ2hELFFBQVEsQ0FBVTtJQUN6QixZQUFZLENBQVE7SUFFN0IsWUFBWSxJQUFZLEVBQUUsTUFBMEM7UUFDbEUsS0FBSyxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQTtRQUVuQixNQUFNLE1BQU0sR0FBRyxPQUFDLENBQUMsTUFBTSxDQUFDO1lBQ3RCLEdBQUcsRUFBRSxPQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxFQUFFO1lBQ3JCLFFBQVEsRUFBRSxPQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsUUFBUSxFQUFFO1NBQ2pDLENBQUMsQ0FBQTtRQUNGLE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUE7UUFFdkMsdUJBQXVCO1FBQ3ZCLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFO1lBQ25CLE1BQU0sTUFBTSxDQUFDLEtBQUssQ0FBQTtTQUNuQjtRQUVELElBQUksQ0FBQyxZQUFZLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUE7UUFDbkMsSUFBSSxDQUFDLFFBQVEsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQTtRQUNwQyxJQUFJLENBQUMsOEJBQThCLEdBQUcsSUFBSSxDQUFBO0lBQzVDLENBQUM7SUFFRCx1QkFBdUI7SUFDdkIsSUFBVyxHQUFHO1FBQ1osT0FBTyxJQUFBLHVCQUFZLEVBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFBO0lBQzlELENBQUM7SUFFTSx1QkFBdUIsR0FBb0MsS0FBSyxFQUNyRSxNQUFNLEdBQUcsRUFBRSxFQUNYLEVBQUU7UUFDRixNQUFNLGdCQUFnQixHQUFHLElBQUksQ0FBQyx5QkFBeUIsQ0FDckQsTUFBTSxDQUFDLGdCQUFnQixDQUN4QixDQUFBO1FBQ0QsTUFBTSxFQUFFLG9CQUFvQixFQUFFLEdBQUcsTUFBTSxJQUFBLGtDQUEwQixFQUMvRCxJQUFJLENBQUMsR0FBRyxFQUNSLElBQUksQ0FBQyxRQUFRLEVBQ2IsZ0JBQWdCLENBQ2pCLENBQUE7UUFFRCxJQUFJLG9CQUFvQixFQUFFO1lBQ3hCLE9BQU8sb0JBQW9CLENBQUE7U0FDNUI7UUFDRCxPQUFPLFNBQVMsQ0FBQTtJQUNsQixDQUFDLENBQUE7SUFFTSxXQUFXLEdBQXdCLEtBQUssRUFDN0MsTUFBTSxHQUFHLEVBQUUsRUFDNEIsRUFBRTtRQUN6QyxNQUFNLGdCQUFnQixHQUFHLElBQUksQ0FBQyx5QkFBeUIsQ0FDckQsTUFBTSxDQUFDLGdCQUFnQixDQUN4QixDQUFBO1FBQ0QsTUFBTSxFQUFFLFFBQVEsRUFBRSxHQUFHLE1BQU0sSUFBQSxrQ0FBMEIsRUFDbkQsSUFBSSxDQUFDLEdBQUcsRUFDUixJQUFJLENBQUMsUUFBUSxFQUNiLGdCQUFnQixDQUNqQixDQUFBO1FBRUQsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxrQkFBa0IsRUFBRTtZQUN6QyxNQUFNLE9BQU8sR0FBRyxNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLGtCQUFrQixDQUN4RCxRQUFRLEVBQ1IsTUFBTSxDQUNQLENBQUE7WUFFRCxJQUFJLE9BQU8sRUFBRTtnQkFDWCxPQUFPLE9BQU8sQ0FBQTthQUNmO1NBQ0Y7UUFFRCxPQUFPLFFBQVEsQ0FBQTtJQUNqQixDQUFDLENBQUE7Q0FDRjtBQXZFRCwrQ0F1RUM7QUFFRDs7R0FFRztBQUNJLE1BQU0sMEJBQTBCLEdBQUcsS0FBSyxFQUM3QyxHQUFXLEVBQ1gsUUFBa0IsRUFDbEIsZ0JBQXlCLEVBSXhCLEVBQUU7SUFDSCxJQUFBLGdCQUFNLEVBQUMsR0FBRyxFQUFFLGFBQWEsQ0FBQyxDQUFBO0lBRTFCLE1BQU0sUUFBUSxHQUFHLE1BQU0sa0JBQVEsQ0FBQyx3QkFBd0IsQ0FBQyxHQUFHLEVBQUU7UUFDNUQsZ0JBQWdCO0tBQ2pCLENBQUMsQ0FBQTtJQUNGLE1BQU0sUUFBUSxHQUFHLElBQUEsa0JBQVUsRUFBQyxRQUFRLENBQUMsSUFBSSxDQUFDO1NBQ3ZDLEtBQUssQ0FBQyxJQUFJLENBQUM7U0FDWCxNQUFNLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQztTQUNwRCxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQXlCLEVBQUU7UUFDbkMsTUFBTSxVQUFVLEdBQUcsSUFBQSxlQUFVLEVBQUMsSUFBSSxDQUFDLENBQUE7UUFFbkMsSUFBSSxRQUFRLEtBQUssS0FBSyxDQUFDLEVBQUU7WUFDdkIsQ0FBQztZQUFDLFVBQVUsQ0FBQyxRQUFvQixHQUFHLFFBQVEsQ0FBQTtTQUM3QztRQUVELE9BQU8sVUFBVSxDQUFBO0lBQ25CLENBQUMsQ0FBQyxDQUFBO0lBRUosT0FBTztRQUNMLFFBQVE7UUFDUixvQkFBb0IsRUFBRSxRQUFRLENBQUMsb0JBQW9CO0tBQ3BELENBQUE7QUFDSCxDQUFDLENBQUE7QUE5QlksUUFBQSwwQkFBMEIsOEJBOEJ0QyJ9
|
|
@@ -1,18 +1,15 @@
|
|
|
1
1
|
import { ShadowsocksrNodeConfig, ShadowsocksrSubscribeProviderConfig, SubscriptionUserinfo } from '../types';
|
|
2
2
|
import Provider from './Provider';
|
|
3
|
+
import { GetNodeListFunction, GetSubscriptionUserInfoFunction } from './types';
|
|
3
4
|
export default class ShadowsocksrSubscribeProvider extends Provider {
|
|
5
|
+
#private;
|
|
4
6
|
readonly udpRelay?: boolean;
|
|
5
|
-
private readonly _url;
|
|
6
7
|
constructor(name: string, config: ShadowsocksrSubscribeProviderConfig);
|
|
7
8
|
get url(): string;
|
|
8
|
-
getSubscriptionUserInfo
|
|
9
|
-
|
|
10
|
-
}): Promise<SubscriptionUserinfo | undefined>;
|
|
11
|
-
getNodeList({ requestUserAgent, }?: {
|
|
12
|
-
requestUserAgent?: string;
|
|
13
|
-
}): Promise<ReadonlyArray<ShadowsocksrNodeConfig>>;
|
|
9
|
+
getSubscriptionUserInfo: GetSubscriptionUserInfoFunction;
|
|
10
|
+
getNodeList: GetNodeListFunction;
|
|
14
11
|
}
|
|
15
12
|
export declare const getShadowsocksrSubscription: (url: string, udpRelay?: boolean, requestUserAgent?: string) => Promise<{
|
|
16
|
-
readonly nodeList:
|
|
13
|
+
readonly nodeList: Array<ShadowsocksrNodeConfig>;
|
|
17
14
|
readonly subscriptionUserinfo?: SubscriptionUserinfo | undefined;
|
|
18
15
|
}>;
|
|
@@ -4,9 +4,9 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
exports.getShadowsocksrSubscription = void 0;
|
|
7
|
-
const joi_1 = __importDefault(require("joi"));
|
|
8
7
|
const logger_1 = require("@surgio/logger");
|
|
9
8
|
const assert_1 = __importDefault(require("assert"));
|
|
9
|
+
const zod_1 = require("zod");
|
|
10
10
|
const utils_1 = require("../utils");
|
|
11
11
|
const relayable_url_1 = __importDefault(require("../utils/relayable-url"));
|
|
12
12
|
const subscription_1 = require("../utils/subscription");
|
|
@@ -16,40 +16,46 @@ const logger = (0, logger_1.createLogger)({
|
|
|
16
16
|
service: 'surgio:ShadowsocksrSubscribeProvider',
|
|
17
17
|
});
|
|
18
18
|
class ShadowsocksrSubscribeProvider extends Provider_1.default {
|
|
19
|
+
udpRelay;
|
|
20
|
+
#originalUrl;
|
|
19
21
|
constructor(name, config) {
|
|
20
22
|
super(name, config);
|
|
21
|
-
const schema =
|
|
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.getShadowsocksrSubscription)(this.url, this.udpRelay, requestUserAgent);
|
|
44
43
|
if (subscriptionUserinfo) {
|
|
45
44
|
return subscriptionUserinfo;
|
|
46
45
|
}
|
|
47
46
|
return undefined;
|
|
48
|
-
}
|
|
49
|
-
async
|
|
50
|
-
const
|
|
47
|
+
};
|
|
48
|
+
getNodeList = async (params = {}) => {
|
|
49
|
+
const requestUserAgent = this.determineRequestUserAgent(params.requestUserAgent);
|
|
50
|
+
const { nodeList } = await (0, exports.getShadowsocksrSubscription)(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 = ShadowsocksrSubscribeProvider;
|
|
55
61
|
const getShadowsocksrSubscription = async (url, udpRelay, requestUserAgent) => {
|
|
@@ -63,7 +69,8 @@ const getShadowsocksrSubscription = async (url, udpRelay, requestUserAgent) => {
|
|
|
63
69
|
.map((str) => {
|
|
64
70
|
const nodeConfig = (0, ssr_1.parseSSRUri)(str);
|
|
65
71
|
if (udpRelay !== void 0) {
|
|
66
|
-
|
|
72
|
+
;
|
|
73
|
+
nodeConfig.udpRelay = udpRelay;
|
|
67
74
|
}
|
|
68
75
|
return nodeConfig;
|
|
69
76
|
});
|
|
@@ -80,4 +87,4 @@ const getShadowsocksrSubscription = async (url, udpRelay, requestUserAgent) => {
|
|
|
80
87
|
};
|
|
81
88
|
};
|
|
82
89
|
exports.getShadowsocksrSubscription = getShadowsocksrSubscription;
|
|
83
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
90
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2hhZG93c29ja3NyU3Vic2NyaWJlUHJvdmlkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcHJvdmlkZXIvU2hhZG93c29ja3NyU3Vic2NyaWJlUHJvdmlkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsMkNBQTZDO0FBQzdDLG9EQUEyQjtBQUMzQiw2QkFBdUI7QUFPdkIsb0NBQXFDO0FBQ3JDLDJFQUFpRDtBQUNqRCx3REFBNkQ7QUFDN0Qsc0NBQTBDO0FBQzFDLDBEQUFpQztBQUdqQyxNQUFNLE1BQU0sR0FBRyxJQUFBLHFCQUFZLEVBQUM7SUFDMUIsT0FBTyxFQUFFLHNDQUFzQztDQUNoRCxDQUFDLENBQUE7QUFFRixNQUFxQiw2QkFBOEIsU0FBUSxrQkFBUTtJQUNqRCxRQUFRLENBQVU7SUFDekIsWUFBWSxDQUFRO0lBRTdCLFlBQVksSUFBWSxFQUFFLE1BQTJDO1FBQ25FLEtBQUssQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUE7UUFFbkIsTUFBTSxNQUFNLEdBQUcsT0FBQyxDQUFDLE1BQU0sQ0FBQztZQUN0QixHQUFHLEVBQUUsT0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsRUFBRTtZQUNyQixRQUFRLEVBQUUsT0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDLFFBQVEsRUFBRTtTQUNqQyxDQUFDLENBQUE7UUFDRixNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFBO1FBRXZDLHVCQUF1QjtRQUN2QixJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRTtZQUNuQixNQUFNLE1BQU0sQ0FBQyxLQUFLLENBQUE7U0FDbkI7UUFFRCxJQUFJLENBQUMsWUFBWSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFBO1FBQ25DLElBQUksQ0FBQyxRQUFRLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUE7UUFDcEMsSUFBSSxDQUFD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
|
|
@@ -1,19 +1,16 @@
|
|
|
1
1
|
import { ShadowsocksNodeConfig, SsdProviderConfig, SubscriptionUserinfo } from '../types';
|
|
2
2
|
import Provider from './Provider';
|
|
3
|
+
import { GetNodeListFunction, GetSubscriptionUserInfoFunction } from './types';
|
|
3
4
|
export default class SsdProvider extends Provider {
|
|
4
|
-
|
|
5
|
+
#private;
|
|
5
6
|
readonly udpRelay?: boolean;
|
|
6
7
|
constructor(name: string, config: SsdProviderConfig);
|
|
7
8
|
get url(): string;
|
|
8
|
-
getSubscriptionUserInfo
|
|
9
|
-
|
|
10
|
-
}): Promise<SubscriptionUserinfo | undefined>;
|
|
11
|
-
getNodeList({ requestUserAgent, }?: {
|
|
12
|
-
requestUserAgent?: string;
|
|
13
|
-
}): Promise<ReadonlyArray<ShadowsocksNodeConfig>>;
|
|
9
|
+
getSubscriptionUserInfo: GetSubscriptionUserInfoFunction;
|
|
10
|
+
getNodeList: GetNodeListFunction;
|
|
14
11
|
}
|
|
15
12
|
export declare const getSsdSubscription: (url: string, udpRelay?: boolean, requestUserAgent?: string) => Promise<{
|
|
16
|
-
readonly nodeList:
|
|
13
|
+
readonly nodeList: Array<ShadowsocksNodeConfig>;
|
|
17
14
|
readonly subscriptionUserinfo?: SubscriptionUserinfo | undefined;
|
|
18
15
|
}>;
|
|
19
16
|
export declare const parseSsdConfig: (globalConfig: SsdSubscription, server: SsdServer, udpRelay?: boolean) => ShadowsocksNodeConfig | undefined;
|