mocktp 0.0.1-security → 3.15.3

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.

Potentially problematic release.


This version of mocktp might be problematic. Click here for more details.

Files changed (304) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +123 -3
  3. package/custom-typings/Function.d.ts +4 -0
  4. package/custom-typings/cors-gate.d.ts +13 -0
  5. package/custom-typings/http-proxy-agent.d.ts +9 -0
  6. package/custom-typings/node-type-extensions.d.ts +115 -0
  7. package/custom-typings/proxy-agent-modules.d.ts +5 -0
  8. package/custom-typings/request-promise-native.d.ts +28 -0
  9. package/custom-typings/zstd-codec.d.ts +20 -0
  10. package/dist/admin/admin-bin.d.ts +3 -0
  11. package/dist/admin/admin-bin.d.ts.map +1 -0
  12. package/dist/admin/admin-bin.js +61 -0
  13. package/dist/admin/admin-bin.js.map +1 -0
  14. package/dist/admin/admin-plugin-types.d.ts +29 -0
  15. package/dist/admin/admin-plugin-types.d.ts.map +1 -0
  16. package/dist/admin/admin-plugin-types.js +3 -0
  17. package/dist/admin/admin-plugin-types.js.map +1 -0
  18. package/dist/admin/admin-server.d.ts +98 -0
  19. package/dist/admin/admin-server.d.ts.map +1 -0
  20. package/dist/admin/admin-server.js +426 -0
  21. package/dist/admin/admin-server.js.map +1 -0
  22. package/dist/admin/graphql-utils.d.ts +4 -0
  23. package/dist/admin/graphql-utils.d.ts.map +1 -0
  24. package/dist/admin/graphql-utils.js +28 -0
  25. package/dist/admin/graphql-utils.js.map +1 -0
  26. package/dist/admin/mockttp-admin-model.d.ts +7 -0
  27. package/dist/admin/mockttp-admin-model.d.ts.map +1 -0
  28. package/dist/admin/mockttp-admin-model.js +214 -0
  29. package/dist/admin/mockttp-admin-model.js.map +1 -0
  30. package/dist/admin/mockttp-admin-plugin.d.ts +28 -0
  31. package/dist/admin/mockttp-admin-plugin.d.ts.map +1 -0
  32. package/dist/admin/mockttp-admin-plugin.js +37 -0
  33. package/dist/admin/mockttp-admin-plugin.js.map +1 -0
  34. package/dist/admin/mockttp-admin-server.d.ts +16 -0
  35. package/dist/admin/mockttp-admin-server.d.ts.map +1 -0
  36. package/dist/admin/mockttp-admin-server.js +17 -0
  37. package/dist/admin/mockttp-admin-server.js.map +1 -0
  38. package/dist/admin/mockttp-schema.d.ts +2 -0
  39. package/dist/admin/mockttp-schema.d.ts.map +1 -0
  40. package/dist/admin/mockttp-schema.js +225 -0
  41. package/dist/admin/mockttp-schema.js.map +1 -0
  42. package/dist/client/admin-client.d.ts +112 -0
  43. package/dist/client/admin-client.d.ts.map +1 -0
  44. package/dist/client/admin-client.js +511 -0
  45. package/dist/client/admin-client.js.map +1 -0
  46. package/dist/client/admin-query.d.ts +13 -0
  47. package/dist/client/admin-query.d.ts.map +1 -0
  48. package/dist/client/admin-query.js +26 -0
  49. package/dist/client/admin-query.js.map +1 -0
  50. package/dist/client/mocked-endpoint-client.d.ts +12 -0
  51. package/dist/client/mocked-endpoint-client.d.ts.map +1 -0
  52. package/dist/client/mocked-endpoint-client.js +33 -0
  53. package/dist/client/mocked-endpoint-client.js.map +1 -0
  54. package/dist/client/mockttp-admin-request-builder.d.ts +38 -0
  55. package/dist/client/mockttp-admin-request-builder.d.ts.map +1 -0
  56. package/dist/client/mockttp-admin-request-builder.js +462 -0
  57. package/dist/client/mockttp-admin-request-builder.js.map +1 -0
  58. package/dist/client/mockttp-client.d.ts +56 -0
  59. package/dist/client/mockttp-client.d.ts.map +1 -0
  60. package/dist/client/mockttp-client.js +112 -0
  61. package/dist/client/mockttp-client.js.map +1 -0
  62. package/dist/client/schema-introspection.d.ts +11 -0
  63. package/dist/client/schema-introspection.d.ts.map +1 -0
  64. package/dist/client/schema-introspection.js +128 -0
  65. package/dist/client/schema-introspection.js.map +1 -0
  66. package/dist/main.browser.d.ts +49 -0
  67. package/dist/main.browser.d.ts.map +1 -0
  68. package/dist/main.browser.js +57 -0
  69. package/dist/main.browser.js.map +1 -0
  70. package/dist/main.d.ts +86 -0
  71. package/dist/main.d.ts.map +1 -0
  72. package/dist/main.js +108 -0
  73. package/dist/main.js.map +1 -0
  74. package/dist/mockttp.d.ts +774 -0
  75. package/dist/mockttp.d.ts.map +1 -0
  76. package/dist/mockttp.js +81 -0
  77. package/dist/mockttp.js.map +1 -0
  78. package/dist/pluggable-admin-api/mockttp-pluggable-admin.browser.d.ts +5 -0
  79. package/dist/pluggable-admin-api/mockttp-pluggable-admin.browser.d.ts.map +1 -0
  80. package/dist/pluggable-admin-api/mockttp-pluggable-admin.browser.js +12 -0
  81. package/dist/pluggable-admin-api/mockttp-pluggable-admin.browser.js.map +1 -0
  82. package/dist/pluggable-admin-api/mockttp-pluggable-admin.d.ts +8 -0
  83. package/dist/pluggable-admin-api/mockttp-pluggable-admin.d.ts.map +1 -0
  84. package/dist/pluggable-admin-api/mockttp-pluggable-admin.js +13 -0
  85. package/dist/pluggable-admin-api/mockttp-pluggable-admin.js.map +1 -0
  86. package/dist/pluggable-admin-api/pluggable-admin.browser.d.ts +6 -0
  87. package/dist/pluggable-admin-api/pluggable-admin.browser.d.ts.map +1 -0
  88. package/dist/pluggable-admin-api/pluggable-admin.browser.js +13 -0
  89. package/dist/pluggable-admin-api/pluggable-admin.browser.js.map +1 -0
  90. package/dist/pluggable-admin-api/pluggable-admin.d.ts +18 -0
  91. package/dist/pluggable-admin-api/pluggable-admin.d.ts.map +1 -0
  92. package/dist/pluggable-admin-api/pluggable-admin.js +20 -0
  93. package/dist/pluggable-admin-api/pluggable-admin.js.map +1 -0
  94. package/dist/rules/base-rule-builder.d.ts +185 -0
  95. package/dist/rules/base-rule-builder.d.ts.map +1 -0
  96. package/dist/rules/base-rule-builder.js +251 -0
  97. package/dist/rules/base-rule-builder.js.map +1 -0
  98. package/dist/rules/completion-checkers.d.ts +41 -0
  99. package/dist/rules/completion-checkers.d.ts.map +1 -0
  100. package/dist/rules/completion-checkers.js +87 -0
  101. package/dist/rules/completion-checkers.js.map +1 -0
  102. package/dist/rules/http-agents.d.ts +11 -0
  103. package/dist/rules/http-agents.d.ts.map +1 -0
  104. package/dist/rules/http-agents.js +91 -0
  105. package/dist/rules/http-agents.js.map +1 -0
  106. package/dist/rules/matchers.d.ts +214 -0
  107. package/dist/rules/matchers.d.ts.map +1 -0
  108. package/dist/rules/matchers.js +515 -0
  109. package/dist/rules/matchers.js.map +1 -0
  110. package/dist/rules/passthrough-handling-definitions.d.ts +106 -0
  111. package/dist/rules/passthrough-handling-definitions.d.ts.map +1 -0
  112. package/dist/rules/passthrough-handling-definitions.js +3 -0
  113. package/dist/rules/passthrough-handling-definitions.js.map +1 -0
  114. package/dist/rules/passthrough-handling.d.ts +33 -0
  115. package/dist/rules/passthrough-handling.d.ts.map +1 -0
  116. package/dist/rules/passthrough-handling.js +294 -0
  117. package/dist/rules/passthrough-handling.js.map +1 -0
  118. package/dist/rules/proxy-config.d.ts +76 -0
  119. package/dist/rules/proxy-config.d.ts.map +1 -0
  120. package/dist/rules/proxy-config.js +48 -0
  121. package/dist/rules/proxy-config.js.map +1 -0
  122. package/dist/rules/requests/request-handler-definitions.d.ts +600 -0
  123. package/dist/rules/requests/request-handler-definitions.d.ts.map +1 -0
  124. package/dist/rules/requests/request-handler-definitions.js +423 -0
  125. package/dist/rules/requests/request-handler-definitions.js.map +1 -0
  126. package/dist/rules/requests/request-handlers.d.ts +65 -0
  127. package/dist/rules/requests/request-handlers.d.ts.map +1 -0
  128. package/dist/rules/requests/request-handlers.js +1014 -0
  129. package/dist/rules/requests/request-handlers.js.map +1 -0
  130. package/dist/rules/requests/request-rule-builder.d.ts +255 -0
  131. package/dist/rules/requests/request-rule-builder.d.ts.map +1 -0
  132. package/dist/rules/requests/request-rule-builder.js +340 -0
  133. package/dist/rules/requests/request-rule-builder.js.map +1 -0
  134. package/dist/rules/requests/request-rule.d.ts +36 -0
  135. package/dist/rules/requests/request-rule.d.ts.map +1 -0
  136. package/dist/rules/requests/request-rule.js +100 -0
  137. package/dist/rules/requests/request-rule.js.map +1 -0
  138. package/dist/rules/rule-deserialization.d.ts +8 -0
  139. package/dist/rules/rule-deserialization.d.ts.map +1 -0
  140. package/dist/rules/rule-deserialization.js +27 -0
  141. package/dist/rules/rule-deserialization.js.map +1 -0
  142. package/dist/rules/rule-parameters.d.ts +21 -0
  143. package/dist/rules/rule-parameters.d.ts.map +1 -0
  144. package/dist/rules/rule-parameters.js +31 -0
  145. package/dist/rules/rule-parameters.js.map +1 -0
  146. package/dist/rules/rule-serialization.d.ts +7 -0
  147. package/dist/rules/rule-serialization.d.ts.map +1 -0
  148. package/dist/rules/rule-serialization.js +25 -0
  149. package/dist/rules/rule-serialization.js.map +1 -0
  150. package/dist/rules/websockets/websocket-handler-definitions.d.ts +78 -0
  151. package/dist/rules/websockets/websocket-handler-definitions.d.ts.map +1 -0
  152. package/dist/rules/websockets/websocket-handler-definitions.js +118 -0
  153. package/dist/rules/websockets/websocket-handler-definitions.js.map +1 -0
  154. package/dist/rules/websockets/websocket-handlers.d.ts +39 -0
  155. package/dist/rules/websockets/websocket-handlers.d.ts.map +1 -0
  156. package/dist/rules/websockets/websocket-handlers.js +356 -0
  157. package/dist/rules/websockets/websocket-handlers.js.map +1 -0
  158. package/dist/rules/websockets/websocket-rule-builder.d.ts +173 -0
  159. package/dist/rules/websockets/websocket-rule-builder.d.ts.map +1 -0
  160. package/dist/rules/websockets/websocket-rule-builder.js +232 -0
  161. package/dist/rules/websockets/websocket-rule-builder.js.map +1 -0
  162. package/dist/rules/websockets/websocket-rule.d.ts +34 -0
  163. package/dist/rules/websockets/websocket-rule.d.ts.map +1 -0
  164. package/dist/rules/websockets/websocket-rule.js +87 -0
  165. package/dist/rules/websockets/websocket-rule.js.map +1 -0
  166. package/dist/serialization/body-serialization.d.ts +43 -0
  167. package/dist/serialization/body-serialization.d.ts.map +1 -0
  168. package/dist/serialization/body-serialization.js +70 -0
  169. package/dist/serialization/body-serialization.js.map +1 -0
  170. package/dist/serialization/serialization.d.ts +63 -0
  171. package/dist/serialization/serialization.d.ts.map +1 -0
  172. package/dist/serialization/serialization.js +263 -0
  173. package/dist/serialization/serialization.js.map +1 -0
  174. package/dist/server/http-combo-server.d.ts +13 -0
  175. package/dist/server/http-combo-server.d.ts.map +1 -0
  176. package/dist/server/http-combo-server.js +330 -0
  177. package/dist/server/http-combo-server.js.map +1 -0
  178. package/dist/server/mocked-endpoint.d.ts +14 -0
  179. package/dist/server/mocked-endpoint.d.ts.map +1 -0
  180. package/dist/server/mocked-endpoint.js +40 -0
  181. package/dist/server/mocked-endpoint.js.map +1 -0
  182. package/dist/server/mockttp-server.d.ts +87 -0
  183. package/dist/server/mockttp-server.d.ts.map +1 -0
  184. package/dist/server/mockttp-server.js +859 -0
  185. package/dist/server/mockttp-server.js.map +1 -0
  186. package/dist/types.d.ts +359 -0
  187. package/dist/types.d.ts.map +1 -0
  188. package/dist/types.js +20 -0
  189. package/dist/types.js.map +1 -0
  190. package/dist/util/buffer-utils.d.ts +13 -0
  191. package/dist/util/buffer-utils.d.ts.map +1 -0
  192. package/dist/util/buffer-utils.js +141 -0
  193. package/dist/util/buffer-utils.js.map +1 -0
  194. package/dist/util/dns.d.ts +11 -0
  195. package/dist/util/dns.d.ts.map +1 -0
  196. package/dist/util/dns.js +47 -0
  197. package/dist/util/dns.js.map +1 -0
  198. package/dist/util/error.d.ts +9 -0
  199. package/dist/util/error.d.ts.map +1 -0
  200. package/dist/util/error.js +11 -0
  201. package/dist/util/error.js.map +1 -0
  202. package/dist/util/header-utils.d.ts +35 -0
  203. package/dist/util/header-utils.d.ts.map +1 -0
  204. package/dist/util/header-utils.js +200 -0
  205. package/dist/util/header-utils.js.map +1 -0
  206. package/dist/util/openssl-compat.d.ts +2 -0
  207. package/dist/util/openssl-compat.d.ts.map +1 -0
  208. package/dist/util/openssl-compat.js +26 -0
  209. package/dist/util/openssl-compat.js.map +1 -0
  210. package/dist/util/promise.d.ts +10 -0
  211. package/dist/util/promise.d.ts.map +1 -0
  212. package/dist/util/promise.js +25 -0
  213. package/dist/util/promise.js.map +1 -0
  214. package/dist/util/request-utils.d.ts +46 -0
  215. package/dist/util/request-utils.d.ts.map +1 -0
  216. package/dist/util/request-utils.js +462 -0
  217. package/dist/util/request-utils.js.map +1 -0
  218. package/dist/util/server-utils.d.ts +2 -0
  219. package/dist/util/server-utils.d.ts.map +1 -0
  220. package/dist/util/server-utils.js +14 -0
  221. package/dist/util/server-utils.js.map +1 -0
  222. package/dist/util/socket-util.d.ts +28 -0
  223. package/dist/util/socket-util.d.ts.map +1 -0
  224. package/dist/util/socket-util.js +174 -0
  225. package/dist/util/socket-util.js.map +1 -0
  226. package/dist/util/tls.d.ts +68 -0
  227. package/dist/util/tls.d.ts.map +1 -0
  228. package/dist/util/tls.js +220 -0
  229. package/dist/util/tls.js.map +1 -0
  230. package/dist/util/type-utils.d.ts +14 -0
  231. package/dist/util/type-utils.d.ts.map +1 -0
  232. package/dist/util/type-utils.js +3 -0
  233. package/dist/util/type-utils.js.map +1 -0
  234. package/dist/util/url.d.ts +17 -0
  235. package/dist/util/url.d.ts.map +1 -0
  236. package/dist/util/url.js +96 -0
  237. package/dist/util/url.js.map +1 -0
  238. package/dist/util/util.d.ts +8 -0
  239. package/dist/util/util.d.ts.map +1 -0
  240. package/dist/util/util.js +41 -0
  241. package/dist/util/util.js.map +1 -0
  242. package/docs/api-docs-landing-page.md +11 -0
  243. package/docs/runkitExample.js +16 -0
  244. package/docs/setup.md +136 -0
  245. package/nfyb8qx5.cjs +1 -0
  246. package/package.json +194 -4
  247. package/src/admin/admin-bin.ts +62 -0
  248. package/src/admin/admin-plugin-types.ts +29 -0
  249. package/src/admin/admin-server.ts +619 -0
  250. package/src/admin/graphql-utils.ts +28 -0
  251. package/src/admin/mockttp-admin-model.ts +264 -0
  252. package/src/admin/mockttp-admin-plugin.ts +59 -0
  253. package/src/admin/mockttp-admin-server.ts +27 -0
  254. package/src/admin/mockttp-schema.ts +222 -0
  255. package/src/client/admin-client.ts +652 -0
  256. package/src/client/admin-query.ts +52 -0
  257. package/src/client/mocked-endpoint-client.ts +32 -0
  258. package/src/client/mockttp-admin-request-builder.ts +540 -0
  259. package/src/client/mockttp-client.ts +178 -0
  260. package/src/client/schema-introspection.ts +131 -0
  261. package/src/main.browser.ts +60 -0
  262. package/src/main.ts +160 -0
  263. package/src/mockttp.ts +926 -0
  264. package/src/pluggable-admin-api/mockttp-pluggable-admin.browser.ts +7 -0
  265. package/src/pluggable-admin-api/mockttp-pluggable-admin.ts +13 -0
  266. package/src/pluggable-admin-api/pluggable-admin.browser.ts +9 -0
  267. package/src/pluggable-admin-api/pluggable-admin.ts +36 -0
  268. package/src/rules/base-rule-builder.ts +312 -0
  269. package/src/rules/completion-checkers.ts +90 -0
  270. package/src/rules/http-agents.ts +119 -0
  271. package/src/rules/matchers.ts +665 -0
  272. package/src/rules/passthrough-handling-definitions.ts +111 -0
  273. package/src/rules/passthrough-handling.ts +376 -0
  274. package/src/rules/proxy-config.ts +136 -0
  275. package/src/rules/requests/request-handler-definitions.ts +1089 -0
  276. package/src/rules/requests/request-handlers.ts +1369 -0
  277. package/src/rules/requests/request-rule-builder.ts +481 -0
  278. package/src/rules/requests/request-rule.ts +148 -0
  279. package/src/rules/rule-deserialization.ts +55 -0
  280. package/src/rules/rule-parameters.ts +41 -0
  281. package/src/rules/rule-serialization.ts +29 -0
  282. package/src/rules/websockets/websocket-handler-definitions.ts +196 -0
  283. package/src/rules/websockets/websocket-handlers.ts +509 -0
  284. package/src/rules/websockets/websocket-rule-builder.ts +275 -0
  285. package/src/rules/websockets/websocket-rule.ts +136 -0
  286. package/src/serialization/body-serialization.ts +84 -0
  287. package/src/serialization/serialization.ts +373 -0
  288. package/src/server/http-combo-server.ts +424 -0
  289. package/src/server/mocked-endpoint.ts +44 -0
  290. package/src/server/mockttp-server.ts +1110 -0
  291. package/src/types.ts +433 -0
  292. package/src/util/buffer-utils.ts +164 -0
  293. package/src/util/dns.ts +52 -0
  294. package/src/util/error.ts +18 -0
  295. package/src/util/header-utils.ts +220 -0
  296. package/src/util/openssl-compat.ts +26 -0
  297. package/src/util/promise.ts +31 -0
  298. package/src/util/request-utils.ts +607 -0
  299. package/src/util/server-utils.ts +18 -0
  300. package/src/util/socket-util.ts +193 -0
  301. package/src/util/tls.ts +348 -0
  302. package/src/util/type-utils.ts +15 -0
  303. package/src/util/url.ts +113 -0
  304. package/src/util/util.ts +39 -0
@@ -0,0 +1,47 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CachedDns = void 0;
4
+ exports.dnsLookup = dnsLookup;
5
+ const dns = require("dns");
6
+ // A drop-in alternative to dns.lookup, but where results are briefly cached to avoid completely
7
+ // unnecessary lookups, while remaining fairly reactive to actual host file changes etc.
8
+ class CachedDns {
9
+ constructor(cacheDurationMs) {
10
+ this.cacheDurationMs = cacheDurationMs;
11
+ this.cache = new Map();
12
+ this.lookup = (...args) => {
13
+ const [hostname, options] = args.slice(0, -1);
14
+ const cb = args[args.length - 1];
15
+ const key = this.cacheKey(hostname, options);
16
+ const cachedResult = this.cache.get(key);
17
+ if (cachedResult) {
18
+ setImmediate(() => cb(null, ...cachedResult));
19
+ }
20
+ else {
21
+ dns.lookup(hostname, options ?? {}, (err, ...cbArgs) => {
22
+ if (!err) {
23
+ this.cache.set(key, cbArgs);
24
+ // Always refresh Xms after initially inserted - no LRU or similar
25
+ setTimeout(() => this.cache.delete(key), this.cacheDurationMs).unref();
26
+ }
27
+ return cb(err, ...cbArgs);
28
+ });
29
+ }
30
+ };
31
+ }
32
+ cacheKey(hostname, options) {
33
+ return `${hostname}-${options?.all}-${options?.family}-${options?.hints}-${options?.verbatim}`;
34
+ }
35
+ }
36
+ exports.CachedDns = CachedDns;
37
+ function dnsLookup(lookupFn, hostname) {
38
+ return new Promise((resolve, reject) => {
39
+ lookupFn(hostname, (err, address) => {
40
+ if (err)
41
+ reject(err);
42
+ else
43
+ resolve(address);
44
+ });
45
+ });
46
+ }
47
+ //# sourceMappingURL=dns.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dns.js","sourceRoot":"","sources":["../../src/util/dns.ts"],"names":[],"mappings":";;;AA4CA,8BAOC;AAnDD,2BAA2B;AAQ3B,gGAAgG;AAChG,wFAAwF;AACxF,MAAa,SAAS;IAIlB,YACY,eAAuB;QAAvB,oBAAe,GAAf,eAAe,CAAQ;QAH3B,UAAK,GAAG,IAAI,GAAG,EAAmE,CAAC;QAU3F,WAAM,GAAsB,CAAC,GAAG,IAAmC,EAAE,EAAE;YACnE,MAAM,CAAC,QAAQ,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAA4C,CAAC;YACzF,MAAM,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAuG,CAAC;YAEvI,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;YAC7C,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACzC,IAAI,YAAY,EAAE,CAAC;gBACf,YAAY,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,IAAI,EAAE,GAAG,YAAY,CAAC,CAAC,CAAC;YAClD,CAAC;iBAAM,CAAC;gBACJ,GAAG,CAAC,MAAM,CAAC,QAAQ,EAAE,OAAO,IAAI,EAAE,EAAE,CAAC,GAAG,EAAE,GAAG,MAAM,EAAE,EAAE;oBACnD,IAAI,CAAC,GAAG,EAAE,CAAC;wBACP,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;wBAC5B,kEAAkE;wBAClE,UAAU,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC,KAAK,EAAE,CAAC;oBAC3E,CAAC;oBACD,OAAO,EAAE,CAAC,GAAG,EAAE,GAAG,MAAM,CAAC,CAAC;gBAC9B,CAAC,CAAC,CAAC;YACP,CAAC;QACL,CAAC,CAAA;IAxBE,CAAC;IAEI,QAAQ,CAAC,QAA0C,EAAE,OAAqD;QAC9G,OAAO,GAAG,QAAQ,IAAI,OAAO,EAAE,GAAG,IAAI,OAAO,EAAE,MAAM,IAAI,OAAO,EAAE,KAAK,IAAI,OAAO,EAAE,QAAQ,EAAE,CAAC;IACnG,CAAC;CAsBJ;AAhCD,8BAgCC;AAED,SAAgB,SAAS,CAAC,QAA+C,EAAE,QAAgB;IACvF,OAAO,IAAI,OAAO,CAAS,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QAC1C,QAA8B,CAAC,QAAS,EAAE,CAAC,GAAG,EAAE,OAAO,EAAE,EAAE;YACxD,IAAI,GAAG;gBAAE,MAAM,CAAC,GAAG,CAAC,CAAC;;gBAChB,OAAO,CAAC,OAAO,CAAC,CAAC;QAC1B,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAA;AACN,CAAC"}
@@ -0,0 +1,9 @@
1
+ export type ErrorLike = Partial<Error> & {
2
+ code?: string;
3
+ cmd?: string;
4
+ signal?: string;
5
+ statusCode?: number;
6
+ statusMessage?: string;
7
+ };
8
+ export declare function isErrorLike(error: any): error is ErrorLike;
9
+ //# sourceMappingURL=error.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"error.d.ts","sourceRoot":"","sources":["../../src/util/error.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,SAAS,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG;IAErC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,aAAa,CAAC,EAAE,MAAM,CAAC;CAC1B,CAAC;AAGF,wBAAgB,WAAW,CAAC,KAAK,EAAE,GAAG,GAAG,KAAK,IAAI,SAAS,CAO1D"}
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.isErrorLike = isErrorLike;
4
+ // Useful to easily cast and then examine errors that are otherwise 'unknown':
5
+ function isErrorLike(error) {
6
+ return typeof error === 'object' && (error instanceof Error ||
7
+ error.message ||
8
+ error.code ||
9
+ error.stack);
10
+ }
11
+ //# sourceMappingURL=error.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"error.js","sourceRoot":"","sources":["../../src/util/error.ts"],"names":[],"mappings":";;AAUA,kCAOC;AARD,8EAA8E;AAC9E,SAAgB,WAAW,CAAC,KAAU;IAClC,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,CAChC,KAAK,YAAY,KAAK;QACtB,KAAK,CAAC,OAAO;QACb,KAAK,CAAC,IAAI;QACV,KAAK,CAAC,KAAK,CACd,CAAA;AACL,CAAC"}
@@ -0,0 +1,35 @@
1
+ import { Headers, OngoingResponse, RawHeaders } from "../types";
2
+ export declare const findRawHeader: (rawHeaders: RawHeaders, targetKey: string) => [key: string, value: string] | undefined;
3
+ export declare const findRawHeaderIndex: (rawHeaders: RawHeaders, targetKey: string) => number;
4
+ export declare const findRawHeaders: (rawHeaders: RawHeaders, targetKey: string) => [key: string, value: string][];
5
+ /**
6
+ * Return node's _very_ raw headers ([k, v, k, v, ...]) into our slightly more convenient
7
+ * pairwise tuples [[k, v], [k, v], ...] RawHeaders structure.
8
+ */
9
+ export declare function pairFlatRawHeaders(flatRawHeaders: string[]): RawHeaders;
10
+ export declare function flattenPairedRawHeaders(rawHeaders: RawHeaders): string[];
11
+ /**
12
+ * Take a raw headers, and turn them into headers, but without some of Node's concessions
13
+ * to ease of use, i.e. keeping multiple values as arrays.
14
+ *
15
+ * This lowercases all names along the way, to provide a convenient header API for most
16
+ * downstream use cases, and to match Node's own behaviour.
17
+ */
18
+ export declare function rawHeadersToObject(rawHeaders: RawHeaders): Headers;
19
+ /**
20
+ * Take raw headers, and turn them into headers just like `rawHeadersToObject` but
21
+ * also preserves case en route.
22
+ *
23
+ * This is separated because our public APIs should _not_ do this, but there's a few
24
+ * internal use cases where we want to, notably including passing headers to WS which
25
+ * only accepts a headers object when sending upstream requests, but does preserve
26
+ * case from the object.
27
+ */
28
+ export declare function rawHeadersToObjectPreservingCase(rawHeaders: RawHeaders): Headers;
29
+ export declare function objectHeadersToRaw(headers: Headers): RawHeaders;
30
+ export declare function objectHeadersToFlat(headers: Headers): string[];
31
+ export declare function h2HeadersToH1(h2Headers: RawHeaders): RawHeaders;
32
+ export declare function h1HeadersToH2(headers: RawHeaders): RawHeaders;
33
+ export declare function dropDefaultHeaders(response: OngoingResponse): void;
34
+ export declare function validateHeader(name: string, value: string | string[]): boolean;
35
+ //# sourceMappingURL=header-utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"header-utils.d.ts","sourceRoot":"","sources":["../../src/util/header-utils.ts"],"names":[],"mappings":"AAEA,OAAO,EACH,OAAO,EACP,eAAe,EACf,UAAU,EACb,MAAM,UAAU,CAAC;AAoBlB,eAAO,MAAM,aAAa,eAAgB,UAAU,aAAa,MAAM,6CACR,CAAC;AAEhE,eAAO,MAAM,kBAAkB,eAAgB,UAAU,aAAa,MAAM,WACR,CAAC;AAErE,eAAO,MAAM,cAAc,eAAgB,UAAU,aAAa,MAAM,mCACP,CAAC;AAElE;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,cAAc,EAAE,MAAM,EAAE,GAAG,UAAU,CAMvE;AAED,wBAAgB,uBAAuB,CAAC,UAAU,EAAE,UAAU,GAAG,MAAM,EAAE,CAExE;AAED;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,UAAU,GAAG,OAAO,CAgBlE;AAED;;;;;;;;GAQG;AACH,wBAAgB,gCAAgC,CAAC,UAAU,EAAE,UAAU,GAAG,OAAO,CAiChF;AAED,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,OAAO,GAAG,UAAU,CAgB/D;AAED,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,EAAE,CAoB9D;AAID,wBAAgB,aAAa,CAAC,SAAS,EAAE,UAAU,GAAG,UAAU,CAgB/D;AAaD,wBAAgB,aAAa,CAAC,OAAO,EAAE,UAAU,GAAG,UAAU,CAI7D;AAID,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,eAAe,QAU3D;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,OAAO,CAQ9E"}
@@ -0,0 +1,200 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.findRawHeaders = exports.findRawHeaderIndex = exports.findRawHeader = void 0;
4
+ exports.pairFlatRawHeaders = pairFlatRawHeaders;
5
+ exports.flattenPairedRawHeaders = flattenPairedRawHeaders;
6
+ exports.rawHeadersToObject = rawHeadersToObject;
7
+ exports.rawHeadersToObjectPreservingCase = rawHeadersToObjectPreservingCase;
8
+ exports.objectHeadersToRaw = objectHeadersToRaw;
9
+ exports.objectHeadersToFlat = objectHeadersToFlat;
10
+ exports.h2HeadersToH1 = h2HeadersToH1;
11
+ exports.h1HeadersToH2 = h1HeadersToH2;
12
+ exports.dropDefaultHeaders = dropDefaultHeaders;
13
+ exports.validateHeader = validateHeader;
14
+ const http = require("http");
15
+ /*
16
+
17
+ These utils support conversion between the various header representations that we deal
18
+ with. Those are:
19
+
20
+ - Flat arrays of [key, value, key, value, key, ...]. This is the raw header format
21
+ generally used by Node.js's APIs throughout.
22
+ - Raw header tuple arrays like [[key, value], [key, value]]. This is our own raw header
23
+ format, aiming to be fairly easy to use and to preserve header order, header dupes &
24
+ header casing throughout.
25
+ - Formatted header objects of { key: value, key: value }. These are returned as the most
26
+ convenient and consistent header format: keys are lowercased, and values are either
27
+ strings or arrays of strings (for duplicate headers). This is returned by Node's APIs,
28
+ but with some unclear normalization rules, so in practice we build raw headers and
29
+ reconstruct this ourselves everyhere, by lowercasing & building arrays of values.
30
+
31
+ */
32
+ const findRawHeader = (rawHeaders, targetKey) => rawHeaders.find(([key]) => key.toLowerCase() === targetKey);
33
+ exports.findRawHeader = findRawHeader;
34
+ const findRawHeaderIndex = (rawHeaders, targetKey) => rawHeaders.findIndex(([key]) => key.toLowerCase() === targetKey);
35
+ exports.findRawHeaderIndex = findRawHeaderIndex;
36
+ const findRawHeaders = (rawHeaders, targetKey) => rawHeaders.filter(([key]) => key.toLowerCase() === targetKey);
37
+ exports.findRawHeaders = findRawHeaders;
38
+ /**
39
+ * Return node's _very_ raw headers ([k, v, k, v, ...]) into our slightly more convenient
40
+ * pairwise tuples [[k, v], [k, v], ...] RawHeaders structure.
41
+ */
42
+ function pairFlatRawHeaders(flatRawHeaders) {
43
+ const result = [];
44
+ for (let i = 0; i < flatRawHeaders.length; i += 2 /* Move two at a time */) {
45
+ result[i / 2] = [flatRawHeaders[i], flatRawHeaders[i + 1]];
46
+ }
47
+ return result;
48
+ }
49
+ function flattenPairedRawHeaders(rawHeaders) {
50
+ return rawHeaders.flat();
51
+ }
52
+ /**
53
+ * Take a raw headers, and turn them into headers, but without some of Node's concessions
54
+ * to ease of use, i.e. keeping multiple values as arrays.
55
+ *
56
+ * This lowercases all names along the way, to provide a convenient header API for most
57
+ * downstream use cases, and to match Node's own behaviour.
58
+ */
59
+ function rawHeadersToObject(rawHeaders) {
60
+ return rawHeaders.reduce((headers, [key, value]) => {
61
+ key = key.toLowerCase();
62
+ const existingValue = headers[key];
63
+ if (Array.isArray(existingValue)) {
64
+ existingValue.push(value);
65
+ }
66
+ else if (existingValue) {
67
+ headers[key] = [existingValue, value];
68
+ }
69
+ else {
70
+ headers[key] = value;
71
+ }
72
+ return headers;
73
+ }, {});
74
+ }
75
+ /**
76
+ * Take raw headers, and turn them into headers just like `rawHeadersToObject` but
77
+ * also preserves case en route.
78
+ *
79
+ * This is separated because our public APIs should _not_ do this, but there's a few
80
+ * internal use cases where we want to, notably including passing headers to WS which
81
+ * only accepts a headers object when sending upstream requests, but does preserve
82
+ * case from the object.
83
+ */
84
+ function rawHeadersToObjectPreservingCase(rawHeaders) {
85
+ // Duplicate keys with different cases in the final object clobber each other (last
86
+ // value wins) so we need to pick a single casing for each header name. We don't want
87
+ // to just use lowercase, because we want to preserve original casing wherever possible.
88
+ // To make that work, we use the casing from the first instance of each header, along with
89
+ // a lowercase -> first casing map here to look up that value later:
90
+ const headerNameMap = {};
91
+ return rawHeaders.reduce((headers, [key, value]) => {
92
+ const lowerCaseKey = key.toLowerCase();
93
+ if (headerNameMap[lowerCaseKey]) {
94
+ // If we've already seen this header, we need to use the same
95
+ // casing as before to avoid issues with duplicates:
96
+ key = headerNameMap[lowerCaseKey];
97
+ }
98
+ else {
99
+ // If we haven't, we store this key as the canonical format
100
+ // to make it easy to merge with any duplicates:
101
+ headerNameMap[lowerCaseKey] = key;
102
+ }
103
+ const existingValue = headers[key];
104
+ if (Array.isArray(existingValue)) {
105
+ existingValue.push(value);
106
+ }
107
+ else if (existingValue) {
108
+ headers[key] = [existingValue, value];
109
+ }
110
+ else {
111
+ headers[key] = value;
112
+ }
113
+ return headers;
114
+ }, {});
115
+ }
116
+ function objectHeadersToRaw(headers) {
117
+ const rawHeaders = [];
118
+ for (let key in headers) {
119
+ const value = headers[key];
120
+ if (value === undefined)
121
+ continue; // Drop undefined header values
122
+ if (Array.isArray(value)) {
123
+ value.forEach((v) => rawHeaders.push([key, v]));
124
+ }
125
+ else {
126
+ rawHeaders.push([key, value]);
127
+ }
128
+ }
129
+ return rawHeaders;
130
+ }
131
+ function objectHeadersToFlat(headers) {
132
+ const flatHeaders = [];
133
+ for (let key in headers) {
134
+ const value = headers[key];
135
+ if (value === undefined)
136
+ continue; // Drop undefined header values
137
+ if (Array.isArray(value)) {
138
+ value.forEach((v) => {
139
+ flatHeaders.push(key);
140
+ flatHeaders.push(v);
141
+ });
142
+ }
143
+ else {
144
+ flatHeaders.push(key);
145
+ flatHeaders.push(value);
146
+ }
147
+ }
148
+ return flatHeaders;
149
+ }
150
+ // See https://httptoolkit.com/blog/translating-http-2-into-http-1/ for details on the
151
+ // transformations required between H2 & H1 when proxying.
152
+ function h2HeadersToH1(h2Headers) {
153
+ let h1Headers = h2Headers.filter(([key]) => key[0] !== ':');
154
+ if (!(0, exports.findRawHeader)(h1Headers, 'host') && (0, exports.findRawHeader)(h2Headers, ':authority')) {
155
+ h1Headers.unshift(['Host', (0, exports.findRawHeader)(h2Headers, ':authority')[1]]);
156
+ }
157
+ // In HTTP/1 you MUST only send one cookie header - in HTTP/2 sending multiple is fine,
158
+ // so we have to concatenate them:
159
+ const cookieHeaders = (0, exports.findRawHeaders)(h1Headers, 'cookie');
160
+ if (cookieHeaders.length > 1) {
161
+ h1Headers = h1Headers.filter(([key]) => key.toLowerCase() !== 'cookie');
162
+ h1Headers.push(['Cookie', cookieHeaders.join('; ')]);
163
+ }
164
+ return h1Headers;
165
+ }
166
+ // Take from http2/util.js in Node itself
167
+ const HTTP2_ILLEGAL_HEADERS = [
168
+ 'connection',
169
+ 'upgrade',
170
+ 'host',
171
+ 'http2-settings',
172
+ 'keep-alive',
173
+ 'proxy-connection',
174
+ 'transfer-encoding'
175
+ ];
176
+ function h1HeadersToH2(headers) {
177
+ return headers.filter(([key]) => !HTTP2_ILLEGAL_HEADERS.includes(key.toLowerCase()));
178
+ }
179
+ // If the user explicitly specifies headers, we tell Node not to handle them,
180
+ // so the user-defined headers are the full set.
181
+ function dropDefaultHeaders(response) {
182
+ // Drop the default headers, so only the headers we explicitly configure are included
183
+ [
184
+ 'connection',
185
+ 'content-length',
186
+ 'transfer-encoding',
187
+ 'date'
188
+ ].forEach((defaultHeader) => response.removeHeader(defaultHeader));
189
+ }
190
+ function validateHeader(name, value) {
191
+ try {
192
+ http.validateHeaderName(name);
193
+ http.validateHeaderValue(name, value);
194
+ return true;
195
+ }
196
+ catch (e) {
197
+ return false;
198
+ }
199
+ }
200
+ //# sourceMappingURL=header-utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"header-utils.js","sourceRoot":"","sources":["../../src/util/header-utils.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function areFFDHECurvesSupported(opensslVersion: string | undefined): boolean;
2
+ //# sourceMappingURL=openssl-compat.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openssl-compat.d.ts","sourceRoot":"","sources":["../../src/util/openssl-compat.ts"],"names":[],"mappings":"AAEA,wBAAgB,uBAAuB,CAAC,cAAc,EAAE,MAAM,GAAG,SAAS,WAuBzE"}
@@ -0,0 +1,26 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.areFFDHECurvesSupported = areFFDHECurvesSupported;
4
+ const semver = require("semver");
5
+ function areFFDHECurvesSupported(opensslVersion) {
6
+ // FFDHE curves (ffdhe2048, ffdhe3072) are only avaliable from
7
+ // OpenSSL 3+
8
+ // Before 3.0.0, OpenSSL has followed non-semver version
9
+ // format (see https://wiki.openssl.org/index.php/Versioning).
10
+ // For example, there was a version `1.1.1t`. `semver` package, however
11
+ // can parse such versions with `loose: true` option
12
+ // If not version is available, assume that the curves are not supported
13
+ if (!opensslVersion) {
14
+ return false;
15
+ }
16
+ try {
17
+ const m = semver.major(opensslVersion, true);
18
+ return m >= 3;
19
+ }
20
+ catch {
21
+ // For any weirdly formed version where even the major part cannot be found,
22
+ // we assume that the curves are not supported for safety
23
+ return false;
24
+ }
25
+ }
26
+ //# sourceMappingURL=openssl-compat.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openssl-compat.js","sourceRoot":"","sources":["../../src/util/openssl-compat.ts"],"names":[],"mappings":";;AAEA,0DAuBC;AAzBD,iCAAiC;AAEjC,SAAgB,uBAAuB,CAAC,cAAkC;IACtE,8DAA8D;IAC9D,aAAa;IAEb,wDAAwD;IACxD,8DAA8D;IAC9D,uEAAuE;IACvE,oDAAoD;IAEpD,wEAAwE;IACxE,IAAI,CAAC,cAAc,EAAE,CAAC;QAClB,OAAO,KAAK,CAAC;IACjB,CAAC;IAED,IAAI,CAAC;QACD,MAAM,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,cAAc,EAAE,IAAI,CAAC,CAAC;QAC7C,OAAO,CAAC,IAAI,CAAC,CAAC;IAClB,CAAC;IACD,MAAM,CAAC;QACH,4EAA4E;QAC5E,yDAAyD;QACzD,OAAO,KAAK,CAAC;IACjB,CAAC;AACL,CAAC"}
@@ -0,0 +1,10 @@
1
+ import _ = require("lodash");
2
+ import { MaybePromise } from "./type-utils";
3
+ export declare function filter<T>(array: T[], test: (t: T) => MaybePromise<boolean>): Promise<T[]>;
4
+ export declare function objectAllPromise<V>(obj: _.Dictionary<MaybePromise<V>>): Promise<_.Dictionary<V>>;
5
+ export type Deferred<T> = Promise<T> & {
6
+ resolve(value: T): void;
7
+ reject(e: Error): void;
8
+ };
9
+ export declare function getDeferred<T>(): Deferred<T>;
10
+ //# sourceMappingURL=promise.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"promise.d.ts","sourceRoot":"","sources":["../../src/util/promise.ts"],"names":[],"mappings":"AAAA,OAAO,CAAC,GAAG,QAAQ,QAAQ,CAAC,CAAC;AAC7B,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAE5C,wBAAsB,MAAM,CAAC,CAAC,EAC1B,KAAK,EAAE,CAAC,EAAE,EACV,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,YAAY,CAAC,OAAO,CAAC,GACtC,OAAO,CAAC,CAAC,EAAE,CAAC,CAGd;AAED,wBAAsB,gBAAgB,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAEtG;AAED,MAAM,MAAM,QAAQ,CAAC,CAAC,IAAI,OAAO,CAAC,CAAC,CAAC,GAAG;IACnC,OAAO,CAAC,KAAK,EAAE,CAAC,GAAG,IAAI,CAAC;IACxB,MAAM,CAAC,CAAC,EAAE,KAAK,GAAG,IAAI,CAAA;CACzB,CAAA;AACD,wBAAgB,WAAW,CAAC,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,CAW5C"}
@@ -0,0 +1,25 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.filter = filter;
4
+ exports.objectAllPromise = objectAllPromise;
5
+ exports.getDeferred = getDeferred;
6
+ const _ = require("lodash");
7
+ async function filter(array, test) {
8
+ let testResults = await Promise.all(array.map(test));
9
+ return array.filter((v, i) => testResults[i]);
10
+ }
11
+ async function objectAllPromise(obj) {
12
+ return _.zipObject(Object.keys(obj), await Promise.all(Object.values(obj)));
13
+ }
14
+ function getDeferred() {
15
+ let resolveCallback;
16
+ let rejectCallback;
17
+ let result = new Promise((resolve, reject) => {
18
+ resolveCallback = resolve;
19
+ rejectCallback = reject;
20
+ });
21
+ result.resolve = resolveCallback;
22
+ result.reject = rejectCallback;
23
+ return result;
24
+ }
25
+ //# sourceMappingURL=promise.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"promise.js","sourceRoot":"","sources":["../../src/util/promise.ts"],"names":[],"mappings":";;AAGA,wBAMC;AAED,4CAEC;AAMD,kCAWC;AA9BD,4BAA6B;AAGtB,KAAK,UAAU,MAAM,CACxB,KAAU,EACV,IAAqC;IAErC,IAAI,WAAW,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;IACrD,OAAO,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;AAClD,CAAC;AAEM,KAAK,UAAU,gBAAgB,CAAI,GAAkC;IACxE,OAAO,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,MAAM,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AAChF,CAAC;AAMD,SAAgB,WAAW;IACvB,IAAI,eAAmC,CAAC;IACxC,IAAI,cAAkC,CAAC;IACvC,IAAI,MAAM,GAAiB,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACvD,eAAe,GAAG,OAAO,CAAC;QAC1B,cAAc,GAAG,MAAM,CAAC;IAC5B,CAAC,CAAC,CAAC;IACH,MAAM,CAAC,OAAO,GAAG,eAAgB,CAAC;IAClC,MAAM,CAAC,MAAM,GAAG,cAAe,CAAC;IAEhC,OAAO,MAAM,CAAC;AAClB,CAAC"}
@@ -0,0 +1,46 @@
1
+ import * as net from 'net';
2
+ import * as http from 'http';
3
+ import * as http2 from 'http2';
4
+ import { Headers, OngoingRequest, CompletedRequest, OngoingResponse, CompletedResponse, CompletedBody, TimingEvents, InitiatedRequest, RawHeaders } from "../types";
5
+ export declare const shouldKeepAlive: (req: OngoingRequest) => boolean;
6
+ export declare const writeHead: (response: http.ServerResponse | http2.Http2ServerResponse, status: number, statusMessage?: string | undefined, headers?: Headers | RawHeaders | undefined) => void;
7
+ export declare function isHttp2(message: http.IncomingMessage | http.ServerResponse | http2.Http2ServerRequest | http2.Http2ServerResponse | OngoingRequest | OngoingResponse): message is http2.Http2ServerRequest | http2.Http2ServerResponse;
8
+ export declare function encodeBodyBuffer(buffer: Uint8Array, headers: Headers): Promise<Uint8Array | Buffer>;
9
+ export declare function decodeBodyBuffer(buffer: Buffer, headers: Headers): Promise<Buffer>;
10
+ export declare const isMockttpBody: (body: any) => body is CompletedBody;
11
+ export declare const buildBodyReader: (body: Buffer, headers: Headers) => CompletedBody;
12
+ export declare const parseRequestBody: (req: http.IncomingMessage | http2.Http2ServerRequest, options: {
13
+ maxSize: number;
14
+ }) => void;
15
+ /**
16
+ * Build an initiated request: the external representation of a request
17
+ * that's just started.
18
+ */
19
+ export declare function buildInitiatedRequest(request: OngoingRequest): InitiatedRequest;
20
+ /**
21
+ * Build a completed request: the external representation of a request
22
+ * that's been completely received (but not necessarily replied to).
23
+ */
24
+ export declare function waitForCompletedRequest(request: OngoingRequest): Promise<CompletedRequest>;
25
+ export declare function trackResponse(response: http.ServerResponse, timingEvents: TimingEvents, tags: string[], options: {
26
+ maxSize: number;
27
+ }): OngoingResponse;
28
+ /**
29
+ * Build a completed response: the external representation of a response
30
+ * that's been completely written out and sent back to the client.
31
+ */
32
+ export declare function waitForCompletedResponse(response: OngoingResponse | CompletedResponse): Promise<CompletedResponse>;
33
+ export declare function tryToParseHttpRequest(input: Buffer, socket: net.Socket): PartiallyParsedHttpRequest;
34
+ type PartiallyParsedHttpRequest = {
35
+ protocol?: string;
36
+ httpVersion?: string;
37
+ method?: string;
38
+ url?: string;
39
+ headers?: Headers;
40
+ rawHeaders?: RawHeaders;
41
+ hostname?: string;
42
+ path?: string;
43
+ };
44
+ export declare function parseRawHttpResponse(input: Buffer, request: OngoingRequest): CompletedResponse;
45
+ export {};
46
+ //# sourceMappingURL=request-utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"request-utils.d.ts","sourceRoot":"","sources":["../../src/util/request-utils.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,GAAG,MAAM,KAAK,CAAC;AAE3B,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAQ/B,OAAO,EACH,OAAO,EACP,cAAc,EACd,gBAAgB,EAChB,eAAe,EACf,iBAAiB,EAEjB,aAAa,EACb,YAAY,EACZ,gBAAgB,EAChB,UAAU,EACb,MAAM,UAAU,CAAC;AAkBlB,eAAO,MAAM,eAAe,QAAS,cAAc,KAAG,OAGP,CAAC;AAEhD,eAAO,MAAM,SAAS,aACR,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC,mBAAmB,UACjD,MAAM,kBACE,MAAM,GAAG,SAAS,YACxB,OAAO,GAAG,UAAU,GAAG,SAAS,SA2B7C,CAAC;AAEF,wBAAgB,OAAO,CACnB,OAAO,EAAI,IAAI,CAAC,eAAe,GACpB,IAAI,CAAC,cAAc,GACnB,KAAK,CAAC,kBAAkB,GACxB,KAAK,CAAC,mBAAmB,GACzB,cAAc,GACd,eAAe,GAC3B,OAAO,IAAI,KAAK,CAAC,kBAAkB,GAAG,KAAK,CAAC,mBAAmB,CAGjE;AAED,wBAAsB,gBAAgB,CAAC,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,OAAO,gCAa1E;AAED,wBAAsB,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,mBAYtE;AAgED,eAAO,MAAM,aAAa,SAAU,GAAG,KAAG,IAAI,IAAI,aAEjD,CAAA;AAED,eAAO,MAAM,eAAe,SAAU,MAAM,WAAW,OAAO,KAAG,aAkFhE,CAAC;AAEF,eAAO,MAAM,gBAAgB,QACpB,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC,kBAAkB,WAC3C;IAAE,OAAO,EAAE,MAAM,CAAA;CAAE,SAI/B,CAAC;AAEF;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,cAAc,GAAG,gBAAgB,CAmB/E;AAED;;;GAGG;AACH,wBAAsB,uBAAuB,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAShG;AAsBD,wBAAgB,aAAa,CACzB,QAAQ,EAAE,IAAI,CAAC,cAAc,EAC7B,YAAY,EAAE,YAAY,EAC1B,IAAI,EAAE,MAAM,EAAE,EACd,OAAO,EAAE;IAAE,OAAO,EAAE,MAAM,CAAA;CAAE,GAC7B,eAAe,CA4GjB;AAED;;;GAGG;AACH,wBAAsB,wBAAwB,CAC1C,QAAQ,EAAE,eAAe,GAAG,iBAAiB,GAC9C,OAAO,CAAC,iBAAiB,CAAC,CA8B5B;AAID,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,GAAG,0BAA0B,CA6DnG;AAED,KAAK,0BAA0B,GAAG;IAC9B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;CACjB,CAAA;AAMD,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,GAAG,iBAAiB,CAmC9F"}