jspurefix 5.10.4 → 5.10.5

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/ATDL_PLAN.md CHANGED
@@ -1,12 +1,12 @@
1
1
  # FIXatdl renderer and end-to-end test harness
2
2
 
3
- Design notes from 2026-08-08. Nothing is built yet. This exists so the next session
4
- can start from the thinking rather than redo it.
3
+ Design notes from 2026-08-08, fixtures added 2026-08-09. Nothing is built yet. This
4
+ exists so the next session can start from the thinking rather than redo it.
5
5
 
6
- **First decision to settle:** this is not jspurefix work and should almost certainly
7
- live in its own repository (`jspf-atdl`, or similar). The plan is parked here because
8
- it is where the conversation happened and because the back-end half does use the
9
- engine. Move it when the code starts.
6
+ **Where this lives:** staying in jspurefix for now (decided 2026-08-09). It is not
7
+ engine work and will want its own repository once there is code, but the back-end half
8
+ is a jspurefix acceptor and there is no benefit to a second repository holding only a
9
+ markdown file.
10
10
 
11
11
  ---
12
12
 
@@ -15,7 +15,7 @@ engine. Move it when the code starts.
15
15
  A broker publishes a FIXatdl document per algorithm: an XML definition of its
16
16
  parameters and the order ticket used to fill them in. An EMS — Bloomberg EMSX,
17
17
  Flextrade, Portware, Fidessa, ITG Triton — renders the ticket from that document, and
18
- the values map onto FIX tags, usually the `NoStrategyParameters` group.
18
+ the values map onto FIX tags.
19
19
 
20
20
  The observed pain, in more than one shop: getting a definition rendered is cobbled
21
21
  together, and **you cannot tell whether a definition is sound until a vendor renders
@@ -98,12 +98,80 @@ is FIXML-shaped and is not a good fit for this.
98
98
 
99
99
  ~1,500 lines of interpreter, zero runtime dependencies.
100
100
 
101
+ ## Fixtures
102
+
103
+ The expression engine is only as good as what it is tested against, and this is the
104
+ part most likely to be underestimated. Real broker documents vary enormously and most
105
+ are proprietary — the user has worked at a bank where every algo was defined in ATDL,
106
+ none of it publishable.
107
+
108
+ ### routefire/rf-fix-atdl
109
+
110
+ `rf_strategies-v1.1.xml` — the first public fixture, 184 lines, 7 strategies (TWAP,
111
+ VWAP, PVOL, ISO, FAST, ULMT, RLMT).
112
+
113
+ What it settles:
114
+
115
+ - **Version is 1.1.** Namespaces are `.../FIXatdl-1-1/Core`, `/Validation`, `/Layout`,
116
+ `/Flow`, `/Timezones`. Target 1.1 and stop worrying about it.
117
+ - **Strategy identification is an attribute of `<Strategies>`:**
118
+ `strategyIdentifierTag="847"` and `versionIdentifierTag="7621"`, with each
119
+ `<Strategy>` carrying `wireValue`. So the algorithm is named on the wire in tag 847
120
+ and the parameters go elsewhere.
121
+ - **Parameters carry their own `fixTag`** — `126`, `168`, and customs `8001`–`8004`
122
+ here. This resolves the earlier open question about `NoStrategyParameters`: the
123
+ mapping is *data driven per parameter*, not a per-broker configuration switch. Build
124
+ it from the `fixTag` attribute; treat the strategy-parameters group as a second
125
+ mode for documents that omit `fixTag`, not as the default.
126
+ - Useful attributes in the wild: `use="required|optional"`, `minValue`/`maxValue`,
127
+ `localMktTz`, `initValue`, `initValueMode`, `increment`.
128
+
129
+ **What it does not exercise, which matters more.** This file is a skeleton — good for
130
+ proving the parser, nearly useless for proving the interpreter:
131
+
132
+ | | |
133
+ |---|---|
134
+ | `StateRule` | **none at all** — zero occurrences |
135
+ | Control types | only `Clock_t`, `SingleSpinner_t`, `TextField_t` |
136
+ | Parameter types | only `Float_t`, `Int_t`, `UTCTimestamp_t` |
137
+ | `EnumPair` | none — so no dropdowns, no radio groups, no checkboxes |
138
+ | Validation | two `val:StrategyEdit`, each a single `val:Edit`, operator `GT` only |
139
+ | `logicOperator` / `editRef` | none — no AND/OR, no reusable named edits |
140
+ | `flow:` | namespace declared, never used |
141
+
142
+ So it will not tell us whether the hard half is right. Enable/disable/visibility logic
143
+ is entirely absent, and validation never gets beyond one field-to-field comparison.
144
+
145
+ ### What a representative fixture needs
146
+
147
+ Worth building by hand from experience rather than waiting to find one. Aim to cover:
148
+
149
+ - `StateRule` driving `enabled`, `visible` and value assignment, keyed off another
150
+ control's value
151
+ - a `StateRule` chain — B depends on A, C depends on B — to prove evaluation order and
152
+ catch cycles
153
+ - `DropDownList_t` and `RadioButtonList_t` with `EnumPair` (`wireValue` distinct from
154
+ `uiRep`, which is where renderers commonly go wrong)
155
+ - `CheckBox_t` and its `checkedEnumRef` / `uncheckedEnumRef`
156
+ - `val:Edit` with `logicOperator="AND"` / `"OR"` and nested edits
157
+ - `val:Edit` comparing against a literal `value=` as well as `field2=`
158
+ - a named `<val:Edit id="...">` referenced by `editRef`, since reuse is where scoping
159
+ bugs live
160
+ - `use="required"` interacting with a control that a `StateRule` has disabled — what
161
+ should validation do then? Real documents disagree, and vendors disagree with each
162
+ other
163
+ - a deliberately broken document, so the tool's error reporting is exercised too
164
+
101
165
  ## Open questions for next session
102
166
 
103
- 1. Own repository or a folder here? (Recommendation: own repository.)
104
- 2. Which real ATDL documents can be used as test fixtures? The expression engine is
105
- only as good as what it is tested against, and broker-published files vary a lot.
106
- 3. Which FIXatdl version to target. 1.1 is the one in widespread use; confirm before
107
- writing the parser rather than after.
108
- 4. How strategy parameters map onto the outbound order — the `NoStrategyParameters`
109
- group versus direct custom tags — likely needs to be configurable per broker.
167
+ 1. ~~Own repository or a folder here?~~ Settled: stays here for now.
168
+ 2. ~~Which FIXatdl version?~~ Settled: 1.1.
169
+ 3. ~~How do parameters map onto the order?~~ Settled: per-parameter `fixTag`, with the
170
+ strategy-parameters group as a fallback mode.
171
+ 4. Can any further public documents be found, or is the hand-built fixture above the
172
+ realistic path? The user has significant algo trading experience and can produce
173
+ something representative — that is likely to be worth more than another public file
174
+ of the routefire kind.
175
+ 5. What does the harness do when a `StateRule` disables a `required` parameter? Decide
176
+ deliberately and document it, because it is the sort of thing that differs between
177
+ EMSs and is exactly what the tool exists to surface.
@@ -19,7 +19,7 @@ const mathjs_1 = require("mathjs");
19
19
  const tsyringe_1 = require("tsyringe");
20
20
  const di_tokens_1 = require("../runtime/di-tokens");
21
21
  let ElasticBuffer = ElasticBuffer_1 = class ElasticBuffer {
22
- constructor(size = 6 * 1024, returnTo = 6 * 1024) {
22
+ constructor(size = 6 * 1024, returnTo = 64 * 1024) {
23
23
  this.size = size;
24
24
  this.returnTo = returnTo;
25
25
  this.ptr = 0;
@@ -50,7 +50,7 @@ let ElasticBuffer = ElasticBuffer_1 = class ElasticBuffer {
50
50
  }
51
51
  setPos(ptr) {
52
52
  const r = this.ptr;
53
- if (ptr >= 0 && ptr <= this.size) {
53
+ if (ptr >= 0 && ptr <= this.buffer.length) {
54
54
  this.ptr = ptr;
55
55
  }
56
56
  return r;
@@ -130,7 +130,7 @@ let ElasticBuffer = ElasticBuffer_1 = class ElasticBuffer {
130
130
  const shrink = this.stretched > this.returnTo;
131
131
  if (shrink) {
132
132
  this.buffer = Buffer.allocUnsafe(this.returnTo);
133
- this.stretched = this.size;
133
+ this.stretched = this.returnTo;
134
134
  }
135
135
  return shrink;
136
136
  }
@@ -1 +1 @@
1
- {"version":3,"file":"elastic-buffer.js","sourceRoot":"","sources":["../../src/buffer/elastic-buffer.ts"],"names":[],"mappings":"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","sourcesContent":["import { AsciiChars } from './ascii/ascii-chars'\nimport { format } from 'mathjs'\nimport { inject, injectable } from 'tsyringe'\nimport { DITokens } from '../runtime/di-tokens'\n\n@injectable()\nexport class ElasticBuffer {\n private buffer: Buffer\n private ptr: number = 0\n private stretched: number\n\n constructor (@inject(DITokens.elasticBufferSize) public readonly size: number = 6 * 1024,\n @inject(DITokens.elasticBufferReturnSize) public readonly returnTo: number = 6 * 1024) {\n this.size = Math.max(1, this.size)\n this.buffer = Buffer.allocUnsafe(this.size)\n this.returnTo = Math.max(this.size, this.returnTo)\n this.stretched = this.size\n }\n\n private static precisionRound (n: number, precision: number): number {\n const factor: number = Math.pow(10, precision)\n return Math.round(n * factor) / factor\n }\n\n private static HowManyDigits (v: number): number {\n v = Math.abs(v)\n let digits: number = 0\n let w: number = v\n while (w > 0) {\n ++digits\n w = Math.floor(w / 10)\n }\n return Math.max(digits, 1)\n }\n\n public currentSize (): number {\n return this.stretched\n }\n\n public getPos (): number {\n return this.ptr\n }\n\n public setPos (ptr: number): number {\n const r = this.ptr\n if (ptr >= 0 && ptr <= this.size) {\n this.ptr = ptr\n }\n return r\n }\n\n public get (pos: number): number {\n return this.buffer[pos]\n }\n\n public writeBoolean (v: boolean): number {\n this.writeChar(v ? AsciiChars.Y : AsciiChars.N)\n return this.ptr\n }\n\n public switchChar (c: number): number {\n this.buffer[this.ptr - 1] = c\n return this.ptr\n }\n\n public saveChar (c: number): number {\n this.buffer[this.ptr++] = c\n return this.ptr\n }\n\n public writeChar (c: number): number {\n if (c > 255) throw new Error(`can't write ${c} to a byte`)\n this.checkGrowBuffer(1)\n this.buffer[this.ptr++] = c\n return this.ptr\n }\n\n public writeString (s: string): number {\n const begin = this.ptr\n this.checkGrowBuffer(s.length)\n const buffer = this.buffer\n this.ptr += buffer.write(s, begin, s.length, 'ascii')\n return this.ptr\n }\n\n public writeBuffer (v: Buffer): number {\n const begin = this.ptr\n this.checkGrowBuffer(v.length)\n const buffer = this.buffer\n const srcLen: number = v.length\n this.ptr += v.copy(buffer, begin, 0, srcLen)\n return this.ptr\n }\n\n public writeWholeNumber (n: number): number {\n const digits: number = ElasticBuffer.HowManyDigits(n)\n let reserve = digits\n const sign: number = Math.sign(n)\n let p: number = Math.pow(10, digits - 1)\n let v: number = Math.abs(n)\n if (sign < 0) {\n reserve++\n }\n this.checkGrowBuffer(reserve)\n const buffer = this.buffer\n if (sign < 0) {\n buffer[this.ptr++] = AsciiChars.Minus\n }\n while (p >= 1) {\n const d: number = Math.floor(v / p)\n v -= d * p\n p /= 10\n buffer[this.ptr++] = AsciiChars.Zero + d\n }\n\n return this.ptr\n }\n\n public writeNumber (v: number, places: number = 13): number {\n const rounded: number = Math.floor(v)\n const fraction: number = ElasticBuffer.precisionRound(v - rounded, places)\n if (fraction === 0) {\n // integer\n return this.writeWholeNumber(v)\n } else {\n // decimal with fraction turn to string\n const s: string = format(v, { notation: 'fixed' })\n return this.writeString(s)\n }\n }\n\n public reset (): boolean {\n this.ptr = 0\n const shrink = this.stretched > this.returnTo\n if (shrink) {\n this.buffer = Buffer.allocUnsafe(this.returnTo)\n this.stretched = this.size\n }\n return shrink\n }\n\n public slice (): Buffer {\n return this.buffer.subarray(0, this.ptr)\n }\n\n public copy (): Buffer {\n const m = Buffer.alloc(this.ptr)\n this.buffer.copy(m, 0, 0, this.ptr)\n return m\n }\n\n public clone (): ElasticBuffer {\n const cloned = new ElasticBuffer(this.ptr)\n this.buffer.copy(cloned.buffer, 0, 0, this.ptr)\n cloned.setPos(this.ptr)\n return cloned\n }\n\n public writePaddedHundreds (v: number): number {\n if (v > 999) throw new Error(`can't write ${v} as hundreds padding`)\n this.checkGrowBuffer(3)\n const buffer = this.buffer\n const zero: number = AsciiChars.Zero\n const units: number = v % 10 + zero\n v = v / 10\n const tens: number = v % 10 + zero\n v = v / 10\n buffer[this.ptr++] = v % 10 + zero\n buffer[this.ptr++] = tens\n buffer[this.ptr++] = units\n return this.ptr\n }\n\n public writePaddedTensUnits (v: number): number {\n if (v > 99) throw new Error(`can't write ${v} as hundreds padding`)\n this.checkGrowBuffer(2)\n const buffer = this.buffer\n const zero: number = AsciiChars.Zero\n const units: number = v % 10 + zero\n v = v / 10\n buffer[this.ptr++] = v % 10 + zero\n buffer[this.ptr++] = units\n return this.ptr\n }\n\n public patchPaddedNumberAtPos (ptr: number, numToWrite: number, padding: number): void {\n let digits: number = ElasticBuffer.HowManyDigits(numToWrite)\n const saved: number = this.ptr\n this.ptr = ptr\n const buffer = this.buffer\n while (digits++ < padding) {\n buffer[this.ptr++] = AsciiChars.Zero\n }\n this.writeWholeNumber(numToWrite)\n this.ptr = saved\n }\n\n public toString (ptr: number = this.ptr): string {\n return this.buffer.toString('ascii', 0, ptr)\n }\n\n public checksum (ptr: number = this.ptr): number {\n const cks: number = this.sum(ptr)\n return cks % 256\n }\n\n public sum (ptr: number = this.ptr): number {\n let total: number = 0\n ptr = Math.min(ptr, this.ptr)\n const buffer = this.buffer\n for (let idx: number = 0; idx < ptr; idx++) {\n total += buffer[idx]\n }\n return total\n }\n\n public getWholeNumber (start: number, vend: number): number {\n const buffer = this.buffer\n let sign = 1\n let raised = vend - start\n switch (buffer[start]) {\n case AsciiChars.Minus: {\n --raised\n sign = -1\n ++start\n break\n }\n case AsciiChars.Plus: {\n --raised\n ++start\n break\n }\n }\n let i: number = Math.pow(10, raised)\n let num: number = 0\n let scan: number = start\n\n while (scan <= vend) {\n const p: number = buffer[scan++]\n const d: number = p - AsciiChars.Zero\n num += d * i\n i /= 10\n }\n\n return num * sign\n }\n\n public getString (start: number, end: number): string {\n return this.buffer.toString('ascii', start, end)\n }\n\n public getBuffer (start: number, end: number): Buffer {\n return this.buffer.subarray(start, end)\n }\n\n public getBoolean (start: number): boolean {\n const b: number = this.buffer[start]\n return b === AsciiChars.Y\n }\n\n public getFloat (start: number, vend: number): number | null {\n let n: number = 0\n let digits: number = 0\n let dotPosition: number = 0\n const buffer = this.buffer\n let sign = 1\n switch (buffer[start]) {\n case AsciiChars.Minus: {\n sign = -1\n start++\n break\n }\n case AsciiChars.Plus: {\n start++\n break\n }\n }\n const len = vend - start\n let i: number = Math.pow(10, len - 1)\n for (let j: number = start; j <= vend; ++j) {\n const p: number = buffer[j]\n if (p >= AsciiChars.Zero && p <= AsciiChars.Nine) {\n const d: number = p - AsciiChars.Zero\n ++digits\n n += d * i\n i /= 10\n } else if (p === AsciiChars.Dot) {\n if (dotPosition > 0) {\n return null\n }\n dotPosition = j - start\n } else if (digits > 0) {\n return null\n }\n }\n const power: number = dotPosition === 0 ? 0 : len - dotPosition\n const raised = dotPosition === 0 ? 10 : Math.pow(10, -1 * power)\n const round = dotPosition === 0 ? 1 : Math.pow(10, power)\n const val = n * raised * sign\n return Math.round(val * round) / round\n }\n\n public checkGrowBuffer (required: number): void {\n let buffer = this.buffer\n let size = buffer.length\n const ptr = this.ptr\n if (size - ptr >= required) {\n return\n }\n while (size - ptr < required) {\n size *= 2\n }\n const old = buffer\n buffer = Buffer.allocUnsafe(size)\n old.copy(buffer, 0, 0, this.ptr)\n this.buffer = buffer\n this.stretched = size\n }\n}\n"]}
1
+ {"version":3,"file":"elastic-buffer.js","sourceRoot":"","sources":["../../src/buffer/elastic-buffer.ts"],"names":[],"mappings":"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","sourcesContent":["import { AsciiChars } from './ascii/ascii-chars'\nimport { format } from 'mathjs'\nimport { inject, injectable } from 'tsyringe'\nimport { DITokens } from '../runtime/di-tokens'\n\n@injectable()\nexport class ElasticBuffer {\n private buffer: Buffer\n private ptr: number = 0\n private stretched: number\n\n /**\n * A buffer grown to serve a large message keeps that capacity across reset, so a\n * steady stream of similarly sized messages does not re-grow (and re-allocate) on\n * every single message. Only a buffer that has ballooned past returnTo is handed\n * back, so one pathological message cannot pin a large allocation for the life of\n * the session. Unlike cspurefix - where the discarded array goes to a shared\n * ArrayPool - the retained bytes are held by this instance, so an acceptor with\n * many connections holds up to this much per connection. Tune with\n * DITokens.elasticBufferReturnSize.\n */\n constructor (@inject(DITokens.elasticBufferSize) public readonly size: number = 6 * 1024,\n @inject(DITokens.elasticBufferReturnSize) public readonly returnTo: number = 64 * 1024) {\n this.size = Math.max(1, this.size)\n this.buffer = Buffer.allocUnsafe(this.size)\n this.returnTo = Math.max(this.size, this.returnTo)\n this.stretched = this.size\n }\n\n private static precisionRound (n: number, precision: number): number {\n const factor: number = Math.pow(10, precision)\n return Math.round(n * factor) / factor\n }\n\n private static HowManyDigits (v: number): number {\n v = Math.abs(v)\n let digits: number = 0\n let w: number = v\n while (w > 0) {\n ++digits\n w = Math.floor(w / 10)\n }\n return Math.max(digits, 1)\n }\n\n public currentSize (): number {\n return this.stretched\n }\n\n public getPos (): number {\n return this.ptr\n }\n\n public setPos (ptr: number): number {\n const r = this.ptr\n if (ptr >= 0 && ptr <= this.buffer.length) {\n this.ptr = ptr\n }\n return r\n }\n\n public get (pos: number): number {\n return this.buffer[pos]\n }\n\n public writeBoolean (v: boolean): number {\n this.writeChar(v ? AsciiChars.Y : AsciiChars.N)\n return this.ptr\n }\n\n public switchChar (c: number): number {\n this.buffer[this.ptr - 1] = c\n return this.ptr\n }\n\n public saveChar (c: number): number {\n this.buffer[this.ptr++] = c\n return this.ptr\n }\n\n public writeChar (c: number): number {\n if (c > 255) throw new Error(`can't write ${c} to a byte`)\n this.checkGrowBuffer(1)\n this.buffer[this.ptr++] = c\n return this.ptr\n }\n\n public writeString (s: string): number {\n const begin = this.ptr\n this.checkGrowBuffer(s.length)\n const buffer = this.buffer\n this.ptr += buffer.write(s, begin, s.length, 'ascii')\n return this.ptr\n }\n\n public writeBuffer (v: Buffer): number {\n const begin = this.ptr\n this.checkGrowBuffer(v.length)\n const buffer = this.buffer\n const srcLen: number = v.length\n this.ptr += v.copy(buffer, begin, 0, srcLen)\n return this.ptr\n }\n\n public writeWholeNumber (n: number): number {\n const digits: number = ElasticBuffer.HowManyDigits(n)\n let reserve = digits\n const sign: number = Math.sign(n)\n let p: number = Math.pow(10, digits - 1)\n let v: number = Math.abs(n)\n if (sign < 0) {\n reserve++\n }\n this.checkGrowBuffer(reserve)\n const buffer = this.buffer\n if (sign < 0) {\n buffer[this.ptr++] = AsciiChars.Minus\n }\n while (p >= 1) {\n const d: number = Math.floor(v / p)\n v -= d * p\n p /= 10\n buffer[this.ptr++] = AsciiChars.Zero + d\n }\n\n return this.ptr\n }\n\n public writeNumber (v: number, places: number = 13): number {\n const rounded: number = Math.floor(v)\n const fraction: number = ElasticBuffer.precisionRound(v - rounded, places)\n if (fraction === 0) {\n // integer\n return this.writeWholeNumber(v)\n } else {\n // decimal with fraction turn to string\n const s: string = format(v, { notation: 'fixed' })\n return this.writeString(s)\n }\n }\n\n public reset (): boolean {\n this.ptr = 0\n const shrink = this.stretched > this.returnTo\n if (shrink) {\n this.buffer = Buffer.allocUnsafe(this.returnTo)\n this.stretched = this.returnTo\n }\n return shrink\n }\n\n public slice (): Buffer {\n return this.buffer.subarray(0, this.ptr)\n }\n\n public copy (): Buffer {\n const m = Buffer.alloc(this.ptr)\n this.buffer.copy(m, 0, 0, this.ptr)\n return m\n }\n\n public clone (): ElasticBuffer {\n const cloned = new ElasticBuffer(this.ptr)\n this.buffer.copy(cloned.buffer, 0, 0, this.ptr)\n cloned.setPos(this.ptr)\n return cloned\n }\n\n public writePaddedHundreds (v: number): number {\n if (v > 999) throw new Error(`can't write ${v} as hundreds padding`)\n this.checkGrowBuffer(3)\n const buffer = this.buffer\n const zero: number = AsciiChars.Zero\n const units: number = v % 10 + zero\n v = v / 10\n const tens: number = v % 10 + zero\n v = v / 10\n buffer[this.ptr++] = v % 10 + zero\n buffer[this.ptr++] = tens\n buffer[this.ptr++] = units\n return this.ptr\n }\n\n public writePaddedTensUnits (v: number): number {\n if (v > 99) throw new Error(`can't write ${v} as hundreds padding`)\n this.checkGrowBuffer(2)\n const buffer = this.buffer\n const zero: number = AsciiChars.Zero\n const units: number = v % 10 + zero\n v = v / 10\n buffer[this.ptr++] = v % 10 + zero\n buffer[this.ptr++] = units\n return this.ptr\n }\n\n public patchPaddedNumberAtPos (ptr: number, numToWrite: number, padding: number): void {\n let digits: number = ElasticBuffer.HowManyDigits(numToWrite)\n const saved: number = this.ptr\n this.ptr = ptr\n const buffer = this.buffer\n while (digits++ < padding) {\n buffer[this.ptr++] = AsciiChars.Zero\n }\n this.writeWholeNumber(numToWrite)\n this.ptr = saved\n }\n\n public toString (ptr: number = this.ptr): string {\n return this.buffer.toString('ascii', 0, ptr)\n }\n\n public checksum (ptr: number = this.ptr): number {\n const cks: number = this.sum(ptr)\n return cks % 256\n }\n\n public sum (ptr: number = this.ptr): number {\n let total: number = 0\n ptr = Math.min(ptr, this.ptr)\n const buffer = this.buffer\n for (let idx: number = 0; idx < ptr; idx++) {\n total += buffer[idx]\n }\n return total\n }\n\n public getWholeNumber (start: number, vend: number): number {\n const buffer = this.buffer\n let sign = 1\n let raised = vend - start\n switch (buffer[start]) {\n case AsciiChars.Minus: {\n --raised\n sign = -1\n ++start\n break\n }\n case AsciiChars.Plus: {\n --raised\n ++start\n break\n }\n }\n let i: number = Math.pow(10, raised)\n let num: number = 0\n let scan: number = start\n\n while (scan <= vend) {\n const p: number = buffer[scan++]\n const d: number = p - AsciiChars.Zero\n num += d * i\n i /= 10\n }\n\n return num * sign\n }\n\n public getString (start: number, end: number): string {\n return this.buffer.toString('ascii', start, end)\n }\n\n public getBuffer (start: number, end: number): Buffer {\n return this.buffer.subarray(start, end)\n }\n\n public getBoolean (start: number): boolean {\n const b: number = this.buffer[start]\n return b === AsciiChars.Y\n }\n\n public getFloat (start: number, vend: number): number | null {\n let n: number = 0\n let digits: number = 0\n let dotPosition: number = 0\n const buffer = this.buffer\n let sign = 1\n switch (buffer[start]) {\n case AsciiChars.Minus: {\n sign = -1\n start++\n break\n }\n case AsciiChars.Plus: {\n start++\n break\n }\n }\n const len = vend - start\n let i: number = Math.pow(10, len - 1)\n for (let j: number = start; j <= vend; ++j) {\n const p: number = buffer[j]\n if (p >= AsciiChars.Zero && p <= AsciiChars.Nine) {\n const d: number = p - AsciiChars.Zero\n ++digits\n n += d * i\n i /= 10\n } else if (p === AsciiChars.Dot) {\n if (dotPosition > 0) {\n return null\n }\n dotPosition = j - start\n } else if (digits > 0) {\n return null\n }\n }\n const power: number = dotPosition === 0 ? 0 : len - dotPosition\n const raised = dotPosition === 0 ? 10 : Math.pow(10, -1 * power)\n const round = dotPosition === 0 ? 1 : Math.pow(10, power)\n const val = n * raised * sign\n return Math.round(val * round) / round\n }\n\n public checkGrowBuffer (required: number): void {\n let buffer = this.buffer\n let size = buffer.length\n const ptr = this.ptr\n if (size - ptr >= required) {\n return\n }\n while (size - ptr < required) {\n size *= 2\n }\n const old = buffer\n buffer = Buffer.allocUnsafe(size)\n old.copy(buffer, 0, 0, this.ptr)\n this.buffer = buffer\n this.stretched = size\n }\n}\n"]}
@@ -1,62 +1,62 @@
1
- 8=FIX.4.4|9=0000117|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=20260810-18:11:05.466|98=0|108=30|141=Y|553=js-client|554=pwd-client|10=098|
2
- 8=FIX.4.4|9=0000117|35=A|49=accept-comp|56=init-comp|34=1|57=fix|52=20260810-18:11:05.472|98=0|108=30|141=Y|553=js-server|554=pwd-server|10=143|
3
- 8=FIX.4.4|9=0000079|35=2|49=init-comp|56=accept-comp|34=2|57=fix|52=20260810-18:11:05.474|7=1|16=1|10=232|
4
- 8=FIX.4.4|9=0000112|35=4|49=accept-comp|56=init-comp|34=1|57=fix|43=Y|52=20260810-18:11:05.479|122=20260810-18:11:05.478|123=Y|36=2|10=104|
5
- 8=FIX.4.4|9=0000075|35=5|49=accept-comp|56=init-comp|34=2|57=fix|52=20260810-18:11:07.478|58=5|10=214|
6
- 8=FIX.4.4|9=0000117|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=20260810-18:11:10.361|98=0|108=30|141=Y|553=js-client|554=pwd-client|10=088|
7
- 8=FIX.4.4|9=0000117|35=A|49=accept-comp|56=init-comp|34=1|57=fix|52=20260810-18:11:10.363|98=0|108=30|141=Y|553=js-server|554=pwd-server|10=138|
8
- 8=FIX.4.4|9=0000079|35=2|49=init-comp|56=accept-comp|34=2|57=fix|52=20260810-18:11:10.363|7=1|16=0|10=224|
9
- 8=FIX.4.4|9=0000112|35=4|49=accept-comp|56=init-comp|34=1|57=fix|43=Y|52=20260810-18:11:10.366|122=20260810-18:11:10.366|123=Y|36=2|10=087|
10
- 8=FIX.4.4|9=0000075|35=5|49=accept-comp|56=init-comp|34=2|57=fix|52=20260810-18:11:12.366|58=5|10=206|
11
- 8=FIX.4.4|9=0000117|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=20260810-18:11:14.866|98=0|108=30|141=Y|553=js-client|554=pwd-client|10=102|
12
- 8=FIX.4.4|9=0000117|35=A|49=accept-comp|56=init-comp|34=1|57=fix|52=20260810-18:11:14.868|98=0|108=30|141=Y|553=js-server|554=pwd-server|10=152|
13
- 8=FIX.4.4|9=0000117|35=A|49=init-comp|56=accept-comp|34=2|57=fix|52=20260810-18:11:14.868|98=0|108=30|141=Y|553=js-client|554=pwd-client|10=105|
14
- 8=FIX.4.4|9=0000117|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=20260810-18:11:15.418|98=0|108=30|141=Y|553=js-client|554=pwd-client|10=096|
15
- 8=FIX.4.4|9=0000117|35=A|49=accept-comp|56=init-comp|34=1|57=fix|52=20260810-18:11:15.420|98=0|108=30|141=Y|553=js-server|554=pwd-server|10=137|
16
- 8=FIX.4.4|9=0000075|35=5|49=accept-comp|56=init-comp|34=2|57=fix|52=20260810-18:11:16.422|58=5|10=203|
17
- 8=FIX.4.4|9=0000075|35=5|49=init-comp|56=accept-comp|34=3|57=fix|52=20260810-18:11:16.870|58=5|10=211|
18
- 8=FIX.4.4|9=0000117|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=20260810-18:11:19.104|98=0|108=30|141=Y|553=js-client|554=pwd-client|10=092|
19
- 8=FIX.4.4|9=0000117|35=A|49=accept-comp|56=init-comp|34=1|57=fix|52=20260810-18:11:19.105|98=0|108=30|141=Y|553=js-server|554=pwd-server|10=141|
20
- 8=FIX.4.4|9=0000075|35=5|49=accept-comp|56=init-comp|34=2|57=fix|52=20260810-18:11:20.108|58=5|10=199|
21
- 8=FIX.4.4|9=0000117|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=20260810-18:11:22.872|98=0|108=30|141=Y|553=js-client|554=pwd-client|10=098|
22
- 8=FIX.4.4|9=0000117|35=A|49=accept-comp|56=init-comp|34=1|57=fix|52=20260810-18:11:22.874|98=0|108=30|141=Y|553=js-server|554=pwd-server|10=148|
23
- 8=FIX.4.4|9=0000075|35=5|49=init-comp|56=accept-comp|34=0|57=fix|52=20260810-18:11:23.876|58=5|10=212|
24
- 8=FIX.4.4|9=0000117|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=20260810-18:11:26.372|98=0|108=30|141=Y|553=js-client|554=pwd-client|10=097|
25
- 8=FIX.4.4|9=0000117|35=A|49=accept-comp|56=init-comp|34=5|57=fix|52=20260810-18:11:26.374|98=0|108=30|141=Y|553=js-server|554=pwd-server|10=151|
26
- 8=FIX.4.4|9=0000075|35=5|49=accept-comp|56=init-comp|34=2|57=fix|52=20260810-18:11:27.376|58=5|10=213|
27
- 8=FIX.4.4|9=0000110|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=20260810-18:11:29.861|98=0|141=Y|553=js-client|554=pwd-client|10=171|
28
- 8=FIX.4.4|9=0000125|35=3|49=accept-comp|56=init-comp|34=1|57=fix|52=20260810-18:11:29.863|45=1|372=A|373=1|58=msgType A missing required tag 108|10=006|
29
- 8=FIX.4.4|9=0000117|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=20260810-18:11:34.477|98=0|108=30|141=Y|553=js-client|554=pwd-client|10=102|
30
- 8=FIX.4.4|9=0000117|35=A|49=accept-comp|56=init-comp|34=1|57=fix|52=20260810-18:11:34.478|98=0|108=30|141=Y|553=js-server|554=pwd-server|10=151|
31
- 8=FIX.4.4|9=0000111|35=3|49=accept-comp|56=init-comp|34=2|57=fix|52=20260810-18:11:34.480|45=2|372=ZZ|373=11|58=msgType ZZ unknown|10=145|
32
- 8=FIX.4.4|9=0000075|35=5|49=accept-comp|56=init-comp|34=3|57=fix|52=20260810-18:11:36.480|58=5|10=210|
33
- 8=FIX.4.4|9=0000117|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=20260810-18:11:39.252|98=0|108=30|141=Y|553=js-client|554=pwd-client|10=098|
34
- 8=FIX.4.4|9=0000117|35=A|49=accept-comp|56=init-comp|34=1|57=fix|52=20260810-18:11:39.253|98=0|108=30|141=Y|553=js-server|554=pwd-server|10=147|
35
- 8=FIX.4.4|9=0000146|35=3|49=accept-comp|56=init-comp|34=2|57=fix|52=20260810-18:11:39.255|45=2|372=0|373=5|58=msgType 0 checksum failed. received = 95 computed = 143|10=071|
36
- 8=FIX.4.4|9=0000075|35=5|49=accept-comp|56=init-comp|34=3|57=fix|52=20260810-18:11:41.255|58=5|10=206|
37
- 8=FIX.4.4|9=0000117|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=20260810-18:11:43.253|98=0|108=30|141=Y|553=js-client|554=pwd-client|10=094|
38
- 8=FIX.4.4|9=0000117|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=20260810-18:11:47.748|98=0|108=30|141=Y|553=js-client|554=pwd-client|10=107|
39
- 8=FIX.4.4|9=0000117|35=A|49=accept-comp|56=init-comp|34=1|57=fix|52=20260810-18:11:47.750|98=0|108=30|141=Y|553=js-server|554=pwd-server|10=148|
40
- 8=FIX.4.4|9=0000145|35=3|49=accept-comp|56=init-comp|34=2|57=fix|52=20260810-18:11:47.751|45=2|372=0|373=5|58=msgType 0 checksum failed. received = 95 computed = 59|10=028|
41
- 8=FIX.4.4|9=0000075|35=5|49=accept-comp|56=init-comp|34=3|57=fix|52=20260810-18:11:49.751|58=5|10=215|
42
- 8=FIX.4.4|9=0000116|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=20260810-18:11:52.225|98=0|108=2|141=Y|553=js-client|554=pwd-client|10=043|
43
- 8=FIX.4.4|9=0000117|35=A|49=accept-comp|56=init-comp|34=1|57=fix|52=20260810-18:11:52.226|98=0|108=30|141=Y|553=js-server|554=pwd-server|10=142|
44
- 8=FIX.4.4|9=0000104|35=0|49=init-comp|56=accept-comp|34=2|57=fix|52=20260810-18:11:54.231|112=Mon, 10 Aug 2026 18:11:54 GMT|10=127|
45
- 8=FIX.4.4|9=0000104|35=0|49=init-comp|56=accept-comp|34=3|57=fix|52=20260810-18:11:56.233|112=Mon, 10 Aug 2026 18:11:56 GMT|10=134|
46
- 8=FIX.4.4|9=0000075|35=5|49=accept-comp|56=init-comp|34=2|57=fix|52=20260810-18:11:58.227|58=5|10=212|
47
- 8=FIX.4.4|9=0000117|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=20260810-18:12:00.702|98=0|108=30|141=Y|553=js-client|554=pwd-client|10=087|
48
- 8=FIX.4.4|9=0000116|35=A|49=accept-comp|56=init-comp|34=1|57=fix|52=20260810-18:12:00.703|98=0|108=2|141=Y|553=js-server|554=pwd-server|10=086|
49
- 8=FIX.4.4|9=0000104|35=0|49=accept-comp|56=init-comp|34=2|57=fix|52=20260810-18:12:02.709|112=Mon, 10 Aug 2026 18:12:02 GMT|10=125|
50
- 8=FIX.4.4|9=0000104|35=0|49=accept-comp|56=init-comp|34=3|57=fix|52=20260810-18:12:04.714|112=Mon, 10 Aug 2026 18:12:04 GMT|10=126|
51
- 8=FIX.4.4|9=0000104|35=0|49=accept-comp|56=init-comp|34=4|57=fix|52=20260810-18:12:06.719|112=Mon, 10 Aug 2026 18:12:06 GMT|10=136|
52
- 8=FIX.4.4|9=0000075|35=5|49=accept-comp|56=init-comp|34=5|57=fix|52=20260810-18:12:08.706|58=5|10=213|
53
- 8=FIX.4.4|9=0000116|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=20260810-18:12:11.190|98=0|108=2|141=Y|553=js-client|554=pwd-client|10=040|
54
- 8=FIX.4.4|9=0000116|35=A|49=accept-comp|56=init-comp|34=1|57=fix|52=20260810-18:12:11.191|98=0|108=5|141=Y|553=js-server|554=pwd-server|10=092|
55
- 8=FIX.4.4|9=0000104|35=0|49=init-comp|56=accept-comp|34=2|57=fix|52=20260810-18:12:13.197|112=Mon, 10 Aug 2026 18:12:13 GMT|10=130|
56
- 8=FIX.4.4|9=0000104|35=0|49=init-comp|56=accept-comp|34=3|57=fix|52=20260810-18:12:15.199|112=Mon, 10 Aug 2026 18:12:15 GMT|10=137|
57
- 8=FIX.4.4|9=0000104|35=0|49=accept-comp|56=init-comp|34=2|57=fix|52=20260810-18:12:16.204|112=Mon, 10 Aug 2026 18:12:16 GMT|10=125|
58
- 8=FIX.4.4|9=0000104|35=0|49=init-comp|56=accept-comp|34=4|57=fix|52=20260810-18:12:17.203|112=Mon, 10 Aug 2026 18:12:17 GMT|10=128|
59
- 8=FIX.4.4|9=0000075|35=5|49=accept-comp|56=init-comp|34=3|57=fix|52=20260810-18:12:19.194|58=5|10=214|
60
- 8=FIX.4.4|9=0000117|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=20260810-18:14:28.889|98=0|108=30|141=Y|553=js-client|554=pwd-client|10=115|
61
- 8=FIX.4.4|9=0000117|35=A|49=accept-comp|56=init-comp|34=1|57=fix|52=20260810-18:14:28.899|98=0|108=30|141=Y|553=js-server|554=pwd-server|10=164|
62
- 8=FIX.4.4|9=0000075|35=5|49=accept-comp|56=init-comp|34=2|57=fix|52=20260810-18:14:29.904|58=5|10=215|
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,75 +1,75 @@
1
- 8=FIX.4.4|9=0000117|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=20260810-18:11:05.466|98=0|108=30|141=Y|553=js-client|554=pwd-client|10=098|
2
- 8=FIX.4.4|9=0000117|35=A|49=accept-comp|56=init-comp|34=1|57=fix|52=20260810-18:11:05.472|98=0|108=30|141=Y|553=js-server|554=pwd-server|10=143|
3
- 8=FIX.4.4|9=0000079|35=2|49=init-comp|56=accept-comp|34=2|57=fix|52=20260810-18:11:05.474|7=1|16=1|10=232|
4
- 8=FIX.4.4|9=0000112|35=4|49=accept-comp|56=init-comp|34=1|57=fix|43=Y|52=20260810-18:11:05.479|122=20260810-18:11:05.478|123=Y|36=2|10=104|
5
- 8=FIX.4.4|9=0000075|35=5|49=init-comp|56=accept-comp|34=3|57=fix|52=20260810-18:11:07.476|58=5|10=213|
6
- 8=FIX.4.4|9=0000075|35=5|49=accept-comp|56=init-comp|34=2|57=fix|52=20260810-18:11:07.478|58=5|10=214|
7
- 8=FIX.4.4|9=0000117|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=20260810-18:11:10.361|98=0|108=30|141=Y|553=js-client|554=pwd-client|10=088|
8
- 8=FIX.4.4|9=0000117|35=A|49=accept-comp|56=init-comp|34=1|57=fix|52=20260810-18:11:10.363|98=0|108=30|141=Y|553=js-server|554=pwd-server|10=138|
9
- 8=FIX.4.4|9=0000079|35=2|49=init-comp|56=accept-comp|34=2|57=fix|52=20260810-18:11:10.363|7=1|16=0|10=224|
10
- 8=FIX.4.4|9=0000112|35=4|49=accept-comp|56=init-comp|34=1|57=fix|43=Y|52=20260810-18:11:10.366|122=20260810-18:11:10.366|123=Y|36=2|10=087|
11
- 8=FIX.4.4|9=0000075|35=5|49=init-comp|56=accept-comp|34=3|57=fix|52=20260810-18:11:12.365|58=5|10=206|
12
- 8=FIX.4.4|9=0000075|35=5|49=accept-comp|56=init-comp|34=2|57=fix|52=20260810-18:11:12.366|58=5|10=206|
13
- 8=FIX.4.4|9=0000117|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=20260810-18:11:14.866|98=0|108=30|141=Y|553=js-client|554=pwd-client|10=102|
14
- 8=FIX.4.4|9=0000117|35=A|49=accept-comp|56=init-comp|34=1|57=fix|52=20260810-18:11:14.868|98=0|108=30|141=Y|553=js-server|554=pwd-server|10=152|
15
- 8=FIX.4.4|9=0000117|35=A|49=init-comp|56=accept-comp|34=2|57=fix|52=20260810-18:11:14.868|98=0|108=30|141=Y|553=js-client|554=pwd-client|10=105|
16
- 8=FIX.4.4|9=0000117|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=20260810-18:11:15.418|98=0|108=30|141=Y|553=js-client|554=pwd-client|10=096|
17
- 8=FIX.4.4|9=0000117|35=A|49=accept-comp|56=init-comp|34=1|57=fix|52=20260810-18:11:15.420|98=0|108=30|141=Y|553=js-server|554=pwd-server|10=137|
18
- 8=FIX.4.4|9=0000075|35=5|49=init-comp|56=accept-comp|34=2|57=fix|52=20260810-18:11:16.421|58=5|10=202|
19
- 8=FIX.4.4|9=0000075|35=5|49=accept-comp|56=init-comp|34=2|57=fix|52=20260810-18:11:16.422|58=5|10=203|
20
- 8=FIX.4.4|9=0000117|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=20260810-18:11:19.104|98=0|108=30|141=Y|553=js-client|554=pwd-client|10=092|
21
- 8=FIX.4.4|9=0000117|35=A|49=accept-comp|56=init-comp|34=1|57=fix|52=20260810-18:11:19.105|98=0|108=30|141=Y|553=js-server|554=pwd-server|10=141|
22
- 8=FIX.4.4|9=0000075|35=5|49=init-comp|56=accept-comp|34=2|57=fix|52=20260810-18:11:20.107|58=5|10=198|
23
- 8=FIX.4.4|9=0000075|35=5|49=accept-comp|56=init-comp|34=2|57=fix|52=20260810-18:11:20.108|58=5|10=199|
24
- 8=FIX.4.4|9=0000117|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=20260810-18:11:22.872|98=0|108=30|141=Y|553=js-client|554=pwd-client|10=098|
25
- 8=FIX.4.4|9=0000117|35=A|49=accept-comp|56=init-comp|34=1|57=fix|52=20260810-18:11:22.874|98=0|108=30|141=Y|553=js-server|554=pwd-server|10=148|
26
- 8=FIX.4.4|9=0000075|35=5|49=init-comp|56=accept-comp|34=0|57=fix|52=20260810-18:11:23.876|58=5|10=212|
27
- 8=FIX.4.4|9=0000117|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=20260810-18:11:26.372|98=0|108=30|141=Y|553=js-client|554=pwd-client|10=097|
28
- 8=FIX.4.4|9=0000117|35=A|49=accept-comp|56=init-comp|34=5|57=fix|52=20260810-18:11:26.374|98=0|108=30|141=Y|553=js-server|554=pwd-server|10=151|
29
- 8=FIX.4.4|9=0000075|35=5|49=init-comp|56=accept-comp|34=2|57=fix|52=20260810-18:11:27.375|58=5|10=212|
30
- 8=FIX.4.4|9=0000075|35=5|49=accept-comp|56=init-comp|34=2|57=fix|52=20260810-18:11:27.376|58=5|10=213|
31
- 8=FIX.4.4|9=0000110|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=20260810-18:11:29.861|98=0|141=Y|553=js-client|554=pwd-client|10=171|
32
- 8=FIX.4.4|9=0000125|35=3|49=accept-comp|56=init-comp|34=1|57=fix|52=20260810-18:11:29.863|45=1|372=A|373=1|58=msgType A missing required tag 108|10=006|
33
- 8=FIX.4.4|9=0000117|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=20260810-18:11:34.477|98=0|108=30|141=Y|553=js-client|554=pwd-client|10=102|
34
- 8=FIX.4.4|9=0000117|35=A|49=accept-comp|56=init-comp|34=1|57=fix|52=20260810-18:11:34.478|98=0|108=30|141=Y|553=js-server|554=pwd-server|10=151|
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|
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=20260810-18:11:34.480|45=2|372=ZZ|373=11|58=msgType ZZ unknown|10=145|
37
- 8=FIX.4.4|9=0000075|35=5|49=init-comp|56=accept-comp|34=3|57=fix|52=20260810-18:11:36.479|58=5|10=218|
38
- 8=FIX.4.4|9=0000075|35=5|49=accept-comp|56=init-comp|34=3|57=fix|52=20260810-18:11:36.480|58=5|10=210|
39
- 8=FIX.4.4|9=0000117|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=20260810-18:11:39.252|98=0|108=30|141=Y|553=js-client|554=pwd-client|10=098|
40
- 8=FIX.4.4|9=0000117|35=A|49=accept-comp|56=init-comp|34=1|57=fix|52=20260810-18:11:39.253|98=0|108=30|141=Y|553=js-server|554=pwd-server|10=147|
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|
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=20260810-18:11:39.255|45=2|372=0|373=5|58=msgType 0 checksum failed. received = 95 computed = 143|10=071|
43
- 8=FIX.4.4|9=0000075|35=5|49=init-comp|56=accept-comp|34=3|57=fix|52=20260810-18:11:41.254|58=5|10=205|
44
- 8=FIX.4.4|9=0000075|35=5|49=accept-comp|56=init-comp|34=3|57=fix|52=20260810-18:11:41.255|58=5|10=206|
45
- 8=FIX.4.4|9=0000117|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=20260810-18:11:47.748|98=0|108=30|141=Y|553=js-client|554=pwd-client|10=107|
46
- 8=FIX.4.4|9=0000117|35=A|49=accept-comp|56=init-comp|34=1|57=fix|52=20260810-18:11:47.750|98=0|108=30|141=Y|553=js-server|554=pwd-server|10=148|
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|
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=20260810-18:11:47.751|45=2|372=0|373=5|58=msgType 0 checksum failed. received = 95 computed = 59|10=028|
49
- 8=FIX.4.4|9=0000075|35=5|49=init-comp|56=accept-comp|34=3|57=fix|52=20260810-18:11:49.750|58=5|10=214|
50
- 8=FIX.4.4|9=0000075|35=5|49=accept-comp|56=init-comp|34=3|57=fix|52=20260810-18:11:49.751|58=5|10=215|
51
- 8=FIX.4.4|9=0000116|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=20260810-18:11:52.225|98=0|108=2|141=Y|553=js-client|554=pwd-client|10=043|
52
- 8=FIX.4.4|9=0000117|35=A|49=accept-comp|56=init-comp|34=1|57=fix|52=20260810-18:11:52.226|98=0|108=30|141=Y|553=js-server|554=pwd-server|10=142|
53
- 8=FIX.4.4|9=0000104|35=0|49=init-comp|56=accept-comp|34=2|57=fix|52=20260810-18:11:54.231|112=Mon, 10 Aug 2026 18:11:54 GMT|10=127|
54
- 8=FIX.4.4|9=0000104|35=0|49=init-comp|56=accept-comp|34=3|57=fix|52=20260810-18:11:56.233|112=Mon, 10 Aug 2026 18:11:56 GMT|10=134|
55
- 8=FIX.4.4|9=0000075|35=5|49=init-comp|56=accept-comp|34=4|57=fix|52=20260810-18:11:58.226|58=5|10=213|
56
- 8=FIX.4.4|9=0000075|35=5|49=accept-comp|56=init-comp|34=2|57=fix|52=20260810-18:11:58.227|58=5|10=212|
57
- 8=FIX.4.4|9=0000117|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=20260810-18:12:00.702|98=0|108=30|141=Y|553=js-client|554=pwd-client|10=087|
58
- 8=FIX.4.4|9=0000116|35=A|49=accept-comp|56=init-comp|34=1|57=fix|52=20260810-18:12:00.703|98=0|108=2|141=Y|553=js-server|554=pwd-server|10=086|
59
- 8=FIX.4.4|9=0000104|35=0|49=accept-comp|56=init-comp|34=2|57=fix|52=20260810-18:12:02.709|112=Mon, 10 Aug 2026 18:12:02 GMT|10=125|
60
- 8=FIX.4.4|9=0000104|35=0|49=accept-comp|56=init-comp|34=3|57=fix|52=20260810-18:12:04.714|112=Mon, 10 Aug 2026 18:12:04 GMT|10=126|
61
- 8=FIX.4.4|9=0000104|35=0|49=accept-comp|56=init-comp|34=4|57=fix|52=20260810-18:12:06.719|112=Mon, 10 Aug 2026 18:12:06 GMT|10=136|
62
- 8=FIX.4.4|9=0000075|35=5|49=init-comp|56=accept-comp|34=2|57=fix|52=20260810-18:12:08.705|58=5|10=209|
63
- 8=FIX.4.4|9=0000075|35=5|49=accept-comp|56=init-comp|34=5|57=fix|52=20260810-18:12:08.706|58=5|10=213|
64
- 8=FIX.4.4|9=0000116|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=20260810-18:12:11.190|98=0|108=2|141=Y|553=js-client|554=pwd-client|10=040|
65
- 8=FIX.4.4|9=0000116|35=A|49=accept-comp|56=init-comp|34=1|57=fix|52=20260810-18:12:11.191|98=0|108=5|141=Y|553=js-server|554=pwd-server|10=092|
66
- 8=FIX.4.4|9=0000104|35=0|49=init-comp|56=accept-comp|34=2|57=fix|52=20260810-18:12:13.197|112=Mon, 10 Aug 2026 18:12:13 GMT|10=130|
67
- 8=FIX.4.4|9=0000104|35=0|49=init-comp|56=accept-comp|34=3|57=fix|52=20260810-18:12:15.199|112=Mon, 10 Aug 2026 18:12:15 GMT|10=137|
68
- 8=FIX.4.4|9=0000104|35=0|49=accept-comp|56=init-comp|34=2|57=fix|52=20260810-18:12:16.204|112=Mon, 10 Aug 2026 18:12:16 GMT|10=125|
69
- 8=FIX.4.4|9=0000104|35=0|49=init-comp|56=accept-comp|34=4|57=fix|52=20260810-18:12:17.203|112=Mon, 10 Aug 2026 18:12:17 GMT|10=128|
70
- 8=FIX.4.4|9=0000075|35=5|49=init-comp|56=accept-comp|34=5|57=fix|52=20260810-18:12:19.193|58=5|10=215|
71
- 8=FIX.4.4|9=0000075|35=5|49=accept-comp|56=init-comp|34=3|57=fix|52=20260810-18:12:19.194|58=5|10=214|
72
- 8=FIX.4.4|9=0000117|35=A|49=init-comp|56=accept-comp|34=1|57=fix|52=20260810-18:14:28.889|98=0|108=30|141=Y|553=js-client|554=pwd-client|10=115|
73
- 8=FIX.4.4|9=0000117|35=A|49=accept-comp|56=init-comp|34=1|57=fix|52=20260810-18:14:28.899|98=0|108=30|141=Y|553=js-server|554=pwd-server|10=164|
74
- 8=FIX.4.4|9=0000075|35=5|49=init-comp|56=accept-comp|34=2|57=fix|52=20260810-18:14:29.902|58=5|10=213|
75
- 8=FIX.4.4|9=0000075|35=5|49=accept-comp|56=init-comp|34=2|57=fix|52=20260810-18:14:29.904|58=5|10=215|
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|
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "jspurefix",
3
- "version": "5.10.4",
3
+ "version": "5.10.5",
4
4
  "description": "pure node js fix engine",
5
5
  "keywords": [
6
6
  "typescript",
@@ -9,8 +9,18 @@ export class ElasticBuffer {
9
9
  private ptr: number = 0
10
10
  private stretched: number
11
11
 
12
+ /**
13
+ * A buffer grown to serve a large message keeps that capacity across reset, so a
14
+ * steady stream of similarly sized messages does not re-grow (and re-allocate) on
15
+ * every single message. Only a buffer that has ballooned past returnTo is handed
16
+ * back, so one pathological message cannot pin a large allocation for the life of
17
+ * the session. Unlike cspurefix - where the discarded array goes to a shared
18
+ * ArrayPool - the retained bytes are held by this instance, so an acceptor with
19
+ * many connections holds up to this much per connection. Tune with
20
+ * DITokens.elasticBufferReturnSize.
21
+ */
12
22
  constructor (@inject(DITokens.elasticBufferSize) public readonly size: number = 6 * 1024,
13
- @inject(DITokens.elasticBufferReturnSize) public readonly returnTo: number = 6 * 1024) {
23
+ @inject(DITokens.elasticBufferReturnSize) public readonly returnTo: number = 64 * 1024) {
14
24
  this.size = Math.max(1, this.size)
15
25
  this.buffer = Buffer.allocUnsafe(this.size)
16
26
  this.returnTo = Math.max(this.size, this.returnTo)
@@ -43,7 +53,7 @@ export class ElasticBuffer {
43
53
 
44
54
  public setPos (ptr: number): number {
45
55
  const r = this.ptr
46
- if (ptr >= 0 && ptr <= this.size) {
56
+ if (ptr >= 0 && ptr <= this.buffer.length) {
47
57
  this.ptr = ptr
48
58
  }
49
59
  return r
@@ -134,7 +144,7 @@ export class ElasticBuffer {
134
144
  const shrink = this.stretched > this.returnTo
135
145
  if (shrink) {
136
146
  this.buffer = Buffer.allocUnsafe(this.returnTo)
137
- this.stretched = this.size
147
+ this.stretched = this.returnTo
138
148
  }
139
149
  return shrink
140
150
  }