UNPKG

jspurefix

Version:
224 lines 12.5 kB
"use strict"; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; Object.defineProperty(exports, "__esModule", { value: true }); const path = require("path"); const ascii_parser_1 = require("./buffer/ascii/ascii-parser"); const ascii_msg_transmitter_1 = require("./transport/ascii/ascii-msg-transmitter"); const message_generator_1 = require("./util/message-generator"); const ascii_1 = require("./buffer/ascii"); const fixml_parser_1 = require("./buffer/fixml/fixml-parser"); const json_helper_1 = require("./util/json-helper"); const fixml_encoder_1 = require("./buffer/fixml/fixml-encoder"); const msg_payload_1 = require("./transport/msg-payload"); const enum_compiler_1 = require("./dictionary/compiler/enum-compiler"); const msg_type_1 = require("./types/enum/msg_type"); const elastic_buffer_1 = require("./buffer/elastic-buffer"); const js_fix_config_1 = require("./config/js-fix-config"); const string_duplex_1 = require("./transport/duplex/string-duplex"); const msg_compiler_1 = require("./dictionary/compiler/msg-compiler"); const js_fix_winston_log_factory_1 = require("./config/js-fix-winston-log-factory"); const winston_logger_1 = require("./config/winston-logger"); const dictionary_definitions_1 = require("./util/dictionary-definitions"); const buffer_helper_1 = require("./util/buffer-helper"); const requestPromise = require("request-promise"); const all_enum_1 = require("./types/FIXML50SP2/enum/all-enum"); function testEncodeDecode() { return __awaiter(this, void 0, void 0, function* () { const msgType = 'W'; const root = path.join(__dirname, '../'); const sessionDescription = require('../data/session/test-initiator.json'); const definitions = yield dictionary_definitions_1.getDefinitions(path.join(root, sessionDescription.application.dictionary)); const jh = new json_helper_1.JsonHelper(definitions); const msg = jh.fromJson(path.join(root, 'data/examples/FIXML/cme/tc/Initial Single Side Submission/fix.xml'), msgType); const config = new js_fix_config_1.JsFixConfig(null, definitions, sessionDescription, ascii_1.Ascii.Pipe); const session = new ascii_msg_transmitter_1.AsciiMsgTransmitter(config); const payload = new msg_payload_1.MsgPayload(msgType, msg); const encoderStream = session.encodeStream; encoderStream.write(payload); session.encodeMessage(msgType, msg); const parser = new ascii_parser_1.AsciiParser(definitions, encoderStream, ascii_1.Ascii.Pipe); const fix = session.buffer.toString(); console.log(fix); return new Promise((resolve, reject) => __awaiter(this, void 0, void 0, function* () { parser.on('msg', (msgType, view) => { resolve(view.toObject()); }); parser.on('error', (e) => { reject(e); }); })); }); } function testGenerator() { return __awaiter(this, void 0, void 0, function* () { const root = path.join(__dirname, '../'); const sessionDescription = require('../data/session/test-initiator.json'); const definitions = yield dictionary_definitions_1.getDefinitions('C:/Users/Stephen/dev/ts/jsfix/data/fix_repo/FIX.4.4/Base'); const lipsum = yield buffer_helper_1.getWords(path.join(root, 'data/examples/lipsum.txt')); const generator = new message_generator_1.MessageGenerator(lipsum, definitions); const msgType = msg_type_1.MsgType.NewOrderSingle; const example = generator.generate(msgType); console.log(JSON.stringify(example, null, 4)); const config = new js_fix_config_1.JsFixConfig(null, definitions, sessionDescription, ascii_1.Ascii.Pipe); const session = new ascii_msg_transmitter_1.AsciiMsgTransmitter(config); session.encodeMessage(msgType, example); const fix = session.buffer.toString(); const encoderStream = session.encodeStream; const payload = new msg_payload_1.MsgPayload(msgType, example); encoderStream.write(payload); const parser = new ascii_parser_1.AsciiParser(definitions, encoderStream, ascii_1.Ascii.Pipe); parser.on('msg', (mt, view) => { console.log(view.toString()); }); console.log(fix); }); } function repository() { return __awaiter(this, void 0, void 0, function* () { const root = path.join(__dirname, '../'); const definitions = yield dictionary_definitions_1.getDefinitions('repofixml'); const file = path.join(root, 'data/examples/FIXML/om/er/'); const so = definitions.message.get('ExecutionReport'); const t855 = definitions.simple.get('SecondaryTrdType'); const reject = { Text: `no response`, BusinessRejectReason: all_enum_1.BusinessRejectReason.ApplicationNotAvailable }; const fe = new fixml_encoder_1.FixmlEncoder(new elastic_buffer_1.ElasticBuffer(), definitions); fe.encode(reject, 'BusinessMessageReject'); const fixml = fe.buffer.toString(); const jh = new json_helper_1.JsonHelper(definitions); const fs = require('fs'); let readStream = fs.createReadStream(`${file}/fix.xml`); const sessionDescription = require('../data/session/test-initiator.json'); const config = new js_fix_config_1.JsFixConfig(null, definitions, sessionDescription, ascii_1.Ascii.Pipe); const xmlParser = new fixml_parser_1.FiXmlParser(config, readStream); xmlParser.on('batch', (msgType, v) => { console.log(`received message ${msgType}`); const o = v.toObject(); console.log(JSON.stringify(o, null, 4)); const fe = new fixml_encoder_1.FixmlEncoder(new elastic_buffer_1.ElasticBuffer(), definitions); fe.encode(o, msgType); const fixml = fe.buffer.toString(); console.log(fixml); console.log(v.toString()); }); xmlParser.on('msg', (msgType, v) => { console.log(`received message ${msgType}`); const o = v.toObject(); console.log(JSON.stringify(o, null, 4)); console.log(v.toString()); const fe = new fixml_encoder_1.FixmlEncoder(new elastic_buffer_1.ElasticBuffer(), definitions); fe.encode(o, msgType); const fixml = fe.buffer.toString(); console.log(fixml); }); }); } function runTest() { return __awaiter(this, void 0, void 0, function* () { return new Promise((accept, reject) => __awaiter(this, void 0, void 0, function* () { try { const res = yield testGenerator(); accept(res); } catch (e) { console.log(e.message); reject(e); } })); }); } function streamExample() { const fs = require('fs'); const root = path.join(__dirname, '../'); const file = path.join(root, 'data/examples/FIXML/cme/Claiming Firm Requests Sub-allocation with Allocation Instructions/'); let readStream = fs.createReadStream(`${file}/fix.xml`); const Writable = require('stream').Writable; const receiver = new Writable({ write: (data, _, done) => { console.log('receive ' + data); done(); } }); readStream.pipe(receiver).on('finish', () => { console.log('done'); }); } function compileDefinitions(definitionPath, outputPath) { return __awaiter(this, void 0, void 0, function* () { const definitions = yield dictionary_definitions_1.getDefinitions(definitionPath); const compilerSettings = require('../data/compiler.json'); compilerSettings.output = outputPath; const msgCompiler = new msg_compiler_1.MsgCompiler(definitions, compilerSettings); yield msgCompiler.generate(); const enumCompiler = new enum_compiler_1.EnumCompiler(definitions, compilerSettings); const writeFile = path.join(compilerSettings.output, './enum/all-enum.ts'); yield enumCompiler.generate(writeFile); const writeFileTypes = path.join(compilerSettings.output, './enum/msg-type.ts'); yield enumCompiler.generate(writeFile); }); } function compiler() { return __awaiter(this, void 0, void 0, function* () { yield compileDefinitions('data/fix_repo/fixmlschema_FIX.5.0SP2_EP228', 'C:/Users/Stephen/dev/ts/jsfix/src/types/FIXML50SP2'); }); } function generateMessage() { return __awaiter(this, void 0, void 0, function* () { yield testGenerator(); }); } function decode() { return __awaiter(this, void 0, void 0, function* () { const definitions = yield dictionary_definitions_1.getDefinitions('data/fix_repo/FIX.4.4/Base'); const txt = '8=FIX4.4|9=0001022|35=AE|49=init-comp|56=accept-comp|34=1|57=fix|52=20180909-14:22:09.841|571=Lorem|487=23513|856=1|568=ipsum|828=6|855=23619|830=dolor|150=F|748=17140|912=N|325=N|263=1|881=sit|818=amet,|820=consectetur|880=adipiscing|17=elit.|39=3|527=Nunc|570=N|423=8|55=odio|65=orci,|48=blandit|22=3|460=4|461=vel|167=MPT|762=semper|200=sed,|541=20180909|201=0|224=20180909|225=20180909|227=-8796.1|228=-23.537|255=bibendum|543=cursus|470=lectus.|471=Aenean|472=vel|240=20180909|202=891.7|947=-2928.1|231=5.7237|223=-1894.1|106=diam|348=9|349=6YYz0zu5s|350=8|351=TuH3tTNd|691=magna.|667=Aenean|875=99|876=et|873=20180909|874=20180909|913=viverra|914=leo,|915=20180909|916=20180909|919=0|898=0.5594|38=96682|152=19226|516=9.1251|854=0|235=PREVCLOSE|236=-2833.5|701=20180909|696=20180909|697=-6.095|698=26303|823=non|32=9253|31=2065.4|194=-73.233|30=iaculis|75=20180909|715=20180909|6=5.9279|218=0.0001953|221=neque.|222=Nullam|663=16216|699=arcu|761=lectus,|824=dignissim|63=3|64=20180909|573=0|574=M3|797=Y|852=Y|853=3|10=16|'; const startsAt = new Date(); let i = 0; const repeats = 10 * 1000; const asciiParser = new ascii_parser_1.AsciiParser(definitions, new string_duplex_1.StringDuplex(txt.repeat(repeats)).readable, ascii_1.Ascii.Pipe); asciiParser.on('msg', (msgType, v) => { ++i; if (i === repeats) { const elapsed = new Date().getTime() - startsAt.getTime(); console.log(`elapsed ms ${elapsed} ${(elapsed / repeats) * 1000} micros per msg`); } }); }); } function http() { return __awaiter(this, void 0, void 0, function* () { const sessionDescription = require('../data/session/test-http-acceptor.json'); const definitions = yield dictionary_definitions_1.getDefinitions(sessionDescription.application.dictionary); const logFactory = new js_fix_winston_log_factory_1.JsFixWinstonLogFactory(winston_logger_1.WinstonLogger.consoleOptions('info')); const config = new js_fix_config_1.JsFixConfig(null, definitions, sessionDescription, ascii_1.Ascii.Pipe, logFactory); const xml = '<?xml version="1.0" encoding="UTF-8"?>\n' + '<FIXML v="5.0 SP2" s="20090815" xv="109" cv="CME.0001">\n' + ' <UserReq UserReqID="123456" UserReqTyp="1" Username="user123" Password="User!Pass5">\n' + ' <Hdr SID="BRKR" SSub="user123" TID="CME" TSub="CPAPI"/>\n' + ' </UserReq>\n' + '</FIXML>'; requestPromise({ method: 'POST', uri: 'http://localhost:2343/session', body: { fixml: xml }, json: true }).then(function (parsedBody) { console.log(parsedBody); }) .catch((err) => { console.log(err); }); }); } repository(); //# sourceMappingURL=dict-parser.js.map