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,340 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.RequestRuleBuilder = void 0;
4
+ const lodash_1 = require("lodash");
5
+ const request_handler_definitions_1 = require("./request-handler-definitions");
6
+ const util_1 = require("../../util/util");
7
+ const base_rule_builder_1 = require("../base-rule-builder");
8
+ const matchers_1 = require("../matchers");
9
+ /**
10
+ * @class RequestRuleBuilder
11
+
12
+ * A builder for defining mock rules. Create one using a method like
13
+ * `.forGet(path)` or `.forPost(path)` on a Mockttp instance, then call
14
+ * whatever methods you'd like here to define more precise request
15
+ * matching behaviour, control how the request is handled, and how
16
+ * many times this rule should be applied.
17
+ *
18
+ * When you're done, call a `.thenX()` method to register the configured rule
19
+ * with the server. These return a promise for a MockedEndpoint, which can be
20
+ * used to verify the details of the requests matched by the rule.
21
+ *
22
+ * This returns a promise because rule registration can be asynchronous,
23
+ * either when using a remote server or testing in the browser. Wait for the
24
+ * promise returned by `.thenX()` methods to guarantee that the rule has taken
25
+ * effect before sending requests to it.
26
+ */
27
+ class RequestRuleBuilder extends base_rule_builder_1.BaseRuleBuilder {
28
+ constructor(methodOrAddRule, path, addRule) {
29
+ super();
30
+ // Add the basic method and path matchers inititally, if provided:
31
+ const method = methodOrAddRule instanceof Function ? undefined : methodOrAddRule;
32
+ if (method === undefined && path === undefined) {
33
+ this.matchers.push(new matchers_1.WildcardMatcher());
34
+ }
35
+ else {
36
+ if (method !== undefined) {
37
+ this.matchers.push(new matchers_1.MethodMatcher(method));
38
+ }
39
+ if (path instanceof RegExp) {
40
+ this.matchers.push(new matchers_1.RegexPathMatcher(path));
41
+ }
42
+ else if (typeof path === 'string') {
43
+ this.matchers.push(new matchers_1.SimplePathMatcher(path));
44
+ }
45
+ }
46
+ // Store the addRule callback:
47
+ if (methodOrAddRule instanceof Function) {
48
+ this.addRule = methodOrAddRule;
49
+ }
50
+ else {
51
+ this.addRule = addRule;
52
+ }
53
+ }
54
+ thenReply(status, dataOrMessage, dataOrHeaders, headersOrTrailers, trailers) {
55
+ let data;
56
+ let statusMessage;
57
+ let headers;
58
+ if ((0, lodash_1.isBuffer)(dataOrHeaders) || (0, lodash_1.isString)(dataOrHeaders)) {
59
+ data = dataOrHeaders;
60
+ statusMessage = dataOrMessage;
61
+ headers = headersOrTrailers;
62
+ }
63
+ else {
64
+ data = dataOrMessage;
65
+ headers = dataOrHeaders;
66
+ trailers = headersOrTrailers;
67
+ }
68
+ const rule = {
69
+ ...this.buildBaseRuleData(),
70
+ handler: new request_handler_definitions_1.SimpleHandlerDefinition(status, statusMessage, data, headers, trailers)
71
+ };
72
+ return this.addRule(rule);
73
+ }
74
+ /**
75
+ * Reply to matched requests with the given status & JSON and (optionally)
76
+ * extra headers.
77
+ *
78
+ * This method is (approximately) shorthand for:
79
+ * server.forGet(...).thenReply(status, JSON.stringify(data), { 'Content-Type': 'application/json' })
80
+ *
81
+ * Calling this method registers the rule with the server, so it
82
+ * starts to handle requests.
83
+ *
84
+ * This method returns a promise that resolves with a mocked endpoint.
85
+ * Wait for the promise to confirm that the rule has taken effect
86
+ * before sending requests to be matched. The mocked endpoint
87
+ * can be used to assert on the requests matched by this rule.
88
+ *
89
+ * @category Responses
90
+ */
91
+ thenJson(status, data, headers = {}) {
92
+ const jsonData = JSON.stringify(data);
93
+ headers = (0, lodash_1.merge)({
94
+ 'Content-Type': 'application/json',
95
+ 'Content-Length': (0, util_1.byteLength)(jsonData).toString(),
96
+ 'Connection': 'keep-alive'
97
+ // ^ Neither strictly required, but without both Node will close the server
98
+ // connection after the response is sent, which can confuse clients.
99
+ }, headers);
100
+ const rule = {
101
+ ...this.buildBaseRuleData(),
102
+ handler: new request_handler_definitions_1.SimpleHandlerDefinition(status, undefined, jsonData, headers)
103
+ };
104
+ return this.addRule(rule);
105
+ }
106
+ /**
107
+ * Call the given callback for any matched requests that are received,
108
+ * and build a response from the result.
109
+ *
110
+ * The callback should return a response object with the fields as
111
+ * defined by {@link CallbackResponseMessageResult} to define the response,
112
+ * or the string 'close' to immediately close the connection. The callback
113
+ * can be asynchronous, in which case it should return this value wrapped
114
+ * in a promise.
115
+ *
116
+ * If the callback throws an exception, the server will return a 500
117
+ * with the exception message.
118
+ *
119
+ * Calling this method registers the rule with the server, so it
120
+ * starts to handle requests.
121
+ *
122
+ * This method returns a promise that resolves with a mocked endpoint.
123
+ * Wait for the promise to confirm that the rule has taken effect
124
+ * before sending requests to be matched. The mocked endpoint
125
+ * can be used to assert on the requests matched by this rule.
126
+ *
127
+ * @category Responses
128
+ */
129
+ thenCallback(callback) {
130
+ const rule = {
131
+ ...this.buildBaseRuleData(),
132
+ handler: new request_handler_definitions_1.CallbackHandlerDefinition(callback)
133
+ };
134
+ return this.addRule(rule);
135
+ }
136
+ /**
137
+ * Respond immediately with the given status (and optionally, headers),
138
+ * and then stream the given stream directly as the response body.
139
+ *
140
+ * Note that streams can typically only be read once, and as such
141
+ * this rule will only successfully trigger once. Subsequent requests
142
+ * will receive a 500 and an explanatory error message. To mock
143
+ * repeated requests with streams, create multiple streams and mock
144
+ * them independently.
145
+ *
146
+ * Calling this method registers the rule with the server, so it
147
+ * starts to handle requests.
148
+ *
149
+ * This method returns a promise that resolves with a mocked endpoint.
150
+ * Wait for the promise to confirm that the rule has taken effect
151
+ * before sending requests to be matched. The mocked endpoint
152
+ * can be used to assert on the requests matched by this rule.
153
+ *
154
+ * @category Responses
155
+ */
156
+ thenStream(status, stream, headers) {
157
+ const rule = {
158
+ ...this.buildBaseRuleData(),
159
+ handler: new request_handler_definitions_1.StreamHandlerDefinition(status, stream, headers)
160
+ };
161
+ return this.addRule(rule);
162
+ }
163
+ thenFromFile(status, pathOrMessage, pathOrHeaders, headers) {
164
+ let path;
165
+ let statusMessage;
166
+ if ((0, lodash_1.isString)(pathOrHeaders)) {
167
+ path = pathOrHeaders;
168
+ statusMessage = pathOrMessage;
169
+ }
170
+ else {
171
+ path = pathOrMessage;
172
+ headers = pathOrHeaders;
173
+ }
174
+ const rule = {
175
+ ...this.buildBaseRuleData(),
176
+ handler: new request_handler_definitions_1.FileHandlerDefinition(status, statusMessage, path, headers)
177
+ };
178
+ return this.addRule(rule);
179
+ }
180
+ /**
181
+ * Pass matched requests through to their real destination. This works
182
+ * for proxied requests only, direct requests will be rejected with
183
+ * an error.
184
+ *
185
+ * This method takes options to configure how the request is passed
186
+ * through. See {@link PassThroughHandlerOptions} for the full details
187
+ * of the options available.
188
+ *
189
+ * Calling this method registers the rule with the server, so it
190
+ * starts to handle requests.
191
+ *
192
+ * This method returns a promise that resolves with a mocked endpoint.
193
+ * Wait for the promise to confirm that the rule has taken effect
194
+ * before sending requests to be matched. The mocked endpoint
195
+ * can be used to assert on the requests matched by this rule.
196
+ *
197
+ * @category Responses
198
+ */
199
+ thenPassThrough(options) {
200
+ const rule = {
201
+ ...this.buildBaseRuleData(),
202
+ handler: new request_handler_definitions_1.PassThroughHandlerDefinition(options)
203
+ };
204
+ return this.addRule(rule);
205
+ }
206
+ /**
207
+ * Forward matched requests on to the specified forwardToUrl. The url
208
+ * specified must not include a path. Otherwise, an error is thrown.
209
+ * The path portion of the original request url is used instead.
210
+ *
211
+ * The url may optionally contain a protocol. If it does, it will override
212
+ * the protocol (and potentially the port, if unspecified) of the request.
213
+ * If no protocol is specified, the protocol (and potentially the port)
214
+ * of the original request URL will be used instead.
215
+ *
216
+ * This method takes options to configure how the request is passed
217
+ * through. See {@link PassThroughHandlerOptions} for the full details
218
+ * of the options available.
219
+ *
220
+ * Calling this method registers the rule with the server, so it
221
+ * starts to handle requests.
222
+ *
223
+ * This method returns a promise that resolves with a mocked endpoint.
224
+ * Wait for the promise to confirm that the rule has taken effect
225
+ * before sending requests to be matched. The mocked endpoint
226
+ * can be used to assert on the requests matched by this rule.
227
+ *
228
+ * @category Responses
229
+ */
230
+ async thenForwardTo(forwardToLocation, options = {}) {
231
+ const rule = {
232
+ ...this.buildBaseRuleData(),
233
+ handler: new request_handler_definitions_1.PassThroughHandlerDefinition({
234
+ ...options,
235
+ forwarding: {
236
+ ...options.forwarding,
237
+ targetHost: forwardToLocation
238
+ }
239
+ })
240
+ };
241
+ return this.addRule(rule);
242
+ }
243
+ /**
244
+ * Close connections that match this rule immediately, without
245
+ * any status code or response.
246
+ *
247
+ * Calling this method registers the rule with the server, so it
248
+ * starts to handle requests.
249
+ *
250
+ * This method returns a promise that resolves with a mocked endpoint.
251
+ * Wait for the promise to confirm that the rule has taken effect
252
+ * before sending requests to be matched. The mocked endpoint
253
+ * can be used to assert on the requests matched by this rule.
254
+ *
255
+ * @category Responses
256
+ */
257
+ thenCloseConnection() {
258
+ const rule = {
259
+ ...this.buildBaseRuleData(),
260
+ handler: new request_handler_definitions_1.CloseConnectionHandlerDefinition()
261
+ };
262
+ return this.addRule(rule);
263
+ }
264
+ /**
265
+ * Reset connections that match this rule immediately, sending a TCP
266
+ * RST packet directly, without any status code or response, and without
267
+ * cleanly closing the TCP connection.
268
+ *
269
+ * This is only supported in Node.js versions (>=16.17, >=18.3.0, or
270
+ * later), where `net.Socket` includes the `resetAndDestroy` method.
271
+ *
272
+ * Calling this method registers the rule with the server, so it
273
+ * starts to handle requests.
274
+ *
275
+ * This method returns a promise that resolves with a mocked endpoint.
276
+ * Wait for the promise to confirm that the rule has taken effect
277
+ * before sending requests to be matched. The mocked endpoint
278
+ * can be used to assert on the requests matched by this rule.
279
+ *
280
+ * @category Responses
281
+ */
282
+ thenResetConnection() {
283
+ const rule = {
284
+ ...this.buildBaseRuleData(),
285
+ handler: new request_handler_definitions_1.ResetConnectionHandlerDefinition()
286
+ };
287
+ return this.addRule(rule);
288
+ }
289
+ /**
290
+ * Hold open connections that match this rule, but never respond
291
+ * with anything at all, typically causing a timeout on the client side.
292
+ *
293
+ * Calling this method registers the rule with the server, so it
294
+ * starts to handle requests.
295
+ *
296
+ * This method returns a promise that resolves with a mocked endpoint.
297
+ * Wait for the promise to confirm that the rule has taken effect
298
+ * before sending requests to be matched. The mocked endpoint
299
+ * can be used to assert on the requests matched by this rule.
300
+ *
301
+ * @category Responses
302
+ */
303
+ thenTimeout() {
304
+ const rule = {
305
+ ...this.buildBaseRuleData(),
306
+ handler: new request_handler_definitions_1.TimeoutHandlerDefinition()
307
+ };
308
+ return this.addRule(rule);
309
+ }
310
+ /**
311
+ * Send a successful JSON-RPC response to a JSON-RPC request. The response data
312
+ * can be any JSON-serializable value. If a matching request is received that
313
+ * is not a valid JSON-RPC request, it will be rejected with an HTTP error.
314
+ *
315
+ * @category Responses
316
+ */
317
+ thenSendJsonRpcResult(result) {
318
+ const rule = {
319
+ ...this.buildBaseRuleData(),
320
+ handler: new request_handler_definitions_1.JsonRpcResponseHandlerDefinition({ result })
321
+ };
322
+ return this.addRule(rule);
323
+ }
324
+ /**
325
+ * Send a failing error JSON-RPC response to a JSON-RPC request. The error data
326
+ * can be any JSON-serializable value. If a matching request is received that
327
+ * is not a valid JSON-RPC request, it will be rejected with an HTTP error.
328
+ *
329
+ * @category Responses
330
+ */
331
+ thenSendJsonRpcError(error) {
332
+ const rule = {
333
+ ...this.buildBaseRuleData(),
334
+ handler: new request_handler_definitions_1.JsonRpcResponseHandlerDefinition({ error })
335
+ };
336
+ return this.addRule(rule);
337
+ }
338
+ }
339
+ exports.RequestRuleBuilder = RequestRuleBuilder;
340
+ //# sourceMappingURL=request-rule-builder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"request-rule-builder.js","sourceRoot":"","sources":["../../../src/rules/requests/request-rule-builder.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,36 @@
1
+ import { OngoingRequest, CompletedRequest, OngoingResponse, Explainable } from "../../types";
2
+ import { MaybePromise } from '../../util/type-utils';
3
+ import * as matchers from "../matchers";
4
+ import type { RequestHandlerDefinition } from "./request-handler-definitions";
5
+ import { RequestHandler } from "./request-handlers";
6
+ import * as completionCheckers from "../completion-checkers";
7
+ export interface RequestRule extends Explainable {
8
+ id: string;
9
+ requests: Promise<CompletedRequest>[];
10
+ matches(request: OngoingRequest): MaybePromise<boolean>;
11
+ handle(request: OngoingRequest, response: OngoingResponse, options: {
12
+ record: boolean;
13
+ emitEventCallback?: (type: string, event: unknown) => void;
14
+ }): Promise<void>;
15
+ isComplete(): boolean | null;
16
+ }
17
+ export interface RequestRuleData {
18
+ id?: string;
19
+ priority?: number;
20
+ matchers: matchers.RequestMatcher[];
21
+ handler: RequestHandler | RequestHandlerDefinition;
22
+ completionChecker?: completionCheckers.RuleCompletionChecker;
23
+ }
24
+ export declare class RequestRule implements RequestRule {
25
+ private matchers;
26
+ private handler;
27
+ private completionChecker?;
28
+ id: string;
29
+ readonly priority: number;
30
+ requests: Promise<CompletedRequest>[];
31
+ requestCount: number;
32
+ constructor(data: RequestRuleData);
33
+ explain(withoutExactCompletion?: boolean): string;
34
+ dispose(): void;
35
+ }
36
+ //# sourceMappingURL=request-rule.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"request-rule.d.ts","sourceRoot":"","sources":["../../../src/rules/requests/request-rule.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,eAAe,EAAE,WAAW,EAAgB,MAAM,aAAa,CAAC;AAE3G,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAErD,OAAO,KAAK,QAAQ,MAAM,aAAa,CAAC;AACxC,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,+BAA+B,CAAC;AAC9E,OAAO,EAAiB,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACnE,OAAO,KAAK,kBAAkB,MAAM,wBAAwB,CAAC;AAI7D,MAAM,WAAW,WAAY,SAAQ,WAAW;IAC5C,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,OAAO,CAAC,gBAAgB,CAAC,EAAE,CAAC;IAGtC,OAAO,CAAC,OAAO,EAAE,cAAc,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC;IACxD,MAAM,CAAC,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,eAAe,EAAE,OAAO,EAAE;QAChE,MAAM,EAAE,OAAO,CAAC;QAChB,iBAAiB,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,KAAK,IAAI,CAAA;KAC7D,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAClB,UAAU,IAAI,OAAO,GAAG,IAAI,CAAC;CAChC;AAED,MAAM,WAAW,eAAe;IAC5B,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,QAAQ,CAAC,cAAc,EAAE,CAAC;IACpC,OAAO,EAAE,cAAc,GAAG,wBAAwB,CAAC;IACnD,iBAAiB,CAAC,EAAE,kBAAkB,CAAC,qBAAqB,CAAC;CAChE;AAED,qBAAa,WAAY,YAAW,WAAW;IAC3C,OAAO,CAAC,QAAQ,CAA4B;IAC5C,OAAO,CAAC,OAAO,CAAiB;IAChC,OAAO,CAAC,iBAAiB,CAAC,CAA2C;IAE9D,EAAE,EAAE,MAAM,CAAC;IAClB,SAAgB,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,EAAE,OAAO,CAAC,gBAAgB,CAAC,EAAE,CAAM;IAC3C,YAAY,SAAK;gBAEZ,IAAI,EAAE,eAAe;IAkFjC,OAAO,CAAC,sBAAsB,UAAQ,GAAG,MAAM;IAe/C,OAAO;CAKV"}
@@ -0,0 +1,100 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.RequestRule = void 0;
4
+ const uuid_1 = require("uuid");
5
+ const types_1 = require("../../types");
6
+ const request_utils_1 = require("../../util/request-utils");
7
+ const matchers = require("../matchers");
8
+ const request_handlers_1 = require("./request-handlers");
9
+ const rule_serialization_1 = require("../rule-serialization");
10
+ class RequestRule {
11
+ constructor(data) {
12
+ this.requests = [];
13
+ this.requestCount = 0;
14
+ (0, rule_serialization_1.validateMockRuleData)(data);
15
+ this.id = data.id || (0, uuid_1.v4)();
16
+ this.priority = data.priority ?? types_1.RulePriority.DEFAULT;
17
+ this.matchers = data.matchers;
18
+ this.completionChecker = data.completionChecker;
19
+ if ('handle' in data.handler) {
20
+ this.handler = data.handler;
21
+ }
22
+ else {
23
+ // We transform the definition into a real handler, by creating an instance of the raw handler (which is
24
+ // a subtype of the definition with the same constructor) and copying the fields across.
25
+ this.handler = Object.assign(Object.create(request_handlers_1.HandlerLookup[data.handler.type].prototype), data.handler);
26
+ }
27
+ }
28
+ matches(request) {
29
+ return matchers.matchesAll(request, this.matchers);
30
+ }
31
+ handle(req, res, options) {
32
+ let handlerPromise = (async () => {
33
+ return this.handler.handle(req, res, {
34
+ emitEventCallback: options.emitEventCallback
35
+ });
36
+ })();
37
+ // Requests are added to rule.requests as soon as they start being handled,
38
+ // as promises, which resolve only when the response & request body is complete.
39
+ if (options.record) {
40
+ this.requests.push(Promise.race([
41
+ // When the handler resolves, the request is completed:
42
+ handlerPromise,
43
+ // If the response is closed before the handler completes (due to aborts, handler
44
+ // timeouts, whatever) then that also counts as the request being completed:
45
+ new Promise((resolve) => res.on('close', resolve))
46
+ ])
47
+ .catch(() => { }) // Ignore handler errors here - we're only tracking the request
48
+ .then(() => (0, request_utils_1.waitForCompletedRequest)(req))
49
+ .catch(() => {
50
+ // If for some reason the request is not completed, we still want to record it.
51
+ // TODO: Update the body to return the data that has been received so far.
52
+ const initiatedRequest = (0, request_utils_1.buildInitiatedRequest)(req);
53
+ return {
54
+ ...initiatedRequest,
55
+ body: (0, request_utils_1.buildBodyReader)(Buffer.from([]), req.headers),
56
+ rawTrailers: [],
57
+ trailers: {}
58
+ };
59
+ }));
60
+ }
61
+ // Even if traffic recording is disabled, the number of matched
62
+ // requests is still tracked
63
+ this.requestCount += 1;
64
+ return handlerPromise;
65
+ }
66
+ isComplete() {
67
+ if (this.completionChecker) {
68
+ // If we have a specific rule, use that
69
+ return this.completionChecker.isComplete(this.requestCount);
70
+ }
71
+ else if (this.requestCount === 0) {
72
+ // Otherwise, by default we're definitely incomplete if we've seen no requests
73
+ return false;
74
+ }
75
+ else {
76
+ // And we're _maybe_ complete if we've seen at least one request. In reality, we're incomplete
77
+ // but we should be used anyway if we're at any point we're the last matching rule for a request.
78
+ return null;
79
+ }
80
+ }
81
+ explain(withoutExactCompletion = false) {
82
+ let explanation = `Match requests ${matchers.explainMatchers(this.matchers)}, ` +
83
+ `and then ${this.handler.explain()}`;
84
+ if (this.completionChecker) {
85
+ explanation += `, ${this.completionChecker.explain(withoutExactCompletion ? undefined : this.requestCount)}.`;
86
+ }
87
+ else {
88
+ explanation += '.';
89
+ }
90
+ return explanation;
91
+ }
92
+ dispose() {
93
+ this.handler.dispose();
94
+ this.matchers.forEach(m => m.dispose());
95
+ if (this.completionChecker)
96
+ this.completionChecker.dispose();
97
+ }
98
+ }
99
+ exports.RequestRule = RequestRule;
100
+ //# sourceMappingURL=request-rule.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"request-rule.js","sourceRoot":"","sources":["../../../src/rules/requests/request-rule.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import { Duplex } from "stream";
2
+ import { Serialized } from "../serialization/serialization";
3
+ import type { RuleParameters } from "./rule-parameters";
4
+ import type { RequestRuleData } from "./requests/request-rule";
5
+ import type { WebSocketRuleData } from "./websockets/websocket-rule";
6
+ export declare function deserializeRuleData(data: Serialized<RequestRuleData>, stream: Duplex, ruleParameters: RuleParameters): RequestRuleData;
7
+ export declare function deserializeWebSocketRuleData(data: Serialized<WebSocketRuleData>, stream: Duplex, ruleParameters: RuleParameters): WebSocketRuleData;
8
+ //# sourceMappingURL=rule-deserialization.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rule-deserialization.d.ts","sourceRoot":"","sources":["../../src/rules/rule-deserialization.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAEhC,OAAO,EAAE,UAAU,EAAe,MAAM,gCAAgC,CAAC;AAEzE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAExD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC/D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAQrE,wBAAgB,mBAAmB,CAC/B,IAAI,EAAE,UAAU,CAAC,eAAe,CAAC,EACjC,MAAM,EAAE,MAAM,EACd,cAAc,EAAE,cAAc,GAC/B,eAAe,CAejB;AAED,wBAAgB,4BAA4B,CACxC,IAAI,EAAE,UAAU,CAAC,iBAAiB,CAAC,EACnC,MAAM,EAAE,MAAM,EACd,cAAc,EAAE,cAAc,GAC/B,iBAAiB,CAcnB"}
@@ -0,0 +1,27 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.deserializeRuleData = deserializeRuleData;
4
+ exports.deserializeWebSocketRuleData = deserializeWebSocketRuleData;
5
+ const serialization_1 = require("../serialization/serialization");
6
+ const matchers = require("./matchers");
7
+ const completionCheckers = require("./completion-checkers");
8
+ const request_handlers_1 = require("./requests/request-handlers");
9
+ const websocket_handlers_1 = require("./websockets/websocket-handlers");
10
+ function deserializeRuleData(data, stream, ruleParameters) {
11
+ return {
12
+ id: data.id,
13
+ priority: data.priority,
14
+ matchers: data.matchers.map((m) => (0, serialization_1.deserialize)(m, stream, ruleParameters, matchers.MatcherLookup)),
15
+ handler: (0, serialization_1.deserialize)(data.handler, stream, ruleParameters, request_handlers_1.HandlerLookup),
16
+ completionChecker: data.completionChecker && (0, serialization_1.deserialize)(data.completionChecker, stream, ruleParameters, completionCheckers.CompletionCheckerLookup)
17
+ };
18
+ }
19
+ function deserializeWebSocketRuleData(data, stream, ruleParameters) {
20
+ return {
21
+ id: data.id,
22
+ matchers: data.matchers.map((m) => (0, serialization_1.deserialize)(m, stream, ruleParameters, matchers.MatcherLookup)),
23
+ handler: (0, serialization_1.deserialize)(data.handler, stream, ruleParameters, websocket_handlers_1.WsHandlerLookup),
24
+ completionChecker: data.completionChecker && (0, serialization_1.deserialize)(data.completionChecker, stream, ruleParameters, completionCheckers.CompletionCheckerLookup)
25
+ };
26
+ }
27
+ //# sourceMappingURL=rule-deserialization.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rule-deserialization.js","sourceRoot":"","sources":["../../src/rules/rule-deserialization.ts"],"names":[],"mappings":";;AAeA,kDAmBC;AAED,oEAkBC;AApDD,kEAAyE;AAOzE,uCAAuC;AACvC,4DAA4D;AAE5D,kEAA4D;AAC5D,wEAAkE;AAElE,SAAgB,mBAAmB,CAC/B,IAAiC,EACjC,MAAc,EACd,cAA8B;IAE9B,OAAO;QACH,EAAE,EAAE,IAAI,CAAC,EAAE;QACX,QAAQ,EAAE,IAAI,CAAC,QAAQ;QACvB,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAC9B,IAAA,2BAAW,EAAC,CAAC,EAAE,MAAM,EAAE,cAAc,EAAE,QAAQ,CAAC,aAAa,CAAC,CACjE;QACD,OAAO,EAAE,IAAA,2BAAW,EAAC,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,gCAAa,CAAC;QACzE,iBAAiB,EAAE,IAAI,CAAC,iBAAiB,IAAI,IAAA,2BAAW,EACpD,IAAI,CAAC,iBAAiB,EACtB,MAAM,EACN,cAAc,EACd,kBAAkB,CAAC,uBAAuB,CAC7C;KACJ,CAAC;AACN,CAAC;AAED,SAAgB,4BAA4B,CACxC,IAAmC,EACnC,MAAc,EACd,cAA8B;IAE9B,OAAO;QACH,EAAE,EAAE,IAAI,CAAC,EAAE;QACX,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAC9B,IAAA,2BAAW,EAAC,CAAC,EAAE,MAAM,EAAE,cAAc,EAAE,QAAQ,CAAC,aAAa,CAAC,CACjE;QACD,OAAO,EAAE,IAAA,2BAAW,EAAC,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,oCAAe,CAAC;QAC3E,iBAAiB,EAAE,IAAI,CAAC,iBAAiB,IAAI,IAAA,2BAAW,EACpD,IAAI,CAAC,iBAAiB,EACtB,MAAM,EACN,cAAc,EACd,kBAAkB,CAAC,uBAAuB,CAC7C;KACJ,CAAC;AACN,CAAC"}
@@ -0,0 +1,21 @@
1
+ export type RuleParameters = {
2
+ [key: string]: unknown;
3
+ };
4
+ export declare const MOCKTTP_PARAM_REF: unique symbol;
5
+ /**
6
+ * A reference to a rule parameter defined in the `ruleParameters` admin server
7
+ * option of the corresponding admin server.
8
+ *
9
+ * Rule parameter references are only valid with a remote client. They can be useful in
10
+ * cases where the admin server has access to local state or APIs that are not
11
+ * accessible from the remote client, but which would be useful in rule definitions. This
12
+ * is only supported for some specific parameters where documented explicitly in that rule
13
+ * parameter.
14
+ */
15
+ export type RuleParameterReference<R> = {
16
+ [MOCKTTP_PARAM_REF]: string;
17
+ };
18
+ export declare function isParamReference(input: any): input is RuleParameterReference<unknown>;
19
+ export declare function dereferenceParam<R>(paramRef: RuleParameterReference<R>, params: RuleParameters): R;
20
+ export declare function assertParamDereferenced<R>(maybeParamRef: R | RuleParameterReference<R>): R;
21
+ //# sourceMappingURL=rule-parameters.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rule-parameters.d.ts","sourceRoot":"","sources":["../../src/rules/rule-parameters.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,cAAc,GAAG;IACzB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CAC1B,CAAC;AAEF,eAAO,MAAM,iBAAiB,eAA8B,CAAC;AAE7D;;;;;;;;;GASG;AACH,MAAM,MAAM,sBAAsB,CAAC,CAAC,IAAI;IACpC,CAAC,iBAAiB,CAAC,EAAE,MAAM,CAAA;CAC9B,CAAC;AAEF,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,GAAG,GAAG,KAAK,IAAI,sBAAsB,CAAC,OAAO,CAAC,CAErF;AAED,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,QAAQ,EAAE,sBAAsB,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,cAAc,GAAG,CAAC,CAOlG;AAED,wBAAgB,uBAAuB,CAAC,CAAC,EAAE,aAAa,EAAE,CAAC,GAAG,sBAAsB,CAAC,CAAC,CAAC,GAAG,CAAC,CAO1F"}
@@ -0,0 +1,31 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.MOCKTTP_PARAM_REF = void 0;
4
+ exports.isParamReference = isParamReference;
5
+ exports.dereferenceParam = dereferenceParam;
6
+ exports.assertParamDereferenced = assertParamDereferenced;
7
+ exports.MOCKTTP_PARAM_REF = Symbol('MOCKTTP_PARAM_REF');
8
+ function isParamReference(input) {
9
+ return input && !!input[exports.MOCKTTP_PARAM_REF];
10
+ }
11
+ ;
12
+ function dereferenceParam(paramRef, params) {
13
+ const paramKey = paramRef[exports.MOCKTTP_PARAM_REF];
14
+ if (paramKey in params) {
15
+ return params[paramKey];
16
+ }
17
+ else {
18
+ throw new Error(`Invalid reference to undefined rule parameter '${paramKey}'`);
19
+ }
20
+ }
21
+ ;
22
+ function assertParamDereferenced(maybeParamRef) {
23
+ if (isParamReference(maybeParamRef)) {
24
+ const paramKey = maybeParamRef[exports.MOCKTTP_PARAM_REF];
25
+ throw new Error(`Non-dereferenced rule parameter used unexpectedly: ${paramKey}`);
26
+ }
27
+ else {
28
+ return maybeParamRef;
29
+ }
30
+ }
31
+ //# sourceMappingURL=rule-parameters.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rule-parameters.js","sourceRoot":"","sources":["../../src/rules/rule-parameters.ts"],"names":[],"mappings":";;;AAoBA,4CAEC;AAED,4CAOC;AAED,0DAOC;AApCY,QAAA,iBAAiB,GAAG,MAAM,CAAC,mBAAmB,CAAC,CAAC;AAgB7D,SAAgB,gBAAgB,CAAC,KAAU;IACvC,OAAO,KAAK,IAAI,CAAC,CAAC,KAAK,CAAC,yBAAiB,CAAC,CAAC;AAC/C,CAAC;AAAA,CAAC;AAEF,SAAgB,gBAAgB,CAAI,QAAmC,EAAE,MAAsB;IAC3F,MAAM,QAAQ,GAAG,QAAQ,CAAC,yBAAiB,CAAC,CAAC;IAC7C,IAAI,QAAQ,IAAI,MAAM,EAAE,CAAC;QACrB,OAAO,MAAM,CAAC,QAAQ,CAAM,CAAC;IACjC,CAAC;SAAM,CAAC;QACJ,MAAM,IAAI,KAAK,CAAC,kDAAkD,QAAQ,GAAG,CAAC,CAAC;IACnF,CAAC;AACL,CAAC;AAAA,CAAC;AAEF,SAAgB,uBAAuB,CAAI,aAA4C;IACnF,IAAI,gBAAgB,CAAC,aAAa,CAAC,EAAE,CAAC;QAClC,MAAM,QAAQ,GAAG,aAAa,CAAC,yBAAiB,CAAC,CAAC;QAClD,MAAM,IAAI,KAAK,CAAC,sDAAsD,QAAQ,EAAE,CAAC,CAAC;IACtF,CAAC;SAAM,CAAC;QACJ,OAAO,aAAa,CAAC;IACzB,CAAC;AACL,CAAC"}
@@ -0,0 +1,7 @@
1
+ import { Duplex } from "stream";
2
+ import { Serialized } from "../serialization/serialization";
3
+ import type { RequestRuleData } from "./requests/request-rule";
4
+ import type { WebSocketRuleData } from "./websockets/websocket-rule";
5
+ export declare function validateMockRuleData(data: RequestRuleData | WebSocketRuleData): void;
6
+ export declare function serializeRuleData<DataFormat extends RequestRuleData | WebSocketRuleData>(data: DataFormat, stream: Duplex): Serialized<DataFormat>;
7
+ //# sourceMappingURL=rule-serialization.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rule-serialization.d.ts","sourceRoot":"","sources":["../../src/rules/rule-serialization.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAEhC,OAAO,EAAE,UAAU,EAAa,MAAM,gCAAgC,CAAC;AAEvE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC/D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAErE,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,eAAe,GAAG,iBAAiB,GAAG,IAAI,CAOpF;AAED,wBAAgB,iBAAiB,CAC7B,UAAU,SAAS,eAAe,GAAG,iBAAiB,EACxD,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,GAAG,UAAU,CAAC,UAAU,CAAC,CAU1D"}
@@ -0,0 +1,25 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.validateMockRuleData = validateMockRuleData;
4
+ exports.serializeRuleData = serializeRuleData;
5
+ const serialization_1 = require("../serialization/serialization");
6
+ function validateMockRuleData(data) {
7
+ if (!data.matchers || data.matchers.length === 0) {
8
+ throw new Error('Cannot create a rule without at least one matcher');
9
+ }
10
+ if (!data.handler) {
11
+ throw new Error('Cannot create a rule with no handler');
12
+ }
13
+ }
14
+ function serializeRuleData(data, stream) {
15
+ validateMockRuleData(data);
16
+ return {
17
+ id: data.id,
18
+ priority: data.priority,
19
+ matchers: data.matchers.map(m => (0, serialization_1.serialize)(m, stream)),
20
+ handler: (0, serialization_1.serialize)(data.handler, stream),
21
+ completionChecker: data.completionChecker && (0, serialization_1.serialize)(data.completionChecker, stream)
22
+ };
23
+ }
24
+ ;
25
+ //# sourceMappingURL=rule-serialization.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rule-serialization.js","sourceRoot":"","sources":["../../src/rules/rule-serialization.ts"],"names":[],"mappings":";;AAOA,oDAOC;AAED,8CAYC;AA1BD,kEAAuE;AAKvE,SAAgB,oBAAoB,CAAC,IAAyC;IAC1E,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC/C,MAAM,IAAI,KAAK,CAAC,mDAAmD,CAAC,CAAC;IACzE,CAAC;IACD,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;QAChB,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAC;IAC5D,CAAC;AACL,CAAC;AAED,SAAgB,iBAAiB,CAE/B,IAAgB,EAAE,MAAc;IAC9B,oBAAoB,CAAC,IAAI,CAAC,CAAC;IAE3B,OAAO;QACH,EAAE,EAAE,IAAI,CAAC,EAAE;QACX,QAAQ,EAAE,IAAI,CAAC,QAAQ;QACvB,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAA,yBAAS,EAAC,CAAC,EAAE,MAAM,CAAC,CAAC;QACtD,OAAO,EAAE,IAAA,yBAAS,EAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC;QACxC,iBAAiB,EAAE,IAAI,CAAC,iBAAiB,IAAI,IAAA,yBAAS,EAAC,IAAI,CAAC,iBAAiB,EAAE,MAAM,CAAC;KAC/D,CAAC;AAChC,CAAC;AAAA,CAAC"}