jspurefix 2.2.1 → 3.0.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 (639) hide show
  1. package/.eslintrc +30 -0
  2. package/README.md +297 -249
  3. package/data/session/test-http-initiator.json +2 -2
  4. package/dist/buffer/ascii/ascii-chars.js.map +1 -1
  5. package/dist/buffer/ascii/ascii-encoder.js +9 -5
  6. package/dist/buffer/ascii/ascii-encoder.js.map +1 -1
  7. package/dist/buffer/ascii/ascii-parser-state.d.ts +2 -2
  8. package/dist/buffer/ascii/ascii-parser-state.js +1 -1
  9. package/dist/buffer/ascii/ascii-parser-state.js.map +1 -1
  10. package/dist/buffer/ascii/ascii-parser.d.ts +2 -2
  11. package/dist/buffer/ascii/ascii-parser.js +17 -11
  12. package/dist/buffer/ascii/ascii-parser.js.map +1 -1
  13. package/dist/buffer/ascii/ascii-segment-parser.d.ts +1 -1
  14. package/dist/buffer/ascii/ascii-segment-parser.js +11 -3
  15. package/dist/buffer/ascii/ascii-segment-parser.js.map +1 -1
  16. package/dist/buffer/ascii/ascii-view.d.ts +3 -3
  17. package/dist/buffer/ascii/ascii-view.js +18 -0
  18. package/dist/buffer/ascii/ascii-view.js.map +1 -1
  19. package/dist/buffer/ascii/itime-formatter.d.ts +12 -12
  20. package/dist/buffer/ascii/itime-formatter.js.map +1 -1
  21. package/dist/buffer/ascii/time-formatter.d.ts +6 -6
  22. package/dist/buffer/ascii/time-formatter.js.map +1 -1
  23. package/dist/buffer/elastic-buffer.d.ts +1 -1
  24. package/dist/buffer/elastic-buffer.js +2 -2
  25. package/dist/buffer/elastic-buffer.js.map +1 -1
  26. package/dist/buffer/encode-proxy.js +1 -1
  27. package/dist/buffer/encode-proxy.js.map +1 -1
  28. package/dist/buffer/encoder-state.d.ts +2 -2
  29. package/dist/buffer/encoder-state.js +4 -1
  30. package/dist/buffer/encoder-state.js.map +1 -1
  31. package/dist/buffer/fixml/fixml-encoder.js +4 -2
  32. package/dist/buffer/fixml/fixml-encoder.js.map +1 -1
  33. package/dist/buffer/fixml/fixml-parser.js +61 -39
  34. package/dist/buffer/fixml/fixml-parser.js.map +1 -1
  35. package/dist/buffer/fixml/fixml-view.js +3 -3
  36. package/dist/buffer/fixml/fixml-view.js.map +1 -1
  37. package/dist/buffer/fixml/populated-attributes.js.map +1 -1
  38. package/dist/buffer/msg-encoder.js +2 -1
  39. package/dist/buffer/msg-encoder.js.map +1 -1
  40. package/dist/buffer/msg-view.d.ts +9 -9
  41. package/dist/buffer/msg-view.js +58 -25
  42. package/dist/buffer/msg-view.js.map +1 -1
  43. package/dist/buffer/segment/segment-description.d.ts +4 -4
  44. package/dist/buffer/segment/segment-description.js +7 -5
  45. package/dist/buffer/segment/segment-description.js.map +1 -1
  46. package/dist/buffer/segment/segment-summary.js +2 -1
  47. package/dist/buffer/segment/segment-summary.js.map +1 -1
  48. package/dist/buffer/structure.d.ts +1 -1
  49. package/dist/buffer/structure.js +1 -2
  50. package/dist/buffer/structure.js.map +1 -1
  51. package/dist/buffer/time-format-template.js.map +1 -1
  52. package/dist/collections/collection.d.ts +3 -7
  53. package/dist/collections/collection.js.map +1 -1
  54. package/dist/collections/dictionary.d.ts +1 -1
  55. package/dist/collections/dictionary.js +2 -1
  56. package/dist/collections/dictionary.js.map +1 -1
  57. package/dist/config/empty-log-factory.js.map +1 -1
  58. package/dist/config/get-js-fx-logger.d.ts +1 -3
  59. package/dist/config/get-js-fx-logger.js.map +1 -1
  60. package/dist/config/js-fix-config.d.ts +3 -3
  61. package/dist/config/js-fix-config.js.map +1 -1
  62. package/dist/config/js-fix-logger.d.ts +5 -5
  63. package/dist/config/js-fix-logger.js.map +1 -1
  64. package/dist/config/js-fix-winston-log-factory.d.ts +1 -1
  65. package/dist/config/js-fix-winston-log-factory.js.map +1 -1
  66. package/dist/config/winston-logger.js +7 -7
  67. package/dist/config/winston-logger.js.map +1 -1
  68. package/dist/dict-parser.js +27 -21
  69. package/dist/dict-parser.js.map +1 -1
  70. package/dist/dictionary/compiler/compiler-settings.js.map +1 -1
  71. package/dist/dictionary/compiler/compiler-type.js.map +1 -1
  72. package/dist/dictionary/compiler/enum-compiler.d.ts +2 -2
  73. package/dist/dictionary/compiler/enum-compiler.js +7 -10
  74. package/dist/dictionary/compiler/enum-compiler.js.map +1 -1
  75. package/dist/dictionary/compiler/msg-compiler.js +9 -10
  76. package/dist/dictionary/compiler/msg-compiler.js.map +1 -1
  77. package/dist/dictionary/compiler/standard-snippet.d.ts +1 -1
  78. package/dist/dictionary/compiler/standard-snippet.js +11 -10
  79. package/dist/dictionary/compiler/standard-snippet.js.map +1 -1
  80. package/dist/dictionary/contained/contained-component-field.d.ts +2 -2
  81. package/dist/dictionary/contained/contained-component-field.js +1 -1
  82. package/dist/dictionary/contained/contained-component-field.js.map +1 -1
  83. package/dist/dictionary/contained/contained-field-dispatcher.d.ts +3 -9
  84. package/dist/dictionary/contained/contained-field-dispatcher.js.map +1 -1
  85. package/dist/dictionary/contained/contained-field-set.d.ts +4 -4
  86. package/dist/dictionary/contained/contained-field-set.js +1 -1
  87. package/dist/dictionary/contained/contained-field-set.js.map +1 -1
  88. package/dist/dictionary/contained/contained-field.d.ts +1 -0
  89. package/dist/dictionary/contained/contained-field.js +3 -0
  90. package/dist/dictionary/contained/contained-field.js.map +1 -1
  91. package/dist/dictionary/contained/contained-group-field.d.ts +2 -2
  92. package/dist/dictionary/contained/contained-group-field.js +1 -1
  93. package/dist/dictionary/contained/contained-group-field.js.map +1 -1
  94. package/dist/dictionary/contained/contained-simple-field.d.ts +2 -2
  95. package/dist/dictionary/contained/contained-simple-field.js +1 -1
  96. package/dist/dictionary/contained/contained-simple-field.js.map +1 -1
  97. package/dist/dictionary/contained/field-dispatcher.d.ts +3 -9
  98. package/dist/dictionary/contained/field-dispatcher.js.map +1 -1
  99. package/dist/dictionary/contained/fields-dispatch.js +0 -1
  100. package/dist/dictionary/contained/fields-dispatch.js.map +1 -1
  101. package/dist/dictionary/definition/component-field-definition.d.ts +3 -3
  102. package/dist/dictionary/definition/component-field-definition.js +1 -1
  103. package/dist/dictionary/definition/component-field-definition.js.map +1 -1
  104. package/dist/dictionary/definition/fix-definitions.d.ts +3 -3
  105. package/dist/dictionary/definition/fix-definitions.js +3 -2
  106. package/dist/dictionary/definition/fix-definitions.js.map +1 -1
  107. package/dist/dictionary/definition/group-field-definition.d.ts +4 -4
  108. package/dist/dictionary/definition/group-field-definition.js +1 -1
  109. package/dist/dictionary/definition/group-field-definition.js.map +1 -1
  110. package/dist/dictionary/definition/message-definition.d.ts +2 -2
  111. package/dist/dictionary/definition/message-definition.js.map +1 -1
  112. package/dist/dictionary/definition/simple-field-definition.d.ts +4 -4
  113. package/dist/dictionary/definition/simple-field-definition.js +3 -2
  114. package/dist/dictionary/definition/simple-field-definition.js.map +1 -1
  115. package/dist/dictionary/dict-primitive.d.ts +1 -1
  116. package/dist/dictionary/dict-primitive.js.map +1 -1
  117. package/dist/dictionary/field-enum.js.map +1 -1
  118. package/dist/dictionary/fix-versions.js.map +1 -1
  119. package/dist/dictionary/parser/fix-repository/repository-xml-parser.js +20 -18
  120. package/dist/dictionary/parser/fix-repository/repository-xml-parser.js.map +1 -1
  121. package/dist/dictionary/parser/fix-repository/repository.js +24 -16
  122. package/dist/dictionary/parser/fix-repository/repository.js.map +1 -1
  123. package/dist/dictionary/parser/fixml/components-parser.d.ts +1 -1
  124. package/dist/dictionary/parser/fixml/components-parser.js +24 -15
  125. package/dist/dictionary/parser/fixml/components-parser.js.map +1 -1
  126. package/dist/dictionary/parser/fixml/fields-parser.d.ts +1 -1
  127. package/dist/dictionary/parser/fixml/fields-parser.js +5 -5
  128. package/dist/dictionary/parser/fixml/fields-parser.js.map +1 -1
  129. package/dist/dictionary/parser/fixml/fix-xsd-parser.js +3 -2
  130. package/dist/dictionary/parser/fixml/fix-xsd-parser.js.map +1 -1
  131. package/dist/dictionary/parser/fixml/include-graph.d.ts +1 -1
  132. package/dist/dictionary/parser/fixml/include-graph.js +58 -48
  133. package/dist/dictionary/parser/fixml/include-graph.js.map +1 -1
  134. package/dist/dictionary/parser/fixml/xsd-parser.d.ts +1 -1
  135. package/dist/dictionary/parser/fixml/xsd-parser.js +34 -23
  136. package/dist/dictionary/parser/fixml/xsd-parser.js.map +1 -1
  137. package/dist/dictionary/parser/quickfix/field-definition-parser.js +0 -2
  138. package/dist/dictionary/parser/quickfix/field-definition-parser.js.map +1 -1
  139. package/dist/dictionary/parser/quickfix/field-set-parser.js +3 -2
  140. package/dist/dictionary/parser/quickfix/field-set-parser.js.map +1 -1
  141. package/dist/dictionary/parser/quickfix/message-parser.js +10 -5
  142. package/dist/dictionary/parser/quickfix/message-parser.js.map +1 -1
  143. package/dist/dictionary/parser/quickfix/node-parser.js +14 -8
  144. package/dist/dictionary/parser/quickfix/node-parser.js.map +1 -1
  145. package/dist/dictionary/parser/quickfix/parse-context.d.ts +5 -5
  146. package/dist/dictionary/parser/quickfix/parse-context.js.map +1 -1
  147. package/dist/dictionary/parser/quickfix/quick-fix-xml-file-parser.js +22 -19
  148. package/dist/dictionary/parser/quickfix/quick-fix-xml-file-parser.js.map +1 -1
  149. package/dist/dictionary/set-reduce.js.map +1 -1
  150. package/dist/dictionary/type-dispatcher.d.ts +3 -9
  151. package/dist/dictionary/type-dispatcher.js.map +1 -1
  152. package/dist/dictionary/version-util.js +8 -8
  153. package/dist/dictionary/version-util.js.map +1 -1
  154. package/dist/jsfix-cmd.d.ts +3 -1
  155. package/dist/jsfix-cmd.js +134 -99
  156. package/dist/jsfix-cmd.js.map +1 -1
  157. package/dist/runtime/make-config.js +34 -14
  158. package/dist/runtime/make-config.js.map +1 -1
  159. package/dist/runtime/session-container.d.ts +3 -2
  160. package/dist/runtime/session-container.js +36 -16
  161. package/dist/runtime/session-container.js.map +1 -1
  162. package/dist/runtime/session-launcher.d.ts +10 -6
  163. package/dist/runtime/session-launcher.js +80 -43
  164. package/dist/runtime/session-launcher.js.map +1 -1
  165. package/dist/sample/http/oms/app.js +37 -7
  166. package/dist/sample/http/oms/app.js.map +1 -1
  167. package/dist/sample/http/oms/http-client.js +4 -2
  168. package/dist/sample/http/oms/http-client.js.map +1 -1
  169. package/dist/sample/http/oms/http-server.js +7 -1
  170. package/dist/sample/http/oms/http-server.js.map +1 -1
  171. package/dist/sample/http/oms/oms-factory.js +4 -3
  172. package/dist/sample/http/oms/oms-factory.js.map +1 -1
  173. package/dist/sample/tcp/qf-md/app.js +3 -3
  174. package/dist/sample/tcp/qf-md/app.js.map +1 -1
  175. package/dist/sample/tcp/qf-md/md-client.js +2 -1
  176. package/dist/sample/tcp/qf-md/md-client.js.map +1 -1
  177. package/dist/sample/tcp/qf-md/md-factory.js.map +1 -1
  178. package/dist/sample/tcp/qf-md/md-server.d.ts +1 -1
  179. package/dist/sample/tcp/qf-md/md-server.js +2 -1
  180. package/dist/sample/tcp/qf-md/md-server.js.map +1 -1
  181. package/dist/sample/tcp/recovering-skeleton/app.js +29 -16
  182. package/dist/sample/tcp/recovering-skeleton/app.js.map +1 -1
  183. package/dist/sample/tcp/recovering-skeleton/respawn-acceptor.d.ts +9 -1
  184. package/dist/sample/tcp/recovering-skeleton/respawn-acceptor.js +51 -2
  185. package/dist/sample/tcp/recovering-skeleton/respawn-acceptor.js.map +1 -1
  186. package/dist/sample/tcp/recovering-skeleton/skeleton-client.js +2 -1
  187. package/dist/sample/tcp/recovering-skeleton/skeleton-client.js.map +1 -1
  188. package/dist/sample/tcp/recovering-skeleton/skeleton-server.js +4 -3
  189. package/dist/sample/tcp/recovering-skeleton/skeleton-server.js.map +1 -1
  190. package/dist/sample/tcp/skeleton/app.js.map +1 -1
  191. package/dist/sample/tcp/skeleton/skeleton-session.js +7 -4
  192. package/dist/sample/tcp/skeleton/skeleton-session.js.map +1 -1
  193. package/dist/sample/tcp/tls-trade-capture/app.js.map +1 -1
  194. package/dist/sample/tcp/trade-capture/app-launcher.js +3 -3
  195. package/dist/sample/tcp/trade-capture/app-launcher.js.map +1 -1
  196. package/dist/sample/tcp/trade-capture/trade-capture-client.d.ts +1 -1
  197. package/dist/sample/tcp/trade-capture/trade-capture-client.js +2 -1
  198. package/dist/sample/tcp/trade-capture/trade-capture-client.js.map +1 -1
  199. package/dist/sample/tcp/trade-capture/trade-capture-server.js +7 -2
  200. package/dist/sample/tcp/trade-capture/trade-capture-server.js.map +1 -1
  201. package/dist/sample/tcp/trade-capture/trade-factory.js.map +1 -1
  202. package/dist/store/fix-msg-ascii-store-resend.js +18 -7
  203. package/dist/store/fix-msg-ascii-store-resend.js.map +1 -1
  204. package/dist/store/fix-msg-memory-store.d.ts +3 -3
  205. package/dist/store/fix-msg-memory-store.js +93 -69
  206. package/dist/store/fix-msg-memory-store.js.map +1 -1
  207. package/dist/store/fix-msg-store-record.d.ts +6 -6
  208. package/dist/store/fix-msg-store-record.js +2 -1
  209. package/dist/store/fix-msg-store-record.js.map +1 -1
  210. package/dist/store/fix-msg-store-state.js.map +1 -1
  211. package/dist/store/fix-msg-store.d.ts +7 -7
  212. package/dist/store/fix-msg-store.js.map +1 -1
  213. package/dist/test/ascii/ascii-encoder.test.js +93 -63
  214. package/dist/test/ascii/ascii-encoder.test.js.map +1 -1
  215. package/dist/test/ascii/ascii-parser.test.js +28 -24
  216. package/dist/test/ascii/ascii-parser.test.js.map +1 -1
  217. package/dist/test/ascii/ascii-segment.test.js +16 -11
  218. package/dist/test/ascii/ascii-segment.test.js.map +1 -1
  219. package/dist/test/ascii/ascii-store-replay.test.js +1 -1
  220. package/dist/test/ascii/ascii-store-replay.test.js.map +1 -1
  221. package/dist/test/ascii/ascii-tag-pos.test.js +7 -3
  222. package/dist/test/ascii/ascii-tag-pos.test.js.map +1 -1
  223. package/dist/test/ascii/execution-report.test.js +80 -72
  224. package/dist/test/ascii/execution-report.test.js.map +1 -1
  225. package/dist/test/ascii/fix-log-replay.test.js +1 -1
  226. package/dist/test/ascii/fix-log-replay.test.js.map +1 -1
  227. package/dist/test/ascii/fix-repo-dict.test.js +58 -55
  228. package/dist/test/ascii/fix-repo-dict.test.js.map +1 -1
  229. package/dist/test/ascii/includes.test.js +1 -1
  230. package/dist/test/ascii/includes.test.js.map +1 -1
  231. package/dist/test/ascii/logon.test.js +3 -3
  232. package/dist/test/ascii/logon.test.js.map +1 -1
  233. package/dist/test/ascii/memory-store.test.js +3 -3
  234. package/dist/test/ascii/memory-store.test.js.map +1 -1
  235. package/dist/test/ascii/qf-full-msg.test.js +19 -16
  236. package/dist/test/ascii/qf-full-msg.test.js.map +1 -1
  237. package/dist/test/ascii/repo-full-ascii-msg.test.js +11 -11
  238. package/dist/test/ascii/repo-full-ascii-msg.test.js.map +1 -1
  239. package/dist/test/ascii/session-state.test.js.map +1 -1
  240. package/dist/test/ascii/session.test.js +59 -42
  241. package/dist/test/ascii/session.test.js.map +1 -1
  242. package/dist/test/ascii/view-decode.test.js +30 -22
  243. package/dist/test/ascii/view-decode.test.js.map +1 -1
  244. package/dist/test/encode-proxy.test.js +29 -29
  245. package/dist/test/encode-proxy.test.js.map +1 -1
  246. package/dist/test/env/experiment.js +5 -5
  247. package/dist/test/env/experiment.js.map +1 -1
  248. package/dist/test/env/parsing-result.d.ts +3 -3
  249. package/dist/test/env/parsing-result.js.map +1 -1
  250. package/dist/test/env/setup.d.ts +2 -2
  251. package/dist/test/env/setup.js +13 -11
  252. package/dist/test/env/setup.js.map +1 -1
  253. package/dist/test/env/skeleton-runner.d.ts +1 -1
  254. package/dist/test/env/skeleton-runner.js +16 -16
  255. package/dist/test/env/skeleton-runner.js.map +1 -1
  256. package/dist/test/env/test-recovery.d.ts +3 -3
  257. package/dist/test/env/test-recovery.js +1 -1
  258. package/dist/test/env/test-recovery.js.map +1 -1
  259. package/dist/test/env/to-views.d.ts +1 -1
  260. package/dist/test/env/to-views.js +2 -2
  261. package/dist/test/env/to-views.js.map +1 -1
  262. package/dist/test/fixml/fixml-alloc-parse.test.js +32 -15
  263. package/dist/test/fixml/fixml-alloc-parse.test.js.map +1 -1
  264. package/dist/test/fixml/fixml-mkt-data-fut-parse.test.js +2 -2
  265. package/dist/test/fixml/fixml-mkt-data-fut-parse.test.js.map +1 -1
  266. package/dist/test/fixml/fixml-mkt-data-settle-parse.test.js +2 -1
  267. package/dist/test/fixml/fixml-mkt-data-settle-parse.test.js.map +1 -1
  268. package/dist/test/fixml/fixml-tc-bi-lateral-parse.test.js +19 -12
  269. package/dist/test/fixml/fixml-tc-bi-lateral-parse.test.js.map +1 -1
  270. package/dist/test/fixml/repo-full-fixml-msg.test.js +2 -2
  271. package/dist/test/fixml/repo-full-fixml-msg.test.js.map +1 -1
  272. package/dist/transport/ascii/ascii-msg-transmitter.d.ts +1 -1
  273. package/dist/transport/ascii/ascii-msg-transmitter.js +18 -8
  274. package/dist/transport/ascii/ascii-msg-transmitter.js.map +1 -1
  275. package/dist/transport/ascii/ascii-session-msg-factory.d.ts +3 -3
  276. package/dist/transport/ascii/ascii-session-msg-factory.js +4 -2
  277. package/dist/transport/ascii/ascii-session-msg-factory.js.map +1 -1
  278. package/dist/transport/ascii/ascii-session.d.ts +1 -1
  279. package/dist/transport/ascii/ascii-session.js +34 -16
  280. package/dist/transport/ascii/ascii-session.js.map +1 -1
  281. package/dist/transport/duplex/http-duplex.js +10 -8
  282. package/dist/transport/duplex/http-duplex.js.map +1 -1
  283. package/dist/transport/duplex/string-duplex.js +2 -2
  284. package/dist/transport/duplex/string-duplex.js.map +1 -1
  285. package/dist/transport/factory/msg-transport.js +21 -10
  286. package/dist/transport/factory/msg-transport.js.map +1 -1
  287. package/dist/transport/fix-acceptor.d.ts +3 -3
  288. package/dist/transport/fix-acceptor.js.map +1 -1
  289. package/dist/transport/fix-entity.d.ts +1 -1
  290. package/dist/transport/fix-entity.js.map +1 -1
  291. package/dist/transport/fix-initiator.d.ts +2 -2
  292. package/dist/transport/fix-initiator.js.map +1 -1
  293. package/dist/transport/fixml/fixml-msg-transmitter.d.ts +1 -1
  294. package/dist/transport/fixml/fixml-msg-transmitter.js +4 -2
  295. package/dist/transport/fixml/fixml-msg-transmitter.js.map +1 -1
  296. package/dist/transport/fixml/fixml-session-msg-factory.d.ts +1 -1
  297. package/dist/transport/fixml/fixml-session-msg-factory.js.map +1 -1
  298. package/dist/transport/fixml/fixml-session.js +7 -3
  299. package/dist/transport/fixml/fixml-session.js.map +1 -1
  300. package/dist/transport/http/html-options.d.ts +2 -2
  301. package/dist/transport/http/html-options.js.map +1 -1
  302. package/dist/transport/http/html-route.js.map +1 -1
  303. package/dist/transport/http/http-acceptor-listener.js +27 -23
  304. package/dist/transport/http/http-acceptor-listener.js.map +1 -1
  305. package/dist/transport/http/http-acceptor.d.ts +2 -2
  306. package/dist/transport/http/http-acceptor.js +52 -41
  307. package/dist/transport/http/http-acceptor.js.map +1 -1
  308. package/dist/transport/http/http-adapter.d.ts +3 -3
  309. package/dist/transport/http/http-adapter.js.map +1 -1
  310. package/dist/transport/http/http-initiator.js +35 -23
  311. package/dist/transport/http/http-initiator.js.map +1 -1
  312. package/dist/transport/http/http-json-sample-adapter.d.ts +4 -4
  313. package/dist/transport/http/http-json-sample-adapter.js +16 -11
  314. package/dist/transport/http/http-json-sample-adapter.js.map +1 -1
  315. package/dist/transport/http/http-transaction.js.map +1 -1
  316. package/dist/transport/http/http-transport-description.js.map +1 -1
  317. package/dist/transport/msg-application.js.map +1 -1
  318. package/dist/transport/msg-transmitter.d.ts +1 -1
  319. package/dist/transport/msg-transmitter.js +2 -2
  320. package/dist/transport/msg-transmitter.js.map +1 -1
  321. package/dist/transport/session/a-session-msg-factory.d.ts +3 -5
  322. package/dist/transport/session/a-session-msg-factory.js.map +1 -1
  323. package/dist/transport/session/fix-session-state.d.ts +8 -5
  324. package/dist/transport/session/fix-session-state.js +21 -16
  325. package/dist/transport/session/fix-session-state.js.map +1 -1
  326. package/dist/transport/session/fix-session.d.ts +19 -6
  327. package/dist/transport/session/fix-session.js +197 -110
  328. package/dist/transport/session/fix-session.js.map +1 -1
  329. package/dist/transport/session/make-fix-session.d.ts +1 -3
  330. package/dist/transport/session/make-fix-session.js.map +1 -1
  331. package/dist/transport/session/session-description.d.ts +1 -1
  332. package/dist/transport/session/session-description.js.map +1 -1
  333. package/dist/transport/session/session-msg-factory.d.ts +9 -9
  334. package/dist/transport/session/session-msg-factory.js.map +1 -1
  335. package/dist/transport/tcp/recovering-tcp-initiator.d.ts +4 -2
  336. package/dist/transport/tcp/recovering-tcp-initiator.js +62 -30
  337. package/dist/transport/tcp/recovering-tcp-initiator.js.map +1 -1
  338. package/dist/transport/tcp/tcp-acceptor-listener.js +28 -25
  339. package/dist/transport/tcp/tcp-acceptor-listener.js.map +1 -1
  340. package/dist/transport/tcp/tcp-acceptor.d.ts +2 -2
  341. package/dist/transport/tcp/tcp-acceptor.js +23 -15
  342. package/dist/transport/tcp/tcp-acceptor.js.map +1 -1
  343. package/dist/transport/tcp/tcp-initiator-connector.js +39 -30
  344. package/dist/transport/tcp/tcp-initiator-connector.js.map +1 -1
  345. package/dist/transport/tcp/tcp-initiator.d.ts +1 -1
  346. package/dist/transport/tcp/tcp-initiator.js +130 -104
  347. package/dist/transport/tcp/tcp-initiator.js.map +1 -1
  348. package/dist/transport/tcp/tcp-transport-description.js.map +1 -1
  349. package/dist/transport/tcp/tls-options-factory.d.ts +3 -3
  350. package/dist/transport/tcp/tls-options-factory.js +10 -3
  351. package/dist/transport/tcp/tls-options-factory.js.map +1 -1
  352. package/dist/transport/tcp/tls-options.d.ts +6 -2
  353. package/dist/transport/tcp/tls-options.js.map +1 -1
  354. package/dist/util/json-helper.js +2 -1
  355. package/dist/util/json-helper.js.map +1 -1
  356. package/dist/util/message-generator.d.ts +1 -1
  357. package/dist/util/message-generator.js +1 -1
  358. package/dist/util/message-generator.js.map +1 -1
  359. package/package.json +53 -48
  360. package/src/buffer/ascii/ascii-chars.ts +0 -1
  361. package/src/buffer/ascii/ascii-encoder.ts +18 -16
  362. package/src/buffer/ascii/ascii-parser-state.ts +4 -4
  363. package/src/buffer/ascii/ascii-parser.ts +16 -13
  364. package/src/buffer/ascii/ascii-segment-parser.ts +16 -15
  365. package/src/buffer/ascii/ascii-view.ts +22 -14
  366. package/src/buffer/ascii/itime-formatter.ts +12 -12
  367. package/src/buffer/ascii/time-formatter.ts +11 -12
  368. package/src/buffer/elastic-buffer.ts +5 -6
  369. package/src/buffer/encode-proxy.ts +6 -5
  370. package/src/buffer/encoder-state.ts +7 -3
  371. package/src/buffer/fixml/fixml-encoder.ts +10 -10
  372. package/src/buffer/fixml/fixml-parser.ts +80 -60
  373. package/src/buffer/fixml/fixml-view.ts +6 -7
  374. package/src/buffer/fixml/populated-attributes.ts +1 -1
  375. package/src/buffer/msg-encoder.ts +2 -1
  376. package/src/buffer/msg-view.ts +73 -53
  377. package/src/buffer/segment/segment-description.ts +13 -13
  378. package/src/buffer/segment/segment-summary.ts +3 -2
  379. package/src/buffer/structure.ts +6 -6
  380. package/src/buffer/time-format-template.ts +1 -1
  381. package/src/collections/collection.ts +2 -6
  382. package/src/collections/dictionary.ts +4 -5
  383. package/src/config/empty-log-factory.ts +1 -0
  384. package/src/config/get-js-fx-logger.ts +1 -2
  385. package/src/config/js-fix-config.ts +6 -6
  386. package/src/config/js-fix-logger.ts +14 -9
  387. package/src/config/js-fix-winston-log-factory.ts +2 -1
  388. package/src/config/winston-logger.ts +9 -7
  389. package/src/dictionary/compiler/compiler-settings.ts +5 -5
  390. package/src/dictionary/compiler/compiler-type.ts +1 -1
  391. package/src/dictionary/compiler/enum-compiler.ts +14 -16
  392. package/src/dictionary/compiler/msg-compiler.ts +15 -17
  393. package/src/dictionary/compiler/standard-snippet.ts +28 -27
  394. package/src/dictionary/contained/contained-component-field.ts +5 -4
  395. package/src/dictionary/contained/contained-field-dispatcher.ts +3 -3
  396. package/src/dictionary/contained/contained-field-set.ts +21 -21
  397. package/src/dictionary/contained/contained-field.ts +4 -1
  398. package/src/dictionary/contained/contained-group-field.ts +4 -4
  399. package/src/dictionary/contained/contained-simple-field.ts +5 -5
  400. package/src/dictionary/contained/field-dispatcher.ts +3 -3
  401. package/src/dictionary/contained/fields-dispatch.ts +0 -1
  402. package/src/dictionary/definition/component-field-definition.ts +4 -4
  403. package/src/dictionary/definition/fix-definitions.ts +8 -8
  404. package/src/dictionary/definition/group-field-definition.ts +5 -5
  405. package/src/dictionary/definition/message-definition.ts +4 -4
  406. package/src/dictionary/definition/simple-field-definition.ts +9 -9
  407. package/src/dictionary/dict-primitive.ts +2 -2
  408. package/src/dictionary/field-enum.ts +3 -2
  409. package/src/dictionary/fix-versions.ts +10 -10
  410. package/src/dictionary/parser/fix-repository/repository-xml-parser.ts +7 -8
  411. package/src/dictionary/parser/fix-repository/repository.ts +38 -30
  412. package/src/dictionary/parser/fixml/components-parser.ts +57 -51
  413. package/src/dictionary/parser/fixml/fields-parser.ts +9 -10
  414. package/src/dictionary/parser/fixml/fix-xsd-parser.ts +2 -3
  415. package/src/dictionary/parser/fixml/include-graph.ts +26 -21
  416. package/src/dictionary/parser/fixml/xsd-parser.ts +5 -5
  417. package/src/dictionary/parser/quickfix/field-definition-parser.ts +3 -5
  418. package/src/dictionary/parser/quickfix/field-set-parser.ts +2 -2
  419. package/src/dictionary/parser/quickfix/message-parser.ts +9 -6
  420. package/src/dictionary/parser/quickfix/node-parser.ts +20 -18
  421. package/src/dictionary/parser/quickfix/parse-context.ts +4 -4
  422. package/src/dictionary/parser/quickfix/quick-fix-xml-file-parser.ts +13 -15
  423. package/src/dictionary/set-reduce.ts +4 -3
  424. package/src/dictionary/type-dispatcher.ts +3 -3
  425. package/src/dictionary/version-util.ts +8 -8
  426. package/src/jsfix-cmd.ts +82 -58
  427. package/src/runtime/make-config.ts +15 -10
  428. package/src/runtime/session-container.ts +26 -18
  429. package/src/runtime/session-launcher.ts +58 -30
  430. package/src/sample/http/oms/app.ts +24 -7
  431. package/src/sample/http/oms/http-client.ts +3 -3
  432. package/src/sample/http/oms/http-server.ts +7 -1
  433. package/src/sample/http/oms/oms-factory.ts +3 -3
  434. package/src/sample/tcp/qf-md/app.ts +3 -3
  435. package/src/sample/tcp/qf-md/md-client.ts +1 -1
  436. package/src/sample/tcp/qf-md/md-factory.ts +3 -2
  437. package/src/sample/tcp/qf-md/md-server.ts +2 -2
  438. package/src/sample/tcp/recovering-skeleton/app.ts +37 -20
  439. package/src/sample/tcp/recovering-skeleton/respawn-acceptor.ts +66 -4
  440. package/src/sample/tcp/recovering-skeleton/skeleton-client.ts +2 -2
  441. package/src/sample/tcp/recovering-skeleton/skeleton-server.ts +4 -4
  442. package/src/sample/tcp/skeleton/app.ts +1 -1
  443. package/src/sample/tcp/skeleton/skeleton-session.ts +7 -7
  444. package/src/sample/tcp/tls-trade-capture/app.ts +1 -1
  445. package/src/sample/tcp/trade-capture/app-launcher.ts +4 -4
  446. package/src/sample/tcp/trade-capture/trade-capture-client.ts +7 -5
  447. package/src/sample/tcp/trade-capture/trade-capture-server.ts +10 -5
  448. package/src/sample/tcp/trade-capture/trade-factory.ts +1 -1
  449. package/src/store/fix-msg-ascii-store-resend.ts +5 -6
  450. package/src/store/fix-msg-memory-store.ts +22 -21
  451. package/src/store/fix-msg-store-record.ts +8 -8
  452. package/src/store/fix-msg-store-state.ts +2 -2
  453. package/src/store/fix-msg-store.ts +7 -7
  454. package/src/transport/ascii/ascii-msg-transmitter.ts +20 -14
  455. package/src/transport/ascii/ascii-session-msg-factory.ts +5 -6
  456. package/src/transport/ascii/ascii-session.ts +40 -29
  457. package/src/transport/duplex/http-duplex.ts +11 -9
  458. package/src/transport/duplex/string-duplex.ts +4 -5
  459. package/src/transport/factory/msg-transport.ts +5 -6
  460. package/src/transport/fix-acceptor.ts +2 -2
  461. package/src/transport/fix-entity.ts +1 -1
  462. package/src/transport/fix-initiator.ts +1 -1
  463. package/src/transport/fixml/fixml-msg-transmitter.ts +4 -3
  464. package/src/transport/fixml/fixml-session-msg-factory.ts +1 -2
  465. package/src/transport/fixml/fixml-session.ts +7 -6
  466. package/src/transport/http/html-options.ts +5 -5
  467. package/src/transport/http/html-route.ts +1 -1
  468. package/src/transport/http/http-acceptor-listener.ts +6 -4
  469. package/src/transport/http/http-acceptor.ts +36 -34
  470. package/src/transport/http/http-adapter.ts +3 -3
  471. package/src/transport/http/http-initiator.ts +22 -16
  472. package/src/transport/http/http-json-sample-adapter.ts +17 -16
  473. package/src/transport/http/http-transaction.ts +1 -1
  474. package/src/transport/http/http-transport-description.ts +1 -1
  475. package/src/transport/msg-application.ts +4 -4
  476. package/src/transport/msg-transmitter.ts +5 -5
  477. package/src/transport/session/a-session-msg-factory.ts +2 -3
  478. package/src/transport/session/fix-session-state.ts +24 -18
  479. package/src/transport/session/fix-session.ts +169 -96
  480. package/src/transport/session/make-fix-session.ts +1 -2
  481. package/src/transport/session/session-description.ts +2 -2
  482. package/src/transport/session/session-msg-factory.ts +9 -9
  483. package/src/transport/tcp/recovering-tcp-initiator.ts +39 -21
  484. package/src/transport/tcp/tcp-acceptor-listener.ts +4 -3
  485. package/src/transport/tcp/tcp-acceptor.ts +23 -22
  486. package/src/transport/tcp/tcp-initiator-connector.ts +16 -10
  487. package/src/transport/tcp/tcp-initiator.ts +57 -46
  488. package/src/transport/tcp/tcp-transport-description.ts +1 -1
  489. package/src/transport/tcp/tls-options-factory.ts +21 -8
  490. package/src/transport/tcp/tls-options.ts +11 -7
  491. package/src/util/json-helper.ts +6 -5
  492. package/src/util/message-generator.ts +6 -7
  493. package/tsconfig.json +2 -0
  494. package/.eslintrc.js +0 -6
  495. package/dist/buffer/ascii-chars.d.ts +0 -22
  496. package/dist/buffer/ascii-chars.js +0 -29
  497. package/dist/buffer/ascii-chars.js.map +0 -1
  498. package/dist/buffer/segment-description.d.ts +0 -33
  499. package/dist/buffer/segment-description.js +0 -80
  500. package/dist/buffer/segment-description.js.map +0 -1
  501. package/dist/buffer/segment-summary.d.ts +0 -13
  502. package/dist/buffer/segment-summary.js +0 -20
  503. package/dist/buffer/segment-summary.js.map +0 -1
  504. package/dist/buffer/tag-pos.d.ts +0 -12
  505. package/dist/buffer/tag-pos.js +0 -55
  506. package/dist/buffer/tag-pos.js.map +0 -1
  507. package/dist/buffer/tags.d.ts +0 -32
  508. package/dist/buffer/tags.js +0 -135
  509. package/dist/buffer/tags.js.map +0 -1
  510. package/dist/dictionary/fields-dispatch.d.ts +0 -13
  511. package/dist/dictionary/fields-dispatch.js +0 -40
  512. package/dist/dictionary/fields-dispatch.js.map +0 -1
  513. package/dist/sample/launcher.d.ts +0 -12
  514. package/dist/sample/launcher.js +0 -63
  515. package/dist/sample/launcher.js.map +0 -1
  516. package/dist/test/ascii-encoder.test.d.ts +0 -1
  517. package/dist/test/ascii-encoder.test.js +0 -529
  518. package/dist/test/ascii-encoder.test.js.map +0 -1
  519. package/dist/test/ascii-parser.test.d.ts +0 -1
  520. package/dist/test/ascii-parser.test.js +0 -142
  521. package/dist/test/ascii-parser.test.js.map +0 -1
  522. package/dist/test/ascii-segment.test.d.ts +0 -1
  523. package/dist/test/ascii-segment.test.js +0 -107
  524. package/dist/test/ascii-segment.test.js.map +0 -1
  525. package/dist/test/ascii-store-replay.test.d.ts +0 -1
  526. package/dist/test/ascii-store-replay.test.js +0 -121
  527. package/dist/test/ascii-store-replay.test.js.map +0 -1
  528. package/dist/test/ascii-tag-pos.test.d.ts +0 -1
  529. package/dist/test/ascii-tag-pos.test.js +0 -105
  530. package/dist/test/ascii-tag-pos.test.js.map +0 -1
  531. package/dist/test/execution-report.test.d.ts +0 -1
  532. package/dist/test/execution-report.test.js +0 -490
  533. package/dist/test/execution-report.test.js.map +0 -1
  534. package/dist/test/fix-log-replay.test.d.ts +0 -1
  535. package/dist/test/fix-log-replay.test.js +0 -45
  536. package/dist/test/fix-log-replay.test.js.map +0 -1
  537. package/dist/test/fix-repo-dict.test.d.ts +0 -1
  538. package/dist/test/fix-repo-dict.test.js +0 -127
  539. package/dist/test/fix-repo-dict.test.js.map +0 -1
  540. package/dist/test/fixml-alloc-parse.test.d.ts +0 -1
  541. package/dist/test/fixml-alloc-parse.test.js +0 -160
  542. package/dist/test/fixml-alloc-parse.test.js.map +0 -1
  543. package/dist/test/fixml-mkt-data-fut-parse.test.d.ts +0 -1
  544. package/dist/test/fixml-mkt-data-fut-parse.test.js +0 -60
  545. package/dist/test/fixml-mkt-data-fut-parse.test.js.map +0 -1
  546. package/dist/test/fixml-mkt-data-settle-parse.test.d.ts +0 -1
  547. package/dist/test/fixml-mkt-data-settle-parse.test.js +0 -33
  548. package/dist/test/fixml-mkt-data-settle-parse.test.js.map +0 -1
  549. package/dist/test/fixml-tc-bi-lateral-parse.test.d.ts +0 -1
  550. package/dist/test/fixml-tc-bi-lateral-parse.test.js +0 -96
  551. package/dist/test/fixml-tc-bi-lateral-parse.test.js.map +0 -1
  552. package/dist/test/includes.test.d.ts +0 -1
  553. package/dist/test/includes.test.js +0 -42
  554. package/dist/test/includes.test.js.map +0 -1
  555. package/dist/test/logon.test.d.ts +0 -1
  556. package/dist/test/logon.test.js +0 -93
  557. package/dist/test/logon.test.js.map +0 -1
  558. package/dist/test/memory-store.test.d.ts +0 -1
  559. package/dist/test/memory-store.test.js +0 -75
  560. package/dist/test/memory-store.test.js.map +0 -1
  561. package/dist/test/qf-full-msg.test.d.ts +0 -1
  562. package/dist/test/qf-full-msg.test.js +0 -76
  563. package/dist/test/qf-full-msg.test.js.map +0 -1
  564. package/dist/test/repo-full-ascii-msg.test.d.ts +0 -1
  565. package/dist/test/repo-full-ascii-msg.test.js +0 -82
  566. package/dist/test/repo-full-ascii-msg.test.js.map +0 -1
  567. package/dist/test/repo-full-fixml-msg.test.d.ts +0 -1
  568. package/dist/test/repo-full-fixml-msg.test.js +0 -136
  569. package/dist/test/repo-full-fixml-msg.test.js.map +0 -1
  570. package/dist/test/session-state.test.d.ts +0 -1
  571. package/dist/test/session-state.test.js +0 -74
  572. package/dist/test/session-state.test.js.map +0 -1
  573. package/dist/test/session.test.d.ts +0 -1
  574. package/dist/test/session.test.js +0 -412
  575. package/dist/test/session.test.js.map +0 -1
  576. package/dist/test/time-formatter.test.d.ts +0 -1
  577. package/dist/test/time-formatter.test.js +0 -78
  578. package/dist/test/time-formatter.test.js.map +0 -1
  579. package/dist/test/to-views.d.ts +0 -11
  580. package/dist/test/to-views.js +0 -55
  581. package/dist/test/to-views.js.map +0 -1
  582. package/dist/test/view-decode.test.d.ts +0 -1
  583. package/dist/test/view-decode.test.js +0 -208
  584. package/dist/test/view-decode.test.js.map +0 -1
  585. package/dist/transport/a-session-msg-factory.d.ts +0 -23
  586. package/dist/transport/a-session-msg-factory.js +0 -58
  587. package/dist/transport/a-session-msg-factory.js.map +0 -1
  588. package/dist/transport/ascii-session-msg-factory.d.ts +0 -16
  589. package/dist/transport/ascii-session-msg-factory.js +0 -47
  590. package/dist/transport/ascii-session-msg-factory.js.map +0 -1
  591. package/dist/transport/fix-msg-factory.d.ts +0 -15
  592. package/dist/transport/fix-msg-factory.js +0 -3
  593. package/dist/transport/fix-msg-factory.js.map +0 -1
  594. package/dist/transport/fix-session-state-args.d.ts +0 -8
  595. package/dist/transport/fix-session-state-args.js +0 -3
  596. package/dist/transport/fix-session-state-args.js.map +0 -1
  597. package/dist/transport/fix-session-state.d.ts +0 -32
  598. package/dist/transport/fix-session-state.js +0 -133
  599. package/dist/transport/fix-session-state.js.map +0 -1
  600. package/dist/transport/fix-session.d.ts +0 -50
  601. package/dist/transport/fix-session.js +0 -290
  602. package/dist/transport/fix-session.js.map +0 -1
  603. package/dist/transport/fixml/acceptor.d.ts +0 -3
  604. package/dist/transport/fixml/acceptor.js +0 -38
  605. package/dist/transport/fixml/acceptor.js.map +0 -1
  606. package/dist/transport/fixml-session-msg-factory.d.ts +0 -13
  607. package/dist/transport/fixml-session-msg-factory.js +0 -68
  608. package/dist/transport/fixml-session-msg-factory.js.map +0 -1
  609. package/dist/transport/make-config.d.ts +0 -4
  610. package/dist/transport/make-config.js +0 -31
  611. package/dist/transport/make-config.js.map +0 -1
  612. package/dist/transport/make-fix-session.d.ts +0 -5
  613. package/dist/transport/make-fix-session.js +0 -3
  614. package/dist/transport/make-fix-session.js.map +0 -1
  615. package/dist/transport/make-fixl-session.d.ts +0 -5
  616. package/dist/transport/make-fixl-session.js +0 -3
  617. package/dist/transport/make-fixl-session.js.map +0 -1
  618. package/dist/transport/msg-transport.d.ts +0 -14
  619. package/dist/transport/msg-transport.js +0 -57
  620. package/dist/transport/msg-transport.js.map +0 -1
  621. package/dist/transport/session-description.d.ts +0 -64
  622. package/dist/transport/session-description.js +0 -3
  623. package/dist/transport/session-description.js.map +0 -1
  624. package/dist/transport/session-msg-factory.d.ts +0 -6
  625. package/dist/transport/session-msg-factory.js +0 -13
  626. package/dist/transport/session-msg-factory.js.map +0 -1
  627. package/dist/transport/session-state.d.ts +0 -25
  628. package/dist/transport/session-state.js +0 -30
  629. package/dist/transport/session-state.js.map +0 -1
  630. package/dist/transport/tcp/acceptor.d.ts +0 -3
  631. package/dist/transport/tcp/acceptor.js +0 -40
  632. package/dist/transport/tcp/acceptor.js.map +0 -1
  633. package/dist/transport/tcp/initiator.d.ts +0 -3
  634. package/dist/transport/tcp/initiator.js +0 -67
  635. package/dist/transport/tcp/initiator.js.map +0 -1
  636. package/dist/util/dictionary-definitions.d.ts +0 -8
  637. package/dist/util/dictionary-definitions.js +0 -51
  638. package/dist/util/dictionary-definitions.js.map +0 -1
  639. package/tslint.json +0 -3
@@ -6,9 +6,10 @@ const a_session_msg_factory_1 = require("../session/a-session-msg-factory");
6
6
  const repo_1 = require("../../types/FIX4.4/repo");
7
7
  class AsciiSessionMsgFactory extends a_session_msg_factory_1.ASessionMsgFactory {
8
8
  constructor(description, mutator = null) {
9
+ var _a;
9
10
  super(description, mutator);
10
11
  this.description = description;
11
- this.isAscii = description.application.protocol === 'ascii';
12
+ this.isAscii = ((_a = description.application) === null || _a === void 0 ? void 0 : _a.protocol) === 'ascii';
12
13
  }
13
14
  logon() {
14
15
  const description = this.description;
@@ -28,8 +29,9 @@ class AsciiSessionMsgFactory extends a_session_msg_factory_1.ASessionMsgFactory
28
29
  return this.mutate(o, types_1.MsgType.Logout);
29
30
  }
30
31
  header(msgType, seqNum, time, overrideData) {
32
+ var _a;
31
33
  const description = this.description;
32
- const bodyLength = Math.max(4, description.BodyLengthChars || 7);
34
+ const bodyLength = Math.max(4, (_a = description.BodyLengthChars) !== null && _a !== void 0 ? _a : 7);
33
35
  const placeHolder = Math.pow(10, bodyLength - 1) + 1;
34
36
  const o = Object.assign({ BeginString: description.BeginString, BodyLength: placeHolder, MsgType: msgType, SenderCompID: description.SenderCompId, MsgSeqNum: seqNum, SendingTime: time, TargetCompID: description.TargetCompID, TargetSubID: description.TargetSubID }, overrideData);
35
37
  return this.mutate(o, 'StandardHeader');
@@ -1 +1 @@
1
- {"version":3,"file":"ascii-session-msg-factory.js","sourceRoot":"","sources":["../../../src/transport/ascii/ascii-session-msg-factory.ts"],"names":[],"mappings":";;;AAEA,uCAAqC;AACrC,4EAAoF;AAEpF,kDAKgC;AAEhC,MAAa,sBAAuB,SAAQ,0CAAkB;IAE5D,YAAsB,WAAgC,EAAE,UAAyB,IAAI;QACnF,KAAK,CAAC,WAAW,EAAE,OAAO,CAAC,CAAA;QADP,gBAAW,GAAX,WAAW,CAAqB;QAEpD,IAAI,CAAC,OAAO,GAAG,WAAW,CAAC,WAAW,CAAC,QAAQ,KAAK,OAAO,CAAA;IAC7D,CAAC;IAEM,KAAK;QACV,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,CAAA;QACpC,MAAM,CAAC,GAAW;YAChB,QAAQ,EAAE,WAAW,CAAC,QAAQ;YAC9B,QAAQ,EAAE,WAAW,CAAC,QAAQ;YAC9B,UAAU,EAAE,WAAW,CAAC,UAAU;YAClC,eAAe,EAAE,WAAW,CAAC,eAAe;YAC5C,aAAa,EAAE,oBAAa,CAAC,IAAI;SACxB,CAAA;QACX,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,eAAO,CAAC,KAAK,CAAC,CAAA;IACtC,CAAC;IAEM,MAAM,CAAE,IAAY;QACzB,MAAM,CAAC,GAAY;YACjB,IAAI,EAAG,IAAI;SACD,CAAA;QACZ,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,eAAO,CAAC,MAAM,CAAC,CAAA;IACvC,CAAC;IAEM,MAAM,CAAE,OAAe,EAAE,MAAc,EAAE,IAAU,EAAE,YAAuC;QACjG,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,CAAA;QACpC,MAAM,UAAU,GAAW,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,WAAW,CAAC,eAAe,IAAI,CAAC,CAAC,CAAA;QACxE,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,UAAU,GAAG,CAAC,CAAC,GAAG,CAAC,CAAA;QACpD,MAAM,CAAC,mBACL,WAAW,EAAE,WAAW,CAAC,WAAW,EACpC,UAAU,EAAE,WAAW,EACvB,OAAO,EAAE,OAAO,EAChB,YAAY,EAAE,WAAW,CAAC,YAAY,EACtC,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,IAAI,EACjB,YAAY,EAAE,WAAW,CAAC,YAAY,EACtC,WAAW,EAAE,WAAW,CAAC,WAAW,IACjC,YAAY,CAChB,CAAA;QACD,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,gBAAgB,CAAC,CAAA;IACzC,CAAC;CACF;AA3CD,wDA2CC;AAED,MAAa,iBAAkB,SAAQ,sBAAsB;IAC3D,YAA6B,WAAgC,EAAS,UAAyB,IAAI;QACjG,KAAK,CAAC,WAAW,EAAE,OAAO,CAAC,CAAA;QADA,gBAAW,GAAX,WAAW,CAAqB;QAAS,YAAO,GAAP,OAAO,CAAsB;IAEnG,CAAC;CACF;AAJD,8CAIC","sourcesContent":["import { ISessionDescription } from '../session/session-description'\r\nimport { ILooseObject } from '../../collections/collection'\r\nimport { MsgType } from '../../types'\r\nimport { ASessionMsgFactory, ObjectMutator } from '../session/a-session-msg-factory'\r\n\r\nimport {\r\n EncryptMethod,\r\n ILogon,\r\n ILogout,\r\n IStandardHeader\r\n} from '../../types/FIX4.4/repo'\r\n\r\nexport class AsciiSessionMsgFactory extends ASessionMsgFactory {\r\n\r\n constructor (readonly description: ISessionDescription, mutator: ObjectMutator = null) {\r\n super(description, mutator)\r\n this.isAscii = description.application.protocol === 'ascii'\r\n }\r\n\r\n public logon (): ILooseObject {\r\n const description = this.description\r\n const o: ILogon = {\r\n Username: description.Username,\r\n Password: description.Password,\r\n HeartBtInt: description.HeartBtInt,\r\n ResetSeqNumFlag: description.ResetSeqNumFlag,\r\n EncryptMethod: EncryptMethod.None\r\n } as ILogon\r\n return this.mutate(o, MsgType.Logon)\r\n }\r\n\r\n public logout (text: string): ILooseObject {\r\n const o: ILogout = {\r\n Text: text\r\n } as ILogout\r\n return this.mutate(o, MsgType.Logout)\r\n }\r\n\r\n public header (msgType: string, seqNum: number, time: Date, overrideData?: Partial<IStandardHeader>): ILooseObject {\r\n const description = this.description\r\n const bodyLength: number = Math.max(4, description.BodyLengthChars || 7)\r\n const placeHolder = Math.pow(10, bodyLength - 1) + 1\r\n const o: IStandardHeader = {\r\n BeginString: description.BeginString,\r\n BodyLength: placeHolder,\r\n MsgType: msgType,\r\n SenderCompID: description.SenderCompId,\r\n MsgSeqNum: seqNum,\r\n SendingTime: time,\r\n TargetCompID: description.TargetCompID,\r\n TargetSubID: description.TargetSubID,\r\n ...overrideData\r\n }\r\n return this.mutate(o, 'StandardHeader')\r\n }\r\n}\r\n\r\nexport class SessionMsgFactory extends AsciiSessionMsgFactory {\r\n constructor (public readonly description: ISessionDescription, public mutator: ObjectMutator = null) {\r\n super(description, mutator)\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"ascii-session-msg-factory.js","sourceRoot":"","sources":["../../../src/transport/ascii/ascii-session-msg-factory.ts"],"names":[],"mappings":";;;AAEA,uCAAqC;AACrC,4EAAoF;AAEpF,kDAKgC;AAEhC,MAAa,sBAAuB,SAAQ,0CAAkB;IAC5D,YAAsB,WAAgC,EAAE,UAAgC,IAAI;;QAC1F,KAAK,CAAC,WAAW,EAAE,OAAO,CAAC,CAAA;QADP,gBAAW,GAAX,WAAW,CAAqB;QAEpD,IAAI,CAAC,OAAO,GAAG,CAAA,MAAA,WAAW,CAAC,WAAW,0CAAE,QAAQ,MAAK,OAAO,CAAA;IAC9D,CAAC;IAEM,KAAK;QACV,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,CAAA;QACpC,MAAM,CAAC,GAAW;YAChB,QAAQ,EAAE,WAAW,CAAC,QAAQ;YAC9B,QAAQ,EAAE,WAAW,CAAC,QAAQ;YAC9B,UAAU,EAAE,WAAW,CAAC,UAAU;YAClC,eAAe,EAAE,WAAW,CAAC,eAAe;YAC5C,aAAa,EAAE,oBAAa,CAAC,IAAI;SACxB,CAAA;QACX,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,eAAO,CAAC,KAAK,CAAC,CAAA;IACtC,CAAC;IAEM,MAAM,CAAE,IAAY;QACzB,MAAM,CAAC,GAAY;YACjB,IAAI,EAAE,IAAI;SACA,CAAA;QACZ,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,eAAO,CAAC,MAAM,CAAC,CAAA;IACvC,CAAC;IAEM,MAAM,CAAE,OAAe,EAAE,MAAc,EAAE,IAAU,EAAE,YAAuC;;QACjG,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,CAAA;QACpC,MAAM,UAAU,GAAW,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAA,WAAW,CAAC,eAAe,mCAAI,CAAC,CAAC,CAAA;QACxE,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,UAAU,GAAG,CAAC,CAAC,GAAG,CAAC,CAAA;QACpD,MAAM,CAAC,mBACL,WAAW,EAAE,WAAW,CAAC,WAAW,EACpC,UAAU,EAAE,WAAW,EACvB,OAAO,EAAE,OAAO,EAChB,YAAY,EAAE,WAAW,CAAC,YAAY,EACtC,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,IAAI,EACjB,YAAY,EAAE,WAAW,CAAC,YAAY,EACtC,WAAW,EAAE,WAAW,CAAC,WAAW,IACjC,YAAY,CAChB,CAAA;QACD,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,gBAAgB,CAAC,CAAA;IACzC,CAAC;CACF;AA1CD,wDA0CC;AAED,MAAa,iBAAkB,SAAQ,sBAAsB;IAC3D,YAA6B,WAAgC,EAAS,UAAgC,IAAI;QACxG,KAAK,CAAC,WAAW,EAAE,OAAO,CAAC,CAAA;QADA,gBAAW,GAAX,WAAW,CAAqB;QAAS,YAAO,GAAP,OAAO,CAA6B;IAE1G,CAAC;CACF;AAJD,8CAIC","sourcesContent":["import { ISessionDescription } from '../session/session-description'\r\nimport { ILooseObject } from '../../collections/collection'\r\nimport { MsgType } from '../../types'\r\nimport { ASessionMsgFactory, ObjectMutator } from '../session/a-session-msg-factory'\r\n\r\nimport {\r\n EncryptMethod,\r\n ILogon,\r\n ILogout,\r\n IStandardHeader\r\n} from '../../types/FIX4.4/repo'\r\n\r\nexport class AsciiSessionMsgFactory extends ASessionMsgFactory {\r\n constructor (readonly description: ISessionDescription, mutator: ObjectMutator | null = null) {\r\n super(description, mutator)\r\n this.isAscii = description.application?.protocol === 'ascii'\r\n }\r\n\r\n public logon (): ILooseObject {\r\n const description = this.description\r\n const o: ILogon = {\r\n Username: description.Username,\r\n Password: description.Password,\r\n HeartBtInt: description.HeartBtInt,\r\n ResetSeqNumFlag: description.ResetSeqNumFlag,\r\n EncryptMethod: EncryptMethod.None\r\n } as ILogon\r\n return this.mutate(o, MsgType.Logon)\r\n }\r\n\r\n public logout (text: string): ILooseObject {\r\n const o: ILogout = {\r\n Text: text\r\n } as ILogout\r\n return this.mutate(o, MsgType.Logout)\r\n }\r\n\r\n public header (msgType: string, seqNum: number, time: Date, overrideData?: Partial<IStandardHeader>): ILooseObject {\r\n const description = this.description\r\n const bodyLength: number = Math.max(4, description.BodyLengthChars ?? 7)\r\n const placeHolder = Math.pow(10, bodyLength - 1) + 1\r\n const o: IStandardHeader = {\r\n BeginString: description.BeginString,\r\n BodyLength: placeHolder,\r\n MsgType: msgType,\r\n SenderCompID: description.SenderCompId,\r\n MsgSeqNum: seqNum,\r\n SendingTime: time,\r\n TargetCompID: description.TargetCompID,\r\n TargetSubID: description.TargetSubID,\r\n ...overrideData\r\n }\r\n return this.mutate(o, 'StandardHeader')\r\n }\r\n}\r\n\r\nexport class SessionMsgFactory extends AsciiSessionMsgFactory {\r\n constructor (public readonly description: ISessionDescription, public mutator: ObjectMutator | null = null) {\r\n super(description, mutator)\r\n }\r\n}\r\n"]}
@@ -5,7 +5,7 @@ import { FixMsgAsciiStoreResend, IFixMsgStore } from '../../store';
5
5
  export declare abstract class AsciiSession extends FixSession {
6
6
  readonly config: IJsFixConfig;
7
7
  heartbeat: boolean;
8
- protected store: IFixMsgStore;
8
+ protected store: IFixMsgStore | null;
9
9
  protected resender: FixMsgAsciiStoreResend;
10
10
  protected constructor(config: IJsFixConfig);
11
11
  private checkSeqNo;
@@ -63,19 +63,25 @@ class AsciiSession extends fix_session_1.FixSession {
63
63
  }
64
64
  sendReject(msgType, seqNo, msg, reason) {
65
65
  const factory = this.config.factory;
66
- const reject = factory.reject(msgType, seqNo, msg, reason);
67
- this.sessionLogger.warning(`rejecting with ${JSON.stringify(reject)}`);
68
- this.send(types_1.MsgType.Reject, reject);
66
+ const reject = factory === null || factory === void 0 ? void 0 : factory.reject(msgType, seqNo, msg, reason);
67
+ if (reject) {
68
+ this.sessionLogger.warning(`rejecting with ${JSON.stringify(reject)}`);
69
+ this.send(types_1.MsgType.Reject, reject);
70
+ }
69
71
  }
70
72
  sendResendRequest(lastSeq, receivedSeq) {
71
- const resend = this.config.factory.resendRequest(lastSeq + 1, 0);
72
- this.sessionLogger.warning(`received seq ${receivedSeq}, but last known seq is ${lastSeq}. Sending resend request for all messages > ${lastSeq}`);
73
- this.send(types_1.MsgType.ResendRequest, resend);
73
+ var _a;
74
+ const resend = (_a = this.config.factory) === null || _a === void 0 ? void 0 : _a.resendRequest(lastSeq + 1, 0);
75
+ if (resend) {
76
+ this.sessionLogger.warning(`received seq ${receivedSeq}, but last known seq is ${lastSeq}. Sending resend request for all messages > ${lastSeq}`);
77
+ this.send(types_1.MsgType.ResendRequest, resend);
78
+ }
74
79
  }
75
80
  checkIntegrity(msgType, view) {
81
+ var _a;
76
82
  const state = this.sessionState;
77
83
  const seqNum = view.getTyped(types_1.MsgTag.MsgSeqNum);
78
- const received = parseInt(view.getString(types_1.MsgTag.CheckSum), 10);
84
+ const received = parseInt((_a = view.getString(types_1.MsgTag.CheckSum)) !== null && _a !== void 0 ? _a : '', 10);
79
85
  const computed = view.checksum();
80
86
  if (received !== computed) {
81
87
  const msg = `msgType ${msgType} checksum failed. received = ${received} computed = ${computed}`;
@@ -137,7 +143,9 @@ class AsciiSession extends fix_session_1.FixSession {
137
143
  const validRecords = records.filter(rec => rec.obj !== null);
138
144
  this.sessionLogger.info(`sending ${validRecords.length}`);
139
145
  validRecords.forEach(rec => {
140
- this.send(rec.msgType, rec.obj);
146
+ if (rec.obj) {
147
+ this.send(rec.msgType, rec.obj);
148
+ }
141
149
  });
142
150
  this.setState(tcp_1.SessionState.ActiveNormalSession);
143
151
  }).catch(e => {
@@ -169,7 +177,9 @@ class AsciiSession extends fix_session_1.FixSession {
169
177
  }
170
178
  case types_1.MsgType.TestRequest: {
171
179
  const req = view.getString(types_1.MsgTag.TestReqID);
172
- this.sendHeartbeat(req);
180
+ if (req) {
181
+ this.sendHeartbeat(req);
182
+ }
173
183
  break;
174
184
  }
175
185
  case types_1.MsgType.Heartbeat: {
@@ -228,6 +238,8 @@ class AsciiSession extends fix_session_1.FixSession {
228
238
  }
229
239
  }
230
240
  startTimer(interval = 200) {
241
+ const logger = this.sessionLogger;
242
+ logger.info(`start heartbeat timer. interval = ${interval}`);
231
243
  this.timer = setInterval(() => {
232
244
  this.tick();
233
245
  }, interval);
@@ -251,27 +263,33 @@ class AsciiSession extends fix_session_1.FixSession {
251
263
  this.setState(tcp_1.SessionState.InitiationLogonReceived);
252
264
  }
253
265
  if (this.heartbeat) {
254
- logger.debug(`start heartbeat timer.`);
255
266
  this.startTimer();
256
267
  }
257
- logger.info(`system ready, inform app`);
268
+ logger.info('system ready, inform app');
258
269
  this.onReady(view);
259
270
  }
260
271
  sendTestRequest() {
261
272
  const factory = this.config.factory;
262
273
  this.setState(tcp_1.SessionState.AwaitingProcessingResponseToTestRequest);
263
- this.send(types_1.MsgType.TestRequest, factory.testRequest());
274
+ const tr = factory === null || factory === void 0 ? void 0 : factory.testRequest();
275
+ if (tr) {
276
+ this.send(types_1.MsgType.TestRequest, tr);
277
+ }
264
278
  }
265
279
  sendHeartbeat(testReqId) {
266
280
  const factory = this.config.factory;
267
- this.send(types_1.MsgType.Heartbeat, factory.heartbeat(testReqId));
281
+ const hb = factory === null || factory === void 0 ? void 0 : factory.heartbeat(testReqId);
282
+ if (hb) {
283
+ this.send(types_1.MsgType.Heartbeat, hb);
284
+ }
268
285
  }
269
286
  tick() {
287
+ var _a;
270
288
  if (!this.transport)
271
289
  return;
272
290
  const sessionState = this.sessionState;
273
291
  const action = sessionState.calcAction(new Date());
274
- const application = this.transport.config.description.application;
292
+ const application = (_a = this.transport.config.description.application) !== null && _a !== void 0 ? _a : null;
275
293
  const logger = this.sessionLogger;
276
294
  switch (action) {
277
295
  case tick_action_1.TickAction.Nothing: {
@@ -289,7 +307,7 @@ class AsciiSession extends fix_session_1.FixSession {
289
307
  }
290
308
  case tick_action_1.TickAction.TerminateOnError: {
291
309
  logger.info(sessionState.toString());
292
- this.terminate(new Error(`${application.name}: peer not responding`));
310
+ this.terminate(new Error(`${application === null || application === void 0 ? void 0 : application.name}: peer not responding`));
293
311
  break;
294
312
  }
295
313
  case tick_action_1.TickAction.Stop: {
@@ -299,7 +317,7 @@ class AsciiSession extends fix_session_1.FixSession {
299
317
  break;
300
318
  }
301
319
  default:
302
- throw new Error(`unexpected action`);
320
+ throw new Error('unexpected action');
303
321
  }
304
322
  }
305
323
  }
@@ -1 +1 @@
1
- {"version":3,"file":"ascii-session.js","sourceRoot":"","sources":["../../../src/transport/ascii/ascii-session.ts"],"names":[],"mappings":"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","sourcesContent":["import { MsgView } from '../../buffer'\r\nimport { MsgTag, MsgType, SessionRejectReason } from '../../types'\r\nimport { IJsFixConfig } from '../../config'\r\nimport { FixSession } from '../session/fix-session'\r\nimport { FixMsgAsciiStoreResend, FixMsgMemoryStore, IFixMsgStore, IFixMsgStoreRecord } from '../../store'\r\nimport { SessionState } from '../tcp'\r\nimport { TickAction } from '../tick-action'\r\nimport { IMsgApplication } from '../msg-application'\r\nimport { SegmentType } from '../../buffer/segment/segment-type'\r\n\r\nexport abstract class AsciiSession extends FixSession {\r\n\r\n public heartbeat: boolean = true\r\n protected store: IFixMsgStore = null\r\n protected resender: FixMsgAsciiStoreResend\r\n\r\n protected constructor (public readonly config: IJsFixConfig) {\r\n super(config)\r\n this.requestLogoutType = this.respondLogoutType = MsgType.Logout\r\n this.requestLogonType = MsgType.Logon\r\n this.store = new FixMsgMemoryStore(this.config.description.SenderCompId, this.config)\r\n this.resender = new FixMsgAsciiStoreResend(this.store, this.config)\r\n }\r\n\r\n private checkSeqNo (msgType: string, view: MsgView): boolean {\r\n\r\n switch (msgType) {\r\n case MsgType.SequenceReset: {\r\n return true\r\n }\r\n\r\n default: {\r\n const state = this.sessionState\r\n const lastSeq: number = state.lastPeerMsgSeqNum\r\n const seqNo: number = view.getTyped(MsgTag.MsgSeqNum)\r\n let ret: boolean = false\r\n const seqDelta: number = seqNo - lastSeq\r\n if (seqDelta <= 0) {\r\n // serious problem ... drop immediately\r\n this.sessionLogger.warning(`terminate as seqDelta (${seqDelta}) < 0 lastSeq = ${lastSeq} seqNo = ${seqNo}`)\r\n this.stop()\r\n } else if (seqDelta > 1) {\r\n // resend request required as have missed messages.\r\n\r\n // We process a Logon beforehand to confirm the connection even we out of sync\r\n if (msgType === MsgType.Logon) {\r\n this.peerLogon(view)\r\n }\r\n // If the out of sync message is a resend request itself, then we handle it first in order\r\n // to avoid triggering an endless loop of both sides sending resend requests in response to resend requests.\r\n if (msgType === MsgType.ResendRequest) {\r\n this.onResendRequest(view)\r\n }\r\n this.sendResendRequest(lastSeq, seqNo)\r\n } else {\r\n ret = true\r\n state.lastPeerMsgSeqNum = seqNo\r\n }\r\n return ret\r\n }\r\n }\r\n }\r\n\r\n protected checkForwardMsg (msgType: string, view: MsgView): void {\r\n const okToForward = this.validStateApplicationMsg()\r\n if (okToForward) {\r\n this.sessionLogger.info(`ascii forwarding msgType = '${msgType}' to application`)\r\n this.setState(SessionState.ActiveNormalSession)\r\n this.onApplicationMsg(msgType, view)\r\n } else {\r\n this.terminate(new Error(`msgType ${msgType} received in state ${this.stateString()}`))\r\n }\r\n }\r\n\r\n private sendReject (msgType: string, seqNo: number, msg: string, reason: number): void {\r\n const factory = this.config.factory\r\n const reject = factory.reject(msgType, seqNo, msg, reason)\r\n this.sessionLogger.warning(`rejecting with ${JSON.stringify(reject)}`)\r\n this.send(MsgType.Reject, reject)\r\n }\r\n\r\n protected sendResendRequest (lastSeq: number, receivedSeq: number) {\r\n const resend = this.config.factory.resendRequest(lastSeq + 1, 0)\r\n this.sessionLogger.warning(`received seq ${receivedSeq}, but last known seq is ${lastSeq}. Sending resend request for all messages > ${lastSeq}`)\r\n this.send(MsgType.ResendRequest, resend)\r\n }\r\n\r\n private checkIntegrity (msgType: string, view: MsgView): boolean {\r\n const state = this.sessionState\r\n const seqNum = view.getTyped(MsgTag.MsgSeqNum)\r\n\r\n const received: number = parseInt(view.getString(MsgTag.CheckSum), 10)\r\n const computed = view.checksum()\r\n if (received !== computed) {\r\n const msg: string = `msgType ${msgType} checksum failed. received = ${received} computed = ${computed}`\r\n this.sendReject(msgType, seqNum, msg, SessionRejectReason.ValueIsIncorrect)\r\n return false\r\n }\r\n\r\n if (view.segment.type === SegmentType.Unknown) {\r\n const msg: string = `msgType ${msgType} unknown`\r\n this.sendReject(msgType, seqNum, msg, SessionRejectReason.InvalidMsgType)\r\n return false\r\n }\r\n\r\n const invalid = view.invalid()\r\n if (invalid.length > 0) {\r\n const msg: string = `msgType ${msgType} invalid tag${invalid.length > 1 ? 's' : ''} ${invalid.join(', ')}`\r\n this.sendReject(msgType, seqNum, msg, SessionRejectReason.InvalidTagNumber)\r\n return false\r\n }\r\n\r\n const undefinedMsg: string = view.undefinedForMsg()\r\n if (undefinedMsg) {\r\n const msg: string = `msgType ${msgType} ${undefinedMsg}`\r\n this.sendReject(msgType, seqNum, msg, SessionRejectReason.TagNotDefinedForThisMessageType)\r\n return false\r\n }\r\n\r\n const missingRequired = view.missing()\r\n if (missingRequired.length > 0) {\r\n const msg: string = `msgType ${msgType} missing required tag${missingRequired.length > 1 ? 's' : ''} ${missingRequired.join(', ')}`\r\n this.sendReject(msgType, seqNum, msg, SessionRejectReason.RequiredTagMissing)\r\n return false\r\n }\r\n\r\n switch (state.state) {\r\n case SessionState.InitiationLogonReceived:\r\n case SessionState.InitiationLogonResponse: {\r\n const targetCompId = view.getString(MsgTag.TargetCompID)\r\n if (targetCompId !== state.compId) {\r\n const msg: string = `msgType ${msgType} unexpected TargetCompID ${targetCompId} expecting ${state.compId})`\r\n this.sendReject(msgType, seqNum, msg, SessionRejectReason.CompIDProblem)\r\n return false\r\n }\r\n\r\n const peerCompId = view.getString(MsgTag.SenderCompID)\r\n if (peerCompId !== state.peerCompId) {\r\n const msg: string = `msgType ${msgType} unexpected SenderCompID ${peerCompId} expecting ${state.compId}`\r\n this.sendReject(msgType, seqNum, msg, SessionRejectReason.CompIDProblem)\r\n return false\r\n }\r\n }\r\n break\r\n\r\n default: {\r\n break\r\n }\r\n }\r\n\r\n return true\r\n }\r\n\r\n /**\r\n * Override to resend stored messages following a sequence reset.\r\n * @protected\r\n */\r\n protected onResendRequest (view: MsgView) {\r\n // if no records are in store then send a gap fill for entire sequence\r\n this.setState(SessionState.HandleResendRequest)\r\n const [beginSeqNo, endSeqNo] = view.getTypedTags([MsgTag.BeginSeqNo, MsgTag.EndSeqNo])\r\n this.sessionLogger.info(`onResendRequest getResendRequest beginSeqNo = ${beginSeqNo}, endSeqNo = ${endSeqNo}`)\r\n this.resender.getResendRequest(beginSeqNo, endSeqNo).then((records: IFixMsgStoreRecord[]) => {\r\n const validRecords = records.filter(rec => rec.obj !== null)\r\n this.sessionLogger.info(`sending ${validRecords.length}`)\r\n validRecords.forEach(rec => {\r\n this.send(rec.msgType, rec.obj)\r\n })\r\n this.setState(SessionState.ActiveNormalSession)\r\n }).catch(e => {\r\n this.sessionLogger.error(e)\r\n })\r\n }\r\n\r\n okForLogon (): boolean {\r\n const state = this.sessionState.state\r\n if (this.acceptor) {\r\n return state === SessionState.WaitingForALogon\r\n }\r\n return state === SessionState.InitiationLogonSent\r\n }\r\n\r\n protected onSessionMsg (msgType: string, view: MsgView): void {\r\n\r\n const logger = this.sessionLogger\r\n\r\n switch (msgType) {\r\n case MsgType.Logon: {\r\n // only valid to receive a logon when in LogonSent or WaitingALogon\r\n // else will drop connection immediately.\r\n if (this.okForLogon()) {\r\n this.peerLogon(view)\r\n } else {\r\n this.terminate(new Error(`state ${this.stateString()} is illegal for Logon`))\r\n }\r\n break\r\n }\r\n\r\n case MsgType.Logout: {\r\n this.peerLogout(view)\r\n break\r\n }\r\n\r\n case MsgType.TestRequest: {\r\n const req: string = view.getString(MsgTag.TestReqID)\r\n this.sendHeartbeat(req)\r\n break\r\n }\r\n\r\n case MsgType.Heartbeat: {\r\n this.sessionState.lastTestRequestAt = null\r\n this.setState(SessionState.ActiveNormalSession)\r\n break\r\n }\r\n\r\n case MsgType.ResendRequest: {\r\n logger.info(`peer sends '${msgType}' resend request.`)\r\n this.onResendRequest(view)\r\n break\r\n }\r\n\r\n case MsgType.SequenceReset: {\r\n const newSeqNo: number = view.getTyped(MsgTag.NewSeqNo)\r\n logger.info(`peer sends '${msgType}' sequence reset. newSeqNo = ${newSeqNo}`)\r\n // expect newSeqNo to be the next message's sequence number.\r\n this.sessionState.lastPeerMsgSeqNum = newSeqNo - 1\r\n break\r\n }\r\n\r\n case MsgType.Reject: {\r\n logger.info(`peer rejects type '${msgType}' with text '${view.getTyped(MsgTag.Text)}'`)\r\n break\r\n }\r\n }\r\n }\r\n\r\n protected onMsg (msgType: string, view: MsgView): void {\r\n\r\n if (!this.checkSeqNo(msgType, view)) {\r\n this.sessionLogger.info(`message '${msgType}' failed checkSeqNo.`)\r\n return\r\n }\r\n\r\n if (this.checkMsgIntegrity && !this.checkIntegrity(msgType, view)) {\r\n this.sessionLogger.info(`message '${msgType}' failed checkIntegrity.`)\r\n switch (msgType) {\r\n case MsgType.Logon: {\r\n this.setState(SessionState.PeerLogonRejected)\r\n this.startTimer()\r\n break\r\n }\r\n }\r\n return\r\n }\r\n\r\n switch (msgType) {\r\n case MsgType.Logon:\r\n case MsgType.Logout:\r\n case MsgType.TestRequest:\r\n case MsgType.Reject:\r\n case MsgType.SequenceReset:\r\n case MsgType.Heartbeat:\r\n case MsgType.ResendRequest: {\r\n this.onSessionMsg(msgType, view)\r\n break\r\n }\r\n\r\n default: {\r\n this.checkForwardMsg(msgType, view)\r\n break\r\n }\r\n }\r\n }\r\n\r\n private startTimer (interval: number = 200) {\r\n this.timer = setInterval(() => {\r\n this.tick()\r\n }, interval)\r\n }\r\n\r\n private peerLogon (view: MsgView) {\r\n const logger = this.sessionLogger\r\n const [heartBtInt, peerCompId, userName, password] = view.getTypedTags([MsgTag.HeartBtInt, MsgTag.SenderCompID, MsgTag.Username, MsgTag.Password])\r\n logger.info(`peerLogon Username = ${userName}, heartBtInt = ${heartBtInt}, peerCompId = ${peerCompId}, userName = ${userName}`)\r\n const state = this.sessionState\r\n state.peerHeartBeatSecs = view.getTyped(MsgTag.HeartBtInt)\r\n state.peerCompId = view.getTyped(MsgTag.SenderCompID)\r\n const res = this.onLogon(view, userName, password)\r\n // currently not using this.\r\n logger.info(`peerLogon onLogon returns ${res}`)\r\n if (this.acceptor) {\r\n this.setState(SessionState.InitiationLogonResponse)\r\n logger.info('acceptor responds to logon request')\r\n this.sendLogon() // if res send response else reject, terminate\r\n } else { // as an initiator the acceptor has responded\r\n logger.info('initiator receives logon response')\r\n this.setState(SessionState.InitiationLogonReceived)\r\n }\r\n if (this.heartbeat) {\r\n logger.debug(`start heartbeat timer.`)\r\n this.startTimer()\r\n }\r\n logger.info(`system ready, inform app`)\r\n this.onReady(view)\r\n }\r\n\r\n private sendTestRequest () {\r\n const factory = this.config.factory\r\n this.setState(SessionState.AwaitingProcessingResponseToTestRequest)\r\n this.send(MsgType.TestRequest, factory.testRequest())\r\n }\r\n\r\n private sendHeartbeat (testReqId: string) {\r\n const factory = this.config.factory\r\n this.send(MsgType.Heartbeat, factory.heartbeat(testReqId))\r\n }\r\n\r\n private tick (): void {\r\n if (!this.transport) return\r\n const sessionState = this.sessionState\r\n const action: TickAction = sessionState.calcAction(new Date())\r\n const application: IMsgApplication = this.transport.config.description.application\r\n const logger = this.sessionLogger\r\n\r\n switch (action) {\r\n case TickAction.Nothing: {\r\n // all is well\r\n break\r\n }\r\n\r\n case TickAction.TestRequest: {\r\n logger.debug(`send test req. state = ${sessionState.toString()}`)\r\n this.sendTestRequest()\r\n break\r\n }\r\n\r\n case TickAction.Heartbeat: {\r\n logger.debug(`send heartbeat. state = ${sessionState.toString()}`)\r\n this.sendHeartbeat(sessionState.now.toUTCString())\r\n break\r\n }\r\n\r\n case TickAction.TerminateOnError: {\r\n logger.info(sessionState.toString())\r\n this.terminate(new Error(`${application.name}: peer not responding`))\r\n break\r\n }\r\n\r\n case TickAction.Stop: {\r\n logger.info(sessionState.toString())\r\n logger.info('stopping')\r\n this.stop()\r\n break\r\n }\r\n\r\n default:\r\n throw new Error(`unexpected action`)\r\n }\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"ascii-session.js","sourceRoot":"","sources":["../../../src/transport/ascii/ascii-session.ts"],"names":[],"mappings":";;;AACA,uCAAkE;AAElE,wDAAmD;AACnD,uCAAyG;AACzG,gCAAqC;AACrC,gDAA2C;AAE3C,oEAA+D;AAE/D,MAAsB,YAAa,SAAQ,wBAAU;IAKnD,YAAuC,MAAoB;QACzD,KAAK,CAAC,MAAM,CAAC,CAAA;QADwB,WAAM,GAAN,MAAM,CAAc;QAJpD,cAAS,GAAY,IAAI,CAAA;QACtB,UAAK,GAAwB,IAAI,CAAA;QAKzC,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,iBAAiB,GAAG,eAAO,CAAC,MAAM,CAAA;QAChE,IAAI,CAAC,gBAAgB,GAAG,eAAO,CAAC,KAAK,CAAA;QACrC,IAAI,CAAC,KAAK,GAAG,IAAI,yBAAiB,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,YAAY,EAAE,IAAI,CAAC,MAAM,CAAC,CAAA;QACrF,IAAI,CAAC,QAAQ,GAAG,IAAI,8BAAsB,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,CAAA;IACrE,CAAC;IAEO,UAAU,CAAE,OAAe,EAAE,IAAa;QAChD,QAAQ,OAAO,EAAE;YACf,KAAK,eAAO,CAAC,aAAa,CAAC,CAAC;gBAC1B,OAAO,IAAI,CAAA;aACZ;YAED,OAAO,CAAC,CAAC;gBACP,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,CAAA;gBAC/B,MAAM,OAAO,GAAW,KAAK,CAAC,iBAAiB,CAAA;gBAC/C,MAAM,KAAK,GAAW,IAAI,CAAC,QAAQ,CAAC,cAAM,CAAC,SAAS,CAAC,CAAA;gBACrD,IAAI,GAAG,GAAY,KAAK,CAAA;gBACxB,MAAM,QAAQ,GAAW,KAAK,GAAG,OAAO,CAAA;gBACxC,IAAI,QAAQ,IAAI,CAAC,EAAE;oBAEjB,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,0BAA0B,QAAQ,mBAAmB,OAAO,YAAY,KAAK,EAAE,CAAC,CAAA;oBAC3G,IAAI,CAAC,IAAI,EAAE,CAAA;iBACZ;qBAAM,IAAI,QAAQ,GAAG,CAAC,EAAE;oBAIvB,IAAI,OAAO,KAAK,eAAO,CAAC,KAAK,EAAE;wBAC7B,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAA;qBACrB;oBAGD,IAAI,OAAO,KAAK,eAAO,CAAC,aAAa,EAAE;wBACrC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAA;qBAC3B;oBACD,IAAI,CAAC,iBAAiB,CAAC,OAAO,EAAE,KAAK,CAAC,CAAA;iBACvC;qBAAM;oBACL,GAAG,GAAG,IAAI,CAAA;oBACV,KAAK,CAAC,iBAAiB,GAAG,KAAK,CAAA;iBAChC;gBACD,OAAO,GAAG,CAAA;aACX;SACF;IACH,CAAC;IAES,eAAe,CAAE,OAAe,EAAE,IAAa;QACvD,MAAM,WAAW,GAAG,IAAI,CAAC,wBAAwB,EAAE,CAAA;QACnD,IAAI,WAAW,EAAE;YACf,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,+BAA+B,OAAO,kBAAkB,CAAC,CAAA;YACjF,IAAI,CAAC,QAAQ,CAAC,kBAAY,CAAC,mBAAmB,CAAC,CAAA;YAC/C,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAAC,CAAA;SACrC;aAAM;YACL,IAAI,CAAC,SAAS,CAAC,IAAI,KAAK,CAAC,WAAW,OAAO,sBAAsB,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,CAAA;SACxF;IACH,CAAC;IAEO,UAAU,CAAE,OAAe,EAAE,KAAa,EAAE,GAAW,EAAE,MAAc;QAC7E,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,CAAA;QACnC,MAAM,MAAM,GAAG,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,MAAM,CAAC,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,CAAC,CAAA;QAC3D,IAAI,MAAM,EAAE;YACV,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,kBAAkB,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;YACtE,IAAI,CAAC,IAAI,CAAC,eAAO,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;SAClC;IACH,CAAC;IAES,iBAAiB,CAAE,OAAe,EAAE,WAAmB;;QAC/D,MAAM,MAAM,GAAG,MAAA,IAAI,CAAC,MAAM,CAAC,OAAO,0CAAE,aAAa,CAAC,OAAO,GAAG,CAAC,EAAE,CAAC,CAAC,CAAA;QACjE,IAAI,MAAM,EAAE;YACV,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,gBAAgB,WAAW,2BAA2B,OAAO,+CAA+C,OAAO,EAAE,CAAC,CAAA;YACjJ,IAAI,CAAC,IAAI,CAAC,eAAO,CAAC,aAAa,EAAE,MAAM,CAAC,CAAA;SACzC;IACH,CAAC;IAEO,cAAc,CAAE,OAAe,EAAE,IAAa;;QACpD,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,CAAA;QAC/B,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,cAAM,CAAC,SAAS,CAAC,CAAA;QAE9C,MAAM,QAAQ,GAAW,QAAQ,CAAC,MAAA,IAAI,CAAC,SAAS,CAAC,cAAM,CAAC,QAAQ,CAAC,mCAAI,EAAE,EAAE,EAAE,CAAC,CAAA;QAC5E,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAA;QAChC,IAAI,QAAQ,KAAK,QAAQ,EAAE;YACzB,MAAM,GAAG,GAAW,WAAW,OAAO,gCAAgC,QAAQ,eAAe,QAAQ,EAAE,CAAA;YACvG,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,2BAAmB,CAAC,gBAAgB,CAAC,CAAA;YAC3E,OAAO,KAAK,CAAA;SACb;QAED,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,KAAK,0BAAW,CAAC,OAAO,EAAE;YAC7C,MAAM,GAAG,GAAW,WAAW,OAAO,UAAU,CAAA;YAChD,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,2BAAmB,CAAC,cAAc,CAAC,CAAA;YACzE,OAAO,KAAK,CAAA;SACb;QAED,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,EAAE,CAAA;QAC9B,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE;YACtB,MAAM,GAAG,GAAW,WAAW,OAAO,eAAe,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAA;YAC1G,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,2BAAmB,CAAC,gBAAgB,CAAC,CAAA;YAC3E,OAAO,KAAK,CAAA;SACb;QAED,MAAM,YAAY,GAAkB,IAAI,CAAC,eAAe,EAAE,CAAA;QAC1D,IAAI,YAAY,EAAE;YAChB,MAAM,GAAG,GAAW,WAAW,OAAO,IAAI,YAAY,EAAE,CAAA;YACxD,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,2BAAmB,CAAC,+BAA+B,CAAC,CAAA;YAC1F,OAAO,KAAK,CAAA;SACb;QAED,MAAM,eAAe,GAAG,IAAI,CAAC,OAAO,EAAE,CAAA;QACtC,IAAI,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE;YAC9B,MAAM,GAAG,GAAW,WAAW,OAAO,wBAAwB,eAAe,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,IAAI,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAA;YACnI,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,2BAAmB,CAAC,kBAAkB,CAAC,CAAA;YAC7E,OAAO,KAAK,CAAA;SACb;QAED,QAAQ,KAAK,CAAC,KAAK,EAAE;YACnB,KAAK,kBAAY,CAAC,uBAAuB,CAAC;YAC1C,KAAK,kBAAY,CAAC,uBAAuB;gBAAE;oBACzC,MAAM,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC,cAAM,CAAC,YAAY,CAAC,CAAA;oBACxD,IAAI,YAAY,KAAK,KAAK,CAAC,MAAM,EAAE;wBACjC,MAAM,GAAG,GAAW,WAAW,OAAO,4BAA4B,YAAY,cAAc,KAAK,CAAC,MAAM,GAAG,CAAA;wBAC3G,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,2BAAmB,CAAC,aAAa,CAAC,CAAA;wBACxE,OAAO,KAAK,CAAA;qBACb;oBAED,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,cAAM,CAAC,YAAY,CAAC,CAAA;oBACtD,IAAI,UAAU,KAAK,KAAK,CAAC,UAAU,EAAE;wBACnC,MAAM,GAAG,GAAW,WAAW,OAAO,4BAA4B,UAAU,eAAe,KAAK,CAAC,MAAM,EAAE,CAAA;wBACzG,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,2BAAmB,CAAC,aAAa,CAAC,CAAA;wBACxE,OAAO,KAAK,CAAA;qBACb;iBACF;gBACC,MAAK;YAEP,OAAO,CAAC,CAAC;gBACP,MAAK;aACN;SACF;QAED,OAAO,IAAI,CAAA;IACb,CAAC;IAMS,eAAe,CAAE,IAAa;QAEtC,IAAI,CAAC,QAAQ,CAAC,kBAAY,CAAC,mBAAmB,CAAC,CAAA;QAC/C,MAAM,CAAC,UAAU,EAAE,QAAQ,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC,cAAM,CAAC,UAAU,EAAE,cAAM,CAAC,QAAQ,CAAC,CAAC,CAAA;QACtF,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,iDAAiD,UAAU,gBAAgB,QAAQ,EAAE,CAAC,CAAA;QAC9G,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,OAA6B,EAAE,EAAE;YAC1F,MAAM,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,KAAK,IAAI,CAAC,CAAA;YAC5D,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,WAAW,YAAY,CAAC,MAAM,EAAE,CAAC,CAAA;YACzD,YAAY,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;gBACzB,IAAI,GAAG,CAAC,GAAG,EAAE;oBACX,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC,GAAG,CAAC,CAAA;iBAChC;YACH,CAAC,CAAC,CAAA;YACF,IAAI,CAAC,QAAQ,CAAC,kBAAY,CAAC,mBAAmB,CAAC,CAAA;QACjD,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;YACX,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;QAC7B,CAAC,CAAC,CAAA;IACJ,CAAC;IAED,UAAU;QACR,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,CAAA;QACrC,IAAI,IAAI,CAAC,QAAQ,EAAE;YACjB,OAAO,KAAK,KAAK,kBAAY,CAAC,gBAAgB,CAAA;SAC/C;QACD,OAAO,KAAK,KAAK,kBAAY,CAAC,mBAAmB,CAAA;IACnD,CAAC;IAES,YAAY,CAAE,OAAe,EAAE,IAAa;QACpD,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,CAAA;QAEjC,QAAQ,OAAO,EAAE;YACf,KAAK,eAAO,CAAC,KAAK,CAAC,CAAC;gBAGlB,IAAI,IAAI,CAAC,UAAU,EAAE,EAAE;oBACrB,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAA;iBACrB;qBAAM;oBACL,IAAI,CAAC,SAAS,CAAC,IAAI,KAAK,CAAC,SAAS,IAAI,CAAC,WAAW,EAAE,uBAAuB,CAAC,CAAC,CAAA;iBAC9E;gBACD,MAAK;aACN;YAED,KAAK,eAAO,CAAC,MAAM,CAAC,CAAC;gBACnB,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAA;gBACrB,MAAK;aACN;YAED,KAAK,eAAO,CAAC,WAAW,CAAC,CAAC;gBACxB,MAAM,GAAG,GAAkB,IAAI,CAAC,SAAS,CAAC,cAAM,CAAC,SAAS,CAAC,CAAA;gBAC3D,IAAI,GAAG,EAAE;oBACP,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAA;iBACxB;gBACD,MAAK;aACN;YAED,KAAK,eAAO,CAAC,SAAS,CAAC,CAAC;gBACtB,IAAI,CAAC,YAAY,CAAC,iBAAiB,GAAG,IAAI,CAAA;gBAC1C,IAAI,CAAC,QAAQ,CAAC,kBAAY,CAAC,mBAAmB,CAAC,CAAA;gBAC/C,MAAK;aACN;YAED,KAAK,eAAO,CAAC,aAAa,CAAC,CAAC;gBAC1B,MAAM,CAAC,IAAI,CAAC,eAAe,OAAO,mBAAmB,CAAC,CAAA;gBACtD,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAA;gBAC1B,MAAK;aACN;YAED,KAAK,eAAO,CAAC,aAAa,CAAC,CAAC;gBAC1B,MAAM,QAAQ,GAAW,IAAI,CAAC,QAAQ,CAAC,cAAM,CAAC,QAAQ,CAAC,CAAA;gBACvD,MAAM,CAAC,IAAI,CAAC,eAAe,OAAO,gCAAgC,QAAQ,EAAE,CAAC,CAAA;gBAE7E,IAAI,CAAC,YAAY,CAAC,iBAAiB,GAAG,QAAQ,GAAG,CAAC,CAAA;gBAClD,MAAK;aACN;YAED,KAAK,eAAO,CAAC,MAAM,CAAC,CAAC;gBACnB,MAAM,CAAC,IAAI,CAAC,sBAAsB,OAAO,gBAAgB,IAAI,CAAC,QAAQ,CAAC,cAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;gBACvF,MAAK;aACN;SACF;IACH,CAAC;IAES,KAAK,CAAE,OAAe,EAAE,IAAa;QAC7C,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC,EAAE;YACnC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,YAAY,OAAO,sBAAsB,CAAC,CAAA;YAClE,OAAM;SACP;QAED,IAAI,IAAI,CAAC,iBAAiB,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,IAAI,CAAC,EAAE;YACjE,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,YAAY,OAAO,0BAA0B,CAAC,CAAA;YACtE,QAAQ,OAAO,EAAE;gBACf,KAAK,eAAO,CAAC,KAAK,CAAC,CAAC;oBAClB,IAAI,CAAC,QAAQ,CAAC,kBAAY,CAAC,iBAAiB,CAAC,CAAA;oBAC7C,IAAI,CAAC,UAAU,EAAE,CAAA;oBACjB,MAAK;iBACN;aACF;YACD,OAAM;SACP;QAED,QAAQ,OAAO,EAAE;YACf,KAAK,eAAO,CAAC,KAAK,CAAC;YACnB,KAAK,eAAO,CAAC,MAAM,CAAC;YACpB,KAAK,eAAO,CAAC,WAAW,CAAC;YACzB,KAAK,eAAO,CAAC,MAAM,CAAC;YACpB,KAAK,eAAO,CAAC,aAAa,CAAC;YAC3B,KAAK,eAAO,CAAC,SAAS,CAAC;YACvB,KAAK,eAAO,CAAC,aAAa,CAAC,CAAC;gBAC1B,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,IAAI,CAAC,CAAA;gBAChC,MAAK;aACN;YAED,OAAO,CAAC,CAAC;gBACP,IAAI,CAAC,eAAe,CAAC,OAAO,EAAE,IAAI,CAAC,CAAA;gBACnC,MAAK;aACN;SACF;IACH,CAAC;IAEO,UAAU,CAAE,WAAmB,GAAG;QACxC,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,CAAA;QACjC,MAAM,CAAC,IAAI,CAAC,qCAAqC,QAAQ,EAAE,CAAC,CAAA;QAC5D,IAAI,CAAC,KAAK,GAAG,WAAW,CAAC,GAAG,EAAE;YAC5B,IAAI,CAAC,IAAI,EAAE,CAAA;QACb,CAAC,EAAE,QAAQ,CAAC,CAAA;IACd,CAAC;IAEO,SAAS,CAAE,IAAa;QAC9B,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,CAAA;QACjC,MAAM,CAAC,UAAU,EAAE,UAAU,EAAE,QAAQ,EAAE,QAAQ,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC,cAAM,CAAC,UAAU,EAAE,cAAM,CAAC,YAAY,EAAE,cAAM,CAAC,QAAQ,EAAE,cAAM,CAAC,QAAQ,CAAC,CAAC,CAAA;QAClJ,MAAM,CAAC,IAAI,CAAC,wBAAwB,QAAQ,kBAAkB,UAAU,kBAAkB,UAAU,gBAAgB,QAAQ,EAAE,CAAC,CAAA;QAC/H,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,CAAA;QAC/B,KAAK,CAAC,iBAAiB,GAAG,IAAI,CAAC,QAAQ,CAAC,cAAM,CAAC,UAAU,CAAC,CAAA;QAC1D,KAAK,CAAC,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,cAAM,CAAC,YAAY,CAAC,CAAA;QACrD,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAA;QAElD,MAAM,CAAC,IAAI,CAAC,6BAA6B,GAAG,EAAE,CAAC,CAAA;QAC/C,IAAI,IAAI,CAAC,QAAQ,EAAE;YACjB,IAAI,CAAC,QAAQ,CAAC,kBAAY,CAAC,uBAAuB,CAAC,CAAA;YACnD,MAAM,CAAC,IAAI,CAAC,oCAAoC,CAAC,CAAA;YACjD,IAAI,CAAC,SAAS,EAAE,CAAA;SACjB;aAAM;YACL,MAAM,CAAC,IAAI,CAAC,mCAAmC,CAAC,CAAA;YAChD,IAAI,CAAC,QAAQ,CAAC,kBAAY,CAAC,uBAAuB,CAAC,CAAA;SACpD;QACD,IAAI,IAAI,CAAC,SAAS,EAAE;YAClB,IAAI,CAAC,UAAU,EAAE,CAAA;SAClB;QACD,MAAM,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAA;QACvC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;IACpB,CAAC;IAEO,eAAe;QACrB,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,CAAA;QACnC,IAAI,CAAC,QAAQ,CAAC,kBAAY,CAAC,uCAAuC,CAAC,CAAA;QACnE,MAAM,EAAE,GAAG,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,WAAW,EAAE,CAAA;QACjC,IAAI,EAAE,EAAE;YACN,IAAI,CAAC,IAAI,CAAC,eAAO,CAAC,WAAW,EAAE,EAAE,CAAC,CAAA;SACnC;IACH,CAAC;IAEO,aAAa,CAAE,SAAiB;QACtC,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,CAAA;QACnC,MAAM,EAAE,GAAG,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,SAAS,CAAC,SAAS,CAAC,CAAA;QACxC,IAAI,EAAE,EAAE;YACN,IAAI,CAAC,IAAI,CAAC,eAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAA;SACjC;IACH,CAAC;IAEO,IAAI;;QACV,IAAI,CAAC,IAAI,CAAC,SAAS;YAAE,OAAM;QAC3B,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY,CAAA;QACtC,MAAM,MAAM,GAAe,YAAY,CAAC,UAAU,CAAC,IAAI,IAAI,EAAE,CAAC,CAAA;QAC9D,MAAM,WAAW,GAA2B,MAAA,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,WAAW,CAAC,WAAW,mCAAI,IAAI,CAAA;QACjG,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,CAAA;QAEjC,QAAQ,MAAM,EAAE;YACd,KAAK,wBAAU,CAAC,OAAO,CAAC,CAAC;gBAEvB,MAAK;aACN;YAED,KAAK,wBAAU,CAAC,WAAW,CAAC,CAAC;gBAC3B,MAAM,CAAC,KAAK,CAAC,0BAA0B,YAAY,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAA;gBACjE,IAAI,CAAC,eAAe,EAAE,CAAA;gBACtB,MAAK;aACN;YAED,KAAK,wBAAU,CAAC,SAAS,CAAC,CAAC;gBACzB,MAAM,CAAC,KAAK,CAAC,2BAA2B,YAAY,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAA;gBAClE,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,CAAA;gBAClD,MAAK;aACN;YAED,KAAK,wBAAU,CAAC,gBAAgB,CAAC,CAAC;gBAChC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,CAAC,CAAA;gBACpC,IAAI,CAAC,SAAS,CAAC,IAAI,KAAK,CAAC,GAAG,WAAW,aAAX,WAAW,uBAAX,WAAW,CAAE,IAAI,uBAAuB,CAAC,CAAC,CAAA;gBACtE,MAAK;aACN;YAED,KAAK,wBAAU,CAAC,IAAI,CAAC,CAAC;gBACpB,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,CAAC,CAAA;gBACpC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;gBACvB,IAAI,CAAC,IAAI,EAAE,CAAA;gBACX,MAAK;aACN;YAED;gBACE,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAA;SACvC;IACH,CAAC;CACF;AAxWD,oCAwWC","sourcesContent":["import { MsgView } from '../../buffer'\r\nimport { MsgTag, MsgType, SessionRejectReason } from '../../types'\r\nimport { IJsFixConfig } from '../../config'\r\nimport { FixSession } from '../session/fix-session'\r\nimport { FixMsgAsciiStoreResend, FixMsgMemoryStore, IFixMsgStore, IFixMsgStoreRecord } from '../../store'\r\nimport { SessionState } from '../tcp'\r\nimport { TickAction } from '../tick-action'\r\nimport { IMsgApplication } from '../msg-application'\r\nimport { SegmentType } from '../../buffer/segment/segment-type'\r\n\r\nexport abstract class AsciiSession extends FixSession {\r\n public heartbeat: boolean = true\r\n protected store: IFixMsgStore | null = null\r\n protected resender: FixMsgAsciiStoreResend\r\n\r\n protected constructor (public readonly config: IJsFixConfig) {\r\n super(config)\r\n this.requestLogoutType = this.respondLogoutType = MsgType.Logout\r\n this.requestLogonType = MsgType.Logon\r\n this.store = new FixMsgMemoryStore(this.config.description.SenderCompId, this.config)\r\n this.resender = new FixMsgAsciiStoreResend(this.store, this.config)\r\n }\r\n\r\n private checkSeqNo (msgType: string, view: MsgView): boolean {\r\n switch (msgType) {\r\n case MsgType.SequenceReset: {\r\n return true\r\n }\r\n\r\n default: {\r\n const state = this.sessionState\r\n const lastSeq: number = state.lastPeerMsgSeqNum\r\n const seqNo: number = view.getTyped(MsgTag.MsgSeqNum)\r\n let ret: boolean = false\r\n const seqDelta: number = seqNo - lastSeq\r\n if (seqDelta <= 0) {\r\n // serious problem ... drop immediately\r\n this.sessionLogger.warning(`terminate as seqDelta (${seqDelta}) < 0 lastSeq = ${lastSeq} seqNo = ${seqNo}`)\r\n this.stop()\r\n } else if (seqDelta > 1) {\r\n // resend request required as have missed messages.\r\n\r\n // We process a Logon beforehand to confirm the connection even we out of sync\r\n if (msgType === MsgType.Logon) {\r\n this.peerLogon(view)\r\n }\r\n // If the out of sync message is a resend request itself, then we handle it first in order\r\n // to avoid triggering an endless loop of both sides sending resend requests in response to resend requests.\r\n if (msgType === MsgType.ResendRequest) {\r\n this.onResendRequest(view)\r\n }\r\n this.sendResendRequest(lastSeq, seqNo)\r\n } else {\r\n ret = true\r\n state.lastPeerMsgSeqNum = seqNo\r\n }\r\n return ret\r\n }\r\n }\r\n }\r\n\r\n protected checkForwardMsg (msgType: string, view: MsgView): void {\r\n const okToForward = this.validStateApplicationMsg()\r\n if (okToForward) {\r\n this.sessionLogger.info(`ascii forwarding msgType = '${msgType}' to application`)\r\n this.setState(SessionState.ActiveNormalSession)\r\n this.onApplicationMsg(msgType, view)\r\n } else {\r\n this.terminate(new Error(`msgType ${msgType} received in state ${this.stateString()}`))\r\n }\r\n }\r\n\r\n private sendReject (msgType: string, seqNo: number, msg: string, reason: number): void {\r\n const factory = this.config.factory\r\n const reject = factory?.reject(msgType, seqNo, msg, reason)\r\n if (reject) {\r\n this.sessionLogger.warning(`rejecting with ${JSON.stringify(reject)}`)\r\n this.send(MsgType.Reject, reject)\r\n }\r\n }\r\n\r\n protected sendResendRequest (lastSeq: number, receivedSeq: number): void {\r\n const resend = this.config.factory?.resendRequest(lastSeq + 1, 0)\r\n if (resend) {\r\n this.sessionLogger.warning(`received seq ${receivedSeq}, but last known seq is ${lastSeq}. Sending resend request for all messages > ${lastSeq}`)\r\n this.send(MsgType.ResendRequest, resend)\r\n }\r\n }\r\n\r\n private checkIntegrity (msgType: string, view: MsgView): boolean {\r\n const state = this.sessionState\r\n const seqNum = view.getTyped(MsgTag.MsgSeqNum)\r\n\r\n const received: number = parseInt(view.getString(MsgTag.CheckSum) ?? '', 10)\r\n const computed = view.checksum()\r\n if (received !== computed) {\r\n const msg: string = `msgType ${msgType} checksum failed. received = ${received} computed = ${computed}`\r\n this.sendReject(msgType, seqNum, msg, SessionRejectReason.ValueIsIncorrect)\r\n return false\r\n }\r\n\r\n if (view.segment.type === SegmentType.Unknown) {\r\n const msg: string = `msgType ${msgType} unknown`\r\n this.sendReject(msgType, seqNum, msg, SessionRejectReason.InvalidMsgType)\r\n return false\r\n }\r\n\r\n const invalid = view.invalid()\r\n if (invalid.length > 0) {\r\n const msg: string = `msgType ${msgType} invalid tag${invalid.length > 1 ? 's' : ''} ${invalid.join(', ')}`\r\n this.sendReject(msgType, seqNum, msg, SessionRejectReason.InvalidTagNumber)\r\n return false\r\n }\r\n\r\n const undefinedMsg: string | null = view.undefinedForMsg()\r\n if (undefinedMsg) {\r\n const msg: string = `msgType ${msgType} ${undefinedMsg}`\r\n this.sendReject(msgType, seqNum, msg, SessionRejectReason.TagNotDefinedForThisMessageType)\r\n return false\r\n }\r\n\r\n const missingRequired = view.missing()\r\n if (missingRequired.length > 0) {\r\n const msg: string = `msgType ${msgType} missing required tag${missingRequired.length > 1 ? 's' : ''} ${missingRequired.join(', ')}`\r\n this.sendReject(msgType, seqNum, msg, SessionRejectReason.RequiredTagMissing)\r\n return false\r\n }\r\n\r\n switch (state.state) {\r\n case SessionState.InitiationLogonReceived:\r\n case SessionState.InitiationLogonResponse: {\r\n const targetCompId = view.getString(MsgTag.TargetCompID)\r\n if (targetCompId !== state.compId) {\r\n const msg: string = `msgType ${msgType} unexpected TargetCompID ${targetCompId} expecting ${state.compId})`\r\n this.sendReject(msgType, seqNum, msg, SessionRejectReason.CompIDProblem)\r\n return false\r\n }\r\n\r\n const peerCompId = view.getString(MsgTag.SenderCompID)\r\n if (peerCompId !== state.peerCompId) {\r\n const msg: string = `msgType ${msgType} unexpected SenderCompID ${peerCompId} expecting ${state.compId}`\r\n this.sendReject(msgType, seqNum, msg, SessionRejectReason.CompIDProblem)\r\n return false\r\n }\r\n }\r\n break\r\n\r\n default: {\r\n break\r\n }\r\n }\r\n\r\n return true\r\n }\r\n\r\n /**\r\n * Override to resend stored messages following a sequence reset.\r\n * @protected\r\n */\r\n protected onResendRequest (view: MsgView): void {\r\n // if no records are in store then send a gap fill for entire sequence\r\n this.setState(SessionState.HandleResendRequest)\r\n const [beginSeqNo, endSeqNo] = view.getTypedTags([MsgTag.BeginSeqNo, MsgTag.EndSeqNo])\r\n this.sessionLogger.info(`onResendRequest getResendRequest beginSeqNo = ${beginSeqNo}, endSeqNo = ${endSeqNo}`)\r\n this.resender.getResendRequest(beginSeqNo, endSeqNo).then((records: IFixMsgStoreRecord[]) => {\r\n const validRecords = records.filter(rec => rec.obj !== null)\r\n this.sessionLogger.info(`sending ${validRecords.length}`)\r\n validRecords.forEach(rec => {\r\n if (rec.obj) {\r\n this.send(rec.msgType, rec.obj)\r\n }\r\n })\r\n this.setState(SessionState.ActiveNormalSession)\r\n }).catch(e => {\r\n this.sessionLogger.error(e)\r\n })\r\n }\r\n\r\n okForLogon (): boolean {\r\n const state = this.sessionState.state\r\n if (this.acceptor) {\r\n return state === SessionState.WaitingForALogon\r\n }\r\n return state === SessionState.InitiationLogonSent\r\n }\r\n\r\n protected onSessionMsg (msgType: string, view: MsgView): void {\r\n const logger = this.sessionLogger\r\n\r\n switch (msgType) {\r\n case MsgType.Logon: {\r\n // only valid to receive a logon when in LogonSent or WaitingALogon\r\n // else will drop connection immediately.\r\n if (this.okForLogon()) {\r\n this.peerLogon(view)\r\n } else {\r\n this.terminate(new Error(`state ${this.stateString()} is illegal for Logon`))\r\n }\r\n break\r\n }\r\n\r\n case MsgType.Logout: {\r\n this.peerLogout(view)\r\n break\r\n }\r\n\r\n case MsgType.TestRequest: {\r\n const req: string | null = view.getString(MsgTag.TestReqID)\r\n if (req) {\r\n this.sendHeartbeat(req)\r\n }\r\n break\r\n }\r\n\r\n case MsgType.Heartbeat: {\r\n this.sessionState.lastTestRequestAt = null\r\n this.setState(SessionState.ActiveNormalSession)\r\n break\r\n }\r\n\r\n case MsgType.ResendRequest: {\r\n logger.info(`peer sends '${msgType}' resend request.`)\r\n this.onResendRequest(view)\r\n break\r\n }\r\n\r\n case MsgType.SequenceReset: {\r\n const newSeqNo: number = view.getTyped(MsgTag.NewSeqNo)\r\n logger.info(`peer sends '${msgType}' sequence reset. newSeqNo = ${newSeqNo}`)\r\n // expect newSeqNo to be the next message's sequence number.\r\n this.sessionState.lastPeerMsgSeqNum = newSeqNo - 1\r\n break\r\n }\r\n\r\n case MsgType.Reject: {\r\n logger.info(`peer rejects type '${msgType}' with text '${view.getTyped(MsgTag.Text)}'`)\r\n break\r\n }\r\n }\r\n }\r\n\r\n protected onMsg (msgType: string, view: MsgView): void {\r\n if (!this.checkSeqNo(msgType, view)) {\r\n this.sessionLogger.info(`message '${msgType}' failed checkSeqNo.`)\r\n return\r\n }\r\n\r\n if (this.checkMsgIntegrity && !this.checkIntegrity(msgType, view)) {\r\n this.sessionLogger.info(`message '${msgType}' failed checkIntegrity.`)\r\n switch (msgType) {\r\n case MsgType.Logon: {\r\n this.setState(SessionState.PeerLogonRejected)\r\n this.startTimer()\r\n break\r\n }\r\n }\r\n return\r\n }\r\n\r\n switch (msgType) {\r\n case MsgType.Logon:\r\n case MsgType.Logout:\r\n case MsgType.TestRequest:\r\n case MsgType.Reject:\r\n case MsgType.SequenceReset:\r\n case MsgType.Heartbeat:\r\n case MsgType.ResendRequest: {\r\n this.onSessionMsg(msgType, view)\r\n break\r\n }\r\n\r\n default: {\r\n this.checkForwardMsg(msgType, view)\r\n break\r\n }\r\n }\r\n }\r\n\r\n private startTimer (interval: number = 200): void {\r\n const logger = this.sessionLogger\r\n logger.info(`start heartbeat timer. interval = ${interval}`)\r\n this.timer = setInterval(() => {\r\n this.tick()\r\n }, interval)\r\n }\r\n\r\n private peerLogon (view: MsgView): void {\r\n const logger = this.sessionLogger\r\n const [heartBtInt, peerCompId, userName, password] = view.getTypedTags([MsgTag.HeartBtInt, MsgTag.SenderCompID, MsgTag.Username, MsgTag.Password])\r\n logger.info(`peerLogon Username = ${userName}, heartBtInt = ${heartBtInt}, peerCompId = ${peerCompId}, userName = ${userName}`)\r\n const state = this.sessionState\r\n state.peerHeartBeatSecs = view.getTyped(MsgTag.HeartBtInt)\r\n state.peerCompId = view.getTyped(MsgTag.SenderCompID)\r\n const res = this.onLogon(view, userName, password)\r\n // currently not using this.\r\n logger.info(`peerLogon onLogon returns ${res}`)\r\n if (this.acceptor) {\r\n this.setState(SessionState.InitiationLogonResponse)\r\n logger.info('acceptor responds to logon request')\r\n this.sendLogon() // if res send response else reject, terminate\r\n } else { // as an initiator the acceptor has responded\r\n logger.info('initiator receives logon response')\r\n this.setState(SessionState.InitiationLogonReceived)\r\n }\r\n if (this.heartbeat) {\r\n this.startTimer()\r\n }\r\n logger.info('system ready, inform app')\r\n this.onReady(view)\r\n }\r\n\r\n private sendTestRequest (): void {\r\n const factory = this.config.factory\r\n this.setState(SessionState.AwaitingProcessingResponseToTestRequest)\r\n const tr = factory?.testRequest()\r\n if (tr) {\r\n this.send(MsgType.TestRequest, tr)\r\n }\r\n }\r\n\r\n private sendHeartbeat (testReqId: string): void {\r\n const factory = this.config.factory\r\n const hb = factory?.heartbeat(testReqId)\r\n if (hb) {\r\n this.send(MsgType.Heartbeat, hb)\r\n }\r\n }\r\n\r\n private tick (): void {\r\n if (!this.transport) return\r\n const sessionState = this.sessionState\r\n const action: TickAction = sessionState.calcAction(new Date())\r\n const application: IMsgApplication | null = this.transport.config.description.application ?? null\r\n const logger = this.sessionLogger\r\n\r\n switch (action) {\r\n case TickAction.Nothing: {\r\n // all is well\r\n break\r\n }\r\n\r\n case TickAction.TestRequest: {\r\n logger.debug(`send test req. state = ${sessionState.toString()}`)\r\n this.sendTestRequest()\r\n break\r\n }\r\n\r\n case TickAction.Heartbeat: {\r\n logger.debug(`send heartbeat. state = ${sessionState.toString()}`)\r\n this.sendHeartbeat(sessionState.now.toUTCString())\r\n break\r\n }\r\n\r\n case TickAction.TerminateOnError: {\r\n logger.info(sessionState.toString())\r\n this.terminate(new Error(`${application?.name}: peer not responding`))\r\n break\r\n }\r\n\r\n case TickAction.Stop: {\r\n logger.info(sessionState.toString())\r\n logger.info('stopping')\r\n this.stop()\r\n break\r\n }\r\n\r\n default:\r\n throw new Error('unexpected action')\r\n }\r\n }\r\n}\r\n"]}
@@ -11,7 +11,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
11
11
  Object.defineProperty(exports, "__esModule", { value: true });
12
12
  exports.HttpDuplex = void 0;
13
13
  const fix_duplex_1 = require("./fix-duplex");
14
- const rp = require("request-promise-native");
14
+ const axios_1 = require("axios");
15
15
  class HttpDuplex extends fix_duplex_1.FixDuplex {
16
16
  constructor(adapter) {
17
17
  super();
@@ -35,13 +35,15 @@ class HttpDuplex extends fix_duplex_1.FixDuplex {
35
35
  try {
36
36
  const adapter = this.adapter;
37
37
  const options = adapter.getOptions(data);
38
- rp(options).then((message) => {
39
- const body = adapter.endMessage(message);
40
- forward.push(body);
41
- done();
42
- }).catch((err) => {
43
- receiver.emit('error', err);
44
- });
38
+ if (options) {
39
+ (0, axios_1.default)(options).then((message) => {
40
+ const body = adapter.endMessage(message);
41
+ forward.push(body);
42
+ done();
43
+ }).catch((err) => {
44
+ receiver.emit('error', err);
45
+ });
46
+ }
45
47
  }
46
48
  catch (e) {
47
49
  done(e);
@@ -1 +1 @@
1
- {"version":3,"file":"http-duplex.js","sourceRoot":"","sources":["../../../src/transport/duplex/http-duplex.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,6CAAwC;AAExC,6CAA4C;AAG5C,MAAa,UAAW,SAAQ,sBAAS;IACvC,YAAoC,OAAqB;QACvD,KAAK,EAAE,CAAA;QAD2B,YAAO,GAAP,OAAO,CAAc;QAEvD,IAAI,CAAC,QAAQ,GAAG,UAAU,CAAC,YAAY,EAAE,CAAA;QACzC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,YAAY,EAAE,CAAA;IACrC,CAAC;IAEO,MAAM,CAAC,YAAY;QACzB,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAA;QAC3C,MAAM,MAAM,GAAG;YACb,IAAI,EAAG,GAAG,EAAE;YAEZ,CAAC;SACF,CAAA;QACD,OAAO,IAAI,QAAQ,CAAC,MAAM,CAAC,CAAA;IAC7B,CAAC;IAEO,YAAY;QAClB,MAAM,OAAO,GAAa,IAAI,CAAC,QAAQ,CAAA;QACvC,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAA;QAC3C,MAAM,MAAM,GAAG;YACb,KAAK,EAAE,CAAO,IAAY,EAAE,CAAM,EAAE,IAAc,EAAE,EAAE;gBACpD,IAAI;oBACF,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAA;oBAC5B,MAAM,OAAO,GAAG,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,CAAA;oBACxC,EAAE,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,OAAY,EAAE,EAAE;wBAChC,MAAM,IAAI,GAAG,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,CAAA;wBACxC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;wBAClB,IAAI,EAAE,CAAA;oBACR,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,GAAU,EAAE,EAAE;wBACtB,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,CAAA;oBAC7B,CAAC,CAAC,CAAA;iBACH;gBAAC,OAAO,CAAC,EAAE;oBACV,IAAI,CAAC,CAAC,CAAC,CAAA;iBACR;YACH,CAAC,CAAA;SACF,CAAA;QACD,MAAM,QAAQ,GAAG,IAAI,QAAQ,CAAC,MAAM,CAAC,CAAA;QACrC,OAAO,QAAQ,CAAA;IACjB,CAAC;IAEM,GAAG;QACR,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IAC1B,CAAC;CACF;AA5CD,gCA4CC","sourcesContent":["import { FixDuplex } from './fix-duplex'\r\nimport { Readable, Writable } from 'stream'\r\nimport * as rp from 'request-promise-native'\r\nimport { IHttpAdapter } from '../http/http-adapter'\r\n\r\nexport class HttpDuplex extends FixDuplex {\r\n public constructor (public readonly adapter: IHttpAdapter) {\r\n super()\r\n this.readable = HttpDuplex.makeReadable()\r\n this.writable = this.makeWritable()\r\n }\r\n\r\n private static makeReadable (): Readable {\r\n const Readable = require('stream').Readable\r\n const reader = {\r\n read: () => {\r\n // nothing\r\n }\r\n }\r\n return new Readable(reader)\r\n }\r\n\r\n private makeWritable (): Writable {\r\n const forward: Readable = this.readable\r\n const Writable = require('stream').Writable\r\n const writer = {\r\n write: async (data: Buffer, _: any, done: Function) => {\r\n try {\r\n const adapter = this.adapter\r\n const options = adapter.getOptions(data)\r\n rp(options).then((message: any) => {\r\n const body = adapter.endMessage(message)\r\n forward.push(body)\r\n done()\r\n }).catch((err: Error) => {\r\n receiver.emit('error', err)\r\n })\r\n } catch (e) {\r\n done(e)\r\n }\r\n }\r\n }\r\n const receiver = new Writable(writer)\r\n return receiver\r\n }\r\n\r\n public end (): void {\r\n this.readable.push(null)\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"http-duplex.js","sourceRoot":"","sources":["../../../src/transport/duplex/http-duplex.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,6CAAwC;AAExC,iCAAmD;AAGnD,MAAa,UAAW,SAAQ,sBAAS;IACvC,YAAoC,OAAqB;QACvD,KAAK,EAAE,CAAA;QAD2B,YAAO,GAAP,OAAO,CAAc;QAEvD,IAAI,CAAC,QAAQ,GAAG,UAAU,CAAC,YAAY,EAAE,CAAA;QACzC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,YAAY,EAAE,CAAA;IACrC,CAAC;IAEO,MAAM,CAAC,YAAY;QACzB,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAA;QAC3C,MAAM,MAAM,GAAG;YACb,IAAI,EAAE,GAAG,EAAE;YAEX,CAAC;SACF,CAAA;QACD,OAAO,IAAI,QAAQ,CAAC,MAAM,CAAC,CAAA;IAC7B,CAAC;IAEO,YAAY;QAClB,MAAM,OAAO,GAAa,IAAI,CAAC,QAAQ,CAAA;QACvC,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAA;QAC3C,MAAM,MAAM,GAAG;YACb,KAAK,EAAE,CAAO,IAAY,EAAE,CAAM,EAAE,IAAc,EAAE,EAAE;gBACpD,IAAI;oBACF,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAA;oBAC5B,MAAM,OAAO,GAAG,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,CAAA;oBACxC,IAAI,OAAO,EAAE;wBACX,IAAA,eAAK,EAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,OAAY,EAAE,EAAE;4BACnC,MAAM,IAAI,GAAG,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,CAAA;4BACxC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;4BAClB,IAAI,EAAE,CAAA;wBACR,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,GAAU,EAAE,EAAE;4BACtB,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,CAAA;wBAC7B,CAAC,CAAC,CAAA;qBACH;iBACF;gBAAC,OAAO,CAAC,EAAE;oBACV,IAAI,CAAC,CAAC,CAAC,CAAA;iBACR;YACH,CAAC,CAAA;SACF,CAAA;QACD,MAAM,QAAQ,GAAG,IAAI,QAAQ,CAAC,MAAM,CAAC,CAAA;QACrC,OAAO,QAAQ,CAAA;IACjB,CAAC;IAEM,GAAG;QACR,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IAC1B,CAAC;CACF;AA9CD,gCA8CC","sourcesContent":["import { FixDuplex } from './fix-duplex'\r\nimport { Readable, Writable } from 'stream'\r\nimport axios, { isCancel, AxiosError } from 'axios'\r\nimport { IHttpAdapter } from '../http/http-adapter'\r\n\r\nexport class HttpDuplex extends FixDuplex {\r\n public constructor (public readonly adapter: IHttpAdapter) {\r\n super()\r\n this.readable = HttpDuplex.makeReadable()\r\n this.writable = this.makeWritable()\r\n }\r\n\r\n private static makeReadable (): Readable {\r\n const Readable = require('stream').Readable\r\n const reader = {\r\n read: () => {\r\n // nothing\r\n }\r\n }\r\n return new Readable(reader)\r\n }\r\n\r\n private makeWritable (): Writable {\r\n const forward: Readable = this.readable\r\n const Writable = require('stream').Writable\r\n const writer = {\r\n write: async (data: Buffer, _: any, done: Function) => {\r\n try {\r\n const adapter = this.adapter\r\n const options = adapter.getOptions(data)\r\n if (options) {\r\n axios(options).then((message: any) => {\r\n const body = adapter.endMessage(message)\r\n forward.push(body)\r\n done()\r\n }).catch((err: Error) => {\r\n receiver.emit('error', err)\r\n })\r\n }\r\n } catch (e) {\r\n done(e)\r\n }\r\n }\r\n }\r\n const receiver = new Writable(writer)\r\n return receiver\r\n }\r\n\r\n public end (): void {\r\n this.readable.push(null)\r\n }\r\n}\r\n"]}
@@ -52,10 +52,10 @@ class StringDuplex extends fix_duplex_1.FixDuplex {
52
52
  let remaining = text.length;
53
53
  while (remaining > 0) {
54
54
  iteration++;
55
- let chunk = Math.min(remaining, iteration % 10);
55
+ const chunk = Math.min(remaining, iteration % 10);
56
56
  remaining -= chunk;
57
57
  const end = start + chunk;
58
- let snippet = text.slice(start, end);
58
+ const snippet = text.slice(start, end);
59
59
  readable.push(snippet);
60
60
  start = end;
61
61
  }
@@ -1 +1 @@
1
- {"version":3,"file":"string-duplex.js","sourceRoot":"","sources":["../../../src/transport/duplex/string-duplex.ts"],"names":[],"mappings":";;;AAAA,6CAAwC;AAGxC,MAAa,YAAa,SAAQ,sBAAS;IAEzC,YAA6B,OAAe,EAAE,EAAS,SAAkB,KAAK;QAC5E,KAAK,EAAE,CAAA;QADoB,SAAI,GAAJ,IAAI,CAAa;QAAS,WAAM,GAAN,MAAM,CAAiB;QAE5E,IAAI,CAAC,QAAQ,GAAG,YAAY,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAA;QACvD,IAAI,CAAC,QAAQ,GAAG,YAAY,CAAC,YAAY,EAAE,CAAA;IAC7C,CAAC;IAEO,MAAM,CAAC,YAAY,CAAE,IAAY,EAAE,MAAe;QACxD,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAA;QAC3C,IAAI,KAAK,GAAW,CAAC,CAAA;QACrB,MAAM,MAAM,GAAG;YACb,IAAI,EAAG,CAAC,IAAY,EAAE,EAAE;gBACtB,KAAK,IAAI,IAAI,CAAA;gBACb,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE;oBAC1C,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;iBACpB;YACH,CAAC;SACF,CAAA;QACD,MAAM,QAAQ,GAAG,IAAI,QAAQ,CAAC,MAAM,CAAC,CAAA;QACrC,IAAI,CAAC,MAAM,EAAE;YACX,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;SACpB;aAAM;YAEL,YAAY,CAAC,gBAAgB,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAA;SAC9C;QAED,OAAO,QAAQ,CAAA;IACjB,CAAC;IAEO,MAAM,CAAC,YAAY;QACzB,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAA;QAC3C,MAAM,MAAM,GAAG;YACb,KAAK,EAAE,CAAC,IAAY,EAAE,CAAM,EAAE,IAAc,EAAE,EAAE;gBAC9C,IAAI;oBACF,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,CAAA;oBAC3B,IAAI,EAAE,CAAA;iBACP;gBAAC,OAAO,CAAC,EAAE;oBACV,IAAI,CAAC,CAAC,CAAC,CAAA;iBACR;YACH,CAAC;SACF,CAAA;QACD,MAAM,QAAQ,GAAG,IAAI,QAAQ,CAAC,MAAM,CAAC,CAAA;QACrC,OAAO,QAAQ,CAAA;IACjB,CAAC;IAEO,MAAM,CAAC,gBAAgB,CAAE,IAAY,EAAE,QAAkB;QAE/D,IAAI,KAAK,GAAG,CAAC,CAAA;QACb,IAAI,SAAS,GAAG,CAAC,CAAA;QACjB,IAAI,SAAS,GAAG,IAAI,CAAC,MAAM,CAAA;QAC3B,OAAO,SAAS,GAAG,CAAC,EAAE;YACpB,SAAS,EAAE,CAAA;YACX,IAAI,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,SAAS,GAAG,EAAE,CAAC,CAAA;YAC/C,SAAS,IAAI,KAAK,CAAA;YAClB,MAAM,GAAG,GAAG,KAAK,GAAG,KAAK,CAAA;YACzB,IAAI,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC,CAAA;YACpC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;YACtB,KAAK,GAAG,GAAG,CAAA;SACZ;IACH,CAAC;IAEM,GAAG;QACR,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE;YAC1B,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;SACzB;IACH,CAAC;CACF;AAnED,oCAmEC","sourcesContent":["import { FixDuplex } from './fix-duplex'\r\nimport { Readable, Writable } from 'stream'\r\n\r\nexport class StringDuplex extends FixDuplex {\r\n\r\n constructor (public readonly text: string = '', public chunks: boolean = false) {\r\n super()\r\n this.readable = StringDuplex.makeReadable(text, chunks)\r\n this.writable = StringDuplex.makeWritable()\r\n }\r\n\r\n private static makeReadable (text: string, chunks: boolean): Readable {\r\n const Readable = require('stream').Readable\r\n let total: number = 0\r\n const reader = {\r\n read: (size: number) => {\r\n total += size\r\n if (text.length > 0 && total > text.length) {\r\n readable.push(null)\r\n }\r\n }\r\n }\r\n const readable = new Readable(reader)\r\n if (!chunks) {\r\n readable.push(text)\r\n } else {\r\n // simulate a set of chunks sent to parser\r\n StringDuplex.sendReaderChunks(text, readable)\r\n }\r\n\r\n return readable\r\n }\r\n\r\n private static makeWritable (): Writable {\r\n const Writable = require('stream').Writable\r\n const writer = {\r\n write: (data: Buffer, _: any, done: Function) => {\r\n try {\r\n receiver.emit('data', data)\r\n done()\r\n } catch (e) {\r\n done(e)\r\n }\r\n }\r\n }\r\n const receiver = new Writable(writer)\r\n return receiver\r\n }\r\n\r\n private static sendReaderChunks (text: string, readable: Readable) {\r\n // simulate a set of chunks sent to parser\r\n let start = 0\r\n let iteration = 0\r\n let remaining = text.length\r\n while (remaining > 0) {\r\n iteration++\r\n let chunk = Math.min(remaining, iteration % 10)\r\n remaining -= chunk\r\n const end = start + chunk\r\n let snippet = text.slice(start, end)\r\n readable.push(snippet)\r\n start = end\r\n }\r\n }\r\n\r\n public end (): void {\r\n if (this.text.length === 0) {\r\n this.readable.push(null)\r\n }\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"string-duplex.js","sourceRoot":"","sources":["../../../src/transport/duplex/string-duplex.ts"],"names":[],"mappings":";;;AAAA,6CAAwC;AAGxC,MAAa,YAAa,SAAQ,sBAAS;IACzC,YAA6B,OAAe,EAAE,EAAS,SAAkB,KAAK;QAC5E,KAAK,EAAE,CAAA;QADoB,SAAI,GAAJ,IAAI,CAAa;QAAS,WAAM,GAAN,MAAM,CAAiB;QAE5E,IAAI,CAAC,QAAQ,GAAG,YAAY,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAA;QACvD,IAAI,CAAC,QAAQ,GAAG,YAAY,CAAC,YAAY,EAAE,CAAA;IAC7C,CAAC;IAEO,MAAM,CAAC,YAAY,CAAE,IAAY,EAAE,MAAe;QACxD,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAA;QAC3C,IAAI,KAAK,GAAW,CAAC,CAAA;QACrB,MAAM,MAAM,GAAG;YACb,IAAI,EAAE,CAAC,IAAY,EAAE,EAAE;gBACrB,KAAK,IAAI,IAAI,CAAA;gBACb,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE;oBAC1C,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;iBACpB;YACH,CAAC;SACF,CAAA;QACD,MAAM,QAAQ,GAAG,IAAI,QAAQ,CAAC,MAAM,CAAC,CAAA;QACrC,IAAI,CAAC,MAAM,EAAE;YACX,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;SACpB;aAAM;YAEL,YAAY,CAAC,gBAAgB,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAA;SAC9C;QAED,OAAO,QAAQ,CAAA;IACjB,CAAC;IAEO,MAAM,CAAC,YAAY;QACzB,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAA;QAC3C,MAAM,MAAM,GAAG;YACb,KAAK,EAAE,CAAC,IAAY,EAAE,CAAM,EAAE,IAAc,EAAE,EAAE;gBAC9C,IAAI;oBACF,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,CAAA;oBAC3B,IAAI,EAAE,CAAA;iBACP;gBAAC,OAAO,CAAC,EAAE;oBACV,IAAI,CAAC,CAAC,CAAC,CAAA;iBACR;YACH,CAAC;SACF,CAAA;QACD,MAAM,QAAQ,GAAG,IAAI,QAAQ,CAAC,MAAM,CAAC,CAAA;QACrC,OAAO,QAAQ,CAAA;IACjB,CAAC;IAEO,MAAM,CAAC,gBAAgB,CAAE,IAAY,EAAE,QAAkB;QAE/D,IAAI,KAAK,GAAG,CAAC,CAAA;QACb,IAAI,SAAS,GAAG,CAAC,CAAA;QACjB,IAAI,SAAS,GAAG,IAAI,CAAC,MAAM,CAAA;QAC3B,OAAO,SAAS,GAAG,CAAC,EAAE;YACpB,SAAS,EAAE,CAAA;YACX,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,SAAS,GAAG,EAAE,CAAC,CAAA;YACjD,SAAS,IAAI,KAAK,CAAA;YAClB,MAAM,GAAG,GAAG,KAAK,GAAG,KAAK,CAAA;YACzB,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC,CAAA;YACtC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;YACtB,KAAK,GAAG,GAAG,CAAA;SACZ;IACH,CAAC;IAEM,GAAG;QACR,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE;YAC1B,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;SACzB;IACH,CAAC;CACF;AAlED,oCAkEC","sourcesContent":["import { FixDuplex } from './fix-duplex'\r\nimport { Readable, Writable } from 'stream'\r\n\r\nexport class StringDuplex extends FixDuplex {\r\n constructor (public readonly text: string = '', public chunks: boolean = false) {\r\n super()\r\n this.readable = StringDuplex.makeReadable(text, chunks)\r\n this.writable = StringDuplex.makeWritable()\r\n }\r\n\r\n private static makeReadable (text: string, chunks: boolean): Readable {\r\n const Readable = require('stream').Readable\r\n let total: number = 0\r\n const reader = {\r\n read: (size: number) => {\r\n total += size\r\n if (text.length > 0 && total > text.length) {\r\n readable.push(null)\r\n }\r\n }\r\n }\r\n const readable = new Readable(reader)\r\n if (!chunks) {\r\n readable.push(text)\r\n } else {\r\n // simulate a set of chunks sent to parser\r\n StringDuplex.sendReaderChunks(text, readable)\r\n }\r\n\r\n return readable\r\n }\r\n\r\n private static makeWritable (): Writable {\r\n const Writable = require('stream').Writable\r\n const writer = {\r\n write: (data: Buffer, _: any, done: Function) => {\r\n try {\r\n receiver.emit('data', data)\r\n done()\r\n } catch (e) {\r\n done(e)\r\n }\r\n }\r\n }\r\n const receiver = new Writable(writer)\r\n return receiver\r\n }\r\n\r\n private static sendReaderChunks (text: string, readable: Readable): void {\r\n // simulate a set of chunks sent to parser\r\n let start = 0\r\n let iteration = 0\r\n let remaining = text.length\r\n while (remaining > 0) {\r\n iteration++\r\n const chunk = Math.min(remaining, iteration % 10)\r\n remaining -= chunk\r\n const end = start + chunk\r\n const snippet = text.slice(start, end)\r\n readable.push(snippet)\r\n start = end\r\n }\r\n }\r\n\r\n public end (): void {\r\n if (this.text.length === 0) {\r\n this.readable.push(null)\r\n }\r\n }\r\n}\r\n"]}
@@ -11,6 +11,15 @@ var __metadata = (this && this.__metadata) || function (k, v) {
11
11
  var __param = (this && this.__param) || function (paramIndex, decorator) {
12
12
  return function (target, key) { decorator(target, key, paramIndex); }
13
13
  };
14
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
15
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
16
+ return new (P || (P = Promise))(function (resolve, reject) {
17
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
18
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
19
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
20
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
21
+ });
22
+ };
14
23
  Object.defineProperty(exports, "__esModule", { value: true });
15
24
  exports.MsgTransport = void 0;
16
25
  const duplex_1 = require("../duplex");
@@ -23,7 +32,7 @@ let MsgTransport = class MsgTransport {
23
32
  this.duplex = duplex;
24
33
  const delimiter = config.delimiter;
25
34
  if (!delimiter) {
26
- throw new Error(`no delimiter char given.`);
35
+ throw new Error('no delimiter char given.');
27
36
  }
28
37
  const sessionContainer = this.config.sessionContainer;
29
38
  sessionContainer.registerInstance(di_tokens_1.DITokens.readStream, this.duplex.readable);
@@ -37,15 +46,17 @@ let MsgTransport = class MsgTransport {
37
46
  this.duplex.end();
38
47
  }
39
48
  wait() {
40
- return new Promise((resolve, reject) => {
41
- this.receiver.on('end', () => {
42
- resolve(this.id);
43
- });
44
- this.receiver.on('error', (e) => {
45
- reject(e);
46
- });
47
- this.transmitter.on('error', (e) => {
48
- reject(e);
49
+ return __awaiter(this, void 0, void 0, function* () {
50
+ return yield new Promise((resolve, reject) => {
51
+ this.receiver.on('end', () => {
52
+ resolve(this.id);
53
+ });
54
+ this.receiver.on('error', (e) => {
55
+ reject(e);
56
+ });
57
+ this.transmitter.on('error', (e) => {
58
+ reject(e);
59
+ });
49
60
  });
50
61
  });
51
62
  }
@@ -1 +1 @@
1
- {"version":3,"file":"msg-transport.js","sourceRoot":"","sources":["../../../src/transport/factory/msg-transport.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAEA,sCAAqC;AAErC,uDAAkD;AAElD,uCAA6C;AAGtC,IAAM,YAAY,GAAlB,MAAM,YAAY;IAIvB,YAAyD,EAAU,EACP,MAAoB,EACvB,MAAiB;QAFjB,OAAE,GAAF,EAAE,CAAQ;QACP,WAAM,GAAN,MAAM,CAAc;QACvB,WAAM,GAAN,MAAM,CAAW;QAExE,MAAM,SAAS,GAAG,MAAM,CAAC,SAAS,CAAA;QAClC,IAAI,CAAC,SAAS,EAAE;YACd,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAA;SAC5C;QAED,MAAM,gBAAgB,GAAG,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAA;QACrD,gBAAgB,CAAC,gBAAgB,CAAW,oBAAQ,CAAC,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAA;QAKtF,IAAI,CAAC,WAAW,GAAG,gBAAgB,CAAC,OAAO,CAAiB,oBAAQ,CAAC,cAAc,CAAC,CAAA;QACpF,IAAI,CAAC,QAAQ,GAAG,gBAAgB,CAAC,OAAO,CAAY,oBAAQ,CAAC,SAAS,CAAC,CAAA;QAGvE,IAAI,MAAM,CAAC,QAAQ,EAAE;YACnB,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAA;SACpD;IACH,CAAC;IAEM,GAAG;QACR,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,CAAA;IACnB,CAAC;IAEM,IAAI;QACT,OAAO,IAAI,OAAO,CAAM,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YAC1C,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE;gBAC3B,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;YAClB,CAAC,CAAC,CAAA;YACF,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE;gBAC9B,MAAM,CAAC,CAAC,CAAC,CAAA;YACX,CAAC,CAAC,CAAA;YACF,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE;gBACjC,MAAM,CAAC,CAAC,CAAC,CAAA;YACX,CAAC,CAAC,CAAA;QACJ,CAAC,CAAC,CAAA;IACJ,CAAC;CACF,CAAA;AA7CY,YAAY;IADxB,IAAA,qBAAU,GAAE;IAKG,WAAA,IAAA,iBAAM,EAAC,oBAAQ,CAAC,SAAS,CAAC,CAAA;IAC1B,WAAA,IAAA,iBAAM,EAAC,oBAAQ,CAAC,YAAY,CAAC,CAAA;IAC7B,WAAA,IAAA,iBAAM,EAAC,oBAAQ,CAAC,SAAS,CAAC,CAAA;qDAAyB,kBAAS;GAN/D,YAAY,CA6CxB;AA7CY,oCAAY","sourcesContent":["import { MsgParser } from '../../buffer'\r\nimport { MsgTransmitter } from '../msg-transmitter'\r\nimport { FixDuplex } from '../duplex'\r\nimport { IJsFixConfig } from '../../config'\r\nimport { DITokens } from '../../runtime/di-tokens'\r\nimport { Readable } from 'stream'\r\nimport { inject, injectable } from 'tsyringe'\r\n\r\n@injectable()\r\nexport class MsgTransport {\r\n public readonly transmitter: MsgTransmitter\r\n public readonly receiver: MsgParser\r\n\r\n constructor (@inject(DITokens.sessionId) public readonly id: number,\r\n @inject(DITokens.IJsFixConfig) public readonly config: IJsFixConfig,\r\n @inject(DITokens.FixDuplex) public readonly duplex: FixDuplex) {\r\n\r\n const delimiter = config.delimiter\r\n if (!delimiter) {\r\n throw new Error(`no delimiter char given.`)\r\n }\r\n\r\n const sessionContainer = this.config.sessionContainer\r\n sessionContainer.registerInstance<Readable>(DITokens.readStream, this.duplex.readable)\r\n\r\n // let parser replace delimiter with Pipe so fix log does not require\r\n // expensive replace\r\n\r\n this.transmitter = sessionContainer.resolve<MsgTransmitter>(DITokens.MsgTransmitter)\r\n this.receiver = sessionContainer.resolve<MsgParser>(DITokens.MsgParser)\r\n\r\n // pipe the encoder to say a socket.\r\n if (duplex.writable) {\r\n this.transmitter.encodeStream.pipe(duplex.writable)\r\n }\r\n }\r\n\r\n public end (): void {\r\n this.duplex.end()\r\n }\r\n\r\n public wait (): Promise<any> {\r\n return new Promise<any>((resolve, reject) => {\r\n this.receiver.on('end', () => {\r\n resolve(this.id)\r\n })\r\n this.receiver.on('error', (e) => {\r\n reject(e)\r\n })\r\n this.transmitter.on('error', (e) => {\r\n reject(e)\r\n })\r\n })\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"msg-transport.js","sourceRoot":"","sources":["../../../src/transport/factory/msg-transport.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;AAEA,sCAAqC;AAErC,uDAAkD;AAElD,uCAA6C;AAGtC,IAAM,YAAY,GAAlB,MAAM,YAAY;IAIvB,YAAyD,EAAU,EAClB,MAAoB,EACvB,MAAiB;QAFN,OAAE,GAAF,EAAE,CAAQ;QAClB,WAAM,GAAN,MAAM,CAAc;QACvB,WAAM,GAAN,MAAM,CAAW;QAC7D,MAAM,SAAS,GAAG,MAAM,CAAC,SAAS,CAAA;QAClC,IAAI,CAAC,SAAS,EAAE;YACd,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAA;SAC5C;QAED,MAAM,gBAAgB,GAAG,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAA;QACrD,gBAAgB,CAAC,gBAAgB,CAAW,oBAAQ,CAAC,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAA;QAKtF,IAAI,CAAC,WAAW,GAAG,gBAAgB,CAAC,OAAO,CAAiB,oBAAQ,CAAC,cAAc,CAAC,CAAA;QACpF,IAAI,CAAC,QAAQ,GAAG,gBAAgB,CAAC,OAAO,CAAY,oBAAQ,CAAC,SAAS,CAAC,CAAA;QAGvE,IAAI,MAAM,CAAC,QAAQ,EAAE;YACnB,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAA;SACpD;IACH,CAAC;IAEM,GAAG;QACR,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,CAAA;IACnB,CAAC;IAEY,IAAI;;YACf,OAAO,MAAM,IAAI,OAAO,CAAM,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;gBAChD,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE;oBAC3B,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;gBAClB,CAAC,CAAC,CAAA;gBACF,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE;oBAC9B,MAAM,CAAC,CAAC,CAAC,CAAA;gBACX,CAAC,CAAC,CAAA;gBACF,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE;oBACjC,MAAM,CAAC,CAAC,CAAC,CAAA;gBACX,CAAC,CAAC,CAAA;YACJ,CAAC,CAAC,CAAA;QACJ,CAAC;KAAA;CACF,CAAA;AA5CY,YAAY;IADxB,IAAA,qBAAU,GAAE;IAKG,WAAA,IAAA,iBAAM,EAAC,oBAAQ,CAAC,SAAS,CAAC,CAAA;IACrC,WAAA,IAAA,iBAAM,EAAC,oBAAQ,CAAC,YAAY,CAAC,CAAA;IAC7B,WAAA,IAAA,iBAAM,EAAC,oBAAQ,CAAC,SAAS,CAAC,CAAA;qDAAyB,kBAAS;GANpD,YAAY,CA4CxB;AA5CY,oCAAY","sourcesContent":["import { MsgParser } from '../../buffer'\r\nimport { MsgTransmitter } from '../msg-transmitter'\r\nimport { FixDuplex } from '../duplex'\r\nimport { IJsFixConfig } from '../../config'\r\nimport { DITokens } from '../../runtime/di-tokens'\r\nimport { Readable } from 'stream'\r\nimport { inject, injectable } from 'tsyringe'\r\n\r\n@injectable()\r\nexport class MsgTransport {\r\n public readonly transmitter: MsgTransmitter\r\n public readonly receiver: MsgParser\r\n\r\n constructor (@inject(DITokens.sessionId) public readonly id: number,\r\n @inject(DITokens.IJsFixConfig) public readonly config: IJsFixConfig,\r\n @inject(DITokens.FixDuplex) public readonly duplex: FixDuplex) {\r\n const delimiter = config.delimiter\r\n if (!delimiter) {\r\n throw new Error('no delimiter char given.')\r\n }\r\n\r\n const sessionContainer = this.config.sessionContainer\r\n sessionContainer.registerInstance<Readable>(DITokens.readStream, this.duplex.readable)\r\n\r\n // let parser replace delimiter with Pipe so fix log does not require\r\n // expensive replace\r\n\r\n this.transmitter = sessionContainer.resolve<MsgTransmitter>(DITokens.MsgTransmitter)\r\n this.receiver = sessionContainer.resolve<MsgParser>(DITokens.MsgParser)\r\n\r\n // pipe the encoder to say a socket.\r\n if (duplex.writable) {\r\n this.transmitter.encodeStream.pipe(duplex.writable)\r\n }\r\n }\r\n\r\n public end (): void {\r\n this.duplex.end()\r\n }\r\n\r\n public async wait (): Promise<any> {\r\n return await new Promise<any>((resolve, reject) => {\r\n this.receiver.on('end', () => {\r\n resolve(this.id)\r\n })\r\n this.receiver.on('error', (e) => {\r\n reject(e)\r\n })\r\n this.transmitter.on('error', (e) => {\r\n reject(e)\r\n })\r\n })\r\n }\r\n}\r\n"]}
@@ -4,9 +4,9 @@ import { MsgTransport } from './factory';
4
4
  import { INumericKeyed } from '../collections/collection';
5
5
  import { IMsgApplication } from './msg-application';
6
6
  export declare abstract class FixAcceptor extends events.EventEmitter {
7
- readonly application: IMsgApplication;
7
+ readonly application: IMsgApplication | null;
8
8
  transports: INumericKeyed<MsgTransport>;
9
- protected constructor(application: IMsgApplication);
9
+ protected constructor(application: IMsgApplication | null);
10
10
  abstract listen(): void;
11
- abstract close(cb: Function): void;
11
+ abstract close(cb?: Function): void;
12
12
  }
@@ -1 +1 @@
1
- {"version":3,"file":"fix-acceptor.js","sourceRoot":"","sources":["../../src/transport/fix-acceptor.ts"],"names":[],"mappings":";;;AAAA,iCAAgC;AAKhC,MAAsB,WAAY,SAAQ,MAAM,CAAC,YAAY;IAE3D,YAAuC,WAA4B;QACjE,KAAK,EAAE,CAAA;QAD8B,gBAAW,GAAX,WAAW,CAAiB;QAD5D,eAAU,GAAgC,EAAE,CAAA;IAGnD,CAAC;CAGF;AAPD,kCAOC","sourcesContent":["import * as events from 'events'\r\nimport { MsgTransport } from './factory'\r\nimport { INumericKeyed } from '../collections/collection'\r\nimport { IMsgApplication } from './msg-application'\r\n\r\nexport abstract class FixAcceptor extends events.EventEmitter {\r\n public transports: INumericKeyed<MsgTransport> = {}\r\n protected constructor (public readonly application: IMsgApplication) {\r\n super()\r\n }\r\n abstract listen (): void\r\n abstract close (cb: Function): void\r\n}\r\n"]}
1
+ {"version":3,"file":"fix-acceptor.js","sourceRoot":"","sources":["../../src/transport/fix-acceptor.ts"],"names":[],"mappings":";;;AAAA,iCAAgC;AAKhC,MAAsB,WAAY,SAAQ,MAAM,CAAC,YAAY;IAE3D,YAAuC,WAAmC;QACxE,KAAK,EAAE,CAAA;QAD8B,gBAAW,GAAX,WAAW,CAAwB;QADnE,eAAU,GAAgC,EAAE,CAAA;IAGnD,CAAC;CAGF;AAPD,kCAOC","sourcesContent":["import * as events from 'events'\r\nimport { MsgTransport } from './factory'\r\nimport { INumericKeyed } from '../collections/collection'\r\nimport { IMsgApplication } from './msg-application'\r\n\r\nexport abstract class FixAcceptor extends events.EventEmitter {\r\n public transports: INumericKeyed<MsgTransport> = {}\r\n protected constructor (public readonly application: IMsgApplication | null) {\r\n super()\r\n }\r\n abstract listen (): void\r\n abstract close (cb?: Function): void\r\n}\r\n"]}
@@ -4,5 +4,5 @@ import * as events from 'events';
4
4
  export declare abstract class FixEntity extends events.EventEmitter {
5
5
  readonly config: IJsFixConfig;
6
6
  abstract start(): Promise<any>;
7
- constructor(config: IJsFixConfig);
7
+ protected constructor(config: IJsFixConfig);
8
8
  }
@@ -1 +1 @@
1
- {"version":3,"file":"fix-entity.js","sourceRoot":"","sources":["../../src/transport/fix-entity.ts"],"names":[],"mappings":";;;AACA,iCAAgC;AAEhC,MAAsB,SAAU,SAAQ,MAAM,CAAC,YAAY;IAEzD,YAA6B,MAAoB;QAC/C,KAAK,EAAE,CAAA;QADoB,WAAM,GAAN,MAAM,CAAc;IAEjD,CAAC;CACF;AALD,8BAKC","sourcesContent":["import { IJsFixConfig } from '../config'\r\nimport * as events from 'events'\r\n\r\nexport abstract class FixEntity extends events.EventEmitter {\r\n abstract start (): Promise<any>\r\n constructor (public readonly config: IJsFixConfig) {\r\n super()\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"fix-entity.js","sourceRoot":"","sources":["../../src/transport/fix-entity.ts"],"names":[],"mappings":";;;AACA,iCAAgC;AAEhC,MAAsB,SAAU,SAAQ,MAAM,CAAC,YAAY;IAEzD,YAAuC,MAAoB;QACzD,KAAK,EAAE,CAAA;QAD8B,WAAM,GAAN,MAAM,CAAc;IAE3D,CAAC;CACF;AALD,8BAKC","sourcesContent":["import { IJsFixConfig } from '../config'\r\nimport * as events from 'events'\r\n\r\nexport abstract class FixEntity extends events.EventEmitter {\r\n abstract start (): Promise<any>\r\n protected constructor (public readonly config: IJsFixConfig) {\r\n super()\r\n }\r\n}\r\n"]}
@@ -1,8 +1,8 @@
1
1
  import { MsgTransport } from './factory';
2
2
  import { IMsgApplication } from './msg-application';
3
3
  export declare abstract class FixInitiator {
4
- readonly application: IMsgApplication;
5
- protected constructor(application: IMsgApplication);
4
+ readonly application: IMsgApplication | null;
5
+ protected constructor(application: IMsgApplication | null);
6
6
  abstract connect(timeout: number): Promise<MsgTransport>;
7
7
  abstract end(): void;
8
8
  }
@@ -1 +1 @@
1
- {"version":3,"file":"fix-initiator.js","sourceRoot":"","sources":["../../src/transport/fix-initiator.ts"],"names":[],"mappings":";;;AAGA,MAAsB,YAAY;IAChC,YAAuC,WAA4B;QAA5B,gBAAW,GAAX,WAAW,CAAiB;IACnE,CAAC;CAIF;AAND,oCAMC","sourcesContent":["import { MsgTransport } from './factory'\r\nimport { IMsgApplication } from './msg-application'\r\n\r\nexport abstract class FixInitiator {\r\n protected constructor (public readonly application: IMsgApplication) {\r\n }\r\n\r\n public abstract connect (timeout: number): Promise<MsgTransport>\r\n public abstract end (): void\r\n}\r\n"]}
1
+ {"version":3,"file":"fix-initiator.js","sourceRoot":"","sources":["../../src/transport/fix-initiator.ts"],"names":[],"mappings":";;;AAGA,MAAsB,YAAY;IAChC,YAAuC,WAAmC;QAAnC,gBAAW,GAAX,WAAW,CAAwB;IAC1E,CAAC;CAIF;AAND,oCAMC","sourcesContent":["import { MsgTransport } from './factory'\r\nimport { IMsgApplication } from './msg-application'\r\n\r\nexport abstract class FixInitiator {\r\n protected constructor (public readonly application: IMsgApplication | null) {\r\n }\r\n\r\n public abstract connect (timeout: number): Promise<MsgTransport>\r\n public abstract end (): void\r\n}\r\n"]}
@@ -5,5 +5,5 @@ export declare class FixmlMsgTransmitter extends MsgTransmitter {
5
5
  readonly config: IJsFixConfig;
6
6
  time: Date;
7
7
  constructor(config: IJsFixConfig);
8
- encodeMessage(msgType: string, obj: ILooseObject): void;
8
+ encodeMessage(msgType: string, obj: ILooseObject): any;
9
9
  }
@@ -23,14 +23,16 @@ let FixmlMsgTransmitter = class FixmlMsgTransmitter extends msg_transmitter_1.Ms
23
23
  this.encoder = config.sessionContainer.resolve(di_tokens_1.DITokens.MsgEncoder);
24
24
  }
25
25
  encodeMessage(msgType, obj) {
26
- const adapter = this.config.description.application.http.adapter;
26
+ var _a, _b, _c, _d;
27
+ const adapter = (_d = (_c = (_b = (_a = this === null || this === void 0 ? void 0 : this.config) === null || _a === void 0 ? void 0 : _a.description) === null || _b === void 0 ? void 0 : _b.application) === null || _c === void 0 ? void 0 : _c.http) === null || _d === void 0 ? void 0 : _d.adapter;
27
28
  if (adapter) {
28
29
  adapter.beginMessage(msgType);
29
30
  }
30
31
  const fe = this.encoder;
31
32
  const factory = this.config.factory;
32
- obj.StandardHeader = factory.header();
33
+ obj.StandardHeader = factory === null || factory === void 0 ? void 0 : factory.header();
33
34
  fe.encode(obj, msgType);
35
+ return obj.StandardHeader;
34
36
  }
35
37
  };
36
38
  FixmlMsgTransmitter = __decorate([
@@ -1 +1 @@
1
- {"version":3,"file":"fixml-msg-transmitter.js","sourceRoot":"","sources":["../../../src/transport/fixml/fixml-msg-transmitter.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAEA,wDAAmD;AAEnD,uCAA6C;AAC7C,uDAAkD;AAI3C,IAAM,mBAAmB,GAAzB,MAAM,mBAAoB,SAAQ,gCAAc;IAGrD,YAA4D,MAAoB;QAC9E,KAAK,CAAC,MAAM,CAAC,gBAAgB,CAAC,OAAO,CAAgB,oBAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC,WAAW,CAAC,CAAA;QAD5D,WAAM,GAAN,MAAM,CAAc;QAE9E,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,gBAAgB,CAAC,OAAO,CAAe,oBAAQ,CAAC,UAAU,CAAC,CAAA;IACnF,CAAC;IAEM,aAAa,CAAE,OAAe,EAAE,GAAiB;QACtD,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAA;QAChE,IAAI,OAAO,EAAE;YACX,OAAO,CAAC,YAAY,CAAC,OAAO,CAAC,CAAA;SAC9B;QACD,MAAM,EAAE,GAAG,IAAI,CAAC,OAAuB,CAAA;QACvC,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,CAAA;QACnC,GAAG,CAAC,cAAc,GAAG,OAAO,CAAC,MAAM,EAAE,CAAA;QACrC,EAAE,CAAC,MAAM,CAAC,GAAG,EAAE,OAAO,CAAC,CAAA;IACzB,CAAC;CACF,CAAA;AAlBY,mBAAmB;IAD/B,IAAA,qBAAU,GAAE;IAIG,WAAA,IAAA,iBAAM,EAAC,oBAAQ,CAAC,YAAY,CAAC,CAAA;;GAHhC,mBAAmB,CAkB/B;AAlBY,kDAAmB","sourcesContent":["import { FixmlEncoder } from '../../buffer/fixml'\r\nimport { IJsFixConfig } from '../../config'\r\nimport { MsgTransmitter } from '../msg-transmitter'\r\nimport { ILooseObject } from '../../collections/collection'\r\nimport { inject, injectable } from 'tsyringe'\r\nimport { DITokens } from '../../runtime/di-tokens'\r\nimport { ElasticBuffer } from '../../buffer'\r\n\r\n@injectable()\r\nexport class FixmlMsgTransmitter extends MsgTransmitter {\r\n public time: Date\r\n\r\n constructor (@inject(DITokens.IJsFixConfig) public readonly config: IJsFixConfig) {\r\n super(config.sessionContainer.resolve<ElasticBuffer>(DITokens.TransmitBuffer), config.definitions, config.description)\r\n this.encoder = config.sessionContainer.resolve<FixmlEncoder>(DITokens.MsgEncoder)\r\n }\r\n\r\n public encodeMessage (msgType: string, obj: ILooseObject): void {\r\n const adapter = this.config.description.application.http.adapter\r\n if (adapter) {\r\n adapter.beginMessage(msgType)\r\n }\r\n const fe = this.encoder as FixmlEncoder\r\n const factory = this.config.factory\r\n obj.StandardHeader = factory.header()\r\n fe.encode(obj, msgType)\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"fixml-msg-transmitter.js","sourceRoot":"","sources":["../../../src/transport/fixml/fixml-msg-transmitter.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAEA,wDAAmD;AAEnD,uCAA6C;AAC7C,uDAAkD;AAI3C,IAAM,mBAAmB,GAAzB,MAAM,mBAAoB,SAAQ,gCAAc;IAGrD,YAA4D,MAAoB;QAC9E,KAAK,CAAC,MAAM,CAAC,gBAAgB,CAAC,OAAO,CAAgB,oBAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC,WAAW,CAAC,CAAA;QAD5D,WAAM,GAAN,MAAM,CAAc;QAE9E,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,gBAAgB,CAAC,OAAO,CAAe,oBAAQ,CAAC,UAAU,CAAC,CAAA;IACnF,CAAC;IAEM,aAAa,CAAE,OAAe,EAAE,GAAiB;;QACtD,MAAM,OAAO,GAAG,MAAA,MAAA,MAAA,MAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,MAAM,0CAAE,WAAW,0CAAE,WAAW,0CAAE,IAAI,0CAAE,OAAO,CAAA;QACrE,IAAI,OAAO,EAAE;YACX,OAAO,CAAC,YAAY,CAAC,OAAO,CAAC,CAAA;SAC9B;QACD,MAAM,EAAE,GAAG,IAAI,CAAC,OAAuB,CAAA;QACvC,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,CAAA;QACnC,GAAG,CAAC,cAAc,GAAG,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,MAAM,EAAE,CAAA;QACtC,EAAE,CAAC,MAAM,CAAC,GAAG,EAAE,OAAO,CAAC,CAAA;QACvB,OAAO,GAAG,CAAC,cAAc,CAAA;IAC3B,CAAC;CACF,CAAA;AAnBY,mBAAmB;IAD/B,IAAA,qBAAU,GAAE;IAIG,WAAA,IAAA,iBAAM,EAAC,oBAAQ,CAAC,YAAY,CAAC,CAAA;;GAHhC,mBAAmB,CAmB/B;AAnBY,kDAAmB","sourcesContent":["import { FixmlEncoder } from '../../buffer/fixml'\r\nimport { IJsFixConfig } from '../../config'\r\nimport { MsgTransmitter } from '../msg-transmitter'\r\nimport { ILooseObject } from '../../collections/collection'\r\nimport { inject, injectable } from 'tsyringe'\r\nimport { DITokens } from '../../runtime/di-tokens'\r\nimport { ElasticBuffer } from '../../buffer'\r\n\r\n@injectable()\r\nexport class FixmlMsgTransmitter extends MsgTransmitter {\r\n public time: Date\r\n\r\n constructor (@inject(DITokens.IJsFixConfig) public readonly config: IJsFixConfig) {\r\n super(config.sessionContainer.resolve<ElasticBuffer>(DITokens.TransmitBuffer), config.definitions, config.description)\r\n this.encoder = config.sessionContainer.resolve<FixmlEncoder>(DITokens.MsgEncoder)\r\n }\r\n\r\n public encodeMessage (msgType: string, obj: ILooseObject): any {\r\n const adapter = this?.config?.description?.application?.http?.adapter\r\n if (adapter) {\r\n adapter.beginMessage(msgType)\r\n }\r\n const fe = this.encoder as FixmlEncoder\r\n const factory = this.config.factory\r\n obj.StandardHeader = factory?.header()\r\n fe.encode(obj, msgType)\r\n return obj.StandardHeader\r\n }\r\n}\r\n"]}
@@ -4,7 +4,7 @@ import { ASessionMsgFactory, ObjectMutator } from '../session/a-session-msg-fact
4
4
  import { IStandardHeader } from '../../types/FIXML50SP2';
5
5
  export declare class FixmlSessionMsgFactory extends ASessionMsgFactory {
6
6
  readonly description: ISessionDescription;
7
- constructor(description: ISessionDescription, mutator?: ObjectMutator);
7
+ constructor(description: ISessionDescription, mutator?: ObjectMutator | null);
8
8
  logon(userRequestId?: string, isResponse?: boolean): ILooseObject;
9
9
  logout(msgType: string, text: string): ILooseObject;
10
10
  header(msgType: string, seqNum?: number, time?: Date, overrideData?: Partial<IStandardHeader>): ILooseObject;
@@ -1 +1 @@
1
- {"version":3,"file":"fixml-session-msg-factory.js","sourceRoot":"","sources":["../../../src/transport/fixml/fixml-session-msg-factory.ts"],"names":[],"mappings":";;;AAEA,uCAAqC;AACrC,4EAAoF;AAEpF,uDAM+B;AAE/B,MAAa,sBAAuB,SAAQ,0CAAkB;IAE5D,YAAsB,WAAgC,EAAE,UAAyB,IAAI;QACnF,KAAK,CAAC,WAAW,EAAE,OAAO,CAAC,CAAA;QADP,gBAAW,GAAX,WAAW,CAAqB;IAEtD,CAAC;IAEM,KAAK,CAAE,gBAAwB,EAAE,EAAE,aAAsB,KAAK;QACnE,OAAO,IAAI,CAAC,UAAU,CAAC,aAAa,EAAE,UAAU,CAAC,CAAA;IACnD,CAAC;IAEM,MAAM,CAAE,OAAe,EAAE,IAAY;QAC1C,OAAO,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,OAAO,KAAK,SAAS,CAAC,CAAA;IACzD,CAAC;IAEM,MAAM,CAAE,OAAe,EAAE,SAAiB,CAAC,EAAE,OAAa,IAAI,IAAI,EAAE,EAAE,YAAuC;QAClH,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,CAAA;QACpC,MAAM,CAAC,GAAoB;YACzB,YAAY,EAAE,WAAW,CAAC,YAAY;YACtC,YAAY,EAAE,WAAW,CAAC,YAAY;YACtC,WAAW,EAAE,WAAW,CAAC,WAAW;YACpC,WAAW,EAAE,WAAW,CAAC,WAAW;SAClB,CAAA;QACpB,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,gBAAgB,CAAC,CAAA;IACzC,CAAC;IAEO,UAAU,CAAE,aAAqB,EAAE,UAAmB;QAC5D,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,CAAA;QACpC,IAAI,CAAC,UAAU,EAAE;YACf,MAAM,CAAC,GAAiB;gBACtB,QAAQ,EAAE,WAAW,CAAC,QAAQ;gBAC9B,QAAQ,EAAE,WAAW,CAAC,QAAQ;gBAC9B,aAAa,EAAE,aAAa;gBAC5B,eAAe,EAAE,4BAAe,CAAC,SAAS;aAC3B,CAAA;YACjB,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,eAAO,CAAC,KAAK,CAAC,CAAA;SACrC;aAAM;YACL,MAAM,CAAC,GAAkB;gBACvB,QAAQ,EAAE,WAAW,CAAC,QAAQ;gBAC9B,aAAa,EAAE,aAAa;gBAC5B,UAAU,EAAE,uBAAU,CAAC,QAAQ;aACf,CAAA;YAClB,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,eAAO,CAAC,KAAK,CAAC,CAAA;SACrC;IACH,CAAC;IAEO,WAAW,CAAE,aAAqB,EAAE,UAAmB;QAC7D,IAAI,CAAC,UAAU,EAAE;YACf,MAAM,CAAC,GAAiB;gBACtB,QAAQ,EAAE,IAAI,CAAC,WAAW,CAAC,QAAQ;gBACnC,aAAa,EAAE,aAAa;gBAC5B,eAAe,EAAE,4BAAe,CAAC,UAAU;aAC5B,CAAA;YACjB,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,eAAO,CAAC,MAAM,CAAC,CAAA;SACtC;aAAM;YACL,MAAM,CAAC,GAAkB;gBACvB,QAAQ,EAAE,IAAI,CAAC,WAAW,CAAC,QAAQ;gBACnC,aAAa,EAAE,aAAa;gBAC5B,UAAU,EAAE,uBAAU,CAAC,WAAW;aAClB,CAAA;YAClB,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,eAAO,CAAC,MAAM,CAAC,CAAA;SACtC;IACH,CAAC;CACF;AA9DD,wDA8DC","sourcesContent":["import { ISessionDescription } from '../session/session-description'\r\nimport { ILooseObject } from '../../collections/collection'\r\nimport { MsgType } from '../../types'\r\nimport { ASessionMsgFactory, ObjectMutator } from '../session/a-session-msg-factory'\r\n\r\nimport {\r\n IStandardHeader,\r\n IUserRequest,\r\n IUserResponse,\r\n UserRequestType,\r\n UserStatus\r\n} from '../../types/FIXML50SP2'\r\n\r\nexport class FixmlSessionMsgFactory extends ASessionMsgFactory {\r\n\r\n constructor (readonly description: ISessionDescription, mutator: ObjectMutator = null) {\r\n super(description, mutator)\r\n }\r\n\r\n public logon (userRequestId: string = '', isResponse: boolean = false): ILooseObject {\r\n return this.fixmlLogon(userRequestId, isResponse)\r\n }\r\n\r\n public logout (msgType: string, text: string): ILooseObject {\r\n return this.fixmlLogout(msgType, msgType !== 'UserReq')\r\n }\r\n\r\n public header (msgType: string, seqNum: number = 0, time: Date = new Date(), overrideData?: Partial<IStandardHeader>): ILooseObject {\r\n const description = this.description\r\n const o: IStandardHeader = {\r\n SenderCompID: description.SenderCompId,\r\n TargetCompID: description.TargetCompID,\r\n SenderSubID: description.SenderSubID,\r\n TargetSubID: description.TargetSubID\r\n } as IStandardHeader\r\n return this.mutate(o, 'StandardHeader')\r\n }\r\n\r\n private fixmlLogon (userRequestId: string, isResponse: boolean): ILooseObject {\r\n const description = this.description\r\n if (!isResponse) {\r\n const o: IUserRequest = {\r\n Username: description.Username,\r\n Password: description.Password,\r\n UserRequestID: userRequestId,\r\n UserRequestType: UserRequestType.LogOnUser\r\n } as IUserRequest\r\n return this.mutate(o, MsgType.Logon)\r\n } else {\r\n const o: IUserResponse = {\r\n Username: description.Username,\r\n UserRequestID: userRequestId,\r\n UserStatus: UserStatus.LoggedIn\r\n } as IUserResponse\r\n return this.mutate(o, MsgType.Logon)\r\n }\r\n }\r\n\r\n private fixmlLogout (userRequestId: string, isResponse: boolean): ILooseObject {\r\n if (!isResponse) {\r\n const o: IUserRequest = {\r\n Username: this.description.Username,\r\n UserRequestID: userRequestId,\r\n UserRequestType: UserRequestType.LogOffUser\r\n } as IUserRequest\r\n return this.mutate(o, MsgType.Logout)\r\n } else {\r\n const o: IUserResponse = {\r\n Username: this.description.Username,\r\n UserRequestID: userRequestId,\r\n UserStatus: UserStatus.NotLoggedIn\r\n } as IUserResponse\r\n return this.mutate(o, MsgType.Logout)\r\n }\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"fixml-session-msg-factory.js","sourceRoot":"","sources":["../../../src/transport/fixml/fixml-session-msg-factory.ts"],"names":[],"mappings":";;;AAEA,uCAAqC;AACrC,4EAAoF;AAEpF,uDAM+B;AAE/B,MAAa,sBAAuB,SAAQ,0CAAkB;IAC5D,YAAsB,WAAgC,EAAE,UAAgC,IAAI;QAC1F,KAAK,CAAC,WAAW,EAAE,OAAO,CAAC,CAAA;QADP,gBAAW,GAAX,WAAW,CAAqB;IAEtD,CAAC;IAEM,KAAK,CAAE,gBAAwB,EAAE,EAAE,aAAsB,KAAK;QACnE,OAAO,IAAI,CAAC,UAAU,CAAC,aAAa,EAAE,UAAU,CAAC,CAAA;IACnD,CAAC;IAEM,MAAM,CAAE,OAAe,EAAE,IAAY;QAC1C,OAAO,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,OAAO,KAAK,SAAS,CAAC,CAAA;IACzD,CAAC;IAEM,MAAM,CAAE,OAAe,EAAE,SAAiB,CAAC,EAAE,OAAa,IAAI,IAAI,EAAE,EAAE,YAAuC;QAClH,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,CAAA;QACpC,MAAM,CAAC,GAAoB;YACzB,YAAY,EAAE,WAAW,CAAC,YAAY;YACtC,YAAY,EAAE,WAAW,CAAC,YAAY;YACtC,WAAW,EAAE,WAAW,CAAC,WAAW;YACpC,WAAW,EAAE,WAAW,CAAC,WAAW;SAClB,CAAA;QACpB,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,gBAAgB,CAAC,CAAA;IACzC,CAAC;IAEO,UAAU,CAAE,aAAqB,EAAE,UAAmB;QAC5D,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,CAAA;QACpC,IAAI,CAAC,UAAU,EAAE;YACf,MAAM,CAAC,GAAiB;gBACtB,QAAQ,EAAE,WAAW,CAAC,QAAQ;gBAC9B,QAAQ,EAAE,WAAW,CAAC,QAAQ;gBAC9B,aAAa,EAAE,aAAa;gBAC5B,eAAe,EAAE,4BAAe,CAAC,SAAS;aAC3B,CAAA;YACjB,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,eAAO,CAAC,KAAK,CAAC,CAAA;SACrC;aAAM;YACL,MAAM,CAAC,GAAkB;gBACvB,QAAQ,EAAE,WAAW,CAAC,QAAQ;gBAC9B,aAAa,EAAE,aAAa;gBAC5B,UAAU,EAAE,uBAAU,CAAC,QAAQ;aACf,CAAA;YAClB,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,eAAO,CAAC,KAAK,CAAC,CAAA;SACrC;IACH,CAAC;IAEO,WAAW,CAAE,aAAqB,EAAE,UAAmB;QAC7D,IAAI,CAAC,UAAU,EAAE;YACf,MAAM,CAAC,GAAiB;gBACtB,QAAQ,EAAE,IAAI,CAAC,WAAW,CAAC,QAAQ;gBACnC,aAAa,EAAE,aAAa;gBAC5B,eAAe,EAAE,4BAAe,CAAC,UAAU;aAC5B,CAAA;YACjB,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,eAAO,CAAC,MAAM,CAAC,CAAA;SACtC;aAAM;YACL,MAAM,CAAC,GAAkB;gBACvB,QAAQ,EAAE,IAAI,CAAC,WAAW,CAAC,QAAQ;gBACnC,aAAa,EAAE,aAAa;gBAC5B,UAAU,EAAE,uBAAU,CAAC,WAAW;aAClB,CAAA;YAClB,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,eAAO,CAAC,MAAM,CAAC,CAAA;SACtC;IACH,CAAC;CACF;AA7DD,wDA6DC","sourcesContent":["import { ISessionDescription } from '../session/session-description'\r\nimport { ILooseObject } from '../../collections/collection'\r\nimport { MsgType } from '../../types'\r\nimport { ASessionMsgFactory, ObjectMutator } from '../session/a-session-msg-factory'\r\n\r\nimport {\r\n IStandardHeader,\r\n IUserRequest,\r\n IUserResponse,\r\n UserRequestType,\r\n UserStatus\r\n} from '../../types/FIXML50SP2'\r\n\r\nexport class FixmlSessionMsgFactory extends ASessionMsgFactory {\r\n constructor (readonly description: ISessionDescription, mutator: ObjectMutator | null = null) {\r\n super(description, mutator)\r\n }\r\n\r\n public logon (userRequestId: string = '', isResponse: boolean = false): ILooseObject {\r\n return this.fixmlLogon(userRequestId, isResponse)\r\n }\r\n\r\n public logout (msgType: string, text: string): ILooseObject {\r\n return this.fixmlLogout(msgType, msgType !== 'UserReq')\r\n }\r\n\r\n public header (msgType: string, seqNum: number = 0, time: Date = new Date(), overrideData?: Partial<IStandardHeader>): ILooseObject {\r\n const description = this.description\r\n const o: IStandardHeader = {\r\n SenderCompID: description.SenderCompId,\r\n TargetCompID: description.TargetCompID,\r\n SenderSubID: description.SenderSubID,\r\n TargetSubID: description.TargetSubID\r\n } as IStandardHeader\r\n return this.mutate(o, 'StandardHeader')\r\n }\r\n\r\n private fixmlLogon (userRequestId: string, isResponse: boolean): ILooseObject {\r\n const description = this.description\r\n if (!isResponse) {\r\n const o: IUserRequest = {\r\n Username: description.Username,\r\n Password: description.Password,\r\n UserRequestID: userRequestId,\r\n UserRequestType: UserRequestType.LogOnUser\r\n } as IUserRequest\r\n return this.mutate(o, MsgType.Logon)\r\n } else {\r\n const o: IUserResponse = {\r\n Username: description.Username,\r\n UserRequestID: userRequestId,\r\n UserStatus: UserStatus.LoggedIn\r\n } as IUserResponse\r\n return this.mutate(o, MsgType.Logon)\r\n }\r\n }\r\n\r\n private fixmlLogout (userRequestId: string, isResponse: boolean): ILooseObject {\r\n if (!isResponse) {\r\n const o: IUserRequest = {\r\n Username: this.description.Username,\r\n UserRequestID: userRequestId,\r\n UserRequestType: UserRequestType.LogOffUser\r\n } as IUserRequest\r\n return this.mutate(o, MsgType.Logout)\r\n } else {\r\n const o: IUserResponse = {\r\n Username: this.description.Username,\r\n UserRequestID: userRequestId,\r\n UserStatus: UserStatus.NotLoggedIn\r\n } as IUserResponse\r\n return this.mutate(o, MsgType.Logout)\r\n }\r\n }\r\n}\r\n"]}