@n1k1t/mock-server
Version:
The ultimate toolkit to intercept, transform, and simulate HTTP/WS traffic with type-safe expectations
55 lines • 2.42 kB
JavaScript
;
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