UNPKG

@n1k1t/mock-server

Version:

The ultimate toolkit to intercept, transform, and simulate HTTP/WS traffic with type-safe expectations

55 lines 2.42 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.WsTransport = exports.buildWsListener = void 0; const models_1 = require("../../models"); const context_1 = require("./context"); const meta_1 = require("../../../meta"); const executor_1 = require("./executor"); const logger_1 = require("../../../logger"); const logger = logger_1.Logger.build('Transports.Ws'); const buildWsListener = (router) => async (request, socket, head) => { if (request.url?.startsWith('/socket.io')) { return socket.destroy(); } for (const match of router.match('ws', request.url ?? '')) { const context = await match.transport .compileContext(match.provider, request, socket, head) .catch((error) => logger.error(`Got error while [ws] context compilation`, error?.stack ?? error)); if (!context) { return socket.destroy(); } if (!context.is(['registered', 'handling'])) { break; } const expectation = await meta_1.metaStorage .wrap(context.meta, () => match.transport.executor.match(context)) .catch((error) => logger.error(`Got error while [ws] expectation matching`, error?.stack ?? error)); if (!context.is(['registered', 'handling'])) { break; } if (!expectation) { context.cancel(); continue; } return meta_1.metaStorage .wrap(context.meta, () => match.transport.executor.exec(context.handle(), { expectation })) .catch((error) => logger.error(`Got error while [ws] execution`, error?.stack ?? error)); } const { transport, provider } = router.default('ws'); const context = await transport.compileContext(provider, request, socket, head); await meta_1.metaStorage .wrap(context.meta, () => transport.executor.exec(context.handle())) .catch((error) => logger.error('Got error while execution', error?.stack ?? error)); }; exports.buildWsListener = buildWsListener; class WsTransport extends models_1.Transport { constructor() { super(...arguments); this.executor = new executor_1.WsExecutor(); } compileContext(provider, request, socket, head) { return context_1.WsRequestContext.build(provider, request, socket, head); } } exports.WsTransport = WsTransport; //# sourceMappingURL=index.js.map