@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.
Files changed (131) hide show
  1. package/CMakeLists.txt +131 -0
  2. package/LICENSE +21 -0
  3. package/README.md +421 -2
  4. package/THIRD_PARTY_LICENSES +48 -0
  5. package/cpp/acceptor_wrap.cpp +234 -0
  6. package/cpp/acceptor_wrap.h +57 -0
  7. package/cpp/addon.cpp +83 -0
  8. package/cpp/application_bridge.cpp +382 -0
  9. package/cpp/application_bridge.h +151 -0
  10. package/cpp/data_dictionary_wrap.cpp +79 -0
  11. package/cpp/data_dictionary_wrap.h +37 -0
  12. package/cpp/engine_common.cpp +5 -0
  13. package/cpp/engine_common.h +19 -0
  14. package/cpp/engine_workers.h +86 -0
  15. package/cpp/enums.cpp +66 -0
  16. package/cpp/errors.h +142 -0
  17. package/cpp/initiator_wrap.cpp +255 -0
  18. package/cpp/initiator_wrap.h +69 -0
  19. package/cpp/message_wrap.cpp +195 -0
  20. package/cpp/message_wrap.h +53 -0
  21. package/cpp/session_id_wrap.cpp +91 -0
  22. package/cpp/session_id_wrap.h +46 -0
  23. package/cpp/session_settings_wrap.cpp +98 -0
  24. package/cpp/session_settings_wrap.h +40 -0
  25. package/cpp/session_static.cpp +93 -0
  26. package/dist/cjs/acceptor.d.ts +30 -0
  27. package/dist/cjs/acceptor.d.ts.map +1 -0
  28. package/dist/cjs/acceptor.js +39 -0
  29. package/dist/cjs/acceptor.js.map +1 -0
  30. package/dist/cjs/application.d.ts +116 -0
  31. package/dist/cjs/application.d.ts.map +1 -0
  32. package/dist/cjs/application.js +63 -0
  33. package/dist/cjs/application.js.map +1 -0
  34. package/dist/cjs/data-dictionary.d.ts +49 -0
  35. package/dist/cjs/data-dictionary.d.ts.map +1 -0
  36. package/dist/cjs/data-dictionary.js +77 -0
  37. package/dist/cjs/data-dictionary.js.map +1 -0
  38. package/dist/cjs/engine.d.ts +114 -0
  39. package/dist/cjs/engine.d.ts.map +1 -0
  40. package/dist/cjs/engine.js +138 -0
  41. package/dist/cjs/engine.js.map +1 -0
  42. package/dist/cjs/enums.d.ts +22 -0
  43. package/dist/cjs/enums.d.ts.map +1 -0
  44. package/dist/cjs/enums.js +49 -0
  45. package/dist/cjs/enums.js.map +1 -0
  46. package/dist/cjs/generated/fields.d.ts +6123 -0
  47. package/dist/cjs/generated/fields.d.ts.map +1 -0
  48. package/dist/cjs/generated/fields.js +6128 -0
  49. package/dist/cjs/generated/fields.js.map +1 -0
  50. package/dist/cjs/index.d.ts +47 -0
  51. package/dist/cjs/index.d.ts.map +1 -0
  52. package/dist/cjs/index.js +73 -0
  53. package/dist/cjs/index.js.map +1 -0
  54. package/dist/cjs/initiator.d.ts +30 -0
  55. package/dist/cjs/initiator.d.ts.map +1 -0
  56. package/dist/cjs/initiator.js +39 -0
  57. package/dist/cjs/initiator.js.map +1 -0
  58. package/dist/cjs/load-native.cjs +5 -0
  59. package/dist/cjs/message.d.ts +114 -0
  60. package/dist/cjs/message.d.ts.map +1 -0
  61. package/dist/cjs/message.js +162 -0
  62. package/dist/cjs/message.js.map +1 -0
  63. package/dist/cjs/native.d.ts +163 -0
  64. package/dist/cjs/native.d.ts.map +1 -0
  65. package/dist/cjs/native.js +23 -0
  66. package/dist/cjs/native.js.map +1 -0
  67. package/dist/cjs/package.json +1 -0
  68. package/dist/cjs/session-id.d.ts +40 -0
  69. package/dist/cjs/session-id.d.ts.map +1 -0
  70. package/dist/cjs/session-id.js +67 -0
  71. package/dist/cjs/session-id.js.map +1 -0
  72. package/dist/cjs/session-settings.d.ts +47 -0
  73. package/dist/cjs/session-settings.d.ts.map +1 -0
  74. package/dist/cjs/session-settings.js +76 -0
  75. package/dist/cjs/session-settings.js.map +1 -0
  76. package/dist/esm/acceptor.d.ts +30 -0
  77. package/dist/esm/acceptor.d.ts.map +1 -0
  78. package/dist/esm/acceptor.js +35 -0
  79. package/dist/esm/acceptor.js.map +1 -0
  80. package/dist/esm/application.d.ts +116 -0
  81. package/dist/esm/application.d.ts.map +1 -0
  82. package/dist/esm/application.js +58 -0
  83. package/dist/esm/application.js.map +1 -0
  84. package/dist/esm/data-dictionary.d.ts +49 -0
  85. package/dist/esm/data-dictionary.d.ts.map +1 -0
  86. package/dist/esm/data-dictionary.js +73 -0
  87. package/dist/esm/data-dictionary.js.map +1 -0
  88. package/dist/esm/engine.d.ts +114 -0
  89. package/dist/esm/engine.d.ts.map +1 -0
  90. package/dist/esm/engine.js +134 -0
  91. package/dist/esm/engine.js.map +1 -0
  92. package/dist/esm/enums.d.ts +22 -0
  93. package/dist/esm/enums.d.ts.map +1 -0
  94. package/dist/esm/enums.js +45 -0
  95. package/dist/esm/enums.js.map +1 -0
  96. package/dist/esm/generated/fields.d.ts +6123 -0
  97. package/dist/esm/generated/fields.d.ts.map +1 -0
  98. package/dist/esm/generated/fields.js +6125 -0
  99. package/dist/esm/generated/fields.js.map +1 -0
  100. package/dist/esm/index.d.ts +47 -0
  101. package/dist/esm/index.d.ts.map +1 -0
  102. package/dist/esm/index.js +52 -0
  103. package/dist/esm/index.js.map +1 -0
  104. package/dist/esm/initiator.d.ts +30 -0
  105. package/dist/esm/initiator.d.ts.map +1 -0
  106. package/dist/esm/initiator.js +35 -0
  107. package/dist/esm/initiator.js.map +1 -0
  108. package/dist/esm/load-native.cjs +5 -0
  109. package/dist/esm/message.d.ts +114 -0
  110. package/dist/esm/message.d.ts.map +1 -0
  111. package/dist/esm/message.js +156 -0
  112. package/dist/esm/message.js.map +1 -0
  113. package/dist/esm/native.d.ts +163 -0
  114. package/dist/esm/native.d.ts.map +1 -0
  115. package/dist/esm/native.js +17 -0
  116. package/dist/esm/native.js.map +1 -0
  117. package/dist/esm/session-id.d.ts +40 -0
  118. package/dist/esm/session-id.d.ts.map +1 -0
  119. package/dist/esm/session-id.js +63 -0
  120. package/dist/esm/session-id.js.map +1 -0
  121. package/dist/esm/session-settings.d.ts +47 -0
  122. package/dist/esm/session-settings.d.ts.map +1 -0
  123. package/dist/esm/session-settings.js +72 -0
  124. package/dist/esm/session-settings.js.map +1 -0
  125. package/package.json +83 -4
  126. package/prebuilds/darwin-arm64/node.napi.node +0 -0
  127. package/prebuilds/darwin-x64/node.napi.node +0 -0
  128. package/prebuilds/linux-x64/node.napi.glibc.node +0 -0
  129. package/prebuilds/linux-x64/node.napi.musl.node +0 -0
  130. package/prebuilds/win32-x64/node.napi.node +0 -0
  131. package/src/load-native.cjs +5 -0
@@ -0,0 +1,72 @@
1
+ /**
2
+ * Ergonomic wrapper around the native `FIX::SessionSettings`.
3
+ */
4
+ import { native } 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 class SessionSettings {
23
+ /** @internal Underlying native handle. */
24
+ #native;
25
+ /** @internal Use {@link SessionSettings.fromString} / {@link SessionSettings.fromFile}. */
26
+ constructor(handle) {
27
+ this.#native = handle;
28
+ }
29
+ /**
30
+ * Parse settings from an in-memory config string.
31
+ *
32
+ * @param cfg The QuickFIX `.cfg` contents.
33
+ * @throws A `QuickFixError` (`fixError: 'ConfigError'`) on invalid config.
34
+ */
35
+ static fromString(cfg) {
36
+ // The native `fromString` may be a module-level fn or a class static;
37
+ // prefer the module-level fn, fall back to the static.
38
+ const handle = native.sessionSettingsFromString?.(cfg) ??
39
+ native.SessionSettingsWrap.fromString?.(cfg);
40
+ if (!handle) {
41
+ throw new Error('native SessionSettings.fromString is unavailable');
42
+ }
43
+ return new SessionSettings(handle);
44
+ }
45
+ /**
46
+ * Load settings from a `.cfg` file on disk.
47
+ *
48
+ * @param path Path to the QuickFIX `.cfg` file.
49
+ * @throws A `QuickFixError` (`fixError: 'ConfigError'`) on invalid config.
50
+ */
51
+ static fromFile(path) {
52
+ const handle = native.sessionSettingsFromFile?.(path) ??
53
+ native.SessionSettingsWrap.fromFile?.(path);
54
+ if (!handle) {
55
+ throw new Error('native SessionSettings.fromFile is unavailable');
56
+ }
57
+ return new SessionSettings(handle);
58
+ }
59
+ /** @internal Wrap an existing native handle. */
60
+ static fromNative(handle) {
61
+ return new SessionSettings(handle);
62
+ }
63
+ /** @internal The native handle backing these settings. */
64
+ get nativeHandle() {
65
+ return this.#native;
66
+ }
67
+ /** The sessions declared by this configuration. */
68
+ getSessions() {
69
+ return this.#native.getSessions().map((h) => SessionID.fromNative(h));
70
+ }
71
+ }
72
+ //# sourceMappingURL=session-settings.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-settings.js","sourceRoot":"","sources":["../../src/session-settings.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,MAAM,EAA8B,MAAM,aAAa,CAAC;AACjE,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAE5C;;;;;;;;;;;;;;;GAeG;AACH,MAAM,OAAO,eAAe;IAC1B,0CAA0C;IACjC,OAAO,CAAwB;IAExC,2FAA2F;IAC3F,YAAoB,MAA6B;QAC/C,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;IACxB,CAAC;IAED;;;;;OAKG;IACH,MAAM,CAAC,UAAU,CAAC,GAAW;QAC3B,sEAAsE;QACtE,uDAAuD;QACvD,MAAM,MAAM,GACV,MAAM,CAAC,yBAAyB,EAAE,CAAC,GAAG,CAAC;YACvC,MAAM,CAAC,mBAAmB,CAAC,UAAU,EAAE,CAAC,GAAG,CAAC,CAAC;QAC/C,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,CAAC,kDAAkD,CAAC,CAAC;QACtE,CAAC;QACD,OAAO,IAAI,eAAe,CAAC,MAAM,CAAC,CAAC;IACrC,CAAC;IAED;;;;;OAKG;IACH,MAAM,CAAC,QAAQ,CAAC,IAAY;QAC1B,MAAM,MAAM,GACV,MAAM,CAAC,uBAAuB,EAAE,CAAC,IAAI,CAAC;YACtC,MAAM,CAAC,mBAAmB,CAAC,QAAQ,EAAE,CAAC,IAAI,CAAC,CAAC;QAC9C,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,CAAC,gDAAgD,CAAC,CAAC;QACpE,CAAC;QACD,OAAO,IAAI,eAAe,CAAC,MAAM,CAAC,CAAC;IACrC,CAAC;IAED,gDAAgD;IAChD,MAAM,CAAC,UAAU,CAAC,MAA6B;QAC7C,OAAO,IAAI,eAAe,CAAC,MAAM,CAAC,CAAC;IACrC,CAAC;IAED,0DAA0D;IAC1D,IAAI,YAAY;QACd,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;IAED,mDAAmD;IACnD,WAAW;QACT,OAAO,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;IACxE,CAAC;CACF"}
package/package.json CHANGED
@@ -1,6 +1,85 @@
1
1
  {
2
2
  "name": "@homaiohq/napi-quickfix",
3
- "version": "0.0.0-stage",
4
- "stub": true,
5
- "description": "Temporary package placeholder for staged publishing"
6
- }
3
+ "version": "0.1.0",
4
+ "description": "Modern Node-API (N-API) C++ binding for the QuickFIX FIX-protocol engine.",
5
+ "license": "MIT",
6
+ "repository": {
7
+ "type": "git",
8
+ "url": "git+https://github.com/homaiohq/napi-quickfix.git"
9
+ },
10
+ "homepage": "https://github.com/homaiohq/napi-quickfix#readme",
11
+ "bugs": {
12
+ "url": "https://github.com/homaiohq/napi-quickfix/issues"
13
+ },
14
+ "type": "module",
15
+ "engines": {
16
+ "node": ">=22"
17
+ },
18
+ "packageManager": "yarn@4.17.1",
19
+ "main": "./dist/cjs/index.js",
20
+ "module": "./dist/esm/index.js",
21
+ "types": "./dist/esm/index.d.ts",
22
+ "exports": {
23
+ ".": {
24
+ "import": {
25
+ "types": "./dist/esm/index.d.ts",
26
+ "default": "./dist/esm/index.js"
27
+ },
28
+ "require": {
29
+ "types": "./dist/cjs/index.d.ts",
30
+ "default": "./dist/cjs/index.js"
31
+ }
32
+ },
33
+ "./fields": {
34
+ "import": {
35
+ "types": "./dist/esm/generated/fields.d.ts",
36
+ "default": "./dist/esm/generated/fields.js"
37
+ },
38
+ "require": {
39
+ "types": "./dist/cjs/generated/fields.d.ts",
40
+ "default": "./dist/cjs/generated/fields.js"
41
+ }
42
+ },
43
+ "./package.json": "./package.json"
44
+ },
45
+ "sideEffects": [
46
+ "./dist/*/native.js",
47
+ "./dist/*/load-native.cjs"
48
+ ],
49
+ "files": [
50
+ "dist/",
51
+ "prebuilds/",
52
+ "cpp/",
53
+ "CMakeLists.txt",
54
+ "src/load-native.cjs",
55
+ "THIRD_PARTY_LICENSES"
56
+ ],
57
+ "scripts": {
58
+ "build:native": "cmake-js compile --CDCMAKE_BUILD_TYPE=Release --CDCMAKE_POLICY_VERSION_MINIMUM=3.5",
59
+ "build:ts:esm": "tsc -p tsconfig.esm.json",
60
+ "build:ts:cjs": "tsc -p tsconfig.cjs.json",
61
+ "build:ts:copy": "node -e \"const fs=require('node:fs');for(const d of ['dist/esm','dist/cjs']){fs.mkdirSync(d,{recursive:true});fs.copyFileSync('src/load-native.cjs',d+'/load-native.cjs');}fs.writeFileSync('dist/cjs/package.json',JSON.stringify({type:'commonjs'})+'\\n');\"",
62
+ "build:ts": "yarn build:ts:esm && yarn build:ts:cjs && yarn build:ts:copy",
63
+ "gen:fields": "node scripts/gen-fields.mjs",
64
+ "gen:fields:check": "node scripts/gen-fields.mjs --check",
65
+ "build": "yarn build:native && yarn build:ts",
66
+ "test": "node --test --import tsx test/*.test.ts",
67
+ "typecheck": "tsc -p test/tsconfig.json",
68
+ "prebuild": "node scripts/prebuild.mjs",
69
+ "install": "node-gyp-build || cmake-js compile --CDCMAKE_BUILD_TYPE=Release --CDCMAKE_POLICY_VERSION_MINIMUM=3.5",
70
+ "clean": "node -e \"const fs=require('node:fs');for(const d of ['dist','build']){fs.rmSync(d,{recursive:true,force:true});}\""
71
+ },
72
+ "cmake-js": {
73
+ "runtime": "node"
74
+ },
75
+ "dependencies": {
76
+ "node-addon-api": "^8.9.0",
77
+ "node-gyp-build": "^4.8.0"
78
+ },
79
+ "devDependencies": {
80
+ "@types/node": "^26.1.1",
81
+ "cmake-js": "^8",
82
+ "tsx": "^4",
83
+ "typescript": "~7"
84
+ }
85
+ }
@@ -0,0 +1,5 @@
1
+ // Authored (NOT compiled by tsc). Copied verbatim into dist/esm and dist/cjs by
2
+ // build:ts:copy. From either of those directories, two levels up is the package
3
+ // root, where prebuilds/ lives (and build/Release/*.node in local dev).
4
+ const path = require('node:path');
5
+ module.exports = require('node-gyp-build')(path.join(__dirname, '..', '..'));