@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
JavaScript
;
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