UNPKG

@sotatech/nest-quickfix

Version:

A powerful NestJS implementation of the FIX (Financial Information eXchange) protocol. Provides high-performance, reliable messaging for financial trading applications with built-in session management, message validation, and recovery mechanisms.

78 lines 2.71 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.FIXMessageParser = void 0; const message_1 = require("./message"); const fields_1 = require("../fields"); const errors_1 = require("../common/errors"); const common_1 = require("@nestjs/common"); class FIXMessageParser { constructor() { this.SOH = '\x01'; } parse(rawMessage) { try { const fields = this.parseFields(rawMessage); const message = new message_1.Message(); fields.forEach((value, tag) => { message.setField(tag, value); }); return message; } catch (error) { throw new errors_1.ParserError(`Failed to parse message: ${error.message}`); } } processData(data) { const messages = []; const rawData = data.toString(); const rawMessages = rawData.split(this.SOH + '8='); for (let rawMsg of rawMessages) { if (!rawMsg) continue; if (!rawMsg.startsWith('8=')) { rawMsg = '8=' + rawMsg; } try { const message = new message_1.Message(); const fields = rawMsg.split(this.SOH); fields.forEach(field => { if (!field) return; const [tag, value] = field.split('='); if (tag && value) { if (tag === '8') { message.setField(fields_1.Fields.BeginString, value); } else { message.setField(parseInt(tag), value); } } }); if (!message.hasField(fields_1.Fields.BeginString)) { throw new Error('Missing BeginString (tag 8)'); } if (!message.hasField(fields_1.Fields.MsgType)) { throw new Error('Missing MsgType (tag 35)'); } messages.push(message); } catch (error) { common_1.Logger.error('Error parsing message:', error); } } return messages; } parseFields(message) { const fields = new Map(); const pairs = message.split(this.SOH); pairs.forEach((pair) => { if (!pair) return; const [tag, value] = pair.split('='); fields.set(parseInt(tag), value); }); return fields; } } exports.FIXMessageParser = FIXMessageParser; //# sourceMappingURL=fix.message.parser.js.map