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,178 @@
|
|
|
1
|
+
import _ = require('lodash');
|
|
2
|
+
|
|
3
|
+
import { MockedEndpoint } from "../types";
|
|
4
|
+
import { Mockttp, AbstractMockttp, MockttpOptions, PortRange, SubscribableEvent } from "../mockttp";
|
|
5
|
+
|
|
6
|
+
import type { RequestRuleData } from "../rules/requests/request-rule";
|
|
7
|
+
import type { WebSocketRuleData } from '../rules/websockets/websocket-rule';
|
|
8
|
+
|
|
9
|
+
import { AdminClient, AdminClientEvent } from './admin-client';
|
|
10
|
+
import { MockttpAdminPlugin } from '../admin/mockttp-admin-plugin';
|
|
11
|
+
import { MockttpAdminRequestBuilder } from './mockttp-admin-request-builder';
|
|
12
|
+
|
|
13
|
+
export interface MockttpClientOptions extends MockttpOptions {
|
|
14
|
+
/**
|
|
15
|
+
* The full URL to use to connect to a Mockttp admin server when using a
|
|
16
|
+
* remote (or local but browser) client.
|
|
17
|
+
*
|
|
18
|
+
* When using a local server, this option is ignored.
|
|
19
|
+
*/
|
|
20
|
+
adminServerUrl?: string;
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* Options to include on all client requests, e.g. to add extra
|
|
24
|
+
* headers for authentication.
|
|
25
|
+
*/
|
|
26
|
+
client?: {
|
|
27
|
+
headers?: { [key: string]: string };
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
export type MockttpClientEvent = `admin-client:${AdminClientEvent}`;
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* A Mockttp implementation, controlling a remote Mockttp admin server.
|
|
35
|
+
*
|
|
36
|
+
* A MockttpClient supports the exact same Mockttp API as MockttpServer, but rather
|
|
37
|
+
* than directly using Node.js APIs to start a mock server and rewrite traffic, it
|
|
38
|
+
* makes calls to a remote admin server to start a mock server and rewrite traffic
|
|
39
|
+
* there. This is useful to allow proxy configuration from inside browser tests, and
|
|
40
|
+
* to allow creating mock proxies that run on remote machines.
|
|
41
|
+
*/
|
|
42
|
+
export class MockttpClient extends AbstractMockttp implements Mockttp {
|
|
43
|
+
|
|
44
|
+
private mockServerOptions: MockttpOptions;
|
|
45
|
+
|
|
46
|
+
private adminClient: AdminClient<{ http: MockttpAdminPlugin }>;
|
|
47
|
+
private requestBuilder: MockttpAdminRequestBuilder | undefined; // Set once server has started.
|
|
48
|
+
|
|
49
|
+
constructor(options: MockttpClientOptions = {}) {
|
|
50
|
+
super(_.defaults(options, {
|
|
51
|
+
// Browser clients generally want cors enabled. For other clients, it doesn't hurt.
|
|
52
|
+
// TODO: Maybe detect whether we're in a browser in future
|
|
53
|
+
cors: true,
|
|
54
|
+
}));
|
|
55
|
+
|
|
56
|
+
this.mockServerOptions = options;
|
|
57
|
+
|
|
58
|
+
this.adminClient = new AdminClient({
|
|
59
|
+
adminServerUrl: options.adminServerUrl,
|
|
60
|
+
requestOptions: options.client
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
enableDebug(): Promise<void> {
|
|
65
|
+
return this.adminClient.enableDebug();
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
reset = (): Promise<void> => {
|
|
69
|
+
return this.adminClient.reset();
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
get url(): string {
|
|
73
|
+
return this.adminClient.metadata!.http.mockRoot;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
get port(): number {
|
|
77
|
+
return this.adminClient.metadata!.http.port;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
async start(port?: number | PortRange) {
|
|
81
|
+
await this.adminClient.start({
|
|
82
|
+
http: {
|
|
83
|
+
port,
|
|
84
|
+
options: this.mockServerOptions
|
|
85
|
+
}
|
|
86
|
+
});
|
|
87
|
+
|
|
88
|
+
this.requestBuilder = new MockttpAdminRequestBuilder(this.adminClient.schema);
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
stop() {
|
|
92
|
+
return this.adminClient.stop();
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
public addRequestRules = async (...rules: RequestRuleData[]): Promise<MockedEndpoint[]> => {
|
|
96
|
+
return this._addRequestRules(rules, false);
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
public setRequestRules = async (...rules: RequestRuleData[]): Promise<MockedEndpoint[]> => {
|
|
100
|
+
return this._addRequestRules(rules, true);
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
public addWebSocketRules = async (...rules: WebSocketRuleData[]): Promise<MockedEndpoint[]> => {
|
|
104
|
+
return this._addWsRules(rules, false);
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
public setWebSocketRules = async (...rules: WebSocketRuleData[]): Promise<MockedEndpoint[]> => {
|
|
108
|
+
return this._addWsRules(rules, true);
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
private _addRequestRules = async (
|
|
112
|
+
rules: Array<RequestRuleData>,
|
|
113
|
+
reset: boolean
|
|
114
|
+
): Promise<MockedEndpoint[]> => {
|
|
115
|
+
if (!this.requestBuilder) throw new Error('Cannot add rules before the server is started');
|
|
116
|
+
|
|
117
|
+
const { adminStream } = this.adminClient;
|
|
118
|
+
return this.adminClient.sendQuery(
|
|
119
|
+
this.requestBuilder.buildAddRequestRulesQuery(rules, reset, adminStream)
|
|
120
|
+
);
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
private _addWsRules = async (
|
|
124
|
+
rules: Array<WebSocketRuleData>,
|
|
125
|
+
reset: boolean
|
|
126
|
+
): Promise<MockedEndpoint[]> => {
|
|
127
|
+
if (!this.requestBuilder) throw new Error('Cannot add rules before the server is started');
|
|
128
|
+
|
|
129
|
+
const { adminStream } = this.adminClient;
|
|
130
|
+
|
|
131
|
+
return this.adminClient.sendQuery(
|
|
132
|
+
this.requestBuilder.buildAddWebSocketRulesQuery(rules, reset, adminStream)
|
|
133
|
+
);
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
public async getMockedEndpoints() {
|
|
137
|
+
if (!this.requestBuilder) throw new Error('Cannot query mocked endpoints before the server is started');
|
|
138
|
+
|
|
139
|
+
return this.adminClient.sendQuery(
|
|
140
|
+
this.requestBuilder.buildMockedEndpointsQuery()
|
|
141
|
+
);
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
public async getPendingEndpoints() {
|
|
145
|
+
if (!this.requestBuilder) throw new Error('Cannot query pending endpoints before the server is started');
|
|
146
|
+
|
|
147
|
+
return this.adminClient.sendQuery(
|
|
148
|
+
this.requestBuilder.buildPendingEndpointsQuery()
|
|
149
|
+
);
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
public async getRuleParameterKeys() {
|
|
153
|
+
return this.adminClient.getRuleParameterKeys();
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
public on(event: SubscribableEvent | MockttpClientEvent, callback: (data: any) => void): Promise<void> {
|
|
157
|
+
if (event.startsWith('admin-client:')) {
|
|
158
|
+
// All MockttpClient events come from the internal admin-client instance:
|
|
159
|
+
this.adminClient.on(event.slice('admin-client:'.length), callback);
|
|
160
|
+
return Promise.resolve();
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
if (!this.requestBuilder) throw new Error('Cannot subscribe to Mockttp events before the server is started');
|
|
164
|
+
|
|
165
|
+
const subRequest = this.requestBuilder.buildSubscriptionRequest(event as SubscribableEvent);
|
|
166
|
+
|
|
167
|
+
if (!subRequest) {
|
|
168
|
+
// We just return an immediately promise if we don't recognize the event, which will quietly
|
|
169
|
+
// succeed but never call the corresponding callback (the same as the server and most event
|
|
170
|
+
// sources in the same kind of situation). This is what happens when the *client* doesn't
|
|
171
|
+
// recognize the event. Subscribe() below handles the unknown-to-server case.
|
|
172
|
+
console.warn(`Ignoring subscription for event unrecognized by Mockttp client: ${event}`);
|
|
173
|
+
return Promise.resolve();
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
return this.adminClient.subscribe(subRequest, callback);
|
|
177
|
+
}
|
|
178
|
+
}
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
import * as _ from 'lodash';
|
|
2
|
+
|
|
3
|
+
export class SchemaIntrospector {
|
|
4
|
+
|
|
5
|
+
constructor(
|
|
6
|
+
private adminServerSchema: any
|
|
7
|
+
) {}
|
|
8
|
+
|
|
9
|
+
public queryTypeDefined(queryType: string): boolean {
|
|
10
|
+
return this.typeHasField('Query', queryType);
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
public isTypeDefined(typeName: string): boolean {
|
|
14
|
+
return _.some(this.adminServerSchema.types, { name: typeName });
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
public typeHasField(typeName: string, fieldName: string): boolean {
|
|
18
|
+
const type: any = _.find(this.adminServerSchema.types, { name: typeName });
|
|
19
|
+
if (!type) return false;
|
|
20
|
+
return !!_.find(type.fields, { name: fieldName });
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
public asOptionalField(typeName: string | string[], fieldName: string): string {
|
|
24
|
+
const possibleNames = !Array.isArray(typeName) ? [typeName] : typeName;
|
|
25
|
+
|
|
26
|
+
const firstAvailableName = possibleNames.find((name) => this.isTypeDefined(name));
|
|
27
|
+
if (!firstAvailableName) return '';
|
|
28
|
+
|
|
29
|
+
return (this.typeHasField(firstAvailableName, fieldName))
|
|
30
|
+
? fieldName
|
|
31
|
+
: '';
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
public typeHasInputField(typeName: string, fieldName: string): boolean {
|
|
35
|
+
const type: any = _.find(this.adminServerSchema.types, { name: typeName });
|
|
36
|
+
if (!type) return false;
|
|
37
|
+
return !!_.find(type.inputFields, { name: fieldName });
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
// Taken from src/utilities/introspectionQuery.js in GraphQL-js
|
|
43
|
+
// Copied directly, to avoid bundling the whole thing into frontend code.
|
|
44
|
+
export const introspectionQuery = `
|
|
45
|
+
query IntrospectionQuery {
|
|
46
|
+
__schema {
|
|
47
|
+
queryType { name }
|
|
48
|
+
mutationType { name }
|
|
49
|
+
subscriptionType { name }
|
|
50
|
+
types {
|
|
51
|
+
...FullType
|
|
52
|
+
}
|
|
53
|
+
directives {
|
|
54
|
+
name
|
|
55
|
+
locations
|
|
56
|
+
args {
|
|
57
|
+
...InputValue
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
fragment FullType on __Type {
|
|
64
|
+
kind
|
|
65
|
+
name
|
|
66
|
+
fields(includeDeprecated: true) {
|
|
67
|
+
name
|
|
68
|
+
args {
|
|
69
|
+
...InputValue
|
|
70
|
+
}
|
|
71
|
+
type {
|
|
72
|
+
...TypeRef
|
|
73
|
+
}
|
|
74
|
+
isDeprecated
|
|
75
|
+
deprecationReason
|
|
76
|
+
}
|
|
77
|
+
inputFields {
|
|
78
|
+
...InputValue
|
|
79
|
+
}
|
|
80
|
+
interfaces {
|
|
81
|
+
...TypeRef
|
|
82
|
+
}
|
|
83
|
+
enumValues(includeDeprecated: true) {
|
|
84
|
+
name
|
|
85
|
+
isDeprecated
|
|
86
|
+
deprecationReason
|
|
87
|
+
}
|
|
88
|
+
possibleTypes {
|
|
89
|
+
...TypeRef
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
fragment InputValue on __InputValue {
|
|
94
|
+
name
|
|
95
|
+
type { ...TypeRef }
|
|
96
|
+
defaultValue
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
fragment TypeRef on __Type {
|
|
100
|
+
kind
|
|
101
|
+
name
|
|
102
|
+
ofType {
|
|
103
|
+
kind
|
|
104
|
+
name
|
|
105
|
+
ofType {
|
|
106
|
+
kind
|
|
107
|
+
name
|
|
108
|
+
ofType {
|
|
109
|
+
kind
|
|
110
|
+
name
|
|
111
|
+
ofType {
|
|
112
|
+
kind
|
|
113
|
+
name
|
|
114
|
+
ofType {
|
|
115
|
+
kind
|
|
116
|
+
name
|
|
117
|
+
ofType {
|
|
118
|
+
kind
|
|
119
|
+
name
|
|
120
|
+
ofType {
|
|
121
|
+
kind
|
|
122
|
+
name
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
`;
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import { MockttpClient } from "./client/mockttp-client";
|
|
2
|
+
|
|
3
|
+
import { Mockttp, MockttpOptions } from "./mockttp";
|
|
4
|
+
export { Method, RulePriority } from "./types";
|
|
5
|
+
|
|
6
|
+
// Export rule data builders:
|
|
7
|
+
import * as matchers from './rules/matchers';
|
|
8
|
+
import * as requestHandlerDefinitions from './rules/requests/request-handler-definitions';
|
|
9
|
+
import * as webSocketHandlerDefinitions from './rules/websockets/websocket-handler-definitions';
|
|
10
|
+
import * as completionCheckers from './rules/completion-checkers';
|
|
11
|
+
|
|
12
|
+
export {
|
|
13
|
+
matchers,
|
|
14
|
+
requestHandlerDefinitions,
|
|
15
|
+
webSocketHandlerDefinitions,
|
|
16
|
+
completionCheckers
|
|
17
|
+
};
|
|
18
|
+
|
|
19
|
+
// We re-export definitions to pretend they're real handlers in the browser. This should be safe
|
|
20
|
+
// because the missing methods (i.e. handle()) were always unusable in non-Node environments anyway.
|
|
21
|
+
// In practice though, new browser code using this should actively use requestHandlerDefinitions instead.
|
|
22
|
+
// In future, we should probably expose definitions only for both browsers & node, but that's a
|
|
23
|
+
// breaking change.
|
|
24
|
+
export const requestHandlers = {
|
|
25
|
+
'SimpleHandler': requestHandlerDefinitions.SimpleHandlerDefinition,
|
|
26
|
+
'CallbackHandler': requestHandlerDefinitions.CallbackHandlerDefinition,
|
|
27
|
+
'StreamHandler': requestHandlerDefinitions.StreamHandlerDefinition,
|
|
28
|
+
'FileHandler': requestHandlerDefinitions.FileHandlerDefinition,
|
|
29
|
+
'PassThroughHandler': requestHandlerDefinitions.PassThroughHandlerDefinition,
|
|
30
|
+
'CloseConnectionHandler': requestHandlerDefinitions.CloseConnectionHandlerDefinition,
|
|
31
|
+
'TimeoutHandler': requestHandlerDefinitions.TimeoutHandlerDefinition,
|
|
32
|
+
'HandlerLookup': requestHandlerDefinitions.HandlerDefinitionLookup
|
|
33
|
+
};
|
|
34
|
+
|
|
35
|
+
export const webSocketHandlers = {
|
|
36
|
+
'PassThroughWebSocketHandler': webSocketHandlerDefinitions.PassThroughWebSocketHandlerDefinition,
|
|
37
|
+
'CloseConnectionHandler': webSocketHandlerDefinitions.CloseConnectionHandlerDefinition,
|
|
38
|
+
'TimeoutHandler': webSocketHandlerDefinitions.TimeoutHandlerDefinition,
|
|
39
|
+
'WsHandlerLookup': webSocketHandlerDefinitions.WsHandlerDefinitionLookup
|
|
40
|
+
};
|
|
41
|
+
|
|
42
|
+
export { MOCKTTP_PARAM_REF } from './rules/rule-parameters';
|
|
43
|
+
|
|
44
|
+
// Export the core API:
|
|
45
|
+
export function getLocal(options: MockttpOptions = {}): Mockttp {
|
|
46
|
+
return new MockttpClient(options);
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
export function getRemote(options: MockttpOptions = {}): Mockttp {
|
|
50
|
+
return new MockttpClient(options);
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
export function getAdminServer(): never {
|
|
54
|
+
throw new Error('Cannot set up an admin server within a browser');
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
export { resetAdminServer } from "./client/admin-client";
|
|
58
|
+
|
|
59
|
+
export * as PluggableAdmin from './pluggable-admin-api/pluggable-admin';
|
|
60
|
+
export * as MockttpPluggableAdmin from './pluggable-admin-api/mockttp-pluggable-admin';
|
package/src/main.ts
ADDED
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
import { Mockttp, MockttpOptions, MockttpHttpsOptions, SubscribableEvent, PortRange } from "./mockttp";
|
|
2
|
+
import { MockttpServer } from "./server/mockttp-server";
|
|
3
|
+
import {
|
|
4
|
+
MockttpClient,
|
|
5
|
+
MockttpClientOptions
|
|
6
|
+
} from "./client/mockttp-client";
|
|
7
|
+
import { MockttpAdminServer, MockttpAdminServerOptions } from "./admin/mockttp-admin-server";
|
|
8
|
+
|
|
9
|
+
// Export the core type definitions:
|
|
10
|
+
export * from "./types";
|
|
11
|
+
export type {
|
|
12
|
+
Mockttp,
|
|
13
|
+
MockttpServer,
|
|
14
|
+
MockttpAdminServer,
|
|
15
|
+
MockttpOptions,
|
|
16
|
+
MockttpHttpsOptions,
|
|
17
|
+
MockttpClientOptions,
|
|
18
|
+
MockttpAdminServerOptions,
|
|
19
|
+
SubscribableEvent,
|
|
20
|
+
PortRange
|
|
21
|
+
};
|
|
22
|
+
|
|
23
|
+
// Export now-renamed types with the old aliases to provide backward compat and
|
|
24
|
+
// avoid unnecessary type breakage:
|
|
25
|
+
export type { TlsHandshakeFailure as TlsRequest } from './types';
|
|
26
|
+
export type {
|
|
27
|
+
CertDataOptions as HttpsOptions,
|
|
28
|
+
CertPathOptions as HttpsPathOptions
|
|
29
|
+
} from './util/tls';
|
|
30
|
+
|
|
31
|
+
// Export rule data builders & type definitions:
|
|
32
|
+
import * as matchers from './rules/matchers';
|
|
33
|
+
import * as requestHandlers from './rules/requests/request-handlers';
|
|
34
|
+
import * as requestHandlerDefinitions from './rules/requests/request-handler-definitions';
|
|
35
|
+
import * as webSocketHandlers from './rules/websockets/websocket-handlers';
|
|
36
|
+
import * as webSocketHandlerDefinitions from './rules/websockets/websocket-handler-definitions';
|
|
37
|
+
import * as completionCheckers from './rules/completion-checkers';
|
|
38
|
+
|
|
39
|
+
export {
|
|
40
|
+
matchers,
|
|
41
|
+
requestHandlers,
|
|
42
|
+
requestHandlerDefinitions,
|
|
43
|
+
webSocketHandlers,
|
|
44
|
+
webSocketHandlerDefinitions,
|
|
45
|
+
completionCheckers
|
|
46
|
+
};
|
|
47
|
+
|
|
48
|
+
import type { RequestRule, RequestRuleData } from './rules/requests/request-rule';
|
|
49
|
+
import type { WebSocketRule, WebSocketRuleData } from './rules/websockets/websocket-rule';
|
|
50
|
+
|
|
51
|
+
export type { RequestRule, RequestRuleData, WebSocketRule, WebSocketRuleData };
|
|
52
|
+
export type {
|
|
53
|
+
ProxyConfig,
|
|
54
|
+
ProxySetting,
|
|
55
|
+
ProxySettingSource,
|
|
56
|
+
ProxySettingCallback,
|
|
57
|
+
ProxySettingCallbackParams
|
|
58
|
+
} from './rules/proxy-config';
|
|
59
|
+
export type {
|
|
60
|
+
CADefinition,
|
|
61
|
+
ForwardingOptions,
|
|
62
|
+
PassThroughLookupOptions,
|
|
63
|
+
PassThroughHandlerConnectionOptions
|
|
64
|
+
} from './rules/passthrough-handling-definitions';
|
|
65
|
+
|
|
66
|
+
export type { RequestRuleBuilder } from "./rules/requests/request-rule-builder";
|
|
67
|
+
export type { WebSocketRuleBuilder } from "./rules/websockets/websocket-rule-builder";
|
|
68
|
+
|
|
69
|
+
export {
|
|
70
|
+
MOCKTTP_PARAM_REF,
|
|
71
|
+
RuleParameterReference,
|
|
72
|
+
RuleParameters
|
|
73
|
+
} from './rules/rule-parameters';
|
|
74
|
+
export type { ServerMockedEndpoint } from "./server/mocked-endpoint";
|
|
75
|
+
|
|
76
|
+
// Export TLS utility methods:
|
|
77
|
+
export {
|
|
78
|
+
generateCACertificate,
|
|
79
|
+
generateSPKIFingerprint
|
|
80
|
+
} from './util/tls';
|
|
81
|
+
|
|
82
|
+
// Export various referenced utility types:
|
|
83
|
+
export type {
|
|
84
|
+
CAOptions,
|
|
85
|
+
PEM,
|
|
86
|
+
CertDataOptions,
|
|
87
|
+
CertPathOptions
|
|
88
|
+
} from './util/tls';
|
|
89
|
+
export type { CachedDns, DnsLookupFunction } from './util/dns';
|
|
90
|
+
export type { Serialized, SerializedValue } from './serialization/serialization';
|
|
91
|
+
export type { MaybePromise } from './util/type-utils';
|
|
92
|
+
|
|
93
|
+
// Export the core API:
|
|
94
|
+
|
|
95
|
+
/**
|
|
96
|
+
* Get a Mockttp instance on the local machine.
|
|
97
|
+
*
|
|
98
|
+
* In most simple environments, you can call this method directly and immediately
|
|
99
|
+
* get a Mockttp instance and start mocking servers.
|
|
100
|
+
*
|
|
101
|
+
* In node, the mocked servers will run in process and require no further setup.
|
|
102
|
+
*
|
|
103
|
+
* In browsers this is an alias for getRemote. You'll need to start a Mockttp admin server
|
|
104
|
+
* outside your tests before calling this, which will create and manage your fake servers
|
|
105
|
+
* outside the browser.
|
|
106
|
+
*/
|
|
107
|
+
export function getLocal(options: MockttpOptions = {}): Mockttp {
|
|
108
|
+
return new MockttpServer(options);
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
/**
|
|
112
|
+
* Get a Mockttp instance, controlled through a Mockttp admin server.
|
|
113
|
+
*
|
|
114
|
+
* This connects to a Mockttp admin server, and uses that to start
|
|
115
|
+
* and stop mock servers.
|
|
116
|
+
*/
|
|
117
|
+
export function getRemote(options: MockttpClientOptions = {}): Mockttp {
|
|
118
|
+
return new MockttpClient(options);
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
/**
|
|
122
|
+
* Get a Mockttp admin server, which can be used with a Mockttp remote client to create
|
|
123
|
+
* & manage Mockttp instances either from remote machines or from local environments
|
|
124
|
+
* that lack necessary capabilities, e.g. to use Mockttp from inside a browser.
|
|
125
|
+
*
|
|
126
|
+
* This function exists so you can set up these servers programmatically, but for most
|
|
127
|
+
* usage you can just run your tests via the `mockttp` binary, which will automatically
|
|
128
|
+
* start and stop an admin server for you:
|
|
129
|
+
*
|
|
130
|
+
* ```
|
|
131
|
+
* mockttp -c <your test command>
|
|
132
|
+
* ```
|
|
133
|
+
*/
|
|
134
|
+
export function getAdminServer(options: MockttpAdminServerOptions = {}): MockttpAdminServer {
|
|
135
|
+
return new MockttpAdminServer(options);
|
|
136
|
+
}
|
|
137
|
+
import { resetAdminServer } from "./client/admin-client";
|
|
138
|
+
export { resetAdminServer };
|
|
139
|
+
|
|
140
|
+
/**
|
|
141
|
+
* This API is not yet stable, and is intended for internal use only. It may change in future
|
|
142
|
+
* in minor versions without warning.
|
|
143
|
+
*
|
|
144
|
+
* These generic pluggable admin components allow composing an admin server and client that
|
|
145
|
+
* are capable of managing arbitrary mock protocols, including Mockttp but also others depending
|
|
146
|
+
* on the admin plugins used. To use Mockttp, combine this with the MockttpPluggableAdmin API.
|
|
147
|
+
* @category Internal
|
|
148
|
+
*/
|
|
149
|
+
export * as PluggableAdmin from './pluggable-admin-api/pluggable-admin';
|
|
150
|
+
|
|
151
|
+
/**
|
|
152
|
+
* This API is not yet stable, and is intended for internal use only. It may change in future
|
|
153
|
+
* in minor versions without warning.
|
|
154
|
+
*
|
|
155
|
+
* These plugin components can be applied to the PluggableAdmin API to create a remotely
|
|
156
|
+
* controlable mock management server that can mock HTTP in addition to protocols from
|
|
157
|
+
* other plugins.
|
|
158
|
+
* @category Internal
|
|
159
|
+
*/
|
|
160
|
+
export * as MockttpPluggableAdmin from './pluggable-admin-api/mockttp-pluggable-admin';
|