surgio 2.16.0 → 2.18.1
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/CHANGELOG.md +27 -0
- package/build/generator/artifact.d.ts +3 -1
- package/build/generator/artifact.js +7 -5
- package/build/index.d.ts +2 -1
- package/build/index.js +6 -3
- package/build/provider/ClashProvider.d.ts +12 -3
- package/build/provider/ClashProvider.js +17 -8
- package/build/provider/Provider.d.ts +7 -2
- package/build/provider/Provider.js +37 -10
- package/build/provider/ShadowsocksJsonSubscribeProvider.d.ts +5 -3
- package/build/provider/ShadowsocksJsonSubscribeProvider.js +42 -4
- package/build/provider/ShadowsocksSubscribeProvider.d.ts +7 -3
- package/build/provider/ShadowsocksSubscribeProvider.js +9 -7
- package/build/provider/ShadowsocksrSubscribeProvider.d.ts +7 -3
- package/build/provider/ShadowsocksrSubscribeProvider.js +9 -7
- package/build/provider/SsdProvider.d.ts +7 -3
- package/build/provider/SsdProvider.js +9 -7
- package/build/provider/TrojanProvider.d.ts +12 -3
- package/build/provider/TrojanProvider.js +17 -7
- package/build/provider/V2rayNSubscribeProvider.d.ts +11 -2
- package/build/provider/V2rayNSubscribeProvider.js +16 -14
- package/build/types.d.ts +2 -1
- package/build/utils/cache.d.ts +4 -3
- package/build/utils/cache.js +17 -9
- package/build/utils/clash.d.ts +1 -1
- package/build/utils/dns.js +5 -5
- package/build/utils/env-flag.js +1 -1
- package/build/utils/index.d.ts +3 -2
- package/build/utils/index.js +7 -41
- package/build/utils/patch-proxy.js +7 -2
- package/build/utils/surge.d.ts +1 -1
- package/package.json +2 -3
|
@@ -38,15 +38,15 @@ class ShadowsocksSubscribeProvider extends Provider_1.default {
|
|
|
38
38
|
get url() {
|
|
39
39
|
return (0, relayable_url_1.default)(this._url, this.relayUrl);
|
|
40
40
|
}
|
|
41
|
-
async getSubscriptionUserInfo() {
|
|
42
|
-
const { subscriptionUserinfo } = await (0, exports.getShadowsocksSubscription)(this.url, this.udpRelay);
|
|
41
|
+
async getSubscriptionUserInfo({ requestUserAgent, } = {}) {
|
|
42
|
+
const { subscriptionUserinfo } = await (0, exports.getShadowsocksSubscription)(this.url, this.udpRelay, requestUserAgent || this.requestUserAgent);
|
|
43
43
|
if (subscriptionUserinfo) {
|
|
44
44
|
return subscriptionUserinfo;
|
|
45
45
|
}
|
|
46
46
|
return undefined;
|
|
47
47
|
}
|
|
48
|
-
async getNodeList() {
|
|
49
|
-
const { nodeList } = await (0, exports.getShadowsocksSubscription)(this.url, this.udpRelay);
|
|
48
|
+
async getNodeList({ requestUserAgent, } = {}) {
|
|
49
|
+
const { nodeList } = await (0, exports.getShadowsocksSubscription)(this.url, this.udpRelay, requestUserAgent || this.requestUserAgent);
|
|
50
50
|
return nodeList;
|
|
51
51
|
}
|
|
52
52
|
}
|
|
@@ -54,9 +54,11 @@ exports.default = ShadowsocksSubscribeProvider;
|
|
|
54
54
|
/**
|
|
55
55
|
* @see https://shadowsocks.org/en/spec/SIP002-URI-Scheme.html
|
|
56
56
|
*/
|
|
57
|
-
const getShadowsocksSubscription = async (url, udpRelay) => {
|
|
57
|
+
const getShadowsocksSubscription = async (url, udpRelay, requestUserAgent) => {
|
|
58
58
|
(0, assert_1.default)(url, '未指定订阅地址 url');
|
|
59
|
-
const response = await Provider_1.default.requestCacheableResource(url
|
|
59
|
+
const response = await Provider_1.default.requestCacheableResource(url, {
|
|
60
|
+
requestUserAgent,
|
|
61
|
+
});
|
|
60
62
|
const nodeList = (0, utils_1.fromBase64)(response.body)
|
|
61
63
|
.split('\n')
|
|
62
64
|
.filter((item) => !!item && item.startsWith('ss://'))
|
|
@@ -73,4 +75,4 @@ const getShadowsocksSubscription = async (url, udpRelay) => {
|
|
|
73
75
|
};
|
|
74
76
|
};
|
|
75
77
|
exports.getShadowsocksSubscription = getShadowsocksSubscription;
|
|
76
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
78
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2hhZG93c29ja3NTdWJzY3JpYmVQcm92aWRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL2xpYi9wcm92aWRlci9TaGFkb3dzb2Nrc1N1YnNjcmliZVByb3ZpZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLDhDQUFzQjtBQUN0QixvREFBNEI7QUFDNUIsMkNBQThDO0FBTzlDLG9DQUFzQztBQUN0QywyRUFBa0Q7QUFDbEQsb0NBQXlDO0FBQ3pDLDBEQUFrQztBQUVsQyxNQUFNLE1BQU0sR0FBRyxJQUFBLHFCQUFZLEVBQUM7SUFDMUIsT0FBTyxFQUFFLHFDQUFxQztDQUMvQyxDQUFDLENBQUM7QUFFSCxNQUFxQiw0QkFBNkIsU0FBUSxrQkFBUTtJQUloRSxZQUFZLElBQVksRUFBRSxNQUEwQztRQUNsRSxLQUFLLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBRXBCLE1BQU0sTUFBTSxHQUFHLGFBQUcsQ0FBQyxNQUFNLENBQUM7WUFDeEIsR0FBRyxFQUFFLGFBQUcsQ0FBQyxNQUFNLEVBQUU7aUJBQ2QsR0FBRyxDQUFDO2dCQUNILE1BQU0sRUFBRSxDQUFDLFFBQVEsQ0FBQzthQUNuQixDQUFDO2lCQUNELFFBQVEsRUFBRTtZQUNiLFFBQVEsRUFBRSxhQUFHLENBQUMsT0FBTyxFQUFFLENBQUMsTUFBTSxFQUFFO1NBQ2pDLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUViLE1BQU0sRUFBRSxLQUFLLEVBQUUsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBRTFDLHVCQUF1QjtRQUN2QixJQUFJLEtBQUssRUFBRTtZQUNULE1BQU0sS0FBSyxDQUFDO1NBQ2I7UUFFRCxJQUFJLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUM7UUFDdkIsSUFBSSxDQUFDLFFBQVEsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDO1FBQ2hDLElBQUksQ0FBQyw4QkFBOEIsR0FBRyxJQUFJLENBQUM7SUFDN0MsQ0FBQztJQUVELHVCQUF1QjtJQUN2QixJQUFXLEdBQUc7UUFDWixPQUFPLElBQUEsdUJBQVksRUFBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUNoRCxDQUFDO0lBRU0sS0FBSyxDQUFDLHVCQUF1QixDQUFDLEVBQ25DLGdCQUFnQixNQUNpQixFQUFFO1FBR25DLE1BQU0sRUFBRSxvQkFBb0IsRUFBRSxHQUFHLE1BQU0sSUFBQSxrQ0FBMEIsRUFDL0QsSUFBSSxDQUFDLEdBQUcsRUFDUixJQUFJLENBQUMsUUFBUSxFQUNiLGdCQUFnQixJQUFJLElBQUksQ0FBQyxnQkFBZ0IsQ0FDMUMsQ0FBQztRQUVGLElBQUksb0JBQW9CLEVBQUU7WUFDeEIsT0FBTyxvQkFBb0IsQ0FBQztTQUM3QjtRQUNELE9BQU8sU0FBUyxDQUFDO0lBQ25CLENBQUM7SUFFTSxLQUFLLENBQUMsV0FBVyxDQUFDLEVBQ3ZCLGdCQUFnQixNQUNpQixFQUFFO1FBR25DLE1BQU0sRUFBRSxRQUFRLEVBQUUsR0FBRyxNQUFNLElBQUEsa0NBQTBCLEVBQ25ELElBQUksQ0FBQyxHQUFHLEVBQ1IsSUFBSSxDQUFDLFFBQVEsRUFDYixnQkFBZ0IsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLENBQzFDLENBQUM7UUFFRixPQUFPLFFBQVEsQ0FBQztJQUNsQixDQUFDO0NBQ0Y7QUEvREQsK0NBK0RDO0FBRUQ7O0dBRUc7QUFDSSxNQUFNLDBCQUEwQixHQUFHLEtBQUssRUFDN0MsR0FBVyxFQUNYLFFBQWtCLEVBQ2xCLGdCQUF5QixFQUl4QixFQUFFO0lBQ0gsSUFBQSxnQkFBTSxFQUFDLEdBQUcsRUFBRSxhQUFhLENBQUMsQ0FBQztJQUUzQixNQUFNLFFBQVEsR0FBRyxNQUFNLGtCQUFRLENBQUMsd0JBQXdCLENBQUMsR0FBRyxFQUFFO1FBQzVELGdCQUFnQjtLQUNqQixDQUFDLENBQUM7SUFDSCxNQUFNLFFBQVEsR0FBRyxJQUFBLGtCQUFVLEVBQUMsUUFBUSxDQUFDLElBQUksQ0FBQztTQUN2QyxLQUFLLENBQUMsSUFBSSxDQUFDO1NBQ1gsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUM7U0FDcEQsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUF5QixFQUFFO1FBQ25DLE1BQU0sVUFBVSxHQUFHLElBQUEsZUFBVSxFQUFDLElBQUksQ0FBQyxDQUFDO1FBRXBDLElBQUksUUFBUSxLQUFLLEtBQUssQ0FBQyxFQUFFO1lBQ3RCLFVBQVUsQ0FBQyxXQUFXLENBQWEsR0FBRyxRQUFRLENBQUM7U0FDakQ7UUFFRCxPQUFPLFVBQVUsQ0FBQztJQUNwQixDQUFDLENBQUMsQ0FBQztJQUVMLE9BQU87UUFDTCxRQUFRO1FBQ1Isb0JBQW9CLEVBQUUsUUFBUSxDQUFDLG9CQUFvQjtLQUNwRCxDQUFDO0FBQ0osQ0FBQyxDQUFDO0FBOUJXLFFBQUEsMEJBQTBCLDhCQThCckMifQ==
|
|
@@ -5,10 +5,14 @@ export default class ShadowsocksrSubscribeProvider extends Provider {
|
|
|
5
5
|
private readonly _url;
|
|
6
6
|
constructor(name: string, config: ShadowsocksrSubscribeProviderConfig);
|
|
7
7
|
get url(): string;
|
|
8
|
-
getSubscriptionUserInfo(
|
|
9
|
-
|
|
8
|
+
getSubscriptionUserInfo({ requestUserAgent, }?: {
|
|
9
|
+
requestUserAgent?: string;
|
|
10
|
+
}): Promise<SubscriptionUserinfo | undefined>;
|
|
11
|
+
getNodeList({ requestUserAgent, }?: {
|
|
12
|
+
requestUserAgent?: string;
|
|
13
|
+
}): Promise<ReadonlyArray<ShadowsocksrNodeConfig>>;
|
|
10
14
|
}
|
|
11
|
-
export declare const getShadowsocksrSubscription: (url: string, udpRelay?: boolean | undefined) => Promise<{
|
|
15
|
+
export declare const getShadowsocksrSubscription: (url: string, udpRelay?: boolean | undefined, requestUserAgent?: string | undefined) => Promise<{
|
|
12
16
|
readonly nodeList: ReadonlyArray<ShadowsocksrNodeConfig>;
|
|
13
17
|
readonly subscriptionUserinfo?: SubscriptionUserinfo | undefined;
|
|
14
18
|
}>;
|
|
@@ -39,22 +39,24 @@ class ShadowsocksrSubscribeProvider extends Provider_1.default {
|
|
|
39
39
|
get url() {
|
|
40
40
|
return (0, relayable_url_1.default)(this._url, this.relayUrl);
|
|
41
41
|
}
|
|
42
|
-
async getSubscriptionUserInfo() {
|
|
43
|
-
const { subscriptionUserinfo } = await (0, exports.getShadowsocksrSubscription)(this.url, this.udpRelay);
|
|
42
|
+
async getSubscriptionUserInfo({ requestUserAgent, } = {}) {
|
|
43
|
+
const { subscriptionUserinfo } = await (0, exports.getShadowsocksrSubscription)(this.url, this.udpRelay, requestUserAgent || this.requestUserAgent);
|
|
44
44
|
if (subscriptionUserinfo) {
|
|
45
45
|
return subscriptionUserinfo;
|
|
46
46
|
}
|
|
47
47
|
return undefined;
|
|
48
48
|
}
|
|
49
|
-
async getNodeList() {
|
|
50
|
-
const { nodeList } = await (0, exports.getShadowsocksrSubscription)(this.url, this.udpRelay);
|
|
49
|
+
async getNodeList({ requestUserAgent, } = {}) {
|
|
50
|
+
const { nodeList } = await (0, exports.getShadowsocksrSubscription)(this.url, this.udpRelay, requestUserAgent || this.requestUserAgent);
|
|
51
51
|
return nodeList;
|
|
52
52
|
}
|
|
53
53
|
}
|
|
54
54
|
exports.default = ShadowsocksrSubscribeProvider;
|
|
55
|
-
const getShadowsocksrSubscription = async (url, udpRelay) => {
|
|
55
|
+
const getShadowsocksrSubscription = async (url, udpRelay, requestUserAgent) => {
|
|
56
56
|
(0, assert_1.default)(url, '未指定订阅地址 url');
|
|
57
|
-
const response = await Provider_1.default.requestCacheableResource(url
|
|
57
|
+
const response = await Provider_1.default.requestCacheableResource(url, {
|
|
58
|
+
requestUserAgent,
|
|
59
|
+
});
|
|
58
60
|
const nodeList = (0, utils_1.fromBase64)(response.body)
|
|
59
61
|
.split('\n')
|
|
60
62
|
.filter((item) => !!item && item.startsWith('ssr://'))
|
|
@@ -78,4 +80,4 @@ const getShadowsocksrSubscription = async (url, udpRelay) => {
|
|
|
78
80
|
};
|
|
79
81
|
};
|
|
80
82
|
exports.getShadowsocksrSubscription = getShadowsocksrSubscription;
|
|
81
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
83
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2hhZG93c29ja3NyU3Vic2NyaWJlUHJvdmlkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9saWIvcHJvdmlkZXIvU2hhZG93c29ja3NyU3Vic2NyaWJlUHJvdmlkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsOENBQXNCO0FBQ3RCLDJDQUE4QztBQUM5QyxvREFBNEI7QUFPNUIsb0NBQXNDO0FBQ3RDLDJFQUFrRDtBQUNsRCx3REFBOEQ7QUFDOUQsc0NBQTJDO0FBQzNDLDBEQUFrQztBQUVsQyxNQUFNLE1BQU0sR0FBRyxJQUFBLHFCQUFZLEVBQUM7SUFDMUIsT0FBTyxFQUFFLHNDQUFzQztDQUNoRCxDQUFDLENBQUM7QUFFSCxNQUFxQiw2QkFBOEIsU0FBUSxrQkFBUTtJQUlqRSxZQUFZLElBQVksRUFBRSxNQUEyQztRQUNuRSxLQUFLLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBRXBCLE1BQU0sTUFBTSxHQUFHLGFBQUcsQ0FBQyxNQUFNLENBQUM7WUFDeEIsR0FBRyxFQUFFLGFBQUcsQ0FBQyxNQUFNLEVBQUU7aUJBQ2QsR0FBRyxDQUFDO2dCQUNILE1BQU0sRUFBRSxDQUFDLFFBQVEsQ0FBQzthQUNuQixDQUFDO2lCQUNELFFBQVEsRUFBRTtZQUNiLFFBQVEsRUFBRSxhQUFHLENBQUMsT0FBTyxFQUFFLENBQUMsTUFBTSxFQUFFO1NBQ2pDLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUViLE1BQU0sRUFBRSxLQUFLLEVBQUUsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBRTFDLHVCQUF1QjtRQUN2QixJQUFJLEtBQUssRUFBRTtZQUNULE1BQU0sS0FBSyxDQUFDO1NBQ2I7UUFFRCxJQUFJLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUM7UUFDdkIsSUFBSSxDQUFDLFFBQVEsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDO1FBQ2hDLElBQUks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
|
|
@@ -5,10 +5,14 @@ export default class SsdProvider extends Provider {
|
|
|
5
5
|
readonly udpRelay?: boolean;
|
|
6
6
|
constructor(name: string, config: SsdProviderConfig);
|
|
7
7
|
get url(): string;
|
|
8
|
-
getSubscriptionUserInfo(
|
|
9
|
-
|
|
8
|
+
getSubscriptionUserInfo({ requestUserAgent, }?: {
|
|
9
|
+
requestUserAgent?: string;
|
|
10
|
+
}): Promise<SubscriptionUserinfo | undefined>;
|
|
11
|
+
getNodeList({ requestUserAgent, }?: {
|
|
12
|
+
requestUserAgent?: string;
|
|
13
|
+
}): Promise<ReadonlyArray<ShadowsocksNodeConfig>>;
|
|
10
14
|
}
|
|
11
|
-
export declare const getSsdSubscription: (url: string, udpRelay?: boolean | undefined) => Promise<{
|
|
15
|
+
export declare const getSsdSubscription: (url: string, udpRelay?: boolean | undefined, requestUserAgent?: string | undefined) => Promise<{
|
|
12
16
|
readonly nodeList: ReadonlyArray<ShadowsocksNodeConfig>;
|
|
13
17
|
readonly subscriptionUserinfo?: SubscriptionUserinfo | undefined;
|
|
14
18
|
}>;
|
|
@@ -39,23 +39,25 @@ class SsdProvider extends Provider_1.default {
|
|
|
39
39
|
get url() {
|
|
40
40
|
return (0, relayable_url_1.default)(this._url, this.relayUrl);
|
|
41
41
|
}
|
|
42
|
-
async getSubscriptionUserInfo() {
|
|
43
|
-
const { subscriptionUserinfo } = await (0, exports.getSsdSubscription)(this.url, this.udpRelay);
|
|
42
|
+
async getSubscriptionUserInfo({ requestUserAgent, } = {}) {
|
|
43
|
+
const { subscriptionUserinfo } = await (0, exports.getSsdSubscription)(this.url, this.udpRelay, requestUserAgent || this.requestUserAgent);
|
|
44
44
|
if (subscriptionUserinfo) {
|
|
45
45
|
return subscriptionUserinfo;
|
|
46
46
|
}
|
|
47
47
|
return void 0;
|
|
48
48
|
}
|
|
49
|
-
async getNodeList() {
|
|
50
|
-
const { nodeList } = await (0, exports.getSsdSubscription)(this.url, this.udpRelay);
|
|
49
|
+
async getNodeList({ requestUserAgent, } = {}) {
|
|
50
|
+
const { nodeList } = await (0, exports.getSsdSubscription)(this.url, this.udpRelay, requestUserAgent || this.requestUserAgent);
|
|
51
51
|
return nodeList;
|
|
52
52
|
}
|
|
53
53
|
}
|
|
54
54
|
exports.default = SsdProvider;
|
|
55
55
|
// 协议定义:https://github.com/TheCGDF/SSD-Windows/wiki/HTTP%E8%AE%A2%E9%98%85%E5%8D%8F%E5%AE%9A
|
|
56
|
-
const getSsdSubscription = async (url, udpRelay) => {
|
|
56
|
+
const getSsdSubscription = async (url, udpRelay, requestUserAgent) => {
|
|
57
57
|
(0, assert_1.default)(url, '未指定订阅地址 url');
|
|
58
|
-
const response = await Provider_1.default.requestCacheableResource(url
|
|
58
|
+
const response = await Provider_1.default.requestCacheableResource(url, {
|
|
59
|
+
requestUserAgent,
|
|
60
|
+
});
|
|
59
61
|
// istanbul ignore next
|
|
60
62
|
if (!response.body.startsWith('ssd://')) {
|
|
61
63
|
throw new Error(`暂仅支持 ssd:// 开头的订阅地址,${url} 无法处理`);
|
|
@@ -113,4 +115,4 @@ const parseSsdConfig = (globalConfig, server, udpRelay) => {
|
|
|
113
115
|
: null));
|
|
114
116
|
};
|
|
115
117
|
exports.parseSsdConfig = parseSsdConfig;
|
|
116
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
118
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU3NkUHJvdmlkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9saWIvcHJvdmlkZXIvU3NkUHJvdmlkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsOENBQXNCO0FBQ3RCLDJDQUE4QztBQUM5QyxvREFBNEI7QUFDNUIsa0RBQTBCO0FBRTFCLG9DQUtrQjtBQUNsQixvQ0FBd0Q7QUFDeEQsMkVBQWtEO0FBQ2xELDBEQUFrQztBQUVsQyxNQUFNLE1BQU0sR0FBRyxJQUFBLHFCQUFZLEVBQUM7SUFDMUIsT0FBTyxFQUFFLG9CQUFvQjtDQUM5QixDQUFDLENBQUM7QUFFSCxNQUFxQixXQUFZLFNBQVEsa0JBQVE7SUFJL0MsWUFBWSxJQUFZLEVBQUUsTUFBeUI7UUFDakQsS0FBSyxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztRQUVwQixNQUFNLE1BQU0sR0FBRyxhQUFHLENBQUMsTUFBTSxDQUFDO1lBQ3hCLEdBQUcsRUFBRSxhQUFHLENBQUMsTUFBTSxFQUFFO2lCQUNkLEdBQUcsQ0FBQztnQkFDSCxNQUFNLEVBQUUsQ0FBQyxRQUFRLENBQUM7YUFDbkIsQ0FBQztpQkFDRCxRQUFRLEVBQUU7WUFDYixRQUFRLEVBQUUsYUFBRyxDQUFDLE9BQU8sRUFBRSxDQUFDLE1BQU0sRUFBRTtTQUNqQyxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUM7UUFFYixNQUFNLEVBQUUsS0FBSyxFQUFFLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUUxQyx1QkFBdUI7UUFDdkIsSUFBSSxLQUFLLEVBQUU7WUFDVCxNQUFNLEtBQUssQ0FBQztTQUNiO1FBRUQsSUFBSSxDQUFDLElBQUksR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxRQUFRLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQztRQUNoQyxJQUFJLENBQUMsOEJBQThCLEdBQUcsSUFBSSxDQUFDO0lBQzdDLENBQUM7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
|
|
@@ -6,13 +6,22 @@ export default class TrojanProvider extends Provider {
|
|
|
6
6
|
readonly tls13?: boolean;
|
|
7
7
|
constructor(name: string, config: TrojanProviderConfig);
|
|
8
8
|
get url(): string;
|
|
9
|
-
getSubscriptionUserInfo(
|
|
10
|
-
|
|
9
|
+
getSubscriptionUserInfo({ requestUserAgent, }?: {
|
|
10
|
+
requestUserAgent?: string;
|
|
11
|
+
}): Promise<SubscriptionUserinfo | undefined>;
|
|
12
|
+
getNodeList({ requestUserAgent, }?: {
|
|
13
|
+
requestUserAgent?: string;
|
|
14
|
+
}): Promise<ReadonlyArray<TrojanNodeConfig>>;
|
|
11
15
|
}
|
|
12
16
|
/**
|
|
13
17
|
* @see https://github.com/trojan-gfw/trojan-url/blob/master/trojan-url.py
|
|
14
18
|
*/
|
|
15
|
-
export declare const getTrojanSubscription: (url
|
|
19
|
+
export declare const getTrojanSubscription: ({ url, udpRelay, tls13, requestUserAgent, }: {
|
|
20
|
+
url: string;
|
|
21
|
+
udpRelay?: boolean | undefined;
|
|
22
|
+
tls13?: boolean | undefined;
|
|
23
|
+
requestUserAgent?: string | undefined;
|
|
24
|
+
}) => Promise<{
|
|
16
25
|
readonly nodeList: ReadonlyArray<TrojanNodeConfig>;
|
|
17
26
|
readonly subscriptionUserinfo?: SubscriptionUserinfo | undefined;
|
|
18
27
|
}>;
|
|
@@ -40,15 +40,25 @@ class TrojanProvider extends Provider_1.default {
|
|
|
40
40
|
get url() {
|
|
41
41
|
return (0, relayable_url_1.default)(this._url, this.relayUrl);
|
|
42
42
|
}
|
|
43
|
-
async getSubscriptionUserInfo() {
|
|
44
|
-
const { subscriptionUserinfo } = await (0, exports.getTrojanSubscription)(
|
|
43
|
+
async getSubscriptionUserInfo({ requestUserAgent, } = {}) {
|
|
44
|
+
const { subscriptionUserinfo } = await (0, exports.getTrojanSubscription)({
|
|
45
|
+
url: this.url,
|
|
46
|
+
udpRelay: this.udpRelay,
|
|
47
|
+
tls13: this.tls13,
|
|
48
|
+
requestUserAgent: requestUserAgent || this.requestUserAgent,
|
|
49
|
+
});
|
|
45
50
|
if (subscriptionUserinfo) {
|
|
46
51
|
return subscriptionUserinfo;
|
|
47
52
|
}
|
|
48
53
|
return void 0;
|
|
49
54
|
}
|
|
50
|
-
async getNodeList() {
|
|
51
|
-
const { nodeList } = await (0, exports.getTrojanSubscription)(
|
|
55
|
+
async getNodeList({ requestUserAgent, } = {}) {
|
|
56
|
+
const { nodeList } = await (0, exports.getTrojanSubscription)({
|
|
57
|
+
url: this.url,
|
|
58
|
+
udpRelay: this.udpRelay,
|
|
59
|
+
tls13: this.tls13,
|
|
60
|
+
requestUserAgent: requestUserAgent || this.requestUserAgent,
|
|
61
|
+
});
|
|
52
62
|
return nodeList;
|
|
53
63
|
}
|
|
54
64
|
}
|
|
@@ -56,10 +66,10 @@ exports.default = TrojanProvider;
|
|
|
56
66
|
/**
|
|
57
67
|
* @see https://github.com/trojan-gfw/trojan-url/blob/master/trojan-url.py
|
|
58
68
|
*/
|
|
59
|
-
const getTrojanSubscription = async (url, udpRelay, tls13) => {
|
|
69
|
+
const getTrojanSubscription = async ({ url, udpRelay, tls13, requestUserAgent, }) => {
|
|
60
70
|
(0, assert_1.default)(url, '未指定订阅地址 url');
|
|
61
71
|
const response = await Provider_1.default.requestCacheableResource(url, {
|
|
62
|
-
requestUserAgent: 'shadowrocket',
|
|
72
|
+
requestUserAgent: requestUserAgent || 'shadowrocket',
|
|
63
73
|
});
|
|
64
74
|
const config = (0, utils_1.fromBase64)(response.body);
|
|
65
75
|
const nodeList = config
|
|
@@ -75,4 +85,4 @@ const getTrojanSubscription = async (url, udpRelay, tls13) => {
|
|
|
75
85
|
};
|
|
76
86
|
};
|
|
77
87
|
exports.getTrojanSubscription = getTrojanSubscription;
|
|
78
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
88
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVHJvamFuUHJvdmlkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9saWIvcHJvdmlkZXIvVHJvamFuUHJvdmlkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsOENBQXNCO0FBQ3RCLG9EQUE0QjtBQUM1QiwyQ0FBOEM7QUFPOUMsb0NBQXNDO0FBQ3RDLDJFQUFrRDtBQUNsRCw0Q0FBaUQ7QUFDakQsMERBQWtDO0FBRWxDLE1BQU0sTUFBTSxHQUFHLElBQUEscUJBQVksRUFBQztJQUMxQixPQUFPLEVBQUUsdUJBQXVCO0NBQ2pDLENBQUMsQ0FBQztBQUVILE1BQXFCLGNBQWUsU0FBUSxrQkFBUTtJQUtsRCxZQUFZLElBQVksRUFBRSxNQUE0QjtRQUNwRCxLQUFLLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBRXBCLE1BQU0sTUFBTSxHQUFHLGFBQUcsQ0FBQyxNQUFNLENBQUM7WUFDeEIsR0FBRyxFQUFFLGFBQUcsQ0FBQyxNQUFNLEVBQUU7aUJBQ2QsR0FBRyxDQUFDO2dCQUNILE1BQU0sRUFBRSxDQUFDLFFBQVEsQ0FBQzthQUNuQixDQUFDO2lCQUNELFFBQVEsRUFBRTtZQUNiLFFBQVEsRUFBRSxhQUFHLENBQUMsSUFBSSxFQUFFLENBQUMsTUFBTSxFQUFFO1lBQzdCLEtBQUssRUFBRSxhQUFHLENBQUMsSUFBSSxFQUFFLENBQUMsTUFBTSxFQUFFO1NBQzNCLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUViLE1BQU0sRUFBRSxLQUFLLEVBQUUsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBRTFDLHVCQUF1QjtRQUN2QixJQUFJLEtBQUssRUFBRTtZQUNULE1BQU0sS0FBSyxDQUFDO1NBQ2I7UUFFRCxJQUFJLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUM7UUFDdkIsSUFBSSxDQUFDLFFBQVEsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDO1FBQ2hD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
|
|
@@ -8,10 +8,19 @@ export default class V2rayNSubscribeProvider extends Provider {
|
|
|
8
8
|
private readonly _url;
|
|
9
9
|
constructor(name: string, config: V2rayNSubscribeProviderConfig);
|
|
10
10
|
get url(): string;
|
|
11
|
-
getNodeList(
|
|
11
|
+
getNodeList({ requestUserAgent, }?: {
|
|
12
|
+
requestUserAgent?: string;
|
|
13
|
+
}): ReturnType<typeof getV2rayNSubscription>;
|
|
12
14
|
}
|
|
13
15
|
/**
|
|
14
16
|
* @see https://github.com/2dust/v2rayN/wiki/%E5%88%86%E4%BA%AB%E9%93%BE%E6%8E%A5%E6%A0%BC%E5%BC%8F%E8%AF%B4%E6%98%8E(ver-2)
|
|
15
17
|
*/
|
|
16
|
-
export declare const getV2rayNSubscription: (url
|
|
18
|
+
export declare const getV2rayNSubscription: ({ url, isCompatibleMode, skipCertVerify, tls13, udpRelay, requestUserAgent, }: {
|
|
19
|
+
url: string;
|
|
20
|
+
isCompatibleMode?: boolean | undefined;
|
|
21
|
+
skipCertVerify?: boolean | undefined;
|
|
22
|
+
udpRelay?: boolean | undefined;
|
|
23
|
+
tls13?: boolean | undefined;
|
|
24
|
+
requestUserAgent?: string | undefined;
|
|
25
|
+
}) => Promise<ReadonlyArray<VmessNodeConfig | ShadowsocksNodeConfig>>;
|
|
17
26
|
export declare const parseJSONConfig: (json: string, isCompatibleMode: boolean | undefined, skipCertVerify?: boolean | undefined, udpRelay?: boolean | undefined, tls13?: boolean | undefined) => VmessNodeConfig | undefined;
|
|
@@ -9,8 +9,6 @@ const logger_1 = require("@surgio/logger");
|
|
|
9
9
|
const assert_1 = __importDefault(require("assert"));
|
|
10
10
|
const types_1 = require("../types");
|
|
11
11
|
const utils_1 = require("../utils");
|
|
12
|
-
const cache_1 = require("../utils/cache");
|
|
13
|
-
const http_client_1 = __importDefault(require("../utils/http-client"));
|
|
14
12
|
const relayable_url_1 = __importDefault(require("../utils/relayable-url"));
|
|
15
13
|
const ss_1 = require("../utils/ss");
|
|
16
14
|
const Provider_1 = __importDefault(require("./Provider"));
|
|
@@ -43,28 +41,32 @@ class V2rayNSubscribeProvider extends Provider_1.default {
|
|
|
43
41
|
get url() {
|
|
44
42
|
return (0, relayable_url_1.default)(this._url, this.relayUrl);
|
|
45
43
|
}
|
|
46
|
-
getNodeList() {
|
|
47
|
-
return (0, exports.getV2rayNSubscription)(
|
|
44
|
+
getNodeList({ requestUserAgent, } = {}) {
|
|
45
|
+
return (0, exports.getV2rayNSubscription)({
|
|
46
|
+
url: this.url,
|
|
47
|
+
skipCertVerify: this.skipCertVerify,
|
|
48
|
+
tls13: this.tls13,
|
|
49
|
+
udpRelay: this.udpRelay,
|
|
50
|
+
isCompatibleMode: this.compatibleMode,
|
|
51
|
+
requestUserAgent: requestUserAgent || this.requestUserAgent,
|
|
52
|
+
});
|
|
48
53
|
}
|
|
49
54
|
}
|
|
50
55
|
exports.default = V2rayNSubscribeProvider;
|
|
51
56
|
/**
|
|
52
57
|
* @see https://github.com/2dust/v2rayN/wiki/%E5%88%86%E4%BA%AB%E9%93%BE%E6%8E%A5%E6%A0%BC%E5%BC%8F%E8%AF%B4%E6%98%8E(ver-2)
|
|
53
58
|
*/
|
|
54
|
-
const getV2rayNSubscription = async (url, isCompatibleMode, skipCertVerify, udpRelay,
|
|
59
|
+
const getV2rayNSubscription = async ({ url, isCompatibleMode, skipCertVerify, tls13, udpRelay, requestUserAgent, }) => {
|
|
55
60
|
(0, assert_1.default)(url, '未指定订阅地址 url');
|
|
56
61
|
if (isCompatibleMode) {
|
|
57
62
|
logger_1.logger.warn('运行在兼容模式,请注意生成的节点是否正确。');
|
|
58
63
|
}
|
|
59
64
|
async function requestConfigFromRemote() {
|
|
60
|
-
const response =
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
return res.body;
|
|
66
|
-
})();
|
|
67
|
-
const configList = (0, utils_1.fromBase64)(response)
|
|
65
|
+
const response = await Provider_1.default.requestCacheableResource(url, {
|
|
66
|
+
requestUserAgent,
|
|
67
|
+
});
|
|
68
|
+
const configString = response.body;
|
|
69
|
+
const configList = (0, utils_1.fromBase64)(configString)
|
|
68
70
|
.split('\n')
|
|
69
71
|
.filter((item) => !!item)
|
|
70
72
|
.filter((item) => {
|
|
@@ -108,4 +110,4 @@ const parseJSONConfig = (json, isCompatibleMode, skipCertVerify, udpRelay, tls13
|
|
|
108
110
|
: null));
|
|
109
111
|
};
|
|
110
112
|
exports.parseJSONConfig = parseJSONConfig;
|
|
111
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
113
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVjJyYXlOU3Vic2NyaWJlUHJvdmlkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9saWIvcHJvdmlkZXIvVjJyYXlOU3Vic2NyaWJlUHJvdmlkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsOENBQXNCO0FBQ3RCLDJDQUF3QztBQUN4QyxvREFBNEI7QUFFNUIsb0NBS2tCO0FBQ2xCLG9DQUFzQztBQUN0QywyRUFBa0Q7QUFDbEQsb0NBQXlDO0FBQ3pDLDBEQUFrQztBQUVsQyxNQUFxQix1QkFBd0IsU0FBUSxrQkFBUTtJQVEzRCxZQUFZLElBQVksRUFBRSxNQUFxQztRQUM3RCxLQUFLLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBRXBCLE1BQU0sTUFBTSxHQUFHLGFBQUcsQ0FBQyxNQUFNLENBQUM7WUFDeEIsR0FBRyxFQUFFLGFBQUcsQ0FBQyxNQUFNLEVBQUU7aUJBQ2QsR0FBRyxDQUFDO2dCQUNILE1BQU0sRUFBRSxDQUFDLFFBQVEsQ0FBQzthQUNuQixDQUFDO2lCQUNELFFBQVEsRUFBRTtZQUNiLFFBQVEsRUFBRSxhQUFHLENBQUMsSUFBSSxFQUFFLENBQUMsTUFBTSxFQUFFO1lBQzdCLEtBQUssRUFBRSxhQUFHLENBQUMsSUFBSSxFQUFFLENBQUMsTUFBTSxFQUFFO1lBQzFCLGNBQWMsRUFBRSxhQUFHLENBQUMsSUFBSSxFQUFFLENBQUMsTUFBTSxFQUFFO1lBQ25DLGNBQWMsRUFBRSxhQUFHLENBQUMsSUFBSSxFQUFFLENBQUMsTUFBTSxFQUFFO1NBQ3BDLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUViLE1BQU0sRUFBRSxLQUFLLEVBQUUsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBRTFDLHVCQUF1QjtRQUN2QixJQUFJLEtBQUssRUFBRTtZQUNULE1BQU0sS0FBSyxDQUFDO1NBQ2I7UUFFRCxJQUFJLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQyxH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
|
package/build/types.d.ts
CHANGED
|
@@ -107,7 +107,8 @@ export interface ProviderConfig {
|
|
|
107
107
|
readonly tfo?: boolean;
|
|
108
108
|
readonly mptcp?: boolean;
|
|
109
109
|
readonly renameNode?: (name: string) => string;
|
|
110
|
-
readonly relayUrl?: boolean;
|
|
110
|
+
readonly relayUrl?: boolean | string;
|
|
111
|
+
readonly requestUserAgent?: string;
|
|
111
112
|
}
|
|
112
113
|
export interface BlackSSLProviderConfig extends ProviderConfig {
|
|
113
114
|
readonly username: string;
|
package/build/utils/cache.d.ts
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
|
-
import
|
|
1
|
+
import NodeCache from 'node-cache';
|
|
2
2
|
import { SubscriptionUserinfo } from '../types';
|
|
3
3
|
export interface SubsciptionCacheItem {
|
|
4
4
|
readonly body: string;
|
|
5
5
|
subscriptionUserinfo?: SubscriptionUserinfo;
|
|
6
6
|
}
|
|
7
|
-
export declare const ConfigCache:
|
|
8
|
-
export declare const SubscriptionCache:
|
|
7
|
+
export declare const ConfigCache: NodeCache;
|
|
8
|
+
export declare const SubscriptionCache: NodeCache;
|
|
9
|
+
export declare const cleanCaches: () => void;
|
package/build/utils/cache.js
CHANGED
|
@@ -3,15 +3,23 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.SubscriptionCache = exports.ConfigCache = void 0;
|
|
7
|
-
const
|
|
6
|
+
exports.cleanCaches = exports.SubscriptionCache = exports.ConfigCache = void 0;
|
|
7
|
+
const node_cache_1 = __importDefault(require("node-cache"));
|
|
8
8
|
const env_flag_1 = require("./env-flag");
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
9
|
+
const index_1 = require("./index");
|
|
10
|
+
exports.ConfigCache = new node_cache_1.default({
|
|
11
|
+
stdTTL: (0, index_1.msToSeconds)((0, env_flag_1.getProviderCacheMaxage)()),
|
|
12
|
+
maxKeys: 300,
|
|
13
|
+
useClones: false,
|
|
12
14
|
});
|
|
13
|
-
exports.SubscriptionCache = new
|
|
14
|
-
|
|
15
|
-
|
|
15
|
+
exports.SubscriptionCache = new node_cache_1.default({
|
|
16
|
+
stdTTL: (0, index_1.msToSeconds)((0, env_flag_1.getProviderCacheMaxage)()),
|
|
17
|
+
maxKeys: 300,
|
|
18
|
+
useClones: false,
|
|
16
19
|
});
|
|
17
|
-
|
|
20
|
+
const cleanCaches = () => {
|
|
21
|
+
exports.ConfigCache.flushAll();
|
|
22
|
+
exports.SubscriptionCache.flushAll();
|
|
23
|
+
};
|
|
24
|
+
exports.cleanCaches = cleanCaches;
|
|
25
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FjaGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9saWIvdXRpbHMvY2FjaGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsNERBQW1DO0FBR25DLHlDQUFvRDtBQUNwRCxtQ0FBc0M7QUFPekIsUUFBQSxXQUFXLEdBQUcsSUFBSSxvQkFBUyxDQUFDO0lBQ3ZDLE1BQU0sRUFBRSxJQUFBLG1CQUFXLEVBQUMsSUFBQSxpQ0FBc0IsR0FBRSxDQUFDO0lBQzdDLE9BQU8sRUFBRSxHQUFHO0lBQ1osU0FBUyxFQUFFLEtBQUs7Q0FDakIsQ0FBQyxDQUFDO0FBRVUsUUFBQSxpQkFBaUIsR0FBRyxJQUFJLG9CQUFTLENBQUM7SUFDN0MsTUFBTSxFQUFFLElBQUEsbUJBQVcsRUFBQyxJQUFBLGlDQUFzQixHQUFFLENBQUM7SUFDN0MsT0FBTyxFQUFFLEdBQUc7SUFDWixTQUFTLEVBQUUsS0FBSztDQUNqQixDQUFDLENBQUM7QUFFSSxNQUFNLFdBQVcsR0FBRyxHQUFHLEVBQUU7SUFDOUIsbUJBQVcsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUN2Qix5QkFBaUIsQ0FBQyxRQUFRLEVBQUUsQ0FBQztBQUMvQixDQUFDLENBQUM7QUFIVyxRQUFBLFdBQVcsZUFHdEIifQ==
|
package/build/utils/clash.d.ts
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import { NodeFilterType, NodeNameFilterType, PossibleNodeConfigType, SimpleNodeConfig, SortedNodeNameFilterType } from '../types';
|
|
2
|
-
export declare const getClashNodes: (list: ReadonlyArray<PossibleNodeConfigType>, filter?:
|
|
2
|
+
export declare const getClashNodes: (list: ReadonlyArray<PossibleNodeConfigType>, filter?: SortedNodeNameFilterType | NodeFilterType | undefined) => ReadonlyArray<any>;
|
|
3
3
|
export declare const getClashNodeNames: (list: ReadonlyArray<SimpleNodeConfig>, filter?: SortedNodeNameFilterType | NodeNameFilterType | undefined, existingProxies?: readonly string[] | undefined) => ReadonlyArray<string>;
|
package/build/utils/dns.js
CHANGED
|
@@ -5,12 +5,12 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
exports.resolve4And6 = exports.resolveDomain = void 0;
|
|
7
7
|
const dns_1 = require("dns");
|
|
8
|
-
const lru_cache_1 = __importDefault(require("lru-cache"));
|
|
9
8
|
const logger_1 = require("@surgio/logger");
|
|
10
9
|
const bluebird_1 = __importDefault(require("bluebird"));
|
|
10
|
+
const node_cache_1 = __importDefault(require("node-cache"));
|
|
11
11
|
const env_flag_1 = require("./env-flag");
|
|
12
|
-
const DomainCache = new
|
|
13
|
-
|
|
12
|
+
const DomainCache = new node_cache_1.default({
|
|
13
|
+
useClones: false,
|
|
14
14
|
});
|
|
15
15
|
const logger = (0, logger_1.createLogger)({ service: 'surgio:utils:dns' });
|
|
16
16
|
const resolveDomain = async (domain, timeout = (0, env_flag_1.getNetworkResolveTimeout)()) => {
|
|
@@ -26,7 +26,7 @@ const resolveDomain = async (domain, timeout = (0, env_flag_1.getNetworkResolveT
|
|
|
26
26
|
logger.debug(`resolved domain ${domain}: ${JSON.stringify(records)} ${Date.now() - now}ms`);
|
|
27
27
|
if (records.length) {
|
|
28
28
|
const address = records.map((item) => item.address);
|
|
29
|
-
DomainCache.set(domain, address, records[0].ttl
|
|
29
|
+
DomainCache.set(domain, address, records[0].ttl); // ttl is in seconds
|
|
30
30
|
return address;
|
|
31
31
|
}
|
|
32
32
|
// istanbul ignore next
|
|
@@ -45,4 +45,4 @@ const resolve4And6 = async (domain) => {
|
|
|
45
45
|
return [...ipv4, ...ipv6];
|
|
46
46
|
};
|
|
47
47
|
exports.resolve4And6 = resolve4And6;
|
|
48
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
48
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG5zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vbGliL3V0aWxzL2Rucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSw2QkFBcUQ7QUFDckQsMkNBQThDO0FBQzlDLHdEQUFnQztBQUNoQyw0REFBbUM7QUFFbkMseUNBQXNEO0FBRXRELE1BQU0sV0FBVyxHQUFHLElBQUksb0JBQVMsQ0FBQztJQUNoQyxTQUFTLEVBQUUsS0FBSztDQUNqQixDQUFDLENBQUM7QUFDSCxNQUFNLE1BQU0sR0FBRyxJQUFBLHFCQUFZLEVBQUMsRUFBRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsQ0FBQyxDQUFDO0FBRXRELE1BQU0sYUFBYSxHQUFHLEtBQUssRUFDaEMsTUFBYyxFQUNkLFVBQWtCLElBQUEsbUNBQXdCLEdBQUUsRUFDWixFQUFFO0lBQ2xDLElBQUksV0FBVyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRTtRQUMzQixPQUFPLFdBQVcsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUEwQixDQUFDO0tBQ3pEO0lBRUQsTUFBTSxDQUFDLEtBQUssQ0FBQyx5QkFBeUIsTUFBTSxFQUFFLENBQUMsQ0FBQztJQUNoRCxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7SUFDdkIsTUFBTSxPQUFPLEdBQUcsTUFBTSxrQkFBUSxDQUFDLElBQUksQ0FBK0I7UUFDaEUsSUFBQSxvQkFBWSxFQUFDLE1BQU0sQ0FBQztRQUNwQixrQkFBUSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDO0tBQ3ZDLENBQUMsQ0FBQztJQUNILE1BQU0sQ0FBQyxLQUFLLENBQ1YsbUJBQW1CLE1BQU0sS0FBSyxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxJQUNuRCxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsR0FDZixJQUFJLENBQ0wsQ0FBQztJQUVGLElBQUksT0FBTyxDQUFDLE1BQU0sRUFBRTtRQUNsQixNQUFNLE9BQU8sR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDcEQsV0FBVyxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLG9CQUFvQjtRQUN0RSxPQUFPLE9BQU8sQ0FBQztLQUNoQjtJQUVELHVCQUF1QjtJQUN2QixPQUFPLEVBQUUsQ0FBQztBQUNaLENBQUMsQ0FBQztBQTVCVyxRQUFBLGFBQWEsaUJBNEJ4QjtBQUVLLE1BQU0sWUFBWSxHQUFHLEtBQUssRUFDL0IsTUFBYyxFQUN5QixFQUFFO0lBQ3pDLHVCQUF1QjtJQUN2QixTQUFTLEtBQUs7UUFDWixPQUFPLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRCxNQUFNLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxHQUFHLE1BQU0sT0FBTyxDQUFDLEdBQUcsQ0FBQztRQUNyQyxjQUFHLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUM7UUFDaEQsY0FBRyxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDO0tBQ2pELENBQUMsQ0FBQztJQUVILE9BQU8sQ0FBQyxHQUFHLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDO0FBQzVCLENBQUMsQ0FBQztBQWRXLFFBQUEsWUFBWSxnQkFjdkIifQ==
|
package/build/utils/env-flag.js
CHANGED
|
@@ -20,7 +20,7 @@ const getNetworkConcurrency = () => process.env[constant_1.ENV_SURGIO_NETWORK_CO
|
|
|
20
20
|
exports.getNetworkConcurrency = getNetworkConcurrency;
|
|
21
21
|
const getNetworkRetry = () => process.env[constant_1.ENV_SURGIO_NETWORK_RETRY]
|
|
22
22
|
? Number(process.env[constant_1.ENV_SURGIO_NETWORK_RETRY])
|
|
23
|
-
:
|
|
23
|
+
: 0;
|
|
24
24
|
exports.getNetworkRetry = getNetworkRetry;
|
|
25
25
|
const getNetworkClashUA = () => { var _a; return (_a = process.env[constant_1.ENV_SURGIO_NETWORK_CLASH_UA]) !== null && _a !== void 0 ? _a : 'clash'; };
|
|
26
26
|
exports.getNetworkClashUA = getNetworkClashUA;
|
package/build/utils/index.d.ts
CHANGED
|
@@ -5,8 +5,7 @@ export * from './clash';
|
|
|
5
5
|
export * from './quantumult';
|
|
6
6
|
export declare const getDownloadUrl: (baseUrl: string | undefined, artifactName: string, inline?: boolean, accessToken?: string | undefined) => string;
|
|
7
7
|
export declare const getUrl: (baseUrl: string, path: string, accessToken?: string | undefined) => string;
|
|
8
|
-
export declare const
|
|
9
|
-
export declare const getMellowNodes: (list: ReadonlyArray<VmessNodeConfig | ShadowsocksNodeConfig>, filter?: NodeFilterType | SortedNodeNameFilterType | undefined) => string;
|
|
8
|
+
export declare const getMellowNodes: (list: ReadonlyArray<VmessNodeConfig | ShadowsocksNodeConfig>, filter?: SortedNodeNameFilterType | NodeFilterType | undefined) => string;
|
|
10
9
|
export declare const toUrlSafeBase64: (str: string) => string;
|
|
11
10
|
export declare const fromUrlSafeBase64: (str: string) => string;
|
|
12
11
|
export declare const toBase64: (str: string) => string;
|
|
@@ -41,6 +40,7 @@ export declare const normalizeClashProxyGroupConfig: (nodeList: ReadonlyArray<Po
|
|
|
41
40
|
export declare const ensureConfigFolder: (dir?: string) => string;
|
|
42
41
|
export declare const formatV2rayConfig: (localPort: number, nodeConfig: VmessNodeConfig) => JsonObject;
|
|
43
42
|
export declare const lowercaseHeaderKeys: (headers: Record<string, string>) => Record<string, string>;
|
|
43
|
+
export declare const msToSeconds: (ms: number) => number;
|
|
44
44
|
export declare const isIp: (str: string) => boolean;
|
|
45
45
|
export declare const isNow: () => boolean;
|
|
46
46
|
export declare const isVercel: () => boolean;
|
|
@@ -49,3 +49,4 @@ export declare const isGitHubActions: () => boolean;
|
|
|
49
49
|
export declare const isGitLabCI: () => boolean;
|
|
50
50
|
export declare const isPkgBundle: () => boolean;
|
|
51
51
|
export declare const isRailway: () => boolean;
|
|
52
|
+
export declare const isNetlify: () => boolean;
|