nstarter-http-request 0.1.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/CHANGELOG.md +5 -0
- package/README.md +160 -0
- package/dist/cjs/adapter/axios.adapter.js +224 -0
- package/dist/cjs/adapter/axios.adapter.js.map +1 -0
- package/dist/cjs/adapter/base.js +134 -0
- package/dist/cjs/adapter/base.js.map +1 -0
- package/dist/cjs/adapter/index.js +20 -0
- package/dist/cjs/adapter/index.js.map +1 -0
- package/dist/cjs/adapter/undici.adapter.js +272 -0
- package/dist/cjs/adapter/undici.adapter.js.map +1 -0
- package/dist/cjs/client.js +409 -0
- package/dist/cjs/client.js.map +1 -0
- package/dist/cjs/config.js +69 -0
- package/dist/cjs/config.js.map +1 -0
- package/dist/cjs/const/config.const.js +53 -0
- package/dist/cjs/const/config.const.js.map +1 -0
- package/dist/cjs/const/dns.const.js +16 -0
- package/dist/cjs/const/dns.const.js.map +1 -0
- package/dist/cjs/const/enum.const.js +22 -0
- package/dist/cjs/const/enum.const.js.map +1 -0
- package/dist/cjs/const/index.js +21 -0
- package/dist/cjs/const/index.js.map +1 -0
- package/dist/cjs/const/ip.const.js +110 -0
- package/dist/cjs/const/ip.const.js.map +1 -0
- package/dist/cjs/index.js +25 -0
- package/dist/cjs/index.js.map +1 -0
- package/dist/cjs/logger/base.js +60 -0
- package/dist/cjs/logger/base.js.map +1 -0
- package/dist/cjs/logger/http_client.logger.js +209 -0
- package/dist/cjs/logger/http_client.logger.js.map +1 -0
- package/dist/cjs/logger/index.js +20 -0
- package/dist/cjs/logger/index.js.map +1 -0
- package/dist/cjs/logger/log.filter.js +126 -0
- package/dist/cjs/logger/log.filter.js.map +1 -0
- package/dist/cjs/security/dns.validator.js +137 -0
- package/dist/cjs/security/dns.validator.js.map +1 -0
- package/dist/cjs/security/index.js +21 -0
- package/dist/cjs/security/index.js.map +1 -0
- package/dist/cjs/security/ip.validator.js +107 -0
- package/dist/cjs/security/ip.validator.js.map +1 -0
- package/dist/cjs/security/ssrf.guard.js +180 -0
- package/dist/cjs/security/ssrf.guard.js.map +1 -0
- package/dist/cjs/security/url.validator.js +170 -0
- package/dist/cjs/security/url.validator.js.map +1 -0
- package/dist/cjs/tsconfig.tsbuildinfo +1 -0
- package/dist/cjs/types/adapter.js +6 -0
- package/dist/cjs/types/adapter.js.map +1 -0
- package/dist/cjs/types/client.js +6 -0
- package/dist/cjs/types/client.js.map +1 -0
- package/dist/cjs/types/config.js +6 -0
- package/dist/cjs/types/config.js.map +1 -0
- package/dist/cjs/types/errors.js +35 -0
- package/dist/cjs/types/errors.js.map +1 -0
- package/dist/cjs/types/index.js +35 -0
- package/dist/cjs/types/index.js.map +1 -0
- package/dist/cjs/types/ip.js +6 -0
- package/dist/cjs/types/ip.js.map +1 -0
- package/dist/cjs/types/logger.js +6 -0
- package/dist/cjs/types/logger.js.map +1 -0
- package/dist/cjs/types/request_response.js +6 -0
- package/dist/cjs/types/request_response.js.map +1 -0
- package/dist/cjs/types/security.js +6 -0
- package/dist/cjs/types/security.js.map +1 -0
- package/dist/cjs/types/trace.js +14 -0
- package/dist/cjs/types/trace.js.map +1 -0
- package/dist/cjs/utils/common.js +31 -0
- package/dist/cjs/utils/common.js.map +1 -0
- package/dist/cjs/utils/domain.js +79 -0
- package/dist/cjs/utils/domain.js.map +1 -0
- package/dist/cjs/utils/index.js +44 -0
- package/dist/cjs/utils/index.js.map +1 -0
- package/dist/cjs/utils/ip.range.js +200 -0
- package/dist/cjs/utils/ip.range.js.map +1 -0
- package/dist/cjs/utils/trace.context.js +213 -0
- package/dist/cjs/utils/trace.context.js.map +1 -0
- package/dist/esm/adapter/axios.adapter.js +184 -0
- package/dist/esm/adapter/axios.adapter.js.map +1 -0
- package/dist/esm/adapter/base.js +130 -0
- package/dist/esm/adapter/base.js.map +1 -0
- package/dist/esm/adapter/index.js +4 -0
- package/dist/esm/adapter/index.js.map +1 -0
- package/dist/esm/adapter/undici.adapter.js +235 -0
- package/dist/esm/adapter/undici.adapter.js.map +1 -0
- package/dist/esm/client.js +405 -0
- package/dist/esm/client.js.map +1 -0
- package/dist/esm/config.js +65 -0
- package/dist/esm/config.js.map +1 -0
- package/dist/esm/const/config.const.js +50 -0
- package/dist/esm/const/config.const.js.map +1 -0
- package/dist/esm/const/dns.const.js +13 -0
- package/dist/esm/const/dns.const.js.map +1 -0
- package/dist/esm/const/enum.const.js +19 -0
- package/dist/esm/const/enum.const.js.map +1 -0
- package/dist/esm/const/index.js +5 -0
- package/dist/esm/const/index.js.map +1 -0
- package/dist/esm/const/ip.const.js +107 -0
- package/dist/esm/const/ip.const.js.map +1 -0
- package/dist/esm/index.js +9 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/logger/base.js +55 -0
- package/dist/esm/logger/base.js.map +1 -0
- package/dist/esm/logger/http_client.logger.js +205 -0
- package/dist/esm/logger/http_client.logger.js.map +1 -0
- package/dist/esm/logger/index.js +4 -0
- package/dist/esm/logger/index.js.map +1 -0
- package/dist/esm/logger/log.filter.js +122 -0
- package/dist/esm/logger/log.filter.js.map +1 -0
- package/dist/esm/security/dns.validator.js +133 -0
- package/dist/esm/security/dns.validator.js.map +1 -0
- package/dist/esm/security/index.js +5 -0
- package/dist/esm/security/index.js.map +1 -0
- package/dist/esm/security/ip.validator.js +103 -0
- package/dist/esm/security/ip.validator.js.map +1 -0
- package/dist/esm/security/ssrf.guard.js +176 -0
- package/dist/esm/security/ssrf.guard.js.map +1 -0
- package/dist/esm/security/url.validator.js +166 -0
- package/dist/esm/security/url.validator.js.map +1 -0
- package/dist/esm/tsconfig.esm.tsbuildinfo +1 -0
- package/dist/esm/types/adapter.js +5 -0
- package/dist/esm/types/adapter.js.map +1 -0
- package/dist/esm/types/client.js +5 -0
- package/dist/esm/types/client.js.map +1 -0
- package/dist/esm/types/config.js +5 -0
- package/dist/esm/types/config.js.map +1 -0
- package/dist/esm/types/errors.js +30 -0
- package/dist/esm/types/errors.js.map +1 -0
- package/dist/esm/types/index.js +19 -0
- package/dist/esm/types/index.js.map +1 -0
- package/dist/esm/types/ip.js +5 -0
- package/dist/esm/types/ip.js.map +1 -0
- package/dist/esm/types/logger.js +5 -0
- package/dist/esm/types/logger.js.map +1 -0
- package/dist/esm/types/request_response.js +5 -0
- package/dist/esm/types/request_response.js.map +1 -0
- package/dist/esm/types/security.js +5 -0
- package/dist/esm/types/security.js.map +1 -0
- package/dist/esm/types/trace.js +11 -0
- package/dist/esm/types/trace.js.map +1 -0
- package/dist/esm/utils/common.js +27 -0
- package/dist/esm/utils/common.js.map +1 -0
- package/dist/esm/utils/domain.js +71 -0
- package/dist/esm/utils/domain.js.map +1 -0
- package/dist/esm/utils/index.js +7 -0
- package/dist/esm/utils/index.js.map +1 -0
- package/dist/esm/utils/ip.range.js +187 -0
- package/dist/esm/utils/ip.range.js.map +1 -0
- package/dist/esm/utils/trace.context.js +199 -0
- package/dist/esm/utils/trace.context.js.map +1 -0
- package/dist/types/adapter/axios.adapter.d.ts +51 -0
- package/dist/types/adapter/axios.adapter.d.ts.map +1 -0
- package/dist/types/adapter/base.d.ts +56 -0
- package/dist/types/adapter/base.d.ts.map +1 -0
- package/dist/types/adapter/index.d.ts +4 -0
- package/dist/types/adapter/index.d.ts.map +1 -0
- package/dist/types/adapter/undici.adapter.d.ts +68 -0
- package/dist/types/adapter/undici.adapter.d.ts.map +1 -0
- package/dist/types/client.d.ts +105 -0
- package/dist/types/client.d.ts.map +1 -0
- package/dist/types/config.d.ts +14 -0
- package/dist/types/config.d.ts.map +1 -0
- package/dist/types/const/config.const.d.ts +23 -0
- package/dist/types/const/config.const.d.ts.map +1 -0
- package/dist/types/const/dns.const.d.ts +13 -0
- package/dist/types/const/dns.const.d.ts.map +1 -0
- package/dist/types/const/enum.const.d.ts +17 -0
- package/dist/types/const/enum.const.d.ts.map +1 -0
- package/dist/types/const/index.d.ts +5 -0
- package/dist/types/const/index.d.ts.map +1 -0
- package/dist/types/const/ip.const.d.ts +42 -0
- package/dist/types/const/ip.const.d.ts.map +1 -0
- package/dist/types/index.d.ts +9 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/logger/base.d.ts +42 -0
- package/dist/types/logger/base.d.ts.map +1 -0
- package/dist/types/logger/http_client.logger.d.ts +49 -0
- package/dist/types/logger/http_client.logger.d.ts.map +1 -0
- package/dist/types/logger/index.d.ts +4 -0
- package/dist/types/logger/index.d.ts.map +1 -0
- package/dist/types/logger/log.filter.d.ts +56 -0
- package/dist/types/logger/log.filter.d.ts.map +1 -0
- package/dist/types/security/dns.validator.d.ts +61 -0
- package/dist/types/security/dns.validator.d.ts.map +1 -0
- package/dist/types/security/index.d.ts +5 -0
- package/dist/types/security/index.d.ts.map +1 -0
- package/dist/types/security/ip.validator.d.ts +31 -0
- package/dist/types/security/ip.validator.d.ts.map +1 -0
- package/dist/types/security/ssrf.guard.d.ts +54 -0
- package/dist/types/security/ssrf.guard.d.ts.map +1 -0
- package/dist/types/security/url.validator.d.ts +76 -0
- package/dist/types/security/url.validator.d.ts.map +1 -0
- package/dist/types/types/adapter.d.ts +30 -0
- package/dist/types/types/adapter.d.ts.map +1 -0
- package/dist/types/types/client.d.ts +85 -0
- package/dist/types/types/client.d.ts.map +1 -0
- package/dist/types/types/config.d.ts +99 -0
- package/dist/types/types/config.d.ts.map +1 -0
- package/dist/types/types/errors.d.ts +23 -0
- package/dist/types/types/errors.d.ts.map +1 -0
- package/dist/types/types/index.d.ts +10 -0
- package/dist/types/types/index.d.ts.map +1 -0
- package/dist/types/types/ip.d.ts +32 -0
- package/dist/types/types/ip.d.ts.map +1 -0
- package/dist/types/types/logger.d.ts +136 -0
- package/dist/types/types/logger.d.ts.map +1 -0
- package/dist/types/types/request_response.d.ts +54 -0
- package/dist/types/types/request_response.d.ts.map +1 -0
- package/dist/types/types/security.d.ts +115 -0
- package/dist/types/types/security.d.ts.map +1 -0
- package/dist/types/types/trace.d.ts +34 -0
- package/dist/types/types/trace.d.ts.map +1 -0
- package/dist/types/utils/common.d.ts +14 -0
- package/dist/types/utils/common.d.ts.map +1 -0
- package/dist/types/utils/domain.d.ts +39 -0
- package/dist/types/utils/domain.d.ts.map +1 -0
- package/dist/types/utils/index.d.ts +6 -0
- package/dist/types/utils/index.d.ts.map +1 -0
- package/dist/types/utils/ip.range.d.ts +61 -0
- package/dist/types/utils/ip.range.d.ts.map +1 -0
- package/dist/types/utils/trace.context.d.ts +106 -0
- package/dist/types/utils/trace.context.d.ts.map +1 -0
- package/docs/adapters.md +53 -0
- package/docs/configuration.md +149 -0
- package/docs/logging.md +70 -0
- package/docs/proxy.md +44 -0
- package/docs/security.md +56 -0
- package/docs/trace-context.md +436 -0
- package/package.json +50 -0
- package/src/adapter/axios.adapter.ts +228 -0
- package/src/adapter/base.ts +180 -0
- package/src/adapter/index.ts +3 -0
- package/src/adapter/undici.adapter.ts +282 -0
- package/src/client.ts +552 -0
- package/src/config.ts +86 -0
- package/src/const/config.const.ts +60 -0
- package/src/const/dns.const.ts +15 -0
- package/src/const/enum.const.ts +17 -0
- package/src/const/index.ts +4 -0
- package/src/const/ip.const.ts +139 -0
- package/src/index.ts +8 -0
- package/src/logger/base.ts +75 -0
- package/src/logger/http_client.logger.ts +272 -0
- package/src/logger/index.ts +3 -0
- package/src/logger/log.filter.ts +149 -0
- package/src/security/dns.validator.ts +170 -0
- package/src/security/index.ts +4 -0
- package/src/security/ip.validator.ts +124 -0
- package/src/security/ssrf.guard.ts +224 -0
- package/src/security/url.validator.ts +192 -0
- package/src/types/adapter.ts +38 -0
- package/src/types/client.ts +119 -0
- package/src/types/config.ts +110 -0
- package/src/types/errors.ts +38 -0
- package/src/types/index.ts +27 -0
- package/src/types/ip.ts +34 -0
- package/src/types/logger.ts +150 -0
- package/src/types/request_response.ts +65 -0
- package/src/types/security.ts +126 -0
- package/src/types/trace.ts +35 -0
- package/src/utils/common.ts +28 -0
- package/src/utils/domain.ts +78 -0
- package/src/utils/index.ts +7 -0
- package/src/utils/ip.range.ts +218 -0
- package/src/utils/trace.context.ts +240 -0
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 延迟函数
|
|
3
|
+
* @param ms 延迟毫秒数
|
|
4
|
+
*/
|
|
5
|
+
export function delay(ms) {
|
|
6
|
+
return new Promise(resolve => {
|
|
7
|
+
setTimeout(resolve, ms);
|
|
8
|
+
});
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* 超时函数
|
|
12
|
+
* @param promise 原始 Promise
|
|
13
|
+
* @param ms 超时毫秒数
|
|
14
|
+
* @param message 超时错误消息
|
|
15
|
+
* @returns 超时后的 Promise
|
|
16
|
+
*/
|
|
17
|
+
export function withTimeout(promise, ms, message = 'Operation timed out') {
|
|
18
|
+
return new Promise((resolve, reject) => {
|
|
19
|
+
const timer = setTimeout(() => {
|
|
20
|
+
reject(new Error(message));
|
|
21
|
+
}, ms);
|
|
22
|
+
promise
|
|
23
|
+
.then(resolve, reject)
|
|
24
|
+
.finally(() => clearTimeout(timer));
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=common.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"common.js","sourceRoot":"","sources":["../../../src/utils/common.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,UAAU,KAAK,CAAC,EAAU;IAC5B,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE;QACzB,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;IAC5B,CAAC,CAAC,CAAC;AACP,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,WAAW,CAAI,OAAmB,EAAE,EAAU,EAAE,OAAO,GAAG,qBAAqB;IAC3F,OAAO,IAAI,OAAO,CAAI,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACtC,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE;YAC1B,MAAM,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;QAC/B,CAAC,EAAE,EAAE,CAAC,CAAC;QAEP,OAAO;aACF,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC;aACrB,OAAO,CAAC,GAAG,EAAE,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC;IAC5C,CAAC,CAAC,CAAC;AACP,CAAC"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import escapeRegexp from 'escape-string-regexp';
|
|
2
|
+
/**
|
|
3
|
+
* 根据域名模式列表生成正则表达式数组(通配符模式)
|
|
4
|
+
* 支持规则:
|
|
5
|
+
* 1. 通配符匹配 eg `*.example.com`(只匹配一级子域名,不包括根域名和多级子域名)
|
|
6
|
+
* 2. 精确匹配 eg `example.com`(仅匹配指定域名)
|
|
7
|
+
*
|
|
8
|
+
* @param patterns 域名模式列表
|
|
9
|
+
* @returns 正则表达式数组
|
|
10
|
+
*
|
|
11
|
+
* @example
|
|
12
|
+
* ```typescript
|
|
13
|
+
* const regexps = createDomainMatchers(['example.com', '*.example.com']);
|
|
14
|
+
* regexps[0].test('example.com'); // true - 精确匹配
|
|
15
|
+
* regexps[1].test('api.example.com'); // true - 通配符匹配一级子域名
|
|
16
|
+
* regexps[1].test('test.api.example.com'); // false - 不匹配多级子域名
|
|
17
|
+
* regexps[1].test('example.com'); // false - 不匹配根域名
|
|
18
|
+
* ```
|
|
19
|
+
*/
|
|
20
|
+
export const createDomainMatchers = (patterns) => {
|
|
21
|
+
return patterns.map((pattern) => {
|
|
22
|
+
const trimmedPattern = pattern.trim();
|
|
23
|
+
// 通配符模式:*.example.com
|
|
24
|
+
// 只匹配一级子域名(如 api.example.com, www.example.com)
|
|
25
|
+
// 不匹配根域名(example.com)和多级子域名(test.api.example.com)
|
|
26
|
+
if (trimmedPattern.startsWith('*.')) {
|
|
27
|
+
const domain = trimmedPattern.slice(2); // 移除 *. 前缀
|
|
28
|
+
const escapedDomain = escapeRegexp(domain);
|
|
29
|
+
// 匹配:一个或多个非点字符(一级子域名)+ 点 + 域名
|
|
30
|
+
return new RegExp(`^[^.]+\\.${escapedDomain}$`, 'i');
|
|
31
|
+
}
|
|
32
|
+
// 精确匹配:example.com
|
|
33
|
+
// 仅匹配指定的域名
|
|
34
|
+
const escapedPattern = escapeRegexp(trimmedPattern);
|
|
35
|
+
return new RegExp(`^${escapedPattern}$`, 'i');
|
|
36
|
+
});
|
|
37
|
+
};
|
|
38
|
+
/**
|
|
39
|
+
* 根据域名模式列表生成正则表达式数组(传统模式,用于正向代理等场景)
|
|
40
|
+
* @TODO 需要存量用户跑完正向代理兼容后切换到通配符模式.
|
|
41
|
+
* 支持规则:
|
|
42
|
+
* 1. 完全匹配 eg `www.example.com`
|
|
43
|
+
* 2. 后缀匹配 eg `.example.com`(匹配所有子域名)
|
|
44
|
+
* 3. 前缀匹配 eg `172.168.0.`(主要用于 IP 地址匹配)
|
|
45
|
+
*
|
|
46
|
+
* @param patterns 域名模式列表
|
|
47
|
+
* @returns 正则表达式数组
|
|
48
|
+
*
|
|
49
|
+
* @example
|
|
50
|
+
* ```typescript
|
|
51
|
+
* const regexps = createLegacyDomainMatchers(['example.com', '.example.com']);
|
|
52
|
+
* regexps[0].test('example.com'); // true - 完全匹配
|
|
53
|
+
* regexps[1].test('api.example.com'); // true - 后缀匹配
|
|
54
|
+
* ```
|
|
55
|
+
*/
|
|
56
|
+
export const createLegacyDomainMatchers = (patterns) => {
|
|
57
|
+
return patterns.map((pattern) => {
|
|
58
|
+
const lowerPattern = pattern.toLowerCase();
|
|
59
|
+
// 以 . 开头,生成后缀匹配正则(如 .example.com 匹配所有子域名)
|
|
60
|
+
if (lowerPattern.startsWith('.')) {
|
|
61
|
+
return new RegExp(`${escapeRegexp(pattern)}$`, 'i');
|
|
62
|
+
}
|
|
63
|
+
// 以 . 结尾,生成前缀匹配正则(如 172.168.0. 匹配 172.168.0.x)
|
|
64
|
+
if (lowerPattern.endsWith('.')) {
|
|
65
|
+
return new RegExp(`^${escapeRegexp(pattern)}`, 'i');
|
|
66
|
+
}
|
|
67
|
+
// 字符串完全匹配
|
|
68
|
+
return new RegExp(`^${escapeRegexp(pattern)}$`, 'i');
|
|
69
|
+
});
|
|
70
|
+
};
|
|
71
|
+
//# sourceMappingURL=domain.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"domain.js","sourceRoot":"","sources":["../../../src/utils/domain.ts"],"names":[],"mappings":"AAAA,OAAO,YAAY,MAAM,sBAAsB,CAAC;AAEhD;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,QAAkB,EAAY,EAAE;IACjE,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE;QAC5B,MAAM,cAAc,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;QAEtC,sBAAsB;QACtB,+CAA+C;QAC/C,kDAAkD;QAClD,IAAI,cAAc,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;YAClC,MAAM,MAAM,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW;YACnD,MAAM,aAAa,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;YAC3C,8BAA8B;YAC9B,OAAO,IAAI,MAAM,CAAC,YAAa,aAAc,GAAG,EAAE,GAAG,CAAC,CAAC;QAC3D,CAAC;QAED,mBAAmB;QACnB,WAAW;QACX,MAAM,cAAc,GAAG,YAAY,CAAC,cAAc,CAAC,CAAC;QACpD,OAAO,IAAI,MAAM,CAAC,IAAK,cAAe,GAAG,EAAE,GAAG,CAAC,CAAC;IACpD,CAAC,CAAC,CAAC;AACP,CAAC,CAAC;AAEF;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,CAAC,MAAM,0BAA0B,GAAG,CAAC,QAAkB,EAAY,EAAE;IACvE,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE;QAC5B,MAAM,YAAY,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;QAE3C,0CAA0C;QAC1C,IAAI,YAAY,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YAC/B,OAAO,IAAI,MAAM,CAAC,GAAI,YAAY,CAAC,OAAO,CAAE,GAAG,EAAE,GAAG,CAAC,CAAC;QAC1D,CAAC;QAED,+CAA+C;QAC/C,IAAI,YAAY,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YAC7B,OAAO,IAAI,MAAM,CAAC,IAAK,YAAY,CAAC,OAAO,CAAE,EAAE,EAAE,GAAG,CAAC,CAAC;QAC1D,CAAC;QAED,UAAU;QACV,OAAO,IAAI,MAAM,CAAC,IAAK,YAAY,CAAC,OAAO,CAAE,GAAG,EAAE,GAAG,CAAC,CAAC;IAC3D,CAAC,CAAC,CAAC;AACP,CAAC,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export * as IpRangeUtils from './ip.range';
|
|
2
|
+
export * as CommonUtils from './common';
|
|
3
|
+
export * as DomainUtils from './domain';
|
|
4
|
+
export * as TraceContextUtils from './trace.context';
|
|
5
|
+
// 导出 TraceContext 类供外部直接使用
|
|
6
|
+
export { TraceContext } from './trace.context';
|
|
7
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/utils/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,YAAY,MAAM,YAAY,CAAC;AAC3C,OAAO,KAAK,WAAW,MAAM,UAAU,CAAC;AACxC,OAAO,KAAK,WAAW,MAAM,UAAU,CAAC;AACxC,OAAO,KAAK,iBAAiB,MAAM,iBAAiB,CAAC;AAErD,2BAA2B;AAC3B,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC"}
|
|
@@ -0,0 +1,187 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* IP 地址范围工具
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* 将 IPv4 地址转换为数字
|
|
6
|
+
*/
|
|
7
|
+
export function ipv4ToNumber(ip) {
|
|
8
|
+
const parts = ip.split('.');
|
|
9
|
+
return ((parseInt(parts[0], 10) << 24) +
|
|
10
|
+
(parseInt(parts[1], 10) << 16) +
|
|
11
|
+
(parseInt(parts[2], 10) << 8) +
|
|
12
|
+
parseInt(parts[3], 10)) >>> 0; // 无符号右移确保为正数
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* 预编译 IPv4 CIDR 范围
|
|
16
|
+
* @param cidr CIDR 表示法,如 "192.168.0.0/16"
|
|
17
|
+
*/
|
|
18
|
+
export function compileIpv4Range(cidr) {
|
|
19
|
+
const [network, prefixStr] = cidr.split('/');
|
|
20
|
+
const prefix = parseInt(prefixStr, 10);
|
|
21
|
+
if (prefix < 0 || prefix > 32) {
|
|
22
|
+
throw new Error(`Invalid CIDR prefix: ${prefix}`);
|
|
23
|
+
}
|
|
24
|
+
const networkNum = ipv4ToNumber(network);
|
|
25
|
+
const mask = (0xffffffff << (32 - prefix)) >>> 0;
|
|
26
|
+
return {
|
|
27
|
+
network: networkNum & mask,
|
|
28
|
+
mask,
|
|
29
|
+
cidr
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* 检查 IPv4 地址是否在预编译的范围内(高性能版本)
|
|
34
|
+
* @param ip IP 地址
|
|
35
|
+
* @param compiledRange 预编译的范围
|
|
36
|
+
*/
|
|
37
|
+
export function isIpv4InCompiledRange(ip, compiledRange) {
|
|
38
|
+
const ipNum = ipv4ToNumber(ip);
|
|
39
|
+
return (ipNum & compiledRange.mask) === compiledRange.network;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* 将 IPv6 地址转换为 BigInt 数组(高 64 位和低 64 位)
|
|
43
|
+
*/
|
|
44
|
+
export function ipv6ToBigInt(ip) {
|
|
45
|
+
// 标准化 IPv6 地址
|
|
46
|
+
const normalized = normalizeIpv6(ip);
|
|
47
|
+
const parts = normalized.split(':');
|
|
48
|
+
let high = BigInt(0);
|
|
49
|
+
let low = BigInt(0);
|
|
50
|
+
for (let i = 0; i < 4; i++) {
|
|
51
|
+
high = (high << BigInt(16)) | BigInt(parseInt(parts[i], 16));
|
|
52
|
+
}
|
|
53
|
+
for (let i = 4; i < 8; i++) {
|
|
54
|
+
low = (low << BigInt(16)) | BigInt(parseInt(parts[i], 16));
|
|
55
|
+
}
|
|
56
|
+
return [high, low];
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* 标准化 IPv6 地址(展开缩写)
|
|
60
|
+
*/
|
|
61
|
+
export function normalizeIpv6(ip) {
|
|
62
|
+
// 移除区域 ID(如 fe80::1%eth0 中的 %eth0)
|
|
63
|
+
const cleaned = ip.split('%')[0];
|
|
64
|
+
// 处理 :: 缩写
|
|
65
|
+
const parts = cleaned.split(':');
|
|
66
|
+
const filled = [];
|
|
67
|
+
let doubleColonIndex = -1;
|
|
68
|
+
for (let i = 0; i < parts.length; i++) {
|
|
69
|
+
if (parts[i] === '') {
|
|
70
|
+
if (doubleColonIndex === -1) {
|
|
71
|
+
doubleColonIndex = i;
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
else {
|
|
75
|
+
filled.push(parts[i].padStart(4, '0'));
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
// 填充 :: 省略的部分
|
|
79
|
+
if (doubleColonIndex !== -1) {
|
|
80
|
+
const missing = 8 - filled.length;
|
|
81
|
+
const before = filled.slice(0, doubleColonIndex === 0 ? 0 : doubleColonIndex);
|
|
82
|
+
const after = filled.slice(doubleColonIndex === 0 ? 0 : doubleColonIndex);
|
|
83
|
+
const zeros = Array(missing).fill('0000');
|
|
84
|
+
return [...before, ...zeros, ...after].join(':');
|
|
85
|
+
}
|
|
86
|
+
return filled.join(':');
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* 预编译 IPv6 CIDR 范围
|
|
90
|
+
* @param cidr CIDR 表示法,如 "fe80::/10"
|
|
91
|
+
*/
|
|
92
|
+
export function compileIpv6Range(cidr) {
|
|
93
|
+
const [network, prefixStr] = cidr.split('/');
|
|
94
|
+
const prefix = parseInt(prefixStr, 10);
|
|
95
|
+
if (prefix < 0 || prefix > 128) {
|
|
96
|
+
throw new Error(`Invalid IPv6 CIDR prefix: ${prefix}`);
|
|
97
|
+
}
|
|
98
|
+
const [netHigh, netLow] = ipv6ToBigInt(network);
|
|
99
|
+
let maskHigh;
|
|
100
|
+
let maskLow;
|
|
101
|
+
if (prefix <= 64) {
|
|
102
|
+
// 只需要掩码高 64 位
|
|
103
|
+
maskHigh = (BigInt(0xffffffffffffffffn) << BigInt(64 - prefix)) & BigInt(0xffffffffffffffffn);
|
|
104
|
+
maskLow = BigInt(0);
|
|
105
|
+
}
|
|
106
|
+
else {
|
|
107
|
+
// 高 64 位全部掩码,低 64 位部分掩码
|
|
108
|
+
maskHigh = BigInt(0xffffffffffffffffn);
|
|
109
|
+
maskLow = (BigInt(0xffffffffffffffffn) << BigInt(128 - prefix)) & BigInt(0xffffffffffffffffn);
|
|
110
|
+
}
|
|
111
|
+
return {
|
|
112
|
+
networkHigh: netHigh & maskHigh,
|
|
113
|
+
networkLow: netLow & maskLow,
|
|
114
|
+
maskHigh,
|
|
115
|
+
maskLow,
|
|
116
|
+
prefix,
|
|
117
|
+
cidr
|
|
118
|
+
};
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* 检查 IPv6 地址是否在预编译的范围内(高性能版本)
|
|
122
|
+
* @param ip IPv6 地址
|
|
123
|
+
* @param compiledRange 预编译的范围
|
|
124
|
+
*/
|
|
125
|
+
export function isIpv6InCompiledRange(ip, compiledRange) {
|
|
126
|
+
const [ipHigh, ipLow] = ipv6ToBigInt(ip);
|
|
127
|
+
if (compiledRange.prefix <= 64) {
|
|
128
|
+
// 只需要比较高 64 位
|
|
129
|
+
return (ipHigh & compiledRange.maskHigh) === compiledRange.networkHigh;
|
|
130
|
+
}
|
|
131
|
+
else {
|
|
132
|
+
// 高 64 位必须完全匹配,低 64 位部分匹配
|
|
133
|
+
return (ipHigh & compiledRange.maskHigh) === compiledRange.networkHigh &&
|
|
134
|
+
(ipLow & compiledRange.maskLow) === compiledRange.networkLow;
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
/**
|
|
138
|
+
* 批量预编译 IPv4 CIDR 范围列表
|
|
139
|
+
* @param cidrs CIDR 范围列表
|
|
140
|
+
*/
|
|
141
|
+
export function compileIpv4Ranges(cidrs) {
|
|
142
|
+
return cidrs.map(cidr => compileIpv4Range(cidr));
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* 批量预编译 IPv6 CIDR 范围列表
|
|
146
|
+
* @param cidrs CIDR 范围列表
|
|
147
|
+
*/
|
|
148
|
+
export function compileIpv6Ranges(cidrs) {
|
|
149
|
+
return cidrs.map(cidr => compileIpv6Range(cidr));
|
|
150
|
+
}
|
|
151
|
+
/**
|
|
152
|
+
* 检查 IPv4 地址是否匹配任一预编译范围(高性能版本)
|
|
153
|
+
* @param ip IPv4 地址
|
|
154
|
+
* @param compiledRanges 预编译的范围列表
|
|
155
|
+
*/
|
|
156
|
+
export function isIpv4InAnyCompiledRange(ip, compiledRanges) {
|
|
157
|
+
const ipNum = ipv4ToNumber(ip);
|
|
158
|
+
for (const range of compiledRanges) {
|
|
159
|
+
if ((ipNum & range.mask) === range.network) {
|
|
160
|
+
return true;
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
return false;
|
|
164
|
+
}
|
|
165
|
+
/**
|
|
166
|
+
* 检查 IPv6 地址是否匹配任一预编译范围(高性能版本)
|
|
167
|
+
* @param ip IPv6 地址
|
|
168
|
+
* @param compiledRanges 预编译的范围列表
|
|
169
|
+
*/
|
|
170
|
+
export function isIpv6InAnyCompiledRange(ip, compiledRanges) {
|
|
171
|
+
const [ipHigh, ipLow] = ipv6ToBigInt(ip);
|
|
172
|
+
for (const range of compiledRanges) {
|
|
173
|
+
if (range.prefix <= 64) {
|
|
174
|
+
if ((ipHigh & range.maskHigh) === range.networkHigh) {
|
|
175
|
+
return true;
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
else {
|
|
179
|
+
if ((ipHigh & range.maskHigh) === range.networkHigh &&
|
|
180
|
+
(ipLow & range.maskLow) === range.networkLow) {
|
|
181
|
+
return true;
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
return false;
|
|
186
|
+
}
|
|
187
|
+
//# sourceMappingURL=ip.range.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ip.range.js","sourceRoot":"","sources":["../../../src/utils/ip.range.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,199 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* W3C Trace Context 工具
|
|
3
|
+
* 实现 W3C Trace Context 规范:https://www.w3.org/TR/trace-context/
|
|
4
|
+
*/
|
|
5
|
+
import { TraceFlags } from '../types';
|
|
6
|
+
/**
|
|
7
|
+
* 生成随机十六进制字符串
|
|
8
|
+
* @param length 字符串长度
|
|
9
|
+
* @returns 十六进制字符串
|
|
10
|
+
*/
|
|
11
|
+
function generateRandomHex(length) {
|
|
12
|
+
const bytes = Math.ceil(length / 2);
|
|
13
|
+
const buffer = new Uint8Array(bytes);
|
|
14
|
+
if (typeof crypto !== 'undefined' && crypto.getRandomValues) {
|
|
15
|
+
crypto.getRandomValues(buffer);
|
|
16
|
+
}
|
|
17
|
+
else {
|
|
18
|
+
// Fallback for Node.js environment
|
|
19
|
+
for (let i = 0; i < bytes; i++) {
|
|
20
|
+
buffer[i] = Math.floor(Math.random() * 256);
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
return Array.from(buffer)
|
|
24
|
+
.map(b => b.toString(16).padStart(2, '0'))
|
|
25
|
+
.join('')
|
|
26
|
+
.slice(0, length);
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* 生成符合 W3C 规范的 Trace ID(32位十六进制)
|
|
30
|
+
* @returns Trace ID
|
|
31
|
+
*/
|
|
32
|
+
export function generateTraceId() {
|
|
33
|
+
return generateRandomHex(32);
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* 生成符合 W3C 规范的 Span ID(16位十六进制)
|
|
37
|
+
* @returns Span ID
|
|
38
|
+
*/
|
|
39
|
+
export function generateSpanId() {
|
|
40
|
+
return generateRandomHex(16);
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* 验证 Trace ID 格式
|
|
44
|
+
* @param traceId Trace ID
|
|
45
|
+
* @returns 是否有效
|
|
46
|
+
*/
|
|
47
|
+
export function isValidTraceId(traceId) {
|
|
48
|
+
// Trace ID 必须是32位十六进制字符串,且不能全为0
|
|
49
|
+
return /^[0-9a-f]{32}$/i.test(traceId) && traceId !== '00000000000000000000000000000000';
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* 验证 Span ID 格式
|
|
53
|
+
* @param spanId Span ID
|
|
54
|
+
* @returns 是否有效
|
|
55
|
+
*/
|
|
56
|
+
export function isValidSpanId(spanId) {
|
|
57
|
+
// Span ID 必须是16位十六进制字符串,且不能全为0
|
|
58
|
+
return /^[0-9a-f]{16}$/i.test(spanId) && spanId !== '0000000000000000';
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* 验证 Trace Flags 格式
|
|
62
|
+
* @param flags Trace Flags
|
|
63
|
+
* @returns 是否有效
|
|
64
|
+
*/
|
|
65
|
+
export function isValidTraceFlags(flags) {
|
|
66
|
+
// Trace Flags 必须是2位十六进制字符串
|
|
67
|
+
return /^[0-9a-f]{2}$/i.test(flags);
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* 生成 traceparent 头值
|
|
71
|
+
* @param options 生成选项
|
|
72
|
+
* @returns traceparent 字符串
|
|
73
|
+
*/
|
|
74
|
+
export function generateTraceParent(options = {}) {
|
|
75
|
+
const traceId = options.traceId || generateTraceId();
|
|
76
|
+
const parentId = options.parentId || generateSpanId();
|
|
77
|
+
const sampled = options.sampled !== false;
|
|
78
|
+
const traceFlags = sampled ? '01' : '00';
|
|
79
|
+
// 验证参数
|
|
80
|
+
if (!isValidTraceId(traceId)) {
|
|
81
|
+
throw new Error(`Invalid trace ID: ${traceId}. Must be 32 hex characters and not all zeros.`);
|
|
82
|
+
}
|
|
83
|
+
if (!isValidSpanId(parentId)) {
|
|
84
|
+
throw new Error(`Invalid span ID: ${parentId}. Must be 16 hex characters and not all zeros.`);
|
|
85
|
+
}
|
|
86
|
+
return `00-${traceId}-${parentId}-${traceFlags}`;
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* 解析 traceparent 头值
|
|
90
|
+
* @param traceparent traceparent 字符串
|
|
91
|
+
* @returns 解析后的对象,解析失败返回 null
|
|
92
|
+
*/
|
|
93
|
+
export function parseTraceParent(traceparent) {
|
|
94
|
+
if (!traceparent || typeof traceparent !== 'string') {
|
|
95
|
+
return null;
|
|
96
|
+
}
|
|
97
|
+
// 规范格式:version-trace-id-parent-id-trace-flags
|
|
98
|
+
const parts = traceparent.trim().split('-');
|
|
99
|
+
if (parts.length !== 4) {
|
|
100
|
+
return null;
|
|
101
|
+
}
|
|
102
|
+
const [version, traceId, parentId, traceFlags] = parts;
|
|
103
|
+
// 验证版本号(当前只支持 00)
|
|
104
|
+
if (version !== '00') {
|
|
105
|
+
return null;
|
|
106
|
+
}
|
|
107
|
+
// 验证各部分格式
|
|
108
|
+
if (!isValidTraceId(traceId) || !isValidSpanId(parentId) || !isValidTraceFlags(traceFlags)) {
|
|
109
|
+
return null;
|
|
110
|
+
}
|
|
111
|
+
return {
|
|
112
|
+
version,
|
|
113
|
+
traceId: traceId.toLowerCase(),
|
|
114
|
+
parentId: parentId.toLowerCase(),
|
|
115
|
+
traceFlags: traceFlags.toLowerCase()
|
|
116
|
+
};
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* 验证 traceparent 头值是否符合规范
|
|
120
|
+
* @param traceparent traceparent 字符串
|
|
121
|
+
* @returns 是否有效
|
|
122
|
+
*/
|
|
123
|
+
export function isValidTraceParent(traceparent) {
|
|
124
|
+
return parseTraceParent(traceparent) !== null;
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* 从现有 traceparent 创建子 span
|
|
128
|
+
* @param parentTraceParent 父级 traceparent 字符串
|
|
129
|
+
* @param sampled 是否采样(不提供则继承父级)
|
|
130
|
+
* @returns 新的 traceparent 字符串
|
|
131
|
+
*/
|
|
132
|
+
export function createChildSpan(parentTraceParent, sampled) {
|
|
133
|
+
const parsed = parseTraceParent(parentTraceParent);
|
|
134
|
+
if (!parsed) {
|
|
135
|
+
throw new Error(`Invalid parent traceparent: ${parentTraceParent}`);
|
|
136
|
+
}
|
|
137
|
+
// 继承 trace ID,生成新的 span ID
|
|
138
|
+
const newSpanId = generateSpanId();
|
|
139
|
+
// 继承或指定采样标志
|
|
140
|
+
const parentSampled = parseInt(parsed.traceFlags, 16) & TraceFlags.SAMPLED;
|
|
141
|
+
const newSampled = sampled !== undefined ? sampled : !!parentSampled;
|
|
142
|
+
const newFlags = newSampled ? '01' : '00';
|
|
143
|
+
return `00-${parsed.traceId}-${newSpanId}-${newFlags}`;
|
|
144
|
+
}
|
|
145
|
+
/**
|
|
146
|
+
* 检查 traceparent 是否已采样
|
|
147
|
+
* @param traceparent traceparent 字符串
|
|
148
|
+
* @returns 是否采样
|
|
149
|
+
*/
|
|
150
|
+
export function isSampled(traceparent) {
|
|
151
|
+
const parsed = parseTraceParent(traceparent);
|
|
152
|
+
if (!parsed) {
|
|
153
|
+
return false;
|
|
154
|
+
}
|
|
155
|
+
const flags = parseInt(parsed.traceFlags, 16);
|
|
156
|
+
return !!(flags & TraceFlags.SAMPLED);
|
|
157
|
+
}
|
|
158
|
+
/**
|
|
159
|
+
* Trace Context 工具类
|
|
160
|
+
*/
|
|
161
|
+
export class TraceContext {
|
|
162
|
+
/**
|
|
163
|
+
* 生成 traceparent
|
|
164
|
+
*/
|
|
165
|
+
static { this.generate = generateTraceParent; }
|
|
166
|
+
/**
|
|
167
|
+
* 解析 traceparent
|
|
168
|
+
*/
|
|
169
|
+
static { this.parse = parseTraceParent; }
|
|
170
|
+
/**
|
|
171
|
+
* 验证 traceparent
|
|
172
|
+
*/
|
|
173
|
+
static { this.isValid = isValidTraceParent; }
|
|
174
|
+
/**
|
|
175
|
+
* 创建子 span
|
|
176
|
+
*/
|
|
177
|
+
static { this.createChild = createChildSpan; }
|
|
178
|
+
/**
|
|
179
|
+
* 检查是否采样
|
|
180
|
+
*/
|
|
181
|
+
static { this.isSampled = isSampled; }
|
|
182
|
+
/**
|
|
183
|
+
* 生成 Trace ID
|
|
184
|
+
*/
|
|
185
|
+
static { this.generateTraceId = generateTraceId; }
|
|
186
|
+
/**
|
|
187
|
+
* 生成 Span ID
|
|
188
|
+
*/
|
|
189
|
+
static { this.generateSpanId = generateSpanId; }
|
|
190
|
+
/**
|
|
191
|
+
* 验证 Trace ID
|
|
192
|
+
*/
|
|
193
|
+
static { this.isValidTraceId = isValidTraceId; }
|
|
194
|
+
/**
|
|
195
|
+
* 验证 Span ID
|
|
196
|
+
*/
|
|
197
|
+
static { this.isValidSpanId = isValidSpanId; }
|
|
198
|
+
}
|
|
199
|
+
//# sourceMappingURL=trace.context.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"trace.context.js","sourceRoot":"","sources":["../../../src/utils/trace.context.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Axios 适配器实现
|
|
3
|
+
*/
|
|
4
|
+
import type { HttpRequestOptions, HttpResponse } from '../types';
|
|
5
|
+
import { BaseHttpAdapter } from './base';
|
|
6
|
+
import { EClientAdapter } from '../const';
|
|
7
|
+
/**
|
|
8
|
+
* Axios 适配器
|
|
9
|
+
*/
|
|
10
|
+
export declare class AxiosAdapter extends BaseHttpAdapter {
|
|
11
|
+
readonly name: EClientAdapter.axios;
|
|
12
|
+
/**
|
|
13
|
+
* 检查 Axios 是否可用
|
|
14
|
+
*/
|
|
15
|
+
isAvailable(): boolean;
|
|
16
|
+
/**
|
|
17
|
+
* 发送请求
|
|
18
|
+
* @param options 请求选项
|
|
19
|
+
*/
|
|
20
|
+
protected sendRequest<T>(options: HttpRequestOptions): Promise<HttpResponse<T>>;
|
|
21
|
+
/**
|
|
22
|
+
* 构建 Axios 配置
|
|
23
|
+
* @param options 请求选项
|
|
24
|
+
* @param url 完整 URL
|
|
25
|
+
*/
|
|
26
|
+
private buildAxiosConfig;
|
|
27
|
+
/**
|
|
28
|
+
* 配置 Axios 代理
|
|
29
|
+
* @param axiosConfig Axios 配置对象
|
|
30
|
+
* @param options 请求选项
|
|
31
|
+
*/
|
|
32
|
+
private configureAxiosProxy;
|
|
33
|
+
/**
|
|
34
|
+
* 应用正向代理配置
|
|
35
|
+
* @param axiosConfig Axios 配置对象
|
|
36
|
+
* @param forwardProxyMeta 正向代理元数据
|
|
37
|
+
*/
|
|
38
|
+
private applyForwardProxy;
|
|
39
|
+
/**
|
|
40
|
+
* 处理 Axios 错误
|
|
41
|
+
* @param error 错误对象
|
|
42
|
+
* @param options 请求选项
|
|
43
|
+
*/
|
|
44
|
+
private handleAxiosError;
|
|
45
|
+
/**
|
|
46
|
+
* 构建代理配置
|
|
47
|
+
* @param proxy 代理配置
|
|
48
|
+
*/
|
|
49
|
+
private buildProxyConfig;
|
|
50
|
+
}
|
|
51
|
+
//# sourceMappingURL=axios.adapter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"axios.adapter.d.ts","sourceRoot":"","sources":["../../../src/adapter/axios.adapter.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EACR,kBAAkB,EAClB,YAAY,EAEf,MAAM,UAAU,CAAC;AAElB,OAAO,EAAE,eAAe,EAAE,MAAM,QAAQ,CAAC;AAQzC,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAG1C;;GAEG;AACH,qBAAa,YAAa,SAAQ,eAAe;IAC7C,SAAgB,IAAI,uBAAiC;IAErD;;OAEG;IACI,WAAW,IAAI,OAAO;IAI7B;;;OAGG;cACa,WAAW,CAAC,CAAC,EAAE,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;IAmCrF;;;;OAIG;IACH,OAAO,CAAC,gBAAgB;IA+BxB;;;;OAIG;IACH,OAAO,CAAC,mBAAmB;IAgB3B;;;;OAIG;IACH,OAAO,CAAC,iBAAiB;IAwCzB;;;;OAIG;IACH,OAAO,CAAC,gBAAgB;IA0BxB;;;OAGG;IACH,OAAO,CAAC,gBAAgB;CAgB3B"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* HTTP 适配器基础实现
|
|
3
|
+
*/
|
|
4
|
+
import type { IHttpAdapter, HttpRequestOptions, HttpResponse, RequestConfig, SecurityConfig, ILogger } from '../types';
|
|
5
|
+
import type { EClientAdapter } from '../const';
|
|
6
|
+
/**
|
|
7
|
+
* HTTP 适配器抽象基类
|
|
8
|
+
*/
|
|
9
|
+
export declare abstract class BaseHttpAdapter implements IHttpAdapter {
|
|
10
|
+
protected requestConfig: RequestConfig;
|
|
11
|
+
protected securityConfig: SecurityConfig;
|
|
12
|
+
protected logger?: ILogger;
|
|
13
|
+
constructor(requestConfig: RequestConfig, securityConfig: SecurityConfig, logger?: ILogger);
|
|
14
|
+
abstract readonly name: EClientAdapter;
|
|
15
|
+
/**
|
|
16
|
+
* 发送 HTTP 请求(由子类实现)
|
|
17
|
+
* @param options 请求选项
|
|
18
|
+
*/
|
|
19
|
+
protected abstract sendRequest<T>(options: HttpRequestOptions): Promise<HttpResponse<T>>;
|
|
20
|
+
/**
|
|
21
|
+
* 检查适配器是否可用
|
|
22
|
+
*/
|
|
23
|
+
abstract isAvailable(): boolean;
|
|
24
|
+
/**
|
|
25
|
+
* 发送请求(带重试机制)
|
|
26
|
+
* @param options 请求选项
|
|
27
|
+
*/
|
|
28
|
+
request<T = any>(options: HttpRequestOptions): Promise<HttpResponse<T>>;
|
|
29
|
+
/**
|
|
30
|
+
* 更新请求配置
|
|
31
|
+
* @param config 新的请求配置
|
|
32
|
+
*/
|
|
33
|
+
updateConfig(config: Partial<RequestConfig>): void;
|
|
34
|
+
/**
|
|
35
|
+
* 设置日志记录器
|
|
36
|
+
* @param logger 日志记录器
|
|
37
|
+
*/
|
|
38
|
+
setLogger(logger: ILogger): void;
|
|
39
|
+
/**
|
|
40
|
+
* 构建查询字符串
|
|
41
|
+
* @param params 查询参数
|
|
42
|
+
*/
|
|
43
|
+
protected buildQueryString(params?: Record<string, string | number | boolean>): string;
|
|
44
|
+
/**
|
|
45
|
+
* 构建完整 URL
|
|
46
|
+
* @param url 基础 URL
|
|
47
|
+
* @param params 查询参数
|
|
48
|
+
*/
|
|
49
|
+
protected buildUrl(url: string, params?: Record<string, string | number | boolean>): string;
|
|
50
|
+
/**
|
|
51
|
+
* 标准化响应头
|
|
52
|
+
* @param headers 原始响应头
|
|
53
|
+
*/
|
|
54
|
+
protected normalizeHeaders(headers: any): Record<string, string>;
|
|
55
|
+
}
|
|
56
|
+
//# sourceMappingURL=base.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../../src/adapter/base.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EACR,YAAY,EACZ,kBAAkB,EAClB,YAAY,EACZ,aAAa,EACb,cAAc,EACd,OAAO,EACV,MAAM,UAAU,CAAC;AAElB,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAE/C;;GAEG;AACH,8BAAsB,eAAgB,YAAW,YAAY;IACzD,SAAS,CAAC,aAAa,EAAE,aAAa,CAAC;IACvC,SAAS,CAAC,cAAc,EAAE,cAAc,CAAC;IACzC,SAAS,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC;gBAEf,aAAa,EAAE,aAAa,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,CAAC,EAAE,OAAO;IAM1F,kBAAyB,IAAI,EAAE,cAAc,CAAC;IAE9C;;;OAGG;IACH,SAAS,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,EAAE,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;IAExF;;OAEG;aACa,WAAW,IAAI,OAAO;IAEtC;;;OAGG;IACU,OAAO,CAAC,CAAC,GAAG,GAAG,EAAE,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;IA8DpF;;;OAGG;IACI,YAAY,CAAC,MAAM,EAAE,OAAO,CAAC,aAAa,CAAC,GAAG,IAAI;IAIzD;;;OAGG;IACI,SAAS,CAAC,MAAM,EAAE,OAAO,GAAG,IAAI;IAIvC;;;OAGG;IACH,SAAS,CAAC,gBAAgB,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,GAAG,MAAM;IAatF;;;;OAIG;IACH,SAAS,CAAC,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,GAAG,MAAM;IAU3F;;;OAGG;IACH,SAAS,CAAC,gBAAgB,CAAC,OAAO,EAAE,GAAG,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;CAkBnE"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/adapter/index.ts"],"names":[],"mappings":"AAAA,cAAc,QAAQ,CAAC;AACvB,cAAc,iBAAiB,CAAC;AAChC,cAAc,kBAAkB,CAAC"}
|