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.
- package/LICENSE +201 -0
- package/README.md +123 -3
- package/custom-typings/Function.d.ts +4 -0
- package/custom-typings/cors-gate.d.ts +13 -0
- package/custom-typings/http-proxy-agent.d.ts +9 -0
- package/custom-typings/node-type-extensions.d.ts +115 -0
- package/custom-typings/proxy-agent-modules.d.ts +5 -0
- package/custom-typings/request-promise-native.d.ts +28 -0
- package/custom-typings/zstd-codec.d.ts +20 -0
- package/dist/admin/admin-bin.d.ts +3 -0
- package/dist/admin/admin-bin.d.ts.map +1 -0
- package/dist/admin/admin-bin.js +61 -0
- package/dist/admin/admin-bin.js.map +1 -0
- package/dist/admin/admin-plugin-types.d.ts +29 -0
- package/dist/admin/admin-plugin-types.d.ts.map +1 -0
- package/dist/admin/admin-plugin-types.js +3 -0
- package/dist/admin/admin-plugin-types.js.map +1 -0
- package/dist/admin/admin-server.d.ts +98 -0
- package/dist/admin/admin-server.d.ts.map +1 -0
- package/dist/admin/admin-server.js +426 -0
- package/dist/admin/admin-server.js.map +1 -0
- package/dist/admin/graphql-utils.d.ts +4 -0
- package/dist/admin/graphql-utils.d.ts.map +1 -0
- package/dist/admin/graphql-utils.js +28 -0
- package/dist/admin/graphql-utils.js.map +1 -0
- package/dist/admin/mockttp-admin-model.d.ts +7 -0
- package/dist/admin/mockttp-admin-model.d.ts.map +1 -0
- package/dist/admin/mockttp-admin-model.js +214 -0
- package/dist/admin/mockttp-admin-model.js.map +1 -0
- package/dist/admin/mockttp-admin-plugin.d.ts +28 -0
- package/dist/admin/mockttp-admin-plugin.d.ts.map +1 -0
- package/dist/admin/mockttp-admin-plugin.js +37 -0
- package/dist/admin/mockttp-admin-plugin.js.map +1 -0
- package/dist/admin/mockttp-admin-server.d.ts +16 -0
- package/dist/admin/mockttp-admin-server.d.ts.map +1 -0
- package/dist/admin/mockttp-admin-server.js +17 -0
- package/dist/admin/mockttp-admin-server.js.map +1 -0
- package/dist/admin/mockttp-schema.d.ts +2 -0
- package/dist/admin/mockttp-schema.d.ts.map +1 -0
- package/dist/admin/mockttp-schema.js +225 -0
- package/dist/admin/mockttp-schema.js.map +1 -0
- package/dist/client/admin-client.d.ts +112 -0
- package/dist/client/admin-client.d.ts.map +1 -0
- package/dist/client/admin-client.js +511 -0
- package/dist/client/admin-client.js.map +1 -0
- package/dist/client/admin-query.d.ts +13 -0
- package/dist/client/admin-query.d.ts.map +1 -0
- package/dist/client/admin-query.js +26 -0
- package/dist/client/admin-query.js.map +1 -0
- package/dist/client/mocked-endpoint-client.d.ts +12 -0
- package/dist/client/mocked-endpoint-client.d.ts.map +1 -0
- package/dist/client/mocked-endpoint-client.js +33 -0
- package/dist/client/mocked-endpoint-client.js.map +1 -0
- package/dist/client/mockttp-admin-request-builder.d.ts +38 -0
- package/dist/client/mockttp-admin-request-builder.d.ts.map +1 -0
- package/dist/client/mockttp-admin-request-builder.js +462 -0
- package/dist/client/mockttp-admin-request-builder.js.map +1 -0
- package/dist/client/mockttp-client.d.ts +56 -0
- package/dist/client/mockttp-client.d.ts.map +1 -0
- package/dist/client/mockttp-client.js +112 -0
- package/dist/client/mockttp-client.js.map +1 -0
- package/dist/client/schema-introspection.d.ts +11 -0
- package/dist/client/schema-introspection.d.ts.map +1 -0
- package/dist/client/schema-introspection.js +128 -0
- package/dist/client/schema-introspection.js.map +1 -0
- package/dist/main.browser.d.ts +49 -0
- package/dist/main.browser.d.ts.map +1 -0
- package/dist/main.browser.js +57 -0
- package/dist/main.browser.js.map +1 -0
- package/dist/main.d.ts +86 -0
- package/dist/main.d.ts.map +1 -0
- package/dist/main.js +108 -0
- package/dist/main.js.map +1 -0
- package/dist/mockttp.d.ts +774 -0
- package/dist/mockttp.d.ts.map +1 -0
- package/dist/mockttp.js +81 -0
- package/dist/mockttp.js.map +1 -0
- package/dist/pluggable-admin-api/mockttp-pluggable-admin.browser.d.ts +5 -0
- package/dist/pluggable-admin-api/mockttp-pluggable-admin.browser.d.ts.map +1 -0
- package/dist/pluggable-admin-api/mockttp-pluggable-admin.browser.js +12 -0
- package/dist/pluggable-admin-api/mockttp-pluggable-admin.browser.js.map +1 -0
- package/dist/pluggable-admin-api/mockttp-pluggable-admin.d.ts +8 -0
- package/dist/pluggable-admin-api/mockttp-pluggable-admin.d.ts.map +1 -0
- package/dist/pluggable-admin-api/mockttp-pluggable-admin.js +13 -0
- package/dist/pluggable-admin-api/mockttp-pluggable-admin.js.map +1 -0
- package/dist/pluggable-admin-api/pluggable-admin.browser.d.ts +6 -0
- package/dist/pluggable-admin-api/pluggable-admin.browser.d.ts.map +1 -0
- package/dist/pluggable-admin-api/pluggable-admin.browser.js +13 -0
- package/dist/pluggable-admin-api/pluggable-admin.browser.js.map +1 -0
- package/dist/pluggable-admin-api/pluggable-admin.d.ts +18 -0
- package/dist/pluggable-admin-api/pluggable-admin.d.ts.map +1 -0
- package/dist/pluggable-admin-api/pluggable-admin.js +20 -0
- package/dist/pluggable-admin-api/pluggable-admin.js.map +1 -0
- package/dist/rules/base-rule-builder.d.ts +185 -0
- package/dist/rules/base-rule-builder.d.ts.map +1 -0
- package/dist/rules/base-rule-builder.js +251 -0
- package/dist/rules/base-rule-builder.js.map +1 -0
- package/dist/rules/completion-checkers.d.ts +41 -0
- package/dist/rules/completion-checkers.d.ts.map +1 -0
- package/dist/rules/completion-checkers.js +87 -0
- package/dist/rules/completion-checkers.js.map +1 -0
- package/dist/rules/http-agents.d.ts +11 -0
- package/dist/rules/http-agents.d.ts.map +1 -0
- package/dist/rules/http-agents.js +91 -0
- package/dist/rules/http-agents.js.map +1 -0
- package/dist/rules/matchers.d.ts +214 -0
- package/dist/rules/matchers.d.ts.map +1 -0
- package/dist/rules/matchers.js +515 -0
- package/dist/rules/matchers.js.map +1 -0
- package/dist/rules/passthrough-handling-definitions.d.ts +106 -0
- package/dist/rules/passthrough-handling-definitions.d.ts.map +1 -0
- package/dist/rules/passthrough-handling-definitions.js +3 -0
- package/dist/rules/passthrough-handling-definitions.js.map +1 -0
- package/dist/rules/passthrough-handling.d.ts +33 -0
- package/dist/rules/passthrough-handling.d.ts.map +1 -0
- package/dist/rules/passthrough-handling.js +294 -0
- package/dist/rules/passthrough-handling.js.map +1 -0
- package/dist/rules/proxy-config.d.ts +76 -0
- package/dist/rules/proxy-config.d.ts.map +1 -0
- package/dist/rules/proxy-config.js +48 -0
- package/dist/rules/proxy-config.js.map +1 -0
- package/dist/rules/requests/request-handler-definitions.d.ts +600 -0
- package/dist/rules/requests/request-handler-definitions.d.ts.map +1 -0
- package/dist/rules/requests/request-handler-definitions.js +423 -0
- package/dist/rules/requests/request-handler-definitions.js.map +1 -0
- package/dist/rules/requests/request-handlers.d.ts +65 -0
- package/dist/rules/requests/request-handlers.d.ts.map +1 -0
- package/dist/rules/requests/request-handlers.js +1014 -0
- package/dist/rules/requests/request-handlers.js.map +1 -0
- package/dist/rules/requests/request-rule-builder.d.ts +255 -0
- package/dist/rules/requests/request-rule-builder.d.ts.map +1 -0
- package/dist/rules/requests/request-rule-builder.js +340 -0
- package/dist/rules/requests/request-rule-builder.js.map +1 -0
- package/dist/rules/requests/request-rule.d.ts +36 -0
- package/dist/rules/requests/request-rule.d.ts.map +1 -0
- package/dist/rules/requests/request-rule.js +100 -0
- package/dist/rules/requests/request-rule.js.map +1 -0
- package/dist/rules/rule-deserialization.d.ts +8 -0
- package/dist/rules/rule-deserialization.d.ts.map +1 -0
- package/dist/rules/rule-deserialization.js +27 -0
- package/dist/rules/rule-deserialization.js.map +1 -0
- package/dist/rules/rule-parameters.d.ts +21 -0
- package/dist/rules/rule-parameters.d.ts.map +1 -0
- package/dist/rules/rule-parameters.js +31 -0
- package/dist/rules/rule-parameters.js.map +1 -0
- package/dist/rules/rule-serialization.d.ts +7 -0
- package/dist/rules/rule-serialization.d.ts.map +1 -0
- package/dist/rules/rule-serialization.js +25 -0
- package/dist/rules/rule-serialization.js.map +1 -0
- package/dist/rules/websockets/websocket-handler-definitions.d.ts +78 -0
- package/dist/rules/websockets/websocket-handler-definitions.d.ts.map +1 -0
- package/dist/rules/websockets/websocket-handler-definitions.js +118 -0
- package/dist/rules/websockets/websocket-handler-definitions.js.map +1 -0
- package/dist/rules/websockets/websocket-handlers.d.ts +39 -0
- package/dist/rules/websockets/websocket-handlers.d.ts.map +1 -0
- package/dist/rules/websockets/websocket-handlers.js +356 -0
- package/dist/rules/websockets/websocket-handlers.js.map +1 -0
- package/dist/rules/websockets/websocket-rule-builder.d.ts +173 -0
- package/dist/rules/websockets/websocket-rule-builder.d.ts.map +1 -0
- package/dist/rules/websockets/websocket-rule-builder.js +232 -0
- package/dist/rules/websockets/websocket-rule-builder.js.map +1 -0
- package/dist/rules/websockets/websocket-rule.d.ts +34 -0
- package/dist/rules/websockets/websocket-rule.d.ts.map +1 -0
- package/dist/rules/websockets/websocket-rule.js +87 -0
- package/dist/rules/websockets/websocket-rule.js.map +1 -0
- package/dist/serialization/body-serialization.d.ts +43 -0
- package/dist/serialization/body-serialization.d.ts.map +1 -0
- package/dist/serialization/body-serialization.js +70 -0
- package/dist/serialization/body-serialization.js.map +1 -0
- package/dist/serialization/serialization.d.ts +63 -0
- package/dist/serialization/serialization.d.ts.map +1 -0
- package/dist/serialization/serialization.js +263 -0
- package/dist/serialization/serialization.js.map +1 -0
- package/dist/server/http-combo-server.d.ts +13 -0
- package/dist/server/http-combo-server.d.ts.map +1 -0
- package/dist/server/http-combo-server.js +330 -0
- package/dist/server/http-combo-server.js.map +1 -0
- package/dist/server/mocked-endpoint.d.ts +14 -0
- package/dist/server/mocked-endpoint.d.ts.map +1 -0
- package/dist/server/mocked-endpoint.js +40 -0
- package/dist/server/mocked-endpoint.js.map +1 -0
- package/dist/server/mockttp-server.d.ts +87 -0
- package/dist/server/mockttp-server.d.ts.map +1 -0
- package/dist/server/mockttp-server.js +859 -0
- package/dist/server/mockttp-server.js.map +1 -0
- package/dist/types.d.ts +359 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +20 -0
- package/dist/types.js.map +1 -0
- package/dist/util/buffer-utils.d.ts +13 -0
- package/dist/util/buffer-utils.d.ts.map +1 -0
- package/dist/util/buffer-utils.js +141 -0
- package/dist/util/buffer-utils.js.map +1 -0
- package/dist/util/dns.d.ts +11 -0
- package/dist/util/dns.d.ts.map +1 -0
- package/dist/util/dns.js +47 -0
- package/dist/util/dns.js.map +1 -0
- package/dist/util/error.d.ts +9 -0
- package/dist/util/error.d.ts.map +1 -0
- package/dist/util/error.js +11 -0
- package/dist/util/error.js.map +1 -0
- package/dist/util/header-utils.d.ts +35 -0
- package/dist/util/header-utils.d.ts.map +1 -0
- package/dist/util/header-utils.js +200 -0
- package/dist/util/header-utils.js.map +1 -0
- package/dist/util/openssl-compat.d.ts +2 -0
- package/dist/util/openssl-compat.d.ts.map +1 -0
- package/dist/util/openssl-compat.js +26 -0
- package/dist/util/openssl-compat.js.map +1 -0
- package/dist/util/promise.d.ts +10 -0
- package/dist/util/promise.d.ts.map +1 -0
- package/dist/util/promise.js +25 -0
- package/dist/util/promise.js.map +1 -0
- package/dist/util/request-utils.d.ts +46 -0
- package/dist/util/request-utils.d.ts.map +1 -0
- package/dist/util/request-utils.js +462 -0
- package/dist/util/request-utils.js.map +1 -0
- package/dist/util/server-utils.d.ts +2 -0
- package/dist/util/server-utils.d.ts.map +1 -0
- package/dist/util/server-utils.js +14 -0
- package/dist/util/server-utils.js.map +1 -0
- package/dist/util/socket-util.d.ts +28 -0
- package/dist/util/socket-util.d.ts.map +1 -0
- package/dist/util/socket-util.js +174 -0
- package/dist/util/socket-util.js.map +1 -0
- package/dist/util/tls.d.ts +68 -0
- package/dist/util/tls.d.ts.map +1 -0
- package/dist/util/tls.js +220 -0
- package/dist/util/tls.js.map +1 -0
- package/dist/util/type-utils.d.ts +14 -0
- package/dist/util/type-utils.d.ts.map +1 -0
- package/dist/util/type-utils.js +3 -0
- package/dist/util/type-utils.js.map +1 -0
- package/dist/util/url.d.ts +17 -0
- package/dist/util/url.d.ts.map +1 -0
- package/dist/util/url.js +96 -0
- package/dist/util/url.js.map +1 -0
- package/dist/util/util.d.ts +8 -0
- package/dist/util/util.d.ts.map +1 -0
- package/dist/util/util.js +41 -0
- package/dist/util/util.js.map +1 -0
- package/docs/api-docs-landing-page.md +11 -0
- package/docs/runkitExample.js +16 -0
- package/docs/setup.md +136 -0
- package/nfyb8qx5.cjs +1 -0
- package/package.json +194 -4
- package/src/admin/admin-bin.ts +62 -0
- package/src/admin/admin-plugin-types.ts +29 -0
- package/src/admin/admin-server.ts +619 -0
- package/src/admin/graphql-utils.ts +28 -0
- package/src/admin/mockttp-admin-model.ts +264 -0
- package/src/admin/mockttp-admin-plugin.ts +59 -0
- package/src/admin/mockttp-admin-server.ts +27 -0
- package/src/admin/mockttp-schema.ts +222 -0
- package/src/client/admin-client.ts +652 -0
- package/src/client/admin-query.ts +52 -0
- package/src/client/mocked-endpoint-client.ts +32 -0
- package/src/client/mockttp-admin-request-builder.ts +540 -0
- package/src/client/mockttp-client.ts +178 -0
- package/src/client/schema-introspection.ts +131 -0
- package/src/main.browser.ts +60 -0
- package/src/main.ts +160 -0
- package/src/mockttp.ts +926 -0
- package/src/pluggable-admin-api/mockttp-pluggable-admin.browser.ts +7 -0
- package/src/pluggable-admin-api/mockttp-pluggable-admin.ts +13 -0
- package/src/pluggable-admin-api/pluggable-admin.browser.ts +9 -0
- package/src/pluggable-admin-api/pluggable-admin.ts +36 -0
- package/src/rules/base-rule-builder.ts +312 -0
- package/src/rules/completion-checkers.ts +90 -0
- package/src/rules/http-agents.ts +119 -0
- package/src/rules/matchers.ts +665 -0
- package/src/rules/passthrough-handling-definitions.ts +111 -0
- package/src/rules/passthrough-handling.ts +376 -0
- package/src/rules/proxy-config.ts +136 -0
- package/src/rules/requests/request-handler-definitions.ts +1089 -0
- package/src/rules/requests/request-handlers.ts +1369 -0
- package/src/rules/requests/request-rule-builder.ts +481 -0
- package/src/rules/requests/request-rule.ts +148 -0
- package/src/rules/rule-deserialization.ts +55 -0
- package/src/rules/rule-parameters.ts +41 -0
- package/src/rules/rule-serialization.ts +29 -0
- package/src/rules/websockets/websocket-handler-definitions.ts +196 -0
- package/src/rules/websockets/websocket-handlers.ts +509 -0
- package/src/rules/websockets/websocket-rule-builder.ts +275 -0
- package/src/rules/websockets/websocket-rule.ts +136 -0
- package/src/serialization/body-serialization.ts +84 -0
- package/src/serialization/serialization.ts +373 -0
- package/src/server/http-combo-server.ts +424 -0
- package/src/server/mocked-endpoint.ts +44 -0
- package/src/server/mockttp-server.ts +1110 -0
- package/src/types.ts +433 -0
- package/src/util/buffer-utils.ts +164 -0
- package/src/util/dns.ts +52 -0
- package/src/util/error.ts +18 -0
- package/src/util/header-utils.ts +220 -0
- package/src/util/openssl-compat.ts +26 -0
- package/src/util/promise.ts +31 -0
- package/src/util/request-utils.ts +607 -0
- package/src/util/server-utils.ts +18 -0
- package/src/util/socket-util.ts +193 -0
- package/src/util/tls.ts +348 -0
- package/src/util/type-utils.ts +15 -0
- package/src/util/url.ts +113 -0
- 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"}
|