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.
Files changed (263) hide show
  1. package/CHANGELOG.md +5 -0
  2. package/README.md +160 -0
  3. package/dist/cjs/adapter/axios.adapter.js +224 -0
  4. package/dist/cjs/adapter/axios.adapter.js.map +1 -0
  5. package/dist/cjs/adapter/base.js +134 -0
  6. package/dist/cjs/adapter/base.js.map +1 -0
  7. package/dist/cjs/adapter/index.js +20 -0
  8. package/dist/cjs/adapter/index.js.map +1 -0
  9. package/dist/cjs/adapter/undici.adapter.js +272 -0
  10. package/dist/cjs/adapter/undici.adapter.js.map +1 -0
  11. package/dist/cjs/client.js +409 -0
  12. package/dist/cjs/client.js.map +1 -0
  13. package/dist/cjs/config.js +69 -0
  14. package/dist/cjs/config.js.map +1 -0
  15. package/dist/cjs/const/config.const.js +53 -0
  16. package/dist/cjs/const/config.const.js.map +1 -0
  17. package/dist/cjs/const/dns.const.js +16 -0
  18. package/dist/cjs/const/dns.const.js.map +1 -0
  19. package/dist/cjs/const/enum.const.js +22 -0
  20. package/dist/cjs/const/enum.const.js.map +1 -0
  21. package/dist/cjs/const/index.js +21 -0
  22. package/dist/cjs/const/index.js.map +1 -0
  23. package/dist/cjs/const/ip.const.js +110 -0
  24. package/dist/cjs/const/ip.const.js.map +1 -0
  25. package/dist/cjs/index.js +25 -0
  26. package/dist/cjs/index.js.map +1 -0
  27. package/dist/cjs/logger/base.js +60 -0
  28. package/dist/cjs/logger/base.js.map +1 -0
  29. package/dist/cjs/logger/http_client.logger.js +209 -0
  30. package/dist/cjs/logger/http_client.logger.js.map +1 -0
  31. package/dist/cjs/logger/index.js +20 -0
  32. package/dist/cjs/logger/index.js.map +1 -0
  33. package/dist/cjs/logger/log.filter.js +126 -0
  34. package/dist/cjs/logger/log.filter.js.map +1 -0
  35. package/dist/cjs/security/dns.validator.js +137 -0
  36. package/dist/cjs/security/dns.validator.js.map +1 -0
  37. package/dist/cjs/security/index.js +21 -0
  38. package/dist/cjs/security/index.js.map +1 -0
  39. package/dist/cjs/security/ip.validator.js +107 -0
  40. package/dist/cjs/security/ip.validator.js.map +1 -0
  41. package/dist/cjs/security/ssrf.guard.js +180 -0
  42. package/dist/cjs/security/ssrf.guard.js.map +1 -0
  43. package/dist/cjs/security/url.validator.js +170 -0
  44. package/dist/cjs/security/url.validator.js.map +1 -0
  45. package/dist/cjs/tsconfig.tsbuildinfo +1 -0
  46. package/dist/cjs/types/adapter.js +6 -0
  47. package/dist/cjs/types/adapter.js.map +1 -0
  48. package/dist/cjs/types/client.js +6 -0
  49. package/dist/cjs/types/client.js.map +1 -0
  50. package/dist/cjs/types/config.js +6 -0
  51. package/dist/cjs/types/config.js.map +1 -0
  52. package/dist/cjs/types/errors.js +35 -0
  53. package/dist/cjs/types/errors.js.map +1 -0
  54. package/dist/cjs/types/index.js +35 -0
  55. package/dist/cjs/types/index.js.map +1 -0
  56. package/dist/cjs/types/ip.js +6 -0
  57. package/dist/cjs/types/ip.js.map +1 -0
  58. package/dist/cjs/types/logger.js +6 -0
  59. package/dist/cjs/types/logger.js.map +1 -0
  60. package/dist/cjs/types/request_response.js +6 -0
  61. package/dist/cjs/types/request_response.js.map +1 -0
  62. package/dist/cjs/types/security.js +6 -0
  63. package/dist/cjs/types/security.js.map +1 -0
  64. package/dist/cjs/types/trace.js +14 -0
  65. package/dist/cjs/types/trace.js.map +1 -0
  66. package/dist/cjs/utils/common.js +31 -0
  67. package/dist/cjs/utils/common.js.map +1 -0
  68. package/dist/cjs/utils/domain.js +79 -0
  69. package/dist/cjs/utils/domain.js.map +1 -0
  70. package/dist/cjs/utils/index.js +44 -0
  71. package/dist/cjs/utils/index.js.map +1 -0
  72. package/dist/cjs/utils/ip.range.js +200 -0
  73. package/dist/cjs/utils/ip.range.js.map +1 -0
  74. package/dist/cjs/utils/trace.context.js +213 -0
  75. package/dist/cjs/utils/trace.context.js.map +1 -0
  76. package/dist/esm/adapter/axios.adapter.js +184 -0
  77. package/dist/esm/adapter/axios.adapter.js.map +1 -0
  78. package/dist/esm/adapter/base.js +130 -0
  79. package/dist/esm/adapter/base.js.map +1 -0
  80. package/dist/esm/adapter/index.js +4 -0
  81. package/dist/esm/adapter/index.js.map +1 -0
  82. package/dist/esm/adapter/undici.adapter.js +235 -0
  83. package/dist/esm/adapter/undici.adapter.js.map +1 -0
  84. package/dist/esm/client.js +405 -0
  85. package/dist/esm/client.js.map +1 -0
  86. package/dist/esm/config.js +65 -0
  87. package/dist/esm/config.js.map +1 -0
  88. package/dist/esm/const/config.const.js +50 -0
  89. package/dist/esm/const/config.const.js.map +1 -0
  90. package/dist/esm/const/dns.const.js +13 -0
  91. package/dist/esm/const/dns.const.js.map +1 -0
  92. package/dist/esm/const/enum.const.js +19 -0
  93. package/dist/esm/const/enum.const.js.map +1 -0
  94. package/dist/esm/const/index.js +5 -0
  95. package/dist/esm/const/index.js.map +1 -0
  96. package/dist/esm/const/ip.const.js +107 -0
  97. package/dist/esm/const/ip.const.js.map +1 -0
  98. package/dist/esm/index.js +9 -0
  99. package/dist/esm/index.js.map +1 -0
  100. package/dist/esm/logger/base.js +55 -0
  101. package/dist/esm/logger/base.js.map +1 -0
  102. package/dist/esm/logger/http_client.logger.js +205 -0
  103. package/dist/esm/logger/http_client.logger.js.map +1 -0
  104. package/dist/esm/logger/index.js +4 -0
  105. package/dist/esm/logger/index.js.map +1 -0
  106. package/dist/esm/logger/log.filter.js +122 -0
  107. package/dist/esm/logger/log.filter.js.map +1 -0
  108. package/dist/esm/security/dns.validator.js +133 -0
  109. package/dist/esm/security/dns.validator.js.map +1 -0
  110. package/dist/esm/security/index.js +5 -0
  111. package/dist/esm/security/index.js.map +1 -0
  112. package/dist/esm/security/ip.validator.js +103 -0
  113. package/dist/esm/security/ip.validator.js.map +1 -0
  114. package/dist/esm/security/ssrf.guard.js +176 -0
  115. package/dist/esm/security/ssrf.guard.js.map +1 -0
  116. package/dist/esm/security/url.validator.js +166 -0
  117. package/dist/esm/security/url.validator.js.map +1 -0
  118. package/dist/esm/tsconfig.esm.tsbuildinfo +1 -0
  119. package/dist/esm/types/adapter.js +5 -0
  120. package/dist/esm/types/adapter.js.map +1 -0
  121. package/dist/esm/types/client.js +5 -0
  122. package/dist/esm/types/client.js.map +1 -0
  123. package/dist/esm/types/config.js +5 -0
  124. package/dist/esm/types/config.js.map +1 -0
  125. package/dist/esm/types/errors.js +30 -0
  126. package/dist/esm/types/errors.js.map +1 -0
  127. package/dist/esm/types/index.js +19 -0
  128. package/dist/esm/types/index.js.map +1 -0
  129. package/dist/esm/types/ip.js +5 -0
  130. package/dist/esm/types/ip.js.map +1 -0
  131. package/dist/esm/types/logger.js +5 -0
  132. package/dist/esm/types/logger.js.map +1 -0
  133. package/dist/esm/types/request_response.js +5 -0
  134. package/dist/esm/types/request_response.js.map +1 -0
  135. package/dist/esm/types/security.js +5 -0
  136. package/dist/esm/types/security.js.map +1 -0
  137. package/dist/esm/types/trace.js +11 -0
  138. package/dist/esm/types/trace.js.map +1 -0
  139. package/dist/esm/utils/common.js +27 -0
  140. package/dist/esm/utils/common.js.map +1 -0
  141. package/dist/esm/utils/domain.js +71 -0
  142. package/dist/esm/utils/domain.js.map +1 -0
  143. package/dist/esm/utils/index.js +7 -0
  144. package/dist/esm/utils/index.js.map +1 -0
  145. package/dist/esm/utils/ip.range.js +187 -0
  146. package/dist/esm/utils/ip.range.js.map +1 -0
  147. package/dist/esm/utils/trace.context.js +199 -0
  148. package/dist/esm/utils/trace.context.js.map +1 -0
  149. package/dist/types/adapter/axios.adapter.d.ts +51 -0
  150. package/dist/types/adapter/axios.adapter.d.ts.map +1 -0
  151. package/dist/types/adapter/base.d.ts +56 -0
  152. package/dist/types/adapter/base.d.ts.map +1 -0
  153. package/dist/types/adapter/index.d.ts +4 -0
  154. package/dist/types/adapter/index.d.ts.map +1 -0
  155. package/dist/types/adapter/undici.adapter.d.ts +68 -0
  156. package/dist/types/adapter/undici.adapter.d.ts.map +1 -0
  157. package/dist/types/client.d.ts +105 -0
  158. package/dist/types/client.d.ts.map +1 -0
  159. package/dist/types/config.d.ts +14 -0
  160. package/dist/types/config.d.ts.map +1 -0
  161. package/dist/types/const/config.const.d.ts +23 -0
  162. package/dist/types/const/config.const.d.ts.map +1 -0
  163. package/dist/types/const/dns.const.d.ts +13 -0
  164. package/dist/types/const/dns.const.d.ts.map +1 -0
  165. package/dist/types/const/enum.const.d.ts +17 -0
  166. package/dist/types/const/enum.const.d.ts.map +1 -0
  167. package/dist/types/const/index.d.ts +5 -0
  168. package/dist/types/const/index.d.ts.map +1 -0
  169. package/dist/types/const/ip.const.d.ts +42 -0
  170. package/dist/types/const/ip.const.d.ts.map +1 -0
  171. package/dist/types/index.d.ts +9 -0
  172. package/dist/types/index.d.ts.map +1 -0
  173. package/dist/types/logger/base.d.ts +42 -0
  174. package/dist/types/logger/base.d.ts.map +1 -0
  175. package/dist/types/logger/http_client.logger.d.ts +49 -0
  176. package/dist/types/logger/http_client.logger.d.ts.map +1 -0
  177. package/dist/types/logger/index.d.ts +4 -0
  178. package/dist/types/logger/index.d.ts.map +1 -0
  179. package/dist/types/logger/log.filter.d.ts +56 -0
  180. package/dist/types/logger/log.filter.d.ts.map +1 -0
  181. package/dist/types/security/dns.validator.d.ts +61 -0
  182. package/dist/types/security/dns.validator.d.ts.map +1 -0
  183. package/dist/types/security/index.d.ts +5 -0
  184. package/dist/types/security/index.d.ts.map +1 -0
  185. package/dist/types/security/ip.validator.d.ts +31 -0
  186. package/dist/types/security/ip.validator.d.ts.map +1 -0
  187. package/dist/types/security/ssrf.guard.d.ts +54 -0
  188. package/dist/types/security/ssrf.guard.d.ts.map +1 -0
  189. package/dist/types/security/url.validator.d.ts +76 -0
  190. package/dist/types/security/url.validator.d.ts.map +1 -0
  191. package/dist/types/types/adapter.d.ts +30 -0
  192. package/dist/types/types/adapter.d.ts.map +1 -0
  193. package/dist/types/types/client.d.ts +85 -0
  194. package/dist/types/types/client.d.ts.map +1 -0
  195. package/dist/types/types/config.d.ts +99 -0
  196. package/dist/types/types/config.d.ts.map +1 -0
  197. package/dist/types/types/errors.d.ts +23 -0
  198. package/dist/types/types/errors.d.ts.map +1 -0
  199. package/dist/types/types/index.d.ts +10 -0
  200. package/dist/types/types/index.d.ts.map +1 -0
  201. package/dist/types/types/ip.d.ts +32 -0
  202. package/dist/types/types/ip.d.ts.map +1 -0
  203. package/dist/types/types/logger.d.ts +136 -0
  204. package/dist/types/types/logger.d.ts.map +1 -0
  205. package/dist/types/types/request_response.d.ts +54 -0
  206. package/dist/types/types/request_response.d.ts.map +1 -0
  207. package/dist/types/types/security.d.ts +115 -0
  208. package/dist/types/types/security.d.ts.map +1 -0
  209. package/dist/types/types/trace.d.ts +34 -0
  210. package/dist/types/types/trace.d.ts.map +1 -0
  211. package/dist/types/utils/common.d.ts +14 -0
  212. package/dist/types/utils/common.d.ts.map +1 -0
  213. package/dist/types/utils/domain.d.ts +39 -0
  214. package/dist/types/utils/domain.d.ts.map +1 -0
  215. package/dist/types/utils/index.d.ts +6 -0
  216. package/dist/types/utils/index.d.ts.map +1 -0
  217. package/dist/types/utils/ip.range.d.ts +61 -0
  218. package/dist/types/utils/ip.range.d.ts.map +1 -0
  219. package/dist/types/utils/trace.context.d.ts +106 -0
  220. package/dist/types/utils/trace.context.d.ts.map +1 -0
  221. package/docs/adapters.md +53 -0
  222. package/docs/configuration.md +149 -0
  223. package/docs/logging.md +70 -0
  224. package/docs/proxy.md +44 -0
  225. package/docs/security.md +56 -0
  226. package/docs/trace-context.md +436 -0
  227. package/package.json +50 -0
  228. package/src/adapter/axios.adapter.ts +228 -0
  229. package/src/adapter/base.ts +180 -0
  230. package/src/adapter/index.ts +3 -0
  231. package/src/adapter/undici.adapter.ts +282 -0
  232. package/src/client.ts +552 -0
  233. package/src/config.ts +86 -0
  234. package/src/const/config.const.ts +60 -0
  235. package/src/const/dns.const.ts +15 -0
  236. package/src/const/enum.const.ts +17 -0
  237. package/src/const/index.ts +4 -0
  238. package/src/const/ip.const.ts +139 -0
  239. package/src/index.ts +8 -0
  240. package/src/logger/base.ts +75 -0
  241. package/src/logger/http_client.logger.ts +272 -0
  242. package/src/logger/index.ts +3 -0
  243. package/src/logger/log.filter.ts +149 -0
  244. package/src/security/dns.validator.ts +170 -0
  245. package/src/security/index.ts +4 -0
  246. package/src/security/ip.validator.ts +124 -0
  247. package/src/security/ssrf.guard.ts +224 -0
  248. package/src/security/url.validator.ts +192 -0
  249. package/src/types/adapter.ts +38 -0
  250. package/src/types/client.ts +119 -0
  251. package/src/types/config.ts +110 -0
  252. package/src/types/errors.ts +38 -0
  253. package/src/types/index.ts +27 -0
  254. package/src/types/ip.ts +34 -0
  255. package/src/types/logger.ts +150 -0
  256. package/src/types/request_response.ts +65 -0
  257. package/src/types/security.ts +126 -0
  258. package/src/types/trace.ts +35 -0
  259. package/src/utils/common.ts +28 -0
  260. package/src/utils/domain.ts +78 -0
  261. package/src/utils/index.ts +7 -0
  262. package/src/utils/ip.range.ts +218 -0
  263. package/src/utils/trace.context.ts +240 -0
@@ -0,0 +1,54 @@
1
+ /**
2
+ * SSRF 防护
3
+ * 整合 IP、DNS 和 URL 验证,防止服务器端请求伪造攻击
4
+ */
5
+ import type { ISsrfGuard, SecurityConfig, SsrfGuardResult } from '../types';
6
+ /**
7
+ * SSRF 防护类
8
+ */
9
+ export declare class SsrfGuard implements ISsrfGuard {
10
+ private dnsValidator;
11
+ private urlValidator;
12
+ private config;
13
+ constructor(config: SecurityConfig);
14
+ /**
15
+ * 验证 URL 是否安全
16
+ * @param url 要验证的 URL
17
+ * @returns 验证结果
18
+ */
19
+ validate(url: string): Promise<SsrfGuardResult>;
20
+ /**
21
+ * 验证并返回安全的 URL
22
+ * @param url 要验证的 URL
23
+ * @returns 安全的 URL 和验证结果
24
+ * @throws {SecurityError} 验证失败时抛出错误
25
+ */
26
+ validateAndGetSafeUrl(url: string): Promise<{
27
+ safeUrl: string;
28
+ result: SsrfGuardResult;
29
+ }>;
30
+ /**
31
+ * 更新配置
32
+ * @param config 新的安全配置
33
+ */
34
+ updateConfig(config: Partial<SecurityConfig>): void;
35
+ /**
36
+ * 清空 DNS 缓存
37
+ */
38
+ clearDnsCache(): void;
39
+ /**
40
+ * 获取 DNS 缓存大小
41
+ * @returns 缓存条目数量
42
+ */
43
+ getDnsCacheSize(): number;
44
+ /**
45
+ * 清理过期的 DNS 缓存
46
+ */
47
+ cleanExpiredDnsCache(): void;
48
+ /**
49
+ * 获取当前配置
50
+ * @returns 安全配置副本
51
+ */
52
+ getConfig(): SecurityConfig;
53
+ }
54
+ //# sourceMappingURL=ssrf.guard.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ssrf.guard.d.ts","sourceRoot":"","sources":["../../../src/security/ssrf.guard.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,KAAK,EACR,UAAU,EACV,cAAc,EACd,eAAe,EAClB,MAAM,UAAU,CAAC;AAMlB;;GAEG;AACH,qBAAa,SAAU,YAAW,UAAU;IACxC,OAAO,CAAC,YAAY,CAAe;IACnC,OAAO,CAAC,YAAY,CAAe;IACnC,OAAO,CAAC,MAAM,CAAiB;gBAEnB,MAAM,EAAE,cAAc;IAUlC;;;;OAIG;IACU,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC;IA0G5D;;;;;OAKG;IACU,qBAAqB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,eAAe,CAAA;KAAE,CAAC;IAiBtG;;;OAGG;IACI,YAAY,CAAC,MAAM,EAAE,OAAO,CAAC,cAAc,CAAC,GAAG,IAAI;IAoB1D;;OAEG;IACI,aAAa,IAAI,IAAI;IAI5B;;;OAGG;IACI,eAAe,IAAI,MAAM;IAIhC;;OAEG;IACI,oBAAoB,IAAI,IAAI;IAInC;;;OAGG;IACI,SAAS,IAAI,cAAc;CAGrC"}
@@ -0,0 +1,76 @@
1
+ /**
2
+ * URL 验证器
3
+ */
4
+ import type { UrlValidationResult } from '../types';
5
+ /**
6
+ * URL 验证器类
7
+ */
8
+ export declare class UrlValidator {
9
+ private whitelist;
10
+ private blacklist;
11
+ private whitelistRegexps;
12
+ private blacklistRegexps;
13
+ constructor(whitelist?: string[], blacklist?: string[]);
14
+ /**
15
+ * 验证 URL
16
+ * @param url URL 字符串
17
+ * @returns 验证结果
18
+ */
19
+ validate(url: string): UrlValidationResult;
20
+ /**
21
+ * 检查域名是否匹配任一模式(使用预生成的正则表达式)
22
+ * @param hostname 域名
23
+ * @param regexps 正则表达式列表
24
+ * @returns 是否匹配
25
+ */
26
+ private matchesAny;
27
+ /**
28
+ * 更新白名单
29
+ * @param whitelist 新的白名单
30
+ */
31
+ setWhitelist(whitelist: string[]): void;
32
+ /**
33
+ * 更新黑名单
34
+ * @param blacklist 新的黑名单
35
+ */
36
+ setBlacklist(blacklist: string[]): void;
37
+ /**
38
+ * 添加到白名单
39
+ * @param patterns 要添加的模式
40
+ */
41
+ addToWhitelist(...patterns: string[]): void;
42
+ /**
43
+ * 添加到黑名单
44
+ * @param patterns 要添加的模式
45
+ */
46
+ addToBlacklist(...patterns: string[]): void;
47
+ /**
48
+ * 从白名单移除
49
+ * @param patterns 要移除的模式
50
+ */
51
+ removeFromWhitelist(...patterns: string[]): void;
52
+ /**
53
+ * 从黑名单移除
54
+ * @param patterns 要移除的模式
55
+ */
56
+ removeFromBlacklist(...patterns: string[]): void;
57
+ /**
58
+ * 获取白名单
59
+ * @returns 白名单副本
60
+ */
61
+ getWhitelist(): string[];
62
+ /**
63
+ * 获取黑名单
64
+ * @returns 黑名单副本
65
+ */
66
+ getBlacklist(): string[];
67
+ /**
68
+ * 清空白名单
69
+ */
70
+ clearWhitelist(): void;
71
+ /**
72
+ * 清空黑名单
73
+ */
74
+ clearBlacklist(): void;
75
+ }
76
+ //# sourceMappingURL=url.validator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"url.validator.d.ts","sourceRoot":"","sources":["../../../src/security/url.validator.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC;AAGpD;;GAEG;AACH,qBAAa,YAAY;IACrB,OAAO,CAAC,SAAS,CAAW;IAC5B,OAAO,CAAC,SAAS,CAAW;IAC5B,OAAO,CAAC,gBAAgB,CAAW;IACnC,OAAO,CAAC,gBAAgB,CAAW;gBAEvB,SAAS,GAAE,MAAM,EAAO,EAAE,SAAS,GAAE,MAAM,EAAO;IAQ9D;;;;OAIG;IACI,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,mBAAmB;IAiEjD;;;;;OAKG;IACH,OAAO,CAAC,UAAU;IAIlB;;;OAGG;IACI,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,IAAI;IAK9C;;;OAGG;IACI,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,IAAI;IAK9C;;;OAGG;IACI,cAAc,CAAC,GAAG,QAAQ,EAAE,MAAM,EAAE,GAAG,IAAI;IAKlD;;;OAGG;IACI,cAAc,CAAC,GAAG,QAAQ,EAAE,MAAM,EAAE,GAAG,IAAI;IAKlD;;;OAGG;IACI,mBAAmB,CAAC,GAAG,QAAQ,EAAE,MAAM,EAAE,GAAG,IAAI;IAKvD;;;OAGG;IACI,mBAAmB,CAAC,GAAG,QAAQ,EAAE,MAAM,EAAE,GAAG,IAAI;IAKvD;;;OAGG;IACI,YAAY,IAAI,MAAM,EAAE;IAI/B;;;OAGG;IACI,YAAY,IAAI,MAAM,EAAE;IAI/B;;OAEG;IACI,cAAc,IAAI,IAAI;IAK7B;;OAEG;IACI,cAAc,IAAI,IAAI;CAIhC"}
@@ -0,0 +1,30 @@
1
+ /**
2
+ * 适配器相关类型定义
3
+ */
4
+ import type { HttpRequestOptions, HttpResponse } from './request_response';
5
+ import type { RequestConfig } from './config';
6
+ import type { EClientAdapter } from '../const';
7
+ /**
8
+ * HTTP 适配器接口
9
+ */
10
+ export interface IHttpAdapter {
11
+ /** 适配器名称 */
12
+ readonly name: EClientAdapter;
13
+ /**
14
+ * 发送 HTTP 请求
15
+ * @param options 请求选项
16
+ * @returns 响应结果
17
+ */
18
+ request: <T = any>(options: HttpRequestOptions) => Promise<HttpResponse<T>>;
19
+ /**
20
+ * 检查适配器是否可用
21
+ * @returns 是否可用
22
+ */
23
+ isAvailable: () => boolean;
24
+ /**
25
+ * 更新适配器配置
26
+ * @param config 请求配置
27
+ */
28
+ updateConfig: (config: Partial<RequestConfig>) => void;
29
+ }
30
+ //# sourceMappingURL=adapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../../../src/types/adapter.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EACR,kBAAkB,EAClB,YAAY,EACf,MAAM,oBAAoB,CAAC;AAC5B,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAC9C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAE/C;;GAEG;AACH,MAAM,WAAW,YAAY;IACzB,YAAY;IACZ,QAAQ,CAAC,IAAI,EAAE,cAAc,CAAC;IAE9B;;;;OAIG;IACH,OAAO,EAAE,CAAC,CAAC,GAAG,GAAG,EAAE,OAAO,EAAE,kBAAkB,KAAK,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;IAE5E;;;OAGG;IACH,WAAW,EAAE,MAAM,OAAO,CAAC;IAE3B;;;OAGG;IACH,YAAY,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC,aAAa,CAAC,KAAK,IAAI,CAAC;CAC1D"}
@@ -0,0 +1,85 @@
1
+ /**
2
+ * 客户端相关类型定义
3
+ */
4
+ import type { HttpRequestOptions, HttpResponse } from './request_response';
5
+ import type { EClientAdapter } from '../const';
6
+ /**
7
+ * 正向代理配置
8
+ */
9
+ export interface IForwardProxy {
10
+ enabled: boolean;
11
+ https_proxy: string;
12
+ http_proxy: string;
13
+ no_proxy: string[];
14
+ }
15
+ /**
16
+ * HTTP 客户端接口
17
+ */
18
+ export interface IHttpClient {
19
+ /**
20
+ * 挂载适配器.
21
+ * @param adapter
22
+ * @returns this
23
+ */
24
+ withAdapter: (adapter: EClientAdapter) => this;
25
+ /**
26
+ * 挂载正向代理.
27
+ * @param proxy
28
+ * @returns this
29
+ */
30
+ withForwardProxy: (proxy: IForwardProxy) => this;
31
+ /**
32
+ * 发送 HTTP 请求
33
+ * @param options 请求选项
34
+ * @returns 响应结果
35
+ */
36
+ request: <T = any>(options: HttpRequestOptions) => Promise<HttpResponse<T>>;
37
+ /**
38
+ * GET 请求
39
+ * @param url 请求 URL
40
+ * @param options 其他请求选项
41
+ * @returns 响应结果
42
+ */
43
+ get: <T = any>(url: string, options?: Partial<Omit<HttpRequestOptions, 'method' | 'url'>>) => Promise<HttpResponse<T>>;
44
+ /**
45
+ * POST 请求
46
+ * @param url 请求 URL
47
+ * @param body 请求体
48
+ * @param options 其他请求选项
49
+ * @returns 响应结果
50
+ */
51
+ post: <T = any>(url: string, body?: any, options?: Partial<Omit<HttpRequestOptions, 'method' | 'url' | 'body'>>) => Promise<HttpResponse<T>>;
52
+ /**
53
+ * PUT 请求
54
+ * @param url 请求 URL
55
+ * @param body 请求体
56
+ * @param options 其他请求选项
57
+ * @returns 响应结果
58
+ */
59
+ put: <T = any>(url: string, body?: any, options?: Partial<Omit<HttpRequestOptions, 'method' | 'url' | 'body'>>) => Promise<HttpResponse<T>>;
60
+ /**
61
+ * DELETE 请求
62
+ * @param url 请求 URL
63
+ * @param options 其他请求选项
64
+ * @returns 响应结果
65
+ */
66
+ delete: <T = any>(url: string, options?: Partial<Omit<HttpRequestOptions, 'method' | 'url'>>) => Promise<HttpResponse<T>>;
67
+ /**
68
+ * PATCH 请求
69
+ * @param url 请求 URL
70
+ * @param body 请求体
71
+ * @param options 其他请求选项
72
+ * @returns 响应结果
73
+ */
74
+ patch: <T = any>(url: string, body?: any, options?: Partial<Omit<HttpRequestOptions, 'method' | 'url' | 'body'>>) => Promise<HttpResponse<T>>;
75
+ /**
76
+ * 清空 DNS 缓存
77
+ */
78
+ clearDnsCache: () => void;
79
+ /**
80
+ * 获取 DNS 缓存大小
81
+ * @returns 缓存条目数量
82
+ */
83
+ getDnsCacheSize: () => number;
84
+ }
85
+ //# sourceMappingURL=client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../src/types/client.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EACR,kBAAkB,EAClB,YAAY,EACf,MAAM,oBAAoB,CAAC;AAC5B,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAE/C;;GAEG;AACH,MAAM,WAAW,aAAa;IAC1B,OAAO,EAAE,OAAO,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACtB;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IACxB;;;;OAIG;IACH,WAAW,EAAE,CAAC,OAAO,EAAE,cAAc,KAAK,IAAI,CAAC;IAE/C;;;;OAIG;IACH,gBAAgB,EAAE,CAAC,KAAK,EAAE,aAAa,KAAK,IAAI,CAAC;IAEjD;;;;OAIG;IACH,OAAO,EAAE,CAAC,CAAC,GAAG,GAAG,EAAE,OAAO,EAAE,kBAAkB,KAAK,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;IAE5E;;;;;OAKG;IACH,GAAG,EAAE,CAAC,CAAC,GAAG,GAAG,EACT,GAAG,EAAE,MAAM,EACX,OAAO,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,kBAAkB,EAAE,QAAQ,GAAG,KAAK,CAAC,CAAC,KAC5D,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;IAE9B;;;;;;OAMG;IACH,IAAI,EAAE,CAAC,CAAC,GAAG,GAAG,EACV,GAAG,EAAE,MAAM,EACX,IAAI,CAAC,EAAE,GAAG,EACV,OAAO,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,kBAAkB,EAAE,QAAQ,GAAG,KAAK,GAAG,MAAM,CAAC,CAAC,KACrE,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;IAE9B;;;;;;OAMG;IACH,GAAG,EAAE,CAAC,CAAC,GAAG,GAAG,EACT,GAAG,EAAE,MAAM,EACX,IAAI,CAAC,EAAE,GAAG,EACV,OAAO,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,kBAAkB,EAAE,QAAQ,GAAG,KAAK,GAAG,MAAM,CAAC,CAAC,KACrE,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;IAE9B;;;;;OAKG;IACH,MAAM,EAAE,CAAC,CAAC,GAAG,GAAG,EACZ,GAAG,EAAE,MAAM,EACX,OAAO,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,kBAAkB,EAAE,QAAQ,GAAG,KAAK,CAAC,CAAC,KAC5D,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;IAE9B;;;;;;OAMG;IACH,KAAK,EAAE,CAAC,CAAC,GAAG,GAAG,EACX,GAAG,EAAE,MAAM,EACX,IAAI,CAAC,EAAE,GAAG,EACV,OAAO,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,kBAAkB,EAAE,QAAQ,GAAG,KAAK,GAAG,MAAM,CAAC,CAAC,KACrE,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;IAG9B;;OAEG;IACH,aAAa,EAAE,MAAM,IAAI,CAAC;IAE1B;;;OAGG;IACH,eAAe,EAAE,MAAM,MAAM,CAAC;CACjC"}
@@ -0,0 +1,99 @@
1
+ /**
2
+ * 配置相关类型定义
3
+ */
4
+ import type { ILogger, IHttpClientLogger, LogFilterConfig } from './logger';
5
+ import type { EClientAdapter } from '../const';
6
+ /**
7
+ * 代理配置
8
+ */
9
+ export interface ProxyConfig {
10
+ host: string;
11
+ port: number;
12
+ protocol: 'http' | 'https';
13
+ auth?: {
14
+ username: string;
15
+ password: string;
16
+ };
17
+ }
18
+ /**
19
+ * 安全配置
20
+ */
21
+ export interface SecurityConfig {
22
+ /** 证书校验 **/
23
+ rejectUnauthorized: boolean;
24
+ /** 启用 DNS 验证 */
25
+ enableDnsValidation: boolean;
26
+ /** 启用 IP 地址验证 */
27
+ enableIpValidation: boolean;
28
+ /** 允许访问私有 IP */
29
+ allowPrivateIp: boolean;
30
+ /** 域名白名单(支持通配符,如 *.example.com 匹配一级子域名) */
31
+ whitelist: string[];
32
+ /** 域名黑名单(支持通配符,如 *.example.com 匹配一级子域名) */
33
+ blacklist: string[];
34
+ /** DNS 缓存 TTL(毫秒) */
35
+ dnsCacheTtl: number;
36
+ /** DNS 缓存最大条目数 */
37
+ dnsCacheMaxSize: number;
38
+ }
39
+ /**
40
+ * 日志配置
41
+ */
42
+ export interface LoggingConfig {
43
+ /** 启用日志 */
44
+ enabled: boolean;
45
+ /** 自定义日志记录器(通用) */
46
+ logger?: ILogger;
47
+ /** 自定义 HTTP 客户端日志记录器 */
48
+ httpLogger?: IHttpClientLogger;
49
+ /** 记录请求体 */
50
+ logRequestBody: boolean;
51
+ /** 记录响应体 */
52
+ logResponseBody: boolean;
53
+ /** 响应体最大记录长度(字节) */
54
+ bodyMaxLength: number;
55
+ /** 日志过滤器配置 */
56
+ filter?: LogFilterConfig;
57
+ }
58
+ /**
59
+ * 请求配置
60
+ */
61
+ export interface RequestConfig {
62
+ /** 超时时间(毫秒) */
63
+ timeout: number;
64
+ /** 重试次数 */
65
+ retries: number;
66
+ /** 重试延迟(毫秒) */
67
+ retryDelay: number;
68
+ /** 代理配置 */
69
+ proxy?: ProxyConfig;
70
+ /** 最大重定向次数 */
71
+ maxRedirects: number;
72
+ /** 最大请求体大小(字节) */
73
+ maxRequestBodySize: number;
74
+ /** 最大响应体大小(字节) */
75
+ maxResponseBodySize: number;
76
+ }
77
+ /**
78
+ * HTTP 客户端配置
79
+ */
80
+ export interface HttpClientConfig {
81
+ /** 适配器类型 */
82
+ adapter: EClientAdapter;
83
+ /** 安全配置 */
84
+ security: SecurityConfig;
85
+ /** 日志配置 */
86
+ logging: LoggingConfig;
87
+ /** 请求配置 */
88
+ request: RequestConfig;
89
+ }
90
+ /**
91
+ * 部分 HTTP 客户端配置(用于创建实例时)
92
+ */
93
+ export interface PartialHttpClientConfig {
94
+ adapter?: EClientAdapter;
95
+ security?: Partial<SecurityConfig>;
96
+ logging?: Partial<LoggingConfig>;
97
+ request?: Partial<RequestConfig>;
98
+ }
99
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../src/types/config.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EACR,OAAO,EACP,iBAAiB,EACjB,eAAe,EAClB,MAAM,UAAU,CAAC;AAClB,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAE/C;;GAEG;AACH,MAAM,WAAW,WAAW;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC;IAC3B,IAAI,CAAC,EAAE;QACH,QAAQ,EAAE,MAAM,CAAC;QACjB,QAAQ,EAAE,MAAM,CAAA;KACnB,CAAC;CACL;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC3B,YAAY;IACZ,kBAAkB,EAAE,OAAO,CAAC;IAC5B,gBAAgB;IAChB,mBAAmB,EAAE,OAAO,CAAC;IAC7B,iBAAiB;IACjB,kBAAkB,EAAE,OAAO,CAAC;IAC5B,gBAAgB;IAChB,cAAc,EAAE,OAAO,CAAC;IACxB,2CAA2C;IAC3C,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,2CAA2C;IAC3C,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,qBAAqB;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,kBAAkB;IAClB,eAAe,EAAE,MAAM,CAAC;CAC3B;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC1B,WAAW;IACX,OAAO,EAAE,OAAO,CAAC;IACjB,mBAAmB;IACnB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,wBAAwB;IACxB,UAAU,CAAC,EAAE,iBAAiB,CAAC;IAC/B,YAAY;IACZ,cAAc,EAAE,OAAO,CAAC;IACxB,YAAY;IACZ,eAAe,EAAE,OAAO,CAAC;IACzB,oBAAoB;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,cAAc;IACd,MAAM,CAAC,EAAE,eAAe,CAAC;CAC5B;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC1B,eAAe;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,eAAe;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW;IACX,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB,cAAc;IACd,YAAY,EAAE,MAAM,CAAC;IACrB,kBAAkB;IAClB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,kBAAkB;IAClB,mBAAmB,EAAE,MAAM,CAAC;CAC/B;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC7B,YAAY;IACZ,OAAO,EAAE,cAAc,CAAC;IACxB,WAAW;IACX,QAAQ,EAAE,cAAc,CAAC;IACzB,WAAW;IACX,OAAO,EAAE,aAAa,CAAC;IACvB,WAAW;IACX,OAAO,EAAE,aAAa,CAAC;CAC1B;AAED;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACpC,OAAO,CAAC,EAAE,cAAc,CAAC;IACzB,QAAQ,CAAC,EAAE,OAAO,CAAC,cAAc,CAAC,CAAC;IACnC,OAAO,CAAC,EAAE,OAAO,CAAC,aAAa,CAAC,CAAC;IACjC,OAAO,CAAC,EAAE,OAAO,CAAC,aAAa,CAAC,CAAC;CACpC"}
@@ -0,0 +1,23 @@
1
+ /**
2
+ * 错误类型定义
3
+ */
4
+ import type { HttpRequestOptions, HttpResponse } from './request_response';
5
+ /**
6
+ * HTTP 错误
7
+ */
8
+ export declare class HttpError extends Error {
9
+ readonly code: string;
10
+ readonly status?: number | undefined;
11
+ readonly response?: HttpResponse | undefined;
12
+ readonly request?: HttpRequestOptions | undefined;
13
+ constructor(message: string, code: string, status?: number | undefined, response?: HttpResponse | undefined, request?: HttpRequestOptions | undefined);
14
+ }
15
+ /**
16
+ * 安全验证错误
17
+ */
18
+ export declare class SecurityError extends Error {
19
+ readonly code: string;
20
+ readonly url?: string | undefined;
21
+ constructor(message: string, code: string, url?: string | undefined);
22
+ }
23
+ //# sourceMappingURL=errors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../../src/types/errors.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,kBAAkB,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAE3E;;GAEG;AACH,qBAAa,SAAU,SAAQ,KAAK;aAGZ,IAAI,EAAE,MAAM;aACZ,MAAM,CAAC,EAAE,MAAM;aACf,QAAQ,CAAC,EAAE,YAAY;aACvB,OAAO,CAAC,EAAE,kBAAkB;gBAJ5C,OAAO,EAAE,MAAM,EACC,IAAI,EAAE,MAAM,EACZ,MAAM,CAAC,EAAE,MAAM,YAAA,EACf,QAAQ,CAAC,EAAE,YAAY,YAAA,EACvB,OAAO,CAAC,EAAE,kBAAkB,YAAA;CAMnD;AAED;;GAEG;AACH,qBAAa,aAAc,SAAQ,KAAK;aAGhB,IAAI,EAAE,MAAM;aACZ,GAAG,CAAC,EAAE,MAAM;gBAF5B,OAAO,EAAE,MAAM,EACC,IAAI,EAAE,MAAM,EACZ,GAAG,CAAC,EAAE,MAAM,YAAA;CAMnC"}
@@ -0,0 +1,10 @@
1
+ export * from './request_response';
2
+ export * from './config';
3
+ export * from './errors';
4
+ export * from './security';
5
+ export * from './ip';
6
+ export * from './logger';
7
+ export * from './adapter';
8
+ export * from './client';
9
+ export * from './trace';
10
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/types/index.ts"],"names":[],"mappings":"AACA,cAAc,oBAAoB,CAAC;AAGnC,cAAc,UAAU,CAAC;AAGzB,cAAc,UAAU,CAAC;AAGzB,cAAc,YAAY,CAAC;AAG3B,cAAc,MAAM,CAAC;AAGrB,cAAc,UAAU,CAAC;AAGzB,cAAc,WAAW,CAAC;AAG1B,cAAc,UAAU,CAAC;AAGzB,cAAc,SAAS,CAAC"}
@@ -0,0 +1,32 @@
1
+ /**
2
+ * IP 相关类型定义
3
+ */
4
+ /**
5
+ * 预编译的 IPv4 CIDR 范围
6
+ */
7
+ export interface CompiledIpv4Range {
8
+ /** 网络地址(数字形式) */
9
+ network: number;
10
+ /** 子网掩码(数字形式) */
11
+ mask: number;
12
+ /** 原始 CIDR 字符串 */
13
+ cidr: string;
14
+ }
15
+ /**
16
+ * 预编译的 IPv6 CIDR 范围
17
+ */
18
+ export interface CompiledIpv6Range {
19
+ /** 网络地址高 64 位 */
20
+ networkHigh: bigint;
21
+ /** 网络地址低 64 位 */
22
+ networkLow: bigint;
23
+ /** 子网掩码高 64 位 */
24
+ maskHigh: bigint;
25
+ /** 子网掩码低 64 位 */
26
+ maskLow: bigint;
27
+ /** CIDR 前缀长度 */
28
+ prefix: number;
29
+ /** 原始 CIDR 字符串 */
30
+ cidr: string;
31
+ }
32
+ //# sourceMappingURL=ip.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ip.d.ts","sourceRoot":"","sources":["../../../src/types/ip.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAC9B,iBAAiB;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,iBAAiB;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,kBAAkB;IAClB,IAAI,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAC9B,iBAAiB;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,iBAAiB;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,iBAAiB;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,iBAAiB;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,gBAAgB;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,kBAAkB;IAClB,IAAI,EAAE,MAAM,CAAC;CAChB"}
@@ -0,0 +1,136 @@
1
+ /**
2
+ * 日志相关类型定义
3
+ */
4
+ import type { HttpRequestOptions, HttpResponse } from './request_response';
5
+ /**
6
+ * 日志记录器接口
7
+ */
8
+ export interface ILogger {
9
+ debug: (message: string, meta?: Record<string, any>) => void;
10
+ info: (message: string, meta?: Record<string, any>) => void;
11
+ warn: (message: string, meta?: Record<string, any>) => void;
12
+ error: (message: string, meta?: Record<string, any>) => void;
13
+ }
14
+ /**
15
+ * 请求失败选项
16
+ */
17
+ export interface IResFailedOptions {
18
+ /** 是否成功 */
19
+ isSuccess: false;
20
+ /** 时间戳 */
21
+ timestamp: number;
22
+ /** 请求选项 */
23
+ request: HttpRequestOptions;
24
+ /** 错误信息 */
25
+ error: Error;
26
+ /** 错误码 */
27
+ errorCode?: string;
28
+ /** HTTP 状态码(如果有响应) */
29
+ status?: number;
30
+ /** 响应对象(如果有) */
31
+ response?: HttpResponse;
32
+ /** 请求耗时(毫秒) */
33
+ duration?: number;
34
+ /** 重试次数 */
35
+ retryCount?: number;
36
+ }
37
+ /**
38
+ * 流式响应相关指标.
39
+ */
40
+ export interface IStreamMetrics {
41
+ /** 首次响应时间(TTFB - Time To First Byte,毫秒) */
42
+ ttfb: number;
43
+ /** 流是否已完成 */
44
+ completed: boolean;
45
+ /** 流完成总耗时(毫秒,仅在流完成时有值) */
46
+ totalDuration?: number;
47
+ /** 流传输的字节数(如果可统计) */
48
+ bytesTransferred?: number;
49
+ }
50
+ /**
51
+ * 请求成功选项
52
+ */
53
+ export interface IResSuccessOptions {
54
+ /** 是否成功 */
55
+ isSuccess: true;
56
+ /** 时间戳 */
57
+ timestamp: number;
58
+ /** 请求选项 */
59
+ request: HttpRequestOptions;
60
+ /** 响应对象 */
61
+ response: HttpResponse;
62
+ /** 请求耗时(毫秒) */
63
+ duration: number;
64
+ /** 重试次数 */
65
+ retryCount?: number;
66
+ /** 流式响应相关指标(仅当 responseType 为 stream 时) */
67
+ streamMetrics?: IStreamMetrics;
68
+ }
69
+ /**
70
+ * 日志过滤器接口
71
+ */
72
+ export interface ILogFilter {
73
+ /**
74
+ * 判断是否应该记录此日志
75
+ * @param options 日志选项(成功或失败)
76
+ * @returns 是否应该记录
77
+ */
78
+ shouldLog: (options: IResSuccessOptions | IResFailedOptions) => boolean;
79
+ }
80
+ /**
81
+ * 日志过滤器配置
82
+ */
83
+ export interface LogFilterConfig {
84
+ /** 只记录特定 HTTP 方法 */
85
+ methods?: string[];
86
+ /** 只记录特定 URL 模式(支持正则表达式) */
87
+ urlPatterns?: (string | RegExp)[];
88
+ /** 只记录特定场景 */
89
+ scenarios?: string[];
90
+ /** 只记录特定状态码 */
91
+ statusCodes?: number[];
92
+ /** 只记录特定状态码范围 */
93
+ statusCodeRanges?: Array<{
94
+ min: number;
95
+ max: number;
96
+ }>;
97
+ /** 只记录失败的请求 */
98
+ onlyFailed?: boolean;
99
+ /** 只记录成功的请求 */
100
+ onlySuccess?: boolean;
101
+ /** 只记录耗时超过指定毫秒数的请求 */
102
+ minDuration?: number;
103
+ /** 自定义过滤函数 */
104
+ customFilter?: (options: IResSuccessOptions | IResFailedOptions) => boolean;
105
+ }
106
+ /**
107
+ * HTTP 客户端日志记录器
108
+ */
109
+ export interface IHttpClientLogger {
110
+ /**
111
+ * 记录失败的请求
112
+ * @param resOptions 请求失败选项
113
+ */
114
+ logFailed: (resOptions: Omit<IResFailedOptions, 'isSuccess' | 'timestamp'>) => void;
115
+ /**
116
+ * 记录成功的请求
117
+ * @param resOptions 请求成功选项
118
+ */
119
+ logSuccess: (resOptions: Omit<IResSuccessOptions, 'isSuccess' | 'timestamp'>) => void;
120
+ }
121
+ /**
122
+ * HTTP 客户端日志记录器配置
123
+ */
124
+ export interface HttpClientLoggerConfig {
125
+ /** 底层日志记录器 */
126
+ logger: ILogger;
127
+ /** 日志过滤器(可选) */
128
+ filter?: ILogFilter;
129
+ /** 是否记录请求体 */
130
+ logRequestBody?: boolean;
131
+ /** 是否记录响应体 */
132
+ logResponseBody?: boolean;
133
+ /** 响应体最大记录长度(字节) */
134
+ bodyMaxLength?: number;
135
+ }
136
+ //# sourceMappingURL=logger.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../../src/types/logger.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EACR,kBAAkB,EAClB,YAAY,EACf,MAAM,oBAAoB,CAAC;AAE5B;;GAEG;AACH,MAAM,WAAW,OAAO;IACpB,KAAK,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,KAAK,IAAI,CAAC;IAC7D,IAAI,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,KAAK,IAAI,CAAC;IAC5D,IAAI,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,KAAK,IAAI,CAAC;IAC5D,KAAK,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,KAAK,IAAI,CAAC;CAChE;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAC9B,WAAW;IACX,SAAS,EAAE,KAAK,CAAC;IACjB,UAAU;IACV,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW;IACX,OAAO,EAAE,kBAAkB,CAAC;IAC5B,WAAW;IACX,KAAK,EAAE,KAAK,CAAC;IACb,UAAU;IACV,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,sBAAsB;IACtB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,gBAAgB;IAChB,QAAQ,CAAC,EAAE,YAAY,CAAC;IACxB,eAAe;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW;IACX,UAAU,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC3B,2CAA2C;IAC3C,IAAI,EAAE,MAAM,CAAC;IACb,aAAa;IACb,SAAS,EAAE,OAAO,CAAC;IACnB,0BAA0B;IAC1B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,qBAAqB;IACrB,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IAC/B,WAAW;IACX,SAAS,EAAE,IAAI,CAAC;IAChB,UAAU;IACV,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW;IACX,OAAO,EAAE,kBAAkB,CAAC;IAC5B,WAAW;IACX,QAAQ,EAAE,YAAY,CAAC;IACvB,eAAe;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW;IACX,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,2CAA2C;IAC3C,aAAa,CAAC,EAAE,cAAc,CAAC;CAClC;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACvB;;;;OAIG;IACH,SAAS,EAAE,CAAC,OAAO,EAAE,kBAAkB,GAAG,iBAAiB,KAAK,OAAO,CAAC;CAC3E;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC5B,oBAAoB;IACpB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,4BAA4B;IAC5B,WAAW,CAAC,EAAE,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,CAAC;IAClC,cAAc;IACd,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,eAAe;IACf,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,iBAAiB;IACjB,gBAAgB,CAAC,EAAE,KAAK,CAAC;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACvD,eAAe;IACf,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,eAAe;IACf,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,sBAAsB;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,cAAc;IACd,YAAY,CAAC,EAAE,CAAC,OAAO,EAAE,kBAAkB,GAAG,iBAAiB,KAAK,OAAO,CAAC;CAC/E;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAC9B;;;OAGG;IACH,SAAS,EAAE,CACP,UAAU,EAAE,IAAI,CAAC,iBAAiB,EAAE,WAAW,GAAG,WAAW,CAAC,KAC7D,IAAI,CAAC;IAEV;;;OAGG;IACH,UAAU,EAAE,CACR,UAAU,EAAE,IAAI,CAAC,kBAAkB,EAAE,WAAW,GAAG,WAAW,CAAC,KAC9D,IAAI,CAAC;CACb;AAGD;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACnC,cAAc;IACd,MAAM,EAAE,OAAO,CAAC;IAChB,gBAAgB;IAChB,MAAM,CAAC,EAAE,UAAU,CAAC;IACpB,cAAc;IACd,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,cAAc;IACd,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,oBAAoB;IACpB,aAAa,CAAC,EAAE,MAAM,CAAC;CAC1B"}
@@ -0,0 +1,54 @@
1
+ /**
2
+ * 请求和响应类型定义
3
+ */
4
+ /**
5
+ * HTTP 方法
6
+ */
7
+ export type HttpMethod = 'GET' | 'POST' | 'PUT' | 'DELETE' | 'PATCH' | 'HEAD' | 'OPTIONS';
8
+ /**
9
+ * 响应类型.
10
+ */
11
+ export type ResponseType = 'arraybuffer' | 'blob' | 'document' | 'json' | 'text' | 'stream' | 'formdata';
12
+ /**
13
+ * HTTP 请求选项
14
+ */
15
+ export interface HttpRequestOptions {
16
+ /** HTTP 方法 */
17
+ method: HttpMethod;
18
+ /** 请求 URL */
19
+ url: string;
20
+ /** 请求头 */
21
+ headers?: Record<string, string | number>;
22
+ /** URL 查询参数 */
23
+ params?: Record<string, string | number | boolean>;
24
+ /** 请求体 */
25
+ body?: any;
26
+ /** 请求超时(毫秒,覆盖全局配置) */
27
+ timeout?: number;
28
+ /** 重试次数(覆盖全局配置) */
29
+ retries?: number;
30
+ /** 业务场景标识 */
31
+ scenario?: string;
32
+ /** 业务元数据 */
33
+ meta?: Record<string, any>;
34
+ /** 响应类型 */
35
+ responseType?: ResponseType;
36
+ /** W3C Trace Context traceparent 头(用于分布式链路追踪) */
37
+ traceparent?: string;
38
+ }
39
+ /**
40
+ * HTTP 响应
41
+ */
42
+ export interface HttpResponse<T = any> {
43
+ /** 响应状态码 */
44
+ status: number;
45
+ /** 响应状态文本 */
46
+ statusText: string;
47
+ /** 响应头 */
48
+ headers: Record<string, string>;
49
+ /** 响应体 */
50
+ data: T;
51
+ /** 请求配置 */
52
+ config: HttpRequestOptions;
53
+ }
54
+ //# sourceMappingURL=request_response.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"request_response.d.ts","sourceRoot":"","sources":["../../../src/types/request_response.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;GAEG;AACH,MAAM,MAAM,UAAU,GAAG,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,QAAQ,GAAG,OAAO,GAAG,MAAM,GAAG,SAAS,CAAC;AAE1F;;GAEG;AACH,MAAM,MAAM,YAAY,GAClB,aAAa,GACb,MAAM,GACN,UAAU,GACV,MAAM,GACN,MAAM,GACN,QAAQ,GACR,UAAU,CAAC;AAEjB;;GAEG;AACH,MAAM,WAAW,kBAAkB;IAC/B,cAAc;IACd,MAAM,EAAE,UAAU,CAAC;IACnB,aAAa;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,UAAU;IACV,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,CAAC;IAC1C,eAAe;IACf,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,CAAC;IACnD,UAAU;IACV,IAAI,CAAC,EAAE,GAAG,CAAC;IACX,sBAAsB;IACtB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,mBAAmB;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,aAAa;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY;IACZ,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC3B,WAAW;IACX,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,iDAAiD;IACjD,WAAW,CAAC,EAAE,MAAM,CAAC;CACxB;AAED;;GAEG;AACH,MAAM,WAAW,YAAY,CAAC,CAAC,GAAG,GAAG;IACjC,YAAY;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,aAAa;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU;IACV,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,UAAU;IACV,IAAI,EAAE,CAAC,CAAC;IACR,WAAW;IACX,MAAM,EAAE,kBAAkB,CAAC;CAC9B"}