UNPKG

mockttp-mvs

Version:

Mock HTTP server for testing HTTP clients and stubbing webservices

111 lines 5.7 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.WsHandlerDefinitionLookup = exports.TimeoutHandlerDefinition = exports.ResetConnectionHandlerDefinition = exports.CloseConnectionHandlerDefinition = exports.RejectWebSocketHandlerDefinition = exports.ListenWebSocketHandlerDefinition = exports.EchoWebSocketHandlerDefinition = exports.PassThroughWebSocketHandlerDefinition = void 0; const url = require("url"); const common_tags_1 = require("common-tags"); const serialization_1 = require("../../serialization/serialization"); const request_handler_definitions_1 = require("../requests/request-handler-definitions"); Object.defineProperty(exports, "CloseConnectionHandlerDefinition", { enumerable: true, get: function () { return request_handler_definitions_1.CloseConnectionHandlerDefinition; } }); Object.defineProperty(exports, "ResetConnectionHandlerDefinition", { enumerable: true, get: function () { return request_handler_definitions_1.ResetConnectionHandlerDefinition; } }); Object.defineProperty(exports, "TimeoutHandlerDefinition", { enumerable: true, get: function () { return request_handler_definitions_1.TimeoutHandlerDefinition; } }); class PassThroughWebSocketHandlerDefinition extends serialization_1.Serializable { constructor(options = {}) { super(); this.type = 'ws-passthrough'; this.ignoreHostHttpsErrors = []; this.extraCACertificates = []; this.ignoreHostHttpsErrors = options.ignoreHostHttpsErrors || []; if (!Array.isArray(this.ignoreHostHttpsErrors) && typeof this.ignoreHostHttpsErrors !== 'boolean') { throw new Error("ignoreHostHttpsErrors must be an array or a boolean"); } // If a location is provided, and it's not a bare hostname, it must be parseable const { forwarding } = options; if (forwarding && forwarding.targetHost.includes('/')) { const { protocol, hostname, port, path } = url.parse(forwarding.targetHost); if (path && path.trim() !== "/") { const suggestion = url.format({ protocol, hostname, port }) || forwarding.targetHost.slice(0, forwarding.targetHost.indexOf('/')); throw new Error((0, common_tags_1.stripIndent) ` URLs for forwarding cannot include a path, but "${forwarding.targetHost}" does. ${''}Did you mean ${suggestion}? `); } } this.forwarding = options.forwarding; this.lookupOptions = options.lookupOptions; this.proxyConfig = options.proxyConfig; } explain() { return this.forwarding ? `forward the websocket to ${this.forwarding.targetHost}` : 'pass the request through to the target host'; } /** * @internal */ serialize(channel) { return { type: this.type, forwarding: this.forwarding, lookupOptions: this.lookupOptions, proxyConfig: (0, serialization_1.serializeProxyConfig)(this.proxyConfig, channel), ignoreHostCertificateErrors: this.ignoreHostHttpsErrors, extraCACertificates: this.extraCACertificates.map((certObject) => { // We use toString to make sure that buffers always end up as // as UTF-8 string, to avoid serialization issues. Strings are an // easy safe format here, since it's really all just plain-text PEM // under the hood. if ('cert' in certObject) { return { cert: certObject.cert.toString('utf8') }; } else { return certObject; } }), }; } } exports.PassThroughWebSocketHandlerDefinition = PassThroughWebSocketHandlerDefinition; class EchoWebSocketHandlerDefinition extends serialization_1.Serializable { constructor() { super(...arguments); this.type = 'ws-echo'; } explain() { return "echo all websocket messages"; } } exports.EchoWebSocketHandlerDefinition = EchoWebSocketHandlerDefinition; class ListenWebSocketHandlerDefinition extends serialization_1.Serializable { constructor() { super(...arguments); this.type = 'ws-listen'; } explain() { return "silently accept websocket messages without responding"; } } exports.ListenWebSocketHandlerDefinition = ListenWebSocketHandlerDefinition; class RejectWebSocketHandlerDefinition extends serialization_1.Serializable { constructor(statusCode, statusMessage = 'WebSocket rejected', headers = {}, body = '') { super(); this.statusCode = statusCode; this.statusMessage = statusMessage; this.headers = headers; this.body = body; this.type = 'ws-reject'; } explain() { return `explicitly reject the websocket upgrade with status ${this.statusCode}`; } } exports.RejectWebSocketHandlerDefinition = RejectWebSocketHandlerDefinition; exports.WsHandlerDefinitionLookup = { 'ws-passthrough': PassThroughWebSocketHandlerDefinition, 'ws-echo': EchoWebSocketHandlerDefinition, 'ws-listen': ListenWebSocketHandlerDefinition, 'ws-reject': RejectWebSocketHandlerDefinition, 'close-connection': request_handler_definitions_1.CloseConnectionHandlerDefinition, 'reset-connection': request_handler_definitions_1.ResetConnectionHandlerDefinition, 'timeout': request_handler_definitions_1.TimeoutHandlerDefinition }; //# sourceMappingURL=websocket-handler-definitions.js.map