jspurefix 5.10.5 → 5.11.0

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 (34) hide show
  1. package/README.md +70 -0
  2. package/dist/runtime/session-launcher.d.ts +2 -0
  3. package/dist/runtime/session-launcher.js +13 -0
  4. package/dist/runtime/session-launcher.js.map +1 -1
  5. package/dist/transport/ascii/ascii-session-msg-factory.d.ts +1 -1
  6. package/dist/transport/ascii/ascii-session-msg-factory.js +2 -2
  7. package/dist/transport/ascii/ascii-session-msg-factory.js.map +1 -1
  8. package/dist/transport/ascii/ascii-session.d.ts +6 -0
  9. package/dist/transport/ascii/ascii-session.js +72 -8
  10. package/dist/transport/ascii/ascii-session.js.map +1 -1
  11. package/dist/transport/msg-application.d.ts +3 -0
  12. package/dist/transport/msg-application.js.map +1 -1
  13. package/dist/transport/session/fix-session.d.ts +1 -1
  14. package/dist/transport/session/fix-session.js.map +1 -1
  15. package/dist/transport/tcp/recovering-tcp-initiator.d.ts +6 -0
  16. package/dist/transport/tcp/recovering-tcp-initiator.js +55 -15
  17. package/dist/transport/tcp/recovering-tcp-initiator.js.map +1 -1
  18. package/dist/transport/tcp/tcp-initiator-connector.d.ts +2 -0
  19. package/dist/transport/tcp/tcp-initiator-connector.js +8 -3
  20. package/dist/transport/tcp/tcp-initiator-connector.js.map +1 -1
  21. package/dist/transport/tcp/tcp-initiator.d.ts +1 -0
  22. package/dist/transport/tcp/tcp-initiator.js +7 -40
  23. package/dist/transport/tcp/tcp-initiator.js.map +1 -1
  24. package/jsfix.test_client.txt +62 -62
  25. package/jsfix.test_server.txt +72 -72
  26. package/package.json +1 -1
  27. package/src/runtime/session-launcher.ts +25 -3
  28. package/src/transport/ascii/ascii-session-msg-factory.ts +8 -2
  29. package/src/transport/ascii/ascii-session.ts +115 -7
  30. package/src/transport/msg-application.ts +16 -0
  31. package/src/transport/session/fix-session.ts +12 -2
  32. package/src/transport/tcp/recovering-tcp-initiator.ts +74 -13
  33. package/src/transport/tcp/tcp-initiator-connector.ts +6 -1
  34. package/src/transport/tcp/tcp-initiator.ts +12 -6
@@ -1,62 +1,62 @@
1
- 8=FIX.4.4|9=0000117|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=20260811-18:13:53.857|98=0|108=30|141=Y|553=js-client|554=pwd-client|10=108|
2
- 8=FIX.4.4|9=0000117|35=A|49=accept-comp|56=init-comp|34=1|57=fix|52=20260811-18:13:53.862|98=0|108=30|141=Y|553=js-server|554=pwd-server|10=152|
3
- 8=FIX.4.4|9=0000079|35=2|49=init-comp|56=accept-comp|34=2|57=fix|52=20260811-18:13:53.863|7=1|16=1|10=240|
4
- 8=FIX.4.4|9=0000112|35=4|49=accept-comp|56=init-comp|34=1|57=fix|43=Y|52=20260811-18:13:53.867|122=20260811-18:13:53.867|123=Y|36=2|10=119|
5
- 8=FIX.4.4|9=0000075|35=5|49=accept-comp|56=init-comp|34=2|57=fix|52=20260811-18:13:55.867|58=5|10=222|
6
- 8=FIX.4.4|9=0000117|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=20260811-18:13:58.684|98=0|108=30|141=Y|553=js-client|554=pwd-client|10=111|
7
- 8=FIX.4.4|9=0000117|35=A|49=accept-comp|56=init-comp|34=1|57=fix|52=20260811-18:13:58.686|98=0|108=30|141=Y|553=js-server|554=pwd-server|10=161|
8
- 8=FIX.4.4|9=0000079|35=2|49=init-comp|56=accept-comp|34=2|57=fix|52=20260811-18:13:58.687|7=1|16=0|10=248|
9
- 8=FIX.4.4|9=0000112|35=4|49=accept-comp|56=init-comp|34=1|57=fix|43=Y|52=20260811-18:13:58.690|122=20260811-18:13:58.690|123=Y|36=2|10=117|
10
- 8=FIX.4.4|9=0000075|35=5|49=accept-comp|56=init-comp|34=2|57=fix|52=20260811-18:14:00.690|58=5|10=207|
11
- 8=FIX.4.4|9=0000117|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=20260811-18:14:03.174|98=0|108=30|141=Y|553=js-client|554=pwd-client|10=096|
12
- 8=FIX.4.4|9=0000117|35=A|49=accept-comp|56=init-comp|34=1|57=fix|52=20260811-18:14:03.176|98=0|108=30|141=Y|553=js-server|554=pwd-server|10=146|
13
- 8=FIX.4.4|9=0000117|35=A|49=init-comp|56=accept-comp|34=2|57=fix|52=20260811-18:14:03.176|98=0|108=30|141=Y|553=js-client|554=pwd-client|10=099|
14
- 8=FIX.4.4|9=0000117|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=20260811-18:14:03.718|98=0|108=30|141=Y|553=js-client|554=pwd-client|10=100|
15
- 8=FIX.4.4|9=0000117|35=A|49=accept-comp|56=init-comp|34=1|57=fix|52=20260811-18:14:03.719|98=0|108=30|141=Y|553=js-server|554=pwd-server|10=149|
16
- 8=FIX.4.4|9=0000075|35=5|49=accept-comp|56=init-comp|34=2|57=fix|52=20260811-18:14:04.721|58=5|10=206|
17
- 8=FIX.4.4|9=0000075|35=5|49=init-comp|56=accept-comp|34=3|57=fix|52=20260811-18:14:05.177|58=5|10=213|
18
- 8=FIX.4.4|9=0000117|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=20260811-18:14:07.392|98=0|108=30|141=Y|553=js-client|554=pwd-client|10=102|
19
- 8=FIX.4.4|9=0000117|35=A|49=accept-comp|56=init-comp|34=1|57=fix|52=20260811-18:14:07.393|98=0|108=30|141=Y|553=js-server|554=pwd-server|10=151|
20
- 8=FIX.4.4|9=0000075|35=5|49=accept-comp|56=init-comp|34=2|57=fix|52=20260811-18:14:08.396|58=5|10=218|
21
- 8=FIX.4.4|9=0000117|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=20260811-18:14:11.141|98=0|108=30|141=Y|553=js-client|554=pwd-client|10=089|
22
- 8=FIX.4.4|9=0000117|35=A|49=accept-comp|56=init-comp|34=1|57=fix|52=20260811-18:14:11.143|98=0|108=30|141=Y|553=js-server|554=pwd-server|10=139|
23
- 8=FIX.4.4|9=0000075|35=5|49=init-comp|56=accept-comp|34=0|57=fix|52=20260811-18:14:12.143|58=5|10=201|
24
- 8=FIX.4.4|9=0000117|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=20260811-18:14:14.629|98=0|108=30|141=Y|553=js-client|554=pwd-client|10=103|
25
- 8=FIX.4.4|9=0000117|35=A|49=accept-comp|56=init-comp|34=5|57=fix|52=20260811-18:14:14.630|98=0|108=30|141=Y|553=js-server|554=pwd-server|10=147|
26
- 8=FIX.4.4|9=0000075|35=5|49=accept-comp|56=init-comp|34=2|57=fix|52=20260811-18:14:15.632|58=5|10=209|
27
- 8=FIX.4.4|9=0000110|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=20260811-18:14:18.100|98=0|141=Y|553=js-client|554=pwd-client|10=159|
28
- 8=FIX.4.4|9=0000125|35=3|49=accept-comp|56=init-comp|34=1|57=fix|52=20260811-18:14:18.101|45=1|372=A|373=1|58=msgType A missing required tag 108|10=249|
29
- 8=FIX.4.4|9=0000117|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=20260811-18:14:22.692|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=20260811-18:14:22.694|98=0|108=30|141=Y|553=js-server|554=pwd-server|10=152|
31
- 8=FIX.4.4|9=0000111|35=3|49=accept-comp|56=init-comp|34=2|57=fix|52=20260811-18:14:22.695|45=2|372=ZZ|373=11|58=msgType ZZ unknown|10=154|
32
- 8=FIX.4.4|9=0000075|35=5|49=accept-comp|56=init-comp|34=3|57=fix|52=20260811-18:14:24.696|58=5|10=220|
33
- 8=FIX.4.4|9=0000117|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=20260811-18:14:27.434|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=20260811-18:14:27.435|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=20260811-18:14:27.437|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=20260811-18:14:29.438|58=5|10=219|
37
- 8=FIX.4.4|9=0000117|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=20260811-18:14:31.436|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=20260811-18:14:35.923|98=0|108=30|141=Y|553=js-client|554=pwd-client|10=103|
39
- 8=FIX.4.4|9=0000117|35=A|49=accept-comp|56=init-comp|34=1|57=fix|52=20260811-18:14:35.924|98=0|108=30|141=Y|553=js-server|554=pwd-server|10=152|
40
- 8=FIX.4.4|9=0000145|35=3|49=accept-comp|56=init-comp|34=2|57=fix|52=20260811-18:14:35.925|45=2|372=0|373=5|58=msgType 0 checksum failed. received = 95 computed = 59|10=032|
41
- 8=FIX.4.4|9=0000075|35=5|49=accept-comp|56=init-comp|34=3|57=fix|52=20260811-18:14:37.925|58=5|10=219|
42
- 8=FIX.4.4|9=0000116|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=20260811-18:14:40.389|98=0|108=2|141=Y|553=js-client|554=pwd-client|10=055|
43
- 8=FIX.4.4|9=0000117|35=A|49=accept-comp|56=init-comp|34=1|57=fix|52=20260811-18:14:40.390|98=0|108=30|141=Y|553=js-server|554=pwd-server|10=145|
44
- 8=FIX.4.4|9=0000104|35=0|49=init-comp|56=accept-comp|34=2|57=fix|52=20260811-18:14:42.397|112=Tue, 11 Aug 2026 18:14:42 GMT|10=146|
45
- 8=FIX.4.4|9=0000104|35=0|49=init-comp|56=accept-comp|34=3|57=fix|52=20260811-18:14:44.400|112=Tue, 11 Aug 2026 18:14:44 GMT|10=136|
46
- 8=FIX.4.4|9=0000075|35=5|49=accept-comp|56=init-comp|34=2|57=fix|52=20260811-18:14:46.392|58=5|10=216|
47
- 8=FIX.4.4|9=0000117|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=20260811-18:14:48.857|98=0|108=30|141=Y|553=js-client|554=pwd-client|10=113|
48
- 8=FIX.4.4|9=0000116|35=A|49=accept-comp|56=init-comp|34=1|57=fix|52=20260811-18:14:48.858|98=0|108=2|141=Y|553=js-server|554=pwd-server|10=112|
49
- 8=FIX.4.4|9=0000104|35=0|49=accept-comp|56=init-comp|34=2|57=fix|52=20260811-18:14:50.863|112=Tue, 11 Aug 2026 18:14:50 GMT|10=142|
50
- 8=FIX.4.4|9=0000104|35=0|49=accept-comp|56=init-comp|34=3|57=fix|52=20260811-18:14:52.867|112=Tue, 11 Aug 2026 18:14:52 GMT|10=151|
51
- 8=FIX.4.4|9=0000104|35=0|49=accept-comp|56=init-comp|34=4|57=fix|52=20260811-18:14:54.870|112=Tue, 11 Aug 2026 18:14:54 GMT|10=150|
52
- 8=FIX.4.4|9=0000075|35=5|49=accept-comp|56=init-comp|34=5|57=fix|52=20260811-18:14:56.861|58=5|10=221|
53
- 8=FIX.4.4|9=0000116|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=20260811-18:14:59.581|98=0|108=2|141=Y|553=js-client|554=pwd-client|10=059|
54
- 8=FIX.4.4|9=0000116|35=A|49=accept-comp|56=init-comp|34=1|57=fix|52=20260811-18:14:59.582|98=0|108=5|141=Y|553=js-server|554=pwd-server|10=111|
55
- 8=FIX.4.4|9=0000104|35=0|49=init-comp|56=accept-comp|34=2|57=fix|52=20260811-18:15:01.586|112=Tue, 11 Aug 2026 18:15:01 GMT|10=138|
56
- 8=FIX.4.4|9=0000104|35=0|49=init-comp|56=accept-comp|34=3|57=fix|52=20260811-18:15:03.589|112=Tue, 11 Aug 2026 18:15:03 GMT|10=146|
57
- 8=FIX.4.4|9=0000104|35=0|49=accept-comp|56=init-comp|34=2|57=fix|52=20260811-18:15:04.591|112=Tue, 11 Aug 2026 18:15:04 GMT|10=140|
58
- 8=FIX.4.4|9=0000104|35=0|49=init-comp|56=accept-comp|34=4|57=fix|52=20260811-18:15:05.591|112=Tue, 11 Aug 2026 18:15:05 GMT|10=144|
59
- 8=FIX.4.4|9=0000075|35=5|49=accept-comp|56=init-comp|34=3|57=fix|52=20260811-18:15:07.585|58=5|10=219|
60
- 8=FIX.4.4|9=0000117|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=20260811-18:17:13.977|98=0|108=30|141=Y|553=js-client|554=pwd-client|10=111|
61
- 8=FIX.4.4|9=0000117|35=A|49=accept-comp|56=init-comp|34=1|57=fix|52=20260811-18:17:13.985|98=0|108=30|141=Y|553=js-server|554=pwd-server|10=158|
62
- 8=FIX.4.4|9=0000075|35=5|49=accept-comp|56=init-comp|34=2|57=fix|52=20260811-18:17:14.990|58=5|10=218|
1
+ 8=FIX.4.4|9=0000117|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=20260815-09:07:25.854|98=0|108=30|141=Y|553=js-client|554=pwd-client|10=111|
2
+ 8=FIX.4.4|9=0000117|35=A|49=accept-comp|56=init-comp|34=1|57=fix|52=20260815-09:07:25.858|98=0|108=30|141=Y|553=js-server|554=pwd-server|10=163|
3
+ 8=FIX.4.4|9=0000079|35=2|49=init-comp|56=accept-comp|34=2|57=fix|52=20260815-09:07:25.858|7=1|16=1|10=250|
4
+ 8=FIX.4.4|9=0000112|35=4|49=accept-comp|56=init-comp|34=1|57=fix|43=Y|52=20260815-09:07:25.861|122=20260815-09:07:25.861|123=Y|36=2|10=119|
5
+ 8=FIX.4.4|9=0000103|35=5|49=accept-comp|56=init-comp|34=2|57=fix|52=20260815-09:07:27.862|58=test_server confirming logout|10=094|
6
+ 8=FIX.4.4|9=0000117|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=20260815-09:07:30.487|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=20260815-09:07:30.488|98=0|108=30|141=Y|553=js-server|554=pwd-server|10=158|
8
+ 8=FIX.4.4|9=0000079|35=2|49=init-comp|56=accept-comp|34=2|57=fix|52=20260815-09:07:30.489|7=1|16=0|10=245|
9
+ 8=FIX.4.4|9=0000112|35=4|49=accept-comp|56=init-comp|34=1|57=fix|43=Y|52=20260815-09:07:30.490|122=20260815-09:07:30.490|123=Y|36=2|10=107|
10
+ 8=FIX.4.4|9=0000103|35=5|49=accept-comp|56=init-comp|34=2|57=fix|52=20260815-09:07:32.491|58=test_server confirming logout|10=088|
11
+ 8=FIX.4.4|9=0000117|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=20260815-09:07:34.865|98=0|108=30|141=Y|553=js-client|554=pwd-client|10=113|
12
+ 8=FIX.4.4|9=0000117|35=A|49=accept-comp|56=init-comp|34=1|57=fix|52=20260815-09:07:34.866|98=0|108=30|141=Y|553=js-server|554=pwd-server|10=162|
13
+ 8=FIX.4.4|9=0000117|35=A|49=init-comp|56=accept-comp|34=2|57=fix|52=20260815-09:07:34.866|98=0|108=30|141=Y|553=js-client|554=pwd-client|10=115|
14
+ 8=FIX.4.4|9=0000117|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=20260815-09:07:35.277|98=0|108=30|141=Y|553=js-client|554=pwd-client|10=111|
15
+ 8=FIX.4.4|9=0000117|35=A|49=accept-comp|56=init-comp|34=1|57=fix|52=20260815-09:07:35.278|98=0|108=30|141=Y|553=js-server|554=pwd-server|10=160|
16
+ 8=FIX.4.4|9=0000103|35=5|49=accept-comp|56=init-comp|34=2|57=fix|52=20260815-09:07:36.280|58=test_server confirming logout|10=088|
17
+ 8=FIX.4.4|9=0000101|35=5|49=init-comp|56=accept-comp|34=3|57=fix|52=20260815-09:07:36.868|58=test_client initiate logout|10=118|
18
+ 8=FIX.4.4|9=0000117|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=20260815-09:07:38.714|98=0|108=30|141=Y|553=js-client|554=pwd-client|10=110|
19
+ 8=FIX.4.4|9=0000117|35=A|49=accept-comp|56=init-comp|34=1|57=fix|52=20260815-09:07:38.715|98=0|108=30|141=Y|553=js-server|554=pwd-server|10=159|
20
+ 8=FIX.4.4|9=0000103|35=5|49=accept-comp|56=init-comp|34=2|57=fix|52=20260815-09:07:39.716|58=test_server confirming logout|10=095|
21
+ 8=FIX.4.4|9=0000117|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=20260815-09:07:42.080|98=0|108=30|141=Y|553=js-client|554=pwd-client|10=101|
22
+ 8=FIX.4.4|9=0000117|35=A|49=accept-comp|56=init-comp|34=1|57=fix|52=20260815-09:07:42.081|98=0|108=30|141=Y|553=js-server|554=pwd-server|10=150|
23
+ 8=FIX.4.4|9=0000101|35=5|49=init-comp|56=accept-comp|34=0|57=fix|52=20260815-09:07:43.082|58=test_client initiate logout|10=101|
24
+ 8=FIX.4.4|9=0000117|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=20260815-09:07:45.445|98=0|108=30|141=Y|553=js-client|554=pwd-client|10=109|
25
+ 8=FIX.4.4|9=0000117|35=A|49=accept-comp|56=init-comp|34=5|57=fix|52=20260815-09:07:45.446|98=0|108=30|141=Y|553=js-server|554=pwd-server|10=162|
26
+ 8=FIX.4.4|9=0000103|35=5|49=accept-comp|56=init-comp|34=2|57=fix|52=20260815-09:07:46.447|58=test_server confirming logout|10=094|
27
+ 8=FIX.4.4|9=0000110|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=20260815-09:07:48.805|98=0|141=Y|553=js-client|554=pwd-client|10=180|
28
+ 8=FIX.4.4|9=0000125|35=3|49=accept-comp|56=init-comp|34=1|57=fix|52=20260815-09:07:48.806|45=1|372=A|373=1|58=msgType A missing required tag 108|10=014|
29
+ 8=FIX.4.4|9=0000117|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=20260815-09:07:53.268|98=0|108=30|141=Y|553=js-client|554=pwd-client|10=111|
30
+ 8=FIX.4.4|9=0000117|35=A|49=accept-comp|56=init-comp|34=1|57=fix|52=20260815-09:07:53.270|98=0|108=30|141=Y|553=js-server|554=pwd-server|10=152|
31
+ 8=FIX.4.4|9=0000111|35=3|49=accept-comp|56=init-comp|34=2|57=fix|52=20260815-09:07:53.271|45=2|372=ZZ|373=11|58=msgType ZZ unknown|10=154|
32
+ 8=FIX.4.4|9=0000103|35=5|49=accept-comp|56=init-comp|34=3|57=fix|52=20260815-09:07:55.271|58=test_server confirming logout|10=090|
33
+ 8=FIX.4.4|9=0000117|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=20260815-09:07:57.858|98=0|108=30|141=Y|553=js-client|554=pwd-client|10=120|
34
+ 8=FIX.4.4|9=0000117|35=A|49=accept-comp|56=init-comp|34=1|57=fix|52=20260815-09:07:57.859|98=0|108=30|141=Y|553=js-server|554=pwd-server|10=169|
35
+ 8=FIX.4.4|9=0000146|35=3|49=accept-comp|56=init-comp|34=2|57=fix|52=20260815-09:07:57.861|45=2|372=0|373=5|58=msgType 0 checksum failed. received = 95 computed = 143|10=084|
36
+ 8=FIX.4.4|9=0000103|35=5|49=accept-comp|56=init-comp|34=3|57=fix|52=20260815-09:07:59.861|58=test_server confirming logout|10=099|
37
+ 8=FIX.4.4|9=0000117|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=20260815-09:08:01.858|98=0|108=30|141=Y|553=js-client|554=pwd-client|10=110|
38
+ 8=FIX.4.4|9=0000117|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=20260815-09:08:06.243|98=0|108=30|141=Y|553=js-client|554=pwd-client|10=103|
39
+ 8=FIX.4.4|9=0000117|35=A|49=accept-comp|56=init-comp|34=1|57=fix|52=20260815-09:08:06.244|98=0|108=30|141=Y|553=js-server|554=pwd-server|10=152|
40
+ 8=FIX.4.4|9=0000145|35=3|49=accept-comp|56=init-comp|34=2|57=fix|52=20260815-09:08:06.245|45=2|372=0|373=5|58=msgType 0 checksum failed. received = 95 computed = 59|10=032|
41
+ 8=FIX.4.4|9=0000103|35=5|49=accept-comp|56=init-comp|34=3|57=fix|52=20260815-09:08:08.269|58=test_server confirming logout|10=096|
42
+ 8=FIX.4.4|9=0000116|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=20260815-09:08:10.697|98=0|108=2|141=Y|553=js-client|554=pwd-client|10=061|
43
+ 8=FIX.4.4|9=0000117|35=A|49=accept-comp|56=init-comp|34=1|57=fix|52=20260815-09:08:10.698|98=0|108=30|141=Y|553=js-server|554=pwd-server|10=160|
44
+ 8=FIX.4.4|9=0000104|35=0|49=init-comp|56=accept-comp|34=2|57=fix|52=20260815-09:08:12.704|112=Sat, 15 Aug 2026 09:08:12 GMT|10=140|
45
+ 8=FIX.4.4|9=0000104|35=0|49=init-comp|56=accept-comp|34=3|57=fix|52=20260815-09:08:14.705|112=Sat, 15 Aug 2026 09:08:14 GMT|10=146|
46
+ 8=FIX.4.4|9=0000103|35=5|49=accept-comp|56=init-comp|34=2|57=fix|52=20260815-09:08:16.700|58=test_server confirming logout|10=084|
47
+ 8=FIX.4.4|9=0000117|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=20260815-09:08:19.275|98=0|108=30|141=Y|553=js-client|554=pwd-client|10=112|
48
+ 8=FIX.4.4|9=0000116|35=A|49=accept-comp|56=init-comp|34=1|57=fix|52=20260815-09:08:19.277|98=0|108=2|141=Y|553=js-server|554=pwd-server|10=112|
49
+ 8=FIX.4.4|9=0000104|35=0|49=accept-comp|56=init-comp|34=2|57=fix|52=20260815-09:08:21.280|112=Sat, 15 Aug 2026 09:08:21 GMT|10=139|
50
+ 8=FIX.4.4|9=0000104|35=0|49=accept-comp|56=init-comp|34=3|57=fix|52=20260815-09:08:23.285|112=Sat, 15 Aug 2026 09:08:23 GMT|10=149|
51
+ 8=FIX.4.4|9=0000104|35=0|49=accept-comp|56=init-comp|34=4|57=fix|52=20260815-09:08:25.288|112=Sat, 15 Aug 2026 09:08:25 GMT|10=157|
52
+ 8=FIX.4.4|9=0000103|35=5|49=accept-comp|56=init-comp|34=5|57=fix|52=20260815-09:08:27.279|58=test_server confirming logout|10=100|
53
+ 8=FIX.4.4|9=0000116|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=20260815-09:08:29.656|98=0|108=2|141=Y|553=js-client|554=pwd-client|10=066|
54
+ 8=FIX.4.4|9=0000116|35=A|49=accept-comp|56=init-comp|34=1|57=fix|52=20260815-09:08:29.657|98=0|108=5|141=Y|553=js-server|554=pwd-server|10=118|
55
+ 8=FIX.4.4|9=0000104|35=0|49=init-comp|56=accept-comp|34=2|57=fix|52=20260815-09:08:31.663|112=Sat, 15 Aug 2026 09:08:31 GMT|10=146|
56
+ 8=FIX.4.4|9=0000104|35=0|49=init-comp|56=accept-comp|34=3|57=fix|52=20260815-09:08:33.667|112=Sat, 15 Aug 2026 09:08:33 GMT|10=155|
57
+ 8=FIX.4.4|9=0000104|35=0|49=accept-comp|56=init-comp|34=2|57=fix|52=20260815-09:08:34.670|112=Sat, 15 Aug 2026 09:08:34 GMT|10=150|
58
+ 8=FIX.4.4|9=0000104|35=0|49=init-comp|56=accept-comp|34=4|57=fix|52=20260815-09:08:35.672|112=Sat, 15 Aug 2026 09:08:35 GMT|10=156|
59
+ 8=FIX.4.4|9=0000103|35=5|49=accept-comp|56=init-comp|34=3|57=fix|52=20260815-09:08:37.659|58=test_server confirming logout|10=101|
60
+ 8=FIX.4.4|9=0000117|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=20260815-09:10:23.649|98=0|108=30|141=Y|553=js-client|554=pwd-client|10=105|
61
+ 8=FIX.4.4|9=0000117|35=A|49=accept-comp|56=init-comp|34=1|57=fix|52=20260815-09:10:23.656|98=0|108=30|141=Y|553=js-server|554=pwd-server|10=151|
62
+ 8=FIX.4.4|9=0000103|35=5|49=accept-comp|56=init-comp|34=2|57=fix|52=20260815-09:10:24.660|58=test_server confirming logout|10=081|
@@ -1,75 +1,75 @@
1
- 8=FIX.4.4|9=0000117|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=20260811-18:13:53.857|98=0|108=30|141=Y|553=js-client|554=pwd-client|10=108|
2
- 8=FIX.4.4|9=0000117|35=A|49=accept-comp|56=init-comp|34=1|57=fix|52=20260811-18:13:53.862|98=0|108=30|141=Y|553=js-server|554=pwd-server|10=152|
3
- 8=FIX.4.4|9=0000079|35=2|49=init-comp|56=accept-comp|34=2|57=fix|52=20260811-18:13:53.863|7=1|16=1|10=240|
4
- 8=FIX.4.4|9=0000112|35=4|49=accept-comp|56=init-comp|34=1|57=fix|43=Y|52=20260811-18:13:53.867|122=20260811-18:13:53.867|123=Y|36=2|10=119|
5
- 8=FIX.4.4|9=0000075|35=5|49=init-comp|56=accept-comp|34=3|57=fix|52=20260811-18:13:55.865|58=5|10=221|
6
- 8=FIX.4.4|9=0000075|35=5|49=accept-comp|56=init-comp|34=2|57=fix|52=20260811-18:13:55.867|58=5|10=222|
7
- 8=FIX.4.4|9=0000117|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=20260811-18:13:58.684|98=0|108=30|141=Y|553=js-client|554=pwd-client|10=111|
8
- 8=FIX.4.4|9=0000117|35=A|49=accept-comp|56=init-comp|34=1|57=fix|52=20260811-18:13:58.686|98=0|108=30|141=Y|553=js-server|554=pwd-server|10=161|
9
- 8=FIX.4.4|9=0000079|35=2|49=init-comp|56=accept-comp|34=2|57=fix|52=20260811-18:13:58.687|7=1|16=0|10=248|
10
- 8=FIX.4.4|9=0000112|35=4|49=accept-comp|56=init-comp|34=1|57=fix|43=Y|52=20260811-18:13:58.690|122=20260811-18:13:58.690|123=Y|36=2|10=117|
11
- 8=FIX.4.4|9=0000075|35=5|49=init-comp|56=accept-comp|34=3|57=fix|52=20260811-18:14:00.689|58=5|10=216|
12
- 8=FIX.4.4|9=0000075|35=5|49=accept-comp|56=init-comp|34=2|57=fix|52=20260811-18:14:00.690|58=5|10=207|
13
- 8=FIX.4.4|9=0000117|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=20260811-18:14:03.174|98=0|108=30|141=Y|553=js-client|554=pwd-client|10=096|
14
- 8=FIX.4.4|9=0000117|35=A|49=accept-comp|56=init-comp|34=1|57=fix|52=20260811-18:14:03.176|98=0|108=30|141=Y|553=js-server|554=pwd-server|10=146|
15
- 8=FIX.4.4|9=0000117|35=A|49=init-comp|56=accept-comp|34=2|57=fix|52=20260811-18:14:03.176|98=0|108=30|141=Y|553=js-client|554=pwd-client|10=099|
16
- 8=FIX.4.4|9=0000117|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=20260811-18:14:03.718|98=0|108=30|141=Y|553=js-client|554=pwd-client|10=100|
17
- 8=FIX.4.4|9=0000117|35=A|49=accept-comp|56=init-comp|34=1|57=fix|52=20260811-18:14:03.719|98=0|108=30|141=Y|553=js-server|554=pwd-server|10=149|
18
- 8=FIX.4.4|9=0000075|35=5|49=init-comp|56=accept-comp|34=2|57=fix|52=20260811-18:14:04.720|58=5|10=205|
19
- 8=FIX.4.4|9=0000075|35=5|49=accept-comp|56=init-comp|34=2|57=fix|52=20260811-18:14:04.721|58=5|10=206|
20
- 8=FIX.4.4|9=0000117|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=20260811-18:14:07.392|98=0|108=30|141=Y|553=js-client|554=pwd-client|10=102|
21
- 8=FIX.4.4|9=0000117|35=A|49=accept-comp|56=init-comp|34=1|57=fix|52=20260811-18:14:07.393|98=0|108=30|141=Y|553=js-server|554=pwd-server|10=151|
22
- 8=FIX.4.4|9=0000075|35=5|49=init-comp|56=accept-comp|34=2|57=fix|52=20260811-18:14:08.395|58=5|10=217|
23
- 8=FIX.4.4|9=0000075|35=5|49=accept-comp|56=init-comp|34=2|57=fix|52=20260811-18:14:08.396|58=5|10=218|
24
- 8=FIX.4.4|9=0000117|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=20260811-18:14:11.141|98=0|108=30|141=Y|553=js-client|554=pwd-client|10=089|
25
- 8=FIX.4.4|9=0000117|35=A|49=accept-comp|56=init-comp|34=1|57=fix|52=20260811-18:14:11.143|98=0|108=30|141=Y|553=js-server|554=pwd-server|10=139|
26
- 8=FIX.4.4|9=0000075|35=5|49=init-comp|56=accept-comp|34=0|57=fix|52=20260811-18:14:12.143|58=5|10=201|
27
- 8=FIX.4.4|9=0000117|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=20260811-18:14:14.629|98=0|108=30|141=Y|553=js-client|554=pwd-client|10=103|
28
- 8=FIX.4.4|9=0000117|35=A|49=accept-comp|56=init-comp|34=5|57=fix|52=20260811-18:14:14.630|98=0|108=30|141=Y|553=js-server|554=pwd-server|10=147|
29
- 8=FIX.4.4|9=0000075|35=5|49=init-comp|56=accept-comp|34=2|57=fix|52=20260811-18:14:15.632|58=5|10=209|
30
- 8=FIX.4.4|9=0000075|35=5|49=accept-comp|56=init-comp|34=2|57=fix|52=20260811-18:14:15.632|58=5|10=209|
31
- 8=FIX.4.4|9=0000110|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=20260811-18:14:18.100|98=0|141=Y|553=js-client|554=pwd-client|10=159|
32
- 8=FIX.4.4|9=0000125|35=3|49=accept-comp|56=init-comp|34=1|57=fix|52=20260811-18:14:18.101|45=1|372=A|373=1|58=msgType A missing required tag 108|10=249|
33
- 8=FIX.4.4|9=0000117|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=20260811-18:14:22.692|98=0|108=30|141=Y|553=js-client|554=pwd-client|10=102|
34
- 8=FIX.4.4|9=0000117|35=A|49=accept-comp|56=init-comp|34=1|57=fix|52=20260811-18:14:22.694|98=0|108=30|141=Y|553=js-server|554=pwd-server|10=152|
1
+ 8=FIX.4.4|9=0000117|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=20260815-09:07:25.854|98=0|108=30|141=Y|553=js-client|554=pwd-client|10=111|
2
+ 8=FIX.4.4|9=0000117|35=A|49=accept-comp|56=init-comp|34=1|57=fix|52=20260815-09:07:25.858|98=0|108=30|141=Y|553=js-server|554=pwd-server|10=163|
3
+ 8=FIX.4.4|9=0000079|35=2|49=init-comp|56=accept-comp|34=2|57=fix|52=20260815-09:07:25.858|7=1|16=1|10=250|
4
+ 8=FIX.4.4|9=0000112|35=4|49=accept-comp|56=init-comp|34=1|57=fix|43=Y|52=20260815-09:07:25.861|122=20260815-09:07:25.861|123=Y|36=2|10=119|
5
+ 8=FIX.4.4|9=0000101|35=5|49=init-comp|56=accept-comp|34=3|57=fix|52=20260815-09:07:27.860|58=test_client initiate logout|10=110|
6
+ 8=FIX.4.4|9=0000103|35=5|49=accept-comp|56=init-comp|34=2|57=fix|52=20260815-09:07:27.862|58=test_server confirming logout|10=094|
7
+ 8=FIX.4.4|9=0000117|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=20260815-09:07:30.487|98=0|108=30|141=Y|553=js-client|554=pwd-client|10=109|
8
+ 8=FIX.4.4|9=0000117|35=A|49=accept-comp|56=init-comp|34=1|57=fix|52=20260815-09:07:30.488|98=0|108=30|141=Y|553=js-server|554=pwd-server|10=158|
9
+ 8=FIX.4.4|9=0000079|35=2|49=init-comp|56=accept-comp|34=2|57=fix|52=20260815-09:07:30.489|7=1|16=0|10=245|
10
+ 8=FIX.4.4|9=0000112|35=4|49=accept-comp|56=init-comp|34=1|57=fix|43=Y|52=20260815-09:07:30.490|122=20260815-09:07:30.490|123=Y|36=2|10=107|
11
+ 8=FIX.4.4|9=0000101|35=5|49=init-comp|56=accept-comp|34=3|57=fix|52=20260815-09:07:32.490|58=test_client initiate logout|10=105|
12
+ 8=FIX.4.4|9=0000103|35=5|49=accept-comp|56=init-comp|34=2|57=fix|52=20260815-09:07:32.491|58=test_server confirming logout|10=088|
13
+ 8=FIX.4.4|9=0000117|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=20260815-09:07:34.865|98=0|108=30|141=Y|553=js-client|554=pwd-client|10=113|
14
+ 8=FIX.4.4|9=0000117|35=A|49=accept-comp|56=init-comp|34=1|57=fix|52=20260815-09:07:34.866|98=0|108=30|141=Y|553=js-server|554=pwd-server|10=162|
15
+ 8=FIX.4.4|9=0000117|35=A|49=init-comp|56=accept-comp|34=2|57=fix|52=20260815-09:07:34.866|98=0|108=30|141=Y|553=js-client|554=pwd-client|10=115|
16
+ 8=FIX.4.4|9=0000117|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=20260815-09:07:35.277|98=0|108=30|141=Y|553=js-client|554=pwd-client|10=111|
17
+ 8=FIX.4.4|9=0000117|35=A|49=accept-comp|56=init-comp|34=1|57=fix|52=20260815-09:07:35.278|98=0|108=30|141=Y|553=js-server|554=pwd-server|10=160|
18
+ 8=FIX.4.4|9=0000101|35=5|49=init-comp|56=accept-comp|34=2|57=fix|52=20260815-09:07:36.279|58=test_client initiate logout|10=113|
19
+ 8=FIX.4.4|9=0000103|35=5|49=accept-comp|56=init-comp|34=2|57=fix|52=20260815-09:07:36.280|58=test_server confirming logout|10=088|
20
+ 8=FIX.4.4|9=0000117|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=20260815-09:07:38.714|98=0|108=30|141=Y|553=js-client|554=pwd-client|10=110|
21
+ 8=FIX.4.4|9=0000117|35=A|49=accept-comp|56=init-comp|34=1|57=fix|52=20260815-09:07:38.715|98=0|108=30|141=Y|553=js-server|554=pwd-server|10=159|
22
+ 8=FIX.4.4|9=0000101|35=5|49=init-comp|56=accept-comp|34=2|57=fix|52=20260815-09:07:39.715|58=test_client initiate logout|10=111|
23
+ 8=FIX.4.4|9=0000103|35=5|49=accept-comp|56=init-comp|34=2|57=fix|52=20260815-09:07:39.716|58=test_server confirming logout|10=095|
24
+ 8=FIX.4.4|9=0000117|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=20260815-09:07:42.080|98=0|108=30|141=Y|553=js-client|554=pwd-client|10=101|
25
+ 8=FIX.4.4|9=0000117|35=A|49=accept-comp|56=init-comp|34=1|57=fix|52=20260815-09:07:42.081|98=0|108=30|141=Y|553=js-server|554=pwd-server|10=150|
26
+ 8=FIX.4.4|9=0000101|35=5|49=init-comp|56=accept-comp|34=0|57=fix|52=20260815-09:07:43.082|58=test_client initiate logout|10=101|
27
+ 8=FIX.4.4|9=0000117|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=20260815-09:07:45.445|98=0|108=30|141=Y|553=js-client|554=pwd-client|10=109|
28
+ 8=FIX.4.4|9=0000117|35=A|49=accept-comp|56=init-comp|34=5|57=fix|52=20260815-09:07:45.446|98=0|108=30|141=Y|553=js-server|554=pwd-server|10=162|
29
+ 8=FIX.4.4|9=0000101|35=5|49=init-comp|56=accept-comp|34=2|57=fix|52=20260815-09:07:46.446|58=test_client initiate logout|10=110|
30
+ 8=FIX.4.4|9=0000103|35=5|49=accept-comp|56=init-comp|34=2|57=fix|52=20260815-09:07:46.447|58=test_server confirming logout|10=094|
31
+ 8=FIX.4.4|9=0000110|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=20260815-09:07:48.805|98=0|141=Y|553=js-client|554=pwd-client|10=180|
32
+ 8=FIX.4.4|9=0000125|35=3|49=accept-comp|56=init-comp|34=1|57=fix|52=20260815-09:07:48.806|45=1|372=A|373=1|58=msgType A missing required tag 108|10=014|
33
+ 8=FIX.4.4|9=0000117|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=20260815-09:07:53.268|98=0|108=30|141=Y|553=js-client|554=pwd-client|10=111|
34
+ 8=FIX.4.4|9=0000117|35=A|49=accept-comp|56=init-comp|34=1|57=fix|52=20260815-09:07:53.270|98=0|108=30|141=Y|553=js-server|554=pwd-server|10=152|
35
35
  8=FIX4.4|9=0000136|35=ZZ|49=init-comp|56=accept-comp|34=2|57=fix|52=20180902-12:25:28.980|98=0|108=30|141=Y|553=js-client|554=pwd-client|10=177|
36
- 8=FIX.4.4|9=0000111|35=3|49=accept-comp|56=init-comp|34=2|57=fix|52=20260811-18:14:22.695|45=2|372=ZZ|373=11|58=msgType ZZ unknown|10=154|
37
- 8=FIX.4.4|9=0000075|35=5|49=init-comp|56=accept-comp|34=3|57=fix|52=20260811-18:14:24.694|58=5|10=218|
38
- 8=FIX.4.4|9=0000075|35=5|49=accept-comp|56=init-comp|34=3|57=fix|52=20260811-18:14:24.696|58=5|10=220|
39
- 8=FIX.4.4|9=0000117|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=20260811-18:14:27.434|98=0|108=30|141=Y|553=js-client|554=pwd-client|10=101|
40
- 8=FIX.4.4|9=0000117|35=A|49=accept-comp|56=init-comp|34=1|57=fix|52=20260811-18:14:27.435|98=0|108=30|141=Y|553=js-server|554=pwd-server|10=150|
36
+ 8=FIX.4.4|9=0000111|35=3|49=accept-comp|56=init-comp|34=2|57=fix|52=20260815-09:07:53.271|45=2|372=ZZ|373=11|58=msgType ZZ unknown|10=154|
37
+ 8=FIX.4.4|9=0000101|35=5|49=init-comp|56=accept-comp|34=3|57=fix|52=20260815-09:07:55.270|58=test_client initiate logout|10=106|
38
+ 8=FIX.4.4|9=0000103|35=5|49=accept-comp|56=init-comp|34=3|57=fix|52=20260815-09:07:55.271|58=test_server confirming logout|10=090|
39
+ 8=FIX.4.4|9=0000117|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=20260815-09:07:57.858|98=0|108=30|141=Y|553=js-client|554=pwd-client|10=120|
40
+ 8=FIX.4.4|9=0000117|35=A|49=accept-comp|56=init-comp|34=1|57=fix|52=20260815-09:07:57.859|98=0|108=30|141=Y|553=js-server|554=pwd-server|10=169|
41
41
  8=FIX4.4|9=0000123|35=0|49=init-comp|56=accept-comp|34=2|57=fix|52=20180902-12:25:59.161|999=Sun, 02 Sep 2018 12:25:59 GMT|10=95|
42
- 8=FIX.4.4|9=0000146|35=3|49=accept-comp|56=init-comp|34=2|57=fix|52=20260811-18:14:27.437|45=2|372=0|373=5|58=msgType 0 checksum failed. received = 95 computed = 143|10=074|
43
- 8=FIX.4.4|9=0000075|35=5|49=init-comp|56=accept-comp|34=3|57=fix|52=20260811-18:14:29.437|58=5|10=218|
44
- 8=FIX.4.4|9=0000075|35=5|49=accept-comp|56=init-comp|34=3|57=fix|52=20260811-18:14:29.438|58=5|10=219|
45
- 8=FIX.4.4|9=0000117|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=20260811-18:14:35.923|98=0|108=30|141=Y|553=js-client|554=pwd-client|10=103|
46
- 8=FIX.4.4|9=0000117|35=A|49=accept-comp|56=init-comp|34=1|57=fix|52=20260811-18:14:35.924|98=0|108=30|141=Y|553=js-server|554=pwd-server|10=152|
42
+ 8=FIX.4.4|9=0000146|35=3|49=accept-comp|56=init-comp|34=2|57=fix|52=20260815-09:07:57.861|45=2|372=0|373=5|58=msgType 0 checksum failed. received = 95 computed = 143|10=084|
43
+ 8=FIX.4.4|9=0000101|35=5|49=init-comp|56=accept-comp|34=3|57=fix|52=20260815-09:07:59.860|58=test_client initiate logout|10=115|
44
+ 8=FIX.4.4|9=0000103|35=5|49=accept-comp|56=init-comp|34=3|57=fix|52=20260815-09:07:59.861|58=test_server confirming logout|10=099|
45
+ 8=FIX.4.4|9=0000117|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=20260815-09:08:06.243|98=0|108=30|141=Y|553=js-client|554=pwd-client|10=103|
46
+ 8=FIX.4.4|9=0000117|35=A|49=accept-comp|56=init-comp|34=1|57=fix|52=20260815-09:08:06.244|98=0|108=30|141=Y|553=js-server|554=pwd-server|10=152|
47
47
  8=FIX4.4|9=0000123|35=0|49=init-not!|56=accept-comp|34=2|57=fix|52=20180902-12:25:59.161|112=Sun, 02 Sep 2018 12:25:59 GMT|10=95|
48
- 8=FIX.4.4|9=0000145|35=3|49=accept-comp|56=init-comp|34=2|57=fix|52=20260811-18:14:35.925|45=2|372=0|373=5|58=msgType 0 checksum failed. received = 95 computed = 59|10=032|
49
- 8=FIX.4.4|9=0000075|35=5|49=init-comp|56=accept-comp|34=3|57=fix|52=20260811-18:14:37.924|58=5|10=218|
50
- 8=FIX.4.4|9=0000075|35=5|49=accept-comp|56=init-comp|34=3|57=fix|52=20260811-18:14:37.925|58=5|10=219|
51
- 8=FIX.4.4|9=0000116|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=20260811-18:14:40.389|98=0|108=2|141=Y|553=js-client|554=pwd-client|10=055|
52
- 8=FIX.4.4|9=0000117|35=A|49=accept-comp|56=init-comp|34=1|57=fix|52=20260811-18:14:40.390|98=0|108=30|141=Y|553=js-server|554=pwd-server|10=145|
53
- 8=FIX.4.4|9=0000104|35=0|49=init-comp|56=accept-comp|34=2|57=fix|52=20260811-18:14:42.397|112=Tue, 11 Aug 2026 18:14:42 GMT|10=146|
54
- 8=FIX.4.4|9=0000104|35=0|49=init-comp|56=accept-comp|34=3|57=fix|52=20260811-18:14:44.400|112=Tue, 11 Aug 2026 18:14:44 GMT|10=136|
55
- 8=FIX.4.4|9=0000075|35=5|49=init-comp|56=accept-comp|34=4|57=fix|52=20260811-18:14:46.391|58=5|10=217|
56
- 8=FIX.4.4|9=0000075|35=5|49=accept-comp|56=init-comp|34=2|57=fix|52=20260811-18:14:46.392|58=5|10=216|
57
- 8=FIX.4.4|9=0000117|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=20260811-18:14:48.857|98=0|108=30|141=Y|553=js-client|554=pwd-client|10=113|
58
- 8=FIX.4.4|9=0000116|35=A|49=accept-comp|56=init-comp|34=1|57=fix|52=20260811-18:14:48.858|98=0|108=2|141=Y|553=js-server|554=pwd-server|10=112|
59
- 8=FIX.4.4|9=0000104|35=0|49=accept-comp|56=init-comp|34=2|57=fix|52=20260811-18:14:50.863|112=Tue, 11 Aug 2026 18:14:50 GMT|10=142|
60
- 8=FIX.4.4|9=0000104|35=0|49=accept-comp|56=init-comp|34=3|57=fix|52=20260811-18:14:52.867|112=Tue, 11 Aug 2026 18:14:52 GMT|10=151|
61
- 8=FIX.4.4|9=0000104|35=0|49=accept-comp|56=init-comp|34=4|57=fix|52=20260811-18:14:54.870|112=Tue, 11 Aug 2026 18:14:54 GMT|10=150|
62
- 8=FIX.4.4|9=0000075|35=5|49=init-comp|56=accept-comp|34=2|57=fix|52=20260811-18:14:56.860|58=5|10=217|
63
- 8=FIX.4.4|9=0000075|35=5|49=accept-comp|56=init-comp|34=5|57=fix|52=20260811-18:14:56.861|58=5|10=221|
64
- 8=FIX.4.4|9=0000116|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=20260811-18:14:59.581|98=0|108=2|141=Y|553=js-client|554=pwd-client|10=059|
65
- 8=FIX.4.4|9=0000116|35=A|49=accept-comp|56=init-comp|34=1|57=fix|52=20260811-18:14:59.582|98=0|108=5|141=Y|553=js-server|554=pwd-server|10=111|
66
- 8=FIX.4.4|9=0000104|35=0|49=init-comp|56=accept-comp|34=2|57=fix|52=20260811-18:15:01.586|112=Tue, 11 Aug 2026 18:15:01 GMT|10=138|
67
- 8=FIX.4.4|9=0000104|35=0|49=init-comp|56=accept-comp|34=3|57=fix|52=20260811-18:15:03.589|112=Tue, 11 Aug 2026 18:15:03 GMT|10=146|
68
- 8=FIX.4.4|9=0000104|35=0|49=accept-comp|56=init-comp|34=2|57=fix|52=20260811-18:15:04.591|112=Tue, 11 Aug 2026 18:15:04 GMT|10=140|
69
- 8=FIX.4.4|9=0000104|35=0|49=init-comp|56=accept-comp|34=4|57=fix|52=20260811-18:15:05.591|112=Tue, 11 Aug 2026 18:15:05 GMT|10=144|
70
- 8=FIX.4.4|9=0000075|35=5|49=init-comp|56=accept-comp|34=5|57=fix|52=20260811-18:15:07.584|58=5|10=220|
71
- 8=FIX.4.4|9=0000075|35=5|49=accept-comp|56=init-comp|34=3|57=fix|52=20260811-18:15:07.585|58=5|10=219|
72
- 8=FIX.4.4|9=0000117|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=20260811-18:17:13.977|98=0|108=30|141=Y|553=js-client|554=pwd-client|10=111|
73
- 8=FIX.4.4|9=0000117|35=A|49=accept-comp|56=init-comp|34=1|57=fix|52=20260811-18:17:13.985|98=0|108=30|141=Y|553=js-server|554=pwd-server|10=158|
74
- 8=FIX.4.4|9=0000075|35=5|49=init-comp|56=accept-comp|34=2|57=fix|52=20260811-18:17:14.988|58=5|10=225|
75
- 8=FIX.4.4|9=0000075|35=5|49=accept-comp|56=init-comp|34=2|57=fix|52=20260811-18:17:14.990|58=5|10=218|
48
+ 8=FIX.4.4|9=0000145|35=3|49=accept-comp|56=init-comp|34=2|57=fix|52=20260815-09:08:06.245|45=2|372=0|373=5|58=msgType 0 checksum failed. received = 95 computed = 59|10=032|
49
+ 8=FIX.4.4|9=0000101|35=5|49=init-comp|56=accept-comp|34=3|57=fix|52=20260815-09:08:08.267|58=test_client initiate logout|10=111|
50
+ 8=FIX.4.4|9=0000103|35=5|49=accept-comp|56=init-comp|34=3|57=fix|52=20260815-09:08:08.269|58=test_server confirming logout|10=096|
51
+ 8=FIX.4.4|9=0000116|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=20260815-09:08:10.697|98=0|108=2|141=Y|553=js-client|554=pwd-client|10=061|
52
+ 8=FIX.4.4|9=0000117|35=A|49=accept-comp|56=init-comp|34=1|57=fix|52=20260815-09:08:10.698|98=0|108=30|141=Y|553=js-server|554=pwd-server|10=160|
53
+ 8=FIX.4.4|9=0000104|35=0|49=init-comp|56=accept-comp|34=2|57=fix|52=20260815-09:08:12.704|112=Sat, 15 Aug 2026 09:08:12 GMT|10=140|
54
+ 8=FIX.4.4|9=0000104|35=0|49=init-comp|56=accept-comp|34=3|57=fix|52=20260815-09:08:14.705|112=Sat, 15 Aug 2026 09:08:14 GMT|10=146|
55
+ 8=FIX.4.4|9=0000101|35=5|49=init-comp|56=accept-comp|34=4|57=fix|52=20260815-09:08:16.699|58=test_client initiate logout|10=120|
56
+ 8=FIX.4.4|9=0000103|35=5|49=accept-comp|56=init-comp|34=2|57=fix|52=20260815-09:08:16.700|58=test_server confirming logout|10=084|
57
+ 8=FIX.4.4|9=0000117|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=20260815-09:08:19.275|98=0|108=30|141=Y|553=js-client|554=pwd-client|10=112|
58
+ 8=FIX.4.4|9=0000116|35=A|49=accept-comp|56=init-comp|34=1|57=fix|52=20260815-09:08:19.277|98=0|108=2|141=Y|553=js-server|554=pwd-server|10=112|
59
+ 8=FIX.4.4|9=0000104|35=0|49=accept-comp|56=init-comp|34=2|57=fix|52=20260815-09:08:21.280|112=Sat, 15 Aug 2026 09:08:21 GMT|10=139|
60
+ 8=FIX.4.4|9=0000104|35=0|49=accept-comp|56=init-comp|34=3|57=fix|52=20260815-09:08:23.285|112=Sat, 15 Aug 2026 09:08:23 GMT|10=149|
61
+ 8=FIX.4.4|9=0000104|35=0|49=accept-comp|56=init-comp|34=4|57=fix|52=20260815-09:08:25.288|112=Sat, 15 Aug 2026 09:08:25 GMT|10=157|
62
+ 8=FIX.4.4|9=0000101|35=5|49=init-comp|56=accept-comp|34=2|57=fix|52=20260815-09:08:27.278|58=test_client initiate logout|10=113|
63
+ 8=FIX.4.4|9=0000103|35=5|49=accept-comp|56=init-comp|34=5|57=fix|52=20260815-09:08:27.279|58=test_server confirming logout|10=100|
64
+ 8=FIX.4.4|9=0000116|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=20260815-09:08:29.656|98=0|108=2|141=Y|553=js-client|554=pwd-client|10=066|
65
+ 8=FIX.4.4|9=0000116|35=A|49=accept-comp|56=init-comp|34=1|57=fix|52=20260815-09:08:29.657|98=0|108=5|141=Y|553=js-server|554=pwd-server|10=118|
66
+ 8=FIX.4.4|9=0000104|35=0|49=init-comp|56=accept-comp|34=2|57=fix|52=20260815-09:08:31.663|112=Sat, 15 Aug 2026 09:08:31 GMT|10=146|
67
+ 8=FIX.4.4|9=0000104|35=0|49=init-comp|56=accept-comp|34=3|57=fix|52=20260815-09:08:33.667|112=Sat, 15 Aug 2026 09:08:33 GMT|10=155|
68
+ 8=FIX.4.4|9=0000104|35=0|49=accept-comp|56=init-comp|34=2|57=fix|52=20260815-09:08:34.670|112=Sat, 15 Aug 2026 09:08:34 GMT|10=150|
69
+ 8=FIX.4.4|9=0000104|35=0|49=init-comp|56=accept-comp|34=4|57=fix|52=20260815-09:08:35.672|112=Sat, 15 Aug 2026 09:08:35 GMT|10=156|
70
+ 8=FIX.4.4|9=0000101|35=5|49=init-comp|56=accept-comp|34=5|57=fix|52=20260815-09:08:37.658|58=test_client initiate logout|10=119|
71
+ 8=FIX.4.4|9=0000103|35=5|49=accept-comp|56=init-comp|34=3|57=fix|52=20260815-09:08:37.659|58=test_server confirming logout|10=101|
72
+ 8=FIX.4.4|9=0000117|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=20260815-09:10:23.649|98=0|108=30|141=Y|553=js-client|554=pwd-client|10=105|
73
+ 8=FIX.4.4|9=0000117|35=A|49=accept-comp|56=init-comp|34=1|57=fix|52=20260815-09:10:23.656|98=0|108=30|141=Y|553=js-server|554=pwd-server|10=151|
74
+ 8=FIX.4.4|9=0000101|35=5|49=init-comp|56=accept-comp|34=2|57=fix|52=20260815-09:10:24.658|58=test_client initiate logout|10=105|
75
+ 8=FIX.4.4|9=0000103|35=5|49=accept-comp|56=init-comp|34=2|57=fix|52=20260815-09:10:24.660|58=test_server confirming logout|10=081|
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "jspurefix",
3
- "version": "5.10.5",
3
+ "version": "5.11.0",
4
4
  "description": "pure node js fix engine",
5
5
  "keywords": [
6
6
  "typescript",
@@ -57,6 +57,7 @@ export abstract class SessionLauncher {
57
57
  }
58
58
 
59
59
  private acceptorEntity: FixEntity | null = null
60
+ private initiatorEntity: FixEntity | null = null
60
61
  private stopRequested: boolean = false
61
62
 
62
63
  protected async getAcceptor (sessionContainer: DependencyContainer): Promise<any> {
@@ -78,6 +79,11 @@ export abstract class SessionLauncher {
78
79
  protected async getInitiator (sessionContainer: DependencyContainer): Promise<any> {
79
80
  if (sessionContainer.isRegistered<FixEntity>(DITokens.FixEntity)) {
80
81
  const entity = sessionContainer.resolve<FixEntity>(DITokens.FixEntity)
82
+ this.initiatorEntity = entity
83
+ if (this.stopRequested) {
84
+ this.logger.info('stop requested before the initiator started - not connecting')
85
+ return this.empty()
86
+ }
81
87
  return entity.start()
82
88
  } else {
83
89
  return this.empty()
@@ -95,7 +101,8 @@ export abstract class SessionLauncher {
95
101
  }
96
102
 
97
103
  /**
98
- * Stop what this launcher started - in practice, close the acceptor's listener.
104
+ * Stop what this launcher started - close the acceptor's listener, and give up a
105
+ * resilient initiator's attempts to get its transport back.
99
106
  *
100
107
  * An acceptor is meant to outlive any one counterparty, so nothing closes its
101
108
  * listener on its own. That is right for a venue and wrong for an application
@@ -107,12 +114,18 @@ export abstract class SessionLauncher {
107
114
  * usual arrangement as soon as more than one client is involved. There was then
108
115
  * no way to shut a listener down short of killing the process.
109
116
  *
110
- * Safe before start (the request is remembered and the listener never opens), and
111
- * safe to call twice. run() resolves once the listener has closed.
117
+ * A resilient initiator had the same problem from the other side: losing the
118
+ * transport schedules another attempt, so it too kept the process alive with no way
119
+ * to call it off. See issue #72.
120
+ *
121
+ * Safe before start (the request is remembered and neither is opened), and safe to
122
+ * call twice. run() resolves once the listener has closed and the initiator has
123
+ * given up.
112
124
  */
113
125
  public stop (): void {
114
126
  this.stopRequested = true
115
127
  this.stopAcceptor()
128
+ this.stopInitiator()
116
129
  }
117
130
 
118
131
  public async run (): Promise<boolean> {
@@ -229,6 +242,15 @@ export abstract class SessionLauncher {
229
242
  }
230
243
  }
231
244
 
245
+ // only a resilient initiator has anything to call off - a plain one ends with its
246
+ // session, so it has no stop to find here
247
+ private stopInitiator (): void {
248
+ const entity = this.initiatorEntity as any
249
+ if (entity && typeof entity.stop === 'function') {
250
+ entity.stop()
251
+ }
252
+ }
253
+
232
254
  private loadConfig (config: string | ISessionDescription): ISessionDescription {
233
255
  if (typeof config === 'string') {
234
256
  return require(path.join(this.root, config))
@@ -33,11 +33,17 @@ export class AsciiSessionMsgFactory extends ASessionMsgFactory {
33
33
  return this.mutate(o, MsgType.Logon)
34
34
  }
35
35
 
36
- public logout (text: string): ILooseObject {
36
+ /**
37
+ * ISessionMsgFactory declares logout (msgType, text) and FixSession calls it that
38
+ * way. This override used to take the text alone, so it silently bound the msg
39
+ * type to Text and every Logout jspurefix sent carried '58=5' in place of the
40
+ * reason - the caller's message was dropped on the floor.
41
+ */
42
+ public logout (msgType: string, text: string): ILooseObject {
37
43
  const o: ILogout = {
38
44
  Text: text
39
45
  } as ILogout
40
- return this.mutate(o, MsgType.Logout)
46
+ return this.mutate(o, msgType ?? MsgType.Logout)
41
47
  }
42
48
 
43
49
  public header (msgType: string, seqNum: number, time: Date, overrideData?: Partial<IStandardHeader>): ILooseObject {
@@ -37,6 +37,7 @@ export abstract class AsciiSession extends FixSession {
37
37
  protected readonly wildcardTarget: boolean
38
38
  private identityBound: boolean
39
39
  private bindInProgress: boolean = false
40
+ private logonVerdictPending: boolean = false
40
41
  private readonly pendingRx: Array<{ msgType: string, view: MsgView }> = []
41
42
  private readonly clock: DefaultFixClock = new DefaultFixClock()
42
43
 
@@ -548,6 +549,13 @@ export abstract class AsciiSession extends FixSession {
548
549
  this.onMsgBeforeIdentity(msgType, view)
549
550
  return
550
551
  }
552
+ if (this.logonVerdictPending) {
553
+ // the application is still deciding whether to accept this peer - hold anything
554
+ // it sends in the meantime rather than acting on it (see awaitLogonVerdict)
555
+ this.sessionLogger.info(`queueing '${msgType}' received while awaiting logon verdict`)
556
+ this.pendingRx.push({ msgType, view: view.clone() })
557
+ return
558
+ }
551
559
  this.dispatchMsg(msgType, view)
552
560
  }
553
561
 
@@ -587,9 +595,11 @@ export abstract class AsciiSession extends FixSession {
587
595
  this.bindIdentity(peerCompId).then(() => {
588
596
  this.bindInProgress = false
589
597
  this.identityBound = true
598
+ // dispatching the logon can itself open a second gate - an application whose
599
+ // onLogon returns a promise is now deciding - so let resumeRx work out whether
600
+ // it is actually safe to let the socket run again
590
601
  this.dispatchMsg(MsgType.Logon, logon)
591
- this.drainPendingRx()
592
- this.transport?.duplex.readable?.resume()
602
+ this.resumeRx()
593
603
  }).catch((e: Error) => {
594
604
  this.bindInProgress = false
595
605
  this.pendingRx.length = 0
@@ -597,8 +607,34 @@ export abstract class AsciiSession extends FixSession {
597
607
  })
598
608
  }
599
609
 
610
+ /**
611
+ * True while an asynchronous step in the logon handshake is still running and no
612
+ * received message may be acted on: either the identity bind of a wildcard acceptor
613
+ * or an application still deciding the logon verdict.
614
+ */
615
+ private rxGated (): boolean {
616
+ return this.bindInProgress || this.logonVerdictPending
617
+ }
618
+
619
+ /**
620
+ * Let the socket run again now a gate has opened - but only if no other gate is
621
+ * still shut. Draining can re-gate (a replayed message could start another async
622
+ * step) so the check is repeated after the queue is played out; whichever gate
623
+ * closes last is the one that resumes.
624
+ */
625
+ private resumeRx (): void {
626
+ if (this.rxGated()) return
627
+ this.drainPendingRx()
628
+ if (this.rxGated()) return
629
+ this.transport?.duplex.readable?.resume()
630
+ }
631
+
600
632
  private drainPendingRx (): void {
601
633
  while (this.pendingRx.length > 0) {
634
+ if (this.rxGated()) {
635
+ this.sessionLogger.info('suspending replay - logon handshake gated again')
636
+ return
637
+ }
602
638
  const queued = this.pendingRx.shift()
603
639
  if (!queued) break
604
640
  if (this.sessionState.state === SessionState.Stopped) {
@@ -734,9 +770,66 @@ export abstract class AsciiSession extends FixSession {
734
770
  const state = this.sessionState
735
771
  state.peerHeartBeatSecs = view.getTyped(MsgTag.HeartBtInt) as number
736
772
  state.peerCompId = view.getTyped(MsgTag.SenderCompID) as string
737
- const res = this.onLogon(view, userName as string, password as string)
738
- // currently not using this.
739
- logger.info(`peerLogon onLogon returns ${res}`)
773
+
774
+ const verdict = this.onLogon(view, userName as string, password as string)
775
+ if (typeof verdict === 'boolean') {
776
+ // the common case - finish the handshake in this same event, so an application
777
+ // with a synchronous onLogon sees exactly the timing it always has
778
+ this.completePeerLogon(view, verdict, resetSeqNumFlag)
779
+ return
780
+ }
781
+ this.awaitLogonVerdict(view, verdict, resetSeqNumFlag)
782
+ }
783
+
784
+ /**
785
+ * onLogon handed back a promise - the application is checking the credentials
786
+ * against something asynchronous. Nothing may be sent or acted on until it
787
+ * answers, so pause the socket and queue whatever the peer says in the meantime.
788
+ *
789
+ * The view has to be cloned: AsciiParser recycles its tag index and buffer as soon
790
+ * as the current event returns, so the original is meaningless by the time the
791
+ * promise settles. Anything already read off it - peerReset here - is carried
792
+ * across as a value rather than read again from the clone.
793
+ */
794
+ private awaitLogonVerdict (view: MsgView, verdict: Promise<boolean>, peerReset: boolean | undefined): void {
795
+ const logger = this.sessionLogger
796
+ logger.info('onLogon returned a promise - awaiting logon verdict')
797
+ this.logonVerdictPending = true
798
+ const logon = view.clone()
799
+ this.transport?.duplex.readable?.pause()
800
+
801
+ verdict.then((accepted: boolean) => {
802
+ this.logonVerdictPending = false
803
+ if (this.sessionState.state === SessionState.Stopped) {
804
+ logger.info('session stopped while awaiting logon verdict - discarding')
805
+ this.pendingRx.length = 0
806
+ return
807
+ }
808
+ this.completePeerLogon(logon, accepted, peerReset)
809
+ if (!accepted) {
810
+ // completePeerLogon has torn the session down - nothing queued can be acted on
811
+ this.pendingRx.length = 0
812
+ return
813
+ }
814
+ this.resumeRx()
815
+ }).catch((e: Error) => {
816
+ this.logonVerdictPending = false
817
+ this.pendingRx.length = 0
818
+ // a credential check that throws is a refusal, not a reason to let the peer in
819
+ this.rejectLogon(`onLogon failed: ${e.message}`)
820
+ })
821
+ }
822
+
823
+ /**
824
+ * The application has accepted or refused the peer - finish the handshake either way.
825
+ */
826
+ private completePeerLogon (view: MsgView, accepted: boolean, peerReset: boolean | undefined): void {
827
+ const logger = this.sessionLogger
828
+ logger.info(`peerLogon onLogon returns ${accepted}`)
829
+ if (!accepted) {
830
+ this.rejectLogon('logon rejected by application')
831
+ return
832
+ }
740
833
  if (this.acceptor) {
741
834
  this.setState(SessionState.InitiationLogonResponse)
742
835
  logger.info('acceptor responds to logon request')
@@ -745,7 +838,7 @@ export abstract class AsciiSession extends FixSession {
745
838
  // reset our sequences before sending our logon response.
746
839
  // This handles the broker-reset pattern where client sends N, we respond with Y.
747
840
  const weReset = this.config.description.ResetSeqNumFlag
748
- if (weReset && resetSeqNumFlag !== true) {
841
+ if (weReset && peerReset !== true) {
749
842
  logger.info('acceptor sending ResetSeqNumFlag=Y (peer sent N), resetting sequences')
750
843
  // Fire-and-forget async coordinator call, set values synchronously
751
844
  this.coordinator.resetAsAcceptor().catch((e: Error) => {
@@ -764,7 +857,7 @@ export abstract class AsciiSession extends FixSession {
764
857
  }
765
858
  }
766
859
 
767
- this.sendLogon() // if res send response else reject, terminate
860
+ this.sendLogon()
768
861
  } else { // as an initiator the acceptor has responded
769
862
  logger.info('initiator receives logon response')
770
863
  this.setState(SessionState.InitiationLogonReceived)
@@ -779,6 +872,21 @@ export abstract class AsciiSession extends FixSession {
779
872
  this.onReady(view)
780
873
  }
781
874
 
875
+ /**
876
+ * The application refused this peer. FIX expects the refusing side to say why and
877
+ * then hang up rather than simply going quiet, so send a Logout carrying the reason
878
+ * before dropping the transport - the order matters, send() discards anything
879
+ * offered once the session has stopped.
880
+ *
881
+ * onReady is never reached and no heartbeat timer starts; the application learns the
882
+ * outcome through onStopped(error).
883
+ */
884
+ private rejectLogon (reason: string): void {
885
+ this.sessionLogger.warning(`refusing peer logon: ${reason}`)
886
+ this.sendLogout(reason)
887
+ this.terminate(new Error(reason))
888
+ }
889
+
782
890
  private sendTestRequest (): void {
783
891
  const factory = this.config.factory
784
892
  this.setState(SessionState.AwaitingProcessingResponseToTestRequest)