jspurefix 5.9.2 → 5.10.1
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 +35 -0
- package/dist/buffer/ascii/ascii-encoder.d.ts +1 -0
- package/dist/buffer/ascii/ascii-encoder.js +15 -0
- package/dist/buffer/ascii/ascii-encoder.js.map +1 -1
- package/dist/buffer/msg-encoder.d.ts +2 -0
- package/dist/buffer/msg-encoder.js +1 -0
- package/dist/buffer/msg-encoder.js.map +1 -1
- package/dist/runtime/session-container.d.ts +3 -0
- package/dist/runtime/session-container.js +8 -0
- package/dist/runtime/session-container.js.map +1 -1
- package/dist/runtime/session-launcher.d.ts +2 -1
- package/dist/runtime/session-launcher.js +4 -1
- package/dist/runtime/session-launcher.js.map +1 -1
- package/dist/transport/ascii/ascii-msg-transmitter.d.ts +1 -0
- package/dist/transport/ascii/ascii-msg-transmitter.js +15 -0
- package/dist/transport/ascii/ascii-msg-transmitter.js.map +1 -1
- package/dist/transport/ascii/ascii-session-msg-factory.js +1 -7
- package/dist/transport/ascii/ascii-session-msg-factory.js.map +1 -1
- package/dist/transport/fixml/fixml-session-msg-factory.js +1 -6
- package/dist/transport/fixml/fixml-session-msg-factory.js.map +1 -1
- package/dist/transport/index.d.ts +3 -0
- package/dist/transport/index.js +3 -0
- package/dist/transport/index.js.map +1 -1
- package/dist/transport/msg-payload.d.ts +3 -1
- package/dist/transport/msg-payload.js +2 -1
- package/dist/transport/msg-payload.js.map +1 -1
- package/dist/transport/msg-transmitter.d.ts +4 -1
- package/dist/transport/msg-transmitter.js +18 -2
- package/dist/transport/msg-transmitter.js.map +1 -1
- package/dist/transport/send-callback.d.ts +7 -0
- package/dist/transport/send-callback.js +3 -0
- package/dist/transport/send-callback.js.map +1 -0
- package/dist/transport/session/fix-session.d.ts +2 -1
- package/dist/transport/session/fix-session.js +12 -3
- package/dist/transport/session/fix-session.js.map +1 -1
- package/dist/transport/session/session-description.d.ts +2 -0
- package/dist/transport/session/session-description.js.map +1 -1
- package/docs/custom-logon.md +225 -0
- package/jsfix.test_client.txt +62 -62
- package/jsfix.test_server.txt +72 -72
- package/package.json +1 -1
- package/src/buffer/ascii/ascii-encoder.ts +20 -0
- package/src/buffer/msg-encoder.ts +12 -0
- package/src/runtime/session-container.ts +20 -0
- package/src/runtime/session-launcher.ts +19 -2
- package/src/transport/ascii/ascii-msg-transmitter.ts +20 -0
- package/src/transport/ascii/ascii-session-msg-factory.ts +6 -1
- package/src/transport/fixml/fixml-session-msg-factory.ts +3 -1
- package/src/transport/index.ts +5 -0
- package/src/transport/msg-payload.ts +5 -1
- package/src/transport/msg-transmitter.ts +31 -2
- package/src/transport/send-callback.ts +33 -0
- package/src/transport/session/fix-session.ts +22 -3
- package/src/transport/session/session-description.ts +14 -0
|
@@ -0,0 +1,225 @@
|
|
|
1
|
+
# Customising the Logon
|
|
2
|
+
|
|
3
|
+
Almost every counterparty wants something on the Logon that the standard message does
|
|
4
|
+
not carry — an account, a default application version, a broker-issued token, a free
|
|
5
|
+
text field. This is the single most asked question about jspurefix
|
|
6
|
+
([#93](https://github.com/TimelordUK/jspurefix/issues/93),
|
|
7
|
+
[#39](https://github.com/TimelordUK/jspurefix/issues/39),
|
|
8
|
+
[#96](https://github.com/TimelordUK/jspurefix/issues/96)) and it has a short answer
|
|
9
|
+
and a long one.
|
|
10
|
+
|
|
11
|
+
**The short answer:** two things must both be true, and people usually only do one.
|
|
12
|
+
|
|
13
|
+
1. The field must be **on the Logon object** the engine sends.
|
|
14
|
+
2. The field must be **declared on Logon in the dictionary** the session loads —
|
|
15
|
+
otherwise the encoder has no tag to write and drops it.
|
|
16
|
+
|
|
17
|
+
Doing (1) without (2) is the classic failure: you add the field, nothing changes, and
|
|
18
|
+
nothing explains why. The engine warns when it drops a field, so watch the log:
|
|
19
|
+
|
|
20
|
+
```
|
|
21
|
+
warn test_client:encoder field 'Account' is not declared on Logon in this dictionary - it will not be sent
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
That message means you need step (2) — a dictionary — not more code.
|
|
25
|
+
|
|
26
|
+
---
|
|
27
|
+
|
|
28
|
+
## Step 1 — put the field on the message
|
|
29
|
+
|
|
30
|
+
Three ways, in increasing order of effort. Use the first one that fits.
|
|
31
|
+
|
|
32
|
+
### The `Logon` block (no code)
|
|
33
|
+
|
|
34
|
+
Name the extra fields under `Logon` in the session description. They are merged over
|
|
35
|
+
the fields the engine derives from the description, so you can add, override, or
|
|
36
|
+
suppress:
|
|
37
|
+
|
|
38
|
+
```json
|
|
39
|
+
{
|
|
40
|
+
"application": {
|
|
41
|
+
"type": "initiator",
|
|
42
|
+
"name": "my_client",
|
|
43
|
+
"tcp": { "host": "fix.broker.com", "port": 10400 },
|
|
44
|
+
"protocol": "ascii",
|
|
45
|
+
"dictionary": "repo44"
|
|
46
|
+
},
|
|
47
|
+
"BeginString": "FIX4.4",
|
|
48
|
+
"SenderCompId": "TVKD",
|
|
49
|
+
"TargetCompID": "MXVMDGW",
|
|
50
|
+
"Password": "password",
|
|
51
|
+
"HeartBtInt": 30,
|
|
52
|
+
"ResetSeqNumFlag": true,
|
|
53
|
+
|
|
54
|
+
"Logon": {
|
|
55
|
+
"Account": "TVKD_001",
|
|
56
|
+
"DefaultApplVerID": "9"
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
- **Add** a field — name it with its value.
|
|
62
|
+
- **Override** a field the engine derived — `"Logon": { "HeartBtInt": 60 }`.
|
|
63
|
+
- **Suppress** a field — `"Logon": { "Username": null }`. (Simply leaving `Username`
|
|
64
|
+
out of the description entirely has the same effect; a null or empty value is never
|
|
65
|
+
encoded.)
|
|
66
|
+
|
|
67
|
+
Note this block applies to the Logon your session *sends*. An acceptor sends a Logon
|
|
68
|
+
too — its response — so a block configured on an acceptor appears on that response.
|
|
69
|
+
|
|
70
|
+
`EncryptMethod` is a special case: the engine always derives `0` (None) and ignores a
|
|
71
|
+
top-level `"EncryptMethod"` in the description. Set it through the block if you need
|
|
72
|
+
another value.
|
|
73
|
+
|
|
74
|
+
### An `ObjectMutator` (a callback)
|
|
75
|
+
|
|
76
|
+
When the values are computed at run time — a signature over the sequence number, a
|
|
77
|
+
nonce, a token fetched at start up — a static block will not do. Every session
|
|
78
|
+
message passes through the factory's mutator on its way out:
|
|
79
|
+
|
|
80
|
+
```typescript
|
|
81
|
+
import { ObjectMutator, ISessionDescription, MsgType } from 'jspurefix'
|
|
82
|
+
import { ILooseObject } from 'jspurefix/dist/collections/collection'
|
|
83
|
+
|
|
84
|
+
const stampToken: ObjectMutator = (
|
|
85
|
+
description: ISessionDescription,
|
|
86
|
+
type: string,
|
|
87
|
+
o: ILooseObject): ILooseObject => {
|
|
88
|
+
if (type !== MsgType.Logon) return o
|
|
89
|
+
return { ...o, RawData: Buffer.from(signOn(description.SenderCompId)) }
|
|
90
|
+
}
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
The mutator is a constructor argument to any factory deriving from
|
|
94
|
+
`ASessionMsgFactory`, so install it with the factory (next section). It also sees
|
|
95
|
+
`StandardHeader` (as type `'StandardHeader'`), Logout, TestRequest, Heartbeat,
|
|
96
|
+
ResendRequest, SequenceReset and Reject — which is what makes it the right hook for
|
|
97
|
+
anything a counterparty demands on *every* message.
|
|
98
|
+
|
|
99
|
+
### Your own session message factory
|
|
100
|
+
|
|
101
|
+
Full control: subclass the stock factory and override `logon()`.
|
|
102
|
+
|
|
103
|
+
```typescript
|
|
104
|
+
import { AsciiSessionMsgFactory } from 'jspurefix'
|
|
105
|
+
import { ILooseObject } from 'jspurefix/dist/collections/collection'
|
|
106
|
+
|
|
107
|
+
export class BrokerSessionMsgFactory extends AsciiSessionMsgFactory {
|
|
108
|
+
public logon (): ILooseObject {
|
|
109
|
+
return {
|
|
110
|
+
...super.logon(),
|
|
111
|
+
Password: this.freshToken(),
|
|
112
|
+
Account: this.description.SenderCompId
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
private freshToken (): string { /* ... */ }
|
|
117
|
+
}
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
Override `header()` the same way if a counterparty needs a header field on every
|
|
121
|
+
message. Call `super` and spread — do not rebuild the object from scratch, or you
|
|
122
|
+
will lose fields the engine relies on.
|
|
123
|
+
|
|
124
|
+
## Installing your factory
|
|
125
|
+
|
|
126
|
+
The launcher you already subclass has one method for this:
|
|
127
|
+
|
|
128
|
+
```typescript
|
|
129
|
+
class AppLauncher extends SessionLauncher {
|
|
130
|
+
protected override makeSessionMsgFactory (
|
|
131
|
+
description: ISessionDescription): ISessionMsgFactory | null {
|
|
132
|
+
return new BrokerSessionMsgFactory(description)
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
Return `null` for the stock factory. If you build the container yourself, pass a
|
|
138
|
+
provider instead:
|
|
139
|
+
|
|
140
|
+
```typescript
|
|
141
|
+
new SessionContainer(d => new BrokerSessionMsgFactory(d))
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
Both work for initiators and acceptors. An acceptor builds one factory **per accepted
|
|
145
|
+
connection**, so that each session's headers carry its own comp ids; your factory is
|
|
146
|
+
carried into those per-connection scopes rather than being replaced by the stock one
|
|
147
|
+
([#87](https://github.com/TimelordUK/jspurefix/issues/87)). That works automatically
|
|
148
|
+
for any factory whose constructor takes `(description, mutator)`. If yours takes
|
|
149
|
+
something else, override `cloneFor`:
|
|
150
|
+
|
|
151
|
+
```typescript
|
|
152
|
+
public override cloneFor (description: ISessionDescription): ISessionMsgFactory {
|
|
153
|
+
return new MyFactory(description, this.apiKey)
|
|
154
|
+
}
|
|
155
|
+
```
|
|
156
|
+
|
|
157
|
+
> Older advice in issue #39 — `sessionContainer.clearInstances()`, re-register, and
|
|
158
|
+
> rebuild `JsFixConfig` inside `registerApplication` — is obsolete and will fight the
|
|
159
|
+
> per-connection session scopes. Use `makeSessionMsgFactory`.
|
|
160
|
+
|
|
161
|
+
---
|
|
162
|
+
|
|
163
|
+
## Step 2 — declare the field in a dictionary
|
|
164
|
+
|
|
165
|
+
The encoder is dictionary driven. It resolves each key on your object to a field of
|
|
166
|
+
the message being encoded, and a key it cannot resolve has no tag, so it is dropped.
|
|
167
|
+
`Account` is tag 1, but it is **not a field of Logon** in standard FIX 4.4 — so
|
|
168
|
+
putting it on the Logon object achieves nothing on its own.
|
|
169
|
+
|
|
170
|
+
Copy the QuickFIX XML for your dialect, add the field to the Logon message, and point
|
|
171
|
+
the session at it:
|
|
172
|
+
|
|
173
|
+
```xml
|
|
174
|
+
<message name='Logon' msgtype='A' msgcat='admin'>
|
|
175
|
+
<field name='EncryptMethod' required='Y' />
|
|
176
|
+
<field name='HeartBtInt' required='Y' />
|
|
177
|
+
<field name='ResetSeqNumFlag' required='N' />
|
|
178
|
+
<field name='Username' required='N' />
|
|
179
|
+
<field name='Password' required='N' />
|
|
180
|
+
<!-- what this counterparty demands -->
|
|
181
|
+
<field name='Account' required='N' />
|
|
182
|
+
<field name='DefaultApplVerID' required='N' />
|
|
183
|
+
</message>
|
|
184
|
+
```
|
|
185
|
+
|
|
186
|
+
The field must also exist in the `<fields>` section of the same file:
|
|
187
|
+
|
|
188
|
+
```xml
|
|
189
|
+
<field number='1' name='Account' type='STRING' />
|
|
190
|
+
```
|
|
191
|
+
|
|
192
|
+
Then reference it from the session description:
|
|
193
|
+
|
|
194
|
+
```json
|
|
195
|
+
{ "application": { "dictionary": "/abs/path/to/FIX44-BROKER.xml" } }
|
|
196
|
+
```
|
|
197
|
+
|
|
198
|
+
> **Path gotcha.** A *relative* dictionary path is resolved against the **jspurefix
|
|
199
|
+
> package root** (`node_modules/jspurefix`), not your project's working directory.
|
|
200
|
+
> Use an absolute path — `path.join(__dirname, 'dictionaries/FIX44-BROKER.xml')` —
|
|
201
|
+
> or register an alias in `data/dictionary.json` as described in the README under
|
|
202
|
+
> [Data Dictionaries](../README.md#data-dictionaries).
|
|
203
|
+
|
|
204
|
+
Generating typed interfaces for the dialect is optional — the engine reads the XML at
|
|
205
|
+
run time either way — but worth doing if you want `ILogon` to know about your field.
|
|
206
|
+
|
|
207
|
+
## Checklist when a tag still is not on the wire
|
|
208
|
+
|
|
209
|
+
1. Is there an `is not declared on Logon in this dictionary` warning in the log? →
|
|
210
|
+
the dictionary is the problem, not your code.
|
|
211
|
+
2. Is the session actually loading the dictionary you edited? Relative paths resolve
|
|
212
|
+
against the package root — see above.
|
|
213
|
+
3. Is the value `null`, `undefined` or `''`? Those are never encoded, by design.
|
|
214
|
+
4. Are you customising a factory the acceptor then replaces? Implement `cloneFor` if
|
|
215
|
+
your constructor is not `(description, mutator)`.
|
|
216
|
+
5. Turn on `logReceivedMsgs` / the `onEncoded` hook on your session and read the
|
|
217
|
+
encoded string directly — it is the ground truth.
|
|
218
|
+
|
|
219
|
+
## See also
|
|
220
|
+
|
|
221
|
+
- [docs/acceptor.md](acceptor.md) — per-connection session scopes and why the factory
|
|
222
|
+
is cloned.
|
|
223
|
+
- `src/test/session/custom-logon.test.ts` — every behaviour above, exercised.
|
|
224
|
+
- `src/test/session/custom-session-msg-factory.test.ts` — factory survival into
|
|
225
|
+
acceptor scopes.
|
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=0000075|35=5|49=accept-comp|56=init-comp|34=2|57=fix|52=
|
|
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=0000075|35=5|49=accept-comp|56=init-comp|34=2|57=fix|52=
|
|
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=0000075|35=5|49=accept-comp|56=init-comp|34=2|57=fix|52=
|
|
17
|
-
8=FIX.4.4|9=0000075|35=5|49=init-comp|56=accept-comp|34=3|57=fix|52=
|
|
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=0000075|35=5|49=accept-comp|56=init-comp|34=2|57=fix|52=
|
|
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=0000075|35=5|49=init-comp|56=accept-comp|34=0|57=fix|52=
|
|
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=0000075|35=5|49=accept-comp|56=init-comp|34=2|57=fix|52=
|
|
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=0000075|35=5|49=accept-comp|56=init-comp|34=3|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=
|
|
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=0000075|35=5|49=accept-comp|56=init-comp|34=3|57=fix|52=
|
|
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=0000075|35=5|49=accept-comp|56=init-comp|34=3|57=fix|52=
|
|
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=0000075|35=5|49=accept-comp|56=init-comp|34=2|57=fix|52=
|
|
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=0000075|35=5|49=accept-comp|56=init-comp|34=5|57=fix|52=
|
|
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=0000075|35=5|49=accept-comp|56=init-comp|34=3|57=fix|52=
|
|
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=0000075|35=5|49=accept-comp|56=init-comp|34=2|57=fix|52=
|
|
1
|
+
8=FIX.4.4|9=0000117|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=20260808-20:58:34.946|98=0|108=30|141=Y|553=js-client|554=pwd-client|10=114|
|
|
2
|
+
8=FIX.4.4|9=0000117|35=A|49=accept-comp|56=init-comp|34=1|57=fix|52=20260808-20:58:34.950|98=0|108=30|141=Y|553=js-server|554=pwd-server|10=157|
|
|
3
|
+
8=FIX.4.4|9=0000079|35=2|49=init-comp|56=accept-comp|34=2|57=fix|52=20260808-20:58:34.951|7=1|16=1|10=245|
|
|
4
|
+
8=FIX.4.4|9=0000112|35=4|49=accept-comp|56=init-comp|34=1|57=fix|43=Y|52=20260808-20:58:34.955|122=20260808-20:58:34.955|123=Y|36=2|10=129|
|
|
5
|
+
8=FIX.4.4|9=0000075|35=5|49=accept-comp|56=init-comp|34=2|57=fix|52=20260808-20:58:36.954|58=5|10=226|
|
|
6
|
+
8=FIX.4.4|9=0000117|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=20260808-20:58:39.691|98=0|108=30|141=Y|553=js-client|554=pwd-client|10=116|
|
|
7
|
+
8=FIX.4.4|9=0000117|35=A|49=accept-comp|56=init-comp|34=1|57=fix|52=20260808-20:58:39.692|98=0|108=30|141=Y|553=js-server|554=pwd-server|10=165|
|
|
8
|
+
8=FIX.4.4|9=0000079|35=2|49=init-comp|56=accept-comp|34=2|57=fix|52=20260808-20:58:39.693|7=1|16=0|10=252|
|
|
9
|
+
8=FIX.4.4|9=0000112|35=4|49=accept-comp|56=init-comp|34=1|57=fix|43=Y|52=20260808-20:58:39.695|122=20260808-20:58:39.695|123=Y|36=2|10=141|
|
|
10
|
+
8=FIX.4.4|9=0000075|35=5|49=accept-comp|56=init-comp|34=2|57=fix|52=20260808-20:58:41.696|58=5|10=225|
|
|
11
|
+
8=FIX.4.4|9=0000117|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=20260808-20:58:44.131|98=0|108=30|141=Y|553=js-client|554=pwd-client|10=101|
|
|
12
|
+
8=FIX.4.4|9=0000117|35=A|49=accept-comp|56=init-comp|34=1|57=fix|52=20260808-20:58:44.132|98=0|108=30|141=Y|553=js-server|554=pwd-server|10=150|
|
|
13
|
+
8=FIX.4.4|9=0000117|35=A|49=init-comp|56=accept-comp|34=2|57=fix|52=20260808-20:58:44.133|98=0|108=30|141=Y|553=js-client|554=pwd-client|10=104|
|
|
14
|
+
8=FIX.4.4|9=0000117|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=20260808-20:58:44.611|98=0|108=30|141=Y|553=js-client|554=pwd-client|10=104|
|
|
15
|
+
8=FIX.4.4|9=0000117|35=A|49=accept-comp|56=init-comp|34=1|57=fix|52=20260808-20:58:44.613|98=0|108=30|141=Y|553=js-server|554=pwd-server|10=154|
|
|
16
|
+
8=FIX.4.4|9=0000075|35=5|49=accept-comp|56=init-comp|34=2|57=fix|52=20260808-20:58:45.615|58=5|10=220|
|
|
17
|
+
8=FIX.4.4|9=0000075|35=5|49=init-comp|56=accept-comp|34=3|57=fix|52=20260808-20:58:46.134|58=5|10=218|
|
|
18
|
+
8=FIX.4.4|9=0000117|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=20260808-20:58:48.260|98=0|108=30|141=Y|553=js-client|554=pwd-client|10=108|
|
|
19
|
+
8=FIX.4.4|9=0000117|35=A|49=accept-comp|56=init-comp|34=1|57=fix|52=20260808-20:58:48.261|98=0|108=30|141=Y|553=js-server|554=pwd-server|10=157|
|
|
20
|
+
8=FIX.4.4|9=0000075|35=5|49=accept-comp|56=init-comp|34=2|57=fix|52=20260808-20:58:49.263|58=5|10=223|
|
|
21
|
+
8=FIX.4.4|9=0000117|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=20260808-20:58:51.951|98=0|108=30|141=Y|553=js-client|554=pwd-client|10=109|
|
|
22
|
+
8=FIX.4.4|9=0000117|35=A|49=accept-comp|56=init-comp|34=1|57=fix|52=20260808-20:58:51.953|98=0|108=30|141=Y|553=js-server|554=pwd-server|10=159|
|
|
23
|
+
8=FIX.4.4|9=0000075|35=5|49=init-comp|56=accept-comp|34=0|57=fix|52=20260808-20:58:52.954|58=5|10=222|
|
|
24
|
+
8=FIX.4.4|9=0000117|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=20260808-20:58:55.399|98=0|108=30|141=Y|553=js-client|554=pwd-client|10=119|
|
|
25
|
+
8=FIX.4.4|9=0000117|35=A|49=accept-comp|56=init-comp|34=5|57=fix|52=20260808-20:58:55.401|98=0|108=30|141=Y|553=js-server|554=pwd-server|10=155|
|
|
26
|
+
8=FIX.4.4|9=0000075|35=5|49=accept-comp|56=init-comp|34=2|57=fix|52=20260808-20:58:56.402|58=5|10=216|
|
|
27
|
+
8=FIX.4.4|9=0000110|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=20260808-20:58:58.834|98=0|141=Y|553=js-client|554=pwd-client|10=184|
|
|
28
|
+
8=FIX.4.4|9=0000125|35=3|49=accept-comp|56=init-comp|34=1|57=fix|52=20260808-20:58:58.835|45=1|372=A|373=1|58=msgType A missing required tag 108|10=018|
|
|
29
|
+
8=FIX.4.4|9=0000117|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=20260808-20:59:03.380|98=0|108=30|141=Y|553=js-client|554=pwd-client|10=103|
|
|
30
|
+
8=FIX.4.4|9=0000117|35=A|49=accept-comp|56=init-comp|34=1|57=fix|52=20260808-20:59:03.382|98=0|108=30|141=Y|553=js-server|554=pwd-server|10=153|
|
|
31
|
+
8=FIX.4.4|9=0000111|35=3|49=accept-comp|56=init-comp|34=2|57=fix|52=20260808-20:59:03.383|45=2|372=ZZ|373=11|58=msgType ZZ unknown|10=155|
|
|
32
|
+
8=FIX.4.4|9=0000075|35=5|49=accept-comp|56=init-comp|34=3|57=fix|52=20260808-20:59:05.385|58=5|10=222|
|
|
33
|
+
8=FIX.4.4|9=0000117|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=20260808-20:59:08.052|98=0|108=30|141=Y|553=js-client|554=pwd-client|10=104|
|
|
34
|
+
8=FIX.4.4|9=0000117|35=A|49=accept-comp|56=init-comp|34=1|57=fix|52=20260808-20:59:08.053|98=0|108=30|141=Y|553=js-server|554=pwd-server|10=153|
|
|
35
|
+
8=FIX.4.4|9=0000146|35=3|49=accept-comp|56=init-comp|34=2|57=fix|52=20260808-20:59:08.055|45=2|372=0|373=5|58=msgType 0 checksum failed. received = 95 computed = 143|10=077|
|
|
36
|
+
8=FIX.4.4|9=0000075|35=5|49=accept-comp|56=init-comp|34=3|57=fix|52=20260808-20:59:10.054|58=5|10=211|
|
|
37
|
+
8=FIX.4.4|9=0000117|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=20260808-20:59:12.052|98=0|108=30|141=Y|553=js-client|554=pwd-client|10=099|
|
|
38
|
+
8=FIX.4.4|9=0000117|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=20260808-20:59:16.510|98=0|108=30|141=Y|553=js-client|554=pwd-client|10=102|
|
|
39
|
+
8=FIX.4.4|9=0000117|35=A|49=accept-comp|56=init-comp|34=1|57=fix|52=20260808-20:59:16.511|98=0|108=30|141=Y|553=js-server|554=pwd-server|10=151|
|
|
40
|
+
8=FIX.4.4|9=0000145|35=3|49=accept-comp|56=init-comp|34=2|57=fix|52=20260808-20:59:16.513|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=20260808-20:59:18.513|58=5|10=219|
|
|
42
|
+
8=FIX.4.4|9=0000116|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=20260808-20:59:20.939|98=0|108=2|141=Y|553=js-client|554=pwd-client|10=062|
|
|
43
|
+
8=FIX.4.4|9=0000117|35=A|49=accept-comp|56=init-comp|34=1|57=fix|52=20260808-20:59:20.940|98=0|108=30|141=Y|553=js-server|554=pwd-server|10=152|
|
|
44
|
+
8=FIX.4.4|9=0000104|35=0|49=init-comp|56=accept-comp|34=2|57=fix|52=20260808-20:59:22.944|112=Sat, 08 Aug 2026 20:59:22 GMT|10=150|
|
|
45
|
+
8=FIX.4.4|9=0000104|35=0|49=init-comp|56=accept-comp|34=3|57=fix|52=20260808-20:59:24.946|112=Sat, 08 Aug 2026 20:59:24 GMT|10=157|
|
|
46
|
+
8=FIX.4.4|9=0000075|35=5|49=accept-comp|56=init-comp|34=2|57=fix|52=20260808-20:59:26.942|58=5|10=223|
|
|
47
|
+
8=FIX.4.4|9=0000117|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=20260808-20:59:29.381|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=20260808-20:59:29.382|98=0|108=2|141=Y|553=js-server|554=pwd-server|10=111|
|
|
49
|
+
8=FIX.4.4|9=0000104|35=0|49=accept-comp|56=init-comp|34=2|57=fix|52=20260808-20:59:31.386|112=Sat, 08 Aug 2026 20:59:31 GMT|10=150|
|
|
50
|
+
8=FIX.4.4|9=0000104|35=0|49=accept-comp|56=init-comp|34=3|57=fix|52=20260808-20:59:33.389|112=Sat, 08 Aug 2026 20:59:33 GMT|10=158|
|
|
51
|
+
8=FIX.4.4|9=0000104|35=0|49=accept-comp|56=init-comp|34=4|57=fix|52=20260808-20:59:35.392|112=Sat, 08 Aug 2026 20:59:35 GMT|10=157|
|
|
52
|
+
8=FIX.4.4|9=0000075|35=5|49=accept-comp|56=init-comp|34=5|57=fix|52=20260808-20:59:37.383|58=5|10=227|
|
|
53
|
+
8=FIX.4.4|9=0000116|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=20260808-20:59:39.996|98=0|108=2|141=Y|553=js-client|554=pwd-client|10=075|
|
|
54
|
+
8=FIX.4.4|9=0000116|35=A|49=accept-comp|56=init-comp|34=1|57=fix|52=20260808-20:59:39.997|98=0|108=5|141=Y|553=js-server|554=pwd-server|10=127|
|
|
55
|
+
8=FIX.4.4|9=0000104|35=0|49=init-comp|56=accept-comp|34=2|57=fix|52=20260808-20:59:42.000|112=Sat, 08 Aug 2026 20:59:42 GMT|10=137|
|
|
56
|
+
8=FIX.4.4|9=0000104|35=0|49=init-comp|56=accept-comp|34=3|57=fix|52=20260808-20:59:44.004|112=Sat, 08 Aug 2026 20:59:44 GMT|10=146|
|
|
57
|
+
8=FIX.4.4|9=0000104|35=0|49=accept-comp|56=init-comp|34=2|57=fix|52=20260808-20:59:45.004|112=Sat, 08 Aug 2026 20:59:45 GMT|10=147|
|
|
58
|
+
8=FIX.4.4|9=0000104|35=0|49=init-comp|56=accept-comp|34=4|57=fix|52=20260808-20:59:46.006|112=Sat, 08 Aug 2026 20:59:46 GMT|10=153|
|
|
59
|
+
8=FIX.4.4|9=0000075|35=5|49=accept-comp|56=init-comp|34=3|57=fix|52=20260808-20:59:47.999|58=5|10=239|
|
|
60
|
+
8=FIX.4.4|9=0000117|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=20260808-21:01:36.396|98=0|108=30|141=Y|553=js-client|554=pwd-client|10=104|
|
|
61
|
+
8=FIX.4.4|9=0000117|35=A|49=accept-comp|56=init-comp|34=1|57=fix|52=20260808-21:01:36.404|98=0|108=30|141=Y|553=js-server|554=pwd-server|10=142|
|
|
62
|
+
8=FIX.4.4|9=0000075|35=5|49=accept-comp|56=init-comp|34=2|57=fix|52=20260808-21:01:37.408|58=5|10=210|
|
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=0000075|35=5|49=init-comp|56=accept-comp|34=3|57=fix|52=
|
|
6
|
-
8=FIX.4.4|9=0000075|35=5|49=accept-comp|56=init-comp|34=2|57=fix|52=
|
|
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=0000075|35=5|49=init-comp|56=accept-comp|34=3|57=fix|52=
|
|
12
|
-
8=FIX.4.4|9=0000075|35=5|49=accept-comp|56=init-comp|34=2|57=fix|52=
|
|
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=0000075|35=5|49=init-comp|56=accept-comp|34=2|57=fix|52=
|
|
19
|
-
8=FIX.4.4|9=0000075|35=5|49=accept-comp|56=init-comp|34=2|57=fix|52=
|
|
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=0000075|35=5|49=init-comp|56=accept-comp|34=2|57=fix|52=
|
|
23
|
-
8=FIX.4.4|9=0000075|35=5|49=accept-comp|56=init-comp|34=2|57=fix|52=
|
|
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=0000075|35=5|49=init-comp|56=accept-comp|34=0|57=fix|52=
|
|
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=0000075|35=5|49=init-comp|56=accept-comp|34=2|57=fix|52=
|
|
30
|
-
8=FIX.4.4|9=0000075|35=5|49=accept-comp|56=init-comp|34=2|57=fix|52=
|
|
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=20260808-20:58:34.946|98=0|108=30|141=Y|553=js-client|554=pwd-client|10=114|
|
|
2
|
+
8=FIX.4.4|9=0000117|35=A|49=accept-comp|56=init-comp|34=1|57=fix|52=20260808-20:58:34.950|98=0|108=30|141=Y|553=js-server|554=pwd-server|10=157|
|
|
3
|
+
8=FIX.4.4|9=0000079|35=2|49=init-comp|56=accept-comp|34=2|57=fix|52=20260808-20:58:34.951|7=1|16=1|10=245|
|
|
4
|
+
8=FIX.4.4|9=0000112|35=4|49=accept-comp|56=init-comp|34=1|57=fix|43=Y|52=20260808-20:58:34.955|122=20260808-20:58:34.955|123=Y|36=2|10=129|
|
|
5
|
+
8=FIX.4.4|9=0000075|35=5|49=init-comp|56=accept-comp|34=3|57=fix|52=20260808-20:58:36.953|58=5|10=226|
|
|
6
|
+
8=FIX.4.4|9=0000075|35=5|49=accept-comp|56=init-comp|34=2|57=fix|52=20260808-20:58:36.954|58=5|10=226|
|
|
7
|
+
8=FIX.4.4|9=0000117|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=20260808-20:58:39.691|98=0|108=30|141=Y|553=js-client|554=pwd-client|10=116|
|
|
8
|
+
8=FIX.4.4|9=0000117|35=A|49=accept-comp|56=init-comp|34=1|57=fix|52=20260808-20:58:39.692|98=0|108=30|141=Y|553=js-server|554=pwd-server|10=165|
|
|
9
|
+
8=FIX.4.4|9=0000079|35=2|49=init-comp|56=accept-comp|34=2|57=fix|52=20260808-20:58:39.693|7=1|16=0|10=252|
|
|
10
|
+
8=FIX.4.4|9=0000112|35=4|49=accept-comp|56=init-comp|34=1|57=fix|43=Y|52=20260808-20:58:39.695|122=20260808-20:58:39.695|123=Y|36=2|10=141|
|
|
11
|
+
8=FIX.4.4|9=0000075|35=5|49=init-comp|56=accept-comp|34=3|57=fix|52=20260808-20:58:41.695|58=5|10=225|
|
|
12
|
+
8=FIX.4.4|9=0000075|35=5|49=accept-comp|56=init-comp|34=2|57=fix|52=20260808-20:58:41.696|58=5|10=225|
|
|
13
|
+
8=FIX.4.4|9=0000117|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=20260808-20:58:44.131|98=0|108=30|141=Y|553=js-client|554=pwd-client|10=101|
|
|
14
|
+
8=FIX.4.4|9=0000117|35=A|49=accept-comp|56=init-comp|34=1|57=fix|52=20260808-20:58:44.132|98=0|108=30|141=Y|553=js-server|554=pwd-server|10=150|
|
|
15
|
+
8=FIX.4.4|9=0000117|35=A|49=init-comp|56=accept-comp|34=2|57=fix|52=20260808-20:58:44.133|98=0|108=30|141=Y|553=js-client|554=pwd-client|10=104|
|
|
16
|
+
8=FIX.4.4|9=0000117|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=20260808-20:58:44.611|98=0|108=30|141=Y|553=js-client|554=pwd-client|10=104|
|
|
17
|
+
8=FIX.4.4|9=0000117|35=A|49=accept-comp|56=init-comp|34=1|57=fix|52=20260808-20:58:44.613|98=0|108=30|141=Y|553=js-server|554=pwd-server|10=154|
|
|
18
|
+
8=FIX.4.4|9=0000075|35=5|49=init-comp|56=accept-comp|34=2|57=fix|52=20260808-20:58:45.614|58=5|10=219|
|
|
19
|
+
8=FIX.4.4|9=0000075|35=5|49=accept-comp|56=init-comp|34=2|57=fix|52=20260808-20:58:45.615|58=5|10=220|
|
|
20
|
+
8=FIX.4.4|9=0000117|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=20260808-20:58:48.260|98=0|108=30|141=Y|553=js-client|554=pwd-client|10=108|
|
|
21
|
+
8=FIX.4.4|9=0000117|35=A|49=accept-comp|56=init-comp|34=1|57=fix|52=20260808-20:58:48.261|98=0|108=30|141=Y|553=js-server|554=pwd-server|10=157|
|
|
22
|
+
8=FIX.4.4|9=0000075|35=5|49=init-comp|56=accept-comp|34=2|57=fix|52=20260808-20:58:49.262|58=5|10=222|
|
|
23
|
+
8=FIX.4.4|9=0000075|35=5|49=accept-comp|56=init-comp|34=2|57=fix|52=20260808-20:58:49.263|58=5|10=223|
|
|
24
|
+
8=FIX.4.4|9=0000117|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=20260808-20:58:51.951|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=1|57=fix|52=20260808-20:58:51.953|98=0|108=30|141=Y|553=js-server|554=pwd-server|10=159|
|
|
26
|
+
8=FIX.4.4|9=0000075|35=5|49=init-comp|56=accept-comp|34=0|57=fix|52=20260808-20:58:52.954|58=5|10=222|
|
|
27
|
+
8=FIX.4.4|9=0000117|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=20260808-20:58:55.399|98=0|108=30|141=Y|553=js-client|554=pwd-client|10=119|
|
|
28
|
+
8=FIX.4.4|9=0000117|35=A|49=accept-comp|56=init-comp|34=5|57=fix|52=20260808-20:58:55.401|98=0|108=30|141=Y|553=js-server|554=pwd-server|10=155|
|
|
29
|
+
8=FIX.4.4|9=0000075|35=5|49=init-comp|56=accept-comp|34=2|57=fix|52=20260808-20:58:56.401|58=5|10=215|
|
|
30
|
+
8=FIX.4.4|9=0000075|35=5|49=accept-comp|56=init-comp|34=2|57=fix|52=20260808-20:58:56.402|58=5|10=216|
|
|
31
|
+
8=FIX.4.4|9=0000110|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=20260808-20:58:58.834|98=0|141=Y|553=js-client|554=pwd-client|10=184|
|
|
32
|
+
8=FIX.4.4|9=0000125|35=3|49=accept-comp|56=init-comp|34=1|57=fix|52=20260808-20:58:58.835|45=1|372=A|373=1|58=msgType A missing required tag 108|10=018|
|
|
33
|
+
8=FIX.4.4|9=0000117|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=20260808-20:59:03.380|98=0|108=30|141=Y|553=js-client|554=pwd-client|10=103|
|
|
34
|
+
8=FIX.4.4|9=0000117|35=A|49=accept-comp|56=init-comp|34=1|57=fix|52=20260808-20:59:03.382|98=0|108=30|141=Y|553=js-server|554=pwd-server|10=153|
|
|
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=0000075|35=5|49=init-comp|56=accept-comp|34=3|57=fix|52=
|
|
38
|
-
8=FIX.4.4|9=0000075|35=5|49=accept-comp|56=init-comp|34=3|57=fix|52=
|
|
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=20260808-20:59:03.383|45=2|372=ZZ|373=11|58=msgType ZZ unknown|10=155|
|
|
37
|
+
8=FIX.4.4|9=0000075|35=5|49=init-comp|56=accept-comp|34=3|57=fix|52=20260808-20:59:05.384|58=5|10=221|
|
|
38
|
+
8=FIX.4.4|9=0000075|35=5|49=accept-comp|56=init-comp|34=3|57=fix|52=20260808-20:59:05.385|58=5|10=222|
|
|
39
|
+
8=FIX.4.4|9=0000117|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=20260808-20:59:08.052|98=0|108=30|141=Y|553=js-client|554=pwd-client|10=104|
|
|
40
|
+
8=FIX.4.4|9=0000117|35=A|49=accept-comp|56=init-comp|34=1|57=fix|52=20260808-20:59:08.053|98=0|108=30|141=Y|553=js-server|554=pwd-server|10=153|
|
|
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=0000075|35=5|49=init-comp|56=accept-comp|34=3|57=fix|52=
|
|
44
|
-
8=FIX.4.4|9=0000075|35=5|49=accept-comp|56=init-comp|34=3|57=fix|52=
|
|
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=20260808-20:59:08.055|45=2|372=0|373=5|58=msgType 0 checksum failed. received = 95 computed = 143|10=077|
|
|
43
|
+
8=FIX.4.4|9=0000075|35=5|49=init-comp|56=accept-comp|34=3|57=fix|52=20260808-20:59:10.054|58=5|10=211|
|
|
44
|
+
8=FIX.4.4|9=0000075|35=5|49=accept-comp|56=init-comp|34=3|57=fix|52=20260808-20:59:10.054|58=5|10=211|
|
|
45
|
+
8=FIX.4.4|9=0000117|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=20260808-20:59:16.510|98=0|108=30|141=Y|553=js-client|554=pwd-client|10=102|
|
|
46
|
+
8=FIX.4.4|9=0000117|35=A|49=accept-comp|56=init-comp|34=1|57=fix|52=20260808-20:59:16.511|98=0|108=30|141=Y|553=js-server|554=pwd-server|10=151|
|
|
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=0000075|35=5|49=init-comp|56=accept-comp|34=3|57=fix|52=
|
|
50
|
-
8=FIX.4.4|9=0000075|35=5|49=accept-comp|56=init-comp|34=3|57=fix|52=
|
|
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=0000075|35=5|49=init-comp|56=accept-comp|34=4|57=fix|52=
|
|
56
|
-
8=FIX.4.4|9=0000075|35=5|49=accept-comp|56=init-comp|34=2|57=fix|52=
|
|
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=0000075|35=5|49=init-comp|56=accept-comp|34=2|57=fix|52=
|
|
63
|
-
8=FIX.4.4|9=0000075|35=5|49=accept-comp|56=init-comp|34=5|57=fix|52=
|
|
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=0000075|35=5|49=init-comp|56=accept-comp|34=5|57=fix|52=
|
|
71
|
-
8=FIX.4.4|9=0000075|35=5|49=accept-comp|56=init-comp|34=3|57=fix|52=
|
|
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=0000075|35=5|49=init-comp|56=accept-comp|34=2|57=fix|52=
|
|
75
|
-
8=FIX.4.4|9=0000075|35=5|49=accept-comp|56=init-comp|34=2|57=fix|52=
|
|
48
|
+
8=FIX.4.4|9=0000145|35=3|49=accept-comp|56=init-comp|34=2|57=fix|52=20260808-20:59:16.513|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=20260808-20:59:18.512|58=5|10=218|
|
|
50
|
+
8=FIX.4.4|9=0000075|35=5|49=accept-comp|56=init-comp|34=3|57=fix|52=20260808-20:59:18.513|58=5|10=219|
|
|
51
|
+
8=FIX.4.4|9=0000116|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=20260808-20:59:20.939|98=0|108=2|141=Y|553=js-client|554=pwd-client|10=062|
|
|
52
|
+
8=FIX.4.4|9=0000117|35=A|49=accept-comp|56=init-comp|34=1|57=fix|52=20260808-20:59:20.940|98=0|108=30|141=Y|553=js-server|554=pwd-server|10=152|
|
|
53
|
+
8=FIX.4.4|9=0000104|35=0|49=init-comp|56=accept-comp|34=2|57=fix|52=20260808-20:59:22.944|112=Sat, 08 Aug 2026 20:59:22 GMT|10=150|
|
|
54
|
+
8=FIX.4.4|9=0000104|35=0|49=init-comp|56=accept-comp|34=3|57=fix|52=20260808-20:59:24.946|112=Sat, 08 Aug 2026 20:59:24 GMT|10=157|
|
|
55
|
+
8=FIX.4.4|9=0000075|35=5|49=init-comp|56=accept-comp|34=4|57=fix|52=20260808-20:59:26.941|58=5|10=224|
|
|
56
|
+
8=FIX.4.4|9=0000075|35=5|49=accept-comp|56=init-comp|34=2|57=fix|52=20260808-20:59:26.942|58=5|10=223|
|
|
57
|
+
8=FIX.4.4|9=0000117|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=20260808-20:59:29.381|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=20260808-20:59:29.382|98=0|108=2|141=Y|553=js-server|554=pwd-server|10=111|
|
|
59
|
+
8=FIX.4.4|9=0000104|35=0|49=accept-comp|56=init-comp|34=2|57=fix|52=20260808-20:59:31.386|112=Sat, 08 Aug 2026 20:59:31 GMT|10=150|
|
|
60
|
+
8=FIX.4.4|9=0000104|35=0|49=accept-comp|56=init-comp|34=3|57=fix|52=20260808-20:59:33.389|112=Sat, 08 Aug 2026 20:59:33 GMT|10=158|
|
|
61
|
+
8=FIX.4.4|9=0000104|35=0|49=accept-comp|56=init-comp|34=4|57=fix|52=20260808-20:59:35.392|112=Sat, 08 Aug 2026 20:59:35 GMT|10=157|
|
|
62
|
+
8=FIX.4.4|9=0000075|35=5|49=init-comp|56=accept-comp|34=2|57=fix|52=20260808-20:59:37.382|58=5|10=223|
|
|
63
|
+
8=FIX.4.4|9=0000075|35=5|49=accept-comp|56=init-comp|34=5|57=fix|52=20260808-20:59:37.383|58=5|10=227|
|
|
64
|
+
8=FIX.4.4|9=0000116|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=20260808-20:59:39.996|98=0|108=2|141=Y|553=js-client|554=pwd-client|10=075|
|
|
65
|
+
8=FIX.4.4|9=0000116|35=A|49=accept-comp|56=init-comp|34=1|57=fix|52=20260808-20:59:39.997|98=0|108=5|141=Y|553=js-server|554=pwd-server|10=127|
|
|
66
|
+
8=FIX.4.4|9=0000104|35=0|49=init-comp|56=accept-comp|34=2|57=fix|52=20260808-20:59:42.000|112=Sat, 08 Aug 2026 20:59:42 GMT|10=137|
|
|
67
|
+
8=FIX.4.4|9=0000104|35=0|49=init-comp|56=accept-comp|34=3|57=fix|52=20260808-20:59:44.004|112=Sat, 08 Aug 2026 20:59:44 GMT|10=146|
|
|
68
|
+
8=FIX.4.4|9=0000104|35=0|49=accept-comp|56=init-comp|34=2|57=fix|52=20260808-20:59:45.004|112=Sat, 08 Aug 2026 20:59:45 GMT|10=147|
|
|
69
|
+
8=FIX.4.4|9=0000104|35=0|49=init-comp|56=accept-comp|34=4|57=fix|52=20260808-20:59:46.006|112=Sat, 08 Aug 2026 20:59:46 GMT|10=153|
|
|
70
|
+
8=FIX.4.4|9=0000075|35=5|49=init-comp|56=accept-comp|34=5|57=fix|52=20260808-20:59:47.998|58=5|10=240|
|
|
71
|
+
8=FIX.4.4|9=0000075|35=5|49=accept-comp|56=init-comp|34=3|57=fix|52=20260808-20:59:47.999|58=5|10=239|
|
|
72
|
+
8=FIX.4.4|9=0000117|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=20260808-21:01:36.396|98=0|108=30|141=Y|553=js-client|554=pwd-client|10=104|
|
|
73
|
+
8=FIX.4.4|9=0000117|35=A|49=accept-comp|56=init-comp|34=1|57=fix|52=20260808-21:01:36.404|98=0|108=30|141=Y|553=js-server|554=pwd-server|10=142|
|
|
74
|
+
8=FIX.4.4|9=0000075|35=5|49=init-comp|56=accept-comp|34=2|57=fix|52=20260808-21:01:37.406|58=5|10=208|
|
|
75
|
+
8=FIX.4.4|9=0000075|35=5|49=accept-comp|56=init-comp|34=2|57=fix|52=20260808-21:01:37.408|58=5|10=210|
|
package/package.json
CHANGED
|
@@ -90,6 +90,8 @@ export class AsciiEncoder extends MsgEncoder {
|
|
|
90
90
|
const field = set.localNameToField.get(current)
|
|
91
91
|
if (field) {
|
|
92
92
|
a[j++] = field
|
|
93
|
+
} else if (this.onUnknownField && !AsciiEncoder.expectedMiss(set, current)) {
|
|
94
|
+
this.onUnknownField(current, set.name)
|
|
93
95
|
}
|
|
94
96
|
return a
|
|
95
97
|
}, new Array(keys.length))
|
|
@@ -97,6 +99,24 @@ export class AsciiEncoder extends MsgEncoder {
|
|
|
97
99
|
return fields
|
|
98
100
|
}
|
|
99
101
|
|
|
102
|
+
/**
|
|
103
|
+
* Keys that legitimately fail to resolve against this set, so reporting them would
|
|
104
|
+
* be noise: the header and trailer are encoded separately by the transmitter, and
|
|
105
|
+
* a repeating group may be keyed by its count field rather than the group name -
|
|
106
|
+
* encodeInstances accepts either.
|
|
107
|
+
*/
|
|
108
|
+
private static expectedMiss (set: IContainedSet, name: string): boolean {
|
|
109
|
+
if (name === 'StandardHeader' || name === 'StandardTrailer') {
|
|
110
|
+
return true
|
|
111
|
+
}
|
|
112
|
+
for (const group of set.groups.values()) {
|
|
113
|
+
if ((group as any).noOfField?.name === name) {
|
|
114
|
+
return true
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
return false
|
|
118
|
+
}
|
|
119
|
+
|
|
100
120
|
private encodeInstances (o: ILooseObject, gf: ContainedGroupField): void {
|
|
101
121
|
const noOfField: SimpleFieldDefinition | null = gf.definition.noOfField
|
|
102
122
|
if (!noOfField) return
|
|
@@ -3,7 +3,19 @@ import { FixDefinitions } from '../dictionary/definition'
|
|
|
3
3
|
import { IContainedSet } from '../dictionary/contained'
|
|
4
4
|
import * as events from 'events'
|
|
5
5
|
|
|
6
|
+
export type UnknownFieldHandler = (fieldName: string, setName: string) => void
|
|
7
|
+
|
|
6
8
|
export abstract class MsgEncoder extends events.EventEmitter {
|
|
9
|
+
/**
|
|
10
|
+
* Called when an object carries a key the set being encoded has no field for.
|
|
11
|
+
* The key is dropped - it has no tag, so there is nothing to write - and without
|
|
12
|
+
* this hook that happens in complete silence, which is the single most confusing
|
|
13
|
+
* thing about adding a bespoke field. Every report of "my tag never goes on the
|
|
14
|
+
* wire" (issues #93, #39, #96) is this, and the fix is nearly always a dictionary
|
|
15
|
+
* that does not declare the field on that message.
|
|
16
|
+
*/
|
|
17
|
+
public onUnknownField: UnknownFieldHandler | null = null
|
|
18
|
+
|
|
7
19
|
protected constructor (public readonly definitions: FixDefinitions) {
|
|
8
20
|
super()
|
|
9
21
|
}
|