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,13 @@
1
+ import { DocumentNode } from "graphql";
2
+ import { MaybePromise } from "../util/type-utils";
3
+ import type { AdminClient } from "./admin-client";
4
+ export interface QueryContext {
5
+ adminClient: AdminClient<{}>;
6
+ }
7
+ export interface AdminQuery<Response extends unknown, Result extends unknown = Response> {
8
+ query: DocumentNode;
9
+ variables?: {};
10
+ transformResponse?: (result: Response, context: QueryContext) => MaybePromise<Result>;
11
+ }
12
+ export declare function getSingleSelectedFieldName(query: AdminQuery<any, any>): string;
13
+ //# sourceMappingURL=admin-query.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"admin-query.d.ts","sourceRoot":"","sources":["../../src/client/admin-query.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,YAAY,EAIf,MAAM,SAAS,CAAC;AAEjB,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAElD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAElD,MAAM,WAAW,YAAY;IACzB,WAAW,EAAE,WAAW,CAAC,EAAE,CAAC,CAAC;CAChC;AAED,MAAM,WAAW,UAAU,CAAC,QAAQ,SAAS,OAAO,EAAE,MAAM,SAAS,OAAO,GAAG,QAAQ;IACnF,KAAK,EAAE,YAAY,CAAC;IACpB,SAAS,CAAC,EAAE,EAAE,CAAC;IACf,iBAAiB,CAAC,EAAE,CAAC,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,YAAY,KAAK,YAAY,CAAC,MAAM,CAAC,CAAC;CACzF;AAiBD,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,UAAU,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,MAAM,CAe9E"}
@@ -0,0 +1,26 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getSingleSelectedFieldName = getSingleSelectedFieldName;
4
+ function isFieldSelection(selection) {
5
+ return selection.kind === 'Field';
6
+ }
7
+ function getQuerySelectionNode(gqlQuery) {
8
+ const { definitions } = gqlQuery;
9
+ if (definitions.length !== 1 || definitions[0].kind !== 'OperationDefinition') {
10
+ throw new Error("Admin queries must be defined as a single operation definition");
11
+ }
12
+ return definitions[0].selectionSet;
13
+ }
14
+ // Enforces that the query selects only one field (this is relevant for subscriptions),
15
+ // and extracts and returns the name of that field.
16
+ function getSingleSelectedFieldName(query) {
17
+ const selectedFieldNames = getQuerySelectionNode(query.query)
18
+ .selections
19
+ .filter(isFieldSelection)
20
+ .map(selection => selection.name.value);
21
+ if (selectedFieldNames.length !== 1) {
22
+ throw new Error(`This admin query must select only one field, but it selects ${selectedFieldNames.length}: ${selectedFieldNames.join(', ')}`);
23
+ }
24
+ return selectedFieldNames[0];
25
+ }
26
+ //# sourceMappingURL=admin-query.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"admin-query.js","sourceRoot":"","sources":["../../src/client/admin-query.ts"],"names":[],"mappings":";;AAoCA,gEAeC;AA9BD,SAAS,gBAAgB,CAAC,SAAwB;IAC9C,OAAO,SAAS,CAAC,IAAI,KAAK,OAAO,CAAC;AACtC,CAAC;AAED,SAAS,qBAAqB,CAAC,QAAsB;IACjD,MAAM,EAAE,WAAW,EAAE,GAAG,QAAQ,CAAC;IACjC,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,IAAI,WAAW,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,qBAAqB,EAAE,CAAC;QAC5E,MAAM,IAAI,KAAK,CAAC,gEAAgE,CAAC,CAAC;IACtF,CAAC;IAED,OAAO,WAAW,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC;AACvC,CAAC;AAED,uFAAuF;AACvF,mDAAmD;AACnD,SAAgB,0BAA0B,CAAC,KAA2B;IAClE,MAAM,kBAAkB,GAAG,qBAAqB,CAAC,KAAK,CAAC,KAAK,CAAC;SACxD,UAAU;SACV,MAAM,CAAC,gBAAgB,CAAC;SACxB,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAE5C,IAAI,kBAAkB,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAClC,MAAM,IAAI,KAAK,CACX,+DACI,kBAAkB,CAAC,MACvB,KAAK,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CACvC,CAAC;IACN,CAAC;IAED,OAAO,kBAAkB,CAAC,CAAC,CAAC,CAAC;AACjC,CAAC"}
@@ -0,0 +1,12 @@
1
+ import { MockedEndpointData, MockedEndpoint, CompletedRequest } from "../types";
2
+ export declare class MockedEndpointClient implements MockedEndpoint {
3
+ readonly id: string;
4
+ private explanation;
5
+ private endpointDataGetter;
6
+ constructor(id: string, explanation: string | undefined, endpointDataGetter: () => Promise<MockedEndpointData | null>);
7
+ private getMockedEndpointData;
8
+ getSeenRequests(): Promise<CompletedRequest[]>;
9
+ isPending(): Promise<boolean>;
10
+ toString(): string;
11
+ }
12
+ //# sourceMappingURL=mocked-endpoint-client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mocked-endpoint-client.d.ts","sourceRoot":"","sources":["../../src/client/mocked-endpoint-client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAEhF,qBAAa,oBAAqB,YAAW,cAAc;aAGnC,EAAE,EAAE,MAAM;IAC1B,OAAO,CAAC,WAAW;IACnB,OAAO,CAAC,kBAAkB;gBAFV,EAAE,EAAE,MAAM,EAClB,WAAW,EAAE,MAAM,GAAG,SAAS,EAC/B,kBAAkB,EAAE,MAAM,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC;YAG1D,qBAAqB;IAMtB,eAAe,IAAI,OAAO,CAAC,gBAAgB,EAAE,CAAC;IAI9C,SAAS,IAAI,OAAO,CAAC,OAAO,CAAC;IAI1C,QAAQ;CAOX"}
@@ -0,0 +1,33 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.MockedEndpointClient = void 0;
4
+ class MockedEndpointClient {
5
+ constructor(id, explanation, endpointDataGetter) {
6
+ this.id = id;
7
+ this.explanation = explanation;
8
+ this.endpointDataGetter = endpointDataGetter;
9
+ }
10
+ async getMockedEndpointData() {
11
+ const mockedEndpointData = await this.endpointDataGetter();
12
+ if (mockedEndpointData === null)
13
+ throw new Error("Can't get seen requests for unknown mocked endpoint");
14
+ else
15
+ return mockedEndpointData;
16
+ }
17
+ async getSeenRequests() {
18
+ return (await this.getMockedEndpointData()).seenRequests;
19
+ }
20
+ async isPending() {
21
+ return (await this.getMockedEndpointData()).isPending;
22
+ }
23
+ toString() {
24
+ if (this.explanation) {
25
+ return "Mocked endpoint: " + this.explanation;
26
+ }
27
+ else {
28
+ return Object.toString.call(this);
29
+ }
30
+ }
31
+ }
32
+ exports.MockedEndpointClient = MockedEndpointClient;
33
+ //# sourceMappingURL=mocked-endpoint-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mocked-endpoint-client.js","sourceRoot":"","sources":["../../src/client/mocked-endpoint-client.ts"],"names":[],"mappings":";;;AAEA,MAAa,oBAAoB;IAE7B,YACoB,EAAU,EAClB,WAA+B,EAC/B,kBAA4D;QAFpD,OAAE,GAAF,EAAE,CAAQ;QAClB,gBAAW,GAAX,WAAW,CAAoB;QAC/B,uBAAkB,GAAlB,kBAAkB,CAA0C;IACpE,CAAC;IAEG,KAAK,CAAC,qBAAqB;QAC/B,MAAM,kBAAkB,GAAG,MAAM,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAC3D,IAAI,kBAAkB,KAAK,IAAI;YAAE,MAAM,IAAI,KAAK,CAAC,qDAAqD,CAAC,CAAC;;YACnG,OAAO,kBAAkB,CAAC;IACnC,CAAC;IAEM,KAAK,CAAC,eAAe;QACxB,OAAO,CAAC,MAAM,IAAI,CAAC,qBAAqB,EAAE,CAAC,CAAC,YAAY,CAAC;IAC7D,CAAC;IAEM,KAAK,CAAC,SAAS;QAClB,OAAO,CAAC,MAAM,IAAI,CAAC,qBAAqB,EAAE,CAAC,CAAC,SAAS,CAAC;IAC1D,CAAC;IAED,QAAQ;QACJ,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACnB,OAAO,mBAAmB,GAAG,IAAI,CAAC,WAAW,CAAC;QAClD,CAAC;aAAM,CAAC;YACJ,OAAO,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACtC,CAAC;IACL,CAAC;CACJ;AA7BD,oDA6BC"}
@@ -0,0 +1,38 @@
1
+ import * as stream from 'stream';
2
+ import { MockedEndpoint, MockedEndpointData } from "../types";
3
+ import { AdminQuery } from './admin-query';
4
+ import { SchemaIntrospector } from './schema-introspection';
5
+ import type { RequestRuleData } from "../rules/requests/request-rule";
6
+ import type { WebSocketRuleData } from '../rules/websockets/websocket-rule';
7
+ import { SubscribableEvent } from '../mockttp';
8
+ /**
9
+ * This is part of Mockttp's experimental 'pluggable admin' API. This may change
10
+ * unpredictably, even in minor releases.
11
+ *
12
+ * @internal
13
+ */
14
+ export declare class MockttpAdminRequestBuilder {
15
+ private schema;
16
+ constructor(schema: SchemaIntrospector);
17
+ buildAddRequestRulesQuery(rules: Array<RequestRuleData>, reset: boolean, adminStream: stream.Duplex): AdminQuery<{
18
+ endpoints: Array<{
19
+ id: string;
20
+ explanation?: string;
21
+ }>;
22
+ }, MockedEndpoint[]>;
23
+ buildAddWebSocketRulesQuery(rules: Array<WebSocketRuleData>, reset: boolean, adminStream: stream.Duplex): AdminQuery<{
24
+ endpoints: Array<{
25
+ id: string;
26
+ explanation?: string;
27
+ }>;
28
+ }, MockedEndpoint[]>;
29
+ buildMockedEndpointsQuery(): AdminQuery<{
30
+ mockedEndpoints: MockedEndpointData[];
31
+ }, MockedEndpoint[]>;
32
+ buildPendingEndpointsQuery(): AdminQuery<{
33
+ pendingEndpoints: MockedEndpointData[];
34
+ }, MockedEndpoint[]>;
35
+ buildSubscriptionRequest<T>(event: SubscribableEvent): AdminQuery<unknown, T> | undefined;
36
+ private getEndpointDataGetter;
37
+ }
38
+ //# sourceMappingURL=mockttp-admin-request-builder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mockttp-admin-request-builder.d.ts","sourceRoot":"","sources":["../../src/client/mockttp-admin-request-builder.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,MAAM,QAAQ,CAAC;AAGjC,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAK9D,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAE5D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AACtE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,oCAAoC,CAAC;AAE5E,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AA4D/C;;;;;GAKG;AACH,qBAAa,0BAA0B;IAG/B,OAAO,CAAC,MAAM;gBAAN,MAAM,EAAE,kBAAkB;IAGtC,yBAAyB,CACrB,KAAK,EAAE,KAAK,CAAC,eAAe,CAAC,EAC7B,KAAK,EAAE,OAAO,EACd,WAAW,EAAE,MAAM,CAAC,MAAM,GAC3B,UAAU,CACT;QAAE,SAAS,EAAE,KAAK,CAAC;YAAE,EAAE,EAAE,MAAM,CAAC;YAAC,WAAW,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC,CAAA;KAAE,EAC1D,cAAc,EAAE,CACnB;IAoCD,2BAA2B,CACvB,KAAK,EAAE,KAAK,CAAC,iBAAiB,CAAC,EAC/B,KAAK,EAAE,OAAO,EACd,WAAW,EAAE,MAAM,CAAC,MAAM,GAC3B,UAAU,CACT;QAAE,SAAS,EAAE,KAAK,CAAC;YAAE,EAAE,EAAE,MAAM,CAAC;YAAC,WAAW,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC,CAAA;KAAE,EAC1D,cAAc,EAAE,CACnB;IAgCD,yBAAyB,IAAI,UAAU,CACnC;QAAE,eAAe,EAAE,kBAAkB,EAAE,CAAA;KAAE,EACzC,cAAc,EAAE,CACnB;IAuBM,0BAA0B,IAAI,UAAU,CAC3C;QAAE,gBAAgB,EAAE,kBAAkB,EAAE,CAAA;KAAE,EAC1C,cAAc,EAAE,CACnB;IAuBM,wBAAwB,CAAC,CAAC,EAAE,KAAK,EAAE,iBAAiB,GAAG,UAAU,CAAC,OAAO,EAAE,CAAC,CAAC,GAAG,SAAS;IAuRhG,OAAO,CAAC,qBAAqB,CAsCxB;CACR"}
@@ -0,0 +1,462 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.MockttpAdminRequestBuilder = void 0;
4
+ const _ = require("lodash");
5
+ const graphql_tag_1 = require("graphql-tag");
6
+ const request_utils_1 = require("../util/request-utils");
7
+ const header_utils_1 = require("../util/header-utils");
8
+ const mocked_endpoint_client_1 = require("./mocked-endpoint-client");
9
+ const rule_serialization_1 = require("../rules/rule-serialization");
10
+ function normalizeHttpMessage(message, event) {
11
+ if (message.timingEvents) {
12
+ // Timing events are serialized as raw JSON
13
+ message.timingEvents = JSON.parse(message.timingEvents);
14
+ }
15
+ else if (event !== 'tls-client-error' && event !== 'client-error') {
16
+ // For backwards compat, all except errors should have timing events if they're missing
17
+ message.timingEvents = {};
18
+ }
19
+ if (message.rawHeaders) {
20
+ message.rawHeaders = JSON.parse(message.rawHeaders);
21
+ // We use raw headers where possible to derive headers, instead of using any pre-derived
22
+ // header data, for maximum accuracy (and to avoid any need to query for both).
23
+ message.headers = (0, header_utils_1.rawHeadersToObject)(message.rawHeaders);
24
+ }
25
+ else if (message.headers) {
26
+ // Backward compat for older servers:
27
+ message.headers = JSON.parse(message.headers);
28
+ message.rawHeaders = (0, header_utils_1.objectHeadersToRaw)(message.headers);
29
+ }
30
+ if (message.rawTrailers) {
31
+ message.rawTrailers = JSON.parse(message.rawTrailers);
32
+ message.trailers = (0, header_utils_1.rawHeadersToObject)(message.rawTrailers);
33
+ }
34
+ else if (message.rawHeaders && message.body) { // HTTP events with bodies should have trailers
35
+ message.rawTrailers = [];
36
+ message.trailers = {};
37
+ }
38
+ if (message.body !== undefined) {
39
+ // Body is serialized as the raw encoded buffer in base64
40
+ message.body = (0, request_utils_1.buildBodyReader)(Buffer.from(message.body, 'base64'), message.headers);
41
+ }
42
+ // For backwards compat, all except errors should have tags if they're missing
43
+ if (!message.tags)
44
+ message.tags = [];
45
+ if (event?.startsWith('tls-')) {
46
+ // TLS passthrough & error events should have raw JSON socket metadata:
47
+ if (message.tlsMetadata) {
48
+ message.tlsMetadata = JSON.parse(message.tlsMetadata);
49
+ }
50
+ else {
51
+ // For old servers, just use empty metadata:
52
+ message.tlsMetadata = {};
53
+ }
54
+ }
55
+ }
56
+ function normalizeWebSocketMessage(message) {
57
+ // Timing events are serialized as raw JSON
58
+ message.timingEvents = JSON.parse(message.timingEvents);
59
+ // Content is serialized as the raw encoded buffer in base64
60
+ message.content = Buffer.from(message.content, 'base64');
61
+ }
62
+ /**
63
+ * This is part of Mockttp's experimental 'pluggable admin' API. This may change
64
+ * unpredictably, even in minor releases.
65
+ *
66
+ * @internal
67
+ */
68
+ class MockttpAdminRequestBuilder {
69
+ constructor(schema) {
70
+ this.schema = schema;
71
+ this.getEndpointDataGetter = (adminClient, ruleId) => async () => {
72
+ let result = await adminClient.sendQuery({
73
+ query: (0, graphql_tag_1.default) `
74
+ query GetEndpointData($id: ID!) {
75
+ mockedEndpoint(id: $id) {
76
+ seenRequests {
77
+ id,
78
+ protocol,
79
+ method,
80
+ url,
81
+ path,
82
+ hostname
83
+
84
+ ${this.schema.typeHasField('Request', 'rawHeaders')
85
+ ? 'rawHeaders'
86
+ : 'headers'}
87
+
88
+ body,
89
+ ${this.schema.asOptionalField('Request', 'timingEvents')}
90
+ ${this.schema.asOptionalField('Request', 'httpVersion')}
91
+ }
92
+ ${this.schema.asOptionalField('MockedEndpoint', 'isPending')}
93
+ }
94
+ }
95
+ `,
96
+ variables: { id: ruleId }
97
+ });
98
+ const mockedEndpoint = result.mockedEndpoint;
99
+ if (!mockedEndpoint)
100
+ return null;
101
+ mockedEndpoint.seenRequests.forEach(req => normalizeHttpMessage(req));
102
+ return mockedEndpoint;
103
+ };
104
+ }
105
+ buildAddRequestRulesQuery(rules, reset, adminStream) {
106
+ const requestName = (reset ? 'Set' : 'Add') + 'Rules';
107
+ const mutationName = (reset ? 'set' : 'add') + 'Rules';
108
+ const serializedRules = rules.map((rule) => {
109
+ const serializedRule = (0, rule_serialization_1.serializeRuleData)(rule, adminStream);
110
+ if (!this.schema.typeHasInputField('MockRule', 'id')) {
111
+ delete serializedRule.id;
112
+ }
113
+ return serializedRule;
114
+ });
115
+ return {
116
+ query: (0, graphql_tag_1.default) `
117
+ mutation ${requestName}($newRules: [MockRule!]!) {
118
+ endpoints: ${mutationName}(input: $newRules) {
119
+ id,
120
+ ${this.schema.asOptionalField('MockedEndpoint', 'explanation')}
121
+ }
122
+ }
123
+ `,
124
+ variables: {
125
+ newRules: serializedRules
126
+ },
127
+ transformResponse: (response, { adminClient }) => {
128
+ return response.endpoints.map(({ id, explanation }) => new mocked_endpoint_client_1.MockedEndpointClient(id, explanation, this.getEndpointDataGetter(adminClient, id)));
129
+ }
130
+ };
131
+ }
132
+ buildAddWebSocketRulesQuery(rules, reset, adminStream) {
133
+ // Seperate and simpler than buildAddRequestRulesQuery, because it doesn't have to
134
+ // deal with backward compatibility.
135
+ const requestName = (reset ? 'Set' : 'Add') + 'WebSocketRules';
136
+ const mutationName = (reset ? 'set' : 'add') + 'WebSocketRules';
137
+ const serializedRules = rules.map((rule) => (0, rule_serialization_1.serializeRuleData)(rule, adminStream));
138
+ return {
139
+ query: (0, graphql_tag_1.default) `
140
+ mutation ${requestName}($newRules: [WebSocketMockRule!]!) {
141
+ endpoints: ${mutationName}(input: $newRules) {
142
+ id,
143
+ explanation
144
+ }
145
+ }
146
+ `,
147
+ variables: {
148
+ newRules: serializedRules
149
+ },
150
+ transformResponse: (response, { adminClient }) => {
151
+ return response.endpoints.map(({ id, explanation }) => new mocked_endpoint_client_1.MockedEndpointClient(id, explanation, this.getEndpointDataGetter(adminClient, id)));
152
+ }
153
+ };
154
+ }
155
+ ;
156
+ buildMockedEndpointsQuery() {
157
+ return {
158
+ query: (0, graphql_tag_1.default) `
159
+ query GetAllEndpointData {
160
+ mockedEndpoints {
161
+ id,
162
+ ${this.schema.asOptionalField('MockedEndpoint', 'explanation')}
163
+ }
164
+ }
165
+ `,
166
+ transformResponse: (response, { adminClient }) => {
167
+ const mockedEndpoints = response.mockedEndpoints;
168
+ return mockedEndpoints.map(({ id, explanation }) => new mocked_endpoint_client_1.MockedEndpointClient(id, explanation, this.getEndpointDataGetter(adminClient, id)));
169
+ }
170
+ };
171
+ }
172
+ buildPendingEndpointsQuery() {
173
+ return {
174
+ query: (0, graphql_tag_1.default) `
175
+ query GetPendingEndpointData {
176
+ pendingEndpoints {
177
+ id,
178
+ explanation
179
+ }
180
+ }
181
+ `,
182
+ transformResponse: (response, { adminClient }) => {
183
+ const pendingEndpoints = response.pendingEndpoints;
184
+ return pendingEndpoints.map(({ id, explanation }) => new mocked_endpoint_client_1.MockedEndpointClient(id, explanation, this.getEndpointDataGetter(adminClient, id)));
185
+ }
186
+ };
187
+ }
188
+ buildSubscriptionRequest(event) {
189
+ // Note the asOptionalField checks - these are a quick hack for backward compatibility,
190
+ // introspecting the server schema to avoid requesting fields that don't exist on old servers.
191
+ const query = {
192
+ 'request-initiated': (0, graphql_tag_1.default) `subscription OnRequestInitiated {
193
+ requestInitiated {
194
+ id
195
+ protocol
196
+ method
197
+ url
198
+ path
199
+ ${this.schema.asOptionalField('InitiatedRequest', 'remoteIpAddress')}
200
+ ${this.schema.asOptionalField('InitiatedRequest', 'remotePort')}
201
+ hostname
202
+
203
+ ${this.schema.typeHasField('InitiatedRequest', 'rawHeaders')
204
+ ? 'rawHeaders'
205
+ : 'headers'}
206
+ timingEvents
207
+ httpVersion
208
+ ${this.schema.asOptionalField('InitiatedRequest', 'tags')}
209
+ }
210
+ }`,
211
+ request: (0, graphql_tag_1.default) `subscription OnRequest {
212
+ requestReceived {
213
+ id
214
+ ${this.schema.asOptionalField('Request', 'matchedRuleId')}
215
+ protocol
216
+ method
217
+ url
218
+ path
219
+ ${this.schema.asOptionalField('Request', 'remoteIpAddress')}
220
+ ${this.schema.asOptionalField('Request', 'remotePort')}
221
+ hostname
222
+
223
+ ${this.schema.typeHasField('Request', 'rawHeaders')
224
+ ? 'rawHeaders'
225
+ : 'headers'}
226
+
227
+ body
228
+ ${this.schema.asOptionalField('Request', 'rawTrailers')}
229
+
230
+ ${this.schema.asOptionalField('Request', 'timingEvents')}
231
+ ${this.schema.asOptionalField('Request', 'httpVersion')}
232
+ ${this.schema.asOptionalField('Request', 'tags')}
233
+ }
234
+ }`,
235
+ response: (0, graphql_tag_1.default) `subscription OnResponse {
236
+ responseCompleted {
237
+ id
238
+ statusCode
239
+ statusMessage
240
+
241
+ ${this.schema.typeHasField('Response', 'rawHeaders')
242
+ ? 'rawHeaders'
243
+ : 'headers'}
244
+
245
+ body
246
+ ${this.schema.asOptionalField('Response', 'rawTrailers')}
247
+
248
+ ${this.schema.asOptionalField('Response', 'timingEvents')}
249
+ ${this.schema.asOptionalField('Response', 'tags')}
250
+ }
251
+ }`,
252
+ 'websocket-request': (0, graphql_tag_1.default) `subscription OnWebSocketRequest {
253
+ webSocketRequest {
254
+ id
255
+ matchedRuleId
256
+ protocol
257
+ method
258
+ url
259
+ path
260
+ remoteIpAddress
261
+ remotePort
262
+ hostname
263
+
264
+ rawHeaders
265
+ body
266
+ ${this.schema.asOptionalField('Request', 'rawTrailers')}
267
+
268
+ timingEvents
269
+ httpVersion
270
+ tags
271
+ }
272
+ }`,
273
+ 'websocket-accepted': (0, graphql_tag_1.default) `subscription OnWebSocketAccepted {
274
+ webSocketAccepted {
275
+ id
276
+ statusCode
277
+ statusMessage
278
+
279
+ rawHeaders
280
+ body
281
+ ${this.schema.asOptionalField('Response', 'rawTrailers')}
282
+
283
+ timingEvents
284
+ tags
285
+ }
286
+ }`,
287
+ 'websocket-message-received': (0, graphql_tag_1.default) `subscription OnWebSocketMessageReceived {
288
+ webSocketMessageReceived {
289
+ streamId
290
+ direction
291
+ content
292
+ isBinary
293
+ eventTimestamp
294
+
295
+ timingEvents
296
+ tags
297
+ }
298
+ }`,
299
+ 'websocket-message-sent': (0, graphql_tag_1.default) `subscription OnWebSocketMessageSent {
300
+ webSocketMessageSent {
301
+ streamId
302
+ direction
303
+ content
304
+ isBinary
305
+ eventTimestamp
306
+
307
+ timingEvents
308
+ tags
309
+ }
310
+ }`,
311
+ 'websocket-close': (0, graphql_tag_1.default) `subscription OnWebSocketClose {
312
+ webSocketClose {
313
+ streamId
314
+
315
+ closeCode
316
+ closeReason
317
+
318
+ timingEvents
319
+ tags
320
+ }
321
+ }`,
322
+ abort: (0, graphql_tag_1.default) `subscription OnAbort {
323
+ requestAborted {
324
+ id,
325
+ protocol,
326
+ method,
327
+ url,
328
+ path,
329
+ hostname,
330
+
331
+ ${this.schema.typeHasField('Request', 'rawHeaders')
332
+ ? 'rawHeaders'
333
+ : 'headers'}
334
+
335
+ ${this.schema.asOptionalField('Request', 'timingEvents')}
336
+ ${this.schema.asOptionalField('Request', 'tags')}
337
+ ${this.schema.asOptionalField('AbortedRequest', 'error')}
338
+ }
339
+ }`,
340
+ 'tls-passthrough-opened': (0, graphql_tag_1.default) `subscription OnTlsPassthroughOpened {
341
+ tlsPassthroughOpened {
342
+ id
343
+ upstreamPort
344
+
345
+ hostname
346
+ remoteIpAddress
347
+ remotePort
348
+ tags
349
+ timingEvents
350
+ ${this.schema.asOptionalField('TlsPassthroughEvent', 'tlsMetadata')}
351
+ }
352
+ }`,
353
+ 'tls-passthrough-closed': (0, graphql_tag_1.default) `subscription OnTlsPassthroughClosed {
354
+ tlsPassthroughClosed {
355
+ id
356
+ upstreamPort
357
+
358
+ hostname
359
+ remoteIpAddress
360
+ remotePort
361
+ tags
362
+ timingEvents
363
+ ${this.schema.asOptionalField('TlsPassthroughEvent', 'tlsMetadata')}
364
+ }
365
+ }`,
366
+ 'tls-client-error': (0, graphql_tag_1.default) `subscription OnTlsClientError {
367
+ failedTlsRequest {
368
+ failureCause
369
+ hostname
370
+ remoteIpAddress
371
+ ${this.schema.asOptionalField(['TlsHandshakeFailure', 'TlsRequest'], 'remotePort')}
372
+ ${this.schema.asOptionalField(['TlsHandshakeFailure', 'TlsRequest'], 'tags')}
373
+ ${this.schema.asOptionalField(['TlsHandshakeFailure', 'TlsRequest'], 'timingEvents')}
374
+ ${this.schema.asOptionalField(['TlsHandshakeFailure', 'TlsRequest'], 'tlsMetadata')}
375
+ }
376
+ }`,
377
+ 'client-error': (0, graphql_tag_1.default) `subscription OnClientError {
378
+ failedClientRequest {
379
+ errorCode
380
+ request {
381
+ id
382
+ timingEvents
383
+ tags
384
+ protocol
385
+ httpVersion
386
+ method
387
+ url
388
+ path
389
+
390
+ ${this.schema.typeHasField('ClientErrorRequest', 'rawHeaders')
391
+ ? 'rawHeaders'
392
+ : 'headers'}
393
+
394
+ ${this.schema.asOptionalField('ClientErrorRequest', 'remoteIpAddress')}
395
+ ${this.schema.asOptionalField('ClientErrorRequest', 'remotePort')}
396
+ }
397
+ response {
398
+ id
399
+ timingEvents
400
+ tags
401
+ statusCode
402
+ statusMessage
403
+
404
+ ${this.schema.typeHasField('Response', 'rawHeaders')
405
+ ? 'rawHeaders'
406
+ : 'headers'}
407
+
408
+ body
409
+ ${this.schema.asOptionalField('Response', 'rawTrailers')}
410
+ }
411
+ }
412
+ }`,
413
+ 'rule-event': (0, graphql_tag_1.default) `subscription OnRuleEvent {
414
+ ruleEvent {
415
+ requestId
416
+ ruleId
417
+ eventType
418
+ eventData
419
+ }
420
+ }`
421
+ }[event];
422
+ if (!query)
423
+ return; // Unrecognized event, we can't subscribe to this.
424
+ return {
425
+ query,
426
+ transformResponse: (data) => {
427
+ if (event === 'client-error') {
428
+ data.request = _.mapValues(data.request, (v) =>
429
+ // Normalize missing values to undefined to match the local result
430
+ v === null ? undefined : v);
431
+ normalizeHttpMessage(data.request, event);
432
+ if (data.response) {
433
+ normalizeHttpMessage(data.response, event);
434
+ }
435
+ else {
436
+ data.response = 'aborted';
437
+ }
438
+ }
439
+ else if (event === 'websocket-message-received' || event === 'websocket-message-sent') {
440
+ normalizeWebSocketMessage(data);
441
+ }
442
+ else if (event === 'abort') {
443
+ normalizeHttpMessage(data, event);
444
+ data.error = data.error ? JSON.parse(data.error) : undefined;
445
+ }
446
+ else if (event === 'rule-event') {
447
+ const { eventData } = data;
448
+ // Events may include raw body data buffers, serialized as base64:
449
+ if (eventData.rawBody !== undefined) {
450
+ eventData.rawBody = Buffer.from(eventData.rawBody, 'base64');
451
+ }
452
+ }
453
+ else {
454
+ normalizeHttpMessage(data, event);
455
+ }
456
+ return data;
457
+ }
458
+ };
459
+ }
460
+ }
461
+ exports.MockttpAdminRequestBuilder = MockttpAdminRequestBuilder;
462
+ //# sourceMappingURL=mockttp-admin-request-builder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mockttp-admin-request-builder.js","sourceRoot":"","sources":["../../src/client/mockttp-admin-request-builder.ts"],"names":[],"mappings":"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"}