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.
- package/README.md +70 -0
- package/dist/runtime/session-launcher.d.ts +2 -0
- package/dist/runtime/session-launcher.js +13 -0
- package/dist/runtime/session-launcher.js.map +1 -1
- package/dist/transport/ascii/ascii-session-msg-factory.d.ts +1 -1
- package/dist/transport/ascii/ascii-session-msg-factory.js +2 -2
- package/dist/transport/ascii/ascii-session-msg-factory.js.map +1 -1
- package/dist/transport/ascii/ascii-session.d.ts +6 -0
- package/dist/transport/ascii/ascii-session.js +72 -8
- package/dist/transport/ascii/ascii-session.js.map +1 -1
- package/dist/transport/msg-application.d.ts +3 -0
- package/dist/transport/msg-application.js.map +1 -1
- package/dist/transport/session/fix-session.d.ts +1 -1
- package/dist/transport/session/fix-session.js.map +1 -1
- package/dist/transport/tcp/recovering-tcp-initiator.d.ts +6 -0
- package/dist/transport/tcp/recovering-tcp-initiator.js +55 -15
- package/dist/transport/tcp/recovering-tcp-initiator.js.map +1 -1
- package/dist/transport/tcp/tcp-initiator-connector.d.ts +2 -0
- package/dist/transport/tcp/tcp-initiator-connector.js +8 -3
- package/dist/transport/tcp/tcp-initiator-connector.js.map +1 -1
- package/dist/transport/tcp/tcp-initiator.d.ts +1 -0
- package/dist/transport/tcp/tcp-initiator.js +7 -40
- package/dist/transport/tcp/tcp-initiator.js.map +1 -1
- package/jsfix.test_client.txt +62 -62
- package/jsfix.test_server.txt +72 -72
- package/package.json +1 -1
- package/src/runtime/session-launcher.ts +25 -3
- package/src/transport/ascii/ascii-session-msg-factory.ts +8 -2
- package/src/transport/ascii/ascii-session.ts +115 -7
- package/src/transport/msg-application.ts +16 -0
- package/src/transport/session/fix-session.ts +12 -2
- package/src/transport/tcp/recovering-tcp-initiator.ts +74 -13
- package/src/transport/tcp/tcp-initiator-connector.ts +6 -1
- package/src/transport/tcp/tcp-initiator.ts +12 -6
package/jsfix.test_client.txt
CHANGED
|
@@ -1,62 +1,62 @@
|
|
|
1
|
-
8=FIX.4.4|9=0000117|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=
|
|
2
|
-
8=FIX.4.4|9=0000117|35=A|49=accept-comp|56=init-comp|34=1|57=fix|52=
|
|
3
|
-
8=FIX.4.4|9=0000079|35=2|49=init-comp|56=accept-comp|34=2|57=fix|52=
|
|
4
|
-
8=FIX.4.4|9=0000112|35=4|49=accept-comp|56=init-comp|34=1|57=fix|43=Y|52=
|
|
5
|
-
8=FIX.4.4|9=
|
|
6
|
-
8=FIX.4.4|9=0000117|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=
|
|
7
|
-
8=FIX.4.4|9=0000117|35=A|49=accept-comp|56=init-comp|34=1|57=fix|52=
|
|
8
|
-
8=FIX.4.4|9=0000079|35=2|49=init-comp|56=accept-comp|34=2|57=fix|52=
|
|
9
|
-
8=FIX.4.4|9=0000112|35=4|49=accept-comp|56=init-comp|34=1|57=fix|43=Y|52=
|
|
10
|
-
8=FIX.4.4|9=
|
|
11
|
-
8=FIX.4.4|9=0000117|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=
|
|
12
|
-
8=FIX.4.4|9=0000117|35=A|49=accept-comp|56=init-comp|34=1|57=fix|52=
|
|
13
|
-
8=FIX.4.4|9=0000117|35=A|49=init-comp|56=accept-comp|34=2|57=fix|52=
|
|
14
|
-
8=FIX.4.4|9=0000117|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=
|
|
15
|
-
8=FIX.4.4|9=0000117|35=A|49=accept-comp|56=init-comp|34=1|57=fix|52=
|
|
16
|
-
8=FIX.4.4|9=
|
|
17
|
-
8=FIX.4.4|9=
|
|
18
|
-
8=FIX.4.4|9=0000117|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=
|
|
19
|
-
8=FIX.4.4|9=0000117|35=A|49=accept-comp|56=init-comp|34=1|57=fix|52=
|
|
20
|
-
8=FIX.4.4|9=
|
|
21
|
-
8=FIX.4.4|9=0000117|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=
|
|
22
|
-
8=FIX.4.4|9=0000117|35=A|49=accept-comp|56=init-comp|34=1|57=fix|52=
|
|
23
|
-
8=FIX.4.4|9=
|
|
24
|
-
8=FIX.4.4|9=0000117|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=
|
|
25
|
-
8=FIX.4.4|9=0000117|35=A|49=accept-comp|56=init-comp|34=5|57=fix|52=
|
|
26
|
-
8=FIX.4.4|9=
|
|
27
|
-
8=FIX.4.4|9=0000110|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=
|
|
28
|
-
8=FIX.4.4|9=0000125|35=3|49=accept-comp|56=init-comp|34=1|57=fix|52=
|
|
29
|
-
8=FIX.4.4|9=0000117|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=
|
|
30
|
-
8=FIX.4.4|9=0000117|35=A|49=accept-comp|56=init-comp|34=1|57=fix|52=
|
|
31
|
-
8=FIX.4.4|9=0000111|35=3|49=accept-comp|56=init-comp|34=2|57=fix|52=
|
|
32
|
-
8=FIX.4.4|9=
|
|
33
|
-
8=FIX.4.4|9=0000117|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=
|
|
34
|
-
8=FIX.4.4|9=0000117|35=A|49=accept-comp|56=init-comp|34=1|57=fix|52=
|
|
35
|
-
8=FIX.4.4|9=0000146|35=3|49=accept-comp|56=init-comp|34=2|57=fix|52=
|
|
36
|
-
8=FIX.4.4|9=
|
|
37
|
-
8=FIX.4.4|9=0000117|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=
|
|
38
|
-
8=FIX.4.4|9=0000117|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=
|
|
39
|
-
8=FIX.4.4|9=0000117|35=A|49=accept-comp|56=init-comp|34=1|57=fix|52=
|
|
40
|
-
8=FIX.4.4|9=0000145|35=3|49=accept-comp|56=init-comp|34=2|57=fix|52=
|
|
41
|
-
8=FIX.4.4|9=
|
|
42
|
-
8=FIX.4.4|9=0000116|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=
|
|
43
|
-
8=FIX.4.4|9=0000117|35=A|49=accept-comp|56=init-comp|34=1|57=fix|52=
|
|
44
|
-
8=FIX.4.4|9=0000104|35=0|49=init-comp|56=accept-comp|34=2|57=fix|52=
|
|
45
|
-
8=FIX.4.4|9=0000104|35=0|49=init-comp|56=accept-comp|34=3|57=fix|52=
|
|
46
|
-
8=FIX.4.4|9=
|
|
47
|
-
8=FIX.4.4|9=0000117|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=
|
|
48
|
-
8=FIX.4.4|9=0000116|35=A|49=accept-comp|56=init-comp|34=1|57=fix|52=
|
|
49
|
-
8=FIX.4.4|9=0000104|35=0|49=accept-comp|56=init-comp|34=2|57=fix|52=
|
|
50
|
-
8=FIX.4.4|9=0000104|35=0|49=accept-comp|56=init-comp|34=3|57=fix|52=
|
|
51
|
-
8=FIX.4.4|9=0000104|35=0|49=accept-comp|56=init-comp|34=4|57=fix|52=
|
|
52
|
-
8=FIX.4.4|9=
|
|
53
|
-
8=FIX.4.4|9=0000116|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=
|
|
54
|
-
8=FIX.4.4|9=0000116|35=A|49=accept-comp|56=init-comp|34=1|57=fix|52=
|
|
55
|
-
8=FIX.4.4|9=0000104|35=0|49=init-comp|56=accept-comp|34=2|57=fix|52=
|
|
56
|
-
8=FIX.4.4|9=0000104|35=0|49=init-comp|56=accept-comp|34=3|57=fix|52=
|
|
57
|
-
8=FIX.4.4|9=0000104|35=0|49=accept-comp|56=init-comp|34=2|57=fix|52=
|
|
58
|
-
8=FIX.4.4|9=0000104|35=0|49=init-comp|56=accept-comp|34=4|57=fix|52=
|
|
59
|
-
8=FIX.4.4|9=
|
|
60
|
-
8=FIX.4.4|9=0000117|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=
|
|
61
|
-
8=FIX.4.4|9=0000117|35=A|49=accept-comp|56=init-comp|34=1|57=fix|52=
|
|
62
|
-
8=FIX.4.4|9=
|
|
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|
|
package/jsfix.test_server.txt
CHANGED
|
@@ -1,75 +1,75 @@
|
|
|
1
|
-
8=FIX.4.4|9=0000117|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=
|
|
2
|
-
8=FIX.4.4|9=0000117|35=A|49=accept-comp|56=init-comp|34=1|57=fix|52=
|
|
3
|
-
8=FIX.4.4|9=0000079|35=2|49=init-comp|56=accept-comp|34=2|57=fix|52=
|
|
4
|
-
8=FIX.4.4|9=0000112|35=4|49=accept-comp|56=init-comp|34=1|57=fix|43=Y|52=
|
|
5
|
-
8=FIX.4.4|9=
|
|
6
|
-
8=FIX.4.4|9=
|
|
7
|
-
8=FIX.4.4|9=0000117|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=
|
|
8
|
-
8=FIX.4.4|9=0000117|35=A|49=accept-comp|56=init-comp|34=1|57=fix|52=
|
|
9
|
-
8=FIX.4.4|9=0000079|35=2|49=init-comp|56=accept-comp|34=2|57=fix|52=
|
|
10
|
-
8=FIX.4.4|9=0000112|35=4|49=accept-comp|56=init-comp|34=1|57=fix|43=Y|52=
|
|
11
|
-
8=FIX.4.4|9=
|
|
12
|
-
8=FIX.4.4|9=
|
|
13
|
-
8=FIX.4.4|9=0000117|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=
|
|
14
|
-
8=FIX.4.4|9=0000117|35=A|49=accept-comp|56=init-comp|34=1|57=fix|52=
|
|
15
|
-
8=FIX.4.4|9=0000117|35=A|49=init-comp|56=accept-comp|34=2|57=fix|52=
|
|
16
|
-
8=FIX.4.4|9=0000117|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=
|
|
17
|
-
8=FIX.4.4|9=0000117|35=A|49=accept-comp|56=init-comp|34=1|57=fix|52=
|
|
18
|
-
8=FIX.4.4|9=
|
|
19
|
-
8=FIX.4.4|9=
|
|
20
|
-
8=FIX.4.4|9=0000117|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=
|
|
21
|
-
8=FIX.4.4|9=0000117|35=A|49=accept-comp|56=init-comp|34=1|57=fix|52=
|
|
22
|
-
8=FIX.4.4|9=
|
|
23
|
-
8=FIX.4.4|9=
|
|
24
|
-
8=FIX.4.4|9=0000117|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=
|
|
25
|
-
8=FIX.4.4|9=0000117|35=A|49=accept-comp|56=init-comp|34=1|57=fix|52=
|
|
26
|
-
8=FIX.4.4|9=
|
|
27
|
-
8=FIX.4.4|9=0000117|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=
|
|
28
|
-
8=FIX.4.4|9=0000117|35=A|49=accept-comp|56=init-comp|34=5|57=fix|52=
|
|
29
|
-
8=FIX.4.4|9=
|
|
30
|
-
8=FIX.4.4|9=
|
|
31
|
-
8=FIX.4.4|9=0000110|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=
|
|
32
|
-
8=FIX.4.4|9=0000125|35=3|49=accept-comp|56=init-comp|34=1|57=fix|52=
|
|
33
|
-
8=FIX.4.4|9=0000117|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=
|
|
34
|
-
8=FIX.4.4|9=0000117|35=A|49=accept-comp|56=init-comp|34=1|57=fix|52=
|
|
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=
|
|
37
|
-
8=FIX.4.4|9=
|
|
38
|
-
8=FIX.4.4|9=
|
|
39
|
-
8=FIX.4.4|9=0000117|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=
|
|
40
|
-
8=FIX.4.4|9=0000117|35=A|49=accept-comp|56=init-comp|34=1|57=fix|52=
|
|
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=
|
|
43
|
-
8=FIX.4.4|9=
|
|
44
|
-
8=FIX.4.4|9=
|
|
45
|
-
8=FIX.4.4|9=0000117|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=
|
|
46
|
-
8=FIX.4.4|9=0000117|35=A|49=accept-comp|56=init-comp|34=1|57=fix|52=
|
|
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=
|
|
49
|
-
8=FIX.4.4|9=
|
|
50
|
-
8=FIX.4.4|9=
|
|
51
|
-
8=FIX.4.4|9=0000116|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=
|
|
52
|
-
8=FIX.4.4|9=0000117|35=A|49=accept-comp|56=init-comp|34=1|57=fix|52=
|
|
53
|
-
8=FIX.4.4|9=0000104|35=0|49=init-comp|56=accept-comp|34=2|57=fix|52=
|
|
54
|
-
8=FIX.4.4|9=0000104|35=0|49=init-comp|56=accept-comp|34=3|57=fix|52=
|
|
55
|
-
8=FIX.4.4|9=
|
|
56
|
-
8=FIX.4.4|9=
|
|
57
|
-
8=FIX.4.4|9=0000117|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=
|
|
58
|
-
8=FIX.4.4|9=0000116|35=A|49=accept-comp|56=init-comp|34=1|57=fix|52=
|
|
59
|
-
8=FIX.4.4|9=0000104|35=0|49=accept-comp|56=init-comp|34=2|57=fix|52=
|
|
60
|
-
8=FIX.4.4|9=0000104|35=0|49=accept-comp|56=init-comp|34=3|57=fix|52=
|
|
61
|
-
8=FIX.4.4|9=0000104|35=0|49=accept-comp|56=init-comp|34=4|57=fix|52=
|
|
62
|
-
8=FIX.4.4|9=
|
|
63
|
-
8=FIX.4.4|9=
|
|
64
|
-
8=FIX.4.4|9=0000116|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=
|
|
65
|
-
8=FIX.4.4|9=0000116|35=A|49=accept-comp|56=init-comp|34=1|57=fix|52=
|
|
66
|
-
8=FIX.4.4|9=0000104|35=0|49=init-comp|56=accept-comp|34=2|57=fix|52=
|
|
67
|
-
8=FIX.4.4|9=0000104|35=0|49=init-comp|56=accept-comp|34=3|57=fix|52=
|
|
68
|
-
8=FIX.4.4|9=0000104|35=0|49=accept-comp|56=init-comp|34=2|57=fix|52=
|
|
69
|
-
8=FIX.4.4|9=0000104|35=0|49=init-comp|56=accept-comp|34=4|57=fix|52=
|
|
70
|
-
8=FIX.4.4|9=
|
|
71
|
-
8=FIX.4.4|9=
|
|
72
|
-
8=FIX.4.4|9=0000117|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=
|
|
73
|
-
8=FIX.4.4|9=0000117|35=A|49=accept-comp|56=init-comp|34=1|57=fix|52=
|
|
74
|
-
8=FIX.4.4|9=
|
|
75
|
-
8=FIX.4.4|9=
|
|
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
|
@@ -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 -
|
|
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
|
-
*
|
|
111
|
-
*
|
|
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
|
-
|
|
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.
|
|
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
|
-
|
|
738
|
-
|
|
739
|
-
|
|
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 &&
|
|
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()
|
|
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)
|