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,515 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.MatcherLookup = exports.CallbackMatcher = exports.CookieMatcher = exports.JsonBodyFlexibleMatcher = exports.JsonBodyMatcher = exports.RegexBodyMatcher = exports.RawBodyIncludesMatcher = exports.RawBodyMatcher = exports.MultipartFormDataMatcher = exports.FormDataMatcher = exports.QueryMatcher = exports.ExactQueryMatcher = exports.HeaderMatcher = exports.RegexUrlMatcher = exports.RegexPathMatcher = exports.SimplePathMatcher = exports.PortMatcher = exports.HostnameMatcher = exports.HostMatcher = exports.ProtocolMatcher = exports.MethodMatcher = exports.WildcardMatcher = void 0;
4
+ exports.matchesAll = matchesAll;
5
+ exports.explainMatchers = explainMatchers;
6
+ const _ = require("lodash");
7
+ const url = require("url");
8
+ const common_tags_1 = require("common-tags");
9
+ const multipart = require("parse-multipart-data");
10
+ const types_1 = require("../types");
11
+ const url_1 = require("../util/url");
12
+ const request_utils_1 = require("../util/request-utils");
13
+ const serialization_1 = require("../serialization/serialization");
14
+ const body_serialization_1 = require("../serialization/body-serialization");
15
+ function unescapeRegexp(input) {
16
+ return input.replace(/\\\//g, '/');
17
+ }
18
+ class WildcardMatcher extends serialization_1.Serializable {
19
+ constructor() {
20
+ super(...arguments);
21
+ this.type = 'wildcard';
22
+ }
23
+ matches() {
24
+ return true;
25
+ }
26
+ explain() {
27
+ return 'for anything';
28
+ }
29
+ }
30
+ exports.WildcardMatcher = WildcardMatcher;
31
+ class MethodMatcher extends serialization_1.Serializable {
32
+ constructor(method) {
33
+ super();
34
+ this.method = method;
35
+ this.type = 'method';
36
+ }
37
+ matches(request) {
38
+ return request.method === types_1.Method[this.method];
39
+ }
40
+ explain() {
41
+ return `making ${types_1.Method[this.method]}s`;
42
+ }
43
+ }
44
+ exports.MethodMatcher = MethodMatcher;
45
+ class ProtocolMatcher extends serialization_1.Serializable {
46
+ constructor(protocol) {
47
+ super();
48
+ this.protocol = protocol;
49
+ this.type = 'protocol';
50
+ if (protocol !== "http" &&
51
+ protocol !== "https" &&
52
+ protocol !== "ws" &&
53
+ protocol !== "wss") {
54
+ throw new Error("Invalid protocol: protocol can only be 'http', 'https', 'ws' or 'wss'");
55
+ }
56
+ }
57
+ matches(request) {
58
+ return request.protocol === this.protocol;
59
+ }
60
+ explain() {
61
+ return `for protocol ${this.protocol}`;
62
+ }
63
+ }
64
+ exports.ProtocolMatcher = ProtocolMatcher;
65
+ class HostMatcher extends serialization_1.Serializable {
66
+ constructor(host) {
67
+ super();
68
+ this.host = host;
69
+ this.type = 'host';
70
+ // Validate the hostname. Goal here isn't to catch every bad hostname, but allow
71
+ // every good hostname, and provide friendly errors for obviously bad hostnames.
72
+ if (host.includes('/')) {
73
+ throw new Error("Invalid hostname: hostnames can't contain slashes");
74
+ }
75
+ else if (host.includes('?')) {
76
+ throw new Error("Invalid hostname: hostnames can't contain query strings");
77
+ }
78
+ else if (!host.match(/^([a-zA-Z0-9\-]+\.)*[a-zA-Z0-9\-]+(:\d+)?$/)) { // Port optional
79
+ throw new Error("Hostname is invalid");
80
+ }
81
+ }
82
+ matches(request) {
83
+ const parsedUrl = new url.URL(request.url);
84
+ if ((this.host.endsWith(':80') && request.protocol === 'http') ||
85
+ (this.host.endsWith(':443') && request.protocol === 'https')) {
86
+ // On default ports, our URL normalization erases an explicit port, so that a
87
+ // :80 here will never match anything. This handles that case: if you send HTTP
88
+ // traffic on port 80 then the port is blank, but it should match for 'hostname:80'.
89
+ return parsedUrl.hostname === this.host.split(':')[0] && parsedUrl.port === '';
90
+ }
91
+ else {
92
+ return parsedUrl.host === this.host;
93
+ }
94
+ }
95
+ explain() {
96
+ return `for host ${this.host}`;
97
+ }
98
+ }
99
+ exports.HostMatcher = HostMatcher;
100
+ class HostnameMatcher extends serialization_1.Serializable {
101
+ constructor(hostname) {
102
+ super();
103
+ this.hostname = hostname;
104
+ this.type = 'hostname';
105
+ // Validate the hostname. Goal here isn't to catch every bad hostname, but allow
106
+ // every good hostname, and provide friendly errors for obviously bad hostnames.
107
+ if (hostname.includes('/')) {
108
+ throw new Error("Invalid hostname: hostnames can't contain slashes");
109
+ }
110
+ else if (hostname.includes('?')) {
111
+ throw new Error("Invalid hostname: hostnames can't contain query strings");
112
+ }
113
+ else if (!hostname.match(/^([a-zA-Z0-9\-]+\.)*[a-zA-Z0-9\-]+$/)) { // No port
114
+ throw new Error("Hostname is invalid");
115
+ }
116
+ }
117
+ matches(request) {
118
+ return new url.URL(request.url).hostname === this.hostname;
119
+ }
120
+ explain() {
121
+ return `for hostname ${this.hostname}`;
122
+ }
123
+ }
124
+ exports.HostnameMatcher = HostnameMatcher;
125
+ class PortMatcher extends serialization_1.Serializable {
126
+ constructor(port) {
127
+ super();
128
+ this.type = 'port';
129
+ this.port = port.toString();
130
+ }
131
+ matches(request) {
132
+ const parsedUrl = new url.URL(request.url);
133
+ if ((this.port === '80' && request.protocol === 'http') ||
134
+ (this.port === '443' && request.protocol === 'https')) {
135
+ // The port is erased during our URL preprocessing if it's the default,
136
+ // so for those cases we have to match that separately:
137
+ return parsedUrl.port === '';
138
+ }
139
+ else {
140
+ return new url.URL(request.url).port === this.port;
141
+ }
142
+ }
143
+ explain() {
144
+ return `for port ${this.port}`;
145
+ }
146
+ }
147
+ exports.PortMatcher = PortMatcher;
148
+ class SimplePathMatcher extends serialization_1.Serializable {
149
+ constructor(path) {
150
+ super();
151
+ this.path = path;
152
+ this.type = 'simple-path';
153
+ if (!this.path)
154
+ throw new Error('Invalid URL: URL to match must not be empty');
155
+ let { search, query } = url.parse(this.path, true);
156
+ if (search) {
157
+ throw new Error((0, common_tags_1.oneLine) `
158
+ Tried to match a path that contained a query (${search}).
159
+ To match query parameters, use .withQuery(${JSON.stringify(query)}) instead,
160
+ or .withExactQuery('${search}') to match this exact query string.
161
+ `);
162
+ }
163
+ (0, url_1.normalizeUrl)(this.path); // Fail if URL can't be normalized
164
+ }
165
+ matches(request) {
166
+ const expectedUrl = (0, url_1.normalizeUrl)(this.path);
167
+ const reqUrl = (0, url_1.normalizeUrl)(request.url);
168
+ // reqUrl is always absolute, expectedUrl can be absolute, relative or protocolless-absolute
169
+ if ((0, url_1.isRelativeUrl)(expectedUrl)) {
170
+ // Match the path only, for any host
171
+ return (0, url_1.getPathFromAbsoluteUrl)(reqUrl) === expectedUrl;
172
+ }
173
+ else if ((0, url_1.isAbsoluteUrl)(expectedUrl)) {
174
+ // Full absolute URL: match everything
175
+ return reqUrl === expectedUrl;
176
+ }
177
+ else {
178
+ // Absolute URL with no protocol
179
+ return (0, url_1.getUrlWithoutProtocol)(reqUrl) === expectedUrl;
180
+ }
181
+ }
182
+ explain() {
183
+ return `for ${this.path}`;
184
+ }
185
+ }
186
+ exports.SimplePathMatcher = SimplePathMatcher;
187
+ class RegexPathMatcher extends serialization_1.Serializable {
188
+ constructor(regex) {
189
+ super();
190
+ this.type = 'regex-path';
191
+ this.regexSource = regex.source;
192
+ this.regexFlags = regex.flags;
193
+ }
194
+ matches(request) {
195
+ const absoluteUrl = (0, url_1.normalizeUrl)(request.url);
196
+ const urlPath = (0, url_1.getPathFromAbsoluteUrl)(absoluteUrl);
197
+ // Test the matcher against both the path alone & the full URL
198
+ const urlMatcher = new RegExp(this.regexSource, this.regexFlags);
199
+ return urlMatcher.test(absoluteUrl) ||
200
+ urlMatcher.test(urlPath);
201
+ }
202
+ explain() {
203
+ return `matching /${unescapeRegexp(this.regexSource)}/${this.regexFlags ?? ''}`;
204
+ }
205
+ }
206
+ exports.RegexPathMatcher = RegexPathMatcher;
207
+ class RegexUrlMatcher extends serialization_1.Serializable {
208
+ constructor(regex) {
209
+ super();
210
+ this.type = 'regex-url';
211
+ this.regexSource = regex.source;
212
+ this.regexFlags = regex.flags;
213
+ }
214
+ matches(request) {
215
+ const absoluteUrl = (0, url_1.normalizeUrl)(request.url);
216
+ // Test the matcher against the full URL
217
+ const urlMatcher = new RegExp(this.regexSource, this.regexFlags);
218
+ return urlMatcher.test(absoluteUrl);
219
+ }
220
+ explain() {
221
+ return `matching URL /${unescapeRegexp(this.regexSource)}/${this.regexFlags ?? ''}`;
222
+ }
223
+ }
224
+ exports.RegexUrlMatcher = RegexUrlMatcher;
225
+ class HeaderMatcher extends serialization_1.Serializable {
226
+ constructor(headersInput) {
227
+ super();
228
+ this.type = 'header';
229
+ this.headers = _.mapKeys(headersInput, (_value, key) => key.toLowerCase());
230
+ }
231
+ matches(request) {
232
+ return _.isMatch(request.headers, this.headers);
233
+ }
234
+ explain() {
235
+ return `with headers including ${JSON.stringify(this.headers)}`;
236
+ }
237
+ }
238
+ exports.HeaderMatcher = HeaderMatcher;
239
+ class ExactQueryMatcher extends serialization_1.Serializable {
240
+ constructor(query) {
241
+ super();
242
+ this.query = query;
243
+ this.type = 'exact-query-string';
244
+ if (query !== '' && query[0] !== '?') {
245
+ throw new Error('Exact query matches must start with ?, or be empty');
246
+ }
247
+ }
248
+ matches(request) {
249
+ const { search } = url.parse(request.url);
250
+ return this.query === search || (!search && !this.query);
251
+ }
252
+ explain() {
253
+ return this.query
254
+ ? `with a query exactly matching \`${this.query}\``
255
+ : 'with no query string';
256
+ }
257
+ }
258
+ exports.ExactQueryMatcher = ExactQueryMatcher;
259
+ class QueryMatcher extends serialization_1.Serializable {
260
+ constructor(queryObjectInput) {
261
+ super();
262
+ this.type = 'query';
263
+ this.queryObject = _.mapValues(queryObjectInput, (v) => Array.isArray(v) ? v.map(av => av.toString()) : v.toString());
264
+ }
265
+ matches(request) {
266
+ let { query } = url.parse(request.url, true);
267
+ return _.isMatch(query, this.queryObject);
268
+ }
269
+ explain() {
270
+ return `with a query including ${JSON.stringify(this.queryObject)}`;
271
+ }
272
+ }
273
+ exports.QueryMatcher = QueryMatcher;
274
+ class FormDataMatcher extends serialization_1.Serializable {
275
+ constructor(formData) {
276
+ super();
277
+ this.formData = formData;
278
+ this.type = 'form-data';
279
+ }
280
+ async matches(request) {
281
+ const contentType = request.headers['content-type'];
282
+ return !!contentType &&
283
+ contentType.indexOf("application/x-www-form-urlencoded") !== -1 &&
284
+ _.isMatch(await request.body.asFormData(), this.formData);
285
+ }
286
+ explain() {
287
+ return `with form data including ${JSON.stringify(this.formData)}`;
288
+ }
289
+ }
290
+ exports.FormDataMatcher = FormDataMatcher;
291
+ class MultipartFormDataMatcher extends serialization_1.Serializable {
292
+ constructor(matchConditions) {
293
+ super();
294
+ this.matchConditions = matchConditions;
295
+ this.type = 'multipart-form-data';
296
+ }
297
+ async matches(request) {
298
+ const contentType = request.headers['content-type'];
299
+ if (!contentType)
300
+ return false;
301
+ if (!contentType.includes("multipart/form-data"))
302
+ return false;
303
+ const boundary = contentType.match(/;\s*boundary=(\S+)/);
304
+ if (!boundary)
305
+ return false;
306
+ const parsedBody = multipart.parse(await request.body.asDecodedBuffer(), boundary[1]);
307
+ return this.matchConditions.every((condition) => {
308
+ const expectedContent = condition.content
309
+ ? Buffer.from(condition.content)
310
+ : undefined;
311
+ return parsedBody.some((part) => (expectedContent?.equals(part.data) || expectedContent === undefined) &&
312
+ (condition.filename === part.filename || condition.filename === undefined) &&
313
+ (condition.name === part.name || condition.name === undefined));
314
+ });
315
+ }
316
+ explain() {
317
+ return `with multipart form data matching ${JSON.stringify(this.matchConditions)}`;
318
+ }
319
+ }
320
+ exports.MultipartFormDataMatcher = MultipartFormDataMatcher;
321
+ class RawBodyMatcher extends serialization_1.Serializable {
322
+ constructor(content) {
323
+ super();
324
+ this.content = content;
325
+ this.type = 'raw-body';
326
+ }
327
+ async matches(request) {
328
+ return (await request.body.asText()) === this.content;
329
+ }
330
+ explain() {
331
+ return `with body '${this.content}'`;
332
+ }
333
+ }
334
+ exports.RawBodyMatcher = RawBodyMatcher;
335
+ class RawBodyIncludesMatcher extends serialization_1.Serializable {
336
+ constructor(content) {
337
+ super();
338
+ this.content = content;
339
+ this.type = 'raw-body-includes';
340
+ }
341
+ async matches(request) {
342
+ return (await request.body.asText()).includes(this.content);
343
+ }
344
+ explain() {
345
+ return `with a body including '${this.content}'`;
346
+ }
347
+ }
348
+ exports.RawBodyIncludesMatcher = RawBodyIncludesMatcher;
349
+ class RegexBodyMatcher extends serialization_1.Serializable {
350
+ constructor(regex) {
351
+ super();
352
+ this.type = 'raw-body-regexp';
353
+ this.regexString = regex.source;
354
+ }
355
+ async matches(request) {
356
+ let bodyMatcher = new RegExp(this.regexString);
357
+ return bodyMatcher.test(await request.body.asText());
358
+ }
359
+ explain() {
360
+ return `with a body matching /${unescapeRegexp(this.regexString)}/`;
361
+ }
362
+ }
363
+ exports.RegexBodyMatcher = RegexBodyMatcher;
364
+ class JsonBodyMatcher extends serialization_1.Serializable {
365
+ constructor(body) {
366
+ super();
367
+ this.body = body;
368
+ this.type = 'json-body';
369
+ }
370
+ async matches(request) {
371
+ const receivedBody = await (request.body.asJson().catch(() => undefined));
372
+ if (receivedBody === undefined)
373
+ return false;
374
+ else
375
+ return _.isEqual(receivedBody, this.body);
376
+ }
377
+ explain() {
378
+ return `with a JSON body equivalent to ${JSON.stringify(this.body)}`;
379
+ }
380
+ }
381
+ exports.JsonBodyMatcher = JsonBodyMatcher;
382
+ class JsonBodyFlexibleMatcher extends serialization_1.Serializable {
383
+ constructor(body) {
384
+ super();
385
+ this.body = body;
386
+ this.type = 'json-body-matching';
387
+ }
388
+ async matches(request) {
389
+ const receivedBody = await (request.body.asJson().catch(() => undefined));
390
+ if (receivedBody === undefined)
391
+ return false;
392
+ else
393
+ return _.isMatch(receivedBody, this.body);
394
+ }
395
+ explain() {
396
+ return `with a JSON body including ${JSON.stringify(this.body)}`;
397
+ }
398
+ }
399
+ exports.JsonBodyFlexibleMatcher = JsonBodyFlexibleMatcher;
400
+ class CookieMatcher extends serialization_1.Serializable {
401
+ constructor(cookie) {
402
+ super();
403
+ this.cookie = cookie;
404
+ this.type = 'cookie';
405
+ }
406
+ async matches(request) {
407
+ if (!request.headers || !request.headers.cookie) {
408
+ return false;
409
+ }
410
+ const cookies = request.headers.cookie.split(';').map(cookie => {
411
+ const [key, value] = cookie.split('=');
412
+ return { [key.trim()]: (value || '').trim() };
413
+ });
414
+ return cookies.some(element => _.isEqual(element, this.cookie));
415
+ }
416
+ explain() {
417
+ return `with cookies including ${JSON.stringify(this.cookie)}`;
418
+ }
419
+ }
420
+ exports.CookieMatcher = CookieMatcher;
421
+ class CallbackMatcher extends serialization_1.Serializable {
422
+ constructor(callback) {
423
+ super();
424
+ this.callback = callback;
425
+ this.type = 'callback';
426
+ }
427
+ async matches(request) {
428
+ const completedRequest = await (0, request_utils_1.waitForCompletedRequest)(request);
429
+ return this.callback(completedRequest);
430
+ }
431
+ explain() {
432
+ return `matches using provided callback${this.callback.name ? ` (${this.callback.name})` : ''}`;
433
+ }
434
+ /**
435
+ * @internal
436
+ */
437
+ serialize(channel) {
438
+ channel.onRequest(async (streamMsg) => {
439
+ const request = (0, body_serialization_1.withDeserializedBodyReader)(streamMsg);
440
+ const callbackResult = await this.callback.call(null, request);
441
+ return callbackResult;
442
+ });
443
+ return { type: this.type, name: this.callback.name, version: 1 };
444
+ }
445
+ /**
446
+ * @internal
447
+ */
448
+ static deserialize({ name }, channel) {
449
+ const rpcCallback = async (request) => {
450
+ const callbackResult = channel.request((0, body_serialization_1.withSerializedBodyReader)(request));
451
+ return callbackResult;
452
+ };
453
+ // Pass across the name from the real callback, for explain()
454
+ Object.defineProperty(rpcCallback, 'name', { value: name });
455
+ // Call the client's callback (via stream), and save a handler on our end for
456
+ // the response that comes back.
457
+ return new CallbackMatcher(rpcCallback);
458
+ }
459
+ }
460
+ exports.CallbackMatcher = CallbackMatcher;
461
+ exports.MatcherLookup = {
462
+ 'wildcard': WildcardMatcher,
463
+ 'method': MethodMatcher,
464
+ 'protocol': ProtocolMatcher,
465
+ 'host': HostMatcher,
466
+ 'hostname': HostnameMatcher,
467
+ 'port': PortMatcher,
468
+ 'simple-path': SimplePathMatcher,
469
+ 'regex-path': RegexPathMatcher,
470
+ 'regex-url': RegexUrlMatcher,
471
+ 'header': HeaderMatcher,
472
+ 'query': QueryMatcher,
473
+ 'exact-query-string': ExactQueryMatcher,
474
+ 'form-data': FormDataMatcher,
475
+ 'multipart-form-data': MultipartFormDataMatcher,
476
+ 'raw-body': RawBodyMatcher,
477
+ 'raw-body-regexp': RegexBodyMatcher,
478
+ 'raw-body-includes': RawBodyIncludesMatcher,
479
+ 'json-body': JsonBodyMatcher,
480
+ 'json-body-matching': JsonBodyFlexibleMatcher,
481
+ 'cookie': CookieMatcher,
482
+ 'callback': CallbackMatcher,
483
+ };
484
+ async function matchesAll(req, matchers) {
485
+ return new Promise((resolve, reject) => {
486
+ const resultsPromises = matchers.map((matcher) => matcher.matches(req));
487
+ resultsPromises.forEach(async (maybePromiseResult) => {
488
+ try {
489
+ const result = await maybePromiseResult;
490
+ if (!result)
491
+ resolve(false); // Resolve mismatches immediately
492
+ }
493
+ catch (e) {
494
+ reject(e); // Resolve matcher failures immediately
495
+ }
496
+ });
497
+ // Otherwise resolve as normal: all true matches, exceptions reject.
498
+ Promise.all(resultsPromises)
499
+ .then((result) => resolve(_.every(result)))
500
+ .catch((e) => reject(e));
501
+ });
502
+ }
503
+ function explainMatchers(matchers) {
504
+ if (matchers.length === 1)
505
+ return matchers[0].explain();
506
+ if (matchers.length === 2) {
507
+ // With just two explanations, you can just combine them
508
+ return `${matchers[0].explain()} ${matchers[1].explain()}`;
509
+ }
510
+ // With 3+, we need to oxford comma separate explanations to make them readable
511
+ return matchers.slice(0, -1)
512
+ .map((m) => m.explain())
513
+ .join(', ') + ', and ' + matchers.slice(-1)[0].explain();
514
+ }
515
+ //# sourceMappingURL=matchers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"matchers.js","sourceRoot":"","sources":["../../src/rules/matchers.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,106 @@
1
+ import { ProxyConfig } from "./proxy-config";
2
+ export interface ForwardingOptions {
3
+ targetHost: string;
4
+ updateHostHeader?: true | false | string;
5
+ }
6
+ export interface PassThroughLookupOptions {
7
+ /**
8
+ * The maximum time to cache a DNS response. Up to this limit,
9
+ * responses will be cached according to their own TTL. Defaults
10
+ * to Infinity.
11
+ */
12
+ maxTtl?: number;
13
+ /**
14
+ * How long to cache a DNS ENODATA or ENOTFOUND response. Defaults
15
+ * to 0.15.
16
+ */
17
+ errorTtl?: number;
18
+ /**
19
+ * The primary servers to use. DNS queries will be resolved against
20
+ * these servers first. If no data is available, queries will fall
21
+ * back to dns.lookup, and use the OS's default DNS servers.
22
+ *
23
+ * This defaults to dns.getServers().
24
+ */
25
+ servers?: string[];
26
+ }
27
+ export type CADefinition = {
28
+ cert: string | Buffer;
29
+ } | {
30
+ certPath: string;
31
+ };
32
+ /**
33
+ * This defines the upstream connection parameters. These passthrough parameters
34
+ * are shared between both WebSocket & Request passthrough rules.
35
+ */
36
+ export interface PassThroughHandlerConnectionOptions {
37
+ /**
38
+ * The forwarding configuration for the passthrough rule.
39
+ * This generally shouldn't be used explicitly unless you're
40
+ * building rule data by hand. Instead, call `thenPassThrough`
41
+ * to send data directly or `thenForwardTo` with options to
42
+ * configure traffic forwarding.
43
+ */
44
+ forwarding?: ForwardingOptions;
45
+ /**
46
+ * A list of hostnames for which server certificate and TLS version errors
47
+ * should be ignored (none, by default).
48
+ *
49
+ * If set to 'true', HTTPS errors will be ignored for all hosts. WARNING:
50
+ * Use this at your own risk. Setting this to `true` can open your
51
+ * application to MITM attacks and should never be used over any network
52
+ * that is not completed trusted end-to-end.
53
+ */
54
+ ignoreHostHttpsErrors?: string[] | boolean;
55
+ /**
56
+ * An array of additional certificates, which should be trusted as certificate
57
+ * authorities for upstream hosts, in addition to Node.js's built-in certificate
58
+ * authorities.
59
+ *
60
+ * Each certificate should be an object with either a `cert` key and a string
61
+ * or buffer value containing the PEM certificate, or a `certPath` key and a
62
+ * string value containing the local path to the PEM certificate.
63
+ */
64
+ additionalTrustedCAs?: Array<CADefinition>;
65
+ /**
66
+ * Deprecated alias for `additionalTrustedCAs`
67
+ *
68
+ * @deprecated
69
+ */
70
+ trustAdditionalCAs?: Array<CADefinition>;
71
+ /**
72
+ * A mapping of hosts to client certificates to use, in the form of
73
+ * `{ key, cert }` objects (none, by default)
74
+ */
75
+ clientCertificateHostMap?: {
76
+ [host: string]: {
77
+ pfx: Buffer;
78
+ passphrase?: string;
79
+ };
80
+ };
81
+ /**
82
+ * Upstream proxy configuration: pass through requests via this proxy.
83
+ *
84
+ * If this is undefined, no proxy will be used. To configure a proxy
85
+ * provide either:
86
+ * - a ProxySettings object
87
+ * - a callback which will be called with an object containing the
88
+ * hostname, and must return a ProxySettings object or undefined.
89
+ * - an array of ProxySettings or callbacks. The array will be
90
+ * processed in order, and the first not-undefined ProxySettings
91
+ * found will be used.
92
+ *
93
+ * When using a remote client, this parameter or individual array
94
+ * values may be passed by reference, using the name of a rule
95
+ * parameter configured in the admin server.
96
+ */
97
+ proxyConfig?: ProxyConfig;
98
+ /**
99
+ * Custom DNS options, to allow configuration of the resolver used
100
+ * when forwarding requests upstream. Passing any option switches
101
+ * from using node's default dns.lookup function to using the
102
+ * cacheable-lookup module, which will cache responses.
103
+ */
104
+ lookupOptions?: PassThroughLookupOptions;
105
+ }
106
+ //# sourceMappingURL=passthrough-handling-definitions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"passthrough-handling-definitions.d.ts","sourceRoot":"","sources":["../../src/rules/passthrough-handling-definitions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAE7C,MAAM,WAAW,iBAAiB;IAC9B,UAAU,EAAE,MAAM,CAAC;IAEnB,gBAAgB,CAAC,EAAE,IAAI,GAAG,KAAK,GAAG,MAAM,CAAA;CAC3C;AAED,MAAM,WAAW,wBAAwB;IACrC;;;;OAIG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;;;;;OAMG;IACH,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;CACtB;AAED,MAAM,MAAM,YAAY,GAClB;IAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAAA;CAAE,GACzB;IAAE,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC;AAE3B;;;GAGG;AACH,MAAM,WAAW,mCAAmC;IAChD;;;;;;OAMG;IACH,UAAU,CAAC,EAAE,iBAAiB,CAAC;IAE/B;;;;;;;;OAQG;IACH,qBAAqB,CAAC,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC;IAE3C;;;;;;;;OAQG;IACH,oBAAoB,CAAC,EAAE,KAAK,CAAC,YAAY,CAAC,CAAC;IAE3C;;;;OAIG;IACH,kBAAkB,CAAC,EAAE,KAAK,CAAC,YAAY,CAAC,CAAC;IAEzC;;;OAGG;IACH,wBAAwB,CAAC,EAAE;QACvB,CAAC,IAAI,EAAE,MAAM,GAAG;YAAE,GAAG,EAAE,MAAM,CAAC;YAAC,UAAU,CAAC,EAAE,MAAM,CAAA;SAAE,CAAA;KACvD,CAAC;IAEF;;;;;;;;;;;;;;;OAeG;IACH,WAAW,CAAC,EAAE,WAAW,CAAC;IAE1B;;;;;OAKG;IACH,aAAa,CAAC,EAAE,wBAAwB,CAAC;CAC5C"}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=passthrough-handling-definitions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"passthrough-handling-definitions.js","sourceRoot":"","sources":["../../src/rules/passthrough-handling-definitions.ts"],"names":[],"mappings":""}