@homaiohq/napi-quickfix 0.0.0-stage → 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CMakeLists.txt +131 -0
- package/LICENSE +21 -0
- package/README.md +421 -2
- package/THIRD_PARTY_LICENSES +48 -0
- package/cpp/acceptor_wrap.cpp +234 -0
- package/cpp/acceptor_wrap.h +57 -0
- package/cpp/addon.cpp +83 -0
- package/cpp/application_bridge.cpp +382 -0
- package/cpp/application_bridge.h +151 -0
- package/cpp/data_dictionary_wrap.cpp +79 -0
- package/cpp/data_dictionary_wrap.h +37 -0
- package/cpp/engine_common.cpp +5 -0
- package/cpp/engine_common.h +19 -0
- package/cpp/engine_workers.h +86 -0
- package/cpp/enums.cpp +66 -0
- package/cpp/errors.h +142 -0
- package/cpp/initiator_wrap.cpp +255 -0
- package/cpp/initiator_wrap.h +69 -0
- package/cpp/message_wrap.cpp +195 -0
- package/cpp/message_wrap.h +53 -0
- package/cpp/session_id_wrap.cpp +91 -0
- package/cpp/session_id_wrap.h +46 -0
- package/cpp/session_settings_wrap.cpp +98 -0
- package/cpp/session_settings_wrap.h +40 -0
- package/cpp/session_static.cpp +93 -0
- package/dist/cjs/acceptor.d.ts +30 -0
- package/dist/cjs/acceptor.d.ts.map +1 -0
- package/dist/cjs/acceptor.js +39 -0
- package/dist/cjs/acceptor.js.map +1 -0
- package/dist/cjs/application.d.ts +116 -0
- package/dist/cjs/application.d.ts.map +1 -0
- package/dist/cjs/application.js +63 -0
- package/dist/cjs/application.js.map +1 -0
- package/dist/cjs/data-dictionary.d.ts +49 -0
- package/dist/cjs/data-dictionary.d.ts.map +1 -0
- package/dist/cjs/data-dictionary.js +77 -0
- package/dist/cjs/data-dictionary.js.map +1 -0
- package/dist/cjs/engine.d.ts +114 -0
- package/dist/cjs/engine.d.ts.map +1 -0
- package/dist/cjs/engine.js +138 -0
- package/dist/cjs/engine.js.map +1 -0
- package/dist/cjs/enums.d.ts +22 -0
- package/dist/cjs/enums.d.ts.map +1 -0
- package/dist/cjs/enums.js +49 -0
- package/dist/cjs/enums.js.map +1 -0
- package/dist/cjs/generated/fields.d.ts +6123 -0
- package/dist/cjs/generated/fields.d.ts.map +1 -0
- package/dist/cjs/generated/fields.js +6128 -0
- package/dist/cjs/generated/fields.js.map +1 -0
- package/dist/cjs/index.d.ts +47 -0
- package/dist/cjs/index.d.ts.map +1 -0
- package/dist/cjs/index.js +73 -0
- package/dist/cjs/index.js.map +1 -0
- package/dist/cjs/initiator.d.ts +30 -0
- package/dist/cjs/initiator.d.ts.map +1 -0
- package/dist/cjs/initiator.js +39 -0
- package/dist/cjs/initiator.js.map +1 -0
- package/dist/cjs/load-native.cjs +5 -0
- package/dist/cjs/message.d.ts +114 -0
- package/dist/cjs/message.d.ts.map +1 -0
- package/dist/cjs/message.js +162 -0
- package/dist/cjs/message.js.map +1 -0
- package/dist/cjs/native.d.ts +163 -0
- package/dist/cjs/native.d.ts.map +1 -0
- package/dist/cjs/native.js +23 -0
- package/dist/cjs/native.js.map +1 -0
- package/dist/cjs/package.json +1 -0
- package/dist/cjs/session-id.d.ts +40 -0
- package/dist/cjs/session-id.d.ts.map +1 -0
- package/dist/cjs/session-id.js +67 -0
- package/dist/cjs/session-id.js.map +1 -0
- package/dist/cjs/session-settings.d.ts +47 -0
- package/dist/cjs/session-settings.d.ts.map +1 -0
- package/dist/cjs/session-settings.js +76 -0
- package/dist/cjs/session-settings.js.map +1 -0
- package/dist/esm/acceptor.d.ts +30 -0
- package/dist/esm/acceptor.d.ts.map +1 -0
- package/dist/esm/acceptor.js +35 -0
- package/dist/esm/acceptor.js.map +1 -0
- package/dist/esm/application.d.ts +116 -0
- package/dist/esm/application.d.ts.map +1 -0
- package/dist/esm/application.js +58 -0
- package/dist/esm/application.js.map +1 -0
- package/dist/esm/data-dictionary.d.ts +49 -0
- package/dist/esm/data-dictionary.d.ts.map +1 -0
- package/dist/esm/data-dictionary.js +73 -0
- package/dist/esm/data-dictionary.js.map +1 -0
- package/dist/esm/engine.d.ts +114 -0
- package/dist/esm/engine.d.ts.map +1 -0
- package/dist/esm/engine.js +134 -0
- package/dist/esm/engine.js.map +1 -0
- package/dist/esm/enums.d.ts +22 -0
- package/dist/esm/enums.d.ts.map +1 -0
- package/dist/esm/enums.js +45 -0
- package/dist/esm/enums.js.map +1 -0
- package/dist/esm/generated/fields.d.ts +6123 -0
- package/dist/esm/generated/fields.d.ts.map +1 -0
- package/dist/esm/generated/fields.js +6125 -0
- package/dist/esm/generated/fields.js.map +1 -0
- package/dist/esm/index.d.ts +47 -0
- package/dist/esm/index.d.ts.map +1 -0
- package/dist/esm/index.js +52 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/initiator.d.ts +30 -0
- package/dist/esm/initiator.d.ts.map +1 -0
- package/dist/esm/initiator.js +35 -0
- package/dist/esm/initiator.js.map +1 -0
- package/dist/esm/load-native.cjs +5 -0
- package/dist/esm/message.d.ts +114 -0
- package/dist/esm/message.d.ts.map +1 -0
- package/dist/esm/message.js +156 -0
- package/dist/esm/message.js.map +1 -0
- package/dist/esm/native.d.ts +163 -0
- package/dist/esm/native.d.ts.map +1 -0
- package/dist/esm/native.js +17 -0
- package/dist/esm/native.js.map +1 -0
- package/dist/esm/session-id.d.ts +40 -0
- package/dist/esm/session-id.d.ts.map +1 -0
- package/dist/esm/session-id.js +63 -0
- package/dist/esm/session-id.js.map +1 -0
- package/dist/esm/session-settings.d.ts +47 -0
- package/dist/esm/session-settings.d.ts.map +1 -0
- package/dist/esm/session-settings.js +72 -0
- package/dist/esm/session-settings.js.map +1 -0
- package/package.json +83 -4
- package/prebuilds/darwin-arm64/node.napi.node +0 -0
- package/prebuilds/darwin-x64/node.napi.node +0 -0
- package/prebuilds/linux-x64/node.napi.glibc.node +0 -0
- package/prebuilds/linux-x64/node.napi.musl.node +0 -0
- package/prebuilds/win32-x64/node.napi.node +0 -0
- package/src/load-native.cjs +5 -0
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Ergonomic wrapper around the native `FIX::Message`.
|
|
3
|
+
*/
|
|
4
|
+
import { type NativeMessage } from './native.js';
|
|
5
|
+
/** Options controlling how a raw FIX string is parsed into a {@link Message}. */
|
|
6
|
+
export interface MessageParseOptions {
|
|
7
|
+
/**
|
|
8
|
+
* When `true`, the engine validates the message structure during parsing
|
|
9
|
+
* (e.g. checksum / body-length). Defaults to `false` (lenient parse), matching
|
|
10
|
+
* QuickFIX behaviour where validation is normally applied via a
|
|
11
|
+
* {@link DataDictionary} instead.
|
|
12
|
+
*/
|
|
13
|
+
validate?: boolean;
|
|
14
|
+
}
|
|
15
|
+
/** A structured, best-effort view of a parsed message returned by {@link Message.toJSON}. */
|
|
16
|
+
export interface MessageJSON {
|
|
17
|
+
/** The MsgType (tag 35) if resolvable, otherwise omitted. */
|
|
18
|
+
msgType?: string;
|
|
19
|
+
/** The raw FIX wire string (SOH-delimited). */
|
|
20
|
+
raw: string;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* A FIX message.
|
|
24
|
+
*
|
|
25
|
+
* Field values are accepted as `string | number` on input (numbers are
|
|
26
|
+
* stringified, since FIX is string-on-the-wire) and always returned as `string`.
|
|
27
|
+
*
|
|
28
|
+
* @example
|
|
29
|
+
* ```ts
|
|
30
|
+
* import { Message, FIELD, MsgType } from '@homaiohq/napi-quickfix';
|
|
31
|
+
*
|
|
32
|
+
* const msg = new Message();
|
|
33
|
+
* msg.setField(FIELD.MsgType, MsgType.NewOrderSingle)
|
|
34
|
+
* .setField(FIELD.ClOrdID, 'order-1')
|
|
35
|
+
* .setField(FIELD.OrderQty, 100);
|
|
36
|
+
*
|
|
37
|
+
* const parsed = Message.parse(msg.toString());
|
|
38
|
+
* console.log(parsed.getMsgType());
|
|
39
|
+
* ```
|
|
40
|
+
*/
|
|
41
|
+
export declare class Message {
|
|
42
|
+
#private;
|
|
43
|
+
/**
|
|
44
|
+
* Create a message. With no argument, creates an empty message. With a raw
|
|
45
|
+
* FIX string, parses it.
|
|
46
|
+
*
|
|
47
|
+
* Advanced: passing an existing {@link NativeMessage} handle adopts it (used
|
|
48
|
+
* internally by the engine bridge to wrap inbound/outbound native messages).
|
|
49
|
+
*
|
|
50
|
+
* @param raw Optional raw FIX wire string (SOH-delimited) to parse, or an
|
|
51
|
+
* existing native handle to adopt.
|
|
52
|
+
* @param opts Optional parse options.
|
|
53
|
+
*/
|
|
54
|
+
constructor(raw?: string | NativeMessage, opts?: MessageParseOptions);
|
|
55
|
+
/**
|
|
56
|
+
* Parse a raw FIX wire string into a {@link Message}.
|
|
57
|
+
*
|
|
58
|
+
* @param raw Raw FIX wire string (SOH-delimited).
|
|
59
|
+
* @param opts Optional parse options.
|
|
60
|
+
*/
|
|
61
|
+
static parse(raw: string, opts?: MessageParseOptions): Message;
|
|
62
|
+
/** @internal Wrap an existing native message handle (used by the engine bridge). */
|
|
63
|
+
static fromNative(handle: NativeMessage): Message;
|
|
64
|
+
/** @internal The native handle backing this message (for the engine / sendToTarget / validation). */
|
|
65
|
+
get nativeHandle(): NativeMessage;
|
|
66
|
+
/**
|
|
67
|
+
* Read a body field by tag.
|
|
68
|
+
* @throws A `QuickFixError` (`fixError: 'FieldNotFound'`) if absent.
|
|
69
|
+
*/
|
|
70
|
+
getField(tag: number): string;
|
|
71
|
+
/** Set a body field. Returns `this` for chaining. */
|
|
72
|
+
setField(tag: number, value: string | number): this;
|
|
73
|
+
/**
|
|
74
|
+
* Read a header field by tag.
|
|
75
|
+
* @throws A `QuickFixError` (`fixError: 'FieldNotFound'`) if absent.
|
|
76
|
+
*/
|
|
77
|
+
getHeaderField(tag: number): string;
|
|
78
|
+
/** Set a header field. Returns `this` for chaining. */
|
|
79
|
+
setHeaderField(tag: number, value: string | number): this;
|
|
80
|
+
/**
|
|
81
|
+
* Read a trailer field by tag.
|
|
82
|
+
* @throws A `QuickFixError` (`fixError: 'FieldNotFound'`) if absent.
|
|
83
|
+
*/
|
|
84
|
+
getTrailerField(tag: number): string;
|
|
85
|
+
/** Set a trailer field. Returns `this` for chaining. */
|
|
86
|
+
setTrailerField(tag: number, value: string | number): this;
|
|
87
|
+
/** The message type (tag 35), e.g. `'A'` for Logon. */
|
|
88
|
+
getMsgType(): string;
|
|
89
|
+
/** The raw FIX wire string (SOH-delimited). */
|
|
90
|
+
toString(): string;
|
|
91
|
+
/** A human-readable, pretty-printed rendering of the message. */
|
|
92
|
+
toPretty(): string;
|
|
93
|
+
/**
|
|
94
|
+
* A best-effort structured view. Always includes `raw`; includes `msgType`
|
|
95
|
+
* when resolvable.
|
|
96
|
+
*/
|
|
97
|
+
toJSON(): MessageJSON;
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Create a message, optionally pre-populating body fields.
|
|
101
|
+
*
|
|
102
|
+
* @param fields Map of tag → value to set on the message body.
|
|
103
|
+
*
|
|
104
|
+
* @example
|
|
105
|
+
* ```ts
|
|
106
|
+
* const msg = createMessage({ [FIELD.MsgType]: MsgType.Logon, [FIELD.HeartBtInt]: 30 });
|
|
107
|
+
* ```
|
|
108
|
+
*/
|
|
109
|
+
export declare function createMessage(fields?: Record<number, string | number>): Message;
|
|
110
|
+
/**
|
|
111
|
+
* Parse a raw FIX wire string into a {@link Message}. Alias of {@link Message.parse}.
|
|
112
|
+
*/
|
|
113
|
+
export declare function parseMessage(raw: string, opts?: MessageParseOptions): Message;
|
|
114
|
+
//# sourceMappingURL=message.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"message.d.ts","sourceRoot":"","sources":["../../src/message.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAU,KAAK,aAAa,EAAE,MAAM,aAAa,CAAC;AAEzD,iFAAiF;AACjF,MAAM,WAAW,mBAAmB;IAClC;;;;;OAKG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,6FAA6F;AAC7F,MAAM,WAAW,WAAW;IAC1B,6DAA6D;IAC7D,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,+CAA+C;IAC/C,GAAG,EAAE,MAAM,CAAC;CACb;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,qBAAa,OAAO;;IAIlB;;;;;;;;;;OAUG;IACH,YAAY,GAAG,CAAC,EAAE,MAAM,GAAG,aAAa,EAAE,IAAI,CAAC,EAAE,mBAAmB,EASnE;IAED;;;;;OAKG;IACH,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,mBAAmB,GAAG,OAAO,CAE7D;IAED,oFAAoF;IACpF,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,aAAa,GAAG,OAAO,CAEhD;IAED,qGAAqG;IACrG,IAAI,YAAY,IAAI,aAAa,CAEhC;IAED;;;OAGG;IACH,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAE5B;IAED,qDAAqD;IACrD,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAGlD;IAED;;;OAGG;IACH,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAElC;IAED,uDAAuD;IACvD,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAGxD;IAED;;;OAGG;IACH,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAEnC;IAED,wDAAwD;IACxD,eAAe,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAGzD;IAED,uDAAuD;IACvD,UAAU,IAAI,MAAM,CAEnB;IAED,+CAA+C;IAC/C,QAAQ,IAAI,MAAM,CAEjB;IAED,iEAAiE;IACjE,QAAQ,IAAI,MAAM,CAEjB;IAED;;;OAGG;IACH,MAAM,IAAI,WAAW,CASpB;CACF;AAED;;;;;;;;;GASG;AACH,wBAAgB,aAAa,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,GAAG,OAAO,CAQ/E;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,mBAAmB,GAAG,OAAO,CAE7E"}
|
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Message = void 0;
|
|
4
|
+
exports.createMessage = createMessage;
|
|
5
|
+
exports.parseMessage = parseMessage;
|
|
6
|
+
/**
|
|
7
|
+
* Ergonomic wrapper around the native `FIX::Message`.
|
|
8
|
+
*/
|
|
9
|
+
const native_js_1 = require("./native.js");
|
|
10
|
+
/**
|
|
11
|
+
* A FIX message.
|
|
12
|
+
*
|
|
13
|
+
* Field values are accepted as `string | number` on input (numbers are
|
|
14
|
+
* stringified, since FIX is string-on-the-wire) and always returned as `string`.
|
|
15
|
+
*
|
|
16
|
+
* @example
|
|
17
|
+
* ```ts
|
|
18
|
+
* import { Message, FIELD, MsgType } from '@homaiohq/napi-quickfix';
|
|
19
|
+
*
|
|
20
|
+
* const msg = new Message();
|
|
21
|
+
* msg.setField(FIELD.MsgType, MsgType.NewOrderSingle)
|
|
22
|
+
* .setField(FIELD.ClOrdID, 'order-1')
|
|
23
|
+
* .setField(FIELD.OrderQty, 100);
|
|
24
|
+
*
|
|
25
|
+
* const parsed = Message.parse(msg.toString());
|
|
26
|
+
* console.log(parsed.getMsgType());
|
|
27
|
+
* ```
|
|
28
|
+
*/
|
|
29
|
+
class Message {
|
|
30
|
+
/** @internal Underlying native handle. */
|
|
31
|
+
#native;
|
|
32
|
+
/**
|
|
33
|
+
* Create a message. With no argument, creates an empty message. With a raw
|
|
34
|
+
* FIX string, parses it.
|
|
35
|
+
*
|
|
36
|
+
* Advanced: passing an existing {@link NativeMessage} handle adopts it (used
|
|
37
|
+
* internally by the engine bridge to wrap inbound/outbound native messages).
|
|
38
|
+
*
|
|
39
|
+
* @param raw Optional raw FIX wire string (SOH-delimited) to parse, or an
|
|
40
|
+
* existing native handle to adopt.
|
|
41
|
+
* @param opts Optional parse options.
|
|
42
|
+
*/
|
|
43
|
+
constructor(raw, opts) {
|
|
44
|
+
if (raw === undefined) {
|
|
45
|
+
this.#native = new native_js_1.native.MessageWrap();
|
|
46
|
+
}
|
|
47
|
+
else if (typeof raw === 'string') {
|
|
48
|
+
this.#native = new native_js_1.native.MessageWrap(raw, opts?.validate ?? false);
|
|
49
|
+
}
|
|
50
|
+
else {
|
|
51
|
+
// Adopt an existing native handle (bridge path).
|
|
52
|
+
this.#native = raw;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Parse a raw FIX wire string into a {@link Message}.
|
|
57
|
+
*
|
|
58
|
+
* @param raw Raw FIX wire string (SOH-delimited).
|
|
59
|
+
* @param opts Optional parse options.
|
|
60
|
+
*/
|
|
61
|
+
static parse(raw, opts) {
|
|
62
|
+
return new Message(raw, opts);
|
|
63
|
+
}
|
|
64
|
+
/** @internal Wrap an existing native message handle (used by the engine bridge). */
|
|
65
|
+
static fromNative(handle) {
|
|
66
|
+
return new Message(handle);
|
|
67
|
+
}
|
|
68
|
+
/** @internal The native handle backing this message (for the engine / sendToTarget / validation). */
|
|
69
|
+
get nativeHandle() {
|
|
70
|
+
return this.#native;
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Read a body field by tag.
|
|
74
|
+
* @throws A `QuickFixError` (`fixError: 'FieldNotFound'`) if absent.
|
|
75
|
+
*/
|
|
76
|
+
getField(tag) {
|
|
77
|
+
return this.#native.getField(tag);
|
|
78
|
+
}
|
|
79
|
+
/** Set a body field. Returns `this` for chaining. */
|
|
80
|
+
setField(tag, value) {
|
|
81
|
+
this.#native.setField(tag, String(value));
|
|
82
|
+
return this;
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Read a header field by tag.
|
|
86
|
+
* @throws A `QuickFixError` (`fixError: 'FieldNotFound'`) if absent.
|
|
87
|
+
*/
|
|
88
|
+
getHeaderField(tag) {
|
|
89
|
+
return this.#native.getHeaderField(tag);
|
|
90
|
+
}
|
|
91
|
+
/** Set a header field. Returns `this` for chaining. */
|
|
92
|
+
setHeaderField(tag, value) {
|
|
93
|
+
this.#native.setHeaderField(tag, String(value));
|
|
94
|
+
return this;
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Read a trailer field by tag.
|
|
98
|
+
* @throws A `QuickFixError` (`fixError: 'FieldNotFound'`) if absent.
|
|
99
|
+
*/
|
|
100
|
+
getTrailerField(tag) {
|
|
101
|
+
return this.#native.getTrailerField(tag);
|
|
102
|
+
}
|
|
103
|
+
/** Set a trailer field. Returns `this` for chaining. */
|
|
104
|
+
setTrailerField(tag, value) {
|
|
105
|
+
this.#native.setTrailerField(tag, String(value));
|
|
106
|
+
return this;
|
|
107
|
+
}
|
|
108
|
+
/** The message type (tag 35), e.g. `'A'` for Logon. */
|
|
109
|
+
getMsgType() {
|
|
110
|
+
return this.#native.getMsgType();
|
|
111
|
+
}
|
|
112
|
+
/** The raw FIX wire string (SOH-delimited). */
|
|
113
|
+
toString() {
|
|
114
|
+
return this.#native.toString();
|
|
115
|
+
}
|
|
116
|
+
/** A human-readable, pretty-printed rendering of the message. */
|
|
117
|
+
toPretty() {
|
|
118
|
+
return this.#native.toPretty();
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* A best-effort structured view. Always includes `raw`; includes `msgType`
|
|
122
|
+
* when resolvable.
|
|
123
|
+
*/
|
|
124
|
+
toJSON() {
|
|
125
|
+
const raw = this.toString();
|
|
126
|
+
let msgType;
|
|
127
|
+
try {
|
|
128
|
+
msgType = this.getMsgType();
|
|
129
|
+
}
|
|
130
|
+
catch {
|
|
131
|
+
msgType = undefined;
|
|
132
|
+
}
|
|
133
|
+
return msgType === undefined ? { raw } : { msgType, raw };
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
exports.Message = Message;
|
|
137
|
+
/**
|
|
138
|
+
* Create a message, optionally pre-populating body fields.
|
|
139
|
+
*
|
|
140
|
+
* @param fields Map of tag → value to set on the message body.
|
|
141
|
+
*
|
|
142
|
+
* @example
|
|
143
|
+
* ```ts
|
|
144
|
+
* const msg = createMessage({ [FIELD.MsgType]: MsgType.Logon, [FIELD.HeartBtInt]: 30 });
|
|
145
|
+
* ```
|
|
146
|
+
*/
|
|
147
|
+
function createMessage(fields) {
|
|
148
|
+
const msg = new Message();
|
|
149
|
+
if (fields) {
|
|
150
|
+
for (const [tag, value] of Object.entries(fields)) {
|
|
151
|
+
msg.setField(Number(tag), value);
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
return msg;
|
|
155
|
+
}
|
|
156
|
+
/**
|
|
157
|
+
* Parse a raw FIX wire string into a {@link Message}. Alias of {@link Message.parse}.
|
|
158
|
+
*/
|
|
159
|
+
function parseMessage(raw, opts) {
|
|
160
|
+
return Message.parse(raw, opts);
|
|
161
|
+
}
|
|
162
|
+
//# sourceMappingURL=message.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"message.js","sourceRoot":"","sources":["../../src/message.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Native `FIX::Message` wrapper. FIX is string-on-the-wire, so every field
|
|
3
|
+
* value crosses the boundary as a string.
|
|
4
|
+
*/
|
|
5
|
+
export interface NativeMessage {
|
|
6
|
+
getField(tag: number): string;
|
|
7
|
+
setField(tag: number, value: string): void;
|
|
8
|
+
getHeaderField(tag: number): string;
|
|
9
|
+
setHeaderField(tag: number, value: string): void;
|
|
10
|
+
getTrailerField(tag: number): string;
|
|
11
|
+
setTrailerField(tag: number, value: string): void;
|
|
12
|
+
getMsgType(): string;
|
|
13
|
+
toString(): string;
|
|
14
|
+
toPretty(): string;
|
|
15
|
+
}
|
|
16
|
+
/** Constructor shape for the native `MessageWrap` class. */
|
|
17
|
+
export interface NativeMessageConstructor {
|
|
18
|
+
new (): NativeMessage;
|
|
19
|
+
new (raw: string, validate?: boolean): NativeMessage;
|
|
20
|
+
}
|
|
21
|
+
/** Native `FIX::SessionID` wrapper. */
|
|
22
|
+
export interface NativeSessionID {
|
|
23
|
+
getBeginString(): string;
|
|
24
|
+
getSenderCompID(): string;
|
|
25
|
+
getTargetCompID(): string;
|
|
26
|
+
getSessionQualifier(): string;
|
|
27
|
+
toString(): string;
|
|
28
|
+
}
|
|
29
|
+
/** Constructor shape for the native `SessionIDWrap` class. */
|
|
30
|
+
export interface NativeSessionIDConstructor {
|
|
31
|
+
new (beginString: string, senderCompID: string, targetCompID: string, qualifier?: string): NativeSessionID;
|
|
32
|
+
}
|
|
33
|
+
/** Native `FIX::SessionSettings` wrapper. */
|
|
34
|
+
export interface NativeSessionSettings {
|
|
35
|
+
getSessions(): NativeSessionID[];
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Constructor shape for the native `SessionSettingsWrap` class. `fromString` /
|
|
39
|
+
* `fromFile` MAY appear here as statics (see the module-level equivalents on
|
|
40
|
+
* {@link NativeModule}); we resolve defensively at runtime.
|
|
41
|
+
*/
|
|
42
|
+
export interface NativeSessionSettingsConstructor {
|
|
43
|
+
new (): NativeSessionSettings;
|
|
44
|
+
fromString?(cfg: string): NativeSessionSettings;
|
|
45
|
+
fromFile?(path: string): NativeSessionSettings;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Error shape thrown across the native bridge (e.g. from
|
|
49
|
+
* {@link NativeDataDictionary.validate}, message getters, or engine ops).
|
|
50
|
+
*
|
|
51
|
+
* Carries TWO error identifiers:
|
|
52
|
+
* - {@link QuickFixError.fixError} — the QuickFIX runtime exception type as
|
|
53
|
+
* reported by the C++ engine. This is a human-facing string that MAY contain
|
|
54
|
+
* spaces (e.g. `'Session Not Found'`, `'Field not found'`).
|
|
55
|
+
* - {@link QuickFixError.fixErrorName} — a stable, space-free discriminator
|
|
56
|
+
* suitable for `switch`/equality checks (e.g. `'SessionNotFound'`,
|
|
57
|
+
* `'FieldNotFound'`). Prefer this for programmatic branching.
|
|
58
|
+
*/
|
|
59
|
+
export interface QuickFixError extends Error {
|
|
60
|
+
/** Always `'QuickFixError'` for errors originating in the native bridge. */
|
|
61
|
+
name: string;
|
|
62
|
+
/** Human-readable message. */
|
|
63
|
+
message: string;
|
|
64
|
+
/**
|
|
65
|
+
* QuickFIX runtime exception type string (may contain spaces), e.g.
|
|
66
|
+
* `'Session Not Found'`. This is the value the native bridge reads when
|
|
67
|
+
* mapping a thrown rejection back to a FIX exception.
|
|
68
|
+
*/
|
|
69
|
+
fixError?: string;
|
|
70
|
+
/**
|
|
71
|
+
* Stable, space-free discriminator, e.g. `'SessionNotFound'`. Use this for
|
|
72
|
+
* programmatic checks; it is not subject to QuickFIX's human-facing wording.
|
|
73
|
+
*/
|
|
74
|
+
fixErrorName?: string;
|
|
75
|
+
/** Optional extra detail forwarded from the engine where available. */
|
|
76
|
+
detail?: string;
|
|
77
|
+
}
|
|
78
|
+
/** Native `FIX::DataDictionary` wrapper. */
|
|
79
|
+
export interface NativeDataDictionary {
|
|
80
|
+
/** Throws a {@link QuickFixError} if the message is invalid. */
|
|
81
|
+
validate(message: NativeMessage): void;
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Constructor shape for the native `DataDictionaryWrap` class. `fromString` /
|
|
85
|
+
* `fromFile` MAY appear here as statics (see module-level equivalents on
|
|
86
|
+
* {@link NativeModule}); we resolve defensively at runtime.
|
|
87
|
+
*/
|
|
88
|
+
export interface NativeDataDictionaryConstructor {
|
|
89
|
+
new (): NativeDataDictionary;
|
|
90
|
+
fromString?(xml: string): NativeDataDictionary;
|
|
91
|
+
fromFile?(path: string): NativeDataDictionary;
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* The handlers object handed to the native engine constructor. Each callback
|
|
95
|
+
* receives raw native handles (the TS layer re-wraps them). Mutation happens by
|
|
96
|
+
* mutating the passed {@link NativeMessage}; rejection happens by throwing.
|
|
97
|
+
*/
|
|
98
|
+
export interface NativeApplicationHandlers {
|
|
99
|
+
onCreate?(sessionID: NativeSessionID): void;
|
|
100
|
+
onLogon?(sessionID: NativeSessionID): void;
|
|
101
|
+
onLogout?(sessionID: NativeSessionID): void;
|
|
102
|
+
toAdmin?(message: NativeMessage, sessionID: NativeSessionID): void;
|
|
103
|
+
toApp?(message: NativeMessage, sessionID: NativeSessionID): void;
|
|
104
|
+
fromAdmin?(message: NativeMessage, sessionID: NativeSessionID): void;
|
|
105
|
+
fromApp?(message: NativeMessage, sessionID: NativeSessionID): void;
|
|
106
|
+
}
|
|
107
|
+
/** Options passed to the native `InitiatorWrap` / `AcceptorWrap` constructors. */
|
|
108
|
+
export interface NativeEngineOptions {
|
|
109
|
+
settings: NativeSessionSettings;
|
|
110
|
+
handlers?: NativeApplicationHandlers;
|
|
111
|
+
store?: 'file' | 'memory';
|
|
112
|
+
log?: 'screen' | 'file' | 'none';
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Native engine (SocketInitiator / SocketAcceptor) wrapper.
|
|
116
|
+
*
|
|
117
|
+
* `start`/`stop` run OFF the main thread and resolve a Promise when the engine
|
|
118
|
+
* has finished (re)configuring its sockets, so the Node.js event loop stays free
|
|
119
|
+
* to service the application callbacks the engine fires. `isLoggedOn`/`ref`/
|
|
120
|
+
* `unref` remain synchronous.
|
|
121
|
+
*/
|
|
122
|
+
export interface NativeEngine {
|
|
123
|
+
start(): Promise<void>;
|
|
124
|
+
stop(force?: boolean): Promise<void>;
|
|
125
|
+
isLoggedOn(): boolean;
|
|
126
|
+
ref(): void;
|
|
127
|
+
unref(): void;
|
|
128
|
+
}
|
|
129
|
+
/** Constructor shape for the native `InitiatorWrap` / `AcceptorWrap` classes. */
|
|
130
|
+
export interface NativeEngineConstructor {
|
|
131
|
+
new (options: NativeEngineOptions): NativeEngine;
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* The nested FIX-constants object exported by the addon, e.g.
|
|
135
|
+
* `enums.MsgType.Logon`, `enums.Side.Buy`. Field tags (`FIELD`) are not exported
|
|
136
|
+
* by the addon; they are generated on the TS side (`src/generated/fields.ts`).
|
|
137
|
+
*/
|
|
138
|
+
export type NativeEnums = Readonly<Record<string, Readonly<Record<string, number | string>>>>;
|
|
139
|
+
/** The full surface of the native addon exported by `load-native.cjs`. */
|
|
140
|
+
export interface NativeModule {
|
|
141
|
+
version(): string;
|
|
142
|
+
quickfixParseMsgType(raw: string): string;
|
|
143
|
+
/** Runs off the main thread; resolves `true` if accepted for sending. */
|
|
144
|
+
sendToTarget(message: NativeMessage, sessionID: NativeSessionID): Promise<boolean>;
|
|
145
|
+
enums: NativeEnums;
|
|
146
|
+
MessageWrap: NativeMessageConstructor;
|
|
147
|
+
SessionIDWrap: NativeSessionIDConstructor;
|
|
148
|
+
SessionSettingsWrap: NativeSessionSettingsConstructor;
|
|
149
|
+
DataDictionaryWrap: NativeDataDictionaryConstructor;
|
|
150
|
+
InitiatorWrap: NativeEngineConstructor;
|
|
151
|
+
AcceptorWrap: NativeEngineConstructor;
|
|
152
|
+
sessionSettingsFromString?(cfg: string): NativeSessionSettings;
|
|
153
|
+
sessionSettingsFromFile?(path: string): NativeSessionSettings;
|
|
154
|
+
dataDictionaryFromString?(xml: string): NativeDataDictionary;
|
|
155
|
+
dataDictionaryFromFile?(path: string): NativeDataDictionary;
|
|
156
|
+
}
|
|
157
|
+
/**
|
|
158
|
+
* The loaded native addon, typed against the {@link NativeModule} contract.
|
|
159
|
+
* The default import is an `unknown` (per node-gyp-build's declaration); we
|
|
160
|
+
* assert it to the contract here — the single localized cast in the codebase.
|
|
161
|
+
*/
|
|
162
|
+
export declare const native: NativeModule;
|
|
163
|
+
//# sourceMappingURL=native.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"native.d.ts","sourceRoot":"","sources":["../../src/native.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.native = void 0;
|
|
7
|
+
// Loads the compiled native addon. The actual `require('node-gyp-build')(root)`
|
|
8
|
+
// lives in the authored load-native.cjs, which build:ts:copy places next to the
|
|
9
|
+
// compiled output in both dist/esm and dist/cjs. We import it here; the ESM and
|
|
10
|
+
// CJS TS builds each emit the correct interop for pulling in a CommonJS module,
|
|
11
|
+
// so this single source works for both output formats.
|
|
12
|
+
//
|
|
13
|
+
// A plain default import compiles under BOTH tsconfigs (NodeNext ESM and
|
|
14
|
+
// CommonJS/Bundler). We intentionally avoid `import.meta` / `createRequire`
|
|
15
|
+
// here because `import.meta` is not permitted under the CommonJS tsconfig.
|
|
16
|
+
const load_native_cjs_1 = __importDefault(require("./load-native.cjs"));
|
|
17
|
+
/**
|
|
18
|
+
* The loaded native addon, typed against the {@link NativeModule} contract.
|
|
19
|
+
* The default import is an `unknown` (per node-gyp-build's declaration); we
|
|
20
|
+
* assert it to the contract here — the single localized cast in the codebase.
|
|
21
|
+
*/
|
|
22
|
+
exports.native = load_native_cjs_1.default;
|
|
23
|
+
//# sourceMappingURL=native.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"native.js","sourceRoot":"","sources":["../../src/native.ts"],"names":[],"mappings":";;;;;;AAAA,gFAAgF;AAChF,gFAAgF;AAChF,gFAAgF;AAChF,gFAAgF;AAChF,uDAAuD;AACvD,EAAE;AACF,yEAAyE;AACzE,4EAA4E;AAC5E,2EAA2E;AAC3E,wEAA6C;AAgM7C;;;;GAIG;AACU,QAAA,MAAM,GAAG,yBAAuC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"type":"commonjs"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Ergonomic wrapper around the native `FIX::SessionID`.
|
|
3
|
+
*/
|
|
4
|
+
import { type NativeSessionID } from './native.js';
|
|
5
|
+
/**
|
|
6
|
+
* Identifies a FIX session by its `BeginString`, `SenderCompID`,
|
|
7
|
+
* `TargetCompID`, and an optional qualifier.
|
|
8
|
+
*
|
|
9
|
+
* @example
|
|
10
|
+
* ```ts
|
|
11
|
+
* const id = new SessionID('FIX.4.4', 'CLIENT', 'BROKER');
|
|
12
|
+
* console.log(id.toString()); // FIX.4.4:CLIENT->BROKER
|
|
13
|
+
* ```
|
|
14
|
+
*/
|
|
15
|
+
export declare class SessionID {
|
|
16
|
+
#private;
|
|
17
|
+
/**
|
|
18
|
+
* @param beginString FIX version, e.g. `'FIX.4.4'`, or an existing native
|
|
19
|
+
* handle to adopt (bridge path).
|
|
20
|
+
* @param senderCompID The sender's CompID.
|
|
21
|
+
* @param targetCompID The target's CompID.
|
|
22
|
+
* @param qualifier Optional session qualifier.
|
|
23
|
+
*/
|
|
24
|
+
constructor(beginString: string | NativeSessionID, senderCompID?: string, targetCompID?: string, qualifier?: string);
|
|
25
|
+
/** @internal Wrap an existing native session-id handle (used by the engine bridge). */
|
|
26
|
+
static fromNative(handle: NativeSessionID): SessionID;
|
|
27
|
+
/** @internal The native handle backing this session id. */
|
|
28
|
+
get nativeHandle(): NativeSessionID;
|
|
29
|
+
/** FIX version, e.g. `'FIX.4.4'`. */
|
|
30
|
+
get beginString(): string;
|
|
31
|
+
/** The sender's CompID. */
|
|
32
|
+
get senderCompID(): string;
|
|
33
|
+
/** The target's CompID. */
|
|
34
|
+
get targetCompID(): string;
|
|
35
|
+
/** The session qualifier (empty string if none). */
|
|
36
|
+
get sessionQualifier(): string;
|
|
37
|
+
/** The canonical string form, e.g. `FIX.4.4:CLIENT->BROKER`. */
|
|
38
|
+
toString(): string;
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=session-id.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session-id.d.ts","sourceRoot":"","sources":["../../src/session-id.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAU,KAAK,eAAe,EAAE,MAAM,aAAa,CAAC;AAE3D;;;;;;;;;GASG;AACH,qBAAa,SAAS;;IAIpB;;;;;;OAMG;IACH,YACE,WAAW,EAAE,MAAM,GAAG,eAAe,EACrC,YAAY,CAAC,EAAE,MAAM,EACrB,YAAY,CAAC,EAAE,MAAM,EACrB,SAAS,CAAC,EAAE,MAAM,EAanB;IAED,uFAAuF;IACvF,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,eAAe,GAAG,SAAS,CAEpD;IAED,2DAA2D;IAC3D,IAAI,YAAY,IAAI,eAAe,CAElC;IAED,qCAAqC;IACrC,IAAI,WAAW,IAAI,MAAM,CAExB;IAED,2BAA2B;IAC3B,IAAI,YAAY,IAAI,MAAM,CAEzB;IAED,2BAA2B;IAC3B,IAAI,YAAY,IAAI,MAAM,CAEzB;IAED,oDAAoD;IACpD,IAAI,gBAAgB,IAAI,MAAM,CAE7B;IAED,gEAAgE;IAChE,QAAQ,IAAI,MAAM,CAEjB;CACF"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.SessionID = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* Ergonomic wrapper around the native `FIX::SessionID`.
|
|
6
|
+
*/
|
|
7
|
+
const native_js_1 = require("./native.js");
|
|
8
|
+
/**
|
|
9
|
+
* Identifies a FIX session by its `BeginString`, `SenderCompID`,
|
|
10
|
+
* `TargetCompID`, and an optional qualifier.
|
|
11
|
+
*
|
|
12
|
+
* @example
|
|
13
|
+
* ```ts
|
|
14
|
+
* const id = new SessionID('FIX.4.4', 'CLIENT', 'BROKER');
|
|
15
|
+
* console.log(id.toString()); // FIX.4.4:CLIENT->BROKER
|
|
16
|
+
* ```
|
|
17
|
+
*/
|
|
18
|
+
class SessionID {
|
|
19
|
+
/** @internal Underlying native handle. */
|
|
20
|
+
#native;
|
|
21
|
+
/**
|
|
22
|
+
* @param beginString FIX version, e.g. `'FIX.4.4'`, or an existing native
|
|
23
|
+
* handle to adopt (bridge path).
|
|
24
|
+
* @param senderCompID The sender's CompID.
|
|
25
|
+
* @param targetCompID The target's CompID.
|
|
26
|
+
* @param qualifier Optional session qualifier.
|
|
27
|
+
*/
|
|
28
|
+
constructor(beginString, senderCompID, targetCompID, qualifier) {
|
|
29
|
+
if (typeof beginString !== 'string') {
|
|
30
|
+
// Adopt an existing native handle (bridge path).
|
|
31
|
+
this.#native = beginString;
|
|
32
|
+
}
|
|
33
|
+
else {
|
|
34
|
+
this.#native = new native_js_1.native.SessionIDWrap(beginString, senderCompID ?? '', targetCompID ?? '', qualifier);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
/** @internal Wrap an existing native session-id handle (used by the engine bridge). */
|
|
38
|
+
static fromNative(handle) {
|
|
39
|
+
return new SessionID(handle);
|
|
40
|
+
}
|
|
41
|
+
/** @internal The native handle backing this session id. */
|
|
42
|
+
get nativeHandle() {
|
|
43
|
+
return this.#native;
|
|
44
|
+
}
|
|
45
|
+
/** FIX version, e.g. `'FIX.4.4'`. */
|
|
46
|
+
get beginString() {
|
|
47
|
+
return this.#native.getBeginString();
|
|
48
|
+
}
|
|
49
|
+
/** The sender's CompID. */
|
|
50
|
+
get senderCompID() {
|
|
51
|
+
return this.#native.getSenderCompID();
|
|
52
|
+
}
|
|
53
|
+
/** The target's CompID. */
|
|
54
|
+
get targetCompID() {
|
|
55
|
+
return this.#native.getTargetCompID();
|
|
56
|
+
}
|
|
57
|
+
/** The session qualifier (empty string if none). */
|
|
58
|
+
get sessionQualifier() {
|
|
59
|
+
return this.#native.getSessionQualifier();
|
|
60
|
+
}
|
|
61
|
+
/** The canonical string form, e.g. `FIX.4.4:CLIENT->BROKER`. */
|
|
62
|
+
toString() {
|
|
63
|
+
return this.#native.toString();
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
exports.SessionID = SessionID;
|
|
67
|
+
//# sourceMappingURL=session-id.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session-id.js","sourceRoot":"","sources":["../../src/session-id.ts"],"names":[],"mappings":";;;AAAA;;GAEG;AACH,2CAA2D;AAE3D;;;;;;;;;GASG;AACH;IACE,0CAA0C;IACjC,OAAO,CAAkB;IAElC;;;;;;OAMG;IACH,YACE,WAAqC,EACrC,YAAqB,EACrB,YAAqB,EACrB,SAAkB;QAElB,IAAI,OAAO,WAAW,KAAK,QAAQ,EAAE,CAAC;YACpC,iDAAiD;YACjD,IAAI,CAAC,OAAO,GAAG,WAAW,CAAC;QAC7B,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,OAAO,GAAG,IAAI,kBAAM,CAAC,aAAa,CACrC,WAAW,EACX,YAAY,IAAI,EAAE,EAClB,YAAY,IAAI,EAAE,EAClB,SAAS,CACV,CAAC;QACJ,CAAC;IACH,CAAC;IAED,uFAAuF;IACvF,MAAM,CAAC,UAAU,CAAC,MAAuB;QACvC,OAAO,IAAI,SAAS,CAAC,MAAM,CAAC,CAAC;IAC/B,CAAC;IAED,2DAA2D;IAC3D,IAAI,YAAY;QACd,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;IAED,qCAAqC;IACrC,IAAI,WAAW;QACb,OAAO,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE,CAAC;IACvC,CAAC;IAED,2BAA2B;IAC3B,IAAI,YAAY;QACd,OAAO,IAAI,CAAC,OAAO,CAAC,eAAe,EAAE,CAAC;IACxC,CAAC;IAED,2BAA2B;IAC3B,IAAI,YAAY;QACd,OAAO,IAAI,CAAC,OAAO,CAAC,eAAe,EAAE,CAAC;IACxC,CAAC;IAED,oDAAoD;IACpD,IAAI,gBAAgB;QAClB,OAAO,IAAI,CAAC,OAAO,CAAC,mBAAmB,EAAE,CAAC;IAC5C,CAAC;IAED,gEAAgE;IAChE,QAAQ;QACN,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;IACjC,CAAC;CACF"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Ergonomic wrapper around the native `FIX::SessionSettings`.
|
|
3
|
+
*/
|
|
4
|
+
import { type NativeSessionSettings } from './native.js';
|
|
5
|
+
import { SessionID } from './session-id.js';
|
|
6
|
+
/**
|
|
7
|
+
* Parsed QuickFIX session settings (the `.cfg` configuration).
|
|
8
|
+
*
|
|
9
|
+
* Construct via {@link SessionSettings.fromString} or
|
|
10
|
+
* {@link SessionSettings.fromFile}; direct construction is not supported.
|
|
11
|
+
*
|
|
12
|
+
* @example
|
|
13
|
+
* ```ts
|
|
14
|
+
* const settings = SessionSettings.fromString(`
|
|
15
|
+
* [DEFAULT]
|
|
16
|
+
* ConnectionType=initiator
|
|
17
|
+
* ...
|
|
18
|
+
* `);
|
|
19
|
+
* for (const id of settings.getSessions()) console.log(id.toString());
|
|
20
|
+
* ```
|
|
21
|
+
*/
|
|
22
|
+
export declare class SessionSettings {
|
|
23
|
+
#private;
|
|
24
|
+
/** @internal Use {@link SessionSettings.fromString} / {@link SessionSettings.fromFile}. */
|
|
25
|
+
private constructor();
|
|
26
|
+
/**
|
|
27
|
+
* Parse settings from an in-memory config string.
|
|
28
|
+
*
|
|
29
|
+
* @param cfg The QuickFIX `.cfg` contents.
|
|
30
|
+
* @throws A `QuickFixError` (`fixError: 'ConfigError'`) on invalid config.
|
|
31
|
+
*/
|
|
32
|
+
static fromString(cfg: string): SessionSettings;
|
|
33
|
+
/**
|
|
34
|
+
* Load settings from a `.cfg` file on disk.
|
|
35
|
+
*
|
|
36
|
+
* @param path Path to the QuickFIX `.cfg` file.
|
|
37
|
+
* @throws A `QuickFixError` (`fixError: 'ConfigError'`) on invalid config.
|
|
38
|
+
*/
|
|
39
|
+
static fromFile(path: string): SessionSettings;
|
|
40
|
+
/** @internal Wrap an existing native handle. */
|
|
41
|
+
static fromNative(handle: NativeSessionSettings): SessionSettings;
|
|
42
|
+
/** @internal The native handle backing these settings. */
|
|
43
|
+
get nativeHandle(): NativeSessionSettings;
|
|
44
|
+
/** The sessions declared by this configuration. */
|
|
45
|
+
getSessions(): SessionID[];
|
|
46
|
+
}
|
|
47
|
+
//# sourceMappingURL=session-settings.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session-settings.d.ts","sourceRoot":"","sources":["../../src/session-settings.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAU,KAAK,qBAAqB,EAAE,MAAM,aAAa,CAAC;AACjE,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAE5C;;;;;;;;;;;;;;;GAeG;AACH,qBAAa,eAAe;;IAI1B,2FAA2F;IAC3F,OAAO,eAEN;IAED;;;;;OAKG;IACH,MAAM,CAAC,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,eAAe,CAU9C;IAED;;;;;OAKG;IACH,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,eAAe,CAQ7C;IAED,gDAAgD;IAChD,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,qBAAqB,GAAG,eAAe,CAEhE;IAED,0DAA0D;IAC1D,IAAI,YAAY,IAAI,qBAAqB,CAExC;IAED,mDAAmD;IACnD,WAAW,IAAI,SAAS,EAAE,CAEzB;CACF"}
|