From 8ffd59e833b1358c8f6fce2a6b5526dfcce4ead1 Mon Sep 17 00:00:00 2001 From: pimterry <1526883+pimterry@users.noreply.github.com> Date: Fri, 8 Nov 2024 14:16:14 +0000 Subject: [PATCH] =?UTF-8?q?Deploying=20to=20gh-pages=20from=20@=20httptool?= =?UTF-8?q?kit/mockttp@c894ce1961e37a33e2681594ec92243b6aa82da6=20?= =?UTF-8?q?=F0=9F=9A=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .nojekyll | 1 + assets/highlight.css | 85 + assets/icons.js | 18 + assets/icons.svg | 1 + assets/main.js | 60 + assets/navigation.js | 1 + assets/search.js | 1 + assets/style.css | 1493 +++++++++++++++++ classes/CachedDns.html | 3 + classes/MockttpAdminServer.html | 20 + ...kttpPluggableAdmin.MockttpAdminPlugin.html | 9 + classes/MockttpServer.html | 351 ++++ classes/PluggableAdmin.AdminClient.html | 24 + classes/PluggableAdmin.AdminServer.html | 20 + .../PluggableAdmin.SchemaIntrospector.html | 7 + ...min.Serialization.ClientServerChannel.html | 8 + ...gableAdmin.Serialization.Serializable.html | 4 + classes/RequestRule.html | 11 + classes/RequestRuleBuilder.html | 229 +++ classes/ServerMockedEndpoint.html | 24 + classes/WebSocketRule.html | 11 + classes/WebSocketRuleBuilder.html | 179 ++ classes/completionCheckers.Always.html | 6 + classes/completionCheckers.NTimes.html | 7 + classes/completionCheckers.Once.html | 6 + classes/completionCheckers.Thrice.html | 6 + classes/completionCheckers.Twice.html | 6 + classes/matchers.CallbackMatcher.html | 7 + classes/matchers.CookieMatcher.html | 7 + classes/matchers.ExactQueryMatcher.html | 7 + classes/matchers.FormDataMatcher.html | 7 + classes/matchers.HeaderMatcher.html | 7 + classes/matchers.HostMatcher.html | 7 + classes/matchers.HostnameMatcher.html | 7 + classes/matchers.JsonBodyFlexibleMatcher.html | 7 + classes/matchers.JsonBodyMatcher.html | 7 + classes/matchers.MethodMatcher.html | 7 + .../matchers.MultipartFormDataMatcher.html | 7 + classes/matchers.PortMatcher.html | 7 + classes/matchers.ProtocolMatcher.html | 7 + classes/matchers.QueryMatcher.html | 7 + classes/matchers.RawBodyIncludesMatcher.html | 7 + classes/matchers.RawBodyMatcher.html | 7 + classes/matchers.RegexBodyMatcher.html | 7 + classes/matchers.RegexPathMatcher.html | 8 + classes/matchers.RegexUrlMatcher.html | 8 + classes/matchers.SimplePathMatcher.html | 7 + classes/matchers.WildcardMatcher.html | 6 + ...Definitions.CallbackHandlerDefinition.html | 6 + ...ions.CloseConnectionHandlerDefinition.html | 5 + ...dlerDefinitions.FileHandlerDefinition.html | 9 + ...ions.JsonRpcResponseHandlerDefinition.html | 6 + ...initions.PassThroughHandlerDefinition.html | 16 + ...ions.ResetConnectionHandlerDefinition.html | 5 + ...erDefinitions.SimpleHandlerDefinition.html | 10 + ...erDefinitions.StreamHandlerDefinition.html | 8 + ...rDefinitions.TimeoutHandlerDefinition.html | 5 + classes/requestHandlers.AbortError.html | 3 + classes/requestHandlers.CallbackHandler.html | 7 + ...equestHandlers.CloseConnectionHandler.html | 6 + classes/requestHandlers.FileHandler.html | 10 + ...equestHandlers.JsonRpcResponseHandler.html | 7 + .../requestHandlers.PassThroughHandler.html | 17 + ...equestHandlers.ResetConnectionHandler.html | 6 + classes/requestHandlers.SimpleHandler.html | 11 + classes/requestHandlers.StreamHandler.html | 9 + classes/requestHandlers.TimeoutHandler.html | 6 + ...itions.EchoWebSocketHandlerDefinition.html | 5 + ...ions.ListenWebSocketHandlerDefinition.html | 5 + ...PassThroughWebSocketHandlerDefinition.html | 11 + ...ions.RejectWebSocketHandlerDefinition.html | 9 + ...ebSocketHandlers.EchoWebSocketHandler.html | 6 + ...SocketHandlers.ListenWebSocketHandler.html | 6 + ...tHandlers.PassThroughWebSocketHandler.html | 12 + ...SocketHandlers.RejectWebSocketHandler.html | 10 + enums/Method.html | 8 + enums/RulePriority.html | 3 + ...ggableAdmin.Serialization.deserialize.html | 1 + ...Admin.Serialization.deserializeBuffer.html | 1 + ....Serialization.deserializeProxyConfig.html | 1 + ....Serialization.ensureParamsDeferenced.html | 1 + ...luggableAdmin.Serialization.serialize.html | 1 + ...leAdmin.Serialization.serializeBuffer.html | 1 + ...in.Serialization.serializeProxyConfig.html | 1 + functions/generateCACertificate.html | 6 + functions/generateSPKIFingerprint.html | 1 + functions/getAdminServer.html | 10 + functions/getLocal.html | 8 + functions/getRemote.html | 4 + functions/matchers.explainMatchers.html | 1 + functions/matchers.matchesAll.html | 1 + functions/resetAdminServer.html | 11 + hierarchy.html | 1 + index.html | 8 + interfaces/AbortedRequest.html | 16 + interfaces/ClientError.html | 7 + interfaces/CompletedBody.html | 32 + interfaces/CompletedRequest.html | 18 + interfaces/CompletedResponse.html | 11 + interfaces/Explainable.html | 2 + interfaces/Headers.html | 10 + interfaces/HttpsOptions.html | 14 + interfaces/HttpsPathOptions.html | 14 + interfaces/MockedEndpoint.html | 20 + interfaces/MockedEndpointData.html | 5 + interfaces/Mockttp.html | 360 ++++ interfaces/MockttpAdminServerOptions.html | 18 + interfaces/MockttpClientOptions.html | 53 + interfaces/MockttpOptions.html | 46 + ...pPluggableAdmin.MockttpClientResponse.html | 3 + ...tpPluggableAdmin.MockttpPluginOptions.html | 3 + interfaces/OngoingBody.html | 7 + interfaces/OngoingRequest.html | 17 + interfaces/OngoingResponse.html | 21 + .../PassThroughHandlerConnectionOptions.html | 48 + .../PluggableAdmin.AdminClientOptions.html | 14 + interfaces/PluggableAdmin.AdminPlugin.html | 7 + interfaces/PluggableAdmin.AdminQuery.html | 4 + .../PluggableAdmin.AdminServerOptions.html | 18 + interfaces/PluggableAdmin.QueryContext.html | 2 + interfaces/ProxyEnvConfig.html | 3 + interfaces/ProxySetting.html | 38 + interfaces/Request.html | 15 + interfaces/RequestRuleData.html | 6 + interfaces/RuleEvent.html | 6 + interfaces/TimingEvents.html | 9 + interfaces/TlsConnectionEvent.html | 7 + interfaces/TlsFailureTimingEvents.html | 21 + interfaces/TlsPassthroughEvent.html | 9 + interfaces/TlsRequest.html | 8 + interfaces/TlsSocketMetadata.html | 6 + interfaces/TlsTimingEvents.html | 16 + interfaces/Trailers.html | 1 + interfaces/WebSocketClose.html | 17 + interfaces/WebSocketMessage.html | 18 + interfaces/WebSocketRuleData.html | 6 + ...pletionCheckers.RuleCompletionChecker.html | 5 + interfaces/matchers.RequestMatcher.html | 5 + ...atchers.SerializedCallbackMatcherData.html | 4 + ...rDefinitions.RequestHandlerDefinition.html | 4 + ...requestHandlers.CallbackRequestResult.html | 51 + ...andlers.CallbackResponseMessageResult.html | 55 + .../requestHandlers.ForwardingOptions.html | 3 + ...estHandlers.PassThroughHandlerOptions.html | 103 ++ ...uestHandlers.PassThroughLookupOptions.html | 13 + .../requestHandlers.PassThroughResponse.html | 7 + .../requestHandlers.RequestHandler.html | 5 + ...requestHandlers.RequestHandlerOptions.html | 2 + .../requestHandlers.RequestTransform.html | 38 + .../requestHandlers.ResponseTransform.html | 38 + ...efinitions.WebSocketHandlerDefinition.html | 4 + .../webSocketHandlers.WebSocketHandler.html | 5 + modules.html | 87 + modules/MockttpPluggableAdmin.html | 9 + modules/PluggableAdmin.Serialization.html | 14 + modules/PluggableAdmin.html | 19 + modules/completionCheckers.html | 8 + modules/matchers.html | 28 + modules/requestHandlerDefinitions.html | 20 + modules/requestHandlers.html | 23 + modules/webSocketHandlerDefinitions.html | 11 + modules/webSocketHandlers.html | 11 + types/CADefinition.html | 1 + types/CAOptions.html | 1 + types/DnsLookupFunction.html | 1 + types/InitiatedRequest.html | 1 + types/MaybePromise.html | 1 + types/MockttpHttpsOptions.html | 29 + types/PEM.html | 1 + .../PluggableAdmin.PluginClientResponse.html | 1 + ...uggableAdmin.PluginClientResponsesMap.html | 1 + types/PluggableAdmin.PluginStartParams.html | 1 + .../PluggableAdmin.PluginStartParamsMap.html | 1 + ...n.Serialization.SerializedProxyConfig.html | 1 + ...tion.SerializedRuleParameterReference.html | 1 + types/PortRange.html | 1 + types/ProxyConfig.html | 4 + types/ProxySettingCallback.html | 1 + types/ProxySettingCallbackParams.html | 1 + types/ProxySettingSource.html | 4 + types/RawHeaders.html | 1 + types/RawTrailers.html | 1 + types/RuleParameterReference.html | 8 + types/RuleParameters.html | 1 + types/Serialized.html | 1 + types/SerializedValue.html | 1 + types/SubscribableEvent.html | 1 + types/defaultMaxListeners.html | 1 + ...matchers.MultipartFieldMatchCondition.html | 1 + ...stHandlerDefinitions.SerializedBuffer.html | 1 + ...equestHandlers.CallbackResponseResult.html | 1 + ...rs.PassThroughWebSocketHandlerOptions.html | 1 + variables/DEFAULT_ADMIN_SERVER_PORT.html | 1 + variables/MOCKTTP_PARAM_REF.html | 1 + ...etionCheckers.CompletionCheckerLookup.html | 1 + variables/matchers.MatcherLookup.html | 1 + ...erDefinitions.HandlerDefinitionLookup.html | 1 + variables/requestHandlers.HandlerLookup.html | 1 + ...Definitions.WsHandlerDefinitionLookup.html | 1 + .../webSocketHandlers.WsHandlerLookup.html | 1 + 200 files changed, 4631 insertions(+) create mode 100644 .nojekyll create mode 100644 assets/highlight.css create mode 100644 assets/icons.js create mode 100644 assets/icons.svg create mode 100644 assets/main.js create mode 100644 assets/navigation.js create mode 100644 assets/search.js create mode 100644 assets/style.css create mode 100644 classes/CachedDns.html create mode 100644 classes/MockttpAdminServer.html create mode 100644 classes/MockttpPluggableAdmin.MockttpAdminPlugin.html create mode 100644 classes/MockttpServer.html create mode 100644 classes/PluggableAdmin.AdminClient.html create mode 100644 classes/PluggableAdmin.AdminServer.html create mode 100644 classes/PluggableAdmin.SchemaIntrospector.html create mode 100644 classes/PluggableAdmin.Serialization.ClientServerChannel.html create mode 100644 classes/PluggableAdmin.Serialization.Serializable.html create mode 100644 classes/RequestRule.html create mode 100644 classes/RequestRuleBuilder.html create mode 100644 classes/ServerMockedEndpoint.html create mode 100644 classes/WebSocketRule.html create mode 100644 classes/WebSocketRuleBuilder.html create mode 100644 classes/completionCheckers.Always.html create mode 100644 classes/completionCheckers.NTimes.html create mode 100644 classes/completionCheckers.Once.html create mode 100644 classes/completionCheckers.Thrice.html create mode 100644 classes/completionCheckers.Twice.html create mode 100644 classes/matchers.CallbackMatcher.html create mode 100644 classes/matchers.CookieMatcher.html create mode 100644 classes/matchers.ExactQueryMatcher.html create mode 100644 classes/matchers.FormDataMatcher.html create mode 100644 classes/matchers.HeaderMatcher.html create mode 100644 classes/matchers.HostMatcher.html create mode 100644 classes/matchers.HostnameMatcher.html create mode 100644 classes/matchers.JsonBodyFlexibleMatcher.html create mode 100644 classes/matchers.JsonBodyMatcher.html create mode 100644 classes/matchers.MethodMatcher.html create mode 100644 classes/matchers.MultipartFormDataMatcher.html create mode 100644 classes/matchers.PortMatcher.html create mode 100644 classes/matchers.ProtocolMatcher.html create mode 100644 classes/matchers.QueryMatcher.html create mode 100644 classes/matchers.RawBodyIncludesMatcher.html create mode 100644 classes/matchers.RawBodyMatcher.html create mode 100644 classes/matchers.RegexBodyMatcher.html create mode 100644 classes/matchers.RegexPathMatcher.html create mode 100644 classes/matchers.RegexUrlMatcher.html create mode 100644 classes/matchers.SimplePathMatcher.html create mode 100644 classes/matchers.WildcardMatcher.html create mode 100644 classes/requestHandlerDefinitions.CallbackHandlerDefinition.html create mode 100644 classes/requestHandlerDefinitions.CloseConnectionHandlerDefinition.html create mode 100644 classes/requestHandlerDefinitions.FileHandlerDefinition.html create mode 100644 classes/requestHandlerDefinitions.JsonRpcResponseHandlerDefinition.html create mode 100644 classes/requestHandlerDefinitions.PassThroughHandlerDefinition.html create mode 100644 classes/requestHandlerDefinitions.ResetConnectionHandlerDefinition.html create mode 100644 classes/requestHandlerDefinitions.SimpleHandlerDefinition.html create mode 100644 classes/requestHandlerDefinitions.StreamHandlerDefinition.html create mode 100644 classes/requestHandlerDefinitions.TimeoutHandlerDefinition.html create mode 100644 classes/requestHandlers.AbortError.html create mode 100644 classes/requestHandlers.CallbackHandler.html create mode 100644 classes/requestHandlers.CloseConnectionHandler.html create mode 100644 classes/requestHandlers.FileHandler.html create mode 100644 classes/requestHandlers.JsonRpcResponseHandler.html create mode 100644 classes/requestHandlers.PassThroughHandler.html create mode 100644 classes/requestHandlers.ResetConnectionHandler.html create mode 100644 classes/requestHandlers.SimpleHandler.html create mode 100644 classes/requestHandlers.StreamHandler.html create mode 100644 classes/requestHandlers.TimeoutHandler.html create mode 100644 classes/webSocketHandlerDefinitions.EchoWebSocketHandlerDefinition.html create mode 100644 classes/webSocketHandlerDefinitions.ListenWebSocketHandlerDefinition.html create mode 100644 classes/webSocketHandlerDefinitions.PassThroughWebSocketHandlerDefinition.html create mode 100644 classes/webSocketHandlerDefinitions.RejectWebSocketHandlerDefinition.html create mode 100644 classes/webSocketHandlers.EchoWebSocketHandler.html create mode 100644 classes/webSocketHandlers.ListenWebSocketHandler.html create mode 100644 classes/webSocketHandlers.PassThroughWebSocketHandler.html create mode 100644 classes/webSocketHandlers.RejectWebSocketHandler.html create mode 100644 enums/Method.html create mode 100644 enums/RulePriority.html create mode 100644 functions/PluggableAdmin.Serialization.deserialize.html create mode 100644 functions/PluggableAdmin.Serialization.deserializeBuffer.html create mode 100644 functions/PluggableAdmin.Serialization.deserializeProxyConfig.html create mode 100644 functions/PluggableAdmin.Serialization.ensureParamsDeferenced.html create mode 100644 functions/PluggableAdmin.Serialization.serialize.html create mode 100644 functions/PluggableAdmin.Serialization.serializeBuffer.html create mode 100644 functions/PluggableAdmin.Serialization.serializeProxyConfig.html create mode 100644 functions/generateCACertificate.html create mode 100644 functions/generateSPKIFingerprint.html create mode 100644 functions/getAdminServer.html create mode 100644 functions/getLocal.html create mode 100644 functions/getRemote.html create mode 100644 functions/matchers.explainMatchers.html create mode 100644 functions/matchers.matchesAll.html create mode 100644 functions/resetAdminServer.html create mode 100644 hierarchy.html create mode 100644 index.html create mode 100644 interfaces/AbortedRequest.html create mode 100644 interfaces/ClientError.html create mode 100644 interfaces/CompletedBody.html create mode 100644 interfaces/CompletedRequest.html create mode 100644 interfaces/CompletedResponse.html create mode 100644 interfaces/Explainable.html create mode 100644 interfaces/Headers.html create mode 100644 interfaces/HttpsOptions.html create mode 100644 interfaces/HttpsPathOptions.html create mode 100644 interfaces/MockedEndpoint.html create mode 100644 interfaces/MockedEndpointData.html create mode 100644 interfaces/Mockttp.html create mode 100644 interfaces/MockttpAdminServerOptions.html create mode 100644 interfaces/MockttpClientOptions.html create mode 100644 interfaces/MockttpOptions.html create mode 100644 interfaces/MockttpPluggableAdmin.MockttpClientResponse.html create mode 100644 interfaces/MockttpPluggableAdmin.MockttpPluginOptions.html create mode 100644 interfaces/OngoingBody.html create mode 100644 interfaces/OngoingRequest.html create mode 100644 interfaces/OngoingResponse.html create mode 100644 interfaces/PassThroughHandlerConnectionOptions.html create mode 100644 interfaces/PluggableAdmin.AdminClientOptions.html create mode 100644 interfaces/PluggableAdmin.AdminPlugin.html create mode 100644 interfaces/PluggableAdmin.AdminQuery.html create mode 100644 interfaces/PluggableAdmin.AdminServerOptions.html create mode 100644 interfaces/PluggableAdmin.QueryContext.html create mode 100644 interfaces/ProxyEnvConfig.html create mode 100644 interfaces/ProxySetting.html create mode 100644 interfaces/Request.html create mode 100644 interfaces/RequestRuleData.html create mode 100644 interfaces/RuleEvent.html create mode 100644 interfaces/TimingEvents.html create mode 100644 interfaces/TlsConnectionEvent.html create mode 100644 interfaces/TlsFailureTimingEvents.html create mode 100644 interfaces/TlsPassthroughEvent.html create mode 100644 interfaces/TlsRequest.html create mode 100644 interfaces/TlsSocketMetadata.html create mode 100644 interfaces/TlsTimingEvents.html create mode 100644 interfaces/Trailers.html create mode 100644 interfaces/WebSocketClose.html create mode 100644 interfaces/WebSocketMessage.html create mode 100644 interfaces/WebSocketRuleData.html create mode 100644 interfaces/completionCheckers.RuleCompletionChecker.html create mode 100644 interfaces/matchers.RequestMatcher.html create mode 100644 interfaces/matchers.SerializedCallbackMatcherData.html create mode 100644 interfaces/requestHandlerDefinitions.RequestHandlerDefinition.html create mode 100644 interfaces/requestHandlers.CallbackRequestResult.html create mode 100644 interfaces/requestHandlers.CallbackResponseMessageResult.html create mode 100644 interfaces/requestHandlers.ForwardingOptions.html create mode 100644 interfaces/requestHandlers.PassThroughHandlerOptions.html create mode 100644 interfaces/requestHandlers.PassThroughLookupOptions.html create mode 100644 interfaces/requestHandlers.PassThroughResponse.html create mode 100644 interfaces/requestHandlers.RequestHandler.html create mode 100644 interfaces/requestHandlers.RequestHandlerOptions.html create mode 100644 interfaces/requestHandlers.RequestTransform.html create mode 100644 interfaces/requestHandlers.ResponseTransform.html create mode 100644 interfaces/webSocketHandlerDefinitions.WebSocketHandlerDefinition.html create mode 100644 interfaces/webSocketHandlers.WebSocketHandler.html create mode 100644 modules.html create mode 100644 modules/MockttpPluggableAdmin.html create mode 100644 modules/PluggableAdmin.Serialization.html create mode 100644 modules/PluggableAdmin.html create mode 100644 modules/completionCheckers.html create mode 100644 modules/matchers.html create mode 100644 modules/requestHandlerDefinitions.html create mode 100644 modules/requestHandlers.html create mode 100644 modules/webSocketHandlerDefinitions.html create mode 100644 modules/webSocketHandlers.html create mode 100644 types/CADefinition.html create mode 100644 types/CAOptions.html create mode 100644 types/DnsLookupFunction.html create mode 100644 types/InitiatedRequest.html create mode 100644 types/MaybePromise.html create mode 100644 types/MockttpHttpsOptions.html create mode 100644 types/PEM.html create mode 100644 types/PluggableAdmin.PluginClientResponse.html create mode 100644 types/PluggableAdmin.PluginClientResponsesMap.html create mode 100644 types/PluggableAdmin.PluginStartParams.html create mode 100644 types/PluggableAdmin.PluginStartParamsMap.html create mode 100644 types/PluggableAdmin.Serialization.SerializedProxyConfig.html create mode 100644 types/PluggableAdmin.Serialization.SerializedRuleParameterReference.html create mode 100644 types/PortRange.html create mode 100644 types/ProxyConfig.html create mode 100644 types/ProxySettingCallback.html create mode 100644 types/ProxySettingCallbackParams.html create mode 100644 types/ProxySettingSource.html create mode 100644 types/RawHeaders.html create mode 100644 types/RawTrailers.html create mode 100644 types/RuleParameterReference.html create mode 100644 types/RuleParameters.html create mode 100644 types/Serialized.html create mode 100644 types/SerializedValue.html create mode 100644 types/SubscribableEvent.html create mode 100644 types/defaultMaxListeners.html create mode 100644 types/matchers.MultipartFieldMatchCondition.html create mode 100644 types/requestHandlerDefinitions.SerializedBuffer.html create mode 100644 types/requestHandlers.CallbackResponseResult.html create mode 100644 types/webSocketHandlers.PassThroughWebSocketHandlerOptions.html create mode 100644 variables/DEFAULT_ADMIN_SERVER_PORT.html create mode 100644 variables/MOCKTTP_PARAM_REF.html create mode 100644 variables/completionCheckers.CompletionCheckerLookup.html create mode 100644 variables/matchers.MatcherLookup.html create mode 100644 variables/requestHandlerDefinitions.HandlerDefinitionLookup.html create mode 100644 variables/requestHandlers.HandlerLookup.html create mode 100644 variables/webSocketHandlerDefinitions.WsHandlerDefinitionLookup.html create mode 100644 variables/webSocketHandlers.WsHandlerLookup.html diff --git a/.nojekyll b/.nojekyll new file mode 100644 index 000000000..e2ac6616a --- /dev/null +++ b/.nojekyll @@ -0,0 +1 @@ +TypeDoc added this file to prevent GitHub Pages from using Jekyll. You can turn off this behavior by setting the `githubPages` option to false. \ No newline at end of file diff --git a/assets/highlight.css b/assets/highlight.css new file mode 100644 index 000000000..bc33e6f24 --- /dev/null +++ b/assets/highlight.css @@ -0,0 +1,85 @@ +:root { + --light-hl-0: #001080; + --dark-hl-0: #9CDCFE; + --light-hl-1: #000000; + --dark-hl-1: #D4D4D4; + --light-hl-2: #795E26; + --dark-hl-2: #DCDCAA; + --light-hl-3: #0000FF; + --dark-hl-3: #569CD6; + --light-hl-4: #0070C1; + --dark-hl-4: #4FC1FF; + --light-hl-5: #A31515; + --dark-hl-5: #CE9178; + --light-hl-6: #AF00DB; + --dark-hl-6: #C586C0; + --light-hl-7: #098658; + --dark-hl-7: #B5CEA8; + --light-hl-8: #008000; + --dark-hl-8: #6A9955; + --light-code-background: #FFFFFF; + --dark-code-background: #1E1E1E; +} + +@media (prefers-color-scheme: light) { :root { + --hl-0: var(--light-hl-0); + --hl-1: var(--light-hl-1); + --hl-2: var(--light-hl-2); + --hl-3: var(--light-hl-3); + --hl-4: var(--light-hl-4); + --hl-5: var(--light-hl-5); + --hl-6: var(--light-hl-6); + --hl-7: var(--light-hl-7); + --hl-8: var(--light-hl-8); + --code-background: var(--light-code-background); +} } + +@media (prefers-color-scheme: dark) { :root { + --hl-0: var(--dark-hl-0); + --hl-1: var(--dark-hl-1); + --hl-2: var(--dark-hl-2); + --hl-3: var(--dark-hl-3); + --hl-4: var(--dark-hl-4); + --hl-5: var(--dark-hl-5); + --hl-6: var(--dark-hl-6); + --hl-7: var(--dark-hl-7); + --hl-8: var(--dark-hl-8); + --code-background: var(--dark-code-background); +} } + +:root[data-theme='light'] { + --hl-0: var(--light-hl-0); + --hl-1: var(--light-hl-1); + --hl-2: var(--light-hl-2); + --hl-3: var(--light-hl-3); + --hl-4: var(--light-hl-4); + --hl-5: var(--light-hl-5); + --hl-6: var(--light-hl-6); + --hl-7: var(--light-hl-7); + --hl-8: var(--light-hl-8); + --code-background: var(--light-code-background); +} + +:root[data-theme='dark'] { + --hl-0: var(--dark-hl-0); + --hl-1: var(--dark-hl-1); + --hl-2: var(--dark-hl-2); + --hl-3: var(--dark-hl-3); + --hl-4: var(--dark-hl-4); + --hl-5: var(--dark-hl-5); + --hl-6: var(--dark-hl-6); + --hl-7: var(--dark-hl-7); + --hl-8: var(--dark-hl-8); + --code-background: var(--dark-code-background); +} + +.hl-0 { color: var(--hl-0); } +.hl-1 { color: var(--hl-1); } +.hl-2 { color: var(--hl-2); } +.hl-3 { color: var(--hl-3); } +.hl-4 { color: var(--hl-4); } +.hl-5 { color: var(--hl-5); } +.hl-6 { color: var(--hl-6); } +.hl-7 { color: var(--hl-7); } +.hl-8 { color: var(--hl-8); } +pre, code { background: var(--code-background); } diff --git a/assets/icons.js b/assets/icons.js new file mode 100644 index 000000000..3dfbd322d --- /dev/null +++ b/assets/icons.js @@ -0,0 +1,18 @@ +(function() { + addIcons(); + function addIcons() { + if (document.readyState === "loading") return document.addEventListener("DOMContentLoaded", addIcons); + const svg = document.body.appendChild(document.createElementNS("http://www.w3.org/2000/svg", "svg")); + svg.innerHTML = `MMNEPVFCICPMFPCPTTAAATR`; + svg.style.display = "none"; + if (location.protocol === "file:") updateUseElements(); + } + + function updateUseElements() { + document.querySelectorAll("use").forEach(el => { + if (el.getAttribute("href").includes("#icon-")) { + el.setAttribute("href", el.getAttribute("href").replace(/.*#/, "#")); + } + }); + } +})() \ No newline at end of file diff --git a/assets/icons.svg b/assets/icons.svg new file mode 100644 index 000000000..a19417dcc --- /dev/null +++ b/assets/icons.svg @@ -0,0 +1 @@ +MMNEPVFCICPMFPCPTTAAATR \ No newline at end of file diff --git a/assets/main.js b/assets/main.js new file mode 100644 index 000000000..99097a053 --- /dev/null +++ b/assets/main.js @@ -0,0 +1,60 @@ +"use strict"; +window.translations={"copy":"Copy","copied":"Copied!","normally_hidden":"This member is normally hidden due to your filter settings."}; +"use strict";(()=>{var Pe=Object.create;var ie=Object.defineProperty;var Oe=Object.getOwnPropertyDescriptor;var _e=Object.getOwnPropertyNames;var Re=Object.getPrototypeOf,Me=Object.prototype.hasOwnProperty;var Fe=(t,e)=>()=>(e||t((e={exports:{}}).exports,e),e.exports);var De=(t,e,n,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let i of _e(e))!Me.call(t,i)&&i!==n&&ie(t,i,{get:()=>e[i],enumerable:!(r=Oe(e,i))||r.enumerable});return t};var Ae=(t,e,n)=>(n=t!=null?Pe(Re(t)):{},De(e||!t||!t.__esModule?ie(n,"default",{value:t,enumerable:!0}):n,t));var ue=Fe((ae,le)=>{(function(){var t=function(e){var n=new t.Builder;return n.pipeline.add(t.trimmer,t.stopWordFilter,t.stemmer),n.searchPipeline.add(t.stemmer),e.call(n,n),n.build()};t.version="2.3.9";t.utils={},t.utils.warn=function(e){return function(n){e.console&&console.warn&&console.warn(n)}}(this),t.utils.asString=function(e){return e==null?"":e.toString()},t.utils.clone=function(e){if(e==null)return e;for(var n=Object.create(null),r=Object.keys(e),i=0;i0){var d=t.utils.clone(n)||{};d.position=[a,u],d.index=s.length,s.push(new t.Token(r.slice(a,o),d))}a=o+1}}return s},t.tokenizer.separator=/[\s\-]+/;t.Pipeline=function(){this._stack=[]},t.Pipeline.registeredFunctions=Object.create(null),t.Pipeline.registerFunction=function(e,n){n in this.registeredFunctions&&t.utils.warn("Overwriting existing registered function: "+n),e.label=n,t.Pipeline.registeredFunctions[e.label]=e},t.Pipeline.warnIfFunctionNotRegistered=function(e){var n=e.label&&e.label in this.registeredFunctions;n||t.utils.warn(`Function is not registered with pipeline. This may cause problems when serialising the index. +`,e)},t.Pipeline.load=function(e){var n=new t.Pipeline;return e.forEach(function(r){var i=t.Pipeline.registeredFunctions[r];if(i)n.add(i);else throw new Error("Cannot load unregistered function: "+r)}),n},t.Pipeline.prototype.add=function(){var e=Array.prototype.slice.call(arguments);e.forEach(function(n){t.Pipeline.warnIfFunctionNotRegistered(n),this._stack.push(n)},this)},t.Pipeline.prototype.after=function(e,n){t.Pipeline.warnIfFunctionNotRegistered(n);var r=this._stack.indexOf(e);if(r==-1)throw new Error("Cannot find existingFn");r=r+1,this._stack.splice(r,0,n)},t.Pipeline.prototype.before=function(e,n){t.Pipeline.warnIfFunctionNotRegistered(n);var r=this._stack.indexOf(e);if(r==-1)throw new Error("Cannot find existingFn");this._stack.splice(r,0,n)},t.Pipeline.prototype.remove=function(e){var n=this._stack.indexOf(e);n!=-1&&this._stack.splice(n,1)},t.Pipeline.prototype.run=function(e){for(var n=this._stack.length,r=0;r1&&(oe&&(r=s),o!=e);)i=r-n,s=n+Math.floor(i/2),o=this.elements[s*2];if(o==e||o>e)return s*2;if(ol?d+=2:a==l&&(n+=r[u+1]*i[d+1],u+=2,d+=2);return n},t.Vector.prototype.similarity=function(e){return this.dot(e)/this.magnitude()||0},t.Vector.prototype.toArray=function(){for(var e=new Array(this.elements.length/2),n=1,r=0;n0){var o=s.str.charAt(0),a;o in s.node.edges?a=s.node.edges[o]:(a=new t.TokenSet,s.node.edges[o]=a),s.str.length==1&&(a.final=!0),i.push({node:a,editsRemaining:s.editsRemaining,str:s.str.slice(1)})}if(s.editsRemaining!=0){if("*"in s.node.edges)var l=s.node.edges["*"];else{var l=new t.TokenSet;s.node.edges["*"]=l}if(s.str.length==0&&(l.final=!0),i.push({node:l,editsRemaining:s.editsRemaining-1,str:s.str}),s.str.length>1&&i.push({node:s.node,editsRemaining:s.editsRemaining-1,str:s.str.slice(1)}),s.str.length==1&&(s.node.final=!0),s.str.length>=1){if("*"in s.node.edges)var u=s.node.edges["*"];else{var u=new t.TokenSet;s.node.edges["*"]=u}s.str.length==1&&(u.final=!0),i.push({node:u,editsRemaining:s.editsRemaining-1,str:s.str.slice(1)})}if(s.str.length>1){var d=s.str.charAt(0),m=s.str.charAt(1),p;m in s.node.edges?p=s.node.edges[m]:(p=new t.TokenSet,s.node.edges[m]=p),s.str.length==1&&(p.final=!0),i.push({node:p,editsRemaining:s.editsRemaining-1,str:d+s.str.slice(2)})}}}return r},t.TokenSet.fromString=function(e){for(var n=new t.TokenSet,r=n,i=0,s=e.length;i=e;n--){var r=this.uncheckedNodes[n],i=r.child.toString();i in this.minimizedNodes?r.parent.edges[r.char]=this.minimizedNodes[i]:(r.child._str=i,this.minimizedNodes[i]=r.child),this.uncheckedNodes.pop()}};t.Index=function(e){this.invertedIndex=e.invertedIndex,this.fieldVectors=e.fieldVectors,this.tokenSet=e.tokenSet,this.fields=e.fields,this.pipeline=e.pipeline},t.Index.prototype.search=function(e){return this.query(function(n){var r=new t.QueryParser(e,n);r.parse()})},t.Index.prototype.query=function(e){for(var n=new t.Query(this.fields),r=Object.create(null),i=Object.create(null),s=Object.create(null),o=Object.create(null),a=Object.create(null),l=0;l1?this._b=1:this._b=e},t.Builder.prototype.k1=function(e){this._k1=e},t.Builder.prototype.add=function(e,n){var r=e[this._ref],i=Object.keys(this._fields);this._documents[r]=n||{},this.documentCount+=1;for(var s=0;s=this.length)return t.QueryLexer.EOS;var e=this.str.charAt(this.pos);return this.pos+=1,e},t.QueryLexer.prototype.width=function(){return this.pos-this.start},t.QueryLexer.prototype.ignore=function(){this.start==this.pos&&(this.pos+=1),this.start=this.pos},t.QueryLexer.prototype.backup=function(){this.pos-=1},t.QueryLexer.prototype.acceptDigitRun=function(){var e,n;do e=this.next(),n=e.charCodeAt(0);while(n>47&&n<58);e!=t.QueryLexer.EOS&&this.backup()},t.QueryLexer.prototype.more=function(){return this.pos1&&(e.backup(),e.emit(t.QueryLexer.TERM)),e.ignore(),e.more())return t.QueryLexer.lexText},t.QueryLexer.lexEditDistance=function(e){return e.ignore(),e.acceptDigitRun(),e.emit(t.QueryLexer.EDIT_DISTANCE),t.QueryLexer.lexText},t.QueryLexer.lexBoost=function(e){return e.ignore(),e.acceptDigitRun(),e.emit(t.QueryLexer.BOOST),t.QueryLexer.lexText},t.QueryLexer.lexEOS=function(e){e.width()>0&&e.emit(t.QueryLexer.TERM)},t.QueryLexer.termSeparator=t.tokenizer.separator,t.QueryLexer.lexText=function(e){for(;;){var n=e.next();if(n==t.QueryLexer.EOS)return t.QueryLexer.lexEOS;if(n.charCodeAt(0)==92){e.escapeCharacter();continue}if(n==":")return t.QueryLexer.lexField;if(n=="~")return e.backup(),e.width()>0&&e.emit(t.QueryLexer.TERM),t.QueryLexer.lexEditDistance;if(n=="^")return e.backup(),e.width()>0&&e.emit(t.QueryLexer.TERM),t.QueryLexer.lexBoost;if(n=="+"&&e.width()===1||n=="-"&&e.width()===1)return e.emit(t.QueryLexer.PRESENCE),t.QueryLexer.lexText;if(n.match(t.QueryLexer.termSeparator))return t.QueryLexer.lexTerm}},t.QueryParser=function(e,n){this.lexer=new t.QueryLexer(e),this.query=n,this.currentClause={},this.lexemeIdx=0},t.QueryParser.prototype.parse=function(){this.lexer.run(),this.lexemes=this.lexer.lexemes;for(var e=t.QueryParser.parseClause;e;)e=e(this);return this.query},t.QueryParser.prototype.peekLexeme=function(){return this.lexemes[this.lexemeIdx]},t.QueryParser.prototype.consumeLexeme=function(){var e=this.peekLexeme();return this.lexemeIdx+=1,e},t.QueryParser.prototype.nextClause=function(){var e=this.currentClause;this.query.clause(e),this.currentClause={}},t.QueryParser.parseClause=function(e){var n=e.peekLexeme();if(n!=null)switch(n.type){case t.QueryLexer.PRESENCE:return t.QueryParser.parsePresence;case t.QueryLexer.FIELD:return t.QueryParser.parseField;case t.QueryLexer.TERM:return t.QueryParser.parseTerm;default:var r="expected either a field or a term, found "+n.type;throw n.str.length>=1&&(r+=" with value '"+n.str+"'"),new t.QueryParseError(r,n.start,n.end)}},t.QueryParser.parsePresence=function(e){var n=e.consumeLexeme();if(n!=null){switch(n.str){case"-":e.currentClause.presence=t.Query.presence.PROHIBITED;break;case"+":e.currentClause.presence=t.Query.presence.REQUIRED;break;default:var r="unrecognised presence operator'"+n.str+"'";throw new t.QueryParseError(r,n.start,n.end)}var i=e.peekLexeme();if(i==null){var r="expecting term or field, found nothing";throw new t.QueryParseError(r,n.start,n.end)}switch(i.type){case t.QueryLexer.FIELD:return t.QueryParser.parseField;case t.QueryLexer.TERM:return t.QueryParser.parseTerm;default:var r="expecting term or field, found '"+i.type+"'";throw new t.QueryParseError(r,i.start,i.end)}}},t.QueryParser.parseField=function(e){var n=e.consumeLexeme();if(n!=null){if(e.query.allFields.indexOf(n.str)==-1){var r=e.query.allFields.map(function(o){return"'"+o+"'"}).join(", "),i="unrecognised field '"+n.str+"', possible fields: "+r;throw new t.QueryParseError(i,n.start,n.end)}e.currentClause.fields=[n.str];var s=e.peekLexeme();if(s==null){var i="expecting term, found nothing";throw new t.QueryParseError(i,n.start,n.end)}switch(s.type){case t.QueryLexer.TERM:return t.QueryParser.parseTerm;default:var i="expecting term, found '"+s.type+"'";throw new t.QueryParseError(i,s.start,s.end)}}},t.QueryParser.parseTerm=function(e){var n=e.consumeLexeme();if(n!=null){e.currentClause.term=n.str.toLowerCase(),n.str.indexOf("*")!=-1&&(e.currentClause.usePipeline=!1);var r=e.peekLexeme();if(r==null){e.nextClause();return}switch(r.type){case t.QueryLexer.TERM:return e.nextClause(),t.QueryParser.parseTerm;case t.QueryLexer.FIELD:return e.nextClause(),t.QueryParser.parseField;case t.QueryLexer.EDIT_DISTANCE:return t.QueryParser.parseEditDistance;case t.QueryLexer.BOOST:return t.QueryParser.parseBoost;case t.QueryLexer.PRESENCE:return e.nextClause(),t.QueryParser.parsePresence;default:var i="Unexpected lexeme type '"+r.type+"'";throw new t.QueryParseError(i,r.start,r.end)}}},t.QueryParser.parseEditDistance=function(e){var n=e.consumeLexeme();if(n!=null){var r=parseInt(n.str,10);if(isNaN(r)){var i="edit distance must be numeric";throw new t.QueryParseError(i,n.start,n.end)}e.currentClause.editDistance=r;var s=e.peekLexeme();if(s==null){e.nextClause();return}switch(s.type){case t.QueryLexer.TERM:return e.nextClause(),t.QueryParser.parseTerm;case t.QueryLexer.FIELD:return e.nextClause(),t.QueryParser.parseField;case t.QueryLexer.EDIT_DISTANCE:return t.QueryParser.parseEditDistance;case t.QueryLexer.BOOST:return t.QueryParser.parseBoost;case t.QueryLexer.PRESENCE:return e.nextClause(),t.QueryParser.parsePresence;default:var i="Unexpected lexeme type '"+s.type+"'";throw new t.QueryParseError(i,s.start,s.end)}}},t.QueryParser.parseBoost=function(e){var n=e.consumeLexeme();if(n!=null){var r=parseInt(n.str,10);if(isNaN(r)){var i="boost must be numeric";throw new t.QueryParseError(i,n.start,n.end)}e.currentClause.boost=r;var s=e.peekLexeme();if(s==null){e.nextClause();return}switch(s.type){case t.QueryLexer.TERM:return e.nextClause(),t.QueryParser.parseTerm;case t.QueryLexer.FIELD:return e.nextClause(),t.QueryParser.parseField;case t.QueryLexer.EDIT_DISTANCE:return t.QueryParser.parseEditDistance;case t.QueryLexer.BOOST:return t.QueryParser.parseBoost;case t.QueryLexer.PRESENCE:return e.nextClause(),t.QueryParser.parsePresence;default:var i="Unexpected lexeme type '"+s.type+"'";throw new t.QueryParseError(i,s.start,s.end)}}},function(e,n){typeof define=="function"&&define.amd?define(n):typeof ae=="object"?le.exports=n():e.lunr=n()}(this,function(){return t})})()});var se=[];function G(t,e){se.push({selector:e,constructor:t})}var U=class{constructor(){this.alwaysVisibleMember=null;this.createComponents(document.body),this.ensureFocusedElementVisible(),this.listenForCodeCopies(),window.addEventListener("hashchange",()=>this.ensureFocusedElementVisible()),document.body.style.display||(this.ensureFocusedElementVisible(),this.updateIndexVisibility(),this.scrollToHash())}createComponents(e){se.forEach(n=>{e.querySelectorAll(n.selector).forEach(r=>{r.dataset.hasInstance||(new n.constructor({el:r,app:this}),r.dataset.hasInstance=String(!0))})})}filterChanged(){this.ensureFocusedElementVisible()}showPage(){document.body.style.display&&(document.body.style.removeProperty("display"),this.ensureFocusedElementVisible(),this.updateIndexVisibility(),this.scrollToHash())}scrollToHash(){if(location.hash){let e=document.getElementById(location.hash.substring(1));if(!e)return;e.scrollIntoView({behavior:"instant",block:"start"})}}ensureActivePageVisible(){let e=document.querySelector(".tsd-navigation .current"),n=e?.parentElement;for(;n&&!n.classList.contains(".tsd-navigation");)n instanceof HTMLDetailsElement&&(n.open=!0),n=n.parentElement;if(e&&!Ve(e)){let r=e.getBoundingClientRect().top-document.documentElement.clientHeight/4;document.querySelector(".site-menu").scrollTop=r,document.querySelector(".col-sidebar").scrollTop=r}}updateIndexVisibility(){let e=document.querySelector(".tsd-index-content"),n=e?.open;e&&(e.open=!0),document.querySelectorAll(".tsd-index-section").forEach(r=>{r.style.display="block";let i=Array.from(r.querySelectorAll(".tsd-index-link")).every(s=>s.offsetParent==null);r.style.display=i?"none":"block"}),e&&(e.open=n)}ensureFocusedElementVisible(){if(this.alwaysVisibleMember&&(this.alwaysVisibleMember.classList.remove("always-visible"),this.alwaysVisibleMember.firstElementChild.remove(),this.alwaysVisibleMember=null),!location.hash)return;let e=document.getElementById(location.hash.substring(1));if(!e)return;let n=e.parentElement;for(;n&&n.tagName!=="SECTION";)n=n.parentElement;if(!n)return;let r=n.offsetParent==null,i=n;for(;i!==document.body;)i instanceof HTMLDetailsElement&&(i.open=!0),i=i.parentElement;if(n.offsetParent==null){this.alwaysVisibleMember=n,n.classList.add("always-visible");let s=document.createElement("p");s.classList.add("warning"),s.textContent=window.translations.normally_hidden,n.prepend(s)}r&&e.scrollIntoView()}listenForCodeCopies(){document.querySelectorAll("pre > button").forEach(e=>{let n;e.addEventListener("click",()=>{e.previousElementSibling instanceof HTMLElement&&navigator.clipboard.writeText(e.previousElementSibling.innerText.trim()),e.textContent=window.translations.copied,e.classList.add("visible"),clearTimeout(n),n=setTimeout(()=>{e.classList.remove("visible"),n=setTimeout(()=>{e.textContent=window.translations.copy},100)},1e3)})})}};function Ve(t){let e=t.getBoundingClientRect(),n=Math.max(document.documentElement.clientHeight,window.innerHeight);return!(e.bottom<0||e.top-n>=0)}var oe=(t,e=100)=>{let n;return()=>{clearTimeout(n),n=setTimeout(()=>t(),e)}};var pe=Ae(ue());async function ce(t,e){if(!window.searchData)return;let n=await fetch(window.searchData),r=new Blob([await n.arrayBuffer()]).stream().pipeThrough(new DecompressionStream("gzip")),i=await new Response(r).json();t.data=i,t.index=pe.Index.load(i.index),e.classList.remove("loading"),e.classList.add("ready")}function fe(){let t=document.getElementById("tsd-search");if(!t)return;let e={base:t.dataset.base+"/"},n=document.getElementById("tsd-search-script");t.classList.add("loading"),n&&(n.addEventListener("error",()=>{t.classList.remove("loading"),t.classList.add("failure")}),n.addEventListener("load",()=>{ce(e,t)}),ce(e,t));let r=document.querySelector("#tsd-search input"),i=document.querySelector("#tsd-search .results");if(!r||!i)throw new Error("The input field or the result list wrapper was not found");i.addEventListener("mouseup",()=>{te(t)}),r.addEventListener("focus",()=>t.classList.add("has-focus")),He(t,i,r,e)}function He(t,e,n,r){n.addEventListener("input",oe(()=>{Ne(t,e,n,r)},200)),n.addEventListener("keydown",i=>{i.key=="Enter"?Be(e,t):i.key=="ArrowUp"?(de(e,n,-1),i.preventDefault()):i.key==="ArrowDown"&&(de(e,n,1),i.preventDefault())}),document.body.addEventListener("keypress",i=>{i.altKey||i.ctrlKey||i.metaKey||!n.matches(":focus")&&i.key==="/"&&(i.preventDefault(),n.focus())}),document.body.addEventListener("keyup",i=>{t.classList.contains("has-focus")&&(i.key==="Escape"||!e.matches(":focus-within")&&!n.matches(":focus"))&&(n.blur(),te(t))})}function te(t){t.classList.remove("has-focus")}function Ne(t,e,n,r){if(!r.index||!r.data)return;e.textContent="";let i=n.value.trim(),s;if(i){let o=i.split(" ").map(a=>a.length?`*${a}*`:"").join(" ");s=r.index.search(o)}else s=[];for(let o=0;oa.score-o.score);for(let o=0,a=Math.min(10,s.length);o`,d=he(l.name,i);globalThis.DEBUG_SEARCH_WEIGHTS&&(d+=` (score: ${s[o].score.toFixed(2)})`),l.parent&&(d=` + ${he(l.parent,i)}.${d}`);let m=document.createElement("li");m.classList.value=l.classes??"";let p=document.createElement("a");p.href=r.base+l.url,p.innerHTML=u+d,m.append(p),p.addEventListener("focus",()=>{e.querySelector(".current")?.classList.remove("current"),m.classList.add("current")}),e.appendChild(m)}}function de(t,e,n){let r=t.querySelector(".current");if(!r)r=t.querySelector(n==1?"li:first-child":"li:last-child"),r&&r.classList.add("current");else{let i=r;if(n===1)do i=i.nextElementSibling??void 0;while(i instanceof HTMLElement&&i.offsetParent==null);else do i=i.previousElementSibling??void 0;while(i instanceof HTMLElement&&i.offsetParent==null);i?(r.classList.remove("current"),i.classList.add("current")):n===-1&&(r.classList.remove("current"),e.focus())}}function Be(t,e){let n=t.querySelector(".current");if(n||(n=t.querySelector("li:first-child")),n){let r=n.querySelector("a");r&&(window.location.href=r.href),te(e)}}function he(t,e){if(e==="")return t;let n=t.toLocaleLowerCase(),r=e.toLocaleLowerCase(),i=[],s=0,o=n.indexOf(r);for(;o!=-1;)i.push(ee(t.substring(s,o)),`${ee(t.substring(o,o+r.length))}`),s=o+r.length,o=n.indexOf(r,s);return i.push(ee(t.substring(s))),i.join("")}var je={"&":"&","<":"<",">":">","'":"'",'"':"""};function ee(t){return t.replace(/[&<>"'"]/g,e=>je[e])}var I=class{constructor(e){this.el=e.el,this.app=e.app}};var F="mousedown",ye="mousemove",N="mouseup",J={x:0,y:0},me=!1,ne=!1,qe=!1,D=!1,ve=/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent);document.documentElement.classList.add(ve?"is-mobile":"not-mobile");ve&&"ontouchstart"in document.documentElement&&(qe=!0,F="touchstart",ye="touchmove",N="touchend");document.addEventListener(F,t=>{ne=!0,D=!1;let e=F=="touchstart"?t.targetTouches[0]:t;J.y=e.pageY||0,J.x=e.pageX||0});document.addEventListener(ye,t=>{if(ne&&!D){let e=F=="touchstart"?t.targetTouches[0]:t,n=J.x-(e.pageX||0),r=J.y-(e.pageY||0);D=Math.sqrt(n*n+r*r)>10}});document.addEventListener(N,()=>{ne=!1});document.addEventListener("click",t=>{me&&(t.preventDefault(),t.stopImmediatePropagation(),me=!1)});var X=class extends I{constructor(e){super(e),this.className=this.el.dataset.toggle||"",this.el.addEventListener(N,n=>this.onPointerUp(n)),this.el.addEventListener("click",n=>n.preventDefault()),document.addEventListener(F,n=>this.onDocumentPointerDown(n)),document.addEventListener(N,n=>this.onDocumentPointerUp(n))}setActive(e){if(this.active==e)return;this.active=e,document.documentElement.classList.toggle("has-"+this.className,e),this.el.classList.toggle("active",e);let n=(this.active?"to-has-":"from-has-")+this.className;document.documentElement.classList.add(n),setTimeout(()=>document.documentElement.classList.remove(n),500)}onPointerUp(e){D||(this.setActive(!0),e.preventDefault())}onDocumentPointerDown(e){if(this.active){if(e.target.closest(".col-sidebar, .tsd-filter-group"))return;this.setActive(!1)}}onDocumentPointerUp(e){if(!D&&this.active&&e.target.closest(".col-sidebar")){let n=e.target.closest("a");if(n){let r=window.location.href;r.indexOf("#")!=-1&&(r=r.substring(0,r.indexOf("#"))),n.href.substring(0,r.length)==r&&setTimeout(()=>this.setActive(!1),250)}}}};var re;try{re=localStorage}catch{re={getItem(){return null},setItem(){}}}var Q=re;var ge=document.head.appendChild(document.createElement("style"));ge.dataset.for="filters";var Y=class extends I{constructor(e){super(e),this.key=`filter-${this.el.name}`,this.value=this.el.checked,this.el.addEventListener("change",()=>{this.setLocalStorage(this.el.checked)}),this.setLocalStorage(this.fromLocalStorage()),ge.innerHTML+=`html:not(.${this.key}) .tsd-is-${this.el.name} { display: none; } +`,this.app.updateIndexVisibility()}fromLocalStorage(){let e=Q.getItem(this.key);return e?e==="true":this.el.checked}setLocalStorage(e){Q.setItem(this.key,e.toString()),this.value=e,this.handleValueChange()}handleValueChange(){this.el.checked=this.value,document.documentElement.classList.toggle(this.key,this.value),this.app.filterChanged(),this.app.updateIndexVisibility()}};var Z=class extends I{constructor(e){super(e),this.summary=this.el.querySelector(".tsd-accordion-summary"),this.icon=this.summary.querySelector("svg"),this.key=`tsd-accordion-${this.summary.dataset.key??this.summary.textContent.trim().replace(/\s+/g,"-").toLowerCase()}`;let n=Q.getItem(this.key);this.el.open=n?n==="true":this.el.open,this.el.addEventListener("toggle",()=>this.update());let r=this.summary.querySelector("a");r&&r.addEventListener("click",()=>{location.assign(r.href)}),this.update()}update(){this.icon.style.transform=`rotate(${this.el.open?0:-90}deg)`,Q.setItem(this.key,this.el.open.toString())}};function Ee(t){let e=Q.getItem("tsd-theme")||"os";t.value=e,xe(e),t.addEventListener("change",()=>{Q.setItem("tsd-theme",t.value),xe(t.value)})}function xe(t){document.documentElement.dataset.theme=t}var K;function we(){let t=document.getElementById("tsd-nav-script");t&&(t.addEventListener("load",Le),Le())}async function Le(){let t=document.getElementById("tsd-nav-container");if(!t||!window.navigationData)return;let n=await(await fetch(window.navigationData)).arrayBuffer(),r=new Blob([n]).stream().pipeThrough(new DecompressionStream("gzip")),i=await new Response(r).json();K=t.dataset.base,K.endsWith("/")||(K+="/"),t.innerHTML="";for(let s of i)Se(s,t,[]);window.app.createComponents(t),window.app.showPage(),window.app.ensureActivePageVisible()}function Se(t,e,n){let r=e.appendChild(document.createElement("li"));if(t.children){let i=[...n,t.text],s=r.appendChild(document.createElement("details"));s.className=t.class?`${t.class} tsd-accordion`:"tsd-accordion";let o=s.appendChild(document.createElement("summary"));o.className="tsd-accordion-summary",o.dataset.key=i.join("$"),o.innerHTML='',be(t,o);let a=s.appendChild(document.createElement("div"));a.className="tsd-accordion-details";let l=a.appendChild(document.createElement("ul"));l.className="tsd-nested-navigation";for(let u of t.children)Se(u,l,i)}else be(t,r,t.class)}function be(t,e,n){if(t.path){let r=e.appendChild(document.createElement("a"));r.href=K+t.path,n&&(r.className=n),location.pathname===r.pathname&&!r.href.includes("#")&&r.classList.add("current"),t.kind&&(r.innerHTML=``),r.appendChild(document.createElement("span")).textContent=t.text}else{let r=e.appendChild(document.createElement("span"));r.innerHTML='',r.appendChild(document.createElement("span")).textContent=t.text}}G(X,"a[data-toggle]");G(Z,".tsd-accordion");G(Y,".tsd-filter-item input[type=checkbox]");var Te=document.getElementById("tsd-theme");Te&&Ee(Te);var $e=new U;Object.defineProperty(window,"app",{value:$e});fe();we();})(); +/*! Bundled license information: + +lunr/lunr.js: + (** + * lunr - http://lunrjs.com - A bit like Solr, but much smaller and not as bright - 2.3.9 + * Copyright (C) 2020 Oliver Nightingale + * @license MIT + *) + (*! + * lunr.utils + * Copyright (C) 2020 Oliver Nightingale + *) + (*! + * lunr.Set + * Copyright (C) 2020 Oliver Nightingale + *) + (*! + * lunr.tokenizer + * Copyright (C) 2020 Oliver Nightingale + *) + (*! + * lunr.Pipeline + * Copyright (C) 2020 Oliver Nightingale + *) + (*! + * lunr.Vector + * Copyright (C) 2020 Oliver Nightingale + *) + (*! + * lunr.stemmer + * Copyright (C) 2020 Oliver Nightingale + * Includes code from - http://tartarus.org/~martin/PorterStemmer/js.txt + *) + (*! + * lunr.stopWordFilter + * Copyright (C) 2020 Oliver Nightingale + *) + (*! + * lunr.trimmer + * Copyright (C) 2020 Oliver Nightingale + *) + (*! + * lunr.TokenSet + * Copyright (C) 2020 Oliver Nightingale + *) + (*! + * lunr.Index + * Copyright (C) 2020 Oliver Nightingale + *) + (*! + * lunr.Builder + * Copyright (C) 2020 Oliver Nightingale + *) +*/ diff --git a/assets/navigation.js b/assets/navigation.js new file mode 100644 index 000000000..20a2fad15 --- /dev/null +++ b/assets/navigation.js @@ -0,0 +1 @@ +window.navigationData = "data:application/octet-stream;base64,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" \ No newline at end of file diff --git a/assets/search.js b/assets/search.js new file mode 100644 index 000000000..2b4de334d --- /dev/null +++ b/assets/search.js @@ -0,0 +1 @@ +window.searchData = "data:application/octet-stream;base64,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"; \ No newline at end of file diff --git a/assets/style.css b/assets/style.css new file mode 100644 index 000000000..178bfb023 --- /dev/null +++ b/assets/style.css @@ -0,0 +1,1493 @@ +:root { + /* Light */ + --light-color-background: #f2f4f8; + --light-color-background-secondary: #eff0f1; + --light-color-warning-text: #222; + --light-color-background-warning: #e6e600; + --light-color-accent: #c5c7c9; + --light-color-active-menu-item: var(--light-color-accent); + --light-color-text: #222; + --light-color-text-aside: #6e6e6e; + + --light-color-icon-background: var(--light-color-background); + --light-color-icon-text: var(--light-color-text); + + --light-color-comment-tag-text: var(--light-color-text); + --light-color-comment-tag: var(--light-color-background); + + --light-color-link: #1f70c2; + --light-color-focus-outline: #3584e4; + + --light-color-ts-keyword: #056bd6; + --light-color-ts-project: #b111c9; + --light-color-ts-module: var(--light-color-ts-project); + --light-color-ts-namespace: var(--light-color-ts-project); + --light-color-ts-enum: #7e6f15; + --light-color-ts-enum-member: var(--light-color-ts-enum); + --light-color-ts-variable: #4760ec; + --light-color-ts-function: #572be7; + --light-color-ts-class: #1f70c2; + --light-color-ts-interface: #108024; + --light-color-ts-constructor: #4d7fff; + --light-color-ts-property: #ff984d; + --light-color-ts-method: #ff4db8; + --light-color-ts-reference: #ff4d82; + --light-color-ts-call-signature: var(--light-color-ts-method); + --light-color-ts-index-signature: var(--light-color-ts-property); + --light-color-ts-constructor-signature: var(--light-color-ts-constructor); + --light-color-ts-parameter: var(--light-color-ts-variable); + /* type literal not included as links will never be generated to it */ + --light-color-ts-type-parameter: #a55c0e; + --light-color-ts-accessor: #ff4d4d; + --light-color-ts-get-signature: var(--light-color-ts-accessor); + --light-color-ts-set-signature: var(--light-color-ts-accessor); + --light-color-ts-type-alias: #d51270; + /* reference not included as links will be colored with the kind that it points to */ + --light-color-document: #000000; + + --light-external-icon: url("data:image/svg+xml;utf8,"); + --light-color-scheme: light; + + /* Dark */ + --dark-color-background: #2b2e33; + --dark-color-background-secondary: #1e2024; + --dark-color-background-warning: #bebe00; + --dark-color-warning-text: #222; + --dark-color-accent: #9096a2; + --dark-color-active-menu-item: #5d5d6a; + --dark-color-text: #f5f5f5; + --dark-color-text-aside: #dddddd; + + --dark-color-icon-background: var(--dark-color-background-secondary); + --dark-color-icon-text: var(--dark-color-text); + + --dark-color-comment-tag-text: var(--dark-color-text); + --dark-color-comment-tag: var(--dark-color-background); + + --dark-color-link: #00aff4; + --dark-color-focus-outline: #4c97f2; + + --dark-color-ts-keyword: #3399ff; + --dark-color-ts-project: #e358ff; + --dark-color-ts-module: var(--dark-color-ts-project); + --dark-color-ts-namespace: var(--dark-color-ts-project); + --dark-color-ts-enum: #f4d93e; + --dark-color-ts-enum-member: var(--dark-color-ts-enum); + --dark-color-ts-variable: #798dff; + --dark-color-ts-function: #a280ff; + --dark-color-ts-class: #8ac4ff; + --dark-color-ts-interface: #6cff87; + --dark-color-ts-constructor: #4d7fff; + --dark-color-ts-property: #ff984d; + --dark-color-ts-method: #ff4db8; + --dark-color-ts-reference: #ff4d82; + --dark-color-ts-call-signature: var(--dark-color-ts-method); + --dark-color-ts-index-signature: var(--dark-color-ts-property); + --dark-color-ts-constructor-signature: var(--dark-color-ts-constructor); + --dark-color-ts-parameter: var(--dark-color-ts-variable); + /* type literal not included as links will never be generated to it */ + --dark-color-ts-type-parameter: #e07d13; + --dark-color-ts-accessor: #ff4d4d; + --dark-color-ts-get-signature: var(--dark-color-ts-accessor); + --dark-color-ts-set-signature: var(--dark-color-ts-accessor); + --dark-color-ts-type-alias: #ff6492; + /* reference not included as links will be colored with the kind that it points to */ + --dark-color-document: #ffffff; + + --dark-external-icon: url("data:image/svg+xml;utf8,"); + --dark-color-scheme: dark; +} + +@media (prefers-color-scheme: light) { + :root { + --color-background: var(--light-color-background); + --color-background-secondary: var(--light-color-background-secondary); + --color-background-warning: var(--light-color-background-warning); + --color-warning-text: var(--light-color-warning-text); + --color-accent: var(--light-color-accent); + --color-active-menu-item: var(--light-color-active-menu-item); + --color-text: var(--light-color-text); + --color-text-aside: var(--light-color-text-aside); + + --color-icon-background: var(--light-color-icon-background); + --color-icon-text: var(--light-color-icon-text); + + --color-comment-tag-text: var(--light-color-text); + --color-comment-tag: var(--light-color-background); + + --color-link: var(--light-color-link); + --color-focus-outline: var(--light-color-focus-outline); + + --color-ts-keyword: var(--light-color-ts-keyword); + --color-ts-project: var(--light-color-ts-project); + --color-ts-module: var(--light-color-ts-module); + --color-ts-namespace: var(--light-color-ts-namespace); + --color-ts-enum: var(--light-color-ts-enum); + --color-ts-enum-member: var(--light-color-ts-enum-member); + --color-ts-variable: var(--light-color-ts-variable); + --color-ts-function: var(--light-color-ts-function); + --color-ts-class: var(--light-color-ts-class); + --color-ts-interface: var(--light-color-ts-interface); + --color-ts-constructor: var(--light-color-ts-constructor); + --color-ts-property: var(--light-color-ts-property); + --color-ts-method: var(--light-color-ts-method); + --color-ts-reference: var(--light-color-ts-reference); + --color-ts-call-signature: var(--light-color-ts-call-signature); + --color-ts-index-signature: var(--light-color-ts-index-signature); + --color-ts-constructor-signature: var( + --light-color-ts-constructor-signature + ); + --color-ts-parameter: var(--light-color-ts-parameter); + --color-ts-type-parameter: var(--light-color-ts-type-parameter); + --color-ts-accessor: var(--light-color-ts-accessor); + --color-ts-get-signature: var(--light-color-ts-get-signature); + --color-ts-set-signature: var(--light-color-ts-set-signature); + --color-ts-type-alias: var(--light-color-ts-type-alias); + --color-document: var(--light-color-document); + + --external-icon: var(--light-external-icon); + --color-scheme: var(--light-color-scheme); + } +} + +@media (prefers-color-scheme: dark) { + :root { + --color-background: var(--dark-color-background); + --color-background-secondary: var(--dark-color-background-secondary); + --color-background-warning: var(--dark-color-background-warning); + --color-warning-text: var(--dark-color-warning-text); + --color-accent: var(--dark-color-accent); + --color-active-menu-item: var(--dark-color-active-menu-item); + --color-text: var(--dark-color-text); + --color-text-aside: var(--dark-color-text-aside); + + --color-icon-background: var(--dark-color-icon-background); + --color-icon-text: var(--dark-color-icon-text); + + --color-comment-tag-text: var(--dark-color-text); + --color-comment-tag: var(--dark-color-background); + + --color-link: var(--dark-color-link); + --color-focus-outline: var(--dark-color-focus-outline); + + --color-ts-keyword: var(--dark-color-ts-keyword); + --color-ts-project: var(--dark-color-ts-project); + --color-ts-module: var(--dark-color-ts-module); + --color-ts-namespace: var(--dark-color-ts-namespace); + --color-ts-enum: var(--dark-color-ts-enum); + --color-ts-enum-member: var(--dark-color-ts-enum-member); + --color-ts-variable: var(--dark-color-ts-variable); + --color-ts-function: var(--dark-color-ts-function); + --color-ts-class: var(--dark-color-ts-class); + --color-ts-interface: var(--dark-color-ts-interface); + --color-ts-constructor: var(--dark-color-ts-constructor); + --color-ts-property: var(--dark-color-ts-property); + --color-ts-method: var(--dark-color-ts-method); + --color-ts-reference: var(--dark-color-ts-reference); + --color-ts-call-signature: var(--dark-color-ts-call-signature); + --color-ts-index-signature: var(--dark-color-ts-index-signature); + --color-ts-constructor-signature: var( + --dark-color-ts-constructor-signature + ); + --color-ts-parameter: var(--dark-color-ts-parameter); + --color-ts-type-parameter: var(--dark-color-ts-type-parameter); + --color-ts-accessor: var(--dark-color-ts-accessor); + --color-ts-get-signature: var(--dark-color-ts-get-signature); + --color-ts-set-signature: var(--dark-color-ts-set-signature); + --color-ts-type-alias: var(--dark-color-ts-type-alias); + --color-document: var(--dark-color-document); + + --external-icon: var(--dark-external-icon); + --color-scheme: var(--dark-color-scheme); + } +} + +html { + color-scheme: var(--color-scheme); +} + +body { + margin: 0; +} + +:root[data-theme="light"] { + --color-background: var(--light-color-background); + --color-background-secondary: var(--light-color-background-secondary); + --color-background-warning: var(--light-color-background-warning); + --color-warning-text: var(--light-color-warning-text); + --color-icon-background: var(--light-color-icon-background); + --color-accent: var(--light-color-accent); + --color-active-menu-item: var(--light-color-active-menu-item); + --color-text: var(--light-color-text); + --color-text-aside: var(--light-color-text-aside); + --color-icon-text: var(--light-color-icon-text); + + --color-comment-tag-text: var(--light-color-text); + --color-comment-tag: var(--light-color-background); + + --color-link: var(--light-color-link); + --color-focus-outline: var(--light-color-focus-outline); + + --color-ts-keyword: var(--light-color-ts-keyword); + --color-ts-project: var(--light-color-ts-project); + --color-ts-module: var(--light-color-ts-module); + --color-ts-namespace: var(--light-color-ts-namespace); + --color-ts-enum: var(--light-color-ts-enum); + --color-ts-enum-member: var(--light-color-ts-enum-member); + --color-ts-variable: var(--light-color-ts-variable); + --color-ts-function: var(--light-color-ts-function); + --color-ts-class: var(--light-color-ts-class); + --color-ts-interface: var(--light-color-ts-interface); + --color-ts-constructor: var(--light-color-ts-constructor); + --color-ts-property: var(--light-color-ts-property); + --color-ts-method: var(--light-color-ts-method); + --color-ts-reference: var(--light-color-ts-reference); + --color-ts-call-signature: var(--light-color-ts-call-signature); + --color-ts-index-signature: var(--light-color-ts-index-signature); + --color-ts-constructor-signature: var( + --light-color-ts-constructor-signature + ); + --color-ts-parameter: var(--light-color-ts-parameter); + --color-ts-type-parameter: var(--light-color-ts-type-parameter); + --color-ts-accessor: var(--light-color-ts-accessor); + --color-ts-get-signature: var(--light-color-ts-get-signature); + --color-ts-set-signature: var(--light-color-ts-set-signature); + --color-ts-type-alias: var(--light-color-ts-type-alias); + --color-document: var(--light-color-document); + + --external-icon: var(--light-external-icon); + --color-scheme: var(--light-color-scheme); +} + +:root[data-theme="dark"] { + --color-background: var(--dark-color-background); + --color-background-secondary: var(--dark-color-background-secondary); + --color-background-warning: var(--dark-color-background-warning); + --color-warning-text: var(--dark-color-warning-text); + --color-icon-background: var(--dark-color-icon-background); + --color-accent: var(--dark-color-accent); + --color-active-menu-item: var(--dark-color-active-menu-item); + --color-text: var(--dark-color-text); + --color-text-aside: var(--dark-color-text-aside); + --color-icon-text: var(--dark-color-icon-text); + + --color-comment-tag-text: var(--dark-color-text); + --color-comment-tag: var(--dark-color-background); + + --color-link: var(--dark-color-link); + --color-focus-outline: var(--dark-color-focus-outline); + + --color-ts-keyword: var(--dark-color-ts-keyword); + --color-ts-project: var(--dark-color-ts-project); + --color-ts-module: var(--dark-color-ts-module); + --color-ts-namespace: var(--dark-color-ts-namespace); + --color-ts-enum: var(--dark-color-ts-enum); + --color-ts-enum-member: var(--dark-color-ts-enum-member); + --color-ts-variable: var(--dark-color-ts-variable); + --color-ts-function: var(--dark-color-ts-function); + --color-ts-class: var(--dark-color-ts-class); + --color-ts-interface: var(--dark-color-ts-interface); + --color-ts-constructor: var(--dark-color-ts-constructor); + --color-ts-property: var(--dark-color-ts-property); + --color-ts-method: var(--dark-color-ts-method); + --color-ts-reference: var(--dark-color-ts-reference); + --color-ts-call-signature: var(--dark-color-ts-call-signature); + --color-ts-index-signature: var(--dark-color-ts-index-signature); + --color-ts-constructor-signature: var( + --dark-color-ts-constructor-signature + ); + --color-ts-parameter: var(--dark-color-ts-parameter); + --color-ts-type-parameter: var(--dark-color-ts-type-parameter); + --color-ts-accessor: var(--dark-color-ts-accessor); + --color-ts-get-signature: var(--dark-color-ts-get-signature); + --color-ts-set-signature: var(--dark-color-ts-set-signature); + --color-ts-type-alias: var(--dark-color-ts-type-alias); + --color-document: var(--dark-color-document); + + --external-icon: var(--dark-external-icon); + --color-scheme: var(--dark-color-scheme); +} + +*:focus-visible, +.tsd-accordion-summary:focus-visible svg { + outline: 2px solid var(--color-focus-outline); +} + +.always-visible, +.always-visible .tsd-signatures { + display: inherit !important; +} + +h1, +h2, +h3, +h4, +h5, +h6 { + line-height: 1.2; +} + +h1 { + font-size: 1.875rem; + margin: 0.67rem 0; +} + +h2 { + font-size: 1.5rem; + margin: 0.83rem 0; +} + +h3 { + font-size: 1.25rem; + margin: 1rem 0; +} + +h4 { + font-size: 1.05rem; + margin: 1.33rem 0; +} + +h5 { + font-size: 1rem; + margin: 1.5rem 0; +} + +h6 { + font-size: 0.875rem; + margin: 2.33rem 0; +} + +dl, +menu, +ol, +ul { + margin: 1em 0; +} + +dd { + margin: 0 0 0 40px; +} + +.container { + max-width: 1700px; + padding: 0 2rem; +} + +/* Footer */ +footer { + border-top: 1px solid var(--color-accent); + padding-top: 1rem; + padding-bottom: 1rem; + max-height: 3.5rem; +} +footer > p { + margin: 0 1em; +} + +.container-main { + margin: 0 auto; + /* toolbar, footer, margin */ + min-height: calc(100vh - 41px - 56px - 4rem); +} + +@keyframes fade-in { + from { + opacity: 0; + } + to { + opacity: 1; + } +} +@keyframes fade-out { + from { + opacity: 1; + visibility: visible; + } + to { + opacity: 0; + } +} +@keyframes fade-in-delayed { + 0% { + opacity: 0; + } + 33% { + opacity: 0; + } + 100% { + opacity: 1; + } +} +@keyframes fade-out-delayed { + 0% { + opacity: 1; + visibility: visible; + } + 66% { + opacity: 0; + } + 100% { + opacity: 0; + } +} +@keyframes pop-in-from-right { + from { + transform: translate(100%, 0); + } + to { + transform: translate(0, 0); + } +} +@keyframes pop-out-to-right { + from { + transform: translate(0, 0); + visibility: visible; + } + to { + transform: translate(100%, 0); + } +} +body { + background: var(--color-background); + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Noto Sans", + Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji"; + font-size: 16px; + color: var(--color-text); +} + +a { + color: var(--color-link); + text-decoration: none; +} +a:hover { + text-decoration: underline; +} +a.external[target="_blank"] { + background-image: var(--external-icon); + background-position: top 3px right; + background-repeat: no-repeat; + padding-right: 13px; +} +a.tsd-anchor-link { + color: var(--color-text); +} + +code, +pre { + font-family: Menlo, Monaco, Consolas, "Courier New", monospace; + padding: 0.2em; + margin: 0; + font-size: 0.875rem; + border-radius: 0.8em; +} + +pre { + position: relative; + white-space: pre-wrap; + word-wrap: break-word; + padding: 10px; + border: 1px solid var(--color-accent); +} +pre code { + padding: 0; + font-size: 100%; +} +pre > button { + position: absolute; + top: 10px; + right: 10px; + opacity: 0; + transition: opacity 0.1s; + box-sizing: border-box; +} +pre:hover > button, +pre > button.visible { + opacity: 1; +} + +blockquote { + margin: 1em 0; + padding-left: 1em; + border-left: 4px solid gray; +} + +.tsd-typography { + line-height: 1.333em; +} +.tsd-typography ul { + list-style: square; + padding: 0 0 0 20px; + margin: 0; +} +.tsd-typography .tsd-index-panel h3, +.tsd-index-panel .tsd-typography h3, +.tsd-typography h4, +.tsd-typography h5, +.tsd-typography h6 { + font-size: 1em; +} +.tsd-typography h5, +.tsd-typography h6 { + font-weight: normal; +} +.tsd-typography p, +.tsd-typography ul, +.tsd-typography ol { + margin: 1em 0; +} +.tsd-typography table { + border-collapse: collapse; + border: none; +} +.tsd-typography td, +.tsd-typography th { + padding: 6px 13px; + border: 1px solid var(--color-accent); +} +.tsd-typography thead, +.tsd-typography tr:nth-child(even) { + background-color: var(--color-background-secondary); +} + +.tsd-breadcrumb { + margin: 0; + padding: 0; + color: var(--color-text-aside); +} +.tsd-breadcrumb a { + color: var(--color-text-aside); + text-decoration: none; +} +.tsd-breadcrumb a:hover { + text-decoration: underline; +} +.tsd-breadcrumb li { + display: inline; +} +.tsd-breadcrumb li:after { + content: " / "; +} + +.tsd-comment-tags { + display: flex; + flex-direction: column; +} +dl.tsd-comment-tag-group { + display: flex; + align-items: center; + overflow: hidden; + margin: 0.5em 0; +} +dl.tsd-comment-tag-group dt { + display: flex; + margin-right: 0.5em; + font-size: 0.875em; + font-weight: normal; +} +dl.tsd-comment-tag-group dd { + margin: 0; +} +code.tsd-tag { + padding: 0.25em 0.4em; + border: 0.1em solid var(--color-accent); + margin-right: 0.25em; + font-size: 70%; +} +h1 code.tsd-tag:first-of-type { + margin-left: 0.25em; +} + +dl.tsd-comment-tag-group dd:before, +dl.tsd-comment-tag-group dd:after { + content: " "; +} +dl.tsd-comment-tag-group dd pre, +dl.tsd-comment-tag-group dd:after { + clear: both; +} +dl.tsd-comment-tag-group p { + margin: 0; +} + +.tsd-panel.tsd-comment .lead { + font-size: 1.1em; + line-height: 1.333em; + margin-bottom: 2em; +} +.tsd-panel.tsd-comment .lead:last-child { + margin-bottom: 0; +} + +.tsd-filter-visibility h4 { + font-size: 1rem; + padding-top: 0.75rem; + padding-bottom: 0.5rem; + margin: 0; +} +.tsd-filter-item:not(:last-child) { + margin-bottom: 0.5rem; +} +.tsd-filter-input { + display: flex; + width: -moz-fit-content; + width: fit-content; + align-items: center; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + cursor: pointer; +} +.tsd-filter-input input[type="checkbox"] { + cursor: pointer; + position: absolute; + width: 1.5em; + height: 1.5em; + opacity: 0; +} +.tsd-filter-input input[type="checkbox"]:disabled { + pointer-events: none; +} +.tsd-filter-input svg { + cursor: pointer; + width: 1.5em; + height: 1.5em; + margin-right: 0.5em; + border-radius: 0.33em; + /* Leaving this at full opacity breaks event listeners on Firefox. + Don't remove unless you know what you're doing. */ + opacity: 0.99; +} +.tsd-filter-input input[type="checkbox"]:focus-visible + svg { + outline: 2px solid var(--color-focus-outline); +} +.tsd-checkbox-background { + fill: var(--color-accent); +} +input[type="checkbox"]:checked ~ svg .tsd-checkbox-checkmark { + stroke: var(--color-text); +} +.tsd-filter-input input:disabled ~ svg > .tsd-checkbox-background { + fill: var(--color-background); + stroke: var(--color-accent); + stroke-width: 0.25rem; +} +.tsd-filter-input input:disabled ~ svg > .tsd-checkbox-checkmark { + stroke: var(--color-accent); +} + +.settings-label { + font-weight: bold; + text-transform: uppercase; + display: inline-block; +} + +.tsd-filter-visibility .settings-label { + margin: 0.75rem 0 0.5rem 0; +} + +.tsd-theme-toggle .settings-label { + margin: 0.75rem 0.75rem 0 0; +} + +.tsd-hierarchy { + list-style: square; + margin: 0; +} +.tsd-hierarchy .target { + font-weight: bold; +} + +.tsd-full-hierarchy:not(:last-child) { + margin-bottom: 1em; + padding-bottom: 1em; + border-bottom: 1px solid var(--color-accent); +} +.tsd-full-hierarchy, +.tsd-full-hierarchy ul { + list-style: none; + margin: 0; + padding: 0; +} +.tsd-full-hierarchy ul { + padding-left: 1.5rem; +} +.tsd-full-hierarchy a { + padding: 0.25rem 0 !important; + font-size: 1rem; + display: inline-flex; + align-items: center; + color: var(--color-text); +} + +.tsd-panel-group.tsd-index-group { + margin-bottom: 0; +} +.tsd-index-panel .tsd-index-list { + list-style: none; + line-height: 1.333em; + margin: 0; + padding: 0.25rem 0 0 0; + overflow: hidden; + display: grid; + grid-template-columns: repeat(3, 1fr); + column-gap: 1rem; + grid-template-rows: auto; +} +@media (max-width: 1024px) { + .tsd-index-panel .tsd-index-list { + grid-template-columns: repeat(2, 1fr); + } +} +@media (max-width: 768px) { + .tsd-index-panel .tsd-index-list { + grid-template-columns: repeat(1, 1fr); + } +} +.tsd-index-panel .tsd-index-list li { + -webkit-page-break-inside: avoid; + -moz-page-break-inside: avoid; + -ms-page-break-inside: avoid; + -o-page-break-inside: avoid; + page-break-inside: avoid; +} + +.tsd-flag { + display: inline-block; + padding: 0.25em 0.4em; + border-radius: 4px; + color: var(--color-comment-tag-text); + background-color: var(--color-comment-tag); + text-indent: 0; + font-size: 75%; + line-height: 1; + font-weight: normal; +} + +.tsd-anchor { + position: relative; + top: -100px; +} + +.tsd-member { + position: relative; +} +.tsd-member .tsd-anchor + h3 { + display: flex; + align-items: center; + margin-top: 0; + margin-bottom: 0; + border-bottom: none; +} + +.tsd-navigation.settings { + margin: 1rem 0; +} +.tsd-navigation > a, +.tsd-navigation .tsd-accordion-summary { + width: calc(100% - 0.25rem); + display: flex; + align-items: center; +} +.tsd-navigation a, +.tsd-navigation summary > span, +.tsd-page-navigation a { + display: flex; + width: calc(100% - 0.25rem); + align-items: center; + padding: 0.25rem; + color: var(--color-text); + text-decoration: none; + box-sizing: border-box; +} +.tsd-navigation a.current, +.tsd-page-navigation a.current { + background: var(--color-active-menu-item); +} +.tsd-navigation a:hover, +.tsd-page-navigation a:hover { + text-decoration: underline; +} +.tsd-navigation ul, +.tsd-page-navigation ul { + margin-top: 0; + margin-bottom: 0; + padding: 0; + list-style: none; +} +.tsd-navigation li, +.tsd-page-navigation li { + padding: 0; + max-width: 100%; +} +.tsd-navigation .tsd-nav-link { + display: none; +} +.tsd-nested-navigation { + margin-left: 3rem; +} +.tsd-nested-navigation > li > details { + margin-left: -1.5rem; +} +.tsd-small-nested-navigation { + margin-left: 1.5rem; +} +.tsd-small-nested-navigation > li > details { + margin-left: -1.5rem; +} + +.tsd-page-navigation-section { + margin-left: 10px; +} +.tsd-page-navigation-section > summary { + padding: 0.25rem; +} +.tsd-page-navigation-section > div { + margin-left: 20px; +} +.tsd-page-navigation ul { + padding-left: 1.75rem; +} + +#tsd-sidebar-links a { + margin-top: 0; + margin-bottom: 0.5rem; + line-height: 1.25rem; +} +#tsd-sidebar-links a:last-of-type { + margin-bottom: 0; +} + +a.tsd-index-link { + padding: 0.25rem 0 !important; + font-size: 1rem; + line-height: 1.25rem; + display: inline-flex; + align-items: center; + color: var(--color-text); +} +.tsd-accordion-summary { + list-style-type: none; /* hide marker on non-safari */ + outline: none; /* broken on safari, so just hide it */ +} +.tsd-accordion-summary::-webkit-details-marker { + display: none; /* hide marker on safari */ +} +.tsd-accordion-summary, +.tsd-accordion-summary a { + -moz-user-select: none; + -webkit-user-select: none; + -ms-user-select: none; + user-select: none; + + cursor: pointer; +} +.tsd-accordion-summary a { + width: calc(100% - 1.5rem); +} +.tsd-accordion-summary > * { + margin-top: 0; + margin-bottom: 0; + padding-top: 0; + padding-bottom: 0; +} +.tsd-accordion .tsd-accordion-summary > svg { + margin-left: 0.25rem; + vertical-align: text-top; +} +.tsd-index-content > :not(:first-child) { + margin-top: 0.75rem; +} +.tsd-index-heading { + margin-top: 1.5rem; + margin-bottom: 0.75rem; +} + +.tsd-no-select { + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} +.tsd-kind-icon { + margin-right: 0.5rem; + width: 1.25rem; + height: 1.25rem; + min-width: 1.25rem; + min-height: 1.25rem; +} +.tsd-signature > .tsd-kind-icon { + margin-right: 0.8rem; +} + +.tsd-panel { + margin-bottom: 2.5rem; +} +.tsd-panel.tsd-member { + margin-bottom: 4rem; +} +.tsd-panel:empty { + display: none; +} +.tsd-panel > h1, +.tsd-panel > h2, +.tsd-panel > h3 { + margin: 1.5rem -1.5rem 0.75rem -1.5rem; + padding: 0 1.5rem 0.75rem 1.5rem; +} +.tsd-panel > h1.tsd-before-signature, +.tsd-panel > h2.tsd-before-signature, +.tsd-panel > h3.tsd-before-signature { + margin-bottom: 0; + border-bottom: none; +} + +.tsd-panel-group { + margin: 2rem 0; +} +.tsd-panel-group.tsd-index-group { + margin: 2rem 0; +} +.tsd-panel-group.tsd-index-group details { + margin: 2rem 0; +} +.tsd-panel-group > .tsd-accordion-summary { + margin-bottom: 1rem; +} + +#tsd-search { + transition: background-color 0.2s; +} +#tsd-search .title { + position: relative; + z-index: 2; +} +#tsd-search .field { + position: absolute; + left: 0; + top: 0; + right: 2.5rem; + height: 100%; +} +#tsd-search .field input { + box-sizing: border-box; + position: relative; + top: -50px; + z-index: 1; + width: 100%; + padding: 0 10px; + opacity: 0; + outline: 0; + border: 0; + background: transparent; + color: var(--color-text); +} +#tsd-search .field label { + position: absolute; + overflow: hidden; + right: -40px; +} +#tsd-search .field input, +#tsd-search .title, +#tsd-toolbar-links a { + transition: opacity 0.2s; +} +#tsd-search .results { + position: absolute; + visibility: hidden; + top: 40px; + width: 100%; + margin: 0; + padding: 0; + list-style: none; + box-shadow: 0 0 4px rgba(0, 0, 0, 0.25); +} +#tsd-search .results li { + background-color: var(--color-background); + line-height: initial; + padding: 4px; +} +#tsd-search .results li:nth-child(even) { + background-color: var(--color-background-secondary); +} +#tsd-search .results li.state { + display: none; +} +#tsd-search .results li.current:not(.no-results), +#tsd-search .results li:hover:not(.no-results) { + background-color: var(--color-accent); +} +#tsd-search .results a { + display: flex; + align-items: center; + padding: 0.25rem; + box-sizing: border-box; +} +#tsd-search .results a:before { + top: 10px; +} +#tsd-search .results span.parent { + color: var(--color-text-aside); + font-weight: normal; +} +#tsd-search.has-focus { + background-color: var(--color-accent); +} +#tsd-search.has-focus .field input { + top: 0; + opacity: 1; +} +#tsd-search.has-focus .title, +#tsd-search.has-focus #tsd-toolbar-links a { + z-index: 0; + opacity: 0; +} +#tsd-search.has-focus .results { + visibility: visible; +} +#tsd-search.loading .results li.state.loading { + display: block; +} +#tsd-search.failure .results li.state.failure { + display: block; +} + +#tsd-toolbar-links { + position: absolute; + top: 0; + right: 2rem; + height: 100%; + display: flex; + align-items: center; + justify-content: flex-end; +} +#tsd-toolbar-links a { + margin-left: 1.5rem; +} +#tsd-toolbar-links a:hover { + text-decoration: underline; +} + +.tsd-signature { + margin: 0 0 1rem 0; + padding: 1rem 0.5rem; + border: 1px solid var(--color-accent); + font-family: Menlo, Monaco, Consolas, "Courier New", monospace; + font-size: 14px; + overflow-x: auto; +} + +.tsd-signature-keyword { + color: var(--color-ts-keyword); + font-weight: normal; +} + +.tsd-signature-symbol { + color: var(--color-text-aside); + font-weight: normal; +} + +.tsd-signature-type { + font-style: italic; + font-weight: normal; +} + +.tsd-signatures { + padding: 0; + margin: 0 0 1em 0; + list-style-type: none; +} +.tsd-signatures .tsd-signature { + margin: 0; + border-color: var(--color-accent); + border-width: 1px 0; + transition: background-color 0.1s; +} +.tsd-signatures .tsd-index-signature:not(:last-child) { + margin-bottom: 1em; +} +.tsd-signatures .tsd-index-signature .tsd-signature { + border-width: 1px; +} +.tsd-description .tsd-signatures .tsd-signature { + border-width: 1px; +} + +ul.tsd-parameter-list, +ul.tsd-type-parameter-list { + list-style: square; + margin: 0; + padding-left: 20px; +} +ul.tsd-parameter-list > li.tsd-parameter-signature, +ul.tsd-type-parameter-list > li.tsd-parameter-signature { + list-style: none; + margin-left: -20px; +} +ul.tsd-parameter-list h5, +ul.tsd-type-parameter-list h5 { + font-size: 16px; + margin: 1em 0 0.5em 0; +} +.tsd-sources { + margin-top: 1rem; + font-size: 0.875em; +} +.tsd-sources a { + color: var(--color-text-aside); + text-decoration: underline; +} +.tsd-sources ul { + list-style: none; + padding: 0; +} + +.tsd-page-toolbar { + position: sticky; + z-index: 1; + top: 0; + left: 0; + width: 100%; + color: var(--color-text); + background: var(--color-background-secondary); + border-bottom: 1px var(--color-accent) solid; + transition: transform 0.3s ease-in-out; +} +.tsd-page-toolbar a { + color: var(--color-text); + text-decoration: none; +} +.tsd-page-toolbar a.title { + font-weight: bold; +} +.tsd-page-toolbar a.title:hover { + text-decoration: underline; +} +.tsd-page-toolbar .tsd-toolbar-contents { + display: flex; + justify-content: space-between; + height: 2.5rem; + margin: 0 auto; +} +.tsd-page-toolbar .table-cell { + position: relative; + white-space: nowrap; + line-height: 40px; +} +.tsd-page-toolbar .table-cell:first-child { + width: 100%; +} +.tsd-page-toolbar .tsd-toolbar-icon { + box-sizing: border-box; + line-height: 0; + padding: 12px 0; +} + +.tsd-widget { + display: inline-block; + overflow: hidden; + opacity: 0.8; + height: 40px; + transition: + opacity 0.1s, + background-color 0.2s; + vertical-align: bottom; + cursor: pointer; +} +.tsd-widget:hover { + opacity: 0.9; +} +.tsd-widget.active { + opacity: 1; + background-color: var(--color-accent); +} +.tsd-widget.no-caption { + width: 40px; +} +.tsd-widget.no-caption:before { + margin: 0; +} + +.tsd-widget.options, +.tsd-widget.menu { + display: none; +} +input[type="checkbox"] + .tsd-widget:before { + background-position: -120px 0; +} +input[type="checkbox"]:checked + .tsd-widget:before { + background-position: -160px 0; +} + +img { + max-width: 100%; +} + +.tsd-anchor-icon { + display: inline-flex; + align-items: center; + margin-left: 0.5rem; + vertical-align: middle; + color: var(--color-text); +} + +.tsd-anchor-icon svg { + width: 1em; + height: 1em; + visibility: hidden; +} + +.tsd-anchor-link:hover > .tsd-anchor-icon svg { + visibility: visible; +} + +.deprecated { + text-decoration: line-through !important; +} + +.warning { + padding: 1rem; + color: var(--color-warning-text); + background: var(--color-background-warning); +} + +.tsd-kind-project { + color: var(--color-ts-project); +} +.tsd-kind-module { + color: var(--color-ts-module); +} +.tsd-kind-namespace { + color: var(--color-ts-namespace); +} +.tsd-kind-enum { + color: var(--color-ts-enum); +} +.tsd-kind-enum-member { + color: var(--color-ts-enum-member); +} +.tsd-kind-variable { + color: var(--color-ts-variable); +} +.tsd-kind-function { + color: var(--color-ts-function); +} +.tsd-kind-class { + color: var(--color-ts-class); +} +.tsd-kind-interface { + color: var(--color-ts-interface); +} +.tsd-kind-constructor { + color: var(--color-ts-constructor); +} +.tsd-kind-property { + color: var(--color-ts-property); +} +.tsd-kind-method { + color: var(--color-ts-method); +} +.tsd-kind-reference { + color: var(--color-ts-reference); +} +.tsd-kind-call-signature { + color: var(--color-ts-call-signature); +} +.tsd-kind-index-signature { + color: var(--color-ts-index-signature); +} +.tsd-kind-constructor-signature { + color: var(--color-ts-constructor-signature); +} +.tsd-kind-parameter { + color: var(--color-ts-parameter); +} +.tsd-kind-type-parameter { + color: var(--color-ts-type-parameter); +} +.tsd-kind-accessor { + color: var(--color-ts-accessor); +} +.tsd-kind-get-signature { + color: var(--color-ts-get-signature); +} +.tsd-kind-set-signature { + color: var(--color-ts-set-signature); +} +.tsd-kind-type-alias { + color: var(--color-ts-type-alias); +} + +/* if we have a kind icon, don't color the text by kind */ +.tsd-kind-icon ~ span { + color: var(--color-text); +} + +* { + scrollbar-width: thin; + scrollbar-color: var(--color-accent) var(--color-icon-background); +} + +*::-webkit-scrollbar { + width: 0.75rem; +} + +*::-webkit-scrollbar-track { + background: var(--color-icon-background); +} + +*::-webkit-scrollbar-thumb { + background-color: var(--color-accent); + border-radius: 999rem; + border: 0.25rem solid var(--color-icon-background); +} + +/* mobile */ +@media (max-width: 769px) { + .tsd-widget.options, + .tsd-widget.menu { + display: inline-block; + } + + .container-main { + display: flex; + } + html .col-content { + float: none; + max-width: 100%; + width: 100%; + } + html .col-sidebar { + position: fixed !important; + overflow-y: auto; + -webkit-overflow-scrolling: touch; + z-index: 1024; + top: 0 !important; + bottom: 0 !important; + left: auto !important; + right: 0 !important; + padding: 1.5rem 1.5rem 0 0; + width: 75vw; + visibility: hidden; + background-color: var(--color-background); + transform: translate(100%, 0); + } + html .col-sidebar > *:last-child { + padding-bottom: 20px; + } + html .overlay { + content: ""; + display: block; + position: fixed; + z-index: 1023; + top: 0; + left: 0; + right: 0; + bottom: 0; + background-color: rgba(0, 0, 0, 0.75); + visibility: hidden; + } + + .to-has-menu .overlay { + animation: fade-in 0.4s; + } + + .to-has-menu .col-sidebar { + animation: pop-in-from-right 0.4s; + } + + .from-has-menu .overlay { + animation: fade-out 0.4s; + } + + .from-has-menu .col-sidebar { + animation: pop-out-to-right 0.4s; + } + + .has-menu body { + overflow: hidden; + } + .has-menu .overlay { + visibility: visible; + } + .has-menu .col-sidebar { + visibility: visible; + transform: translate(0, 0); + display: flex; + flex-direction: column; + gap: 1.5rem; + max-height: 100vh; + padding: 1rem 2rem; + } + .has-menu .tsd-navigation { + max-height: 100%; + } + #tsd-toolbar-links { + display: none; + } + .tsd-navigation .tsd-nav-link { + display: flex; + } +} + +/* one sidebar */ +@media (min-width: 770px) { + .container-main { + display: grid; + grid-template-columns: minmax(0, 1fr) minmax(0, 2fr); + grid-template-areas: "sidebar content"; + margin: 2rem auto; + } + + .col-sidebar { + grid-area: sidebar; + } + .col-content { + grid-area: content; + padding: 0 1rem; + } +} +@media (min-width: 770px) and (max-width: 1399px) { + .col-sidebar { + max-height: calc(100vh - 2rem - 42px); + overflow: auto; + position: sticky; + top: 42px; + padding-top: 1rem; + } + .site-menu { + margin-top: 1rem; + } +} + +/* two sidebars */ +@media (min-width: 1200px) { + .container-main { + grid-template-columns: minmax(0, 1fr) minmax(0, 2.5fr) minmax(0, 20rem); + grid-template-areas: "sidebar content toc"; + } + + .col-sidebar { + display: contents; + } + + .page-menu { + grid-area: toc; + padding-left: 1rem; + } + .site-menu { + grid-area: sidebar; + } + + .site-menu { + margin-top: 1rem; + } + + .page-menu, + .site-menu { + max-height: calc(100vh - 2rem - 42px); + overflow: auto; + position: sticky; + top: 42px; + } +} diff --git a/classes/CachedDns.html b/classes/CachedDns.html new file mode 100644 index 000000000..68dff040b --- /dev/null +++ b/classes/CachedDns.html @@ -0,0 +1,3 @@ +CachedDns | mockttp

Class CachedDns

Constructors

Properties

Constructors

Properties

lookup: DnsLookupFunction = ...
diff --git a/classes/MockttpAdminServer.html b/classes/MockttpAdminServer.html new file mode 100644 index 000000000..f955d120e --- /dev/null +++ b/classes/MockttpAdminServer.html @@ -0,0 +1,20 @@ +MockttpAdminServer | mockttp

Class MockttpAdminServer

Hierarchy (view full)

Constructors

Accessors

Methods

Constructors

Accessors

  • get ruleParameterKeys(): string[]
  • Returns string[]

Methods

  • Subscribe to hear when each mock ession is started. The listener is provided the +session plugin data, which can be used to log session startup, add side-effects that +run elsewhere at startup, or preconfigure every started plugin in addition ways.

    +

    This is run synchronously when a session is created, after it has fully started +but before its been returned to remote clients.

    +

    Parameters

    Returns void

  • Subscribe to hear when a mock session is stopped. The listener is provided with +the state of all plugins that are about to be stopped. This can be used to log +mock session shutdown, add side-effects that run elsewhere at shutdown, or clean +up after sessions in other ways.

    +

    This is run synchronously immediately before the session is shutdown, whilst all +its state is still available, and before remote clients have had any response to +their request. This is also run before shutdown when the admin server itself is +cleanly shutdown with adminServer.stop().

    +

    Parameters

    Returns void

  • Parameters

    • listenOptions: number | {
          host: string;
          port: number;
      } = DEFAULT_ADMIN_SERVER_PORT

    Returns Promise<void>

diff --git a/classes/MockttpPluggableAdmin.MockttpAdminPlugin.html b/classes/MockttpPluggableAdmin.MockttpAdminPlugin.html new file mode 100644 index 000000000..0e2b93595 --- /dev/null +++ b/classes/MockttpPluggableAdmin.MockttpAdminPlugin.html @@ -0,0 +1,9 @@ +MockttpAdminPlugin | mockttp

Implements

Constructors

Properties

schema: DocumentNode = MockttpSchema

Methods

diff --git a/classes/MockttpServer.html b/classes/MockttpServer.html new file mode 100644 index 000000000..41a3923f4 --- /dev/null +++ b/classes/MockttpServer.html @@ -0,0 +1,351 @@ +MockttpServer | mockttp

Class MockttpServer

A in-process Mockttp implementation. This starts servers on the local machine in the +current process, and exposes methods to directly manage them.

+

This class does not work in browsers, as it expects to be able to start HTTP servers.

+

Hierarchy

  • AbstractMockttp
    • MockttpServer

Implements

Events

  • Subscribe to hear about request details as soon as the initial request details +(method, path & headers) are received, without waiting for the body.

    +

    This is only useful in some niche use cases, such as logging all requests seen +by the server independently of the rules defined.

    +

    The callback will be called asynchronously from request handling. This function +returns a promise, and the callback is not guaranteed to be registered until +the promise is resolved.

    +

    Parameters

    • event: "request-initiated"
    • callback: ((req: Request) => void)
        • (req): void
        • Parameters

          Returns void

    Returns Promise<void>

  • Subscribe to hear about request details once the request is fully received.

    +

    This is only useful in some niche use cases, such as logging all requests seen +by the server independently of the rules defined.

    +

    The callback will be called asynchronously from request handling. This function +returns a promise, and the callback is not guaranteed to be registered until +the promise is resolved.

    +

    Parameters

    Returns Promise<void>

  • Subscribe to hear about response details when the response is completed.

    +

    This is only useful in some niche use cases, such as logging all requests seen +by the server independently of the rules defined.

    +

    The callback will be called asynchronously from request handling. This function +returns a promise, and the callback is not guaranteed to be registered until +the promise is resolved.

    +

    Parameters

    Returns Promise<void>

  • Subscribe to hear about websocket connection requests. This event fires when the +initial WebSocket request is completed, regardless of whether the request is +accepted.

    +

    This is only useful in some niche use cases, such as logging all websockets seen +by the server independently of the rules defined.

    +

    The callback will be called asynchronously from request handling. This function +returns a promise, and the callback is not guaranteed to be registered until +the promise is resolved.

    +

    Parameters

    • event: "abort"
    • callback: ((req: Request) => void)
        • (req): void
        • Parameters

          Returns void

    Returns Promise<void>

  • Subscribe to hear about websocket connection upgrades. This event fires when a +WebSocket request is accepted, returning the HTTP response body that was sent +before the WebSocket stream starts.

    +

    This is only useful in some niche use cases, such as logging all websockets seen +by the server independently of the rules defined.

    +

    The callback will be called asynchronously from request handling. This function +returns a promise, and the callback is not guaranteed to be registered until +the promise is resolved.

    +

    Parameters

    Returns Promise<void>

  • Subscribe to hear about websocket messages received by Mockttp from its downstream +websocket clients. This event fires whenever any data is received on an open +mocked WebSocket.

    +

    This is only useful in some niche use cases, such as logging all websockets seen +by the server independently of the rules defined.

    +

    The callback will be called asynchronously from request handling. This function +returns a promise, and the callback is not guaranteed to be registered until +the promise is resolved.

    +

    Parameters

    Returns Promise<void>

  • Subscribe to hear about websocket messages sent by Mockttp to its downstream +websocket clients. This event fires whenever any data is sent on an open +mocked WebSocket.

    +

    This is only useful in some niche use cases, such as logging all websockets seen +by the server independently of the rules defined.

    +

    The callback will be called asynchronously from request handling. This function +returns a promise, and the callback is not guaranteed to be registered until +the promise is resolved.

    +

    Parameters

    Returns Promise<void>

  • Subscribe to hear when a websocket connection is closed. This fires only for clean +websocket shutdowns, after the websocket was initially accepted. If the connection +is closed uncleanly, an 'abort' event will fire instead. If the websocket was +initially rejected explicitly, a 'response' event (with the rejecting response) will +fire instead.

    +

    This is only useful in some niche use cases, such as logging all websockets seen +by the server independently of the rules defined.

    +

    The callback will be called asynchronously from request handling. This function +returns a promise, and the callback is not guaranteed to be registered until +the promise is resolved.

    +

    Parameters

    Returns Promise<void>

  • Subscribe to hear about requests that are aborted before the request or +response is fully completed.

    +

    This is only useful in some niche use cases, such as logging all requests seen +by the server independently of the rules defined.

    +

    The callback will be called asynchronously from request handling. This function +returns a promise, and the callback is not guaranteed to be registered until +the promise is resolved.

    +

    Parameters

    Returns Promise<void>

  • Subscribe to hear about TLS connections that are passed through the proxy without +interception, due to the tlsPassthrough HTTPS option.

    +

    This is only useful in some niche use cases, such as logging all requests seen +by the server, independently of the rules defined.

    +

    The callback will be called asynchronously from connection handling. This function +returns a promise, and the callback is not guaranteed to be registered until +the promise is resolved.

    +

    Parameters

    Returns Promise<void>

  • Subscribe to hear about closure of TLS connections that were passed through the +proxy without interception, due to the tlsPassthrough HTTPS option.

    +

    This is only useful in some niche use cases, such as logging all requests seen +by the server, independently of the rules defined.

    +

    The callback will be called asynchronously from connection handling. This function +returns a promise, and the callback is not guaranteed to be registered until +the promise is resolved.

    +

    Parameters

    Returns Promise<void>

  • Subscribe to hear about requests that start a TLS handshake, but fail to complete it. +Not all clients report TLS errors explicitly, so this event fires for explicitly +reported TLS errors, and for TLS connections that are immediately closed with no +data sent.

    +

    This is typically useful to detect clients who aren't correctly configured to trust +the configured HTTPS certificate. The callback is given the host name provided +by the client via SNI, if SNI was used (it almost always is).

    +

    This is only useful in some niche use cases, such as logging all requests seen +by the server, independently of the rules defined.

    +

    The callback will be called asynchronously from request handling. This function +returns a promise, and the callback is not guaranteed to be registered until +the promise is resolved.

    +

    Parameters

    • event: "tls-client-error"
    • callback: ((req: TlsRequest) => void)

    Returns Promise<void>

  • Subscribe to hear about requests that fail before successfully sending their +initial parameters (the request line & headers). This will fire for requests +that drop connections early, send invalid or too-long headers, or aren't +correctly parseable in some form.

    +

    This is typically useful to detect clients who aren't correctly configured. +The callback is given an object containing the request (as we were best +able to parse it) and either the error response returned, or 'aborted' +if the connection was disconnected before the server could respond.

    +

    This is only useful in some niche use cases, such as logging all requests +seen by the server, independently of the rules defined.

    +

    The callback will be called asynchronously from request handling. This function +returns a promise, and the callback is not guaranteed to be registered until +the promise is resolved.

    +

    Parameters

    • event: "client-error"
    • callback: ((error: ClientError) => void)

    Returns Promise<void>

  • Some rules may emit events with metadata about request processing. For example, +passthrough rules may emit events about upstream server interactions.

    +

    You can listen to rule-event to hear about all these events. When emitted, +this will include the id of the request being processed, the id of the rule +that fired the event, the type of the event, and the event data itself.

    +

    This is only useful in some niche use cases, such as logging all proxied upstream +requests made by the server, separately from the client connections handled.

    +

    The callback will be called asynchronously from request handling. This function +returns a promise, and the callback is not guaranteed to be registered until +the promise is resolved.

    +

    Type Parameters

    • T = unknown

    Parameters

    • event: "rule-event"
    • callback: ((event: RuleEvent<T>) => void)
        • (event): void
        • Parameters

          Returns void

    Returns Promise<void>

Manual rule definition

  • Adds the given HTTP request rule to the server.

    +

    This is a convenient alias for calling addRequestRules with one rule, +and extracting the first endpoint result.

    +

    This API is only useful if you're manually building rules, rather than +using RequestRuleBuilder, and is only for special cases. This approach may +be necessary if you need to configure all your rules in one place to +enable them elsewhere/later.

    +

    Parameters

    Returns Promise<MockedEndpoint>

  • Adds the given HTTP request rules to the server.

    +

    This API is only useful if you're manually building rules, rather than +using RequestRuleBuilder, and is only for special cases. This approach may +be necessary if you need to configure all your rules in one place to +enable them elsewhere/later.

    +

    Parameters

    Returns Promise<ServerMockedEndpoint[]>

  • Adds the given websocket rule to the server.

    +

    This is a convenient alias for calling addWebSocketRules with one rule, +and extracting the first endpoint result.

    +

    This API is only useful if you're manually building rules, rather than +using RequestRuleBuilder, and is only for special cases. This approach may +be necessary if you need to configure all your rules in one place to +enable them elsewhere/later.

    +

    Parameters

    Returns Promise<MockedEndpoint>

  • Adds the given websocket rules to the server.

    +

    This API is only useful if you're manually building rules, rather than +using RequestRuleBuilder, and is only for special cases. This approach may +be necessary if you need to configure all your rules in one place to +enable them elsewhere/later.

    +

    Parameters

    Returns Promise<ServerMockedEndpoint[]>

  • Set the given HTTP request rules as the only request rules on the server, +replacing any existing rules (except websocket rules).

    +

    This API is only useful if you're manually building rules, rather than +using RequestRuleBuilder, and is only for special cases. This approach may +be necessary if you need to configure all your rules in one place to +enable them elsewhere/later.

    +

    Parameters

    Returns Promise<ServerMockedEndpoint[]>

  • Set the given websocket rules as the only websocket rules on the server, +replacing all existing websocket rules (but leaving normal rules untouched).

    +

    This API is only useful if you're manually building rules, rather than +using RequestRuleBuilder, and is only for special cases. This approach may +be necessary if you need to configure all your rules in one place to +enable them elsewhere/later.

    +

    Parameters

    Returns Promise<ServerMockedEndpoint[]>

Metadata

  • get port(): number
  • The port the server is running on.

    +

    This will throw an error if read before the server is started.

    +

    Returns number

  • get proxyEnv(): ProxyEnvConfig
  • The environment variables typically needed to use this server as a proxy, in a format you +can add to your environment straight away.

    +

    This will throw an error if read before the server is started.

    +
    process.env = Object.assign(process.env, mockServer.proxyEnv)
    +
    + +

    Returns ProxyEnvConfig

  • get url(): string
  • The root URL of the server.

    +

    This will throw an error if read before the server is started.

    +

    Returns string

  • List the names of the rule parameters available for rule definitions. These +parameters are defined by the admin server. This list can be used in some +advanced use cases to confirm beforehand that the parameters a client wishes to +reference are available.

    +

    Only relevant to remote/browser Mockttp usage. Servers created directly without any +admin server will never have rule parameters defined, and so this method will always +return an empty list.

    +

    Returns Promise<never[]>

  • The URL for a given path on the server.

    +

    This will throw an error if read before the server is started.

    +

    Parameters

    • path: string

    Returns string

Mock HTTP requests

  • Get a builder for a mock rule that will match any requests on any path.

    +

    This only matches traditional HTTP requests, not websockets, which are handled +separately. To match websockets, use .forAnyWebSocket().

    +

    Returns RequestRuleBuilder

  • Get a builder for a mock rule that will match DELETE requests for the given path. +If no path is specified, this matches all DELETE requests.

    +

    The path can be either a string, or a regular expression to match against. +Path matching always ignores query parameters. To match query parameters, +use .withQuery({ a: 'b' }) or withExactQuery('?a=b').

    +

    There are a few supported matching formats:

    +
      +
    • Relative string paths (/abc) will be compared only to the request's path, +independent of the host & protocol, ignoring query params.
    • +
    • Absolute string paths with no protocol (localhost:8000/abc) will be +compared to the URL independent of the protocol, ignoring query params.
    • +
    • Fully absolute string paths (http://localhost:8000/abc) will be compared +to entire URL, ignoring query params.
    • +
    • Regular expressions can match the absolute URL: /^http://localhost:8000/abc$/
    • +
    • Regular expressions can also match the path: /^/abc/
    • +
    +

    Parameters

    • Optionalurl: string | RegExp

    Returns RequestRuleBuilder

  • Get a builder for a mock rule that will match GET requests for the given path. +If no path is specified, this matches all GET requests.

    +

    The path can be either a string, or a regular expression to match against. +Path matching always ignores query parameters. To match query parameters, +use .withQuery({ a: 'b' }) or withExactQuery('?a=b').

    +

    There are a few supported matching formats:

    +
      +
    • Relative string paths (/abc) will be compared only to the request's path, +independent of the host & protocol, ignoring query params.
    • +
    • Absolute string paths with no protocol (localhost:8000/abc) will be +compared to the URL independent of the protocol, ignoring query params.
    • +
    • Fully absolute string paths (http://localhost:8000/abc) will be compared +to entire URL, ignoring query params.
    • +
    • Regular expressions can match the absolute URL: /^http://localhost:8000/abc$/
    • +
    • Regular expressions can also match the path: /^/abc/
    • +
    +

    Parameters

    • Optionalurl: string | RegExp

    Returns RequestRuleBuilder

  • Get a builder for a mock rule that will match HEAD requests for the given path. +If no path is specified, this matches all HEAD requests.

    +

    The path can be either a string, or a regular expression to match against. +Path matching always ignores query parameters. To match query parameters, +use .withQuery({ a: 'b' }) or withExactQuery('?a=b').

    +

    There are a few supported matching formats:

    +
      +
    • Relative string paths (/abc) will be compared only to the request's path, +independent of the host & protocol, ignoring query params.
    • +
    • Absolute string paths with no protocol (localhost:8000/abc) will be +compared to the URL independent of the protocol, ignoring query params.
    • +
    • Fully absolute string paths (http://localhost:8000/abc) will be compared +to entire URL, ignoring query params.
    • +
    • Regular expressions can match the absolute URL: /^http://localhost:8000/abc$/
    • +
    • Regular expressions can also match the path: /^/abc/
    • +
    +

    Parameters

    • Optionalurl: string | RegExp

    Returns RequestRuleBuilder

  • Match JSON-RPC requests, optionally matching a given method and/or params.

    +

    If no method or params are specified, this will match all JSON-RPC requests.

    +

    Params are matched flexibly, using the same logic as .withJsonBodyIncluding(), +so only the included fields are checked and other extra fields are ignored

    +

    Parameters

    • match: {
          method?: string;
          params?: any;
      } = {}
      • Optionalmethod?: string
      • Optionalparams?: any

    Returns RequestRuleBuilder

  • Get a builder for a mock rule that will match OPTIONS requests for the given path.

    +

    The path can be either a string, or a regular expression to match against. +Path matching always ignores query parameters. To match query parameters, +use .withQuery({ a: 'b' }) or withExactQuery('?a=b').

    +

    There are a few supported matching formats:

    +
      +
    • Relative string paths (/abc) will be compared only to the request's path, +independent of the host & protocol, ignoring query params.
    • +
    • Absolute string paths with no protocol (localhost:8000/abc) will be +compared to the URL independent of the protocol, ignoring query params.
    • +
    • Fully absolute string paths (http://localhost:8000/abc) will be compared +to entire URL, ignoring query params.
    • +
    • Regular expressions can match the absolute URL: /^http://localhost:8000/abc$/
    • +
    • Regular expressions can also match the path: /^/abc/
    • +
    +

    This can only be used if the cors option has been set to false.

    +

    If cors is true (the default when using a remote client, e.g. in the browser), +then the mock server automatically handles OPTIONS requests to ensure requests +to the server are allowed by clients observing CORS rules.

    +

    You can pass {cors: false} to getLocal/getRemote to disable this behaviour, +but if you're testing in a browser you will need to ensure you mock all OPTIONS +requests appropriately so that the browser allows your other requests to be sent.

    +

    Parameters

    • Optionalurl: string | RegExp

    Returns RequestRuleBuilder

  • Get a builder for a mock rule that will match PATCH requests for the given path. +If no path is specified, this matches all PATCH requests.

    +

    The path can be either a string, or a regular expression to match against. +Path matching always ignores query parameters. To match query parameters, +use .withQuery({ a: 'b' }) or withExactQuery('?a=b').

    +

    There are a few supported matching formats:

    +
      +
    • Relative string paths (/abc) will be compared only to the request's path, +independent of the host & protocol, ignoring query params.
    • +
    • Absolute string paths with no protocol (localhost:8000/abc) will be +compared to the URL independent of the protocol, ignoring query params.
    • +
    • Fully absolute string paths (http://localhost:8000/abc) will be compared +to entire URL, ignoring query params.
    • +
    • Regular expressions can match the absolute URL: /^http://localhost:8000/abc$/
    • +
    • Regular expressions can also match the path: /^/abc/
    • +
    +

    Parameters

    • Optionalurl: string | RegExp

    Returns RequestRuleBuilder

  • Get a builder for a mock rule that will match POST requests for the given path. +If no path is specified, this matches all POST requests.

    +

    The path can be either a string, or a regular expression to match against. +Path matching always ignores query parameters. To match query parameters, +use .withQuery({ a: 'b' }) or withExactQuery('?a=b').

    +

    There are a few supported matching formats:

    +
      +
    • Relative string paths (/abc) will be compared only to the request's path, +independent of the host & protocol, ignoring query params.
    • +
    • Absolute string paths with no protocol (localhost:8000/abc) will be +compared to the URL independent of the protocol, ignoring query params.
    • +
    • Fully absolute string paths (http://localhost:8000/abc) will be compared +to entire URL, ignoring query params.
    • +
    • Regular expressions can match the absolute URL: /^http://localhost:8000/abc$/
    • +
    • Regular expressions can also match the path: /^/abc/
    • +
    +

    Parameters

    • Optionalurl: string | RegExp

    Returns RequestRuleBuilder

  • Get a builder for a mock rule that will match PUT requests for the given path. +If no path is specified, this matches all PUT requests.

    +

    The path can be either a string, or a regular expression to match against. +Path matching always ignores query parameters. To match query parameters, +use .withQuery({ a: 'b' }) or withExactQuery('?a=b').

    +

    There are a few supported matching formats:

    +
      +
    • Relative string paths (/abc) will be compared only to the request's path, +independent of the host & protocol, ignoring query params.
    • +
    • Absolute string paths with no protocol (localhost:8000/abc) will be +compared to the URL independent of the protocol, ignoring query params.
    • +
    • Fully absolute string paths (http://localhost:8000/abc) will be compared +to entire URL, ignoring query params.
    • +
    • Regular expressions can match the absolute URL: /^http://localhost:8000/abc$/
    • +
    • Regular expressions can also match the path: /^/abc/
    • +
    +

    Parameters

    • Optionalurl: string | RegExp

    Returns RequestRuleBuilder

  • Get a builder for a fallback mock rule that will match any unmatched requests +on any path.

    +

    Fallback rules act like any other rule, but they only match if there is no +existing normal rule that matches the request, or if all existing rules have +an explicit execution limit (like once()) that has been completed.

    +

    Returns RequestRuleBuilder

Mock websockets

Other

Setup

  • Reset the stored rules and subscriptions. Most of the time it's better to start & stop +the server instead, but this can be useful in some special cases.

    +

    Returns void

  • Start a mock server.

    +

    Specify a fixed port if you need one.

    +

    If you don't, a random port will be chosen, which you can get later with .port, +or by using .url and .urlFor(path) to generate your URLs automatically.

    +

    If you need to allow port selection, but in a specific range, pass a +{ startPort, endPort } pair to define the allowed (inclusive) range.

    +

    Parameters

    Returns Promise<void>

diff --git a/classes/PluggableAdmin.AdminClient.html b/classes/PluggableAdmin.AdminClient.html new file mode 100644 index 000000000..b6572f937 --- /dev/null +++ b/classes/PluggableAdmin.AdminClient.html @@ -0,0 +1,24 @@ +AdminClient | mockttp

Class AdminClient<Plugins>

A bare admin server client. This is not intended for general use, but can be useful when +building admin server plugins to mock non-HTTP protocols and other advanced use cases.

+

For normal usage of Mockttp, you should use Mockttp.getRemote() instead, to get a Mockttp +remote client, which wraps this class with the full Mockttp API for mocking HTTP.

+

This is part of Mockttp's experimental 'pluggable admin' API. It may change +unpredictably, even in minor releases.

+

Type Parameters

  • Plugins extends {
        [key: string]: AdminPlugin<any, any>;
    }

Hierarchy

  • EventEmitter
    • AdminClient

Constructors

Accessors

Methods

  • List the names of the rule parameters defined by the admin server. This can be +used in some advanced use cases to confirm that the parameters a client wishes to +reference are available.

    +

    Only defined for remote clients.

    +

    Returns Promise<string[]>

  • Type Parameters

    Parameters

    Returns Promise<{
        [n in string | number | symbol]: Queries[n<n>] extends AdminQuery<any, R>
            ? R
            : never
    }>

diff --git a/classes/PluggableAdmin.AdminServer.html b/classes/PluggableAdmin.AdminServer.html new file mode 100644 index 000000000..c5a99965e --- /dev/null +++ b/classes/PluggableAdmin.AdminServer.html @@ -0,0 +1,20 @@ +AdminServer | mockttp

Class AdminServer<Plugins>

Type Parameters

  • Plugins extends {
        [key: string]: AdminPlugin<any, any>;
    }

Hierarchy (view full)

Constructors

Accessors

Methods

Constructors

Accessors

Methods

  • Subscribe to hear when each mock ession is started. The listener is provided the +session plugin data, which can be used to log session startup, add side-effects that +run elsewhere at startup, or preconfigure every started plugin in addition ways.

    +

    This is run synchronously when a session is created, after it has fully started +but before its been returned to remote clients.

    +

    Parameters

    • event: "mock-session-started"
    • listener: ((plugins: Plugins, sessionId: string) => void)
        • (plugins, sessionId): void
        • Parameters

          Returns void

    Returns void

  • Subscribe to hear when a mock session is stopped. The listener is provided with +the state of all plugins that are about to be stopped. This can be used to log +mock session shutdown, add side-effects that run elsewhere at shutdown, or clean +up after sessions in other ways.

    +

    This is run synchronously immediately before the session is shutdown, whilst all +its state is still available, and before remote clients have had any response to +their request. This is also run before shutdown when the admin server itself is +cleanly shutdown with adminServer.stop().

    +

    Parameters

    • event: "mock-session-stopping"
    • listener: ((plugins: Plugins, sessionId: string) => void)
        • (plugins, sessionId): void
        • Parameters

          Returns void

    Returns void

  • Parameters

    • listenOptions: number | {
          host: string;
          port: number;
      } = DEFAULT_ADMIN_SERVER_PORT

    Returns Promise<void>

diff --git a/classes/PluggableAdmin.SchemaIntrospector.html b/classes/PluggableAdmin.SchemaIntrospector.html new file mode 100644 index 000000000..e9d9b68bc --- /dev/null +++ b/classes/PluggableAdmin.SchemaIntrospector.html @@ -0,0 +1,7 @@ +SchemaIntrospector | mockttp

Constructors

Methods

diff --git a/classes/PluggableAdmin.Serialization.ClientServerChannel.html b/classes/PluggableAdmin.Serialization.ClientServerChannel.html new file mode 100644 index 000000000..074d25fe3 --- /dev/null +++ b/classes/PluggableAdmin.Serialization.ClientServerChannel.html @@ -0,0 +1,8 @@ +ClientServerChannel | mockttp

Hierarchy

  • Duplex
    • ClientServerChannel

Constructors

Properties

Methods

Constructors

Properties

topicId: string

Methods

diff --git a/classes/PluggableAdmin.Serialization.Serializable.html b/classes/PluggableAdmin.Serialization.Serializable.html new file mode 100644 index 000000000..5c1c3fbec --- /dev/null +++ b/classes/PluggableAdmin.Serialization.Serializable.html @@ -0,0 +1,4 @@ +Serializable | mockttp
diff --git a/classes/RequestRule.html b/classes/RequestRule.html new file mode 100644 index 000000000..374325178 --- /dev/null +++ b/classes/RequestRule.html @@ -0,0 +1,11 @@ +RequestRule | mockttp

Class RequestRule

Hierarchy (view full)

Implements

Implemented by

Constructors

Properties

id: string
priority: number
requestCount: number = 0
requests: Promise<CompletedRequest>[]

Methods

  • Parameters

    • withoutExactCompletion: boolean = false

    Returns string

  • Parameters

    • request: OngoingRequest
    • response: OngoingResponse
    • options: {
          emitEventCallback?: ((type: string, event: unknown) => void);
          record: boolean;
      }
      • OptionalemitEventCallback?: ((type: string, event: unknown) => void)
          • (type, event): void
          • Parameters

            • type: string
            • event: unknown

            Returns void

      • record: boolean

    Returns Promise<void>

  • Parameters

    • req: OngoingRequest
    • res: OngoingResponse
    • options: {
          emitEventCallback?: ((type: string, event: unknown) => void);
          record?: boolean;
      }
      • OptionalemitEventCallback?: ((type: string, event: unknown) => void)
          • (type, event): void
          • Parameters

            • type: string
            • event: unknown

            Returns void

      • Optionalrecord?: boolean

    Returns Promise<void>

diff --git a/classes/RequestRuleBuilder.html b/classes/RequestRuleBuilder.html new file mode 100644 index 000000000..ceac5d08f --- /dev/null +++ b/classes/RequestRuleBuilder.html @@ -0,0 +1,229 @@ +RequestRuleBuilder | mockttp

Class RequestRuleBuilder

RequestRuleBuilder

+

A builder for defining mock rules. Create one using a method like +.forGet(path) or .forPost(path) on a Mockttp instance, then call +whatever methods you'd like here to define more precise request +matching behaviour, control how the request is handled, and how +many times this rule should be applied.

+

When you're done, call a .thenX() method to register the configured rule +with the server. These return a promise for a MockedEndpoint, which can be +used to verify the details of the requests matched by the rule.

+

This returns a promise because rule registration can be asynchronous, +either when using a remote server or testing in the browser. Wait for the +promise returned by .thenX() methods to guarantee that the rule has taken +effect before sending requests to it.

+

Hierarchy

  • BaseRuleBuilder
    • RequestRuleBuilder

Completion

  • Run this rule forever, for all matching requests

    +

    Returns this

  • Run this rule only once, for the first matching request

    +

    Returns this

  • Run this rule three times, for the first three matching requests

    +

    Returns this

  • Run this rule the given number of times, for the first matching requests

    +

    Parameters

    • n: number

    Returns this

  • Run this rule twice, for the first two matching requests

    +

    Returns this

Matching

  • Match only requests sent to the given host, i.e. the full hostname plus +port included in the request.

    +

    This can behave somewhat confusingly when matching against the default +ports for a protocol (i.e. 80/443), or when specifying a hostname here +without specifying the port. In those cases it's usually better to use +forHostname and/or forPort instead to explicit match the content you're +interested in.

    +

    Parameters

    • host: string

    Returns this

  • Match only requests sent to the given hostname, ignoring the port.

    +

    Parameters

    • hostname: string

    Returns this

  • Match only requests sent to the given port.

    +

    Parameters

    • port: number

    Returns this

  • Match only requests whose bodies either exactly match the given string +(if a string is passed) or whose bodies match a regular expression +(if a regex is passed).

    +

    Parameters

    • content: string | RegExp

    Returns this

  • Match only requests whose bodies include the given string.

    +

    Parameters

    • content: string

    Returns this

  • Match only requests that include the given cookies

    +

    Parameters

    • cookie: {
          [key: string]: string;
      }
      • [key: string]: string

    Returns this

  • Match only requests that include the exact query string provided. +The query string must start with a ? or be entirely empty.

    +

    Parameters

    • query: string

    Returns this

  • Match only requests whose bodies include the given URL-encoded form data.

    +

    Parameters

    • formData: {
          [key: string]: string;
      }
      • [key: string]: string

    Returns this

  • Match only requests that include the given headers.

    +

    Parameters

    • headers: {
          [key: string]: string;
      }
      • [key: string]: string

    Returns this

  • Match only requests whose bodies exactly match the given +object, when parsed as JSON.

    +

    Note that this only tests that the body can be parsed +as JSON - it doesn't require a content-type header.

    +

    Parameters

    • json: {}

      Returns this

    • Match only requests whose bodies match (contain equivalent +values, ignoring extra values) the given object, when +parsed as JSON. Matching behaviour is the same as Lodash's +_.isMatch method.

      +

      Note that this only tests that the body can be parsed +as JSON - it doesn't require a content-type header.

      +

      Parameters

      • json: {}

        Returns this

      • Match only requests whose bodies include the given multipart form data.

        +

        This can take any number of form parts to look for. Each part is specified +with MultipartFieldMatchCondition object containing one or more of +name (string), filename (string) and content (string or buffer) as +fields to match against in the form data.

        +

        Requests are matched if all conditions match at least one part in the +request's form data.

        +

        Parameters

        Returns this

      • Match only requests sent with the given protocol.

        +

        Parameters

        • protocol:
              | "http"
              | "https"
              | "ws"
              | "wss"

        Returns this

      • Match only requests that include the given query parameters.

        +

        Parameters

        • query: {
              [key: string]: string | number | (string | number)[];
          }
          • [key: string]: string | number | (string | number)[]

        Returns this

      • Match only requests whose absolute url matches the given RegExp.

        +

        Parameters

        • pattern: RegExp

        Returns this

      Other

      • Set the rule priority. Any matching rule with a higher priority will always +take precedence over a matching lower-priority rule, unless the higher rule +has an explicit completion check (like .once()) that has already been +completed.

        +

        The RulePriority enum defines the standard values useful for most cases, +but any positive number may be used for advanced configurations.

        +

        In many cases it may be simpler to use forUnmatchedRequest() to set a fallback +rule explicitly, rather than manually setting the priority here.

        +

        Parameters

        • priority: number

        Returns this

      Responses

      • Call the given callback for any matched requests that are received, +and build a response from the result.

        +

        The callback should return a response object with the fields as +defined by CallbackResponseMessageResult to define the response, +or the string 'close' to immediately close the connection. The callback +can be asynchronous, in which case it should return this value wrapped +in a promise.

        +

        If the callback throws an exception, the server will return a 500 +with the exception message.

        +

        Calling this method registers the rule with the server, so it +starts to handle requests.

        +

        This method returns a promise that resolves with a mocked endpoint. +Wait for the promise to confirm that the rule has taken effect +before sending requests to be matched. The mocked endpoint +can be used to assert on the requests matched by this rule.

        +

        Returns Promise<MockedEndpoint>

      • Close connections that match this rule immediately, without +any status code or response.

        +

        Calling this method registers the rule with the server, so it +starts to handle requests.

        +

        This method returns a promise that resolves with a mocked endpoint. +Wait for the promise to confirm that the rule has taken effect +before sending requests to be matched. The mocked endpoint +can be used to assert on the requests matched by this rule.

        +

        Returns Promise<MockedEndpoint>

      • Forward matched requests on to the specified forwardToUrl. The url +specified must not include a path. Otherwise, an error is thrown. +The path portion of the original request url is used instead.

        +

        The url may optionally contain a protocol. If it does, it will override +the protocol (and potentially the port, if unspecified) of the request. +If no protocol is specified, the protocol (and potentially the port) +of the original request URL will be used instead.

        +

        This method takes options to configure how the request is passed +through. See PassThroughHandlerOptions for the full details +of the options available.

        +

        Calling this method registers the rule with the server, so it +starts to handle requests.

        +

        This method returns a promise that resolves with a mocked endpoint. +Wait for the promise to confirm that the rule has taken effect +before sending requests to be matched. The mocked endpoint +can be used to assert on the requests matched by this rule.

        +

        Parameters

        Returns Promise<MockedEndpoint>

      • Reply to matched requests with a given status code and the current contents +of a given file. The status message and headers can also be optionally +provided here. If no headers are provided, only the standard required +headers are set.

        +

        The file is read near-fresh for each request, and external changes to its +content will be immediately appear in all subsequent requests.

        +

        If one string argument is provided, it's used as the body file path. +If two are provided (even if one is empty), then 1st is the status message, +and the 2nd the body. This matches the argument order of thenReply().

        +

        Calling this method registers the rule with the server, so it +starts to handle requests.

        +

        This method returns a promise that resolves with a mocked endpoint. +Wait for the promise to confirm that the rule has taken effect +before sending requests to be matched. The mocked endpoint +can be used to assert on the requests matched by this rule.

        +

        Parameters

        • status: number
        • filePath: string
        • Optionalheaders: Headers

        Returns Promise<MockedEndpoint>

      • Parameters

        • status: number
        • statusMessage: string
        • filePath: string
        • Optionalheaders: Headers

        Returns Promise<MockedEndpoint>

      • Reply to matched requests with the given status & JSON and (optionally) +extra headers.

        +

        This method is (approximately) shorthand for: +server.forGet(...).thenReply(status, JSON.stringify(data), { 'Content-Type': 'application/json' })

        +

        Calling this method registers the rule with the server, so it +starts to handle requests.

        +

        This method returns a promise that resolves with a mocked endpoint. +Wait for the promise to confirm that the rule has taken effect +before sending requests to be matched. The mocked endpoint +can be used to assert on the requests matched by this rule.

        +

        Parameters

        • status: number
        • data: object
        • headers: Headers = {}

        Returns Promise<MockedEndpoint>

      • Pass matched requests through to their real destination. This works +for proxied requests only, direct requests will be rejected with +an error.

        +

        This method takes options to configure how the request is passed +through. See PassThroughHandlerOptions for the full details +of the options available.

        +

        Calling this method registers the rule with the server, so it +starts to handle requests.

        +

        This method returns a promise that resolves with a mocked endpoint. +Wait for the promise to confirm that the rule has taken effect +before sending requests to be matched. The mocked endpoint +can be used to assert on the requests matched by this rule.

        +

        Parameters

        Returns Promise<MockedEndpoint>

      • Reply to matched requests with a given status code and (optionally) status message, +body, headers & trailers.

        +

        If one string argument is provided, it's used as the body. If two are +provided (even if one is empty) then the 1st is the status message, and +the 2nd the body. If no headers are provided, only the standard required +headers are set, e.g. Date and Transfer-Encoding.

        +

        Calling this method registers the rule with the server, so it +starts to handle requests.

        +

        This method returns a promise that resolves with a mocked endpoint. +Wait for the promise to confirm that the rule has taken effect +before sending requests to be matched. The mocked endpoint +can be used to assert on the requests matched by this rule.

        +

        Parameters

        • status: number
        • Optionaldata: string | Buffer
        • Optionalheaders: Headers
        • Optionaltrailers: Trailers

        Returns Promise<MockedEndpoint>

      • Parameters

        • status: number
        • statusMessage: string
        • data: string | Buffer
        • Optionalheaders: Headers
        • Optionaltrailers: Trailers

        Returns Promise<MockedEndpoint>

      • Reset connections that match this rule immediately, sending a TCP +RST packet directly, without any status code or response, and without +cleanly closing the TCP connection.

        +

        This is only supported in Node.js versions (>=16.17, >=18.3.0, or +later), where net.Socket includes the resetAndDestroy method.

        +

        Calling this method registers the rule with the server, so it +starts to handle requests.

        +

        This method returns a promise that resolves with a mocked endpoint. +Wait for the promise to confirm that the rule has taken effect +before sending requests to be matched. The mocked endpoint +can be used to assert on the requests matched by this rule.

        +

        Returns Promise<MockedEndpoint>

      • Send a failing error JSON-RPC response to a JSON-RPC request. The error data +can be any JSON-serializable value. If a matching request is received that +is not a valid JSON-RPC request, it will be rejected with an HTTP error.

        +

        Parameters

        • error: any

        Returns Promise<MockedEndpoint>

      • Send a successful JSON-RPC response to a JSON-RPC request. The response data +can be any JSON-serializable value. If a matching request is received that +is not a valid JSON-RPC request, it will be rejected with an HTTP error.

        +

        Parameters

        • result: any

        Returns Promise<MockedEndpoint>

      • Respond immediately with the given status (and optionally, headers), +and then stream the given stream directly as the response body.

        +

        Note that streams can typically only be read once, and as such +this rule will only successfully trigger once. Subsequent requests +will receive a 500 and an explanatory error message. To mock +repeated requests with streams, create multiple streams and mock +them independently.

        +

        Calling this method registers the rule with the server, so it +starts to handle requests.

        +

        This method returns a promise that resolves with a mocked endpoint. +Wait for the promise to confirm that the rule has taken effect +before sending requests to be matched. The mocked endpoint +can be used to assert on the requests matched by this rule.

        +

        Parameters

        • status: number
        • stream: Readable
        • Optionalheaders: Headers

        Returns Promise<MockedEndpoint>

      • Hold open connections that match this rule, but never respond +with anything at all, typically causing a timeout on the client side.

        +

        Calling this method registers the rule with the server, so it +starts to handle requests.

        +

        This method returns a promise that resolves with a mocked endpoint. +Wait for the promise to confirm that the rule has taken effect +before sending requests to be matched. The mocked endpoint +can be used to assert on the requests matched by this rule.

        +

        Returns Promise<MockedEndpoint>

      diff --git a/classes/ServerMockedEndpoint.html b/classes/ServerMockedEndpoint.html new file mode 100644 index 000000000..a64bdc658 --- /dev/null +++ b/classes/ServerMockedEndpoint.html @@ -0,0 +1,24 @@ +ServerMockedEndpoint | mockttp

      Class ServerMockedEndpoint

      A mocked endpoint provides methods to see the current state of +a mock rule.

      +

      Implements

      Constructors

      Accessors

      id +

      Methods

      Constructors

      Accessors

      Methods

      • Get the requests that this endpoint has seen so far.

        +

        This method returns a promise, which resolves with the requests seen +up until now, once all ongoing requests have terminated. The returned +lists are immutable, so won't change if more requests arrive in future. +Call getSeenRequests again later to get an updated list.

        +

        Requests are included here once the response is completed, even if the request +itself failed, the responses failed or exceptions are thrown elsewhere. To +watch for errors or detailed response info, look at the various server.on(event) +methods.

        +

        Returns Promise<CompletedRequest[]>

      • Reports whether this endpoint is still pending: if it either hasn't seen the +specified number of requests (if one was specified e.g. with .twice()) +or if it hasn't seen at least one request, by default.

        +

        This method returns a promise, which resolves with the result once all +ongoing requests have terminated.

        +

        Returns Promise<boolean>

      • Returns a string representation of an object.

        +

        Parameters

        • withoutExactCompletion: boolean = false

        Returns string

      diff --git a/classes/WebSocketRule.html b/classes/WebSocketRule.html new file mode 100644 index 000000000..a9e0b6bc2 --- /dev/null +++ b/classes/WebSocketRule.html @@ -0,0 +1,11 @@ +WebSocketRule | mockttp

      Class WebSocketRule

      Hierarchy (view full)

      Implements

      Implemented by

      Constructors

      Properties

      id: string
      priority: number
      requestCount: number = 0
      requests: Promise<CompletedRequest>[]

      Methods

      diff --git a/classes/WebSocketRuleBuilder.html b/classes/WebSocketRuleBuilder.html new file mode 100644 index 000000000..a51680672 --- /dev/null +++ b/classes/WebSocketRuleBuilder.html @@ -0,0 +1,179 @@ +WebSocketRuleBuilder | mockttp

      Class WebSocketRuleBuilder

      WebSocketRuleBuilder

      +

      A builder for defining websocket mock rules. Create one using +.forAnyWebSocket(path) on a Mockttp instance, then call whatever +methods you'd like here to define more precise matching behaviour, +control how the connection is handled, and how many times this +rule should be applied.

      +

      When you're done, call a .thenX() method to register the configured rule +with the server. These return a promise for a MockedEndpoint, which can be +used to verify the details of the requests matched by the rule.

      +

      This returns a promise because rule registration can be asynchronous, +either when using a remote server or testing in the browser. Wait for the +promise returned by .thenX() methods to guarantee that the rule has taken +effect before sending requests to it.

      +

      Hierarchy

      • BaseRuleBuilder
        • WebSocketRuleBuilder

      Completion

      • Run this rule forever, for all matching requests

        +

        Returns this

      • Run this rule only once, for the first matching request

        +

        Returns this

      • Run this rule three times, for the first three matching requests

        +

        Returns this

      • Run this rule the given number of times, for the first matching requests

        +

        Parameters

        • n: number

        Returns this

      • Run this rule twice, for the first two matching requests

        +

        Returns this

      Matching

      • Match only requests sent to the given host, i.e. the full hostname plus +port included in the request.

        +

        This can behave somewhat confusingly when matching against the default +ports for a protocol (i.e. 80/443), or when specifying a hostname here +without specifying the port. In those cases it's usually better to use +forHostname and/or forPort instead to explicit match the content you're +interested in.

        +

        Parameters

        • host: string

        Returns this

      • Match only requests sent to the given hostname, ignoring the port.

        +

        Parameters

        • hostname: string

        Returns this

      • Match only requests sent to the given port.

        +

        Parameters

        • port: number

        Returns this

      • Match only requests whose bodies either exactly match the given string +(if a string is passed) or whose bodies match a regular expression +(if a regex is passed).

        +

        Parameters

        • content: string | RegExp

        Returns this

      • Match only requests whose bodies include the given string.

        +

        Parameters

        • content: string

        Returns this

      • Match only requests that include the given cookies

        +

        Parameters

        • cookie: {
              [key: string]: string;
          }
          • [key: string]: string

        Returns this

      • Match only requests that include the exact query string provided. +The query string must start with a ? or be entirely empty.

        +

        Parameters

        • query: string

        Returns this

      • Match only requests whose bodies include the given URL-encoded form data.

        +

        Parameters

        • formData: {
              [key: string]: string;
          }
          • [key: string]: string

        Returns this

      • Match only requests that include the given headers.

        +

        Parameters

        • headers: {
              [key: string]: string;
          }
          • [key: string]: string

        Returns this

      • Match only requests whose bodies exactly match the given +object, when parsed as JSON.

        +

        Note that this only tests that the body can be parsed +as JSON - it doesn't require a content-type header.

        +

        Parameters

        • json: {}

          Returns this

        • Match only requests whose bodies match (contain equivalent +values, ignoring extra values) the given object, when +parsed as JSON. Matching behaviour is the same as Lodash's +_.isMatch method.

          +

          Note that this only tests that the body can be parsed +as JSON - it doesn't require a content-type header.

          +

          Parameters

          • json: {}

            Returns this

          • Match only requests whose bodies include the given multipart form data.

            +

            This can take any number of form parts to look for. Each part is specified +with MultipartFieldMatchCondition object containing one or more of +name (string), filename (string) and content (string or buffer) as +fields to match against in the form data.

            +

            Requests are matched if all conditions match at least one part in the +request's form data.

            +

            Parameters

            Returns this

          • Match only requests sent with the given protocol.

            +

            Parameters

            • protocol:
                  | "http"
                  | "https"
                  | "ws"
                  | "wss"

            Returns this

          • Match only requests that include the given query parameters.

            +

            Parameters

            • query: {
                  [key: string]: string | number | (string | number)[];
              }
              • [key: string]: string | number | (string | number)[]

            Returns this

          • Match only requests whose absolute url matches the given RegExp.

            +

            Parameters

            • pattern: RegExp

            Returns this

          Other

          • Set the rule priority. Any matching rule with a higher priority will always +take precedence over a matching lower-priority rule, unless the higher rule +has an explicit completion check (like .once()) that has already been +completed.

            +

            The RulePriority enum defines the standard values useful for most cases, +but any positive number may be used for advanced configurations.

            +

            In many cases it may be simpler to use forUnmatchedRequest() to set a fallback +rule explicitly, rather than manually setting the priority here.

            +

            Parameters

            • priority: number

            Returns this

          Responses

          • Close connections that match this rule immediately, without accepting +the socket or sending any other response.

            +

            Calling this method registers the rule with the server, so it +starts to handle requests.

            +

            This method returns a promise that resolves with a mocked endpoint. +Wait for the promise to confirm that the rule has taken effect +before sending requests to be matched. The mocked endpoint +can be used to assert on the requests matched by this rule.

            +

            Returns Promise<MockedEndpoint>

          • Accept incoming WebSocket connections, and echo every message +received on the WebSocket back to the client.

            +

            Calling this method registers the rule with the server, so it +starts to handle requests.

            +

            This method returns a promise that resolves with a mocked endpoint. +Wait for the promise to confirm that the rule has taken effect +before sending requests to be matched. The mocked endpoint +can be used to assert on the requests matched by this rule.

            +

            Returns Promise<MockedEndpoint>

          • Forward matched websockets on to the specified forwardToUrl. The url +specified must not include a path or an error will be thrown. +The path portion of the original request url is used instead.

            +

            The url may optionally contain a protocol. If it does, it will override +the protocol (and potentially the port, if unspecified) of the request. +If no protocol is specified, the protocol (and potentially the port) +of the original request URL will be used instead.

            +

            This method takes options to configure how the request is passed +through. See PassThroughWebSocketHandlerOptions for the full +details of the options available.

            +

            Calling this method registers the rule with the server, so it +starts to handle requests.

            +

            This method returns a promise that resolves with a mocked endpoint. +Wait for the promise to confirm that the rule has taken effect +before sending requests to be matched. The mocked endpoint +can be used to assert on the requests matched by this rule.

            +

            Parameters

            Returns Promise<MockedEndpoint>

          • Accept incoming WebSocket connections, and simply listen to +incoming messages without ever sending anything in return.

            +

            Calling this method registers the rule with the server, so it +starts to handle requests.

            +

            This method returns a promise that resolves with a mocked endpoint. +Wait for the promise to confirm that the rule has taken effect +before sending requests to be matched. The mocked endpoint +can be used to assert on the requests matched by this rule.

            +

            Returns Promise<MockedEndpoint>

          • Pass matched websockets through to their real destination. This works +for proxied requests only, and direct requests will be rejected with +an error.

            +

            This method takes options to configure how the request is passed +through. See PassThroughWebSocketHandlerOptions for the full +details of the options available.

            +

            Calling this method registers the rule with the server, so it +starts to handle requests.

            +

            This method returns a promise that resolves with a mocked endpoint. +Wait for the promise to confirm that the rule has taken effect +before sending requests to be matched. The mocked endpoint +can be used to assert on the requests matched by this rule.

            +

            Parameters

            Returns Promise<MockedEndpoint>

          • Rejects connections, sending an HTTP response with the given +status, message and body, to explicitly refuse the WebSocket +handshake.

            +

            Calling this method registers the rule with the server, so it +starts to handle requests.

            +

            This method returns a promise that resolves with a mocked endpoint. +Wait for the promise to confirm that the rule has taken effect +before sending requests to be matched. The mocked endpoint +can be used to assert on the requests matched by this rule.

            +

            Parameters

            • statusCode: number
            • OptionalstatusMessage: string
            • Optionalheaders: Headers
            • Optionalbody: string | Buffer

            Returns Promise<MockedEndpoint>

          • Reset connections that match this rule immediately, sending a TCP +RST packet directly, without accepting the socket or sending any +other response, and without cleanly closing the TCP connection.

            +

            This is only supported in Node.js versions (>=16.17, >=18.3.0, or +later), where net.Socket includes the resetAndDestroy method.

            +

            Calling this method registers the rule with the server, so it +starts to handle requests.

            +

            This method returns a promise that resolves with a mocked endpoint. +Wait for the promise to confirm that the rule has taken effect +before sending requests to be matched. The mocked endpoint +can be used to assert on the requests matched by this rule.

            +

            Returns Promise<MockedEndpoint>

          • Hold open connections that match this rule, but never respond +with anything at all, typically causing a timeout on the client side.

            +

            Calling this method registers the rule with the server, so it +starts to handle requests.

            +

            This method returns a promise that resolves with a mocked endpoint. +Wait for the promise to confirm that the rule has taken effect +before sending requests to be matched. The mocked endpoint +can be used to assert on the requests matched by this rule.

            +

            Returns Promise<MockedEndpoint>

          diff --git a/classes/completionCheckers.Always.html b/classes/completionCheckers.Always.html new file mode 100644 index 000000000..641b6a3ca --- /dev/null +++ b/classes/completionCheckers.Always.html @@ -0,0 +1,6 @@ +Always | mockttp

          Hierarchy (view full)

          Implements

          Constructors

          Properties

          Methods

          Constructors

          Properties

          type: "always" = 'always'

          Methods

          diff --git a/classes/completionCheckers.NTimes.html b/classes/completionCheckers.NTimes.html new file mode 100644 index 000000000..fe9a6d204 --- /dev/null +++ b/classes/completionCheckers.NTimes.html @@ -0,0 +1,7 @@ +NTimes | mockttp

          Hierarchy (view full)

          Implements

          Constructors

          Properties

          Methods

          Constructors

          Properties

          count: number
          type: "times" = 'times'

          Methods

          diff --git a/classes/completionCheckers.Once.html b/classes/completionCheckers.Once.html new file mode 100644 index 000000000..117ff997e --- /dev/null +++ b/classes/completionCheckers.Once.html @@ -0,0 +1,6 @@ +Once | mockttp

          Hierarchy (view full)

          Implements

          Constructors

          Properties

          Methods

          Constructors

          Properties

          type: "once" = 'once'

          Methods

          diff --git a/classes/completionCheckers.Thrice.html b/classes/completionCheckers.Thrice.html new file mode 100644 index 000000000..3a6442dba --- /dev/null +++ b/classes/completionCheckers.Thrice.html @@ -0,0 +1,6 @@ +Thrice | mockttp

          Hierarchy (view full)

          Implements

          Constructors

          Properties

          Methods

          Constructors

          Properties

          type: "thrice" = 'thrice'

          Methods

          diff --git a/classes/completionCheckers.Twice.html b/classes/completionCheckers.Twice.html new file mode 100644 index 000000000..18639e110 --- /dev/null +++ b/classes/completionCheckers.Twice.html @@ -0,0 +1,6 @@ +Twice | mockttp

          Hierarchy (view full)

          Implements

          Constructors

          Properties

          Methods

          Constructors

          Properties

          type: "twice" = 'twice'

          Methods

          diff --git a/classes/matchers.CallbackMatcher.html b/classes/matchers.CallbackMatcher.html new file mode 100644 index 000000000..a13f4e8b9 --- /dev/null +++ b/classes/matchers.CallbackMatcher.html @@ -0,0 +1,7 @@ +CallbackMatcher | mockttp

          Class CallbackMatcher

          Hierarchy (view full)

          Implements

          Constructors

          Properties

          Methods

          Constructors

          Properties

          callback: ((request: CompletedRequest) => MaybePromise<boolean>)
          type: "callback" = 'callback'

          Methods

          diff --git a/classes/matchers.CookieMatcher.html b/classes/matchers.CookieMatcher.html new file mode 100644 index 000000000..50611f5a0 --- /dev/null +++ b/classes/matchers.CookieMatcher.html @@ -0,0 +1,7 @@ +CookieMatcher | mockttp

          Class CookieMatcher

          Hierarchy (view full)

          Implements

          Constructors

          Properties

          Methods

          Constructors

          Properties

          cookie: {
              [key: string]: string;
          }
          type: "cookie" = 'cookie'

          Methods

          diff --git a/classes/matchers.ExactQueryMatcher.html b/classes/matchers.ExactQueryMatcher.html new file mode 100644 index 000000000..94ef10a75 --- /dev/null +++ b/classes/matchers.ExactQueryMatcher.html @@ -0,0 +1,7 @@ +ExactQueryMatcher | mockttp

          Class ExactQueryMatcher

          Hierarchy (view full)

          Implements

          Constructors

          Properties

          Methods

          Constructors

          Properties

          query: string
          type: "exact-query-string" = 'exact-query-string'

          Methods

          diff --git a/classes/matchers.FormDataMatcher.html b/classes/matchers.FormDataMatcher.html new file mode 100644 index 000000000..676afa593 --- /dev/null +++ b/classes/matchers.FormDataMatcher.html @@ -0,0 +1,7 @@ +FormDataMatcher | mockttp

          Class FormDataMatcher

          Hierarchy (view full)

          Implements

          Constructors

          Properties

          Methods

          Constructors

          Properties

          formData: {
              [key: string]: string;
          }
          type: "form-data" = 'form-data'

          Methods

          diff --git a/classes/matchers.HeaderMatcher.html b/classes/matchers.HeaderMatcher.html new file mode 100644 index 000000000..47a0dd79b --- /dev/null +++ b/classes/matchers.HeaderMatcher.html @@ -0,0 +1,7 @@ +HeaderMatcher | mockttp

          Class HeaderMatcher

          Hierarchy (view full)

          Implements

          Constructors

          Properties

          Methods

          Constructors

          Properties

          headers: {
              [key: string]: string;
          }
          type: "header" = 'header'

          Methods

          diff --git a/classes/matchers.HostMatcher.html b/classes/matchers.HostMatcher.html new file mode 100644 index 000000000..209f5423d --- /dev/null +++ b/classes/matchers.HostMatcher.html @@ -0,0 +1,7 @@ +HostMatcher | mockttp

          Hierarchy (view full)

          Implements

          Constructors

          Properties

          Methods

          Constructors

          Properties

          host: string
          type: "host" = 'host'

          Methods

          diff --git a/classes/matchers.HostnameMatcher.html b/classes/matchers.HostnameMatcher.html new file mode 100644 index 000000000..8437aea0f --- /dev/null +++ b/classes/matchers.HostnameMatcher.html @@ -0,0 +1,7 @@ +HostnameMatcher | mockttp

          Class HostnameMatcher

          Hierarchy (view full)

          Implements

          Constructors

          Properties

          Methods

          Constructors

          Properties

          hostname: string
          type: "hostname" = 'hostname'

          Methods

          diff --git a/classes/matchers.JsonBodyFlexibleMatcher.html b/classes/matchers.JsonBodyFlexibleMatcher.html new file mode 100644 index 000000000..d7291c35f --- /dev/null +++ b/classes/matchers.JsonBodyFlexibleMatcher.html @@ -0,0 +1,7 @@ +JsonBodyFlexibleMatcher | mockttp

          Class JsonBodyFlexibleMatcher

          Hierarchy (view full)

          Implements

          Constructors

          Properties

          Methods

          Constructors

          Properties

          body: {}
          type: "json-body-matching" = 'json-body-matching'

          Methods

          diff --git a/classes/matchers.JsonBodyMatcher.html b/classes/matchers.JsonBodyMatcher.html new file mode 100644 index 000000000..1c0d6f3f1 --- /dev/null +++ b/classes/matchers.JsonBodyMatcher.html @@ -0,0 +1,7 @@ +JsonBodyMatcher | mockttp

          Class JsonBodyMatcher

          Hierarchy (view full)

          Implements

          Constructors

          Properties

          Methods

          Constructors

          Properties

          body: {}
          type: "json-body" = 'json-body'

          Methods

          diff --git a/classes/matchers.MethodMatcher.html b/classes/matchers.MethodMatcher.html new file mode 100644 index 000000000..1b10c73f3 --- /dev/null +++ b/classes/matchers.MethodMatcher.html @@ -0,0 +1,7 @@ +MethodMatcher | mockttp

          Class MethodMatcher

          Hierarchy (view full)

          Implements

          Constructors

          Properties

          Methods

          Constructors

          Properties

          method: Method
          type: "method" = 'method'

          Methods

          diff --git a/classes/matchers.MultipartFormDataMatcher.html b/classes/matchers.MultipartFormDataMatcher.html new file mode 100644 index 000000000..3f699ba5b --- /dev/null +++ b/classes/matchers.MultipartFormDataMatcher.html @@ -0,0 +1,7 @@ +MultipartFormDataMatcher | mockttp

          Class MultipartFormDataMatcher

          Hierarchy (view full)

          Implements

          Constructors

          Properties

          Methods

          Constructors

          Properties

          matchConditions: MultipartFieldMatchCondition[]
          type: "multipart-form-data" = 'multipart-form-data'

          Methods

          diff --git a/classes/matchers.PortMatcher.html b/classes/matchers.PortMatcher.html new file mode 100644 index 000000000..822ba1538 --- /dev/null +++ b/classes/matchers.PortMatcher.html @@ -0,0 +1,7 @@ +PortMatcher | mockttp

          Hierarchy (view full)

          Implements

          Constructors

          Properties

          Methods

          Constructors

          Properties

          port: string
          type: "port" = 'port'

          Methods

          diff --git a/classes/matchers.ProtocolMatcher.html b/classes/matchers.ProtocolMatcher.html new file mode 100644 index 000000000..b2d94cddc --- /dev/null +++ b/classes/matchers.ProtocolMatcher.html @@ -0,0 +1,7 @@ +ProtocolMatcher | mockttp

          Class ProtocolMatcher

          Hierarchy (view full)

          Implements

          Constructors

          Properties

          Methods

          Constructors

          Properties

          protocol:
              | "http"
              | "https"
              | "ws"
              | "wss"
          type: "protocol" = 'protocol'

          Methods

          diff --git a/classes/matchers.QueryMatcher.html b/classes/matchers.QueryMatcher.html new file mode 100644 index 000000000..c07c4ecaa --- /dev/null +++ b/classes/matchers.QueryMatcher.html @@ -0,0 +1,7 @@ +QueryMatcher | mockttp

          Class QueryMatcher

          Hierarchy (view full)

          Implements

          Constructors

          Properties

          Methods

          Constructors

          Properties

          queryObject: {
              [key: string]: string | string[];
          }
          type: "query" = 'query'

          Methods

          diff --git a/classes/matchers.RawBodyIncludesMatcher.html b/classes/matchers.RawBodyIncludesMatcher.html new file mode 100644 index 000000000..9ae0d677e --- /dev/null +++ b/classes/matchers.RawBodyIncludesMatcher.html @@ -0,0 +1,7 @@ +RawBodyIncludesMatcher | mockttp

          Class RawBodyIncludesMatcher

          Hierarchy (view full)

          Implements

          Constructors

          Properties

          Methods

          Constructors

          Properties

          content: string
          type: "raw-body-includes" = 'raw-body-includes'

          Methods

          diff --git a/classes/matchers.RawBodyMatcher.html b/classes/matchers.RawBodyMatcher.html new file mode 100644 index 000000000..cbe03621c --- /dev/null +++ b/classes/matchers.RawBodyMatcher.html @@ -0,0 +1,7 @@ +RawBodyMatcher | mockttp

          Class RawBodyMatcher

          Hierarchy (view full)

          Implements

          Constructors

          Properties

          Methods

          Constructors

          Properties

          content: string
          type: "raw-body" = 'raw-body'

          Methods

          diff --git a/classes/matchers.RegexBodyMatcher.html b/classes/matchers.RegexBodyMatcher.html new file mode 100644 index 000000000..a26887d7f --- /dev/null +++ b/classes/matchers.RegexBodyMatcher.html @@ -0,0 +1,7 @@ +RegexBodyMatcher | mockttp

          Class RegexBodyMatcher

          Hierarchy (view full)

          Implements

          Constructors

          Properties

          Methods

          Constructors

          Properties

          regexString: string
          type: "raw-body-regexp" = 'raw-body-regexp'

          Methods

          diff --git a/classes/matchers.RegexPathMatcher.html b/classes/matchers.RegexPathMatcher.html new file mode 100644 index 000000000..50552ba5a --- /dev/null +++ b/classes/matchers.RegexPathMatcher.html @@ -0,0 +1,8 @@ +RegexPathMatcher | mockttp

          Class RegexPathMatcher

          Hierarchy (view full)

          Implements

          Constructors

          Properties

          Methods

          Constructors

          Properties

          regexFlags: string
          regexSource: string
          type: "regex-path" = 'regex-path'

          Methods

          diff --git a/classes/matchers.RegexUrlMatcher.html b/classes/matchers.RegexUrlMatcher.html new file mode 100644 index 000000000..8d4dd869c --- /dev/null +++ b/classes/matchers.RegexUrlMatcher.html @@ -0,0 +1,8 @@ +RegexUrlMatcher | mockttp

          Class RegexUrlMatcher

          Hierarchy (view full)

          Implements

          Constructors

          Properties

          Methods

          Constructors

          Properties

          regexFlags: string
          regexSource: string
          type: "regex-url" = 'regex-url'

          Methods

          diff --git a/classes/matchers.SimplePathMatcher.html b/classes/matchers.SimplePathMatcher.html new file mode 100644 index 000000000..a6e8f8e38 --- /dev/null +++ b/classes/matchers.SimplePathMatcher.html @@ -0,0 +1,7 @@ +SimplePathMatcher | mockttp

          Class SimplePathMatcher

          Hierarchy (view full)

          Implements

          Constructors

          Properties

          Methods

          Constructors

          Properties

          path: string
          type: "simple-path" = 'simple-path'

          Methods

          diff --git a/classes/matchers.WildcardMatcher.html b/classes/matchers.WildcardMatcher.html new file mode 100644 index 000000000..d51d90441 --- /dev/null +++ b/classes/matchers.WildcardMatcher.html @@ -0,0 +1,6 @@ +WildcardMatcher | mockttp

          Class WildcardMatcher

          Hierarchy (view full)

          Implements

          Constructors

          Properties

          Methods

          Constructors

          Properties

          type: "wildcard" = 'wildcard'

          Methods

          diff --git a/classes/requestHandlerDefinitions.CallbackHandlerDefinition.html b/classes/requestHandlerDefinitions.CallbackHandlerDefinition.html new file mode 100644 index 000000000..0dbcc4075 --- /dev/null +++ b/classes/requestHandlerDefinitions.CallbackHandlerDefinition.html @@ -0,0 +1,6 @@ +CallbackHandlerDefinition | mockttp

          Hierarchy (view full)

          Implements

          Constructors

          Properties

          Methods

          Constructors

          Properties

          type: "callback" = 'callback'

          Methods

          diff --git a/classes/requestHandlerDefinitions.CloseConnectionHandlerDefinition.html b/classes/requestHandlerDefinitions.CloseConnectionHandlerDefinition.html new file mode 100644 index 000000000..31fb10f9f --- /dev/null +++ b/classes/requestHandlerDefinitions.CloseConnectionHandlerDefinition.html @@ -0,0 +1,5 @@ +CloseConnectionHandlerDefinition | mockttp

          Hierarchy (view full)

          Implements

          Constructors

          Properties

          Methods

          Constructors

          Properties

          type: "close-connection" = 'close-connection'

          Methods

          diff --git a/classes/requestHandlerDefinitions.FileHandlerDefinition.html b/classes/requestHandlerDefinitions.FileHandlerDefinition.html new file mode 100644 index 000000000..ea64ed30f --- /dev/null +++ b/classes/requestHandlerDefinitions.FileHandlerDefinition.html @@ -0,0 +1,9 @@ +FileHandlerDefinition | mockttp

          Hierarchy (view full)

          Implements

          Constructors

          Properties

          Methods

          Constructors

          Properties

          filePath: string
          headers?: Headers
          status: number
          statusMessage: undefined | string
          type: "file" = 'file'

          Methods

          diff --git a/classes/requestHandlerDefinitions.JsonRpcResponseHandlerDefinition.html b/classes/requestHandlerDefinitions.JsonRpcResponseHandlerDefinition.html new file mode 100644 index 000000000..4d1dfcd25 --- /dev/null +++ b/classes/requestHandlerDefinitions.JsonRpcResponseHandlerDefinition.html @@ -0,0 +1,6 @@ +JsonRpcResponseHandlerDefinition | mockttp

          Hierarchy (view full)

          Implements

          Constructors

          Properties

          Methods

          Constructors

          Properties

          result: {
              error?: undefined;
              result: any;
          } | {
              error: any;
              result?: undefined;
          }
          type: "json-rpc-response" = 'json-rpc-response'

          Methods

          diff --git a/classes/requestHandlerDefinitions.PassThroughHandlerDefinition.html b/classes/requestHandlerDefinitions.PassThroughHandlerDefinition.html new file mode 100644 index 000000000..f317a37ee --- /dev/null +++ b/classes/requestHandlerDefinitions.PassThroughHandlerDefinition.html @@ -0,0 +1,16 @@ +PassThroughHandlerDefinition | mockttp

          Hierarchy (view full)

          Implements

          Constructors

          Properties

          beforeRequest?: ((req: CompletedRequest) => MaybePromise<void | CallbackRequestResult>)
          beforeResponse?: ((res: PassThroughResponse) => MaybePromise<void | CallbackResponseResult>)
          clientCertificateHostMap: {
              [host: string]: {
                  passphrase?: string;
                  pfx: Buffer;
              };
          }
          extraCACertificates: CADefinition[] = []
          forwarding?: ForwardingOptions
          ignoreHostHttpsErrors: boolean | string[] = []
          lookupOptions?: PassThroughLookupOptions
          proxyConfig?: ProxyConfig
          simulateConnectionErrors: boolean
          transformRequest?: RequestTransform
          transformResponse?: ResponseTransform
          type: "passthrough" = 'passthrough'

          Methods

          diff --git a/classes/requestHandlerDefinitions.ResetConnectionHandlerDefinition.html b/classes/requestHandlerDefinitions.ResetConnectionHandlerDefinition.html new file mode 100644 index 000000000..a006cd2c8 --- /dev/null +++ b/classes/requestHandlerDefinitions.ResetConnectionHandlerDefinition.html @@ -0,0 +1,5 @@ +ResetConnectionHandlerDefinition | mockttp

          Hierarchy (view full)

          Implements

          Constructors

          Properties

          Methods

          Constructors

          Properties

          type: "reset-connection" = 'reset-connection'

          Methods

          diff --git a/classes/requestHandlerDefinitions.SimpleHandlerDefinition.html b/classes/requestHandlerDefinitions.SimpleHandlerDefinition.html new file mode 100644 index 000000000..5e7100b8c --- /dev/null +++ b/classes/requestHandlerDefinitions.SimpleHandlerDefinition.html @@ -0,0 +1,10 @@ +SimpleHandlerDefinition | mockttp

          Hierarchy (view full)

          Implements

          Constructors

          Properties

          data?:
              | string
              | Uint8Array
              | Buffer
              | SerializedBuffer
          headers?: Headers
          status: number
          statusMessage?: string
          trailers?: Trailers
          type: "simple" = 'simple'

          Methods

          diff --git a/classes/requestHandlerDefinitions.StreamHandlerDefinition.html b/classes/requestHandlerDefinitions.StreamHandlerDefinition.html new file mode 100644 index 000000000..a94cf4478 --- /dev/null +++ b/classes/requestHandlerDefinitions.StreamHandlerDefinition.html @@ -0,0 +1,8 @@ +StreamHandlerDefinition | mockttp

          Hierarchy (view full)

          Implements

          Constructors

          Properties

          Methods

          Constructors

          Properties

          headers?: Headers
          status: number
          stream: Readable & {
              done?: true;
          }
          type: "stream" = 'stream'

          Methods

          diff --git a/classes/requestHandlerDefinitions.TimeoutHandlerDefinition.html b/classes/requestHandlerDefinitions.TimeoutHandlerDefinition.html new file mode 100644 index 000000000..5a8d706ae --- /dev/null +++ b/classes/requestHandlerDefinitions.TimeoutHandlerDefinition.html @@ -0,0 +1,5 @@ +TimeoutHandlerDefinition | mockttp

          Hierarchy (view full)

          Implements

          Constructors

          Properties

          Methods

          Constructors

          Properties

          type: "timeout" = 'timeout'

          Methods

          diff --git a/classes/requestHandlers.AbortError.html b/classes/requestHandlers.AbortError.html new file mode 100644 index 000000000..4858b872b --- /dev/null +++ b/classes/requestHandlers.AbortError.html @@ -0,0 +1,3 @@ +AbortError | mockttp

          Hierarchy

          • TypedError
            • AbortError

          Constructors

          Properties

          Constructors

          Properties

          code?: string
          diff --git a/classes/requestHandlers.CallbackHandler.html b/classes/requestHandlers.CallbackHandler.html new file mode 100644 index 000000000..ce676b5e7 --- /dev/null +++ b/classes/requestHandlers.CallbackHandler.html @@ -0,0 +1,7 @@ +CallbackHandler | mockttp

          Hierarchy (view full)

          Constructors

          Properties

          Methods

          Constructors

          Properties

          type: "callback" = 'callback'

          Methods

          diff --git a/classes/requestHandlers.CloseConnectionHandler.html b/classes/requestHandlers.CloseConnectionHandler.html new file mode 100644 index 000000000..85329c2c9 --- /dev/null +++ b/classes/requestHandlers.CloseConnectionHandler.html @@ -0,0 +1,6 @@ +CloseConnectionHandler | mockttp

          Hierarchy (view full)

          Constructors

          Properties

          Methods

          Constructors

          Properties

          type: "close-connection" = 'close-connection'

          Methods

          diff --git a/classes/requestHandlers.FileHandler.html b/classes/requestHandlers.FileHandler.html new file mode 100644 index 000000000..6a73690f8 --- /dev/null +++ b/classes/requestHandlers.FileHandler.html @@ -0,0 +1,10 @@ +FileHandler | mockttp

          Hierarchy (view full)

          Constructors

          Properties

          Methods

          Constructors

          Properties

          filePath: string
          headers?: Headers
          status: number
          statusMessage: undefined | string
          type: "file" = 'file'

          Methods

          diff --git a/classes/requestHandlers.JsonRpcResponseHandler.html b/classes/requestHandlers.JsonRpcResponseHandler.html new file mode 100644 index 000000000..aa389e206 --- /dev/null +++ b/classes/requestHandlers.JsonRpcResponseHandler.html @@ -0,0 +1,7 @@ +JsonRpcResponseHandler | mockttp

          Hierarchy (view full)

          Constructors

          Properties

          Methods

          Constructors

          Properties

          result: {
              error?: undefined;
              result: any;
          } | {
              error: any;
              result?: undefined;
          }
          type: "json-rpc-response" = 'json-rpc-response'

          Methods

          diff --git a/classes/requestHandlers.PassThroughHandler.html b/classes/requestHandlers.PassThroughHandler.html new file mode 100644 index 000000000..63c80a553 --- /dev/null +++ b/classes/requestHandlers.PassThroughHandler.html @@ -0,0 +1,17 @@ +PassThroughHandler | mockttp

          Hierarchy (view full)

          Constructors

          Properties

          beforeRequest?: ((req: CompletedRequest) => MaybePromise<void | CallbackRequestResult>)
          beforeResponse?: ((res: PassThroughResponse) => MaybePromise<void | CallbackResponseResult>)
          clientCertificateHostMap: {
              [host: string]: {
                  passphrase?: string;
                  pfx: Buffer;
              };
          }
          extraCACertificates: CADefinition[] = []
          forwarding?: ForwardingOptions
          ignoreHostHttpsErrors: boolean | string[] = []
          lookupOptions?: PassThroughLookupOptions
          proxyConfig?: ProxyConfig
          simulateConnectionErrors: boolean
          transformRequest?: RequestTransform
          transformResponse?: ResponseTransform
          type: "passthrough" = 'passthrough'

          Methods

          diff --git a/classes/requestHandlers.ResetConnectionHandler.html b/classes/requestHandlers.ResetConnectionHandler.html new file mode 100644 index 000000000..7b049b825 --- /dev/null +++ b/classes/requestHandlers.ResetConnectionHandler.html @@ -0,0 +1,6 @@ +ResetConnectionHandler | mockttp

          Hierarchy (view full)

          Constructors

          Properties

          Methods

          Constructors

          Properties

          type: "reset-connection" = 'reset-connection'

          Methods

          diff --git a/classes/requestHandlers.SimpleHandler.html b/classes/requestHandlers.SimpleHandler.html new file mode 100644 index 000000000..a9c3a5e42 --- /dev/null +++ b/classes/requestHandlers.SimpleHandler.html @@ -0,0 +1,11 @@ +SimpleHandler | mockttp

          Hierarchy (view full)

          Constructors

          Properties

          data?:
              | string
              | Uint8Array
              | Buffer
              | SerializedBuffer
          headers?: Headers
          status: number
          statusMessage?: string
          trailers?: Trailers
          type: "simple" = 'simple'

          Methods

          diff --git a/classes/requestHandlers.StreamHandler.html b/classes/requestHandlers.StreamHandler.html new file mode 100644 index 000000000..7d3d09afb --- /dev/null +++ b/classes/requestHandlers.StreamHandler.html @@ -0,0 +1,9 @@ +StreamHandler | mockttp

          Hierarchy (view full)

          Constructors

          Properties

          Methods

          Constructors

          Properties

          headers?: Headers
          status: number
          stream: Readable & {
              done?: true;
          }
          type: "stream" = 'stream'

          Methods

          diff --git a/classes/requestHandlers.TimeoutHandler.html b/classes/requestHandlers.TimeoutHandler.html new file mode 100644 index 000000000..457307937 --- /dev/null +++ b/classes/requestHandlers.TimeoutHandler.html @@ -0,0 +1,6 @@ +TimeoutHandler | mockttp

          Hierarchy (view full)

          Constructors

          Properties

          Methods

          Constructors

          Properties

          type: "timeout" = 'timeout'

          Methods

          diff --git a/classes/webSocketHandlerDefinitions.EchoWebSocketHandlerDefinition.html b/classes/webSocketHandlerDefinitions.EchoWebSocketHandlerDefinition.html new file mode 100644 index 000000000..a153b6775 --- /dev/null +++ b/classes/webSocketHandlerDefinitions.EchoWebSocketHandlerDefinition.html @@ -0,0 +1,5 @@ +EchoWebSocketHandlerDefinition | mockttp

          Hierarchy (view full)

          Implements

          Constructors

          Properties

          Methods

          Constructors

          Properties

          type: "ws-echo" = 'ws-echo'

          Methods

          diff --git a/classes/webSocketHandlerDefinitions.ListenWebSocketHandlerDefinition.html b/classes/webSocketHandlerDefinitions.ListenWebSocketHandlerDefinition.html new file mode 100644 index 000000000..7ce3a30ed --- /dev/null +++ b/classes/webSocketHandlerDefinitions.ListenWebSocketHandlerDefinition.html @@ -0,0 +1,5 @@ +ListenWebSocketHandlerDefinition | mockttp

          Hierarchy (view full)

          Implements

          Constructors

          Properties

          Methods

          Constructors

          Properties

          type: "ws-listen" = 'ws-listen'

          Methods

          diff --git a/classes/webSocketHandlerDefinitions.PassThroughWebSocketHandlerDefinition.html b/classes/webSocketHandlerDefinitions.PassThroughWebSocketHandlerDefinition.html new file mode 100644 index 000000000..13126928c --- /dev/null +++ b/classes/webSocketHandlerDefinitions.PassThroughWebSocketHandlerDefinition.html @@ -0,0 +1,11 @@ +PassThroughWebSocketHandlerDefinition | mockttp

          Hierarchy (view full)

          Implements

          Constructors

          Properties

          clientCertificateHostMap: {
              [host: string]: {
                  passphrase?: string;
                  pfx: Buffer;
              };
          }
          extraCACertificates: CADefinition[] = []
          forwarding?: ForwardingOptions
          ignoreHostHttpsErrors: boolean | string[] = []
          lookupOptions: undefined | PassThroughLookupOptions
          proxyConfig?: ProxyConfig
          type: "ws-passthrough" = 'ws-passthrough'

          Methods

          diff --git a/classes/webSocketHandlerDefinitions.RejectWebSocketHandlerDefinition.html b/classes/webSocketHandlerDefinitions.RejectWebSocketHandlerDefinition.html new file mode 100644 index 000000000..7fa802d1d --- /dev/null +++ b/classes/webSocketHandlerDefinitions.RejectWebSocketHandlerDefinition.html @@ -0,0 +1,9 @@ +RejectWebSocketHandlerDefinition | mockttp

          Hierarchy (view full)

          Implements

          Constructors

          Properties

          Methods

          Constructors

          Properties

          body: string | Buffer = ''
          headers: Headers = {}
          statusCode: number
          statusMessage: string = 'WebSocket rejected'
          type: "ws-reject" = 'ws-reject'

          Methods

          diff --git a/classes/webSocketHandlers.EchoWebSocketHandler.html b/classes/webSocketHandlers.EchoWebSocketHandler.html new file mode 100644 index 000000000..fe42c8662 --- /dev/null +++ b/classes/webSocketHandlers.EchoWebSocketHandler.html @@ -0,0 +1,6 @@ +EchoWebSocketHandler | mockttp

          Hierarchy (view full)

          Constructors

          Properties

          Methods

          Constructors

          Properties

          type: "ws-echo" = 'ws-echo'

          Methods

          diff --git a/classes/webSocketHandlers.ListenWebSocketHandler.html b/classes/webSocketHandlers.ListenWebSocketHandler.html new file mode 100644 index 000000000..37bce0277 --- /dev/null +++ b/classes/webSocketHandlers.ListenWebSocketHandler.html @@ -0,0 +1,6 @@ +ListenWebSocketHandler | mockttp

          Hierarchy (view full)

          Constructors

          Properties

          Methods

          Constructors

          Properties

          type: "ws-listen" = 'ws-listen'

          Methods

          diff --git a/classes/webSocketHandlers.PassThroughWebSocketHandler.html b/classes/webSocketHandlers.PassThroughWebSocketHandler.html new file mode 100644 index 000000000..1684bf391 --- /dev/null +++ b/classes/webSocketHandlers.PassThroughWebSocketHandler.html @@ -0,0 +1,12 @@ +PassThroughWebSocketHandler | mockttp

          Hierarchy (view full)

          Constructors

          Properties

          clientCertificateHostMap: {
              [host: string]: {
                  passphrase?: string;
                  pfx: Buffer;
              };
          }
          extraCACertificates: CADefinition[] = []
          forwarding?: ForwardingOptions
          ignoreHostHttpsErrors: boolean | string[] = []
          lookupOptions: undefined | PassThroughLookupOptions
          proxyConfig?: ProxyConfig
          type: "ws-passthrough" = 'ws-passthrough'

          Methods

          diff --git a/classes/webSocketHandlers.RejectWebSocketHandler.html b/classes/webSocketHandlers.RejectWebSocketHandler.html new file mode 100644 index 000000000..5dbfac3dc --- /dev/null +++ b/classes/webSocketHandlers.RejectWebSocketHandler.html @@ -0,0 +1,10 @@ +RejectWebSocketHandler | mockttp

          Hierarchy (view full)

          Constructors

          Properties

          Methods

          Constructors

          Properties

          body: string | Buffer = ''
          headers: Headers = {}
          statusCode: number
          statusMessage: string = 'WebSocket rejected'
          type: "ws-reject" = 'ws-reject'

          Methods

          diff --git a/enums/Method.html b/enums/Method.html new file mode 100644 index 000000000..2dd2acb60 --- /dev/null +++ b/enums/Method.html @@ -0,0 +1,8 @@ +Method | mockttp

          Enumeration Method

          Enumeration Members

          Enumeration Members

          DELETE
          GET
          HEAD
          OPTIONS
          PATCH
          POST
          PUT
          diff --git a/enums/RulePriority.html b/enums/RulePriority.html new file mode 100644 index 000000000..e73cc2143 --- /dev/null +++ b/enums/RulePriority.html @@ -0,0 +1,3 @@ +RulePriority | mockttp

          Enumeration RulePriority

          Enumeration Members

          Enumeration Members

          DEFAULT
          FALLBACK
          diff --git a/functions/PluggableAdmin.Serialization.deserialize.html b/functions/PluggableAdmin.Serialization.deserialize.html new file mode 100644 index 000000000..989a527e5 --- /dev/null +++ b/functions/PluggableAdmin.Serialization.deserialize.html @@ -0,0 +1 @@ +deserialize | mockttp
          diff --git a/functions/PluggableAdmin.Serialization.deserializeBuffer.html b/functions/PluggableAdmin.Serialization.deserializeBuffer.html new file mode 100644 index 000000000..777391a69 --- /dev/null +++ b/functions/PluggableAdmin.Serialization.deserializeBuffer.html @@ -0,0 +1 @@ +deserializeBuffer | mockttp
          diff --git a/functions/PluggableAdmin.Serialization.deserializeProxyConfig.html b/functions/PluggableAdmin.Serialization.deserializeProxyConfig.html new file mode 100644 index 000000000..d93f5cc93 --- /dev/null +++ b/functions/PluggableAdmin.Serialization.deserializeProxyConfig.html @@ -0,0 +1 @@ +deserializeProxyConfig | mockttp
          diff --git a/functions/PluggableAdmin.Serialization.ensureParamsDeferenced.html b/functions/PluggableAdmin.Serialization.ensureParamsDeferenced.html new file mode 100644 index 000000000..fc1fa0b16 --- /dev/null +++ b/functions/PluggableAdmin.Serialization.ensureParamsDeferenced.html @@ -0,0 +1 @@ +ensureParamsDeferenced | mockttp
          diff --git a/functions/PluggableAdmin.Serialization.serialize.html b/functions/PluggableAdmin.Serialization.serialize.html new file mode 100644 index 000000000..255c27fab --- /dev/null +++ b/functions/PluggableAdmin.Serialization.serialize.html @@ -0,0 +1 @@ +serialize | mockttp
          diff --git a/functions/PluggableAdmin.Serialization.serializeBuffer.html b/functions/PluggableAdmin.Serialization.serializeBuffer.html new file mode 100644 index 000000000..1f70ee951 --- /dev/null +++ b/functions/PluggableAdmin.Serialization.serializeBuffer.html @@ -0,0 +1 @@ +serializeBuffer | mockttp
          diff --git a/functions/PluggableAdmin.Serialization.serializeProxyConfig.html b/functions/PluggableAdmin.Serialization.serializeProxyConfig.html new file mode 100644 index 000000000..0486440a5 --- /dev/null +++ b/functions/PluggableAdmin.Serialization.serializeProxyConfig.html @@ -0,0 +1 @@ +serializeProxyConfig | mockttp
          diff --git a/functions/generateCACertificate.html b/functions/generateCACertificate.html new file mode 100644 index 000000000..92a208b80 --- /dev/null +++ b/functions/generateCACertificate.html @@ -0,0 +1,6 @@ +generateCACertificate | mockttp

          Function generateCACertificate

          • Generate a CA certificate for mocking HTTPS.

            +

            Returns a promise, for an object with key and cert properties, +containing the generated private key and certificate in PEM format.

            +

            These can be saved to disk, and their paths passed +as HTTPS options to a Mockttp server.

            +

            Parameters

            • options: {
                  bits?: number;
                  commonName?: string;
                  countryName?: string;
                  nameConstraints?: {
                      permitted?: string[];
                  };
                  organizationName?: string;
              } = {}
              • Optionalbits?: number
              • OptionalcommonName?: string
              • OptionalcountryName?: string
              • OptionalnameConstraints?: {
                    permitted?: string[];
                }
                • Optionalpermitted?: string[]
              • OptionalorganizationName?: string

            Returns Promise<{
                cert: string;
                key: string;
            }>

          diff --git a/functions/generateSPKIFingerprint.html b/functions/generateSPKIFingerprint.html new file mode 100644 index 000000000..1eb7ce7e6 --- /dev/null +++ b/functions/generateSPKIFingerprint.html @@ -0,0 +1 @@ +generateSPKIFingerprint | mockttp

          Function generateSPKIFingerprint

          • Parameters

            Returns string

          diff --git a/functions/getAdminServer.html b/functions/getAdminServer.html new file mode 100644 index 000000000..4e2de53c8 --- /dev/null +++ b/functions/getAdminServer.html @@ -0,0 +1,10 @@ +getAdminServer | mockttp

          Function getAdminServer

          • Get a Mockttp admin server, which can be used with a Mockttp remote client to create +& manage Mockttp instances either from remote machines or from local environments +that lack necessary capabilities, e.g. to use Mockttp from inside a browser.

            +

            This function exists so you can set up these servers programmatically, but for most +usage you can just run your tests via the mockttp binary, which will automatically +start and stop an admin server for you:

            +
            mockttp -c <your test command>
            +
            + +

            Parameters

            Returns MockttpAdminServer

          diff --git a/functions/getLocal.html b/functions/getLocal.html new file mode 100644 index 000000000..917fca4c0 --- /dev/null +++ b/functions/getLocal.html @@ -0,0 +1,8 @@ +getLocal | mockttp

          Function getLocal

          • Get a Mockttp instance on the local machine.

            +

            In most simple environments, you can call this method directly and immediately +get a Mockttp instance and start mocking servers.

            +

            In node, the mocked servers will run in process and require no further setup.

            +

            In browsers this is an alias for getRemote. You'll need to start a Mockttp admin server +outside your tests before calling this, which will create and manage your fake servers +outside the browser.

            +

            Parameters

            Returns Mockttp

          diff --git a/functions/getRemote.html b/functions/getRemote.html new file mode 100644 index 000000000..25928894c --- /dev/null +++ b/functions/getRemote.html @@ -0,0 +1,4 @@ +getRemote | mockttp

          Function getRemote

          • Get a Mockttp instance, controlled through a Mockttp admin server.

            +

            This connects to a Mockttp admin server, and uses that to start +and stop mock servers.

            +

            Parameters

            Returns Mockttp

          diff --git a/functions/matchers.explainMatchers.html b/functions/matchers.explainMatchers.html new file mode 100644 index 000000000..991825b3d --- /dev/null +++ b/functions/matchers.explainMatchers.html @@ -0,0 +1 @@ +explainMatchers | mockttp

          Function explainMatchers

          diff --git a/functions/matchers.matchesAll.html b/functions/matchers.matchesAll.html new file mode 100644 index 000000000..e8448ae5c --- /dev/null +++ b/functions/matchers.matchesAll.html @@ -0,0 +1 @@ +matchesAll | mockttp

          Function matchesAll

          diff --git a/functions/resetAdminServer.html b/functions/resetAdminServer.html new file mode 100644 index 000000000..20007f83a --- /dev/null +++ b/functions/resetAdminServer.html @@ -0,0 +1,11 @@ +resetAdminServer | mockttp

          Function resetAdminServer

          • Reset a remote admin server, shutting down all Mockttp servers controlled by that +admin server. This is equivalent to calling client.stop() for all remote +clients of the target server.

            +

            This can be useful in some rare cases, where a client might fail to reliably tear down +its own server, e.g. in Cypress testing. In this case, it's useful to reset the +admin server completely remotely without needing access to any previous client +instances, to ensure all servers from previous test runs have been shut down.

            +

            After this is called, behaviour of any previously connected clients is undefined, and +it's likely that they may throw errors or experience other undefined behaviour. Ensure +that client.stop() has been called on all active clients before calling this method.

            +

            Parameters

            Returns Promise<void>

          diff --git a/hierarchy.html b/hierarchy.html new file mode 100644 index 000000000..1bc60d415 --- /dev/null +++ b/hierarchy.html @@ -0,0 +1 @@ +mockttp

          mockttp

          Class Hierarchy

          diff --git a/index.html b/index.html new file mode 100644 index 000000000..85edce221 --- /dev/null +++ b/index.html @@ -0,0 +1,8 @@ +mockttp

          mockttp

          Mockttp Build Status Available on NPM Try Mockttp on RunKit

          +

          Part of HTTP Toolkit: powerful tools for building, testing & debugging HTTP(S)

          +
          +

          These are the API reference docs for Mockttp. If you're not sure what Mockttp is, it's best to start from the README instead.

          +

          On the other hand, if you're looking for detailed documentation, you're in the right place!

          +

          From here you can explore all the exported types and statically exported functions from the sidebar on the right, you can use the search button (top right) to jump to specific documentation by name, or you're not sure you probably want to start at the Mockttp type and follow the types from there.

          +

          Can't find what you're looking for, missing important info, or generally confused? Please file an issue and help Mockttp's docs get better.

          +
          diff --git a/interfaces/AbortedRequest.html b/interfaces/AbortedRequest.html new file mode 100644 index 000000000..c172dc956 --- /dev/null +++ b/interfaces/AbortedRequest.html @@ -0,0 +1,16 @@ +AbortedRequest | mockttp

          Interface AbortedRequest

          interface AbortedRequest {
              error?: {
                  code?: string;
                  message?: string;
                  name?: string;
                  stack?: string;
              };
              headers: Headers;
              hostname?: string;
              httpVersion?: string;
              id: string;
              matchedRuleId?: string;
              method: string;
              path: string;
              protocol: string;
              rawHeaders: RawHeaders;
              remoteIpAddress?: string;
              remotePort?: number;
              tags: string[];
              timingEvents: TimingEvents;
              url: string;
          }

          Hierarchy (view full)

          Properties

          error?: {
              code?: string;
              message?: string;
              name?: string;
              stack?: string;
          }
          headers: Headers
          hostname?: string
          httpVersion?: string
          id: string
          matchedRuleId?: string
          method: string
          path: string
          protocol: string
          rawHeaders: RawHeaders
          remoteIpAddress?: string
          remotePort?: number
          tags: string[]
          timingEvents: TimingEvents
          url: string
          diff --git a/interfaces/ClientError.html b/interfaces/ClientError.html new file mode 100644 index 000000000..44798e735 --- /dev/null +++ b/interfaces/ClientError.html @@ -0,0 +1,7 @@ +ClientError | mockttp

          Interface ClientError

          A client error event describes a request (or our best guess at parsing it), +that wasn't correctly completed, and the error response it received, or +'aborted' if the connection was disconnected before we could respond.

          +
          interface ClientError {
              errorCode?: string;
              request: {
                  headers: Headers;
                  httpVersion?: string;
                  id: string;
                  method?: string;
                  path?: string;
                  protocol?: string;
                  rawHeaders: RawHeaders;
                  remoteIpAddress?: string;
                  remotePort?: number;
                  tags: string[];
                  timingEvents: TimingEvents;
                  url?: string;
              };
              response: "aborted" | CompletedResponse;
          }

          Properties

          errorCode?: string
          request: {
              headers: Headers;
              httpVersion?: string;
              id: string;
              method?: string;
              path?: string;
              protocol?: string;
              rawHeaders: RawHeaders;
              remoteIpAddress?: string;
              remotePort?: number;
              tags: string[];
              timingEvents: TimingEvents;
              url?: string;
          }
          response: "aborted" | CompletedResponse
          diff --git a/interfaces/CompletedBody.html b/interfaces/CompletedBody.html new file mode 100644 index 000000000..52878fe63 --- /dev/null +++ b/interfaces/CompletedBody.html @@ -0,0 +1,32 @@ +CompletedBody | mockttp

          Interface CompletedBody

          interface CompletedBody {
              buffer: Buffer;
              getDecodedBuffer(): Promise<undefined | Buffer>;
              getFormData(): Promise<undefined | {
                  [key: string]: string | string[] | undefined;
              }>;
              getJson(): Promise<undefined | object>;
              getMultipartFormData(): Promise<undefined | {
                  data: Buffer;
                  filename?: string;
                  name?: string;
                  type?: string;
              }[]>;
              getText(): Promise<undefined | string>;
              getUrlEncodedFormData(): Promise<undefined | {
                  [key: string]: string | string[] | undefined;
              }>;
          }

          Properties

          buffer: Buffer

          The raw bytes of the response. If a content encoding was used, this is +the raw encoded data.

          +

          Methods

          • The decoded bytes of the response. If no encoding was used, this is the +same as .buffer. The response is decoded and returned asynchronously +as a Promise.

            +

            Returns Promise<undefined | Buffer>

          • The contents of the response, decoded, and then parsed automatically as +either one of the form encoding types (either URL-encoded or multipart), +determined automatically from the message content-type header.

            +

            This method is convenient and offers a single mechanism to parse both +formats, but you may want to consider parsing on format explicitly with +the getUrlEncodedFormData() or getMultipartFormData() methods instead.

            +

            After parsing & decoding, the result is returned asynchronously as a +Promise for a key-value(s) object.

            +

            Returns Promise<undefined | {
                [key: string]: string | string[] | undefined;
            }>

          • The contents of the response, decoded, parsed as UTF-8 string, and +then parsed a JSON. The response is decoded and returned asynchronously +as a Promise.

            +

            Returns Promise<undefined | object>

          • The contents of the response, decoded, and then parsed as multi-part +form data. The response is result is returned asynchronously as a +Promise for an array of parts with their names, data and metadata.

            +

            Returns Promise<undefined | {
                data: Buffer;
                filename?: string;
                name?: string;
                type?: string;
            }[]>

          • The contents of the response, decoded and parsed as a UTF-8 string. +The response is decoded and returned asynchronously as a Promise.

            +

            Returns Promise<undefined | string>

          • The contents of the response, decoded, parsed as UTF-8 string, and then +parsed as URL-encoded form data. After parsing & decoding, the result is +returned asynchronously as a Promise for a key-value(s) object.

            +

            Returns Promise<undefined | {
                [key: string]: string | string[] | undefined;
            }>

          diff --git a/interfaces/CompletedRequest.html b/interfaces/CompletedRequest.html new file mode 100644 index 000000000..6453bbe51 --- /dev/null +++ b/interfaces/CompletedRequest.html @@ -0,0 +1,18 @@ +CompletedRequest | mockttp

          Interface CompletedRequest

          interface CompletedRequest {
              body: CompletedBody;
              headers: Headers;
              hostname?: string;
              httpVersion?: string;
              id: string;
              matchedRuleId?: string;
              method: string;
              path: string;
              protocol: string;
              rawHeaders: RawHeaders;
              rawTrailers: RawHeaders;
              remoteIpAddress?: string;
              remotePort?: number;
              tags: string[];
              timingEvents: TimingEvents;
              trailers: Trailers;
              url: string;
          }

          Hierarchy (view full)

          Properties

          headers: Headers
          hostname?: string
          httpVersion?: string
          id: string
          matchedRuleId?: string
          method: string
          path: string
          protocol: string
          rawHeaders: RawHeaders
          rawTrailers: RawHeaders
          remoteIpAddress?: string
          remotePort?: number
          tags: string[]
          timingEvents: TimingEvents
          trailers: Trailers
          url: string
          diff --git a/interfaces/CompletedResponse.html b/interfaces/CompletedResponse.html new file mode 100644 index 000000000..234d28acb --- /dev/null +++ b/interfaces/CompletedResponse.html @@ -0,0 +1,11 @@ +CompletedResponse | mockttp

          Interface CompletedResponse

          interface CompletedResponse {
              body: CompletedBody;
              headers: Headers;
              id: string;
              rawHeaders: RawHeaders;
              rawTrailers: RawHeaders;
              statusCode: number;
              statusMessage: string;
              tags: string[];
              timingEvents: TimingEvents;
              trailers: Trailers;
          }

          Properties

          headers: Headers
          id: string
          rawHeaders: RawHeaders
          rawTrailers: RawHeaders
          statusCode: number
          statusMessage: string
          tags: string[]
          timingEvents: TimingEvents
          trailers: Trailers
          diff --git a/interfaces/Explainable.html b/interfaces/Explainable.html new file mode 100644 index 000000000..2e45d8f3b --- /dev/null +++ b/interfaces/Explainable.html @@ -0,0 +1,2 @@ +Explainable | mockttp

          Interface Explainable

          interface Explainable {
              explain(): string;
          }

          Hierarchy (view full)

          Methods

          Methods

          diff --git a/interfaces/Headers.html b/interfaces/Headers.html new file mode 100644 index 000000000..032992abe --- /dev/null +++ b/interfaces/Headers.html @@ -0,0 +1,10 @@ +Headers | mockttp

          Interface Headers

          interface Headers {
              :authority?: string;
              :method?: string;
              :path?: string;
              :scheme?: string;
              content-length?: string;
              content-type?: string;
              cookie?: string;
              host?: string;
              user-agent?: string;
              [key: string]: undefined | string | string[];
          }

          Indexable

          • [key: string]: undefined | string | string[]

          Properties

          :authority?: string
          :method?: string
          :path?: string
          :scheme?: string
          content-length?: string
          content-type?: string
          cookie?: string
          host?: string
          user-agent?: string
          diff --git a/interfaces/HttpsOptions.html b/interfaces/HttpsOptions.html new file mode 100644 index 000000000..502c6fadf --- /dev/null +++ b/interfaces/HttpsOptions.html @@ -0,0 +1,14 @@ +HttpsOptions | mockttp

          Interface HttpsOptions

          interface HttpsOptions {
              cert: string;
              countryName?: string;
              key: string;
              keyLength?: number;
              localityName?: string;
              organizationName?: string;
          }

          Hierarchy

          • BaseCAOptions
            • HttpsOptions

          Properties

          cert: string
          countryName?: string

          The countryName that will be used in the certificate for incoming TLS +connections.

          +
          key: string
          keyLength?: number

          Minimum key length when generating certificates. Defaults to 2048.

          +
          localityName?: string

          The localityName that will be used in the certificate for incoming TLS +connections.

          +
          organizationName?: string

          The organizationName that will be used in the certificate for incoming TLS +connections.

          +
          diff --git a/interfaces/HttpsPathOptions.html b/interfaces/HttpsPathOptions.html new file mode 100644 index 000000000..527e7ed44 --- /dev/null +++ b/interfaces/HttpsPathOptions.html @@ -0,0 +1,14 @@ +HttpsPathOptions | mockttp

          Interface HttpsPathOptions

          interface HttpsPathOptions {
              certPath: string;
              countryName?: string;
              keyLength?: number;
              keyPath: string;
              localityName?: string;
              organizationName?: string;
          }

          Hierarchy

          • BaseCAOptions
            • HttpsPathOptions

          Properties

          certPath: string
          countryName?: string

          The countryName that will be used in the certificate for incoming TLS +connections.

          +
          keyLength?: number

          Minimum key length when generating certificates. Defaults to 2048.

          +
          keyPath: string
          localityName?: string

          The localityName that will be used in the certificate for incoming TLS +connections.

          +
          organizationName?: string

          The organizationName that will be used in the certificate for incoming TLS +connections.

          +
          diff --git a/interfaces/MockedEndpoint.html b/interfaces/MockedEndpoint.html new file mode 100644 index 000000000..a96937765 --- /dev/null +++ b/interfaces/MockedEndpoint.html @@ -0,0 +1,20 @@ +MockedEndpoint | mockttp

          Interface MockedEndpoint

          A mocked endpoint provides methods to see the current state of +a mock rule.

          +
          interface MockedEndpoint {
              id: string;
              getSeenRequests(): Promise<CompletedRequest[]>;
              isPending(): Promise<boolean>;
          }

          Implemented by

          Properties

          id +

          Methods

          Properties

          id: string

          Methods

          • Get the requests that this endpoint has seen so far.

            +

            This method returns a promise, which resolves with the requests seen +up until now, once all ongoing requests have terminated. The returned +lists are immutable, so won't change if more requests arrive in future. +Call getSeenRequests again later to get an updated list.

            +

            Requests are included here once the response is completed, even if the request +itself failed, the responses failed or exceptions are thrown elsewhere. To +watch for errors or detailed response info, look at the various server.on(event) +methods.

            +

            Returns Promise<CompletedRequest[]>

          • Reports whether this endpoint is still pending: if it either hasn't seen the +specified number of requests (if one was specified e.g. with .twice()) +or if it hasn't seen at least one request, by default.

            +

            This method returns a promise, which resolves with the result once all +ongoing requests have terminated.

            +

            Returns Promise<boolean>

          diff --git a/interfaces/MockedEndpointData.html b/interfaces/MockedEndpointData.html new file mode 100644 index 000000000..b1c64b8ea --- /dev/null +++ b/interfaces/MockedEndpointData.html @@ -0,0 +1,5 @@ +MockedEndpointData | mockttp

          Interface MockedEndpointData

          interface MockedEndpointData {
              explanation?: string;
              id: string;
              isPending: boolean;
              seenRequests: CompletedRequest[];
          }

          Properties

          explanation?: string
          id: string
          isPending: boolean
          seenRequests: CompletedRequest[]
          diff --git a/interfaces/Mockttp.html b/interfaces/Mockttp.html new file mode 100644 index 000000000..5f4aa6180 --- /dev/null +++ b/interfaces/Mockttp.html @@ -0,0 +1,360 @@ +Mockttp | mockttp

          Interface Mockttp

          A mockttp instance allow you to start and stop mock servers and control their behaviour.

          +

          This should be created using the exported getLocal or getRemote methods, like +so:

          +
          const mockServer = require('mockttp').getLocal()
          +
          + +

          Call .start() to set up a server on a random port, use .forX methods like .forGet(url), +.forPost(url) and .forAnyRequest() to get a RequestRuleBuilder and start defining +mock rules. You can also mock WebSocket requests using .forAnyWebSocket(). Call .stop() +when your test is complete. An example:

          +
          await mockServer.start();
          await mockServer.forGet('/abc').thenReply(200, "a response");
          // ...Make some requests
          await mockServer.stop(); +
          + +
          interface Mockttp {
              port: number;
              proxyEnv: ProxyEnvConfig;
              url: string;
              addRequestRule(ruleData: RequestRuleData): Promise<MockedEndpoint>;
              addRequestRules(...ruleData: RequestRuleData[]): Promise<MockedEndpoint[]>;
              addWebSocketRule(ruleData: WebSocketRuleData): Promise<MockedEndpoint>;
              addWebSocketRules(...ruleData: WebSocketRuleData[]): Promise<MockedEndpoint[]>;
              enableDebug(): void;
              forAnyRequest(): RequestRuleBuilder;
              forAnyWebSocket(): WebSocketRuleBuilder;
              forDelete(url?: string | RegExp): RequestRuleBuilder;
              forGet(url?: string | RegExp): RequestRuleBuilder;
              forHead(url?: string | RegExp): RequestRuleBuilder;
              forJsonRpcRequest(match?: {
                  method?: string;
                  params?: any;
              }): RequestRuleBuilder;
              forOptions(url?: string | RegExp): RequestRuleBuilder;
              forPatch(url?: string | RegExp): RequestRuleBuilder;
              forPost(url?: string | RegExp): RequestRuleBuilder;
              forPut(url?: string | RegExp): RequestRuleBuilder;
              forUnmatchedRequest(): RequestRuleBuilder;
              getMockedEndpoints(): Promise<MockedEndpoint[]>;
              getPendingEndpoints(): Promise<MockedEndpoint[]>;
              getRuleParameterKeys(): Promise<string[]>;
              on(event: "request-initiated", callback: ((req: Request) => void)): Promise<void>;
              on(event: "request", callback: ((req: CompletedRequest) => void)): Promise<void>;
              on(event: "response", callback: ((req: CompletedResponse) => void)): Promise<void>;
              on(event: "websocket-request", callback: ((req: CompletedRequest) => void)): Promise<void>;
              on(event: "websocket-accepted", callback: ((req: CompletedResponse) => void)): Promise<void>;
              on(event: "websocket-message-received", callback: ((req: WebSocketMessage) => void)): Promise<void>;
              on(event: "websocket-message-sent", callback: ((req: WebSocketMessage) => void)): Promise<void>;
              on(event: "websocket-close", callback: ((req: WebSocketClose) => void)): Promise<void>;
              on(event: "abort", callback: ((req: AbortedRequest) => void)): Promise<void>;
              on(event: "tls-passthrough-opened", callback: ((req: TlsPassthroughEvent) => void)): Promise<void>;
              on(event: "tls-passthrough-closed", callback: ((req: TlsPassthroughEvent) => void)): Promise<void>;
              on(event: "tls-client-error", callback: ((req: TlsRequest) => void)): Promise<void>;
              on(event: "client-error", callback: ((error: ClientError) => void)): Promise<void>;
              on<T>(event: "rule-event", callback: ((event: RuleEvent<T>) => void)): Promise<void>;
              reset(): void;
              setRequestRules(...ruleData: RequestRuleData[]): Promise<MockedEndpoint[]>;
              setWebSocketRules(...ruleData: WebSocketRuleData[]): Promise<MockedEndpoint[]>;
              start(port?: number | PortRange): Promise<void>;
              stop(): Promise<void>;
              urlFor(path: string): string;
          }

          Implemented by

          Events

          • Subscribe to hear about request details as soon as the initial request details +(method, path & headers) are received, without waiting for the body.

            +

            This is only useful in some niche use cases, such as logging all requests seen +by the server independently of the rules defined.

            +

            The callback will be called asynchronously from request handling. This function +returns a promise, and the callback is not guaranteed to be registered until +the promise is resolved.

            +

            Parameters

            • event: "request-initiated"
            • callback: ((req: Request) => void)
                • (req): void
                • Parameters

                  Returns void

            Returns Promise<void>

          • Subscribe to hear about request details once the request is fully received.

            +

            This is only useful in some niche use cases, such as logging all requests seen +by the server independently of the rules defined.

            +

            The callback will be called asynchronously from request handling. This function +returns a promise, and the callback is not guaranteed to be registered until +the promise is resolved.

            +

            Parameters

            Returns Promise<void>

          • Subscribe to hear about response details when the response is completed.

            +

            This is only useful in some niche use cases, such as logging all requests seen +by the server independently of the rules defined.

            +

            The callback will be called asynchronously from request handling. This function +returns a promise, and the callback is not guaranteed to be registered until +the promise is resolved.

            +

            Parameters

            Returns Promise<void>

          • Subscribe to hear about websocket connection requests. This event fires when the +initial WebSocket request is completed, regardless of whether the request is +accepted.

            +

            This is only useful in some niche use cases, such as logging all websockets seen +by the server independently of the rules defined.

            +

            The callback will be called asynchronously from request handling. This function +returns a promise, and the callback is not guaranteed to be registered until +the promise is resolved.

            +

            Parameters

            Returns Promise<void>

          • Subscribe to hear about websocket connection upgrades. This event fires when a +WebSocket request is accepted, returning the HTTP response body that was sent +before the WebSocket stream starts.

            +

            This is only useful in some niche use cases, such as logging all websockets seen +by the server independently of the rules defined.

            +

            The callback will be called asynchronously from request handling. This function +returns a promise, and the callback is not guaranteed to be registered until +the promise is resolved.

            +

            Parameters

            Returns Promise<void>

          • Subscribe to hear about websocket messages received by Mockttp from its downstream +websocket clients. This event fires whenever any data is received on an open +mocked WebSocket.

            +

            This is only useful in some niche use cases, such as logging all websockets seen +by the server independently of the rules defined.

            +

            The callback will be called asynchronously from request handling. This function +returns a promise, and the callback is not guaranteed to be registered until +the promise is resolved.

            +

            Parameters

            Returns Promise<void>

          • Subscribe to hear about websocket messages sent by Mockttp to its downstream +websocket clients. This event fires whenever any data is sent on an open +mocked WebSocket.

            +

            This is only useful in some niche use cases, such as logging all websockets seen +by the server independently of the rules defined.

            +

            The callback will be called asynchronously from request handling. This function +returns a promise, and the callback is not guaranteed to be registered until +the promise is resolved.

            +

            Parameters

            Returns Promise<void>

          • Subscribe to hear when a websocket connection is closed. This fires only for clean +websocket shutdowns, after the websocket was initially accepted. If the connection +is closed uncleanly, an 'abort' event will fire instead. If the websocket was +initially rejected explicitly, a 'response' event (with the rejecting response) will +fire instead.

            +

            This is only useful in some niche use cases, such as logging all websockets seen +by the server independently of the rules defined.

            +

            The callback will be called asynchronously from request handling. This function +returns a promise, and the callback is not guaranteed to be registered until +the promise is resolved.

            +

            Parameters

            Returns Promise<void>

          • Subscribe to hear about requests that are aborted before the request or +response is fully completed.

            +

            This is only useful in some niche use cases, such as logging all requests seen +by the server independently of the rules defined.

            +

            The callback will be called asynchronously from request handling. This function +returns a promise, and the callback is not guaranteed to be registered until +the promise is resolved.

            +

            Parameters

            Returns Promise<void>

          • Subscribe to hear about TLS connections that are passed through the proxy without +interception, due to the tlsPassthrough HTTPS option.

            +

            This is only useful in some niche use cases, such as logging all requests seen +by the server, independently of the rules defined.

            +

            The callback will be called asynchronously from connection handling. This function +returns a promise, and the callback is not guaranteed to be registered until +the promise is resolved.

            +

            Parameters

            Returns Promise<void>

          • Subscribe to hear about closure of TLS connections that were passed through the +proxy without interception, due to the tlsPassthrough HTTPS option.

            +

            This is only useful in some niche use cases, such as logging all requests seen +by the server, independently of the rules defined.

            +

            The callback will be called asynchronously from connection handling. This function +returns a promise, and the callback is not guaranteed to be registered until +the promise is resolved.

            +

            Parameters

            Returns Promise<void>

          • Subscribe to hear about requests that start a TLS handshake, but fail to complete it. +Not all clients report TLS errors explicitly, so this event fires for explicitly +reported TLS errors, and for TLS connections that are immediately closed with no +data sent.

            +

            This is typically useful to detect clients who aren't correctly configured to trust +the configured HTTPS certificate. The callback is given the host name provided +by the client via SNI, if SNI was used (it almost always is).

            +

            This is only useful in some niche use cases, such as logging all requests seen +by the server, independently of the rules defined.

            +

            The callback will be called asynchronously from request handling. This function +returns a promise, and the callback is not guaranteed to be registered until +the promise is resolved.

            +

            Parameters

            • event: "tls-client-error"
            • callback: ((req: TlsRequest) => void)

            Returns Promise<void>

          • Subscribe to hear about requests that fail before successfully sending their +initial parameters (the request line & headers). This will fire for requests +that drop connections early, send invalid or too-long headers, or aren't +correctly parseable in some form.

            +

            This is typically useful to detect clients who aren't correctly configured. +The callback is given an object containing the request (as we were best +able to parse it) and either the error response returned, or 'aborted' +if the connection was disconnected before the server could respond.

            +

            This is only useful in some niche use cases, such as logging all requests +seen by the server, independently of the rules defined.

            +

            The callback will be called asynchronously from request handling. This function +returns a promise, and the callback is not guaranteed to be registered until +the promise is resolved.

            +

            Parameters

            • event: "client-error"
            • callback: ((error: ClientError) => void)

            Returns Promise<void>

          • Some rules may emit events with metadata about request processing. For example, +passthrough rules may emit events about upstream server interactions.

            +

            You can listen to rule-event to hear about all these events. When emitted, +this will include the id of the request being processed, the id of the rule +that fired the event, the type of the event, and the event data itself.

            +

            This is only useful in some niche use cases, such as logging all proxied upstream +requests made by the server, separately from the client connections handled.

            +

            The callback will be called asynchronously from request handling. This function +returns a promise, and the callback is not guaranteed to be registered until +the promise is resolved.

            +

            Type Parameters

            • T = unknown

            Parameters

            • event: "rule-event"
            • callback: ((event: RuleEvent<T>) => void)
                • (event): void
                • Parameters

                  Returns void

            Returns Promise<void>

          Manual rule definition

          • Adds the given HTTP request rule to the server.

            +

            This is a convenient alias for calling addRequestRules with one rule, +and extracting the first endpoint result.

            +

            This API is only useful if you're manually building rules, rather than +using RequestRuleBuilder, and is only for special cases. This approach may +be necessary if you need to configure all your rules in one place to +enable them elsewhere/later.

            +

            Parameters

            Returns Promise<MockedEndpoint>

          • Adds the given HTTP request rules to the server.

            +

            This API is only useful if you're manually building rules, rather than +using RequestRuleBuilder, and is only for special cases. This approach may +be necessary if you need to configure all your rules in one place to +enable them elsewhere/later.

            +

            Parameters

            Returns Promise<MockedEndpoint[]>

          • Adds the given websocket rule to the server.

            +

            This is a convenient alias for calling addWebSocketRules with one rule, +and extracting the first endpoint result.

            +

            This API is only useful if you're manually building rules, rather than +using RequestRuleBuilder, and is only for special cases. This approach may +be necessary if you need to configure all your rules in one place to +enable them elsewhere/later.

            +

            Parameters

            Returns Promise<MockedEndpoint>

          • Adds the given websocket rules to the server.

            +

            This API is only useful if you're manually building rules, rather than +using RequestRuleBuilder, and is only for special cases. This approach may +be necessary if you need to configure all your rules in one place to +enable them elsewhere/later.

            +

            Parameters

            Returns Promise<MockedEndpoint[]>

          • Set the given HTTP request rules as the only request rules on the server, +replacing any existing rules (except websocket rules).

            +

            This API is only useful if you're manually building rules, rather than +using RequestRuleBuilder, and is only for special cases. This approach may +be necessary if you need to configure all your rules in one place to +enable them elsewhere/later.

            +

            Parameters

            Returns Promise<MockedEndpoint[]>

          • Set the given websocket rules as the only websocket rules on the server, +replacing all existing websocket rules (but leaving normal rules untouched).

            +

            This API is only useful if you're manually building rules, rather than +using RequestRuleBuilder, and is only for special cases. This approach may +be necessary if you need to configure all your rules in one place to +enable them elsewhere/later.

            +

            Parameters

            Returns Promise<MockedEndpoint[]>

          Metadata

          port: number

          The port the server is running on.

          +

          This will throw an error if read before the server is started.

          +
          proxyEnv: ProxyEnvConfig

          The environment variables typically needed to use this server as a proxy, in a format you +can add to your environment straight away.

          +

          This will throw an error if read before the server is started.

          +
          process.env = Object.assign(process.env, mockServer.proxyEnv)
          +
          + +
          url: string

          The root URL of the server.

          +

          This will throw an error if read before the server is started.

          +
          • Returns the set of registered but pending mock endpoints: endpoints which either +haven't seen the specified number of requests (if one was specified +e.g. with .twice()) or which haven't seen at least one request, by default.

            +

            Returns Promise<MockedEndpoint[]>

          • List the names of the rule parameters available for rule definitions. These +parameters are defined by the admin server. This list can be used in some +advanced use cases to confirm beforehand that the parameters a client wishes to +reference are available.

            +

            Only relevant to remote/browser Mockttp usage. Servers created directly without any +admin server will never have rule parameters defined, and so this method will always +return an empty list.

            +

            Returns Promise<string[]>

          • The URL for a given path on the server.

            +

            This will throw an error if read before the server is started.

            +

            Parameters

            • path: string

            Returns string

          Mock HTTP requests

          • Get a builder for a mock rule that will match any requests on any path.

            +

            This only matches traditional HTTP requests, not websockets, which are handled +separately. To match websockets, use .forAnyWebSocket().

            +

            Returns RequestRuleBuilder

          • Get a builder for a mock rule that will match DELETE requests for the given path. +If no path is specified, this matches all DELETE requests.

            +

            The path can be either a string, or a regular expression to match against. +Path matching always ignores query parameters. To match query parameters, +use .withQuery({ a: 'b' }) or withExactQuery('?a=b').

            +

            There are a few supported matching formats:

            +
              +
            • Relative string paths (/abc) will be compared only to the request's path, +independent of the host & protocol, ignoring query params.
            • +
            • Absolute string paths with no protocol (localhost:8000/abc) will be +compared to the URL independent of the protocol, ignoring query params.
            • +
            • Fully absolute string paths (http://localhost:8000/abc) will be compared +to entire URL, ignoring query params.
            • +
            • Regular expressions can match the absolute URL: /^http://localhost:8000/abc$/
            • +
            • Regular expressions can also match the path: /^/abc/
            • +
            +

            Parameters

            • Optionalurl: string | RegExp

            Returns RequestRuleBuilder

          • Get a builder for a mock rule that will match GET requests for the given path. +If no path is specified, this matches all GET requests.

            +

            The path can be either a string, or a regular expression to match against. +Path matching always ignores query parameters. To match query parameters, +use .withQuery({ a: 'b' }) or withExactQuery('?a=b').

            +

            There are a few supported matching formats:

            +
              +
            • Relative string paths (/abc) will be compared only to the request's path, +independent of the host & protocol, ignoring query params.
            • +
            • Absolute string paths with no protocol (localhost:8000/abc) will be +compared to the URL independent of the protocol, ignoring query params.
            • +
            • Fully absolute string paths (http://localhost:8000/abc) will be compared +to entire URL, ignoring query params.
            • +
            • Regular expressions can match the absolute URL: /^http://localhost:8000/abc$/
            • +
            • Regular expressions can also match the path: /^/abc/
            • +
            +

            Parameters

            • Optionalurl: string | RegExp

            Returns RequestRuleBuilder

          • Get a builder for a mock rule that will match HEAD requests for the given path. +If no path is specified, this matches all HEAD requests.

            +

            The path can be either a string, or a regular expression to match against. +Path matching always ignores query parameters. To match query parameters, +use .withQuery({ a: 'b' }) or withExactQuery('?a=b').

            +

            There are a few supported matching formats:

            +
              +
            • Relative string paths (/abc) will be compared only to the request's path, +independent of the host & protocol, ignoring query params.
            • +
            • Absolute string paths with no protocol (localhost:8000/abc) will be +compared to the URL independent of the protocol, ignoring query params.
            • +
            • Fully absolute string paths (http://localhost:8000/abc) will be compared +to entire URL, ignoring query params.
            • +
            • Regular expressions can match the absolute URL: /^http://localhost:8000/abc$/
            • +
            • Regular expressions can also match the path: /^/abc/
            • +
            +

            Parameters

            • Optionalurl: string | RegExp

            Returns RequestRuleBuilder

          • Match JSON-RPC requests, optionally matching a given method and/or params.

            +

            If no method or params are specified, this will match all JSON-RPC requests.

            +

            Params are matched flexibly, using the same logic as .withJsonBodyIncluding(), +so only the included fields are checked and other extra fields are ignored

            +

            Parameters

            • Optionalmatch: {
                  method?: string;
                  params?: any;
              }
              • Optionalmethod?: string
              • Optionalparams?: any

            Returns RequestRuleBuilder

          • Get a builder for a mock rule that will match OPTIONS requests for the given path.

            +

            The path can be either a string, or a regular expression to match against. +Path matching always ignores query parameters. To match query parameters, +use .withQuery({ a: 'b' }) or withExactQuery('?a=b').

            +

            There are a few supported matching formats:

            +
              +
            • Relative string paths (/abc) will be compared only to the request's path, +independent of the host & protocol, ignoring query params.
            • +
            • Absolute string paths with no protocol (localhost:8000/abc) will be +compared to the URL independent of the protocol, ignoring query params.
            • +
            • Fully absolute string paths (http://localhost:8000/abc) will be compared +to entire URL, ignoring query params.
            • +
            • Regular expressions can match the absolute URL: /^http://localhost:8000/abc$/
            • +
            • Regular expressions can also match the path: /^/abc/
            • +
            +

            This can only be used if the cors option has been set to false.

            +

            If cors is true (the default when using a remote client, e.g. in the browser), +then the mock server automatically handles OPTIONS requests to ensure requests +to the server are allowed by clients observing CORS rules.

            +

            You can pass {cors: false} to getLocal/getRemote to disable this behaviour, +but if you're testing in a browser you will need to ensure you mock all OPTIONS +requests appropriately so that the browser allows your other requests to be sent.

            +

            Parameters

            • Optionalurl: string | RegExp

            Returns RequestRuleBuilder

          • Get a builder for a mock rule that will match PATCH requests for the given path. +If no path is specified, this matches all PATCH requests.

            +

            The path can be either a string, or a regular expression to match against. +Path matching always ignores query parameters. To match query parameters, +use .withQuery({ a: 'b' }) or withExactQuery('?a=b').

            +

            There are a few supported matching formats:

            +
              +
            • Relative string paths (/abc) will be compared only to the request's path, +independent of the host & protocol, ignoring query params.
            • +
            • Absolute string paths with no protocol (localhost:8000/abc) will be +compared to the URL independent of the protocol, ignoring query params.
            • +
            • Fully absolute string paths (http://localhost:8000/abc) will be compared +to entire URL, ignoring query params.
            • +
            • Regular expressions can match the absolute URL: /^http://localhost:8000/abc$/
            • +
            • Regular expressions can also match the path: /^/abc/
            • +
            +

            Parameters

            • Optionalurl: string | RegExp

            Returns RequestRuleBuilder

          • Get a builder for a mock rule that will match POST requests for the given path. +If no path is specified, this matches all POST requests.

            +

            The path can be either a string, or a regular expression to match against. +Path matching always ignores query parameters. To match query parameters, +use .withQuery({ a: 'b' }) or withExactQuery('?a=b').

            +

            There are a few supported matching formats:

            +
              +
            • Relative string paths (/abc) will be compared only to the request's path, +independent of the host & protocol, ignoring query params.
            • +
            • Absolute string paths with no protocol (localhost:8000/abc) will be +compared to the URL independent of the protocol, ignoring query params.
            • +
            • Fully absolute string paths (http://localhost:8000/abc) will be compared +to entire URL, ignoring query params.
            • +
            • Regular expressions can match the absolute URL: /^http://localhost:8000/abc$/
            • +
            • Regular expressions can also match the path: /^/abc/
            • +
            +

            Parameters

            • Optionalurl: string | RegExp

            Returns RequestRuleBuilder

          • Get a builder for a mock rule that will match PUT requests for the given path. +If no path is specified, this matches all PUT requests.

            +

            The path can be either a string, or a regular expression to match against. +Path matching always ignores query parameters. To match query parameters, +use .withQuery({ a: 'b' }) or withExactQuery('?a=b').

            +

            There are a few supported matching formats:

            +
              +
            • Relative string paths (/abc) will be compared only to the request's path, +independent of the host & protocol, ignoring query params.
            • +
            • Absolute string paths with no protocol (localhost:8000/abc) will be +compared to the URL independent of the protocol, ignoring query params.
            • +
            • Fully absolute string paths (http://localhost:8000/abc) will be compared +to entire URL, ignoring query params.
            • +
            • Regular expressions can match the absolute URL: /^http://localhost:8000/abc$/
            • +
            • Regular expressions can also match the path: /^/abc/
            • +
            +

            Parameters

            • Optionalurl: string | RegExp

            Returns RequestRuleBuilder

          • Get a builder for a fallback mock rule that will match any unmatched requests +on any path.

            +

            Fallback rules act like any other rule, but they only match if there is no +existing normal rule that matches the request, or if all existing rules have +an explicit execution limit (like once()) that has been completed.

            +

            Returns RequestRuleBuilder

          Mock websockets

          Setup

          • Enable extra debug output so you can understand exactly what the server is doing.

            +

            Returns void

          • Reset the stored rules and subscriptions. Most of the time it's better to start & stop +the server instead, but this can be useful in some special cases.

            +

            Returns void

          • Start a mock server.

            +

            Specify a fixed port if you need one.

            +

            If you don't, a random port will be chosen, which you can get later with .port, +or by using .url and .urlFor(path) to generate your URLs automatically.

            +

            If you need to allow port selection, but in a specific range, pass a +{ startPort, endPort } pair to define the allowed (inclusive) range.

            +

            Parameters

            Returns Promise<void>

          • Stop the mock server and reset all rules and subscriptions.

            +

            Returns Promise<void>

          diff --git a/interfaces/MockttpAdminServerOptions.html b/interfaces/MockttpAdminServerOptions.html new file mode 100644 index 000000000..9e1b9cb77 --- /dev/null +++ b/interfaces/MockttpAdminServerOptions.html @@ -0,0 +1,18 @@ +MockttpAdminServerOptions | mockttp

          Interface MockttpAdminServerOptions

          interface MockttpAdminServerOptions {
              corsOptions?: CorsOptions & {
                  allowPrivateNetworkAccess?: boolean;
                  strict?: boolean;
              };
              debug?: boolean;
              ruleParameters?: {
                  [key: string]: any;
              };
              serverDefaults?: MockttpOptions;
              webSocketKeepAlive?: number;
          }

          Hierarchy

          Properties

          corsOptions?: CorsOptions & {
              allowPrivateNetworkAccess?: boolean;
              strict?: boolean;
          }

          Set CORS options to limit the sites which can send requests to manage this admin server.

          +
          debug?: boolean

          Should the admin server print extra debug information? This enables admin server debugging +only - individual mock session debugging must be enabled separately.

          +
          ruleParameters?: {
              [key: string]: any;
          }

          Some rule options can't easily be specified in remote clients, since they need to access +server-side state or Node APIs directly. To handle this, referenceable parameters can +be provided here, and referenced with a { [MOCKTTP_PARAM_REF]: <value> } value in place +of the real parameter in the remote client.

          +
          serverDefaults?: MockttpOptions

          Override the default parameters for servers started from this admin server. These values will be +used for each setting that is not explicitly specified by the client when creating a mock server.

          +
          webSocketKeepAlive?: number

          Set a keep alive frequency in milliseconds for the subscription & stream websockets of each +session, to ensure they remain connected in long-lived connections, especially in browsers which +often close quiet background connections automatically.

          +
          diff --git a/interfaces/MockttpClientOptions.html b/interfaces/MockttpClientOptions.html new file mode 100644 index 000000000..3fdae699a --- /dev/null +++ b/interfaces/MockttpClientOptions.html @@ -0,0 +1,53 @@ +MockttpClientOptions | mockttp

          Interface MockttpClientOptions

          interface MockttpClientOptions {
              adminServerUrl?: string;
              client?: {
                  headers?: {
                      [key: string]: string;
                  };
              };
              cors?: boolean | CorsOptions;
              debug?: boolean;
              http2?: boolean | "fallback";
              https?: MockttpHttpsOptions;
              maxBodySize?: number;
              recordTraffic?: boolean;
              suggestChanges?: boolean;
          }

          Hierarchy (view full)

          Properties

          adminServerUrl?: string

          The full URL to use to connect to a Mockttp admin server when using a +remote (or local but browser) client.

          +

          When using a local server, this option is ignored.

          +
          client?: {
              headers?: {
                  [key: string]: string;
              };
          }

          Options to include on all client requests, e.g. to add extra +headers for authentication.

          +
          cors?: boolean | CorsOptions

          Should the server automatically respond to OPTIONS requests with a permissive +response?

          +

          Defaults to true for remote clients (e.g. in the browser), and false otherwise. +If this is set to false, browser requests will typically fail unless you +stub OPTIONS responses by hand.

          +
          debug?: boolean

          Should the server print extra debug information?

          +
          http2?: boolean | "fallback"

          Should HTTP/2 be enabled? Can be true, false, or 'fallback'. If true, +HTTP/2 is used for all clients supporting it. If false, HTTP/2 is never +used. If 'fallback' HTTP/2 is used only for clients that do not advertise +support for HTTP/1.1, but HTTP/1.1 is used by preference in all other +cases.

          +

          Client HTTP/2 support is only advertised as part of the TLS options. +When no HTTPS configuration is provided, 'fallback' is equivalent to +false.

          +

          The HTTPS settings to be used. Optional, only HTTP interception will be +enabled if omitted. This should be set to either a { key, cert } object +containing the private key and certificate in PEM format, or a { keyPath, +certPath } object containing the path to files containing that content.

          +
          maxBodySize?: number

          The maximum body size to process, in bytes.

          +

          Bodies larger than this will be dropped, becoming empty, so they won't match +body matchers, won't be available in .seenRequests, and won't be included in +subscribed event data. Body data will still typically be included in passed +through request & response data, in most cases, so this won't affect the +external HTTP clients otherwise.

          +
          recordTraffic?: boolean

          Record the requests & response for all traffic matched by each rule, and make +it available via endpoint.getSeenRequests().

          +

          Defaults to true. It can be useful to set this to false if lots of data will +be sent to/via the server, to avoid storing all traffic in memory unnecessarily, +if getSeenRequests will not be used.

          +

          If this is set to false then getSeenRequests() will always return +an empty array. This only disables the built-in persistence of request data, +so traffic can still be captured live or stored elsewhere using +.on('request') & .on('response').

          +
          suggestChanges?: boolean

          By default, requests that match no rules will receive an explanation of the +request & existing rules, followed by some suggested example Mockttp code +which could be used to match the rule.

          +

          In some cases where the end client is unaware of Mockttp, these example +suggestions are just confusing. Set suggestChanges to false to disable it.

          +
          diff --git a/interfaces/MockttpOptions.html b/interfaces/MockttpOptions.html new file mode 100644 index 000000000..147db49a2 --- /dev/null +++ b/interfaces/MockttpOptions.html @@ -0,0 +1,46 @@ +MockttpOptions | mockttp

          Interface MockttpOptions

          interface MockttpOptions {
              cors?: boolean | CorsOptions;
              debug?: boolean;
              http2?: boolean | "fallback";
              https?: MockttpHttpsOptions;
              maxBodySize?: number;
              recordTraffic?: boolean;
              suggestChanges?: boolean;
          }

          Hierarchy (view full)

          Properties

          cors?: boolean | CorsOptions

          Should the server automatically respond to OPTIONS requests with a permissive +response?

          +

          Defaults to true for remote clients (e.g. in the browser), and false otherwise. +If this is set to false, browser requests will typically fail unless you +stub OPTIONS responses by hand.

          +
          debug?: boolean

          Should the server print extra debug information?

          +
          http2?: boolean | "fallback"

          Should HTTP/2 be enabled? Can be true, false, or 'fallback'. If true, +HTTP/2 is used for all clients supporting it. If false, HTTP/2 is never +used. If 'fallback' HTTP/2 is used only for clients that do not advertise +support for HTTP/1.1, but HTTP/1.1 is used by preference in all other +cases.

          +

          Client HTTP/2 support is only advertised as part of the TLS options. +When no HTTPS configuration is provided, 'fallback' is equivalent to +false.

          +

          The HTTPS settings to be used. Optional, only HTTP interception will be +enabled if omitted. This should be set to either a { key, cert } object +containing the private key and certificate in PEM format, or a { keyPath, +certPath } object containing the path to files containing that content.

          +
          maxBodySize?: number

          The maximum body size to process, in bytes.

          +

          Bodies larger than this will be dropped, becoming empty, so they won't match +body matchers, won't be available in .seenRequests, and won't be included in +subscribed event data. Body data will still typically be included in passed +through request & response data, in most cases, so this won't affect the +external HTTP clients otherwise.

          +
          recordTraffic?: boolean

          Record the requests & response for all traffic matched by each rule, and make +it available via endpoint.getSeenRequests().

          +

          Defaults to true. It can be useful to set this to false if lots of data will +be sent to/via the server, to avoid storing all traffic in memory unnecessarily, +if getSeenRequests will not be used.

          +

          If this is set to false then getSeenRequests() will always return +an empty array. This only disables the built-in persistence of request data, +so traffic can still be captured live or stored elsewhere using +.on('request') & .on('response').

          +
          suggestChanges?: boolean

          By default, requests that match no rules will receive an explanation of the +request & existing rules, followed by some suggested example Mockttp code +which could be used to match the rule.

          +

          In some cases where the end client is unaware of Mockttp, these example +suggestions are just confusing. Set suggestChanges to false to disable it.

          +
          diff --git a/interfaces/MockttpPluggableAdmin.MockttpClientResponse.html b/interfaces/MockttpPluggableAdmin.MockttpClientResponse.html new file mode 100644 index 000000000..23118279a --- /dev/null +++ b/interfaces/MockttpPluggableAdmin.MockttpClientResponse.html @@ -0,0 +1,3 @@ +MockttpClientResponse | mockttp
          interface MockttpClientResponse {
              mockRoot: string;
              port: number;
          }

          Properties

          Properties

          mockRoot: string
          port: number
          diff --git a/interfaces/MockttpPluggableAdmin.MockttpPluginOptions.html b/interfaces/MockttpPluggableAdmin.MockttpPluginOptions.html new file mode 100644 index 000000000..0faf04084 --- /dev/null +++ b/interfaces/MockttpPluggableAdmin.MockttpPluginOptions.html @@ -0,0 +1,3 @@ +MockttpPluginOptions | mockttp
          interface MockttpPluginOptions {
              options?: Partial<MockttpOptions>;
              port?: number | PortRange;
          }

          Properties

          Properties

          options?: Partial<MockttpOptions>
          port?: number | PortRange
          diff --git a/interfaces/OngoingBody.html b/interfaces/OngoingBody.html new file mode 100644 index 000000000..59911ad63 --- /dev/null +++ b/interfaces/OngoingBody.html @@ -0,0 +1,7 @@ +OngoingBody | mockttp

          Interface OngoingBody

          interface OngoingBody {
              asBuffer: (() => Promise<Buffer>);
              asDecodedBuffer: (() => Promise<Buffer>);
              asFormData: (() => Promise<{
                  [key: string]: string | string[] | undefined;
              }>);
              asJson: (() => Promise<object>);
              asStream: (() => Readable);
              asText: (() => Promise<string>);
          }

          Properties

          asBuffer: (() => Promise<Buffer>)
          asDecodedBuffer: (() => Promise<Buffer>)
          asFormData: (() => Promise<{
              [key: string]: string | string[] | undefined;
          }>)
          asJson: (() => Promise<object>)
          asStream: (() => Readable)
          asText: (() => Promise<string>)
          diff --git a/interfaces/OngoingRequest.html b/interfaces/OngoingRequest.html new file mode 100644 index 000000000..442ea6866 --- /dev/null +++ b/interfaces/OngoingRequest.html @@ -0,0 +1,17 @@ +OngoingRequest | mockttp

          Interface OngoingRequest

          interface OngoingRequest {
              body: OngoingBody;
              headers: Headers;
              hostname?: string;
              httpVersion?: string;
              id: string;
              matchedRuleId?: string;
              method: string;
              path: string;
              protocol: string;
              rawHeaders: RawHeaders;
              rawTrailers?: RawHeaders;
              remoteIpAddress?: string;
              remotePort?: number;
              tags: string[];
              timingEvents: TimingEvents;
              url: string;
          }

          Hierarchy (view full)

          Properties

          headers: Headers
          hostname?: string
          httpVersion?: string
          id: string
          matchedRuleId?: string
          method: string
          path: string
          protocol: string
          rawHeaders: RawHeaders
          rawTrailers?: RawHeaders
          remoteIpAddress?: string
          remotePort?: number
          tags: string[]
          timingEvents: TimingEvents
          url: string
          diff --git a/interfaces/OngoingResponse.html b/interfaces/OngoingResponse.html new file mode 100644 index 000000000..24a2ef1b9 --- /dev/null +++ b/interfaces/OngoingResponse.html @@ -0,0 +1,21 @@ +OngoingResponse | mockttp

          Interface OngoingResponse

          interface OngoingResponse {
              body: OngoingBody;
              id: string;
              tags: string[];
              timingEvents: TimingEvents;
              getHeaders(): Headers;
              getRawHeaders(): RawHeaders;
              getRawTrailers(): RawHeaders;
          }

          Hierarchy

          • ServerResponse
            • OngoingResponse

          Properties

          id: string
          tags: string[]
          timingEvents: TimingEvents

          Methods

          • Returns a shallow copy of the current outgoing headers. Since a shallow +copy is used, array values may be mutated without additional calls to +various header-related HTTP module methods. The keys of the returned +object are the header names and the values are the respective header +values. All header names are lowercase.

            +

            The object returned by the outgoingMessage.getHeaders() method does +not prototypically inherit from the JavaScript Object. This means that +typical Object methods such as obj.toString(), obj.hasOwnProperty(), +and others are not defined and will not work.

            +
            outgoingMessage.setHeader('Foo', 'bar');
            outgoingMessage.setHeader('Set-Cookie', ['foo=bar', 'bar=baz']);

            const headers = outgoingMessage.getHeaders();
            // headers === { foo: 'bar', 'set-cookie': ['foo=bar', 'bar=baz'] } +
            + +

            Returns Headers

            v7.7.0

            +
          diff --git a/interfaces/PassThroughHandlerConnectionOptions.html b/interfaces/PassThroughHandlerConnectionOptions.html new file mode 100644 index 000000000..972c4cf0c --- /dev/null +++ b/interfaces/PassThroughHandlerConnectionOptions.html @@ -0,0 +1,48 @@ +PassThroughHandlerConnectionOptions | mockttp

          Interface PassThroughHandlerConnectionOptions

          This defines the upstream connection parameters. These passthrough parameters +are shared between both WebSocket & Request passthrough rules.

          +
          interface PassThroughHandlerConnectionOptions {
              additionalTrustedCAs?: CADefinition[];
              clientCertificateHostMap?: {
                  [host: string]: {
                      passphrase?: string;
                      pfx: Buffer;
                  };
              };
              forwarding?: ForwardingOptions;
              ignoreHostHttpsErrors?: boolean | string[];
              lookupOptions?: PassThroughLookupOptions;
              proxyConfig?: ProxyConfig;
              trustAdditionalCAs?: CADefinition[];
          }

          Hierarchy (view full)

          Properties

          additionalTrustedCAs?: CADefinition[]

          An array of additional certificates, which should be trusted as certificate +authorities for upstream hosts, in addition to Node.js's built-in certificate +authorities.

          +

          Each certificate should be an object with either a cert key and a string +or buffer value containing the PEM certificate, or a certPath key and a +string value containing the local path to the PEM certificate.

          +
          clientCertificateHostMap?: {
              [host: string]: {
                  passphrase?: string;
                  pfx: Buffer;
              };
          }

          A mapping of hosts to client certificates to use, in the form of +{ key, cert } objects (none, by default)

          +
          forwarding?: ForwardingOptions

          The forwarding configuration for the passthrough rule. +This generally shouldn't be used explicitly unless you're +building rule data by hand. Instead, call thenPassThrough +to send data directly or thenForwardTo with options to +configure traffic forwarding.

          +
          ignoreHostHttpsErrors?: boolean | string[]

          A list of hostnames for which server certificate and TLS version errors +should be ignored (none, by default).

          +

          If set to 'true', HTTPS errors will be ignored for all hosts. WARNING: +Use this at your own risk. Setting this to true can open your +application to MITM attacks and should never be used over any network +that is not completed trusted end-to-end.

          +
          lookupOptions?: PassThroughLookupOptions

          Custom DNS options, to allow configuration of the resolver used +when forwarding requests upstream. Passing any option switches +from using node's default dns.lookup function to using the +cacheable-lookup module, which will cache responses.

          +
          proxyConfig?: ProxyConfig

          Upstream proxy configuration: pass through requests via this proxy.

          +

          If this is undefined, no proxy will be used. To configure a proxy +provide either:

          +
            +
          • a ProxySettings object
          • +
          • a callback which will be called with an object containing the +hostname, and must return a ProxySettings object or undefined.
          • +
          • an array of ProxySettings or callbacks. The array will be +processed in order, and the first not-undefined ProxySettings +found will be used.
          • +
          +

          When using a remote client, this parameter or individual array +values may be passed by reference, using the name of a rule +parameter configured in the admin server.

          +
          trustAdditionalCAs?: CADefinition[]

          Deprecated alias for additionalTrustedCAs

          +
          diff --git a/interfaces/PluggableAdmin.AdminClientOptions.html b/interfaces/PluggableAdmin.AdminClientOptions.html new file mode 100644 index 000000000..5205db156 --- /dev/null +++ b/interfaces/PluggableAdmin.AdminClientOptions.html @@ -0,0 +1,14 @@ +AdminClientOptions | mockttp

          Interface AdminClientOptions

          interface AdminClientOptions {
              adminServerUrl?: string;
              adminStreamReconnectAttempts?: number;
              debug?: boolean;
              requestOptions?: {
                  headers?: {
                      [key: string]: string;
                  };
              };
          }

          Properties

          adminServerUrl?: string

          The full URL to use to connect to a Mockttp admin server when using a +remote (or local but browser) client.

          +

          When using a local server, this option is ignored.

          +
          adminStreamReconnectAttempts?: number

          If the admin stream disconnects, how many times should we try to +reconnect? Increasing this can be useful in unstable environments, such +as desktop app use case, while fewer retries will provide faster shutdown +in environments where you may be killing processes intentionally.

          +
          debug?: boolean

          Should the client print extra debug information?

          +
          requestOptions?: {
              headers?: {
                  [key: string]: string;
              };
          }

          Options to include on all client requests.

          +
          diff --git a/interfaces/PluggableAdmin.AdminPlugin.html b/interfaces/PluggableAdmin.AdminPlugin.html new file mode 100644 index 000000000..cfafe783d --- /dev/null +++ b/interfaces/PluggableAdmin.AdminPlugin.html @@ -0,0 +1,7 @@ +AdminPlugin | mockttp

          Interface AdminPlugin<StartParams, ClientResponse>

          interface AdminPlugin<StartParams, ClientResponse> {
              buildResolvers: ((stream: Duplex, ruleParameters: {
                  [key: string]: any;
              }) => IResolvers);
              enableDebug?: (() => void);
              reset?: (() => MaybePromise<void>);
              schema: string | DocumentNode;
              start: ((options: StartParams) => MaybePromise<ClientResponse>);
              stop: (() => MaybePromise<void>);
          }

          Type Parameters

          • StartParams
          • ClientResponse

          Implemented by

          Properties

          buildResolvers: ((stream: Duplex, ruleParameters: {
              [key: string]: any;
          }) => IResolvers)
          enableDebug?: (() => void)
          reset?: (() => MaybePromise<void>)
          schema: string | DocumentNode
          start: ((options: StartParams) => MaybePromise<ClientResponse>)
          stop: (() => MaybePromise<void>)
          diff --git a/interfaces/PluggableAdmin.AdminQuery.html b/interfaces/PluggableAdmin.AdminQuery.html new file mode 100644 index 000000000..e0528d083 --- /dev/null +++ b/interfaces/PluggableAdmin.AdminQuery.html @@ -0,0 +1,4 @@ +AdminQuery | mockttp

          Interface AdminQuery<Response, Result>

          interface AdminQuery<Response, Result> {
              query: DocumentNode;
              transformResponse?: ((result: Response, context: QueryContext) => MaybePromise<Result>);
              variables?: {};
          }

          Type Parameters

          • Response extends unknown
          • Result extends unknown = Response

          Properties

          query: DocumentNode
          transformResponse?: ((result: Response, context: QueryContext) => MaybePromise<Result>)
          variables?: {}
          diff --git a/interfaces/PluggableAdmin.AdminServerOptions.html b/interfaces/PluggableAdmin.AdminServerOptions.html new file mode 100644 index 000000000..462bae7ad --- /dev/null +++ b/interfaces/PluggableAdmin.AdminServerOptions.html @@ -0,0 +1,18 @@ +AdminServerOptions | mockttp

          Interface AdminServerOptions<Plugins>

          interface AdminServerOptions<Plugins> {
              corsOptions?: CorsOptions & {
                  allowPrivateNetworkAccess?: boolean;
                  strict?: boolean;
              };
              debug?: boolean;
              pluginDefaults?: Partial<PluginStartParamsMap<Plugins>>;
              ruleParameters?: {
                  [key: string]: any;
              };
              webSocketKeepAlive?: number;
          }

          Type Parameters

          • Plugins extends {
                [key: string]: AdminPlugin<any, any>;
            }

          Properties

          corsOptions?: CorsOptions & {
              allowPrivateNetworkAccess?: boolean;
              strict?: boolean;
          }

          Set CORS options to limit the sites which can send requests to manage this admin server.

          +
          debug?: boolean

          Should the admin server print extra debug information? This enables admin server debugging +only - individual mock session debugging must be enabled separately.

          +
          pluginDefaults?: Partial<PluginStartParamsMap<Plugins>>

          Override the default parameters for sessions started from this admin server. These values will be +used for each setting that is not explicitly specified by the client when creating a mock session.

          +
          ruleParameters?: {
              [key: string]: any;
          }

          Some rule options can't easily be specified in remote clients, since they need to access +server-side state or Node APIs directly. To handle this, referenceable parameters can +be provided here, and referenced with a { [MOCKTTP_PARAM_REF]: <value> } value in place +of the real parameter in the remote client.

          +
          webSocketKeepAlive?: number

          Set a keep alive frequency in milliseconds for the subscription & stream websockets of each +session, to ensure they remain connected in long-lived connections, especially in browsers which +often close quiet background connections automatically.

          +
          diff --git a/interfaces/PluggableAdmin.QueryContext.html b/interfaces/PluggableAdmin.QueryContext.html new file mode 100644 index 000000000..bacacdbe3 --- /dev/null +++ b/interfaces/PluggableAdmin.QueryContext.html @@ -0,0 +1,2 @@ +QueryContext | mockttp

          Interface QueryContext

          interface QueryContext {
              adminClient: AdminClient<{}>;
          }

          Properties

          Properties

          adminClient: AdminClient<{}>
          diff --git a/interfaces/ProxyEnvConfig.html b/interfaces/ProxyEnvConfig.html new file mode 100644 index 000000000..3f46fe1f5 --- /dev/null +++ b/interfaces/ProxyEnvConfig.html @@ -0,0 +1,3 @@ +ProxyEnvConfig | mockttp

          Interface ProxyEnvConfig

          interface ProxyEnvConfig {
              HTTP_PROXY: string;
              HTTPS_PROXY: string;
          }

          Properties

          Properties

          HTTP_PROXY: string
          HTTPS_PROXY: string
          diff --git a/interfaces/ProxySetting.html b/interfaces/ProxySetting.html new file mode 100644 index 000000000..9b4c62015 --- /dev/null +++ b/interfaces/ProxySetting.html @@ -0,0 +1,38 @@ +ProxySetting | mockttp

          Interface ProxySetting

          A ProxySetting is a specific proxy setting to use, which is passed to a proxy agent +who will manage creating a socket for the request (directly, or tunnelled, or whatever).

          +
          interface ProxySetting {
              additionalTrustedCAs?: CADefinition[];
              noProxy?: string[];
              proxyUrl: string;
              trustedCAs?: (string | CADefinition)[];
          }

          Properties

          additionalTrustedCAs?: CADefinition[]

          Extra CAs to trust for HTTPS connections to the proxy. Ignored if the connection +to the proxy is not HTTPS.

          +

          This appends to the list of trusted CAs, and is mutually exclusive with the +trustedCAs option, which completely overrides the list of CAs.

          +
          noProxy?: string[]

          A list of no-proxy values, matching hosts' traffic should not be proxied.

          +

          This is a common proxy feature, but unfortunately isn't standardized. See +https://about.gitlab.com/blog/2021/01/27/we-need-to-talk-no-proxy/ for some +background. This implementation is intended to match Curl's behaviour, and +any differences are a bug.

          +

          The currently supported formats are:

          +
            +
          • example.com (matches domain and all subdomains)
          • +
          • example.com:443 (matches domain and all subdomains, but only on that port)
          • +
          • 10.0.0.1 (matches IP, but only when used directly - does not resolve domains)
          • +
          +

          Some other formats (e.g. leading dots or *.) will work, but the leading +characters are ignored. More formats may be added in future, e.g. CIDR ranges. +To maximize compatibility with values used elsewhere, unrecognized formats +will generally be ignored, but may match in unexpected ways.

          +
          proxyUrl: string

          The URL for the proxy to forward traffic through.

          +

          This can be any URL supported by https://www.npmjs.com/package/proxy-agent. +For example: http://..., socks5://..., pac+http://...

          +
          trustedCAs?: (string | CADefinition)[]

          CAs to trust for HTTPS connections to the proxy. Ignored if the connection to +the proxy is not HTTPS. If not specified, this will default to the Node +defaults, or you can override them here completely.

          +

          This sets the complete list of trusted CAs, and is mutually exclusive with the +additionalTrustedCAs option, which adds additional CAs (but also trusts the +Node default CAs too).

          +

          This should be specified as either a { cert: string | Buffer } object or a +{ certPath: string } object (to read the cert from disk). The previous +simple string format is supported but deprecated.

          +
          diff --git a/interfaces/Request.html b/interfaces/Request.html new file mode 100644 index 000000000..ca62cb7ff --- /dev/null +++ b/interfaces/Request.html @@ -0,0 +1,15 @@ +Request | mockttp

          Interface Request

          interface Request {
              headers: Headers;
              hostname?: string;
              httpVersion?: string;
              id: string;
              matchedRuleId?: string;
              method: string;
              path: string;
              protocol: string;
              rawHeaders: RawHeaders;
              remoteIpAddress?: string;
              remotePort?: number;
              tags: string[];
              timingEvents: TimingEvents;
              url: string;
          }

          Hierarchy (view full)

          Properties

          headers: Headers
          hostname?: string
          httpVersion?: string
          id: string
          matchedRuleId?: string
          method: string
          path: string
          protocol: string
          rawHeaders: RawHeaders
          remoteIpAddress?: string
          remotePort?: number
          tags: string[]
          timingEvents: TimingEvents
          url: string
          diff --git a/interfaces/RequestRuleData.html b/interfaces/RequestRuleData.html new file mode 100644 index 000000000..b8590075b --- /dev/null +++ b/interfaces/RequestRuleData.html @@ -0,0 +1,6 @@ +RequestRuleData | mockttp

          Interface RequestRuleData

          interface RequestRuleData {
              completionChecker?: RuleCompletionChecker;
              handler: RequestHandlerDefinition | RequestHandler;
              id?: string;
              matchers: RequestMatcher[];
              priority?: number;
          }

          Properties

          completionChecker?: RuleCompletionChecker
          id?: string
          matchers: RequestMatcher[]
          priority?: number
          diff --git a/interfaces/RuleEvent.html b/interfaces/RuleEvent.html new file mode 100644 index 000000000..0fa939734 --- /dev/null +++ b/interfaces/RuleEvent.html @@ -0,0 +1,6 @@ +RuleEvent | mockttp

          Interface RuleEvent<T>

          An event fired from an individual rule during request processing.

          +
          interface RuleEvent<T> {
              eventData: T;
              eventType: string;
              requestId: string;
              ruleId: string;
          }

          Type Parameters

          • T = unknown

          Properties

          eventData: T
          eventType: string
          requestId: string
          ruleId: string
          diff --git a/interfaces/TimingEvents.html b/interfaces/TimingEvents.html new file mode 100644 index 000000000..b36225e8b --- /dev/null +++ b/interfaces/TimingEvents.html @@ -0,0 +1,9 @@ +TimingEvents | mockttp

          Interface TimingEvents

          interface TimingEvents {
              abortedTimestamp?: number;
              bodyReceivedTimestamp?: number;
              headersSentTimestamp?: number;
              responseSentTimestamp?: number;
              startTime: number;
              startTimestamp: number;
              wsAcceptedTimestamp?: number;
              wsClosedTimestamp?: number;
          }

          Properties

          abortedTimestamp?: number
          bodyReceivedTimestamp?: number
          headersSentTimestamp?: number
          responseSentTimestamp?: number
          startTime: number
          startTimestamp: number
          wsAcceptedTimestamp?: number
          wsClosedTimestamp?: number
          diff --git a/interfaces/TlsConnectionEvent.html b/interfaces/TlsConnectionEvent.html new file mode 100644 index 000000000..02d7a9814 --- /dev/null +++ b/interfaces/TlsConnectionEvent.html @@ -0,0 +1,7 @@ +TlsConnectionEvent | mockttp

          Interface TlsConnectionEvent

          interface TlsConnectionEvent {
              hostname?: string;
              remoteIpAddress: string;
              remotePort: number;
              tags: string[];
              timingEvents: TlsTimingEvents;
              tlsMetadata: TlsSocketMetadata;
          }

          Hierarchy (view full)

          Properties

          hostname?: string
          remoteIpAddress: string
          remotePort: number
          tags: string[]
          timingEvents: TlsTimingEvents
          tlsMetadata: TlsSocketMetadata
          diff --git a/interfaces/TlsFailureTimingEvents.html b/interfaces/TlsFailureTimingEvents.html new file mode 100644 index 000000000..17ba7b717 --- /dev/null +++ b/interfaces/TlsFailureTimingEvents.html @@ -0,0 +1,21 @@ +TlsFailureTimingEvents | mockttp

          Interface TlsFailureTimingEvents

          interface TlsFailureTimingEvents {
              connectTimestamp: number;
              disconnectTimestamp?: number;
              failureTimestamp: number;
              handshakeTimestamp?: number;
              startTime: number;
              tunnelTimestamp?: number;
          }

          Hierarchy (view full)

          Properties

          connectTimestamp: number

          When the socket initially connected, equivalent to startTime.

          +

          High-precision floating-point monotonically increasing timestamps. +Comparable and precise, but not related to specific current time.

          +
          disconnectTimestamp?: number

          When the connection was closed, if it has been closed.

          +
          failureTimestamp: number

          When the TLS connection failed. This may be due to a failed handshake +(in which case handshakeTimestamp will be undefined) or due to a +subsequent error which means the TLS connection was not usable (like +an immediate closure due to an async certificate rejection).

          +
          handshakeTimestamp?: number

          When Mockttp's handshake for this connection was completed (if there +was one). This is not set for passed through connections.

          +
          startTime: number

          When the socket initially connected, in MS since the unix +epoch.

          +
          tunnelTimestamp?: number

          When the outer tunnel (e.g. a preceeding CONNECT request) was created, +if there was one.

          +
          diff --git a/interfaces/TlsPassthroughEvent.html b/interfaces/TlsPassthroughEvent.html new file mode 100644 index 000000000..26df7d9ad --- /dev/null +++ b/interfaces/TlsPassthroughEvent.html @@ -0,0 +1,9 @@ +TlsPassthroughEvent | mockttp

          Interface TlsPassthroughEvent

          interface TlsPassthroughEvent {
              hostname?: string;
              id: string;
              remoteIpAddress: string;
              remotePort: number;
              tags: string[];
              timingEvents: TlsTimingEvents;
              tlsMetadata: TlsSocketMetadata;
              upstreamPort: number;
          }

          Hierarchy (view full)

          Properties

          hostname?: string
          id: string
          remoteIpAddress: string
          remotePort: number
          tags: string[]
          timingEvents: TlsTimingEvents
          tlsMetadata: TlsSocketMetadata
          upstreamPort: number
          diff --git a/interfaces/TlsRequest.html b/interfaces/TlsRequest.html new file mode 100644 index 000000000..cccda34f1 --- /dev/null +++ b/interfaces/TlsRequest.html @@ -0,0 +1,8 @@ +TlsRequest | mockttp

          Interface TlsRequest

          interface TlsRequest {
              failureCause:
                  | "closed"
                  | "reset"
                  | "unknown"
                  | "cert-rejected"
                  | "no-shared-cipher"
                  | "handshake-timeout";
              hostname?: string;
              remoteIpAddress: string;
              remotePort: number;
              tags: string[];
              timingEvents: TlsFailureTimingEvents;
              tlsMetadata: TlsSocketMetadata;
          }

          Hierarchy (view full)

          Properties

          failureCause:
              | "closed"
              | "reset"
              | "unknown"
              | "cert-rejected"
              | "no-shared-cipher"
              | "handshake-timeout"
          hostname?: string
          remoteIpAddress: string
          remotePort: number
          tags: string[]
          tlsMetadata: TlsSocketMetadata
          diff --git a/interfaces/TlsSocketMetadata.html b/interfaces/TlsSocketMetadata.html new file mode 100644 index 000000000..02fa6e89b --- /dev/null +++ b/interfaces/TlsSocketMetadata.html @@ -0,0 +1,6 @@ +TlsSocketMetadata | mockttp

          Interface TlsSocketMetadata

          interface TlsSocketMetadata {
              clientAlpn?: string[];
              connectHostname?: string;
              connectPort?: string;
              ja3Fingerprint?: string;
              sniHostname?: string;
          }

          Properties

          clientAlpn?: string[]
          connectHostname?: string
          connectPort?: string
          ja3Fingerprint?: string
          sniHostname?: string
          diff --git a/interfaces/TlsTimingEvents.html b/interfaces/TlsTimingEvents.html new file mode 100644 index 000000000..be72314a4 --- /dev/null +++ b/interfaces/TlsTimingEvents.html @@ -0,0 +1,16 @@ +TlsTimingEvents | mockttp

          Interface TlsTimingEvents

          interface TlsTimingEvents {
              connectTimestamp: number;
              disconnectTimestamp?: number;
              handshakeTimestamp?: number;
              startTime: number;
              tunnelTimestamp?: number;
          }

          Hierarchy (view full)

          Properties

          connectTimestamp: number

          When the socket initially connected, equivalent to startTime.

          +

          High-precision floating-point monotonically increasing timestamps. +Comparable and precise, but not related to specific current time.

          +
          disconnectTimestamp?: number

          When the connection was closed, if it has been closed.

          +
          handshakeTimestamp?: number

          When Mockttp's handshake for this connection was completed (if there +was one). This is not set for passed through connections.

          +
          startTime: number

          When the socket initially connected, in MS since the unix +epoch.

          +
          tunnelTimestamp?: number

          When the outer tunnel (e.g. a preceeding CONNECT request) was created, +if there was one.

          +
          diff --git a/interfaces/Trailers.html b/interfaces/Trailers.html new file mode 100644 index 000000000..10c6208f5 --- /dev/null +++ b/interfaces/Trailers.html @@ -0,0 +1 @@ +Trailers | mockttp

          Interface Trailers

          Indexable

          • [key: string]: undefined | string | string[]
          diff --git a/interfaces/WebSocketClose.html b/interfaces/WebSocketClose.html new file mode 100644 index 000000000..6820d17a9 --- /dev/null +++ b/interfaces/WebSocketClose.html @@ -0,0 +1,17 @@ +WebSocketClose | mockttp

          Interface WebSocketClose

          interface WebSocketClose {
              closeCode: undefined | number;
              closeReason: string;
              streamId: string;
              tags: string[];
              timingEvents: TimingEvents;
          }

          Properties

          closeCode: undefined | number

          The close code of the shutdown. This is the close code that was received +from the remote client (either initiated remotely, or echoing our own sent +close frame).

          +

          This may be undefined only if a close frame was received but did not contain +any close code. If no close frame was received before the connection was +lost (i.e. the connection was not cleanly closed) this event will not +fire at all, and an 'abort' event will fire instead.

          +
          closeReason: string

          The close reason of the shutdown.

          +
          streamId: string

          The id of this websocket stream. This will match the id of the request, +the initial connection response, and any other WebSocket events for the +same connection stream.

          +
          tags: string[]
          timingEvents: TimingEvents
          diff --git a/interfaces/WebSocketMessage.html b/interfaces/WebSocketMessage.html new file mode 100644 index 000000000..86384f97d --- /dev/null +++ b/interfaces/WebSocketMessage.html @@ -0,0 +1,18 @@ +WebSocketMessage | mockttp

          Interface WebSocketMessage

          interface WebSocketMessage {
              content: Uint8Array;
              direction: "sent" | "received";
              eventTimestamp: number;
              isBinary: boolean;
              streamId: string;
              tags: string[];
              timingEvents: TimingEvents;
          }

          Properties

          content: Uint8Array

          The contents of the message as a raw buffer. This is already decompressed, +if the WebSocket uses compression.

          +
          direction: "sent" | "received"

          Whether the message was sent by Mockttp, or received from a Mockttp client.

          +
          eventTimestamp: number

          A high-precision floating-point monotonically increasing timestamp. +Comparable and precise, but not related to specific current time.

          +

          To link this to the current time, compare it to timingEvents.startTime.

          +
          isBinary: boolean

          Whether this is a string message or a raw binary data message.

          +
          streamId: string

          The id of this websocket stream. This will match the id of the request, +the initial connection response, and any other WebSocket events for the +same connection stream.

          +
          tags: string[]
          timingEvents: TimingEvents
          diff --git a/interfaces/WebSocketRuleData.html b/interfaces/WebSocketRuleData.html new file mode 100644 index 000000000..5d48adac5 --- /dev/null +++ b/interfaces/WebSocketRuleData.html @@ -0,0 +1,6 @@ +WebSocketRuleData | mockttp

          Interface WebSocketRuleData

          interface WebSocketRuleData {
              completionChecker?: RuleCompletionChecker;
              handler: WebSocketHandlerDefinition | WebSocketHandler;
              id?: string;
              matchers: RequestMatcher[];
              priority?: number;
          }

          Properties

          completionChecker?: RuleCompletionChecker
          id?: string
          matchers: RequestMatcher[]
          priority?: number
          diff --git a/interfaces/completionCheckers.RuleCompletionChecker.html b/interfaces/completionCheckers.RuleCompletionChecker.html new file mode 100644 index 000000000..5e5b219d5 --- /dev/null +++ b/interfaces/completionCheckers.RuleCompletionChecker.html @@ -0,0 +1,5 @@ +RuleCompletionChecker | mockttp

          Interface RuleCompletionChecker

          interface RuleCompletionChecker {
              type:
                  | "once"
                  | "always"
                  | "twice"
                  | "thrice"
                  | "times";
              dispose(): void;
              explain(seenRequestCount: undefined | number): string;
              isComplete(seenRequestCount: number): boolean;
          }

          Hierarchy (view full)

          Implemented by

          Properties

          Methods

          Properties

          type:
              | "once"
              | "always"
              | "twice"
              | "thrice"
              | "times"

          Methods

          diff --git a/interfaces/matchers.RequestMatcher.html b/interfaces/matchers.RequestMatcher.html new file mode 100644 index 000000000..7f3ef26e2 --- /dev/null +++ b/interfaces/matchers.RequestMatcher.html @@ -0,0 +1,5 @@ +RequestMatcher | mockttp

          Interface RequestMatcher

          interface RequestMatcher {
              type:
                  | "port"
                  | "header"
                  | "method"
                  | "host"
                  | "query"
                  | "protocol"
                  | "hostname"
                  | "cookie"
                  | "callback"
                  | "wildcard"
                  | "simple-path"
                  | "regex-path"
                  | "regex-url"
                  | "exact-query-string"
                  | "form-data"
                  | "multipart-form-data"
                  | "raw-body"
                  | "raw-body-regexp"
                  | "raw-body-includes"
                  | "json-body"
                  | "json-body-matching";
              dispose(): void;
              explain(): string;
              matches(request: OngoingRequest): MaybePromise<boolean>;
          }

          Hierarchy (view full)

          Implemented by

          Properties

          Methods

          Properties

          type:
              | "port"
              | "header"
              | "method"
              | "host"
              | "query"
              | "protocol"
              | "hostname"
              | "cookie"
              | "callback"
              | "wildcard"
              | "simple-path"
              | "regex-path"
              | "regex-url"
              | "exact-query-string"
              | "form-data"
              | "multipart-form-data"
              | "raw-body"
              | "raw-body-regexp"
              | "raw-body-includes"
              | "json-body"
              | "json-body-matching"

          Methods

          diff --git a/interfaces/matchers.SerializedCallbackMatcherData.html b/interfaces/matchers.SerializedCallbackMatcherData.html new file mode 100644 index 000000000..0be87553d --- /dev/null +++ b/interfaces/matchers.SerializedCallbackMatcherData.html @@ -0,0 +1,4 @@ +SerializedCallbackMatcherData | mockttp

          Interface SerializedCallbackMatcherData

          interface SerializedCallbackMatcherData {
              name?: string;
              type: string;
              version?: number;
          }

          Properties

          Properties

          name?: string
          type: string
          version?: number
          diff --git a/interfaces/requestHandlerDefinitions.RequestHandlerDefinition.html b/interfaces/requestHandlerDefinitions.RequestHandlerDefinition.html new file mode 100644 index 000000000..c56fffce3 --- /dev/null +++ b/interfaces/requestHandlerDefinitions.RequestHandlerDefinition.html @@ -0,0 +1,4 @@ +RequestHandlerDefinition | mockttp
          interface RequestHandlerDefinition {
              type:
                  | "file"
                  | "stream"
                  | "timeout"
                  | "callback"
                  | "simple"
                  | "passthrough"
                  | "close-connection"
                  | "reset-connection"
                  | "json-rpc-response";
              dispose(): void;
              explain(): string;
          }

          Hierarchy (view full)

          Implemented by

          Properties

          Methods

          Properties

          type:
              | "file"
              | "stream"
              | "timeout"
              | "callback"
              | "simple"
              | "passthrough"
              | "close-connection"
              | "reset-connection"
              | "json-rpc-response"

          Methods

          diff --git a/interfaces/requestHandlers.CallbackRequestResult.html b/interfaces/requestHandlers.CallbackRequestResult.html new file mode 100644 index 000000000..816e1c154 --- /dev/null +++ b/interfaces/requestHandlers.CallbackRequestResult.html @@ -0,0 +1,51 @@ +CallbackRequestResult | mockttp

          Interface CallbackRequestResult

          Can be returned from callbacks to override parts of a request.

          +

          All fields are optional, and omitted values will default to the original +request value.

          +
          interface CallbackRequestResult {
              body?: string | Uint8Array | Buffer;
              headers?: Headers;
              json?: any;
              method?: string;
              rawBody?: Uint8Array | Buffer;
              response?: CallbackResponseResult;
              url?: string;
          }

          Properties

          body?: string | Uint8Array | Buffer

          A string or buffer, which replaces the request body if set. This will +be automatically content-encoded to match the Content-Encoding defined +in your request headers.

          +

          If this is set, the Content-Length header will be automatically updated +accordingly to match, unless you also provide a headers value that +includes a Content-Length header, in which case that will take used +as-is.

          +

          You should only return one body field: either body, rawBody or +json.

          +
          headers?: Headers

          The replacement HTTP headers, as an object of string keys and either +single string or array of string values.

          +
          json?: any

          A JSON value, which will be stringified and send as a JSON-encoded +request body. This will be automatically content-encoded to match +the Content-Encoding defined in your request headers.

          +

          If this is set, the Content-Length header will be automatically updated +accordingly to match, unless you also provide a headers value that +includes a Content-Length header, in which case that will take used +as-is.

          +

          You should only return one body field: either body, rawBody or +json.

          +
          method?: string

          A replacement HTTP method, capitalized.

          +
          rawBody?: Uint8Array | Buffer

          A buffer, which replaces the request body if set, which is sent exactly +as is, and is not automatically encoded.

          +

          If this is set, the Content-Length header will be automatically updated +accordingly to match, unless you also provide a headers value that +includes a Content-Length header, in which case that will take used +as-is.

          +

          You should only return one body field: either body, rawBody or +json.

          +

          A response: either a response object defining the fields of a response +or the string 'close' to immediately close the connection.

          +

          See CallbackResponseMessageResult for the possible fields that can +be set to define the response.

          +

          If set, the request will not be forwarded at all, and this will be used +as the response to immediately return to the client (or for 'close', this +will immediately close the connection to the client).

          +
          url?: string

          The full URL to send the request to. If set, this will redirect +the request and automatically update the Host header accordingly, +unless you also provide a headers value that includes a Host +header, in which case that will take used as-is.

          +
          diff --git a/interfaces/requestHandlers.CallbackResponseMessageResult.html b/interfaces/requestHandlers.CallbackResponseMessageResult.html new file mode 100644 index 000000000..13dc5ee17 --- /dev/null +++ b/interfaces/requestHandlers.CallbackResponseMessageResult.html @@ -0,0 +1,55 @@ +CallbackResponseMessageResult | mockttp

          Interface CallbackResponseMessageResult

          Can be returned from callbacks to define parts of a response, or +override parts when given an existing repsonse.

          +

          All fields are optional, and omitted values will default to the original +response value or a default value.

          +
          interface CallbackResponseMessageResult {
              body?: string | Uint8Array | Buffer;
              headers?: Headers;
              json?: any;
              rawBody?: Uint8Array | Buffer;
              status?: number;
              statusCode?: number;
              statusMessage?: string;
              trailers?: Trailers;
          }

          Properties

          body?: string | Uint8Array | Buffer

          A string or buffer, which replaces the response body if set. This will +be automatically encoded to match the Content-Encoding defined in your +response headers.

          +

          If this is set, the Content-Length header will be automatically updated +accordingly to match, unless you also provide a headers value that +includes a Content-Length header, in which case that will take used +as-is.

          +

          Defaults to empty.

          +

          You should only return one body field: either body, rawBody or +json.

          +
          headers?: Headers

          The replacement HTTP headers, as an object of string keys and either +single string or array of string values.

          +

          Defaults to a minimum set of standard required headers if not set.

          +
          json?: any

          A JSON value, which will be stringified and send as a JSON-encoded +request body. This will be automatically content-encoded to match the +Content-Encoding defined in your response headers.

          +

          If this is set, the Content-Length header will be automatically updated +accordingly to match, unless you also provide a headers value that +includes a Content-Length header, in which case that will take used +as-is.

          +

          You should only return one body field: either body, rawBody or +json.

          +
          rawBody?: Uint8Array | Buffer

          A buffer, which replaces the response body if set, which is sent exactly +as is, and is not automatically encoded.

          +

          If this is set, the Content-Length header will be automatically updated +accordingly to match, unless you also provide a headers value that +includes a Content-Length header, in which case that will take used +as-is.

          +

          You should only return one body field: either body, rawBody or +json.

          +
          status?: number

          Supported only for backward compatibility.

          +

          Use statusCode instead.

          +
          statusCode?: number

          The response status code as a number.

          +

          Defaults to 200 if not set.

          +
          statusMessage?: string

          The response status message, as a string. This is ignored for +HTTP/2 responses.

          +

          Defaults to the default status message for the status code if not set.

          +
          trailers?: Trailers

          The replacement HTTP trailers, as an object of string keys and either +single string or array of string values. Note that there are not all +header fields are valid as trailers, and there are other requirements +such as chunked encoding that must be met for trailers to be sent +successfully.

          +
          diff --git a/interfaces/requestHandlers.ForwardingOptions.html b/interfaces/requestHandlers.ForwardingOptions.html new file mode 100644 index 000000000..ccdb027ff --- /dev/null +++ b/interfaces/requestHandlers.ForwardingOptions.html @@ -0,0 +1,3 @@ +ForwardingOptions | mockttp

          Interface ForwardingOptions

          interface ForwardingOptions {
              targetHost: string;
              updateHostHeader?: string | boolean;
          }

          Properties

          targetHost: string
          updateHostHeader?: string | boolean
          diff --git a/interfaces/requestHandlers.PassThroughHandlerOptions.html b/interfaces/requestHandlers.PassThroughHandlerOptions.html new file mode 100644 index 000000000..00a8f1f6b --- /dev/null +++ b/interfaces/requestHandlers.PassThroughHandlerOptions.html @@ -0,0 +1,103 @@ +PassThroughHandlerOptions | mockttp

          Interface PassThroughHandlerOptions

          This defines the upstream connection parameters. These passthrough parameters +are shared between both WebSocket & Request passthrough rules.

          +
          interface PassThroughHandlerOptions {
              additionalTrustedCAs?: CADefinition[];
              beforeRequest?: ((req: CompletedRequest) => MaybePromise<void | CallbackRequestResult>);
              beforeResponse?: ((res: PassThroughResponse) => MaybePromise<void | CallbackResponseResult>);
              clientCertificateHostMap?: {
                  [host: string]: {
                      passphrase?: string;
                      pfx: Buffer;
                  };
              };
              forwarding?: ForwardingOptions;
              ignoreHostHttpsErrors?: boolean | string[];
              lookupOptions?: PassThroughLookupOptions;
              proxyConfig?: ProxyConfig;
              simulateConnectionErrors?: boolean;
              transformRequest?: RequestTransform;
              transformResponse?: ResponseTransform;
              trustAdditionalCAs?: CADefinition[];
          }

          Hierarchy (view full)

          Properties

          additionalTrustedCAs?: CADefinition[]

          An array of additional certificates, which should be trusted as certificate +authorities for upstream hosts, in addition to Node.js's built-in certificate +authorities.

          +

          Each certificate should be an object with either a cert key and a string +or buffer value containing the PEM certificate, or a certPath key and a +string value containing the local path to the PEM certificate.

          +
          beforeRequest?: ((req: CompletedRequest) => MaybePromise<void | CallbackRequestResult>)

          A callback that will be passed the full request before it is passed through, +and which returns an object that defines how the the request content should +be transformed before it's passed to the upstream server.

          +

          The callback can return an object to define how the request should be changed. +All fields on the object are optional, and returning undefined is equivalent +to returning an empty object (transforming nothing).

          +

          See CallbackRequestResult for the possible fields that can be set.

          +
          beforeResponse?: ((res: PassThroughResponse) => MaybePromise<void | CallbackResponseResult>)

          A callback that will be passed the full response before it is passed through, +and which returns a value that defines how the the response content should +be transformed before it's returned to the client.

          +

          The callback can either return an object to define how the response should be +changed, or the string 'close' to immediately close the underlying connection.

          +

          All fields on the object are optional, and returning undefined is equivalent +to returning an empty object (transforming nothing).

          +

          See CallbackResponseMessageResult for the possible fields that can be set.

          +
          clientCertificateHostMap?: {
              [host: string]: {
                  passphrase?: string;
                  pfx: Buffer;
              };
          }

          A mapping of hosts to client certificates to use, in the form of +{ key, cert } objects (none, by default)

          +
          forwarding?: ForwardingOptions

          The forwarding configuration for the passthrough rule. +This generally shouldn't be used explicitly unless you're +building rule data by hand. Instead, call thenPassThrough +to send data directly or thenForwardTo with options to +configure traffic forwarding.

          +
          ignoreHostHttpsErrors?: boolean | string[]

          A list of hostnames for which server certificate and TLS version errors +should be ignored (none, by default).

          +

          If set to 'true', HTTPS errors will be ignored for all hosts. WARNING: +Use this at your own risk. Setting this to true can open your +application to MITM attacks and should never be used over any network +that is not completed trusted end-to-end.

          +
          lookupOptions?: PassThroughLookupOptions

          Custom DNS options, to allow configuration of the resolver used +when forwarding requests upstream. Passing any option switches +from using node's default dns.lookup function to using the +cacheable-lookup module, which will cache responses.

          +
          proxyConfig?: ProxyConfig

          Upstream proxy configuration: pass through requests via this proxy.

          +

          If this is undefined, no proxy will be used. To configure a proxy +provide either:

          +
            +
          • a ProxySettings object
          • +
          • a callback which will be called with an object containing the +hostname, and must return a ProxySettings object or undefined.
          • +
          • an array of ProxySettings or callbacks. The array will be +processed in order, and the first not-undefined ProxySettings +found will be used.
          • +
          +

          When using a remote client, this parameter or individual array +values may be passed by reference, using the name of a rule +parameter configured in the admin server.

          +
          simulateConnectionErrors?: boolean

          Whether to simulate connection errors back to the client.

          +

          By default (in most cases - see below) when an upstream request fails +outright a 502 "Bad Gateway" response is sent to the downstream client, +explicitly indicating the failure and containing the error that caused +the issue in the response body.

          +

          Only in the case of upstream connection reset errors is a connection reset +normally sent back downstream to existing clients (this behaviour exists +for backward compatibility, and will change to match other error behaviour +in a future version).

          +

          When this option is set to true, low-level connection failures will +always trigger a downstream connection close/reset, rather than a 502 +response.

          +

          This includes DNS failures, TLS connection errors, TCP connection resets, +etc (but not HTTP non-200 responses, which are still proxied as normal). +This is less convenient for debugging in a testing environment or when +using a proxy intentionally, but can be more accurate when trying to +transparently proxy network traffic, errors and all.

          +
          transformRequest?: RequestTransform

          A set of data to automatically transform a request. This includes properties +to support many transformation common use cases.

          +

          For advanced cases, a custom callback using beforeRequest can be used instead. +Using this field however where possible is typically simpler, more declarative, +and can be more performant. The two options are mutually exclusive: you cannot +use both transformRequest and a beforeRequest callback.

          +

          Only one transformation for each target (method, headers & body) can be +specified. If more than one is specified then an error will be thrown when the +rule is registered.

          +
          transformResponse?: ResponseTransform

          A set of data to automatically transform a response. This includes properties +to support many transformation common use cases.

          +

          For advanced cases, a custom callback using beforeResponse can be used instead. +Using this field however where possible is typically simpler, more declarative, +and can be more performant. The two options are mutually exclusive: you cannot +use both transformResponse and a beforeResponse callback.

          +

          Only one transformation for each target (status, headers & body) can be +specified. If more than one is specified then an error will be thrown when the +rule is registered.

          +
          trustAdditionalCAs?: CADefinition[]

          Deprecated alias for additionalTrustedCAs

          +
          diff --git a/interfaces/requestHandlers.PassThroughLookupOptions.html b/interfaces/requestHandlers.PassThroughLookupOptions.html new file mode 100644 index 000000000..120625b74 --- /dev/null +++ b/interfaces/requestHandlers.PassThroughLookupOptions.html @@ -0,0 +1,13 @@ +PassThroughLookupOptions | mockttp

          Interface PassThroughLookupOptions

          interface PassThroughLookupOptions {
              errorTtl?: number;
              maxTtl?: number;
              servers?: string[];
          }

          Properties

          Properties

          errorTtl?: number

          How long to cache a DNS ENODATA or ENOTFOUND response. Defaults +to 0.15.

          +
          maxTtl?: number

          The maximum time to cache a DNS response. Up to this limit, +responses will be cached according to their own TTL. Defaults +to Infinity.

          +
          servers?: string[]

          The primary servers to use. DNS queries will be resolved against +these servers first. If no data is available, queries will fall +back to dns.lookup, and use the OS's default DNS servers.

          +

          This defaults to dns.getServers().

          +
          diff --git a/interfaces/requestHandlers.PassThroughResponse.html b/interfaces/requestHandlers.PassThroughResponse.html new file mode 100644 index 000000000..60f3b6cbb --- /dev/null +++ b/interfaces/requestHandlers.PassThroughResponse.html @@ -0,0 +1,7 @@ +PassThroughResponse | mockttp

          Interface PassThroughResponse

          interface PassThroughResponse {
              body: CompletedBody;
              headers: Headers;
              id: string;
              rawHeaders: RawHeaders;
              statusCode: number;
              statusMessage?: string;
          }

          Properties

          headers: Headers
          id: string
          rawHeaders: RawHeaders
          statusCode: number
          statusMessage?: string
          diff --git a/interfaces/requestHandlers.RequestHandler.html b/interfaces/requestHandlers.RequestHandler.html new file mode 100644 index 000000000..8509c8245 --- /dev/null +++ b/interfaces/requestHandlers.RequestHandler.html @@ -0,0 +1,5 @@ +RequestHandler | mockttp

          Interface RequestHandler

          interface RequestHandler {
              type:
                  | "file"
                  | "stream"
                  | "timeout"
                  | "callback"
                  | "simple"
                  | "passthrough"
                  | "close-connection"
                  | "reset-connection"
                  | "json-rpc-response";
              dispose(): void;
              explain(): string;
              handle(request: OngoingRequest, response: OngoingResponse, options: RequestHandlerOptions): Promise<void>;
          }

          Hierarchy (view full)

          Properties

          Methods

          Properties

          type:
              | "file"
              | "stream"
              | "timeout"
              | "callback"
              | "simple"
              | "passthrough"
              | "close-connection"
              | "reset-connection"
              | "json-rpc-response"

          Methods

          diff --git a/interfaces/requestHandlers.RequestHandlerOptions.html b/interfaces/requestHandlers.RequestHandlerOptions.html new file mode 100644 index 000000000..f20a0079f --- /dev/null +++ b/interfaces/requestHandlers.RequestHandlerOptions.html @@ -0,0 +1,2 @@ +RequestHandlerOptions | mockttp

          Interface RequestHandlerOptions

          interface RequestHandlerOptions {
              emitEventCallback?: ((type: string, event: unknown) => void);
          }

          Properties

          Properties

          emitEventCallback?: ((type: string, event: unknown) => void)
          diff --git a/interfaces/requestHandlers.RequestTransform.html b/interfaces/requestHandlers.RequestTransform.html new file mode 100644 index 000000000..f750c164a --- /dev/null +++ b/interfaces/requestHandlers.RequestTransform.html @@ -0,0 +1,38 @@ +RequestTransform | mockttp

          Interface RequestTransform

          interface RequestTransform {
              matchReplaceBody?: [string | RegExp, string][];
              patchJsonBody?: Operation[];
              replaceBody?: string | Uint8Array | Buffer;
              replaceBodyFromFile?: string;
              replaceHeaders?: Headers;
              replaceMethod?: string;
              updateHeaders?: Headers;
              updateJsonBody?: {
                  [key: string]: any;
              };
          }

          Properties

          matchReplaceBody?: [string | RegExp, string][]

          Perform a series of string match & replace operations on the request body.

          +

          This parameter should be an array of pairs, which will be applied to the body +decoded as a string like body.replace(p1, p2), applied in the order provided. +The first parameter can be either a string or RegExp to match, and the second +must be a string to insert. The normal str.replace $ placeholders can be +used in the second argument, so that e.g. $1 will insert the 1st matched group.

          +
          patchJsonBody?: Operation[]

          A series of operations to apply to the request body in JSON Patch format (RFC +6902).

          +

          Any requests which are received with an invalid JSON body that match this rule +will fail.

          +
          replaceBody?: string | Uint8Array | Buffer

          A string or buffer that replaces the request body entirely.

          +

          If this is specified, the upstream request will not wait for the original request +body, so this may make responses faster than they would be otherwise given large +request bodies or slow/streaming clients.

          +
          replaceBodyFromFile?: string

          The path to a file, which will be used to replace the request body entirely. The +file will be re-read for each request, so the body will always reflect the latest +file contents.

          +

          If this is specified, the upstream request will not wait for the original request +body, so this may make responses faster than they would be otherwise given large +request bodies or slow/streaming clients.

          +
          replaceHeaders?: Headers

          A headers object which will completely replace the real request headers.

          +
          replaceMethod?: string

          A replacement HTTP method. Case insensitive.

          +
          updateHeaders?: Headers

          A headers object which will be merged with the real request headers to add or +replace values. Headers with undefined values will be removed.

          +
          updateJsonBody?: {
              [key: string]: any;
          }

          A JSON object which will be merged with the real request body. Undefined values +will be removed, and other values will be merged directly with the target value +recursively.

          +

          Any requests which are received with an invalid JSON body that match this rule +will fail.

          +
          diff --git a/interfaces/requestHandlers.ResponseTransform.html b/interfaces/requestHandlers.ResponseTransform.html new file mode 100644 index 000000000..f397ca375 --- /dev/null +++ b/interfaces/requestHandlers.ResponseTransform.html @@ -0,0 +1,38 @@ +ResponseTransform | mockttp

          Interface ResponseTransform

          interface ResponseTransform {
              matchReplaceBody?: [string | RegExp, string][];
              patchJsonBody?: Operation[];
              replaceBody?: string | Uint8Array | Buffer;
              replaceBodyFromFile?: string;
              replaceHeaders?: Headers;
              replaceStatus?: number;
              updateHeaders?: Headers;
              updateJsonBody?: {
                  [key: string]: any;
              };
          }

          Properties

          matchReplaceBody?: [string | RegExp, string][]

          Perform a series of string match & replace operations on the response body.

          +

          This parameter should be an array of pairs, which will be applied to the body +decoded as a string like body.replace(p1, p2), applied in the order provided. +The first parameter can be either a string or RegExp to match, and the second +must be a string to insert. The normal str.replace $ placeholders can be +used in the second argument, so that e.g. $1 will insert the 1st matched group.

          +
          patchJsonBody?: Operation[]

          A series of operations to apply to the response body in JSON Patch format (RFC +6902).

          +

          Any responses which are received with an invalid JSON body that match this rule +will fail.

          +
          replaceBody?: string | Uint8Array | Buffer

          A string or buffer that replaces the response body entirely.

          +

          If this is specified, the downstream response will not wait for the original response +body, so this may make responses arrive faster than they would be otherwise given large +response bodies or slow/streaming servers.

          +
          replaceBodyFromFile?: string

          The path to a file, which will be used to replace the response body entirely. The +file will be re-read for each response, so the body will always reflect the latest +file contents.

          +

          If this is specified, the downstream response will not wait for the original response +body, so this may make responses arrive faster than they would be otherwise given large +response bodies or slow/streaming servers.

          +
          replaceHeaders?: Headers

          A headers object which will completely replace the real response headers.

          +
          replaceStatus?: number

          A replacement response status code.

          +
          updateHeaders?: Headers

          A headers object which will be merged with the real response headers to add or +replace values. Headers with undefined values will be removed.

          +
          updateJsonBody?: {
              [key: string]: any;
          }

          A JSON object which will be merged with the real response body. Undefined values +will be removed, and other values will be merged directly with the target value +recursively.

          +

          Any responses which are received with an invalid JSON body that match this rule +will fail.

          +
          diff --git a/interfaces/webSocketHandlerDefinitions.WebSocketHandlerDefinition.html b/interfaces/webSocketHandlerDefinitions.WebSocketHandlerDefinition.html new file mode 100644 index 000000000..dcacc8270 --- /dev/null +++ b/interfaces/webSocketHandlerDefinitions.WebSocketHandlerDefinition.html @@ -0,0 +1,4 @@ +WebSocketHandlerDefinition | mockttp
          interface WebSocketHandlerDefinition {
              type:
                  | "timeout"
                  | "close-connection"
                  | "reset-connection"
                  | "ws-passthrough"
                  | "ws-echo"
                  | "ws-listen"
                  | "ws-reject";
              dispose(): void;
              explain(): string;
          }

          Hierarchy (view full)

          Implemented by

          Properties

          Methods

          Properties

          type:
              | "timeout"
              | "close-connection"
              | "reset-connection"
              | "ws-passthrough"
              | "ws-echo"
              | "ws-listen"
              | "ws-reject"

          Methods

          diff --git a/interfaces/webSocketHandlers.WebSocketHandler.html b/interfaces/webSocketHandlers.WebSocketHandler.html new file mode 100644 index 000000000..0066e5140 --- /dev/null +++ b/interfaces/webSocketHandlers.WebSocketHandler.html @@ -0,0 +1,5 @@ +WebSocketHandler | mockttp
          interface WebSocketHandler {
              type:
                  | "timeout"
                  | "close-connection"
                  | "reset-connection"
                  | "ws-passthrough"
                  | "ws-echo"
                  | "ws-listen"
                  | "ws-reject";
              dispose(): void;
              explain(): string;
              handle(request: OngoingRequest & IncomingMessage, socket: Socket, head: Buffer): Promise<void>;
          }

          Hierarchy (view full)

          Properties

          Methods

          Properties

          type:
              | "timeout"
              | "close-connection"
              | "reset-connection"
              | "ws-passthrough"
              | "ws-echo"
              | "ws-listen"
              | "ws-reject"

          Methods

          diff --git a/modules.html b/modules.html new file mode 100644 index 000000000..319761373 --- /dev/null +++ b/modules.html @@ -0,0 +1,87 @@ +mockttp

          mockttp

          Other

          Renames and re-exports HttpsOptions
          Renames and re-exports HttpsPathOptions
          Re-exports ForwardingOptions
          Re-exports PassThroughLookupOptions
          Renames and re-exports TlsRequest
          diff --git a/modules/MockttpPluggableAdmin.html b/modules/MockttpPluggableAdmin.html new file mode 100644 index 000000000..708f067a2 --- /dev/null +++ b/modules/MockttpPluggableAdmin.html @@ -0,0 +1,9 @@ +MockttpPluggableAdmin | mockttp

          Namespace MockttpPluggableAdmin

          This API is not yet stable, and is intended for internal use only. It may change in future +in minor versions without warning.

          +

          These plugin components can be applied to the PluggableAdmin API to create a remotely +controlable mock management server that can mock HTTP in addition to protocols from +other plugins.

          +

          Index

          Classes

          Interfaces

          diff --git a/modules/PluggableAdmin.Serialization.html b/modules/PluggableAdmin.Serialization.html new file mode 100644 index 000000000..5512e53ca --- /dev/null +++ b/modules/PluggableAdmin.Serialization.html @@ -0,0 +1,14 @@ +Serialization | mockttp
          diff --git a/modules/PluggableAdmin.html b/modules/PluggableAdmin.html new file mode 100644 index 000000000..a9ecf76ae --- /dev/null +++ b/modules/PluggableAdmin.html @@ -0,0 +1,19 @@ +PluggableAdmin | mockttp

          Namespace PluggableAdmin

          This API is not yet stable, and is intended for internal use only. It may change in future +in minor versions without warning.

          +

          These generic pluggable admin components allow composing an admin server and client that +are capable of managing arbitrary mock protocols, including Mockttp but also others depending +on the admin plugins used. To use Mockttp, combine this with the MockttpPluggableAdmin API.

          +

          Index

          Namespaces

          Classes

          Interfaces

          Type Aliases

          diff --git a/modules/completionCheckers.html b/modules/completionCheckers.html new file mode 100644 index 000000000..a4cd31f16 --- /dev/null +++ b/modules/completionCheckers.html @@ -0,0 +1,8 @@ +completionCheckers | mockttp

          Namespace completionCheckers

          Index

          Classes

          Interfaces

          Variables

          diff --git a/modules/matchers.html b/modules/matchers.html new file mode 100644 index 000000000..07a28ced3 --- /dev/null +++ b/modules/matchers.html @@ -0,0 +1,28 @@ +matchers | mockttp
          diff --git a/modules/requestHandlerDefinitions.html b/modules/requestHandlerDefinitions.html new file mode 100644 index 000000000..507c16ef1 --- /dev/null +++ b/modules/requestHandlerDefinitions.html @@ -0,0 +1,20 @@ +requestHandlerDefinitions | mockttp
          diff --git a/modules/requestHandlers.html b/modules/requestHandlers.html new file mode 100644 index 000000000..5c3bb4458 --- /dev/null +++ b/modules/requestHandlers.html @@ -0,0 +1,23 @@ +requestHandlers | mockttp
          diff --git a/modules/webSocketHandlerDefinitions.html b/modules/webSocketHandlerDefinitions.html new file mode 100644 index 000000000..732aabca1 --- /dev/null +++ b/modules/webSocketHandlerDefinitions.html @@ -0,0 +1,11 @@ +webSocketHandlerDefinitions | mockttp
          diff --git a/modules/webSocketHandlers.html b/modules/webSocketHandlers.html new file mode 100644 index 000000000..b5a90118f --- /dev/null +++ b/modules/webSocketHandlers.html @@ -0,0 +1,11 @@ +webSocketHandlers | mockttp
          diff --git a/types/CADefinition.html b/types/CADefinition.html new file mode 100644 index 000000000..fb68cfa5d --- /dev/null +++ b/types/CADefinition.html @@ -0,0 +1 @@ +CADefinition | mockttp

          Type Alias CADefinition

          CADefinition: {
              cert: string | Buffer;
          } | {
              certPath: string;
          }
          diff --git a/types/CAOptions.html b/types/CAOptions.html new file mode 100644 index 000000000..de40dd39f --- /dev/null +++ b/types/CAOptions.html @@ -0,0 +1 @@ +CAOptions | mockttp

          Type Alias CAOptions

          diff --git a/types/DnsLookupFunction.html b/types/DnsLookupFunction.html new file mode 100644 index 000000000..7b6cdf9ff --- /dev/null +++ b/types/DnsLookupFunction.html @@ -0,0 +1 @@ +DnsLookupFunction | mockttp

          Type Alias DnsLookupFunction

          DnsLookupFunction: Omit<typeof dns.lookup, "__promisify__">
          diff --git a/types/InitiatedRequest.html b/types/InitiatedRequest.html new file mode 100644 index 000000000..404503128 --- /dev/null +++ b/types/InitiatedRequest.html @@ -0,0 +1 @@ +InitiatedRequest | mockttp

          Type Alias InitiatedRequest

          InitiatedRequest: Request
          diff --git a/types/MaybePromise.html b/types/MaybePromise.html new file mode 100644 index 000000000..9d1cfd074 --- /dev/null +++ b/types/MaybePromise.html @@ -0,0 +1 @@ +MaybePromise | mockttp

          Type Alias MaybePromise<T>

          MaybePromise<T>: T | Promise<T>

          Type Parameters

          • T
          diff --git a/types/MockttpHttpsOptions.html b/types/MockttpHttpsOptions.html new file mode 100644 index 000000000..57ea0700c --- /dev/null +++ b/types/MockttpHttpsOptions.html @@ -0,0 +1,29 @@ +MockttpHttpsOptions | mockttp

          Type Alias MockttpHttpsOptions

          MockttpHttpsOptions: CAOptions & {
              defaultDomain?: string;
              tlsInterceptOnly?: {
                  hostname: string;
              }[];
              tlsPassthrough?: {
                  hostname: string;
              }[];
          }

          Type declaration

          • OptionaldefaultDomain?: string

            The domain name that will be used in the certificate for incoming TLS +connections which don't use SNI to request a specific domain.

            +
          • OptionaltlsInterceptOnly?: {
                hostname: string;
            }[]

            A limited list of the only hostnames whose TLS should be intercepted.

            +

            This is the opposite of tlsPassthrough. When set, only connections +to these hostnames will be intercepted, and all other TLS connections will +be passed through without interception.

            +

            This option is mutually exclusive with tlsPassthrough and setting both +options will throw an error.

            +

            Each element in this list must be an object with a 'hostname' field for the +hostname that should be matched. Wildcards are supported (following the +URLPattern specification), +eg. {hostname: '*.example.com'}.

            +

            In future more options may be supported +here for additional configuration of this behaviour.

            +
          • OptionaltlsPassthrough?: {
                hostname: string;
            }[]

            A list of hostnames where TLS interception should always be skipped.

            +

            When a TLS connection is started that references a matching hostname in its +server name indication (SNI) extension, or which uses a matching hostname +in a preceeding CONNECT request to create a tunnel, the connection will be +sent raw to the upstream hostname, without handling TLS within Mockttp (i.e. +with no TLS interception performed).

            +

            This option is mutually exclusive with tlsInterceptOnly and setting both +options will throw an error.

            +

            Each element in this list must be an object with a 'hostname' field for the +hostname that should be matched. Wildcards are supported (following the +URLPattern specification), +eg. {hostname: '*.example.com'}.

            +

            In future more options may be supported +here for additional configuration of this behaviour.

            +
          diff --git a/types/PEM.html b/types/PEM.html new file mode 100644 index 000000000..9d6b4e5d6 --- /dev/null +++ b/types/PEM.html @@ -0,0 +1 @@ +PEM | mockttp

          Type Alias PEM

          PEM:
              | string
              | string[]
              | Buffer
              | Buffer[]
          diff --git a/types/PluggableAdmin.PluginClientResponse.html b/types/PluggableAdmin.PluginClientResponse.html new file mode 100644 index 000000000..ffe3827cd --- /dev/null +++ b/types/PluggableAdmin.PluginClientResponse.html @@ -0,0 +1 @@ +PluginClientResponse | mockttp

          Type Alias PluginClientResponse<Plugin>

          PluginClientResponse<Plugin>: Plugin extends AdminPlugin<any, infer ClientResponse>
              ? ClientResponse
              : never

          Type Parameters

          • Plugin
          diff --git a/types/PluggableAdmin.PluginClientResponsesMap.html b/types/PluggableAdmin.PluginClientResponsesMap.html new file mode 100644 index 000000000..bcef993e7 --- /dev/null +++ b/types/PluggableAdmin.PluginClientResponsesMap.html @@ -0,0 +1 @@ +PluginClientResponsesMap | mockttp

          Type Alias PluginClientResponsesMap<Plugins>

          PluginClientResponsesMap<Plugins>: {
              [key in keyof Plugins]: PluginClientResponse<Plugins[key]>
          }

          Type Parameters

          • Plugins
          diff --git a/types/PluggableAdmin.PluginStartParams.html b/types/PluggableAdmin.PluginStartParams.html new file mode 100644 index 000000000..dfc0a8879 --- /dev/null +++ b/types/PluggableAdmin.PluginStartParams.html @@ -0,0 +1 @@ +PluginStartParams | mockttp

          Type Alias PluginStartParams<Plugin>

          PluginStartParams<Plugin>: Plugin extends AdminPlugin<infer StartParams, any>
              ? StartParams
              : never

          Type Parameters

          • Plugin
          diff --git a/types/PluggableAdmin.PluginStartParamsMap.html b/types/PluggableAdmin.PluginStartParamsMap.html new file mode 100644 index 000000000..d636823d5 --- /dev/null +++ b/types/PluggableAdmin.PluginStartParamsMap.html @@ -0,0 +1 @@ +PluginStartParamsMap | mockttp

          Type Alias PluginStartParamsMap<Plugins>

          PluginStartParamsMap<Plugins>: {
              [key in keyof Plugins]: PluginStartParams<Plugins[key]>
          }

          Type Parameters

          • Plugins
          diff --git a/types/PluggableAdmin.Serialization.SerializedProxyConfig.html b/types/PluggableAdmin.Serialization.SerializedProxyConfig.html new file mode 100644 index 000000000..7bc5574f4 --- /dev/null +++ b/types/PluggableAdmin.Serialization.SerializedProxyConfig.html @@ -0,0 +1 @@ +SerializedProxyConfig | mockttp
          SerializedProxyConfig:
              | ProxySetting
              | string
              | undefined
              | SerializedRuleParameterReference<ProxySettingSource>
              | SerializedProxyConfig[]
          diff --git a/types/PluggableAdmin.Serialization.SerializedRuleParameterReference.html b/types/PluggableAdmin.Serialization.SerializedRuleParameterReference.html new file mode 100644 index 000000000..70cff97c3 --- /dev/null +++ b/types/PluggableAdmin.Serialization.SerializedRuleParameterReference.html @@ -0,0 +1 @@ +SerializedRuleParameterReference | mockttp

          Type Alias SerializedRuleParameterReference<R>

          SerializedRuleParameterReference<R>: {
              __mockttp__param__reference__: string;
          }

          Type Parameters

          • R
          diff --git a/types/PortRange.html b/types/PortRange.html new file mode 100644 index 000000000..bc17e3004 --- /dev/null +++ b/types/PortRange.html @@ -0,0 +1 @@ +PortRange | mockttp

          Type Alias PortRange

          PortRange: {
              endPort: number;
              startPort: number;
          }
          diff --git a/types/ProxyConfig.html b/types/ProxyConfig.html new file mode 100644 index 000000000..69d9c5f35 --- /dev/null +++ b/types/ProxyConfig.html @@ -0,0 +1,4 @@ +ProxyConfig | mockttp

          Type Alias ProxyConfig

          A ProxyConfig is externally provided config that specifies a ProxySettingSource. +It might be a ProxySettingSource itself, or it might include references to rule +parameters, which must be dereferenced to make it usable as a ProxySettingSource.

          +
          diff --git a/types/ProxySettingCallback.html b/types/ProxySettingCallback.html new file mode 100644 index 000000000..4ae719d52 --- /dev/null +++ b/types/ProxySettingCallback.html @@ -0,0 +1 @@ +ProxySettingCallback | mockttp

          Type Alias ProxySettingCallback

          ProxySettingCallback: ((params: ProxySettingCallbackParams) => MaybePromise<ProxySetting | undefined>)
          diff --git a/types/ProxySettingCallbackParams.html b/types/ProxySettingCallbackParams.html new file mode 100644 index 000000000..dc60d42f9 --- /dev/null +++ b/types/ProxySettingCallbackParams.html @@ -0,0 +1 @@ +ProxySettingCallbackParams | mockttp

          Type Alias ProxySettingCallbackParams

          ProxySettingCallbackParams: {
              hostname: string;
          }
          diff --git a/types/ProxySettingSource.html b/types/ProxySettingSource.html new file mode 100644 index 000000000..64ec6be82 --- /dev/null +++ b/types/ProxySettingSource.html @@ -0,0 +1,4 @@ +ProxySettingSource | mockttp

          Type Alias ProxySettingSource

          ProxySettingSource:
              | ProxySetting
              | ProxySettingCallback
              | ProxySettingSource[]
              | undefined

          A ProxySettingSource is a way to calculate the ProxySetting for a given request. It +may be a fixed ProxySetting value, or a callback to get ProxySetting values, or an +array of sources, which should be iterated to get the first usable value

          +
          diff --git a/types/RawHeaders.html b/types/RawHeaders.html new file mode 100644 index 000000000..773901ef8 --- /dev/null +++ b/types/RawHeaders.html @@ -0,0 +1 @@ +RawHeaders | mockttp

          Type Alias RawHeaders

          RawHeaders: [key: string, value: string][]
          diff --git a/types/RawTrailers.html b/types/RawTrailers.html new file mode 100644 index 000000000..db7ccd6ab --- /dev/null +++ b/types/RawTrailers.html @@ -0,0 +1 @@ +RawTrailers | mockttp

          Type Alias RawTrailers

          RawTrailers: RawHeaders
          diff --git a/types/RuleParameterReference.html b/types/RuleParameterReference.html new file mode 100644 index 000000000..caee69954 --- /dev/null +++ b/types/RuleParameterReference.html @@ -0,0 +1,8 @@ +RuleParameterReference | mockttp

          Type Alias RuleParameterReference<R>

          RuleParameterReference<R>: {
              [MOCKTTP_PARAM_REF]: string;
          }

          A reference to a rule parameter defined in the ruleParameters admin server +option of the corresponding admin server.

          +

          Rule parameter references are only valid with a remote client. They can be useful in +cases where the admin server has access to local state or APIs that are not +accessible from the remote client, but which would be useful in rule definitions. This +is only supported for some specific parameters where documented explicitly in that rule +parameter.

          +

          Type Parameters

          • R
          diff --git a/types/RuleParameters.html b/types/RuleParameters.html new file mode 100644 index 000000000..aa76e3cd3 --- /dev/null +++ b/types/RuleParameters.html @@ -0,0 +1 @@ +RuleParameters | mockttp

          Type Alias RuleParameters

          RuleParameters: {
              [key: string]: unknown;
          }
          diff --git a/types/Serialized.html b/types/Serialized.html new file mode 100644 index 000000000..e2157a0f6 --- /dev/null +++ b/types/Serialized.html @@ -0,0 +1 @@ +Serialized | mockttp

          Type Alias Serialized<T>

          Serialized<T>: {
              [K in keyof T]: T[K] extends string | undefined
                  ? string | undefined
                  : T[K] extends unknown[]
                      ? SerializedValue<T[K][0]>[]
                      : SerializedValue<T[K]>
          }

          Type Parameters

          • T
          diff --git a/types/SerializedValue.html b/types/SerializedValue.html new file mode 100644 index 000000000..e40642d08 --- /dev/null +++ b/types/SerializedValue.html @@ -0,0 +1 @@ +SerializedValue | mockttp

          Type Alias SerializedValue<T>

          SerializedValue<T>: T & {
              topicId: string;
          }

          Type Parameters

          • T
          diff --git a/types/SubscribableEvent.html b/types/SubscribableEvent.html new file mode 100644 index 000000000..8a386816e --- /dev/null +++ b/types/SubscribableEvent.html @@ -0,0 +1 @@ +SubscribableEvent | mockttp

          Type Alias SubscribableEvent

          SubscribableEvent:
              | "request-initiated"
              | "request"
              | "response"
              | "websocket-request"
              | "websocket-accepted"
              | "websocket-message-received"
              | "websocket-message-sent"
              | "websocket-close"
              | "abort"
              | "tls-passthrough-opened"
              | "tls-passthrough-closed"
              | "tls-client-error"
              | "client-error"
              | "rule-event"
          diff --git a/types/defaultMaxListeners.html b/types/defaultMaxListeners.html new file mode 100644 index 000000000..69dd6cdf0 --- /dev/null +++ b/types/defaultMaxListeners.html @@ -0,0 +1 @@ +defaultMaxListeners | mockttp

          Type Alias defaultMaxListeners

          defaultMaxListeners: typeof EventEmitter.defaultMaxListeners
          diff --git a/types/matchers.MultipartFieldMatchCondition.html b/types/matchers.MultipartFieldMatchCondition.html new file mode 100644 index 000000000..42f442687 --- /dev/null +++ b/types/matchers.MultipartFieldMatchCondition.html @@ -0,0 +1 @@ +MultipartFieldMatchCondition | mockttp

          Type Alias MultipartFieldMatchCondition

          MultipartFieldMatchCondition: {
              content?: string | Uint8Array;
              filename?: string;
              name?: string;
          }
          diff --git a/types/requestHandlerDefinitions.SerializedBuffer.html b/types/requestHandlerDefinitions.SerializedBuffer.html new file mode 100644 index 000000000..16e989db0 --- /dev/null +++ b/types/requestHandlerDefinitions.SerializedBuffer.html @@ -0,0 +1 @@ +SerializedBuffer | mockttp
          SerializedBuffer: {
              data: number[];
              type: "Buffer";
          }
          diff --git a/types/requestHandlers.CallbackResponseResult.html b/types/requestHandlers.CallbackResponseResult.html new file mode 100644 index 000000000..568724e74 --- /dev/null +++ b/types/requestHandlers.CallbackResponseResult.html @@ -0,0 +1 @@ +CallbackResponseResult | mockttp

          Type Alias CallbackResponseResult

          CallbackResponseResult: CallbackResponseMessageResult | "close" | "reset"
          diff --git a/types/webSocketHandlers.PassThroughWebSocketHandlerOptions.html b/types/webSocketHandlers.PassThroughWebSocketHandlerOptions.html new file mode 100644 index 000000000..300567615 --- /dev/null +++ b/types/webSocketHandlers.PassThroughWebSocketHandlerOptions.html @@ -0,0 +1 @@ +PassThroughWebSocketHandlerOptions | mockttp
          diff --git a/variables/DEFAULT_ADMIN_SERVER_PORT.html b/variables/DEFAULT_ADMIN_SERVER_PORT.html new file mode 100644 index 000000000..290de4bf2 --- /dev/null +++ b/variables/DEFAULT_ADMIN_SERVER_PORT.html @@ -0,0 +1 @@ +DEFAULT_ADMIN_SERVER_PORT | mockttp

          Variable DEFAULT_ADMIN_SERVER_PORTConst

          DEFAULT_ADMIN_SERVER_PORT = 45454
          diff --git a/variables/MOCKTTP_PARAM_REF.html b/variables/MOCKTTP_PARAM_REF.html new file mode 100644 index 000000000..4c2a10571 --- /dev/null +++ b/variables/MOCKTTP_PARAM_REF.html @@ -0,0 +1 @@ +MOCKTTP_PARAM_REF | mockttp

          Variable MOCKTTP_PARAM_REFConst

          MOCKTTP_PARAM_REF: typeof MOCKTTP_PARAM_REF = ...
          diff --git a/variables/completionCheckers.CompletionCheckerLookup.html b/variables/completionCheckers.CompletionCheckerLookup.html new file mode 100644 index 000000000..c662e1e94 --- /dev/null +++ b/variables/completionCheckers.CompletionCheckerLookup.html @@ -0,0 +1 @@ +CompletionCheckerLookup | mockttp

          Variable CompletionCheckerLookupConst

          CompletionCheckerLookup: {
              always: typeof Always;
              once: typeof Once;
              thrice: typeof Thrice;
              times: typeof NTimes;
              twice: typeof Twice;
          } = ...
          diff --git a/variables/matchers.MatcherLookup.html b/variables/matchers.MatcherLookup.html new file mode 100644 index 000000000..8c4fa3cc9 --- /dev/null +++ b/variables/matchers.MatcherLookup.html @@ -0,0 +1 @@ +MatcherLookup | mockttp

          Variable MatcherLookupConst

          MatcherLookup: {
              callback: typeof CallbackMatcher;
              cookie: typeof CookieMatcher;
              exact-query-string: typeof ExactQueryMatcher;
              form-data: typeof FormDataMatcher;
              header: typeof HeaderMatcher;
              host: typeof HostMatcher;
              hostname: typeof HostnameMatcher;
              json-body: typeof JsonBodyMatcher;
              json-body-matching: typeof JsonBodyFlexibleMatcher;
              method: typeof MethodMatcher;
              multipart-form-data: typeof MultipartFormDataMatcher;
              port: typeof PortMatcher;
              protocol: typeof ProtocolMatcher;
              query: typeof QueryMatcher;
              raw-body: typeof RawBodyMatcher;
              raw-body-includes: typeof RawBodyIncludesMatcher;
              raw-body-regexp: typeof RegexBodyMatcher;
              regex-path: typeof RegexPathMatcher;
              regex-url: typeof RegexUrlMatcher;
              simple-path: typeof SimplePathMatcher;
              wildcard: typeof WildcardMatcher;
          } = ...
          diff --git a/variables/requestHandlerDefinitions.HandlerDefinitionLookup.html b/variables/requestHandlerDefinitions.HandlerDefinitionLookup.html new file mode 100644 index 000000000..e65c067de --- /dev/null +++ b/variables/requestHandlerDefinitions.HandlerDefinitionLookup.html @@ -0,0 +1 @@ +HandlerDefinitionLookup | mockttp

          Variable HandlerDefinitionLookupConst

          HandlerDefinitionLookup: {
              callback: typeof CallbackHandlerDefinition;
              close-connection: typeof CloseConnectionHandlerDefinition;
              file: typeof FileHandlerDefinition;
              json-rpc-response: typeof JsonRpcResponseHandlerDefinition;
              passthrough: typeof PassThroughHandlerDefinition;
              reset-connection: typeof ResetConnectionHandlerDefinition;
              simple: typeof SimpleHandlerDefinition;
              stream: typeof StreamHandlerDefinition;
              timeout: typeof TimeoutHandlerDefinition;
          } = ...
          diff --git a/variables/requestHandlers.HandlerLookup.html b/variables/requestHandlers.HandlerLookup.html new file mode 100644 index 000000000..e92ad492c --- /dev/null +++ b/variables/requestHandlers.HandlerLookup.html @@ -0,0 +1 @@ +HandlerLookup | mockttp

          Variable HandlerLookupConst

          HandlerLookup: typeof HandlerDefinitionLookup = ...
          diff --git a/variables/webSocketHandlerDefinitions.WsHandlerDefinitionLookup.html b/variables/webSocketHandlerDefinitions.WsHandlerDefinitionLookup.html new file mode 100644 index 000000000..0aec4c438 --- /dev/null +++ b/variables/webSocketHandlerDefinitions.WsHandlerDefinitionLookup.html @@ -0,0 +1 @@ +WsHandlerDefinitionLookup | mockttp
          WsHandlerDefinitionLookup: {
              close-connection: typeof CloseConnectionHandlerDefinition;
              reset-connection: typeof ResetConnectionHandlerDefinition;
              timeout: typeof TimeoutHandlerDefinition;
              ws-echo: typeof EchoWebSocketHandlerDefinition;
              ws-listen: typeof ListenWebSocketHandlerDefinition;
              ws-passthrough: typeof PassThroughWebSocketHandlerDefinition;
              ws-reject: typeof RejectWebSocketHandlerDefinition;
          } = ...
          diff --git a/variables/webSocketHandlers.WsHandlerLookup.html b/variables/webSocketHandlers.WsHandlerLookup.html new file mode 100644 index 000000000..8730bf4b6 --- /dev/null +++ b/variables/webSocketHandlers.WsHandlerLookup.html @@ -0,0 +1 @@ +WsHandlerLookup | mockttp