jspurefix 5.10.3 → 5.10.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (37) hide show
  1. package/dist/buffer/encode-proxy.js.map +1 -1
  2. package/dist/buffer/fixml/fixml-encoder.js.map +1 -1
  3. package/dist/buffer/msg-view.js.map +1 -1
  4. package/dist/config/winston-logger.js.map +1 -1
  5. package/dist/dictionary/parser/fixml/components-parser.js.map +1 -1
  6. package/dist/dictionary/parser/fixml/fields-parser.js.map +1 -1
  7. package/dist/dictionary/parser/fixml/include-graph.js.map +1 -1
  8. package/dist/jsfix-bench.js.map +1 -1
  9. package/dist/sample/http/oms/app.js.map +1 -1
  10. package/dist/sample/http/oms/oms-factory.js.map +1 -1
  11. package/dist/sample/tcp/qf-md/app.js.map +1 -1
  12. package/dist/sample/tcp/skeleton/app.js.map +1 -1
  13. package/dist/sample/tcp/trade-capture/app-launcher.js.map +1 -1
  14. package/dist/store/fix-msg-memory-store.js.map +1 -1
  15. package/dist/transport/fixml/fixml-session-msg-factory.js.map +1 -1
  16. package/dist/transport/session/clone-session-description.js.map +1 -1
  17. package/dist/transport/tcp/tls-options-factory.js.map +1 -1
  18. package/jsfix.test_client.txt +62 -62
  19. package/jsfix.test_server.txt +72 -72
  20. package/package.json +5 -3
  21. package/src/buffer/encode-proxy.ts +1 -1
  22. package/src/buffer/fixml/fixml-encoder.ts +1 -1
  23. package/src/buffer/msg-view.ts +1 -1
  24. package/src/config/winston-logger.ts +1 -1
  25. package/src/dictionary/parser/fixml/components-parser.ts +2 -2
  26. package/src/dictionary/parser/fixml/fields-parser.ts +1 -1
  27. package/src/dictionary/parser/fixml/include-graph.ts +1 -1
  28. package/src/jsfix-bench.ts +1 -1
  29. package/src/sample/http/oms/app.ts +1 -1
  30. package/src/sample/http/oms/oms-factory.ts +4 -4
  31. package/src/sample/tcp/qf-md/app.ts +1 -1
  32. package/src/sample/tcp/skeleton/app.ts +1 -1
  33. package/src/sample/tcp/trade-capture/app-launcher.ts +1 -1
  34. package/src/store/fix-msg-memory-store.ts +1 -1
  35. package/src/transport/fixml/fixml-session-msg-factory.ts +5 -5
  36. package/src/transport/session/clone-session-description.ts +1 -1
  37. package/src/transport/tcp/tls-options-factory.ts +2 -2
@@ -1 +1 @@
1
- {"version":3,"file":"jsfix-bench.js","sourceRoot":"","sources":["../src/jsfix-bench.ts"],"names":[],"mappings":"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","sourcesContent":["import 'reflect-metadata'\n\nimport * as path from 'path'\nimport * as fs from 'fs'\nimport minimist = require('minimist')\nimport buildOptions from 'minimist-options'\n\nimport { AsciiChars } from './buffer/ascii'\nimport { IJsFixConfig } from './config'\nimport { DefinitionFactory } from './util'\nimport { SessionContainer } from './runtime'\nimport { DITokens } from './runtime/di-tokens'\nimport {\n BenchRunner,\n IBenchCase,\n IBenchOptions,\n IBenchSuiteResult,\n ParseCase,\n ParseDepth,\n defaultBenchOptions,\n formatComparison,\n formatSuite\n} from './benchmark'\n\nconst options = buildOptions({\n dict: {\n type: 'string',\n alias: 'd',\n default: 'qf44'\n },\n\n fix: {\n type: 'string',\n alias: 'f',\n default: 'data/examples/FIX.4.4/quickfix/execution-report/fix.txt'\n },\n\n session: {\n type: 'string',\n alias: 's',\n default: 'data/session/test-initiator.json'\n },\n\n delimiter: {\n type: 'string',\n alias: 'l',\n default: '|'\n },\n\n depth: {\n type: 'string',\n default: 'view,object'\n },\n\n rounds: {\n type: 'number',\n default: defaultBenchOptions.rounds\n },\n\n msgs: {\n type: 'number',\n default: defaultBenchOptions.operationsPerRound\n },\n\n warmup: {\n type: 'number',\n default: defaultBenchOptions.warmupOperations\n },\n\n label: {\n type: 'string',\n default: 'jspurefix'\n },\n\n save: {\n type: 'string'\n },\n\n baseline: {\n type: 'string'\n },\n\n json: {\n type: 'boolean',\n default: false\n },\n\n help: {\n type: 'boolean',\n alias: 'h',\n default: false\n }\n})\n\nconst argv: any = minimist(process.argv.slice(2), options)\n\nconst root: string = path.join(__dirname, '../')\n\nfunction norm (p: string): string {\n return path.isAbsolute(p) ? p : path.join(root, p)\n}\n\nfunction usage (): void {\n console.log('measure the parse path and what it costs in time and in garbage')\n console.log()\n console.log(' --fix=<path> fix log to parse, defaults to a 4.4 execution report')\n console.log(' --dict=<name> dictionary, e.g. qf44, repo44, qf50sp2')\n console.log(' --delimiter=<char> field delimiter in the log, defaults to |')\n console.log(' --depth=view,object which stages to measure, comma separated')\n console.log(' --rounds=<n> measured rounds, one sample each')\n console.log(' --msgs=<n> messages per round')\n console.log(' --warmup=<n> messages discarded before measuring')\n console.log(' --save=<path> write the suite to json')\n console.log(' --baseline=<path> compare against a previously saved suite')\n console.log(' --json print the suite as json instead of a report')\n console.log()\n console.log('run under --expose-gc so rounds can be isolated and heap read cleanly:')\n console.log(' node --expose-gc dist/jsfix-bench --fix=data/examples/FIX.4.4/quickfix/execution-report/fix.txt')\n console.log(' npm run bench')\n}\n\nasync function makeConfig (): Promise<IJsFixConfig> {\n const sys = new SessionContainer()\n sys.registerGlobal('error')\n const sessionDescription = require(norm(argv.session))\n const container = await sys.makeSystem(sessionDescription)\n const config = container.resolve<IJsFixConfig>(DITokens.IJsFixConfig)\n config.definitions = await new DefinitionFactory().getDefinitions(argv.dict)\n // the parser reads the delimiter when it is constructed, so this has to be\n // settled before any case is built\n config.delimiter = AsciiChars.firstChar(argv.delimiter)\n return config\n}\n\nfunction requestedDepths (): ParseDepth[] {\n const known = new Map<string, ParseDepth>([\n ['view', ParseDepth.View],\n ['object', ParseDepth.Object]\n ])\n const asked = String(argv.depth).split(',').map(d => d.trim().toLowerCase()).filter(d => d.length > 0)\n return asked.map(d => {\n const depth = known.get(d)\n if (!depth) {\n throw new Error(`unknown depth ${d}, expected view or object`)\n }\n return depth\n })\n}\n\nfunction readSuite (p: string): IBenchSuiteResult {\n return JSON.parse(fs.readFileSync(norm(p), 'utf8'))\n}\n\nasync function main (): Promise<void> {\n if (argv.help) {\n usage()\n return\n }\n const fixPath = norm(argv.fix)\n if (!fs.existsSync(fixPath)) {\n throw new Error(`no such fix log ${fixPath}`)\n }\n const contents = fs.readFileSync(fixPath, 'utf8')\n const config = await makeConfig()\n\n const cases: ParseCase[] = requestedDepths().map(depth =>\n new ParseCase(`parse:${depth}`, { config, contents, depth }))\n\n // every case walks the same input, so one alignment covers the suite and all\n // of them stay directly comparable\n const perInvocation = cases[0].operationsPerInvocation\n const operationsPerRound = cases[0].alignOperations(argv.msgs)\n const benchOptions: IBenchOptions = {\n warmupOperations: cases[0].alignOperations(argv.warmup),\n rounds: argv.rounds,\n operationsPerRound,\n gcBetweenRounds: true\n }\n\n console.log(`${path.relative(root, fixPath)} ${perInvocation} msg/pass dict ${argv.dict}`)\n const suite = await new BenchRunner(benchOptions).runAll(argv.label, cases as IBenchCase[])\n\n if (argv.json) {\n console.log(JSON.stringify(suite, null, 2))\n } else {\n console.log()\n console.log(formatSuite(suite))\n }\n if (argv.baseline) {\n console.log()\n console.log(formatComparison(readSuite(argv.baseline), suite))\n }\n if (argv.save) {\n const target = norm(argv.save)\n fs.mkdirSync(path.dirname(target), { recursive: true })\n fs.writeFileSync(target, JSON.stringify(suite, null, 2), 'utf8')\n console.log(`saved ${path.relative(root, target)}`)\n }\n}\n\nmain().catch(e => {\n console.error(e instanceof Error ? e.message : e)\n process.exit(1)\n})\n"]}
1
+ {"version":3,"file":"jsfix-bench.js","sourceRoot":"","sources":["../src/jsfix-bench.ts"],"names":[],"mappings":"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","sourcesContent":["import 'reflect-metadata'\n\nimport * as path from 'path'\nimport * as fs from 'fs'\nimport minimist = require('minimist')\nimport buildOptions from 'minimist-options'\n\nimport { AsciiChars } from './buffer/ascii'\nimport { IJsFixConfig } from './config'\nimport { DefinitionFactory } from './util'\nimport { SessionContainer } from './runtime'\nimport { DITokens } from './runtime/di-tokens'\nimport {\n BenchRunner,\n IBenchCase,\n IBenchOptions,\n IBenchSuiteResult,\n ParseCase,\n ParseDepth,\n defaultBenchOptions,\n formatComparison,\n formatSuite\n} from './benchmark'\n\nconst options = buildOptions({\n dict: {\n type: 'string',\n alias: 'd',\n default: 'qf44'\n },\n\n fix: {\n type: 'string',\n alias: 'f',\n default: 'data/examples/FIX.4.4/quickfix/execution-report/fix.txt'\n },\n\n session: {\n type: 'string',\n alias: 's',\n default: 'data/session/test-initiator.json'\n },\n\n delimiter: {\n type: 'string',\n alias: 'l',\n default: '|'\n },\n\n depth: {\n type: 'string',\n default: 'view,object'\n },\n\n rounds: {\n type: 'number',\n default: defaultBenchOptions.rounds\n },\n\n msgs: {\n type: 'number',\n default: defaultBenchOptions.operationsPerRound\n },\n\n warmup: {\n type: 'number',\n default: defaultBenchOptions.warmupOperations\n },\n\n label: {\n type: 'string',\n default: 'jspurefix'\n },\n\n save: {\n type: 'string'\n },\n\n baseline: {\n type: 'string'\n },\n\n json: {\n type: 'boolean',\n default: false\n },\n\n help: {\n type: 'boolean',\n alias: 'h',\n default: false\n }\n})\n\nconst argv: any = minimist(process.argv.slice(2), options)\n\nconst root: string = path.join(__dirname, '../')\n\nfunction norm (p: string): string {\n return path.isAbsolute(p) ? p : path.join(root, p)\n}\n\nfunction usage (): void {\n console.log('measure the parse path and what it costs in time and in garbage')\n console.log()\n console.log(' --fix=<path> fix log to parse, defaults to a 4.4 execution report')\n console.log(' --dict=<name> dictionary, e.g. qf44, repo44, qf50sp2')\n console.log(' --delimiter=<char> field delimiter in the log, defaults to |')\n console.log(' --depth=view,object which stages to measure, comma separated')\n console.log(' --rounds=<n> measured rounds, one sample each')\n console.log(' --msgs=<n> messages per round')\n console.log(' --warmup=<n> messages discarded before measuring')\n console.log(' --save=<path> write the suite to json')\n console.log(' --baseline=<path> compare against a previously saved suite')\n console.log(' --json print the suite as json instead of a report')\n console.log()\n console.log('run under --expose-gc so rounds can be isolated and heap read cleanly:')\n console.log(' node --expose-gc dist/jsfix-bench --fix=data/examples/FIX.4.4/quickfix/execution-report/fix.txt')\n console.log(' npm run bench')\n}\n\nasync function makeConfig (): Promise<IJsFixConfig> {\n const sys = new SessionContainer()\n sys.registerGlobal('error')\n const sessionDescription = require(norm(argv.session))\n const container = await sys.makeSystem(sessionDescription)\n const config = container.resolve<IJsFixConfig>(DITokens.IJsFixConfig)\n config.definitions = await new DefinitionFactory().getDefinitions(argv.dict)\n // the parser reads the delimiter when it is constructed, so this has to be\n // settled before any case is built\n config.delimiter = AsciiChars.firstChar(argv.delimiter)\n return config\n}\n\nfunction requestedDepths (): ParseDepth[] {\n const known = new Map<string, ParseDepth>([\n ['view', ParseDepth.View],\n ['object', ParseDepth.Object]\n ])\n const asked = String(argv.depth).split(',').map(d => d.trim().toLowerCase()).filter(d => d.length > 0)\n return asked.map(d => {\n const depth = known.get(d)\n if (!depth) {\n throw new Error(`unknown depth ${d}, expected view or object`)\n }\n return depth\n })\n}\n\nfunction readSuite (p: string): IBenchSuiteResult {\n return JSON.parse(fs.readFileSync(norm(p), 'utf8'))\n}\n\nasync function main (): Promise<void> {\n if (argv.help) {\n usage()\n return\n }\n const fixPath = norm(argv.fix)\n if (!fs.existsSync(fixPath)) {\n throw new Error(`no such fix log ${fixPath}`)\n }\n const contents = fs.readFileSync(fixPath, 'utf8')\n const config = await makeConfig()\n\n const cases: ParseCase[] = requestedDepths().map(depth =>\n new ParseCase(`parse:${depth}`, { config, contents, depth }))\n\n // every case walks the same input, so one alignment covers the suite and all\n // of them stay directly comparable\n const perInvocation = cases[0].operationsPerInvocation\n const operationsPerRound = cases[0].alignOperations(argv.msgs)\n const benchOptions: IBenchOptions = {\n warmupOperations: cases[0].alignOperations(argv.warmup),\n rounds: argv.rounds,\n operationsPerRound,\n gcBetweenRounds: true\n }\n\n console.log(`${path.relative(root, fixPath)} ${perInvocation} msg/pass dict ${argv.dict}`)\n const suite = await new BenchRunner(benchOptions).runAll(argv.label, cases)\n\n if (argv.json) {\n console.log(JSON.stringify(suite, null, 2))\n } else {\n console.log()\n console.log(formatSuite(suite))\n }\n if (argv.baseline) {\n console.log()\n console.log(formatComparison(readSuite(argv.baseline), suite))\n }\n if (argv.save) {\n const target = norm(argv.save)\n fs.mkdirSync(path.dirname(target), { recursive: true })\n fs.writeFileSync(target, JSON.stringify(suite, null, 2), 'utf8')\n console.log(`saved ${path.relative(root, target)}`)\n }\n}\n\nmain().catch(e => {\n console.error(e instanceof Error ? e.message : e)\n process.exit(1)\n})\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"app.js","sourceRoot":"","sources":["../../../../src/sample/http/oms/app.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,4BAAyB;AAEzB,+CAA0C;AAC1C,+CAA0C;AAE1C,8CAA2E;AAI3E,2CAA4B;AAE5B,MAAM,WAAY,SAAQ,yBAAe;IACvC;QACE,KAAK,CACH,uCAAuC,EACvC,sCAAsC,CAAC,CAAA;IAC3C,CAAC;IAEkB,WAAW,CAAE,MAAoB;QAClD,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,WAAW,CAAC,CAAA;QACxD,OAAO;YACL,WAAW,EAAE,CAAC,aAA2B,EAAE,EAAE,CAAC,WAAW;gBACvD,CAAC,CAAC,IAAI,wBAAU,CAAC,aAAa,CAAC;gBAC/B,CAAC,CAAC,IAAI,wBAAU,CAAC,aAAa,CAAC;SACjB,CAAA;IACpB,CAAC;IAEK,OAAO,CAAE,EAAU;;YACvB,MAAM,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,CAAA;YACrC,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;gBACrC,EAAE,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE;oBACf,OAAO,CAAC,IAAI,CAAC,CAAA;gBACf,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;oBACX,MAAM,CAAC,CAAC,CAAC,CAAA;gBACX,CAAC,CAAC,CAAA;YACJ,CAAC,CAAC,CAAA;QACJ,CAAC;KAAA;IAEwB,YAAY,CAAE,gBAAqC;;;YAC1E,MAAM,MAAM,GAAiB,gBAAgB,CAAC,OAAO,CAAe,kBAAQ,CAAC,YAAY,CAAC,CAAA;YAC1F,MAAM,IAAI,GAAG,MAAA,MAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,WAAW,0CAAE,WAAW,0CAAE,IAAI,CAAA;YACnD,IAAI,IAAI,EAAE,CAAC;gBACT,IAAI,CAAC,OAAO,GAAG,gBAAgB,CAAC,OAAO,CAAe,kBAAQ,CAAC,YAAY,CAAC,CAAA;gBAC5E,MAAM,SAAS,GAAG,gBAAgB,CAAC,OAAO,CAAY,kBAAQ,CAAC,SAAS,CAAC,CAAA;gBACzE,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,GAAS,EAAE;oBACxC,OAAO,SAAS,CAAC,KAAK,EAAE,CAAA;gBAC1B,CAAC,CAAA,CAAC,CAAA;YACJ,CAAC;QACH,CAAC;KAAA;CACF;AAED,MAAM,CAAC,GAAG,IAAI,WAAW,EAAE,CAAA;AAC3B,CAAC,CAAC,IAAI,EAAE,CAAA","sourcesContent":["import 'reflect-metadata'\n\nimport { HttpServer } from './http-server'\nimport { HttpClient } from './http-client'\nimport { IJsFixConfig } from '../../../config'\nimport { DITokens, EngineFactory, SessionLauncher } from '../../../runtime'\nimport { DependencyContainer } from 'tsyringe'\nimport { FixEntity } from '../../../transport'\nimport { IHttpAdapter } from '../../../transport/http/http-adapter'\nimport * as util from 'util'\n\nclass AppLauncher extends SessionLauncher {\n public constructor () {\n super(\n 'data/session/test-http-initiator.json',\n 'data/session/test-http-acceptor.json')\n }\n\n protected override makeFactory (config: IJsFixConfig): EngineFactory {\n const isInitiator = this.isInitiator(config.description)\n return {\n makeSession: (sessionConfig: IJsFixConfig) => isInitiator\n ? new HttpClient(sessionConfig)\n : new HttpServer(sessionConfig)\n } as EngineFactory\n }\n\n async waitFor (ms: number): Promise<any> {\n const to = util.promisify(setTimeout)\n return new Promise((resolve, reject) => {\n to(ms).then(() => {\n resolve(null)\n }).catch(e => {\n reject(e)\n })\n })\n }\n\n protected override async getInitiator (sessionContainer: DependencyContainer): Promise<any> {\n const config: IJsFixConfig = sessionContainer.resolve<IJsFixConfig>(DITokens.IJsFixConfig)\n const http = config?.description?.application?.http\n if (http) {\n http.adapter = sessionContainer.resolve<IHttpAdapter>(DITokens.IHttpAdapter)\n const initiator = sessionContainer.resolve<FixEntity>(DITokens.FixEntity)\n return this.waitFor(1000).then(async () => {\n return initiator.start()\n })\n }\n }\n}\n\nconst l = new AppLauncher()\nl.exec()\n"]}
1
+ {"version":3,"file":"app.js","sourceRoot":"","sources":["../../../../src/sample/http/oms/app.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,4BAAyB;AAEzB,+CAA0C;AAC1C,+CAA0C;AAE1C,8CAA2E;AAI3E,2CAA4B;AAE5B,MAAM,WAAY,SAAQ,yBAAe;IACvC;QACE,KAAK,CACH,uCAAuC,EACvC,sCAAsC,CAAC,CAAA;IAC3C,CAAC;IAEkB,WAAW,CAAE,MAAoB;QAClD,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,WAAW,CAAC,CAAA;QACxD,OAAO;YACL,WAAW,EAAE,CAAC,aAA2B,EAAE,EAAE,CAAC,WAAW;gBACvD,CAAC,CAAC,IAAI,wBAAU,CAAC,aAAa,CAAC;gBAC/B,CAAC,CAAC,IAAI,wBAAU,CAAC,aAAa,CAAC;SAClC,CAAA;IACH,CAAC;IAEK,OAAO,CAAE,EAAU;;YACvB,MAAM,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,CAAA;YACrC,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;gBACrC,EAAE,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE;oBACf,OAAO,CAAC,IAAI,CAAC,CAAA;gBACf,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;oBACX,MAAM,CAAC,CAAC,CAAC,CAAA;gBACX,CAAC,CAAC,CAAA;YACJ,CAAC,CAAC,CAAA;QACJ,CAAC;KAAA;IAEwB,YAAY,CAAE,gBAAqC;;;YAC1E,MAAM,MAAM,GAAiB,gBAAgB,CAAC,OAAO,CAAe,kBAAQ,CAAC,YAAY,CAAC,CAAA;YAC1F,MAAM,IAAI,GAAG,MAAA,MAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,WAAW,0CAAE,WAAW,0CAAE,IAAI,CAAA;YACnD,IAAI,IAAI,EAAE,CAAC;gBACT,IAAI,CAAC,OAAO,GAAG,gBAAgB,CAAC,OAAO,CAAe,kBAAQ,CAAC,YAAY,CAAC,CAAA;gBAC5E,MAAM,SAAS,GAAG,gBAAgB,CAAC,OAAO,CAAY,kBAAQ,CAAC,SAAS,CAAC,CAAA;gBACzE,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,GAAS,EAAE;oBACxC,OAAO,SAAS,CAAC,KAAK,EAAE,CAAA;gBAC1B,CAAC,CAAA,CAAC,CAAA;YACJ,CAAC;QACH,CAAC;KAAA;CACF;AAED,MAAM,CAAC,GAAG,IAAI,WAAW,EAAE,CAAA;AAC3B,CAAC,CAAC,IAAI,EAAE,CAAA","sourcesContent":["import 'reflect-metadata'\n\nimport { HttpServer } from './http-server'\nimport { HttpClient } from './http-client'\nimport { IJsFixConfig } from '../../../config'\nimport { DITokens, EngineFactory, SessionLauncher } from '../../../runtime'\nimport { DependencyContainer } from 'tsyringe'\nimport { FixEntity } from '../../../transport'\nimport { IHttpAdapter } from '../../../transport/http/http-adapter'\nimport * as util from 'util'\n\nclass AppLauncher extends SessionLauncher {\n public constructor () {\n super(\n 'data/session/test-http-initiator.json',\n 'data/session/test-http-acceptor.json')\n }\n\n protected override makeFactory (config: IJsFixConfig): EngineFactory {\n const isInitiator = this.isInitiator(config.description)\n return {\n makeSession: (sessionConfig: IJsFixConfig) => isInitiator\n ? new HttpClient(sessionConfig)\n : new HttpServer(sessionConfig)\n }\n }\n\n async waitFor (ms: number): Promise<any> {\n const to = util.promisify(setTimeout)\n return new Promise((resolve, reject) => {\n to(ms).then(() => {\n resolve(null)\n }).catch(e => {\n reject(e)\n })\n })\n }\n\n protected override async getInitiator (sessionContainer: DependencyContainer): Promise<any> {\n const config: IJsFixConfig = sessionContainer.resolve<IJsFixConfig>(DITokens.IJsFixConfig)\n const http = config?.description?.application?.http\n if (http) {\n http.adapter = sessionContainer.resolve<IHttpAdapter>(DITokens.IHttpAdapter)\n const initiator = sessionContainer.resolve<FixEntity>(DITokens.FixEntity)\n return this.waitFor(1000).then(async () => {\n return initiator.start()\n })\n }\n }\n}\n\nconst l = new AppLauncher()\nl.exec()\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"oms-factory.js","sourceRoot":"","sources":["../../../../src/sample/http/oms/oms-factory.ts"],"names":[],"mappings":";;;AAAA,0DAWkC;AAElC,MAAa,UAAU;IAGrB,YAA6B,OAAe;QAAf,YAAO,GAAP,OAAO,CAAQ;QAFpC,OAAE,GAAW,CAAC,CAAA;QACd,WAAM,GAAW,CAAC,CAAA;IAE1B,CAAC;IAEM,WAAW,CAAE,MAAc,EAAE,IAAU,EAAE,GAAW,EAAE,KAAa;QACxE,MAAM,EAAE,GAAW,IAAI,CAAC,EAAE,EAAE,CAAA;QAC5B,OAAO;YACL,OAAO,EAAE,MAAM,EAAE,EAAE;YACnB,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,IAAI,EAAE,IAAI;YACV,KAAK,EAAE,KAAK;YACZ,OAAO,EAAE,oBAAO,CAAC,KAAK;YACtB,YAAY,EAAE;gBACZ,QAAQ,EAAE,GAAG;aACG;YAClB,UAAU,EAAE;gBACV,MAAM,EAAE,MAAM;gBACd,UAAU,EAAE,WAAW;gBACvB,gBAAgB,EAAE,6BAAgB,CAAC,UAAU;aAC/B;YAChB,WAAW,EAAE,wBAAW,CAAC,iBAAiB;SACxB,CAAA;IACtB,CAAC;IAEM,SAAS,CAAE,KAAsB;;QACtC,MAAM,EAAE,GAAW,IAAI,CAAC,MAAM,EAAE,CAAA;QAChC,OAAO;YACL,OAAO,EAAE,KAAK,CAAC,OAAO;YACtB,OAAO,EAAE,KAAK,CAAC,OAAO;YACtB,YAAY,EAAE,IAAI,IAAI,EAAE;YACxB,KAAK,EAAE,KAAK,CAAC,KAAK;YAClB,SAAS,EAAE,CAAC;YACZ,MAAM,EAAE,KAAK,CAAC,KAAK;YACnB,QAAQ,EAAE,qBAAQ,CAAC,WAAW;YAC9B,SAAS,EAAE,sBAAS,CAAC,MAAM;YAC3B,MAAM,EAAE,OAAO,EAAE,EAAE;YACnB,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,KAAK,EAAE,KAAK,CAAC,KAAK;YAClB,YAAY,EAAE;gBACZ,QAAQ,EAAE,MAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,YAAY,0CAAE,QAAQ;aACvB;YAClB,UAAU,EAAE;gBACV,MAAM,EAAE,MAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,UAAU,0CAAE,MAAM;gBACjC,UAAU,EAAE,MAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,UAAU,0CAAE,UAAU;gBACzC,gBAAgB,EAAE,6BAAgB,CAAC,UAAU;aAC/B;SACG,CAAA;IACvB,CAAC;CACF;AAlDD,gCAkDC","sourcesContent":["import {\n INewOrderSingle,\n ExecType,\n OrdStatus,\n OrdType,\n SecurityIDSource,\n Side,\n TimeInForce,\n IOrderQtyData,\n IInstrument,\n IExecutionReport\n} from '../../../types/FIXML50SP2'\n\nexport class OmsFactory {\n private id: number = 1\n private execId: number = 1\n constructor (public readonly account: string) {\n }\n\n public createOrder (symbol: string, side: Side, qty: number, price: number): INewOrderSingle {\n const id: number = this.id++\n return {\n ClOrdID: `Cli${id}`,\n Account: this.account,\n Side: side,\n Price: price,\n OrdType: OrdType.Limit,\n OrderQtyData: {\n OrderQty: qty\n } as IOrderQtyData,\n Instrument: {\n Symbol: symbol,\n SecurityID: '459200101',\n SecurityIDSource: SecurityIDSource.IsinNumber\n } as IInstrument,\n TimeInForce: TimeInForce.GoodTillCancelGtc\n } as INewOrderSingle\n }\n\n public fillOrder (order: INewOrderSingle): IExecutionReport {\n const id: number = this.execId++\n return {\n ClOrdID: order.ClOrdID,\n OrdType: order.OrdType,\n TransactTime: new Date(),\n AvgPx: order.Price,\n LeavesQty: 0,\n LastPx: order.Price,\n ExecType: ExecType.OrderStatus,\n OrdStatus: OrdStatus.Filled,\n ExecID: `exec${id}`,\n Side: order.Side,\n Price: order.Price,\n OrderQtyData: {\n OrderQty: order?.OrderQtyData?.OrderQty\n } as IOrderQtyData,\n Instrument: {\n Symbol: order?.Instrument?.Symbol,\n SecurityID: order?.Instrument?.SecurityID,\n SecurityIDSource: SecurityIDSource.IsinNumber\n } as IInstrument\n } as IExecutionReport\n }\n}\n"]}
1
+ {"version":3,"file":"oms-factory.js","sourceRoot":"","sources":["../../../../src/sample/http/oms/oms-factory.ts"],"names":[],"mappings":";;;AAAA,0DAWkC;AAElC,MAAa,UAAU;IAGrB,YAA6B,OAAe;QAAf,YAAO,GAAP,OAAO,CAAQ;QAFpC,OAAE,GAAW,CAAC,CAAA;QACd,WAAM,GAAW,CAAC,CAAA;IAE1B,CAAC;IAEM,WAAW,CAAE,MAAc,EAAE,IAAU,EAAE,GAAW,EAAE,KAAa;QACxE,MAAM,EAAE,GAAW,IAAI,CAAC,EAAE,EAAE,CAAA;QAC5B,OAAO;YACL,OAAO,EAAE,MAAM,EAAE,EAAE;YACnB,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,IAAI,EAAE,IAAI;YACV,KAAK,EAAE,KAAK;YACZ,OAAO,EAAE,oBAAO,CAAC,KAAK;YACtB,YAAY,EAAE;gBACZ,QAAQ,EAAE,GAAG;aACd;YACD,UAAU,EAAE;gBACV,MAAM,EAAE,MAAM;gBACd,UAAU,EAAE,WAAW;gBACvB,gBAAgB,EAAE,6BAAgB,CAAC,UAAU;aAC9C;YACD,WAAW,EAAE,wBAAW,CAAC,iBAAiB;SACxB,CAAA;IACtB,CAAC;IAEM,SAAS,CAAE,KAAsB;;QACtC,MAAM,EAAE,GAAW,IAAI,CAAC,MAAM,EAAE,CAAA;QAChC,OAAO;YACL,OAAO,EAAE,KAAK,CAAC,OAAO;YACtB,OAAO,EAAE,KAAK,CAAC,OAAO;YACtB,YAAY,EAAE,IAAI,IAAI,EAAE;YACxB,KAAK,EAAE,KAAK,CAAC,KAAK;YAClB,SAAS,EAAE,CAAC;YACZ,MAAM,EAAE,KAAK,CAAC,KAAK;YACnB,QAAQ,EAAE,qBAAQ,CAAC,WAAW;YAC9B,SAAS,EAAE,sBAAS,CAAC,MAAM;YAC3B,MAAM,EAAE,OAAO,EAAE,EAAE;YACnB,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,KAAK,EAAE,KAAK,CAAC,KAAK;YAClB,YAAY,EAAE;gBACZ,QAAQ,EAAE,MAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,YAAY,0CAAE,QAAQ;aACxC;YACD,UAAU,EAAE;gBACV,MAAM,EAAE,MAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,UAAU,0CAAE,MAAM;gBACjC,UAAU,EAAE,MAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,UAAU,0CAAE,UAAU;gBACzC,gBAAgB,EAAE,6BAAgB,CAAC,UAAU;aAC9C;SACkB,CAAA;IACvB,CAAC;CACF;AAlDD,gCAkDC","sourcesContent":["import {\n INewOrderSingle,\n ExecType,\n OrdStatus,\n OrdType,\n SecurityIDSource,\n Side,\n TimeInForce,\n IOrderQtyData,\n IInstrument,\n IExecutionReport\n} from '../../../types/FIXML50SP2'\n\nexport class OmsFactory {\n private id: number = 1\n private execId: number = 1\n constructor (public readonly account: string) {\n }\n\n public createOrder (symbol: string, side: Side, qty: number, price: number): INewOrderSingle {\n const id: number = this.id++\n return {\n ClOrdID: `Cli${id}`,\n Account: this.account,\n Side: side,\n Price: price,\n OrdType: OrdType.Limit,\n OrderQtyData: {\n OrderQty: qty\n },\n Instrument: {\n Symbol: symbol,\n SecurityID: '459200101',\n SecurityIDSource: SecurityIDSource.IsinNumber\n },\n TimeInForce: TimeInForce.GoodTillCancelGtc\n } as INewOrderSingle\n }\n\n public fillOrder (order: INewOrderSingle): IExecutionReport {\n const id: number = this.execId++\n return {\n ClOrdID: order.ClOrdID,\n OrdType: order.OrdType,\n TransactTime: new Date(),\n AvgPx: order.Price,\n LeavesQty: 0,\n LastPx: order.Price,\n ExecType: ExecType.OrderStatus,\n OrdStatus: OrdStatus.Filled,\n ExecID: `exec${id}`,\n Side: order.Side,\n Price: order.Price,\n OrderQtyData: {\n OrderQty: order?.OrderQtyData?.OrderQty\n },\n Instrument: {\n Symbol: order?.Instrument?.Symbol,\n SecurityID: order?.Instrument?.SecurityID,\n SecurityIDSource: SecurityIDSource.IsinNumber\n }\n } as IExecutionReport\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"app.js","sourceRoot":"","sources":["../../../../src/sample/tcp/qf-md/app.ts"],"names":[],"mappings":";;AAAA,4BAAyB;AAEzB,2CAAsC;AACtC,2CAAsC;AAEtC,8CAAiE;AAEjE,MAAM,WAAY,SAAQ,yBAAe;IACvC;QACE,KAAK,CACH,uCAAuC,EACvC,sCAAsC,CAAC,CAAA;IAC3C,CAAC;IAEkB,WAAW,CAAE,MAAoB;QAClD,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,WAAW,CAAC,CAAA;QACxD,OAAO;YACL,WAAW,EAAE,CAAC,aAA2B,EAAE,EAAE,CAAC,WAAW;gBACvD,CAAC,CAAC,IAAI,oBAAQ,CAAC,aAAa,CAAC;gBAC7B,CAAC,CAAC,IAAI,oBAAQ,CAAC,aAAa,CAAC;SACf,CAAA;IACpB,CAAC;CACF;AAED,MAAM,CAAC,GAAG,IAAI,WAAW,EAAE,CAAA;AAC3B,CAAC,CAAC,IAAI,EAAE,CAAA","sourcesContent":["import 'reflect-metadata'\n\nimport { MDClient } from './md-client'\nimport { MDServer } from './md-server'\nimport { IJsFixConfig } from '../../../config'\nimport { EngineFactory, SessionLauncher } from '../../../runtime'\n\nclass AppLauncher extends SessionLauncher {\n public constructor () {\n super(\n 'data/session/test-qf44-initiator.json',\n 'data/session/test-qf44-acceptor.json')\n }\n\n protected override makeFactory (config: IJsFixConfig): EngineFactory {\n const isInitiator = this.isInitiator(config.description)\n return {\n makeSession: (sessionConfig: IJsFixConfig) => isInitiator\n ? new MDClient(sessionConfig)\n : new MDServer(sessionConfig)\n } as EngineFactory\n }\n}\n\nconst l = new AppLauncher()\nl.exec()\n"]}
1
+ {"version":3,"file":"app.js","sourceRoot":"","sources":["../../../../src/sample/tcp/qf-md/app.ts"],"names":[],"mappings":";;AAAA,4BAAyB;AAEzB,2CAAsC;AACtC,2CAAsC;AAEtC,8CAAiE;AAEjE,MAAM,WAAY,SAAQ,yBAAe;IACvC;QACE,KAAK,CACH,uCAAuC,EACvC,sCAAsC,CAAC,CAAA;IAC3C,CAAC;IAEkB,WAAW,CAAE,MAAoB;QAClD,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,WAAW,CAAC,CAAA;QACxD,OAAO;YACL,WAAW,EAAE,CAAC,aAA2B,EAAE,EAAE,CAAC,WAAW;gBACvD,CAAC,CAAC,IAAI,oBAAQ,CAAC,aAAa,CAAC;gBAC7B,CAAC,CAAC,IAAI,oBAAQ,CAAC,aAAa,CAAC;SAChC,CAAA;IACH,CAAC;CACF;AAED,MAAM,CAAC,GAAG,IAAI,WAAW,EAAE,CAAA;AAC3B,CAAC,CAAC,IAAI,EAAE,CAAA","sourcesContent":["import 'reflect-metadata'\n\nimport { MDClient } from './md-client'\nimport { MDServer } from './md-server'\nimport { IJsFixConfig } from '../../../config'\nimport { EngineFactory, SessionLauncher } from '../../../runtime'\n\nclass AppLauncher extends SessionLauncher {\n public constructor () {\n super(\n 'data/session/test-qf44-initiator.json',\n 'data/session/test-qf44-acceptor.json')\n }\n\n protected override makeFactory (config: IJsFixConfig): EngineFactory {\n const isInitiator = this.isInitiator(config.description)\n return {\n makeSession: (sessionConfig: IJsFixConfig) => isInitiator\n ? new MDClient(sessionConfig)\n : new MDServer(sessionConfig)\n }\n }\n}\n\nconst l = new AppLauncher()\nl.exec()\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"app.js","sourceRoot":"","sources":["../../../../src/sample/tcp/skeleton/app.ts"],"names":[],"mappings":";;AAAA,4BAAyB;AAEzB,8CAAiE;AACjE,yDAAoD;AAGpD,MAAM,WAAY,SAAQ,yBAAe;IACvC;QACE,KAAK,CACH,kCAAkC,EAClC,iCAAiC,CAAC,CAAA;IACtC,CAAC;IAEkB,WAAW,CAAE,MAAoB;QAClD,OAAO;YACL,WAAW,EAAE,CAAC,aAA2B,EAAE,EAAE,CAAC,IAAI,kCAAe,CAAC,aAAa,EAAE,EAAE,EAAE,KAAK,CAAC;SAC3E,CAAA;IACpB,CAAC;CACF;AAED,MAAM,CAAC,GAAG,IAAI,WAAW,EAAE,CAAA;AAC3B,CAAC,CAAC,IAAI,EAAE,CAAA","sourcesContent":["import 'reflect-metadata'\n\nimport { SessionLauncher, EngineFactory } from '../../../runtime'\nimport { SkeletonSession } from './skeleton-session'\nimport { IJsFixConfig } from '../../../config'\n\nclass AppLauncher extends SessionLauncher {\n public constructor () {\n super(\n 'data/session/test-initiator.json',\n 'data/session/test-acceptor.json')\n }\n\n protected override makeFactory (config: IJsFixConfig): EngineFactory {\n return {\n makeSession: (sessionConfig: IJsFixConfig) => new SkeletonSession(sessionConfig, 45, false)\n } as EngineFactory\n }\n}\n\nconst l = new AppLauncher()\nl.exec()\n"]}
1
+ {"version":3,"file":"app.js","sourceRoot":"","sources":["../../../../src/sample/tcp/skeleton/app.ts"],"names":[],"mappings":";;AAAA,4BAAyB;AAEzB,8CAAiE;AACjE,yDAAoD;AAGpD,MAAM,WAAY,SAAQ,yBAAe;IACvC;QACE,KAAK,CACH,kCAAkC,EAClC,iCAAiC,CAAC,CAAA;IACtC,CAAC;IAEkB,WAAW,CAAE,MAAoB;QAClD,OAAO;YACL,WAAW,EAAE,CAAC,aAA2B,EAAE,EAAE,CAAC,IAAI,kCAAe,CAAC,aAAa,EAAE,EAAE,EAAE,KAAK,CAAC;SAC5F,CAAA;IACH,CAAC;CACF;AAED,MAAM,CAAC,GAAG,IAAI,WAAW,EAAE,CAAA;AAC3B,CAAC,CAAC,IAAI,EAAE,CAAA","sourcesContent":["import 'reflect-metadata'\n\nimport { SessionLauncher, EngineFactory } from '../../../runtime'\nimport { SkeletonSession } from './skeleton-session'\nimport { IJsFixConfig } from '../../../config'\n\nclass AppLauncher extends SessionLauncher {\n public constructor () {\n super(\n 'data/session/test-initiator.json',\n 'data/session/test-acceptor.json')\n }\n\n protected override makeFactory (config: IJsFixConfig): EngineFactory {\n return {\n makeSession: (sessionConfig: IJsFixConfig) => new SkeletonSession(sessionConfig, 45, false)\n }\n }\n}\n\nconst l = new AppLauncher()\nl.exec()\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"app-launcher.js","sourceRoot":"","sources":["../../../../src/sample/tcp/trade-capture/app-launcher.ts"],"names":[],"mappings":";;;AAAA,8CAAiE;AAEjE,iEAA2D;AAC3D,iEAA2D;AAE3D,MAAa,WAAY,SAAQ,yBAAe;IAC9C,YAAoB,SAAiB,kCAAkC,EACrE,SAAiB,iCAAiC;QAClD,KAAK,CACH,MAAM,EACN,MAAM,CAAC,CAAA;IACX,CAAC;IAEkB,WAAW,CAAE,MAAoB;QAClD,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,WAAW,CAAC,CAAA;QACxD,OAAO;YACL,WAAW,EAAE,CAAC,aAA2B,EAAE,EAAE,CAAC,WAAW;gBACvD,CAAC,CAAC,IAAI,yCAAkB,CAAC,aAAa,CAAC;gBACvC,CAAC,CAAC,IAAI,yCAAkB,CAAC,aAAa,CAAC;SACzB,CAAA;IACpB,CAAC;CACF;AAhBD,kCAgBC","sourcesContent":["import { EngineFactory, SessionLauncher } from '../../../runtime'\nimport { IJsFixConfig } from '../../../config'\nimport { TradeCaptureClient } from './trade-capture-client'\nimport { TradeCaptureServer } from './trade-capture-server'\n\nexport class AppLauncher extends SessionLauncher {\n public constructor (client: string = 'data/session/test-initiator.json',\n server: string = 'data/session/test-acceptor.json') {\n super(\n client,\n server)\n }\n\n protected override makeFactory (config: IJsFixConfig): EngineFactory {\n const isInitiator = this.isInitiator(config.description)\n return {\n makeSession: (sessionConfig: IJsFixConfig) => isInitiator\n ? new TradeCaptureClient(sessionConfig)\n : new TradeCaptureServer(sessionConfig)\n } as EngineFactory\n }\n}\n"]}
1
+ {"version":3,"file":"app-launcher.js","sourceRoot":"","sources":["../../../../src/sample/tcp/trade-capture/app-launcher.ts"],"names":[],"mappings":";;;AAAA,8CAAiE;AAEjE,iEAA2D;AAC3D,iEAA2D;AAE3D,MAAa,WAAY,SAAQ,yBAAe;IAC9C,YAAoB,SAAiB,kCAAkC,EACrE,SAAiB,iCAAiC;QAClD,KAAK,CACH,MAAM,EACN,MAAM,CAAC,CAAA;IACX,CAAC;IAEkB,WAAW,CAAE,MAAoB;QAClD,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,WAAW,CAAC,CAAA;QACxD,OAAO;YACL,WAAW,EAAE,CAAC,aAA2B,EAAE,EAAE,CAAC,WAAW;gBACvD,CAAC,CAAC,IAAI,yCAAkB,CAAC,aAAa,CAAC;gBACvC,CAAC,CAAC,IAAI,yCAAkB,CAAC,aAAa,CAAC;SAC1C,CAAA;IACH,CAAC;CACF;AAhBD,kCAgBC","sourcesContent":["import { EngineFactory, SessionLauncher } from '../../../runtime'\nimport { IJsFixConfig } from '../../../config'\nimport { TradeCaptureClient } from './trade-capture-client'\nimport { TradeCaptureServer } from './trade-capture-server'\n\nexport class AppLauncher extends SessionLauncher {\n public constructor (client: string = 'data/session/test-initiator.json',\n server: string = 'data/session/test-acceptor.json') {\n super(\n client,\n server)\n }\n\n protected override makeFactory (config: IJsFixConfig): EngineFactory {\n const isInitiator = this.isInitiator(config.description)\n return {\n makeSession: (sessionConfig: IJsFixConfig) => isInitiator\n ? new TradeCaptureClient(sessionConfig)\n : new TradeCaptureServer(sessionConfig)\n }\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"fix-msg-memory-store.js","sourceRoot":"","sources":["../../src/store/fix-msg-memory-store.ts"],"names":[],"mappings":"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","sourcesContent":["import { IFixMsgStore } from './fix-msg-store'\nimport { IJsFixConfig, IJsFixLogger } from '../config'\nimport { IFixMsgStoreRecord } from './fix-msg-store-record'\nimport { MsgType } from '../types'\nimport { IFixMsgStoreState } from './fix-msg-store-state'\n\nexport class FixMsgMemoryStore implements IFixMsgStore {\n protected readonly logger: IJsFixLogger\n public heartbeat: boolean = true\n private sortedBySeqNum: IFixMsgStoreRecord[] = []\n private readonly excluded: Map<string, boolean> = new Map<string, boolean>()\n public length: number = 0\n private readonly sessionMessages: string[] = [\n MsgType.Logon,\n MsgType.Logout,\n MsgType.ResendRequest,\n MsgType.Heartbeat,\n MsgType.TestRequest,\n MsgType.SequenceReset\n ]\n\n public constructor (public readonly id: string, public readonly config: IJsFixConfig) {\n this.logger = config.logFactory.logger(`${this.id}:FixMsgMemoryStore`)\n this.setExcMsgType([])\n }\n\n public static search (ar: IFixMsgStoreRecord[], target: number, isDate?: boolean): number {\n let m: number = 0\n let n: number = ar.length - 1\n while (m <= n) {\n const k: number = (n + m) >> 1\n const check: number = isDate ? ar[k].timestamp.getDate() : ar[k].seqNum\n const cmp: number = target - check\n if (cmp > 0) {\n m = k + 1\n } else if (cmp < 0) {\n n = k - 1\n } else {\n return k\n }\n }\n return -m - 1\n }\n\n public async getMsgType (msgType: string): Promise<IFixMsgStoreRecord[]> {\n return await new Promise((resolve, reject: any) => {\n const data = this.sortedBySeqNum\n if (data === null) reject(new Error('no store'))\n const required = data.filter(x => x.msgType === msgType)\n resolve(required)\n })\n }\n\n private getIndex (seq: number): number {\n const arr = this.sortedBySeqNum\n let index = FixMsgMemoryStore.search(arr, seq)\n if (index < 0) {\n index = -(index + 1)\n }\n return index\n }\n\n private bounded (fromIdx: number, toIdx: number): boolean {\n const arr = this.sortedBySeqNum\n return fromIdx >= 0 && fromIdx <= arr.length && toIdx >= fromIdx && toIdx <= arr.length\n }\n\n public async get (from: number): Promise<IFixMsgStoreRecord> {\n return await new Promise((resolve, reject) => {\n this.getSeqNumRange(from, from).then(res => {\n if (res.length > 0) {\n const record = res[0].clone()\n resolve(record)\n } else {\n reject(new Error(`${from} not in store`))\n }\n }).catch(e => {\n reject(e)\n })\n })\n }\n\n public async getSeqNumRange (from: number, to?: number): Promise<IFixMsgStoreRecord[]> {\n return await new Promise((resolve, reject) => {\n to = to ?? 0\n const arr = this.sortedBySeqNum\n if (from < 0) reject(new Error(`illegal from ${from}`))\n if (to < 0) reject(new Error(`illegal to ${to}`))\n const fromIdx = this.getIndex(from)\n const toEnd = to === 0 || isNaN(to)\n const toIdx = toEnd ? arr.length - 1 : this.getIndex(to)\n if (this.bounded(fromIdx, toIdx)) {\n resolve(arr.slice(fromIdx, toIdx + 1))\n } else {\n reject(new Error(`incorrect bounds from=${from}, fromIdx=${fromIdx}, to=${to}, toIdx=${toIdx}, length=${arr.length}`))\n }\n })\n }\n\n private buildState (): IFixMsgStoreState {\n const arr = this.sortedBySeqNum\n return {\n firstSeq: arr.length > 0 ? arr[0].seqNum : 0,\n lastSeq: arr.length > 0 ? arr[arr.length - 1].seqNum : 0,\n id: this.id,\n length: arr.length\n } as IFixMsgStoreState\n }\n\n public async getState (): Promise<IFixMsgStoreState> {\n return await new Promise((resolve, reject) => {\n try {\n resolve(this.buildState())\n } catch (e) {\n reject(e)\n }\n })\n }\n\n public async clear (): Promise<IFixMsgStoreState> {\n this.sortedBySeqNum = []\n return await new Promise((resolve, reject) => {\n try {\n resolve(this.buildState())\n } catch (e) {\n reject(e)\n }\n })\n }\n\n public async put (record: IFixMsgStoreRecord): Promise<IFixMsgStoreState> {\n return await new Promise((resolve, reject) => {\n if (this.excluded.has(record.msgType)) {\n resolve(this.buildState())\n } else {\n const arr = this.sortedBySeqNum\n const idx = FixMsgMemoryStore.search(arr, record.seqNum)\n if (idx >= 0) { // seen this before\n reject(new Error(`this seqNum ${record.seqNum} already in store`))\n }\n arr.splice(-idx, 0, record)\n this.length = arr.length\n resolve(this.buildState())\n }\n })\n }\n\n public setExcMsgType (exclude: string[]): void {\n this.excluded.clear()\n this.excludeRange(this.sessionMessages)\n this.excludeRange(exclude)\n }\n\n private excludeRange (exclude: string[]): void {\n exclude.forEach(s => {\n this.excluded.set(s, true)\n })\n }\n\n async exists (seqNum: number): Promise<boolean> {\n return await new Promise((resolve, reject) => {\n try {\n const arr = this.sortedBySeqNum\n const index = FixMsgMemoryStore.search(arr, seqNum)\n resolve(index >= 0)\n } catch (e) {\n reject(e)\n }\n })\n }\n}\n"]}
1
+ {"version":3,"file":"fix-msg-memory-store.js","sourceRoot":"","sources":["../../src/store/fix-msg-memory-store.ts"],"names":[],"mappings":"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","sourcesContent":["import { IFixMsgStore } from './fix-msg-store'\nimport { IJsFixConfig, IJsFixLogger } from '../config'\nimport { IFixMsgStoreRecord } from './fix-msg-store-record'\nimport { MsgType } from '../types'\nimport { IFixMsgStoreState } from './fix-msg-store-state'\n\nexport class FixMsgMemoryStore implements IFixMsgStore {\n protected readonly logger: IJsFixLogger\n public heartbeat: boolean = true\n private sortedBySeqNum: IFixMsgStoreRecord[] = []\n private readonly excluded: Map<string, boolean> = new Map<string, boolean>()\n public length: number = 0\n private readonly sessionMessages: string[] = [\n MsgType.Logon,\n MsgType.Logout,\n MsgType.ResendRequest,\n MsgType.Heartbeat,\n MsgType.TestRequest,\n MsgType.SequenceReset\n ]\n\n public constructor (public readonly id: string, public readonly config: IJsFixConfig) {\n this.logger = config.logFactory.logger(`${this.id}:FixMsgMemoryStore`)\n this.setExcMsgType([])\n }\n\n public static search (ar: IFixMsgStoreRecord[], target: number, isDate?: boolean): number {\n let m: number = 0\n let n: number = ar.length - 1\n while (m <= n) {\n const k: number = (n + m) >> 1\n const check: number = isDate ? ar[k].timestamp.getDate() : ar[k].seqNum\n const cmp: number = target - check\n if (cmp > 0) {\n m = k + 1\n } else if (cmp < 0) {\n n = k - 1\n } else {\n return k\n }\n }\n return -m - 1\n }\n\n public async getMsgType (msgType: string): Promise<IFixMsgStoreRecord[]> {\n return await new Promise((resolve, reject: any) => {\n const data = this.sortedBySeqNum\n if (data === null) reject(new Error('no store'))\n const required = data.filter(x => x.msgType === msgType)\n resolve(required)\n })\n }\n\n private getIndex (seq: number): number {\n const arr = this.sortedBySeqNum\n let index = FixMsgMemoryStore.search(arr, seq)\n if (index < 0) {\n index = -(index + 1)\n }\n return index\n }\n\n private bounded (fromIdx: number, toIdx: number): boolean {\n const arr = this.sortedBySeqNum\n return fromIdx >= 0 && fromIdx <= arr.length && toIdx >= fromIdx && toIdx <= arr.length\n }\n\n public async get (from: number): Promise<IFixMsgStoreRecord> {\n return await new Promise((resolve, reject) => {\n this.getSeqNumRange(from, from).then(res => {\n if (res.length > 0) {\n const record = res[0].clone()\n resolve(record)\n } else {\n reject(new Error(`${from} not in store`))\n }\n }).catch(e => {\n reject(e)\n })\n })\n }\n\n public async getSeqNumRange (from: number, to?: number): Promise<IFixMsgStoreRecord[]> {\n return await new Promise((resolve, reject) => {\n to = to ?? 0\n const arr = this.sortedBySeqNum\n if (from < 0) reject(new Error(`illegal from ${from}`))\n if (to < 0) reject(new Error(`illegal to ${to}`))\n const fromIdx = this.getIndex(from)\n const toEnd = to === 0 || isNaN(to)\n const toIdx = toEnd ? arr.length - 1 : this.getIndex(to)\n if (this.bounded(fromIdx, toIdx)) {\n resolve(arr.slice(fromIdx, toIdx + 1))\n } else {\n reject(new Error(`incorrect bounds from=${from}, fromIdx=${fromIdx}, to=${to}, toIdx=${toIdx}, length=${arr.length}`))\n }\n })\n }\n\n private buildState (): IFixMsgStoreState {\n const arr = this.sortedBySeqNum\n return {\n firstSeq: arr.length > 0 ? arr[0].seqNum : 0,\n lastSeq: arr.length > 0 ? arr[arr.length - 1].seqNum : 0,\n id: this.id,\n length: arr.length\n }\n }\n\n public async getState (): Promise<IFixMsgStoreState> {\n return await new Promise((resolve, reject) => {\n try {\n resolve(this.buildState())\n } catch (e) {\n reject(e)\n }\n })\n }\n\n public async clear (): Promise<IFixMsgStoreState> {\n this.sortedBySeqNum = []\n return await new Promise((resolve, reject) => {\n try {\n resolve(this.buildState())\n } catch (e) {\n reject(e)\n }\n })\n }\n\n public async put (record: IFixMsgStoreRecord): Promise<IFixMsgStoreState> {\n return await new Promise((resolve, reject) => {\n if (this.excluded.has(record.msgType)) {\n resolve(this.buildState())\n } else {\n const arr = this.sortedBySeqNum\n const idx = FixMsgMemoryStore.search(arr, record.seqNum)\n if (idx >= 0) { // seen this before\n reject(new Error(`this seqNum ${record.seqNum} already in store`))\n }\n arr.splice(-idx, 0, record)\n this.length = arr.length\n resolve(this.buildState())\n }\n })\n }\n\n public setExcMsgType (exclude: string[]): void {\n this.excluded.clear()\n this.excludeRange(this.sessionMessages)\n this.excludeRange(exclude)\n }\n\n private excludeRange (exclude: string[]): void {\n exclude.forEach(s => {\n this.excluded.set(s, true)\n })\n }\n\n async exists (seqNum: number): Promise<boolean> {\n return await new Promise((resolve, reject) => {\n try {\n const arr = this.sortedBySeqNum\n const index = FixMsgMemoryStore.search(arr, seqNum)\n resolve(index >= 0)\n } catch (e) {\n reject(e)\n }\n })\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"fixml-session-msg-factory.js","sourceRoot":"","sources":["../../../src/transport/fixml/fixml-session-msg-factory.ts"],"names":[],"mappings":";;;AAEA,uCAAqC;AACrC,4EAAoF;AAEpF,uDAM+B;AAE/B,MAAa,sBAAuB,SAAQ,0CAAkB;IAC5D,YAAsB,WAAgC,EAAE,UAAgC,IAAI;QAC1F,KAAK,CAAC,WAAW,EAAE,OAAO,CAAC,CAAA;QADP,gBAAW,GAAX,WAAW,CAAqB;IAEtD,CAAC;IAEM,KAAK,CAAE,gBAAwB,EAAE,EAAE,aAAsB,KAAK;QACnE,OAAO,IAAI,CAAC,UAAU,CAAC,aAAa,EAAE,UAAU,CAAC,CAAA;IACnD,CAAC;IAEM,MAAM,CAAE,OAAe,EAAE,IAAY;QAC1C,OAAO,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,OAAO,KAAK,SAAS,CAAC,CAAA;IACzD,CAAC;IAEM,MAAM,CAAE,OAAe,EAAE,SAAiB,CAAC,EAAE,OAAa,IAAI,IAAI,EAAE,EAAE,YAAuC;QAClH,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,CAAA;QACpC,MAAM,CAAC,GAAoB;YACzB,YAAY,EAAE,WAAW,CAAC,YAAY;YACtC,YAAY,EAAE,WAAW,CAAC,YAAY;YACtC,WAAW,EAAE,WAAW,CAAC,WAAW;YACpC,WAAW,EAAE,WAAW,CAAC,WAAW;SAClB,CAAA;QACpB,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,gBAAgB,CAAC,CAAA;IACzC,CAAC;IAEO,UAAU,CAAE,aAAqB,EAAE,UAAmB;QAC5D,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,CAAA;QACpC,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,MAAM,CAAC,GAAiB,gBACtB,QAAQ,EAAE,WAAW,CAAC,QAAQ,EAC9B,QAAQ,EAAE,WAAW,CAAC,QAAQ,EAC9B,aAAa,EAAE,aAAa,EAC5B,eAAe,EAAE,4BAAe,CAAC,SAAS,IAEvC,WAAW,CAAC,KAAK,CACL,CAAA;YACjB,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,eAAO,CAAC,KAAK,CAAC,CAAA;QACtC,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,GAAkB;gBACvB,QAAQ,EAAE,WAAW,CAAC,QAAQ;gBAC9B,aAAa,EAAE,aAAa;gBAC5B,UAAU,EAAE,uBAAU,CAAC,QAAQ;aACf,CAAA;YAClB,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,eAAO,CAAC,KAAK,CAAC,CAAA;QACtC,CAAC;IACH,CAAC;IAEO,WAAW,CAAE,aAAqB,EAAE,UAAmB;QAC7D,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,MAAM,CAAC,GAAiB;gBACtB,QAAQ,EAAE,IAAI,CAAC,WAAW,CAAC,QAAQ;gBACnC,aAAa,EAAE,aAAa;gBAC5B,eAAe,EAAE,4BAAe,CAAC,UAAU;aAC5B,CAAA;YACjB,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,eAAO,CAAC,MAAM,CAAC,CAAA;QACvC,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,GAAkB;gBACvB,QAAQ,EAAE,IAAI,CAAC,WAAW,CAAC,QAAQ;gBACnC,aAAa,EAAE,aAAa;gBAC5B,UAAU,EAAE,uBAAU,CAAC,WAAW;aAClB,CAAA;YAClB,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,eAAO,CAAC,MAAM,CAAC,CAAA;QACvC,CAAC;IACH,CAAC;CACF;AA/DD,wDA+DC","sourcesContent":["import { ISessionDescription } from '../session/session-description'\nimport { ILooseObject } from '../../collections/collection'\nimport { MsgType } from '../../types'\nimport { ASessionMsgFactory, ObjectMutator } from '../session/a-session-msg-factory'\n\nimport {\n IStandardHeader,\n IUserRequest,\n IUserResponse,\n UserRequestType,\n UserStatus\n} from '../../types/FIXML50SP2'\n\nexport class FixmlSessionMsgFactory extends ASessionMsgFactory {\n constructor (readonly description: ISessionDescription, mutator: ObjectMutator | null = null) {\n super(description, mutator)\n }\n\n public logon (userRequestId: string = '', isResponse: boolean = false): ILooseObject {\n return this.fixmlLogon(userRequestId, isResponse)\n }\n\n public logout (msgType: string, text: string): ILooseObject {\n return this.fixmlLogout(msgType, msgType !== 'UserReq')\n }\n\n public header (msgType: string, seqNum: number = 0, time: Date = new Date(), overrideData?: Partial<IStandardHeader>): ILooseObject {\n const description = this.description\n const o: IStandardHeader = {\n SenderCompID: description.SenderCompId,\n TargetCompID: description.TargetCompID,\n SenderSubID: description.SenderSubID,\n TargetSubID: description.TargetSubID\n } as IStandardHeader\n return this.mutate(o, 'StandardHeader')\n }\n\n private fixmlLogon (userRequestId: string, isResponse: boolean): ILooseObject {\n const description = this.description\n if (!isResponse) {\n const o: IUserRequest = {\n Username: description.Username,\n Password: description.Password,\n UserRequestID: userRequestId,\n UserRequestType: UserRequestType.LogOnUser,\n // same escape hatch as the ascii factory - see ISessionDescription.Logon\n ...description.Logon\n } as IUserRequest\n return this.mutate(o, MsgType.Logon)\n } else {\n const o: IUserResponse = {\n Username: description.Username,\n UserRequestID: userRequestId,\n UserStatus: UserStatus.LoggedIn\n } as IUserResponse\n return this.mutate(o, MsgType.Logon)\n }\n }\n\n private fixmlLogout (userRequestId: string, isResponse: boolean): ILooseObject {\n if (!isResponse) {\n const o: IUserRequest = {\n Username: this.description.Username,\n UserRequestID: userRequestId,\n UserRequestType: UserRequestType.LogOffUser\n } as IUserRequest\n return this.mutate(o, MsgType.Logout)\n } else {\n const o: IUserResponse = {\n Username: this.description.Username,\n UserRequestID: userRequestId,\n UserStatus: UserStatus.NotLoggedIn\n } as IUserResponse\n return this.mutate(o, MsgType.Logout)\n }\n }\n}\n"]}
1
+ {"version":3,"file":"fixml-session-msg-factory.js","sourceRoot":"","sources":["../../../src/transport/fixml/fixml-session-msg-factory.ts"],"names":[],"mappings":";;;AAEA,uCAAqC;AACrC,4EAAoF;AAEpF,uDAM+B;AAE/B,MAAa,sBAAuB,SAAQ,0CAAkB;IAC5D,YAAsB,WAAgC,EAAE,UAAgC,IAAI;QAC1F,KAAK,CAAC,WAAW,EAAE,OAAO,CAAC,CAAA;QADP,gBAAW,GAAX,WAAW,CAAqB;IAEtD,CAAC;IAEM,KAAK,CAAE,gBAAwB,EAAE,EAAE,aAAsB,KAAK;QACnE,OAAO,IAAI,CAAC,UAAU,CAAC,aAAa,EAAE,UAAU,CAAC,CAAA;IACnD,CAAC;IAEM,MAAM,CAAE,OAAe,EAAE,IAAY;QAC1C,OAAO,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,OAAO,KAAK,SAAS,CAAC,CAAA;IACzD,CAAC;IAEM,MAAM,CAAE,OAAe,EAAE,SAAiB,CAAC,EAAE,OAAa,IAAI,IAAI,EAAE,EAAE,YAAuC;QAClH,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,CAAA;QACpC,MAAM,CAAC,GAAoB;YACzB,YAAY,EAAE,WAAW,CAAC,YAAY;YACtC,YAAY,EAAE,WAAW,CAAC,YAAY;YACtC,WAAW,EAAE,WAAW,CAAC,WAAW;YACpC,WAAW,EAAE,WAAW,CAAC,WAAW;SACrC,CAAA;QACD,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,gBAAgB,CAAC,CAAA;IACzC,CAAC;IAEO,UAAU,CAAE,aAAqB,EAAE,UAAmB;QAC5D,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,CAAA;QACpC,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,MAAM,CAAC,mBACL,QAAQ,EAAE,WAAW,CAAC,QAAQ,EAC9B,QAAQ,EAAE,WAAW,CAAC,QAAQ,EAC9B,aAAa,EAAE,aAAa,EAC5B,eAAe,EAAE,4BAAe,CAAC,SAAS,IAEvC,WAAW,CAAC,KAAK,CACrB,CAAA;YACD,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,eAAO,CAAC,KAAK,CAAC,CAAA;QACtC,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,GAAkB;gBACvB,QAAQ,EAAE,WAAW,CAAC,QAAQ;gBAC9B,aAAa,EAAE,aAAa;gBAC5B,UAAU,EAAE,uBAAU,CAAC,QAAQ;aAChC,CAAA;YACD,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,eAAO,CAAC,KAAK,CAAC,CAAA;QACtC,CAAC;IACH,CAAC;IAEO,WAAW,CAAE,aAAqB,EAAE,UAAmB;QAC7D,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,MAAM,CAAC,GAAiB;gBACtB,QAAQ,EAAE,IAAI,CAAC,WAAW,CAAC,QAAQ;gBACnC,aAAa,EAAE,aAAa;gBAC5B,eAAe,EAAE,4BAAe,CAAC,UAAU;aAC5C,CAAA;YACD,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,eAAO,CAAC,MAAM,CAAC,CAAA;QACvC,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,GAAkB;gBACvB,QAAQ,EAAE,IAAI,CAAC,WAAW,CAAC,QAAQ;gBACnC,aAAa,EAAE,aAAa;gBAC5B,UAAU,EAAE,uBAAU,CAAC,WAAW;aACnC,CAAA;YACD,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,eAAO,CAAC,MAAM,CAAC,CAAA;QACvC,CAAC;IACH,CAAC;CACF;AA/DD,wDA+DC","sourcesContent":["import { ISessionDescription } from '../session/session-description'\nimport { ILooseObject } from '../../collections/collection'\nimport { MsgType } from '../../types'\nimport { ASessionMsgFactory, ObjectMutator } from '../session/a-session-msg-factory'\n\nimport {\n IStandardHeader,\n IUserRequest,\n IUserResponse,\n UserRequestType,\n UserStatus\n} from '../../types/FIXML50SP2'\n\nexport class FixmlSessionMsgFactory extends ASessionMsgFactory {\n constructor (readonly description: ISessionDescription, mutator: ObjectMutator | null = null) {\n super(description, mutator)\n }\n\n public logon (userRequestId: string = '', isResponse: boolean = false): ILooseObject {\n return this.fixmlLogon(userRequestId, isResponse)\n }\n\n public logout (msgType: string, text: string): ILooseObject {\n return this.fixmlLogout(msgType, msgType !== 'UserReq')\n }\n\n public header (msgType: string, seqNum: number = 0, time: Date = new Date(), overrideData?: Partial<IStandardHeader>): ILooseObject {\n const description = this.description\n const o: IStandardHeader = {\n SenderCompID: description.SenderCompId,\n TargetCompID: description.TargetCompID,\n SenderSubID: description.SenderSubID,\n TargetSubID: description.TargetSubID\n }\n return this.mutate(o, 'StandardHeader')\n }\n\n private fixmlLogon (userRequestId: string, isResponse: boolean): ILooseObject {\n const description = this.description\n if (!isResponse) {\n const o: IUserRequest = {\n Username: description.Username,\n Password: description.Password,\n UserRequestID: userRequestId,\n UserRequestType: UserRequestType.LogOnUser,\n // same escape hatch as the ascii factory - see ISessionDescription.Logon\n ...description.Logon\n }\n return this.mutate(o, MsgType.Logon)\n } else {\n const o: IUserResponse = {\n Username: description.Username,\n UserRequestID: userRequestId,\n UserStatus: UserStatus.LoggedIn\n }\n return this.mutate(o, MsgType.Logon)\n }\n }\n\n private fixmlLogout (userRequestId: string, isResponse: boolean): ILooseObject {\n if (!isResponse) {\n const o: IUserRequest = {\n Username: this.description.Username,\n UserRequestID: userRequestId,\n UserRequestType: UserRequestType.LogOffUser\n }\n return this.mutate(o, MsgType.Logout)\n } else {\n const o: IUserResponse = {\n Username: this.description.Username,\n UserRequestID: userRequestId,\n UserStatus: UserStatus.NotLoggedIn\n }\n return this.mutate(o, MsgType.Logout)\n }\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"clone-session-description.js","sourceRoot":"","sources":["../../../src/transport/session/clone-session-description.ts"],"names":[],"mappings":";;AAyBA,0DAOC;AAMD,8BAEC;AAfD,SAAgB,uBAAuB,CACrC,WAAgC,EAChC,SAA0C;IAC1C,uCACK,WAAW,GACX,CAAC,SAAS,aAAT,SAAS,cAAT,SAAS,GAAI,EAAE,CAAC,EACrB;AACH,CAAC;AAMD,SAAgB,SAAS,CAAE,WAAgC;IACzD,OAAO,WAAwC,CAAA;AACjD,CAAC","sourcesContent":["import { IDynamicSessionParams, ISessionDescription } from './session-description'\n\n/**\n * A session description with the readonly modifiers stripped. The description is\n * immutable by design - it is loaded once from JSON and shared by everything in the\n * session - but an acceptor running in wildcard mode has to write the peer's\n * SenderCompID into its own copy once the Logon arrives. Cast through this type so\n * the (deliberately rare) mutation is explicit at every call site.\n */\nexport type MutableSessionDescription = {\n -readonly [K in keyof ISessionDescription]: ISessionDescription[K]\n}\n\n/**\n * Shallow clone a session description, optionally overriding identity fields.\n *\n * Each connection accepted by a FIX acceptor needs its own description: the\n * SessionId (and therefore the message store), the outbound header comp ids and the\n * session registry key are all derived from it. Sharing one description across\n * concurrent sessions makes every client collide on the same store.\n *\n * `application` and `store` are shared by reference - they are read only\n * configuration (host, port, dictionary, store directory) common to every session\n * on the listener.\n */\nexport function cloneSessionDescription (\n description: ISessionDescription,\n overrides?: Partial<IDynamicSessionParams>): ISessionDescription {\n return {\n ...description,\n ...(overrides ?? {})\n }\n}\n\n/**\n * Make a description writable. Use only where the FIX protocol itself forces a\n * late binding - i.e. wildcard TargetCompID resolved from the peer's Logon.\n */\nexport function asMutable (description: ISessionDescription): MutableSessionDescription {\n return description as MutableSessionDescription\n}\n"]}
1
+ {"version":3,"file":"clone-session-description.js","sourceRoot":"","sources":["../../../src/transport/session/clone-session-description.ts"],"names":[],"mappings":";;AAyBA,0DAOC;AAMD,8BAEC;AAfD,SAAgB,uBAAuB,CACrC,WAAgC,EAChC,SAA0C;IAC1C,uCACK,WAAW,GACX,CAAC,SAAS,aAAT,SAAS,cAAT,SAAS,GAAI,EAAE,CAAC,EACrB;AACH,CAAC;AAMD,SAAgB,SAAS,CAAE,WAAgC;IACzD,OAAO,WAAW,CAAA;AACpB,CAAC","sourcesContent":["import { IDynamicSessionParams, ISessionDescription } from './session-description'\n\n/**\n * A session description with the readonly modifiers stripped. The description is\n * immutable by design - it is loaded once from JSON and shared by everything in the\n * session - but an acceptor running in wildcard mode has to write the peer's\n * SenderCompID into its own copy once the Logon arrives. Cast through this type so\n * the (deliberately rare) mutation is explicit at every call site.\n */\nexport type MutableSessionDescription = {\n -readonly [K in keyof ISessionDescription]: ISessionDescription[K]\n}\n\n/**\n * Shallow clone a session description, optionally overriding identity fields.\n *\n * Each connection accepted by a FIX acceptor needs its own description: the\n * SessionId (and therefore the message store), the outbound header comp ids and the\n * session registry key are all derived from it. Sharing one description across\n * concurrent sessions makes every client collide on the same store.\n *\n * `application` and `store` are shared by reference - they are read only\n * configuration (host, port, dictionary, store directory) common to every session\n * on the listener.\n */\nexport function cloneSessionDescription (\n description: ISessionDescription,\n overrides?: Partial<IDynamicSessionParams>): ISessionDescription {\n return {\n ...description,\n ...(overrides ?? {})\n }\n}\n\n/**\n * Make a description writable. Use only where the FIX protocol itself forces a\n * late binding - i.e. wildcard TargetCompID resolved from the peer's Logon.\n */\nexport function asMutable (description: ISessionDescription): MutableSessionDescription {\n return description\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"tls-options-factory.js","sourceRoot":"","sources":["../../../src/transport/tcp/tls-options-factory.ts"],"names":[],"mappings":"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","sourcesContent":["import { ConnectionOptions, TlsOptions } from 'tls'\nimport { ITlsOptions } from './tls-options'\nimport { ITcpTransportDescription } from './tcp-transport-description'\nconst path = require('path')\nconst fs = require('fs')\n\nexport class TlsOptionsFactory {\n /*\n session descriptions are routinely hand written json, where a boolean flag is easily\n quoted by mistake i.e. \"rejectUnauthorized\": \"false\". node treats that string as truthy\n and so does exactly the opposite of what was intended, silently. accept the two string\n spellings rather than inverting the caller's meaning - anything else is left alone so it\n shows up as an obviously wrong value rather than being guessed at.\n */\n static asBoolean (value: any): any {\n if (typeof value === 'string') {\n const lowered = value.toLowerCase()\n if (lowered === 'true') return true\n if (lowered === 'false') return false\n }\n return value\n }\n\n static read (filePath: string): string {\n const root: string = path.join(__dirname, '../../../')\n const fullPath = path.join(root, filePath)\n return fs.readFileSync(fullPath,\n {\n encoding: 'utf8', flag: 'r'\n })\n }\n\n static getTlsOptions (tls: ITlsOptions): TlsOptions | null {\n let tlsOptions: TlsOptions | null = null\n if (tls) {\n tlsOptions = {\n requestCert: TlsOptionsFactory.asBoolean(tls.requestCert),\n rejectUnauthorized: TlsOptionsFactory.asBoolean(tls.rejectUnauthorized)\n } as TlsOptions\n\n if (tls.key) {\n tlsOptions.key = TlsOptionsFactory.read(tls.key)\n tlsOptions.cert = tls?.cert ? TlsOptionsFactory.read(tls?.cert) : undefined\n }\n\n if (tls.ca && tls.ca.length > 0) {\n tlsOptions.ca = tls.ca.map(i => TlsOptionsFactory.read(i))\n }\n\n if (tls.nodeTlsServerOptions) {\n tlsOptions = {\n ...tlsOptions,\n ...tls.nodeTlsServerOptions\n }\n }\n }\n return tlsOptions\n }\n\n static getTlsConnectionOptions (tcp: ITcpTransportDescription): ConnectionOptions | null {\n let connectionOptions: ConnectionOptions | null = null\n const tls = tcp.tls\n if (tls) {\n connectionOptions = {\n port: tcp.port,\n host: tcp.host\n } as ConnectionOptions\n if (tls.key) {\n connectionOptions.key = TlsOptionsFactory.read(tcp.tls?.key ?? '')\n connectionOptions.cert = tcp.tls?.cert ? TlsOptionsFactory.read(tcp?.tls?.cert) : undefined\n }\n if (tcp.tls.ca && tcp.tls.ca.length > 0) {\n connectionOptions.ca = tcp.tls.ca.map(i => TlsOptionsFactory.read(i))\n }\n if (tcp.tls.timeout) {\n connectionOptions.timeout = tcp.tls.timeout\n }\n if (tcp.tls.sessionTimeout) {\n connectionOptions.sessionTimeout = tcp.tls.sessionTimeout\n }\n // https://github.com/TimelordUK/jspurefix/issues/151 - ITlsOptions declares these and\n // getTlsOptions honours them on the server path, so map them here too rather than making\n // nodeTlsConnectionOptions the only spelling that works for an initiator. Applied before\n // the spread below so an explicit nodeTlsConnectionOptions value still wins.\n if (tls.requestCert !== undefined) {\n connectionOptions.requestCert = TlsOptionsFactory.asBoolean(tls.requestCert)\n }\n if (tls.rejectUnauthorized !== undefined) {\n connectionOptions.rejectUnauthorized = TlsOptionsFactory.asBoolean(tls.rejectUnauthorized)\n }\n if (tls.nodeTlsConnectionOptions) {\n connectionOptions = {\n ...connectionOptions,\n ...tls.nodeTlsConnectionOptions\n }\n if (connectionOptions.rejectUnauthorized !== undefined) {\n connectionOptions.rejectUnauthorized = TlsOptionsFactory.asBoolean(connectionOptions.rejectUnauthorized)\n }\n if (connectionOptions.requestCert !== undefined) {\n connectionOptions.requestCert = TlsOptionsFactory.asBoolean(connectionOptions.requestCert)\n }\n }\n }\n return connectionOptions\n }\n}\n"]}
1
+ {"version":3,"file":"tls-options-factory.js","sourceRoot":"","sources":["../../../src/transport/tcp/tls-options-factory.ts"],"names":[],"mappings":"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","sourcesContent":["import { ConnectionOptions, TlsOptions } from 'tls'\nimport { ITlsOptions } from './tls-options'\nimport { ITcpTransportDescription } from './tcp-transport-description'\nconst path = require('path')\nconst fs = require('fs')\n\nexport class TlsOptionsFactory {\n /*\n session descriptions are routinely hand written json, where a boolean flag is easily\n quoted by mistake i.e. \"rejectUnauthorized\": \"false\". node treats that string as truthy\n and so does exactly the opposite of what was intended, silently. accept the two string\n spellings rather than inverting the caller's meaning - anything else is left alone so it\n shows up as an obviously wrong value rather than being guessed at.\n */\n static asBoolean (value: any): any {\n if (typeof value === 'string') {\n const lowered = value.toLowerCase()\n if (lowered === 'true') return true\n if (lowered === 'false') return false\n }\n return value\n }\n\n static read (filePath: string): string {\n const root: string = path.join(__dirname, '../../../')\n const fullPath = path.join(root, filePath)\n return fs.readFileSync(fullPath,\n {\n encoding: 'utf8', flag: 'r'\n })\n }\n\n static getTlsOptions (tls: ITlsOptions): TlsOptions | null {\n let tlsOptions: TlsOptions | null = null\n if (tls) {\n tlsOptions = {\n requestCert: TlsOptionsFactory.asBoolean(tls.requestCert),\n rejectUnauthorized: TlsOptionsFactory.asBoolean(tls.rejectUnauthorized)\n }\n\n if (tls.key) {\n tlsOptions.key = TlsOptionsFactory.read(tls.key)\n tlsOptions.cert = tls?.cert ? TlsOptionsFactory.read(tls?.cert) : undefined\n }\n\n if (tls.ca && tls.ca.length > 0) {\n tlsOptions.ca = tls.ca.map(i => TlsOptionsFactory.read(i))\n }\n\n if (tls.nodeTlsServerOptions) {\n tlsOptions = {\n ...tlsOptions,\n ...tls.nodeTlsServerOptions\n }\n }\n }\n return tlsOptions\n }\n\n static getTlsConnectionOptions (tcp: ITcpTransportDescription): ConnectionOptions | null {\n let connectionOptions: ConnectionOptions | null = null\n const tls = tcp.tls\n if (tls) {\n connectionOptions = {\n port: tcp.port,\n host: tcp.host\n }\n if (tls.key) {\n connectionOptions.key = TlsOptionsFactory.read(tcp.tls?.key ?? '')\n connectionOptions.cert = tcp.tls?.cert ? TlsOptionsFactory.read(tcp?.tls?.cert) : undefined\n }\n if (tcp.tls.ca && tcp.tls.ca.length > 0) {\n connectionOptions.ca = tcp.tls.ca.map(i => TlsOptionsFactory.read(i))\n }\n if (tcp.tls.timeout) {\n connectionOptions.timeout = tcp.tls.timeout\n }\n if (tcp.tls.sessionTimeout) {\n connectionOptions.sessionTimeout = tcp.tls.sessionTimeout\n }\n // https://github.com/TimelordUK/jspurefix/issues/151 - ITlsOptions declares these and\n // getTlsOptions honours them on the server path, so map them here too rather than making\n // nodeTlsConnectionOptions the only spelling that works for an initiator. Applied before\n // the spread below so an explicit nodeTlsConnectionOptions value still wins.\n if (tls.requestCert !== undefined) {\n connectionOptions.requestCert = TlsOptionsFactory.asBoolean(tls.requestCert)\n }\n if (tls.rejectUnauthorized !== undefined) {\n connectionOptions.rejectUnauthorized = TlsOptionsFactory.asBoolean(tls.rejectUnauthorized)\n }\n if (tls.nodeTlsConnectionOptions) {\n connectionOptions = {\n ...connectionOptions,\n ...tls.nodeTlsConnectionOptions\n }\n if (connectionOptions.rejectUnauthorized !== undefined) {\n connectionOptions.rejectUnauthorized = TlsOptionsFactory.asBoolean(connectionOptions.rejectUnauthorized)\n }\n if (connectionOptions.requestCert !== undefined) {\n connectionOptions.requestCert = TlsOptionsFactory.asBoolean(connectionOptions.requestCert)\n }\n }\n }\n return connectionOptions\n }\n}\n"]}
@@ -1,62 +1,62 @@
1
- 8=FIX.4.4|9=0000117|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=20260810-16:58:32.371|98=0|108=30|141=Y|553=js-client|554=pwd-client|10=102|
2
- 8=FIX.4.4|9=0000117|35=A|49=accept-comp|56=init-comp|34=1|57=fix|52=20260810-16:58:32.376|98=0|108=30|141=Y|553=js-server|554=pwd-server|10=155|
3
- 8=FIX.4.4|9=0000079|35=2|49=init-comp|56=accept-comp|34=2|57=fix|52=20260810-16:58:32.377|7=1|16=1|10=243|
4
- 8=FIX.4.4|9=0000112|35=4|49=accept-comp|56=init-comp|34=1|57=fix|43=Y|52=20260810-16:58:32.381|122=20260810-16:58:32.381|123=Y|36=2|10=107|
5
- 8=FIX.4.4|9=0000075|35=5|49=accept-comp|56=init-comp|34=2|57=fix|52=20260810-16:58:34.380|58=5|10=215|
6
- 8=FIX.4.4|9=0000117|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=20260810-16:58:37.184|98=0|108=30|141=Y|553=js-client|554=pwd-client|10=109|
7
- 8=FIX.4.4|9=0000117|35=A|49=accept-comp|56=init-comp|34=1|57=fix|52=20260810-16:58:37.186|98=0|108=30|141=Y|553=js-server|554=pwd-server|10=159|
8
- 8=FIX.4.4|9=0000079|35=2|49=init-comp|56=accept-comp|34=2|57=fix|52=20260810-16:58:37.187|7=1|16=0|10=246|
9
- 8=FIX.4.4|9=0000112|35=4|49=accept-comp|56=init-comp|34=1|57=fix|43=Y|52=20260810-16:58:37.189|122=20260810-16:58:37.189|123=Y|36=2|10=129|
10
- 8=FIX.4.4|9=0000075|35=5|49=accept-comp|56=init-comp|34=2|57=fix|52=20260810-16:58:39.190|58=5|10=219|
11
- 8=FIX.4.4|9=0000117|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=20260810-16:58:41.673|98=0|108=30|141=Y|553=js-client|554=pwd-client|10=107|
12
- 8=FIX.4.4|9=0000117|35=A|49=accept-comp|56=init-comp|34=1|57=fix|52=20260810-16:58:41.674|98=0|108=30|141=Y|553=js-server|554=pwd-server|10=156|
13
- 8=FIX.4.4|9=0000117|35=A|49=init-comp|56=accept-comp|34=2|57=fix|52=20260810-16:58:41.675|98=0|108=30|141=Y|553=js-client|554=pwd-client|10=110|
14
- 8=FIX.4.4|9=0000117|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=20260810-16:58:42.221|98=0|108=30|141=Y|553=js-client|554=pwd-client|10=097|
15
- 8=FIX.4.4|9=0000117|35=A|49=accept-comp|56=init-comp|34=1|57=fix|52=20260810-16:58:42.222|98=0|108=30|141=Y|553=js-server|554=pwd-server|10=146|
16
- 8=FIX.4.4|9=0000075|35=5|49=accept-comp|56=init-comp|34=2|57=fix|52=20260810-16:58:43.225|58=5|10=213|
17
- 8=FIX.4.4|9=0000075|35=5|49=init-comp|56=accept-comp|34=3|57=fix|52=20260810-16:58:43.676|58=5|10=224|
18
- 8=FIX.4.4|9=0000117|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=20260810-16:58:45.999|98=0|108=30|141=Y|553=js-client|554=pwd-client|10=122|
19
- 8=FIX.4.4|9=0000117|35=A|49=accept-comp|56=init-comp|34=1|57=fix|52=20260810-16:58:46.001|98=0|108=30|141=Y|553=js-server|554=pwd-server|10=145|
20
- 8=FIX.4.4|9=0000075|35=5|49=accept-comp|56=init-comp|34=2|57=fix|52=20260810-16:58:47.004|58=5|10=212|
21
- 8=FIX.4.4|9=0000117|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=20260810-16:58:49.778|98=0|108=30|141=Y|553=js-client|554=pwd-client|10=121|
22
- 8=FIX.4.4|9=0000117|35=A|49=accept-comp|56=init-comp|34=1|57=fix|52=20260810-16:58:49.780|98=0|108=30|141=Y|553=js-server|554=pwd-server|10=162|
23
- 8=FIX.4.4|9=0000075|35=5|49=init-comp|56=accept-comp|34=0|57=fix|52=20260810-16:58:50.781|58=5|10=216|
24
- 8=FIX.4.4|9=0000117|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=20260810-16:58:53.307|98=0|108=30|141=Y|553=js-client|554=pwd-client|10=104|
25
- 8=FIX.4.4|9=0000117|35=A|49=accept-comp|56=init-comp|34=5|57=fix|52=20260810-16:58:53.308|98=0|108=30|141=Y|553=js-server|554=pwd-server|10=157|
26
- 8=FIX.4.4|9=0000075|35=5|49=accept-comp|56=init-comp|34=2|57=fix|52=20260810-16:58:54.311|58=5|10=211|
27
- 8=FIX.4.4|9=0000110|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=20260810-16:58:56.796|98=0|141=Y|553=js-client|554=pwd-client|10=187|
28
- 8=FIX.4.4|9=0000125|35=3|49=accept-comp|56=init-comp|34=1|57=fix|52=20260810-16:58:56.797|45=1|372=A|373=1|58=msgType A missing required tag 108|10=021|
29
- 8=FIX.4.4|9=0000117|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=20260810-16:59:01.408|98=0|108=30|141=Y|553=js-client|554=pwd-client|10=100|
30
- 8=FIX.4.4|9=0000117|35=A|49=accept-comp|56=init-comp|34=1|57=fix|52=20260810-16:59:01.410|98=0|108=30|141=Y|553=js-server|554=pwd-server|10=141|
31
- 8=FIX.4.4|9=0000111|35=3|49=accept-comp|56=init-comp|34=2|57=fix|52=20260810-16:59:01.412|45=2|372=ZZ|373=11|58=msgType ZZ unknown|10=144|
32
- 8=FIX.4.4|9=0000075|35=5|49=accept-comp|56=init-comp|34=3|57=fix|52=20260810-16:59:03.412|58=5|10=209|
33
- 8=FIX.4.4|9=0000117|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=20260810-16:59:06.170|98=0|108=30|141=Y|553=js-client|554=pwd-client|10=101|
34
- 8=FIX.4.4|9=0000117|35=A|49=accept-comp|56=init-comp|34=1|57=fix|52=20260810-16:59:06.171|98=0|108=30|141=Y|553=js-server|554=pwd-server|10=150|
35
- 8=FIX.4.4|9=0000146|35=3|49=accept-comp|56=init-comp|34=2|57=fix|52=20260810-16:59:06.173|45=2|372=0|373=5|58=msgType 0 checksum failed. received = 95 computed = 143|10=074|
36
- 8=FIX.4.4|9=0000075|35=5|49=accept-comp|56=init-comp|34=3|57=fix|52=20260810-16:59:08.174|58=5|10=219|
37
- 8=FIX.4.4|9=0000117|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=20260810-16:59:10.172|98=0|108=30|141=Y|553=js-client|554=pwd-client|10=098|
38
- 8=FIX.4.4|9=0000117|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=20260810-16:59:14.686|98=0|108=30|141=Y|553=js-client|554=pwd-client|10=112|
39
- 8=FIX.4.4|9=0000117|35=A|49=accept-comp|56=init-comp|34=1|57=fix|52=20260810-16:59:14.687|98=0|108=30|141=Y|553=js-server|554=pwd-server|10=161|
40
- 8=FIX.4.4|9=0000145|35=3|49=accept-comp|56=init-comp|34=2|57=fix|52=20260810-16:59:14.689|45=2|372=0|373=5|58=msgType 0 checksum failed. received = 95 computed = 59|10=042|
41
- 8=FIX.4.4|9=0000075|35=5|49=accept-comp|56=init-comp|34=3|57=fix|52=20260810-16:59:16.690|58=5|10=221|
42
- 8=FIX.4.4|9=0000116|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=20260810-16:59:19.174|98=0|108=2|141=Y|553=js-client|554=pwd-client|10=059|
43
- 8=FIX.4.4|9=0000117|35=A|49=accept-comp|56=init-comp|34=1|57=fix|52=20260810-16:59:19.175|98=0|108=30|141=Y|553=js-server|554=pwd-server|10=158|
44
- 8=FIX.4.4|9=0000104|35=0|49=init-comp|56=accept-comp|34=2|57=fix|52=20260810-16:59:21.180|112=Mon, 10 Aug 2026 16:59:21 GMT|10=138|
45
- 8=FIX.4.4|9=0000104|35=0|49=init-comp|56=accept-comp|34=3|57=fix|52=20260810-16:59:23.184|112=Mon, 10 Aug 2026 16:59:23 GMT|10=147|
46
- 8=FIX.4.4|9=0000075|35=5|49=accept-comp|56=init-comp|34=2|57=fix|52=20260810-16:59:25.177|58=5|10=220|
47
- 8=FIX.4.4|9=0000117|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=20260810-16:59:27.658|98=0|108=30|141=Y|553=js-client|554=pwd-client|10=115|
48
- 8=FIX.4.4|9=0000116|35=A|49=accept-comp|56=init-comp|34=1|57=fix|52=20260810-16:59:27.659|98=0|108=2|141=Y|553=js-server|554=pwd-server|10=114|
49
- 8=FIX.4.4|9=0000104|35=0|49=accept-comp|56=init-comp|34=2|57=fix|52=20260810-16:59:29.663|112=Mon, 10 Aug 2026 16:59:29 GMT|10=160|
50
- 8=FIX.4.4|9=0000104|35=0|49=accept-comp|56=init-comp|34=3|57=fix|52=20260810-16:59:31.666|112=Mon, 10 Aug 2026 16:59:31 GMT|10=150|
51
- 8=FIX.4.4|9=0000104|35=0|49=accept-comp|56=init-comp|34=4|57=fix|52=20260810-16:59:33.669|112=Mon, 10 Aug 2026 16:59:33 GMT|10=158|
52
- 8=FIX.4.4|9=0000075|35=5|49=accept-comp|56=init-comp|34=5|57=fix|52=20260810-16:59:35.660|58=5|10=221|
53
- 8=FIX.4.4|9=0000116|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=20260810-16:59:38.419|98=0|108=2|141=Y|553=js-client|554=pwd-client|10=062|
54
- 8=FIX.4.4|9=0000116|35=A|49=accept-comp|56=init-comp|34=1|57=fix|52=20260810-16:59:38.420|98=0|108=5|141=Y|553=js-server|554=pwd-server|10=105|
55
- 8=FIX.4.4|9=0000104|35=0|49=init-comp|56=accept-comp|34=2|57=fix|52=20260810-16:59:40.424|112=Mon, 10 Aug 2026 16:59:40 GMT|10=141|
56
- 8=FIX.4.4|9=0000104|35=0|49=init-comp|56=accept-comp|34=3|57=fix|52=20260810-16:59:42.428|112=Mon, 10 Aug 2026 16:59:42 GMT|10=150|
57
- 8=FIX.4.4|9=0000104|35=0|49=accept-comp|56=init-comp|34=2|57=fix|52=20260810-16:59:43.430|112=Mon, 10 Aug 2026 16:59:43 GMT|10=144|
58
- 8=FIX.4.4|9=0000104|35=0|49=init-comp|56=accept-comp|34=4|57=fix|52=20260810-16:59:44.432|112=Mon, 10 Aug 2026 16:59:44 GMT|10=150|
59
- 8=FIX.4.4|9=0000075|35=5|49=accept-comp|56=init-comp|34=3|57=fix|52=20260810-16:59:46.423|58=5|10=218|
60
- 8=FIX.4.4|9=0000117|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=20260810-17:01:54.797|98=0|108=30|141=Y|553=js-client|554=pwd-client|10=107|
61
- 8=FIX.4.4|9=0000117|35=A|49=accept-comp|56=init-comp|34=1|57=fix|52=20260810-17:01:54.806|98=0|108=30|141=Y|553=js-server|554=pwd-server|10=146|
62
- 8=FIX.4.4|9=0000075|35=5|49=accept-comp|56=init-comp|34=2|57=fix|52=20260810-17:01:55.811|58=5|10=206|
1
+ 8=FIX.4.4|9=0000117|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=20260810-18:11:05.466|98=0|108=30|141=Y|553=js-client|554=pwd-client|10=098|
2
+ 8=FIX.4.4|9=0000117|35=A|49=accept-comp|56=init-comp|34=1|57=fix|52=20260810-18:11:05.472|98=0|108=30|141=Y|553=js-server|554=pwd-server|10=143|
3
+ 8=FIX.4.4|9=0000079|35=2|49=init-comp|56=accept-comp|34=2|57=fix|52=20260810-18:11:05.474|7=1|16=1|10=232|
4
+ 8=FIX.4.4|9=0000112|35=4|49=accept-comp|56=init-comp|34=1|57=fix|43=Y|52=20260810-18:11:05.479|122=20260810-18:11:05.478|123=Y|36=2|10=104|
5
+ 8=FIX.4.4|9=0000075|35=5|49=accept-comp|56=init-comp|34=2|57=fix|52=20260810-18:11:07.478|58=5|10=214|
6
+ 8=FIX.4.4|9=0000117|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=20260810-18:11:10.361|98=0|108=30|141=Y|553=js-client|554=pwd-client|10=088|
7
+ 8=FIX.4.4|9=0000117|35=A|49=accept-comp|56=init-comp|34=1|57=fix|52=20260810-18:11:10.363|98=0|108=30|141=Y|553=js-server|554=pwd-server|10=138|
8
+ 8=FIX.4.4|9=0000079|35=2|49=init-comp|56=accept-comp|34=2|57=fix|52=20260810-18:11:10.363|7=1|16=0|10=224|
9
+ 8=FIX.4.4|9=0000112|35=4|49=accept-comp|56=init-comp|34=1|57=fix|43=Y|52=20260810-18:11:10.366|122=20260810-18:11:10.366|123=Y|36=2|10=087|
10
+ 8=FIX.4.4|9=0000075|35=5|49=accept-comp|56=init-comp|34=2|57=fix|52=20260810-18:11:12.366|58=5|10=206|
11
+ 8=FIX.4.4|9=0000117|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=20260810-18:11:14.866|98=0|108=30|141=Y|553=js-client|554=pwd-client|10=102|
12
+ 8=FIX.4.4|9=0000117|35=A|49=accept-comp|56=init-comp|34=1|57=fix|52=20260810-18:11:14.868|98=0|108=30|141=Y|553=js-server|554=pwd-server|10=152|
13
+ 8=FIX.4.4|9=0000117|35=A|49=init-comp|56=accept-comp|34=2|57=fix|52=20260810-18:11:14.868|98=0|108=30|141=Y|553=js-client|554=pwd-client|10=105|
14
+ 8=FIX.4.4|9=0000117|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=20260810-18:11:15.418|98=0|108=30|141=Y|553=js-client|554=pwd-client|10=096|
15
+ 8=FIX.4.4|9=0000117|35=A|49=accept-comp|56=init-comp|34=1|57=fix|52=20260810-18:11:15.420|98=0|108=30|141=Y|553=js-server|554=pwd-server|10=137|
16
+ 8=FIX.4.4|9=0000075|35=5|49=accept-comp|56=init-comp|34=2|57=fix|52=20260810-18:11:16.422|58=5|10=203|
17
+ 8=FIX.4.4|9=0000075|35=5|49=init-comp|56=accept-comp|34=3|57=fix|52=20260810-18:11:16.870|58=5|10=211|
18
+ 8=FIX.4.4|9=0000117|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=20260810-18:11:19.104|98=0|108=30|141=Y|553=js-client|554=pwd-client|10=092|
19
+ 8=FIX.4.4|9=0000117|35=A|49=accept-comp|56=init-comp|34=1|57=fix|52=20260810-18:11:19.105|98=0|108=30|141=Y|553=js-server|554=pwd-server|10=141|
20
+ 8=FIX.4.4|9=0000075|35=5|49=accept-comp|56=init-comp|34=2|57=fix|52=20260810-18:11:20.108|58=5|10=199|
21
+ 8=FIX.4.4|9=0000117|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=20260810-18:11:22.872|98=0|108=30|141=Y|553=js-client|554=pwd-client|10=098|
22
+ 8=FIX.4.4|9=0000117|35=A|49=accept-comp|56=init-comp|34=1|57=fix|52=20260810-18:11:22.874|98=0|108=30|141=Y|553=js-server|554=pwd-server|10=148|
23
+ 8=FIX.4.4|9=0000075|35=5|49=init-comp|56=accept-comp|34=0|57=fix|52=20260810-18:11:23.876|58=5|10=212|
24
+ 8=FIX.4.4|9=0000117|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=20260810-18:11:26.372|98=0|108=30|141=Y|553=js-client|554=pwd-client|10=097|
25
+ 8=FIX.4.4|9=0000117|35=A|49=accept-comp|56=init-comp|34=5|57=fix|52=20260810-18:11:26.374|98=0|108=30|141=Y|553=js-server|554=pwd-server|10=151|
26
+ 8=FIX.4.4|9=0000075|35=5|49=accept-comp|56=init-comp|34=2|57=fix|52=20260810-18:11:27.376|58=5|10=213|
27
+ 8=FIX.4.4|9=0000110|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=20260810-18:11:29.861|98=0|141=Y|553=js-client|554=pwd-client|10=171|
28
+ 8=FIX.4.4|9=0000125|35=3|49=accept-comp|56=init-comp|34=1|57=fix|52=20260810-18:11:29.863|45=1|372=A|373=1|58=msgType A missing required tag 108|10=006|
29
+ 8=FIX.4.4|9=0000117|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=20260810-18:11:34.477|98=0|108=30|141=Y|553=js-client|554=pwd-client|10=102|
30
+ 8=FIX.4.4|9=0000117|35=A|49=accept-comp|56=init-comp|34=1|57=fix|52=20260810-18:11:34.478|98=0|108=30|141=Y|553=js-server|554=pwd-server|10=151|
31
+ 8=FIX.4.4|9=0000111|35=3|49=accept-comp|56=init-comp|34=2|57=fix|52=20260810-18:11:34.480|45=2|372=ZZ|373=11|58=msgType ZZ unknown|10=145|
32
+ 8=FIX.4.4|9=0000075|35=5|49=accept-comp|56=init-comp|34=3|57=fix|52=20260810-18:11:36.480|58=5|10=210|
33
+ 8=FIX.4.4|9=0000117|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=20260810-18:11:39.252|98=0|108=30|141=Y|553=js-client|554=pwd-client|10=098|
34
+ 8=FIX.4.4|9=0000117|35=A|49=accept-comp|56=init-comp|34=1|57=fix|52=20260810-18:11:39.253|98=0|108=30|141=Y|553=js-server|554=pwd-server|10=147|
35
+ 8=FIX.4.4|9=0000146|35=3|49=accept-comp|56=init-comp|34=2|57=fix|52=20260810-18:11:39.255|45=2|372=0|373=5|58=msgType 0 checksum failed. received = 95 computed = 143|10=071|
36
+ 8=FIX.4.4|9=0000075|35=5|49=accept-comp|56=init-comp|34=3|57=fix|52=20260810-18:11:41.255|58=5|10=206|
37
+ 8=FIX.4.4|9=0000117|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=20260810-18:11:43.253|98=0|108=30|141=Y|553=js-client|554=pwd-client|10=094|
38
+ 8=FIX.4.4|9=0000117|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=20260810-18:11:47.748|98=0|108=30|141=Y|553=js-client|554=pwd-client|10=107|
39
+ 8=FIX.4.4|9=0000117|35=A|49=accept-comp|56=init-comp|34=1|57=fix|52=20260810-18:11:47.750|98=0|108=30|141=Y|553=js-server|554=pwd-server|10=148|
40
+ 8=FIX.4.4|9=0000145|35=3|49=accept-comp|56=init-comp|34=2|57=fix|52=20260810-18:11:47.751|45=2|372=0|373=5|58=msgType 0 checksum failed. received = 95 computed = 59|10=028|
41
+ 8=FIX.4.4|9=0000075|35=5|49=accept-comp|56=init-comp|34=3|57=fix|52=20260810-18:11:49.751|58=5|10=215|
42
+ 8=FIX.4.4|9=0000116|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=20260810-18:11:52.225|98=0|108=2|141=Y|553=js-client|554=pwd-client|10=043|
43
+ 8=FIX.4.4|9=0000117|35=A|49=accept-comp|56=init-comp|34=1|57=fix|52=20260810-18:11:52.226|98=0|108=30|141=Y|553=js-server|554=pwd-server|10=142|
44
+ 8=FIX.4.4|9=0000104|35=0|49=init-comp|56=accept-comp|34=2|57=fix|52=20260810-18:11:54.231|112=Mon, 10 Aug 2026 18:11:54 GMT|10=127|
45
+ 8=FIX.4.4|9=0000104|35=0|49=init-comp|56=accept-comp|34=3|57=fix|52=20260810-18:11:56.233|112=Mon, 10 Aug 2026 18:11:56 GMT|10=134|
46
+ 8=FIX.4.4|9=0000075|35=5|49=accept-comp|56=init-comp|34=2|57=fix|52=20260810-18:11:58.227|58=5|10=212|
47
+ 8=FIX.4.4|9=0000117|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=20260810-18:12:00.702|98=0|108=30|141=Y|553=js-client|554=pwd-client|10=087|
48
+ 8=FIX.4.4|9=0000116|35=A|49=accept-comp|56=init-comp|34=1|57=fix|52=20260810-18:12:00.703|98=0|108=2|141=Y|553=js-server|554=pwd-server|10=086|
49
+ 8=FIX.4.4|9=0000104|35=0|49=accept-comp|56=init-comp|34=2|57=fix|52=20260810-18:12:02.709|112=Mon, 10 Aug 2026 18:12:02 GMT|10=125|
50
+ 8=FIX.4.4|9=0000104|35=0|49=accept-comp|56=init-comp|34=3|57=fix|52=20260810-18:12:04.714|112=Mon, 10 Aug 2026 18:12:04 GMT|10=126|
51
+ 8=FIX.4.4|9=0000104|35=0|49=accept-comp|56=init-comp|34=4|57=fix|52=20260810-18:12:06.719|112=Mon, 10 Aug 2026 18:12:06 GMT|10=136|
52
+ 8=FIX.4.4|9=0000075|35=5|49=accept-comp|56=init-comp|34=5|57=fix|52=20260810-18:12:08.706|58=5|10=213|
53
+ 8=FIX.4.4|9=0000116|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=20260810-18:12:11.190|98=0|108=2|141=Y|553=js-client|554=pwd-client|10=040|
54
+ 8=FIX.4.4|9=0000116|35=A|49=accept-comp|56=init-comp|34=1|57=fix|52=20260810-18:12:11.191|98=0|108=5|141=Y|553=js-server|554=pwd-server|10=092|
55
+ 8=FIX.4.4|9=0000104|35=0|49=init-comp|56=accept-comp|34=2|57=fix|52=20260810-18:12:13.197|112=Mon, 10 Aug 2026 18:12:13 GMT|10=130|
56
+ 8=FIX.4.4|9=0000104|35=0|49=init-comp|56=accept-comp|34=3|57=fix|52=20260810-18:12:15.199|112=Mon, 10 Aug 2026 18:12:15 GMT|10=137|
57
+ 8=FIX.4.4|9=0000104|35=0|49=accept-comp|56=init-comp|34=2|57=fix|52=20260810-18:12:16.204|112=Mon, 10 Aug 2026 18:12:16 GMT|10=125|
58
+ 8=FIX.4.4|9=0000104|35=0|49=init-comp|56=accept-comp|34=4|57=fix|52=20260810-18:12:17.203|112=Mon, 10 Aug 2026 18:12:17 GMT|10=128|
59
+ 8=FIX.4.4|9=0000075|35=5|49=accept-comp|56=init-comp|34=3|57=fix|52=20260810-18:12:19.194|58=5|10=214|
60
+ 8=FIX.4.4|9=0000117|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=20260810-18:14:28.889|98=0|108=30|141=Y|553=js-client|554=pwd-client|10=115|
61
+ 8=FIX.4.4|9=0000117|35=A|49=accept-comp|56=init-comp|34=1|57=fix|52=20260810-18:14:28.899|98=0|108=30|141=Y|553=js-server|554=pwd-server|10=164|
62
+ 8=FIX.4.4|9=0000075|35=5|49=accept-comp|56=init-comp|34=2|57=fix|52=20260810-18:14:29.904|58=5|10=215|