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.
- package/.eslintrc +30 -0
- package/README.md +297 -249
- package/data/session/test-http-initiator.json +2 -2
- package/dist/buffer/ascii/ascii-chars.js.map +1 -1
- package/dist/buffer/ascii/ascii-encoder.js +9 -5
- package/dist/buffer/ascii/ascii-encoder.js.map +1 -1
- package/dist/buffer/ascii/ascii-parser-state.d.ts +2 -2
- package/dist/buffer/ascii/ascii-parser-state.js +1 -1
- package/dist/buffer/ascii/ascii-parser-state.js.map +1 -1
- package/dist/buffer/ascii/ascii-parser.d.ts +2 -2
- package/dist/buffer/ascii/ascii-parser.js +17 -11
- package/dist/buffer/ascii/ascii-parser.js.map +1 -1
- package/dist/buffer/ascii/ascii-segment-parser.d.ts +1 -1
- package/dist/buffer/ascii/ascii-segment-parser.js +11 -3
- package/dist/buffer/ascii/ascii-segment-parser.js.map +1 -1
- package/dist/buffer/ascii/ascii-view.d.ts +3 -3
- package/dist/buffer/ascii/ascii-view.js +18 -0
- package/dist/buffer/ascii/ascii-view.js.map +1 -1
- package/dist/buffer/ascii/itime-formatter.d.ts +12 -12
- package/dist/buffer/ascii/itime-formatter.js.map +1 -1
- package/dist/buffer/ascii/time-formatter.d.ts +6 -6
- package/dist/buffer/ascii/time-formatter.js.map +1 -1
- package/dist/buffer/elastic-buffer.d.ts +1 -1
- package/dist/buffer/elastic-buffer.js +2 -2
- package/dist/buffer/elastic-buffer.js.map +1 -1
- package/dist/buffer/encode-proxy.js +1 -1
- package/dist/buffer/encode-proxy.js.map +1 -1
- package/dist/buffer/encoder-state.d.ts +2 -2
- package/dist/buffer/encoder-state.js +4 -1
- package/dist/buffer/encoder-state.js.map +1 -1
- package/dist/buffer/fixml/fixml-encoder.js +4 -2
- package/dist/buffer/fixml/fixml-encoder.js.map +1 -1
- package/dist/buffer/fixml/fixml-parser.js +61 -39
- package/dist/buffer/fixml/fixml-parser.js.map +1 -1
- package/dist/buffer/fixml/fixml-view.js +3 -3
- package/dist/buffer/fixml/fixml-view.js.map +1 -1
- package/dist/buffer/fixml/populated-attributes.js.map +1 -1
- package/dist/buffer/msg-encoder.js +2 -1
- package/dist/buffer/msg-encoder.js.map +1 -1
- package/dist/buffer/msg-view.d.ts +9 -9
- package/dist/buffer/msg-view.js +58 -25
- package/dist/buffer/msg-view.js.map +1 -1
- package/dist/buffer/segment/segment-description.d.ts +4 -4
- package/dist/buffer/segment/segment-description.js +7 -5
- package/dist/buffer/segment/segment-description.js.map +1 -1
- package/dist/buffer/segment/segment-summary.js +2 -1
- package/dist/buffer/segment/segment-summary.js.map +1 -1
- package/dist/buffer/structure.d.ts +1 -1
- package/dist/buffer/structure.js +1 -2
- package/dist/buffer/structure.js.map +1 -1
- package/dist/buffer/time-format-template.js.map +1 -1
- package/dist/collections/collection.d.ts +3 -7
- package/dist/collections/collection.js.map +1 -1
- package/dist/collections/dictionary.d.ts +1 -1
- package/dist/collections/dictionary.js +2 -1
- package/dist/collections/dictionary.js.map +1 -1
- package/dist/config/empty-log-factory.js.map +1 -1
- package/dist/config/get-js-fx-logger.d.ts +1 -3
- package/dist/config/get-js-fx-logger.js.map +1 -1
- package/dist/config/js-fix-config.d.ts +3 -3
- package/dist/config/js-fix-config.js.map +1 -1
- package/dist/config/js-fix-logger.d.ts +5 -5
- package/dist/config/js-fix-logger.js.map +1 -1
- package/dist/config/js-fix-winston-log-factory.d.ts +1 -1
- package/dist/config/js-fix-winston-log-factory.js.map +1 -1
- package/dist/config/winston-logger.js +7 -7
- package/dist/config/winston-logger.js.map +1 -1
- package/dist/dict-parser.js +27 -21
- package/dist/dict-parser.js.map +1 -1
- package/dist/dictionary/compiler/compiler-settings.js.map +1 -1
- package/dist/dictionary/compiler/compiler-type.js.map +1 -1
- package/dist/dictionary/compiler/enum-compiler.d.ts +2 -2
- package/dist/dictionary/compiler/enum-compiler.js +7 -10
- package/dist/dictionary/compiler/enum-compiler.js.map +1 -1
- package/dist/dictionary/compiler/msg-compiler.js +9 -10
- package/dist/dictionary/compiler/msg-compiler.js.map +1 -1
- package/dist/dictionary/compiler/standard-snippet.d.ts +1 -1
- package/dist/dictionary/compiler/standard-snippet.js +11 -10
- package/dist/dictionary/compiler/standard-snippet.js.map +1 -1
- package/dist/dictionary/contained/contained-component-field.d.ts +2 -2
- package/dist/dictionary/contained/contained-component-field.js +1 -1
- package/dist/dictionary/contained/contained-component-field.js.map +1 -1
- package/dist/dictionary/contained/contained-field-dispatcher.d.ts +3 -9
- package/dist/dictionary/contained/contained-field-dispatcher.js.map +1 -1
- package/dist/dictionary/contained/contained-field-set.d.ts +4 -4
- package/dist/dictionary/contained/contained-field-set.js +1 -1
- package/dist/dictionary/contained/contained-field-set.js.map +1 -1
- package/dist/dictionary/contained/contained-field.d.ts +1 -0
- package/dist/dictionary/contained/contained-field.js +3 -0
- package/dist/dictionary/contained/contained-field.js.map +1 -1
- package/dist/dictionary/contained/contained-group-field.d.ts +2 -2
- package/dist/dictionary/contained/contained-group-field.js +1 -1
- package/dist/dictionary/contained/contained-group-field.js.map +1 -1
- package/dist/dictionary/contained/contained-simple-field.d.ts +2 -2
- package/dist/dictionary/contained/contained-simple-field.js +1 -1
- package/dist/dictionary/contained/contained-simple-field.js.map +1 -1
- package/dist/dictionary/contained/field-dispatcher.d.ts +3 -9
- package/dist/dictionary/contained/field-dispatcher.js.map +1 -1
- package/dist/dictionary/contained/fields-dispatch.js +0 -1
- package/dist/dictionary/contained/fields-dispatch.js.map +1 -1
- package/dist/dictionary/definition/component-field-definition.d.ts +3 -3
- package/dist/dictionary/definition/component-field-definition.js +1 -1
- package/dist/dictionary/definition/component-field-definition.js.map +1 -1
- package/dist/dictionary/definition/fix-definitions.d.ts +3 -3
- package/dist/dictionary/definition/fix-definitions.js +3 -2
- package/dist/dictionary/definition/fix-definitions.js.map +1 -1
- package/dist/dictionary/definition/group-field-definition.d.ts +4 -4
- package/dist/dictionary/definition/group-field-definition.js +1 -1
- package/dist/dictionary/definition/group-field-definition.js.map +1 -1
- package/dist/dictionary/definition/message-definition.d.ts +2 -2
- package/dist/dictionary/definition/message-definition.js.map +1 -1
- package/dist/dictionary/definition/simple-field-definition.d.ts +4 -4
- package/dist/dictionary/definition/simple-field-definition.js +3 -2
- package/dist/dictionary/definition/simple-field-definition.js.map +1 -1
- package/dist/dictionary/dict-primitive.d.ts +1 -1
- package/dist/dictionary/dict-primitive.js.map +1 -1
- package/dist/dictionary/field-enum.js.map +1 -1
- package/dist/dictionary/fix-versions.js.map +1 -1
- package/dist/dictionary/parser/fix-repository/repository-xml-parser.js +20 -18
- package/dist/dictionary/parser/fix-repository/repository-xml-parser.js.map +1 -1
- package/dist/dictionary/parser/fix-repository/repository.js +24 -16
- package/dist/dictionary/parser/fix-repository/repository.js.map +1 -1
- package/dist/dictionary/parser/fixml/components-parser.d.ts +1 -1
- package/dist/dictionary/parser/fixml/components-parser.js +24 -15
- package/dist/dictionary/parser/fixml/components-parser.js.map +1 -1
- package/dist/dictionary/parser/fixml/fields-parser.d.ts +1 -1
- package/dist/dictionary/parser/fixml/fields-parser.js +5 -5
- package/dist/dictionary/parser/fixml/fields-parser.js.map +1 -1
- package/dist/dictionary/parser/fixml/fix-xsd-parser.js +3 -2
- package/dist/dictionary/parser/fixml/fix-xsd-parser.js.map +1 -1
- package/dist/dictionary/parser/fixml/include-graph.d.ts +1 -1
- package/dist/dictionary/parser/fixml/include-graph.js +58 -48
- package/dist/dictionary/parser/fixml/include-graph.js.map +1 -1
- package/dist/dictionary/parser/fixml/xsd-parser.d.ts +1 -1
- package/dist/dictionary/parser/fixml/xsd-parser.js +34 -23
- package/dist/dictionary/parser/fixml/xsd-parser.js.map +1 -1
- package/dist/dictionary/parser/quickfix/field-definition-parser.js +0 -2
- package/dist/dictionary/parser/quickfix/field-definition-parser.js.map +1 -1
- package/dist/dictionary/parser/quickfix/field-set-parser.js +3 -2
- package/dist/dictionary/parser/quickfix/field-set-parser.js.map +1 -1
- package/dist/dictionary/parser/quickfix/message-parser.js +10 -5
- package/dist/dictionary/parser/quickfix/message-parser.js.map +1 -1
- package/dist/dictionary/parser/quickfix/node-parser.js +14 -8
- package/dist/dictionary/parser/quickfix/node-parser.js.map +1 -1
- package/dist/dictionary/parser/quickfix/parse-context.d.ts +5 -5
- package/dist/dictionary/parser/quickfix/parse-context.js.map +1 -1
- package/dist/dictionary/parser/quickfix/quick-fix-xml-file-parser.js +22 -19
- package/dist/dictionary/parser/quickfix/quick-fix-xml-file-parser.js.map +1 -1
- package/dist/dictionary/set-reduce.js.map +1 -1
- package/dist/dictionary/type-dispatcher.d.ts +3 -9
- package/dist/dictionary/type-dispatcher.js.map +1 -1
- package/dist/dictionary/version-util.js +8 -8
- package/dist/dictionary/version-util.js.map +1 -1
- package/dist/jsfix-cmd.d.ts +3 -1
- package/dist/jsfix-cmd.js +134 -99
- package/dist/jsfix-cmd.js.map +1 -1
- package/dist/runtime/make-config.js +34 -14
- package/dist/runtime/make-config.js.map +1 -1
- package/dist/runtime/session-container.d.ts +3 -2
- package/dist/runtime/session-container.js +36 -16
- package/dist/runtime/session-container.js.map +1 -1
- package/dist/runtime/session-launcher.d.ts +10 -6
- package/dist/runtime/session-launcher.js +80 -43
- package/dist/runtime/session-launcher.js.map +1 -1
- package/dist/sample/http/oms/app.js +37 -7
- package/dist/sample/http/oms/app.js.map +1 -1
- package/dist/sample/http/oms/http-client.js +4 -2
- package/dist/sample/http/oms/http-client.js.map +1 -1
- package/dist/sample/http/oms/http-server.js +7 -1
- package/dist/sample/http/oms/http-server.js.map +1 -1
- package/dist/sample/http/oms/oms-factory.js +4 -3
- package/dist/sample/http/oms/oms-factory.js.map +1 -1
- package/dist/sample/tcp/qf-md/app.js +3 -3
- package/dist/sample/tcp/qf-md/app.js.map +1 -1
- package/dist/sample/tcp/qf-md/md-client.js +2 -1
- package/dist/sample/tcp/qf-md/md-client.js.map +1 -1
- package/dist/sample/tcp/qf-md/md-factory.js.map +1 -1
- package/dist/sample/tcp/qf-md/md-server.d.ts +1 -1
- package/dist/sample/tcp/qf-md/md-server.js +2 -1
- package/dist/sample/tcp/qf-md/md-server.js.map +1 -1
- package/dist/sample/tcp/recovering-skeleton/app.js +29 -16
- package/dist/sample/tcp/recovering-skeleton/app.js.map +1 -1
- package/dist/sample/tcp/recovering-skeleton/respawn-acceptor.d.ts +9 -1
- package/dist/sample/tcp/recovering-skeleton/respawn-acceptor.js +51 -2
- package/dist/sample/tcp/recovering-skeleton/respawn-acceptor.js.map +1 -1
- package/dist/sample/tcp/recovering-skeleton/skeleton-client.js +2 -1
- package/dist/sample/tcp/recovering-skeleton/skeleton-client.js.map +1 -1
- package/dist/sample/tcp/recovering-skeleton/skeleton-server.js +4 -3
- package/dist/sample/tcp/recovering-skeleton/skeleton-server.js.map +1 -1
- package/dist/sample/tcp/skeleton/app.js.map +1 -1
- package/dist/sample/tcp/skeleton/skeleton-session.js +7 -4
- package/dist/sample/tcp/skeleton/skeleton-session.js.map +1 -1
- package/dist/sample/tcp/tls-trade-capture/app.js.map +1 -1
- package/dist/sample/tcp/trade-capture/app-launcher.js +3 -3
- package/dist/sample/tcp/trade-capture/app-launcher.js.map +1 -1
- package/dist/sample/tcp/trade-capture/trade-capture-client.d.ts +1 -1
- package/dist/sample/tcp/trade-capture/trade-capture-client.js +2 -1
- package/dist/sample/tcp/trade-capture/trade-capture-client.js.map +1 -1
- package/dist/sample/tcp/trade-capture/trade-capture-server.js +7 -2
- package/dist/sample/tcp/trade-capture/trade-capture-server.js.map +1 -1
- package/dist/sample/tcp/trade-capture/trade-factory.js.map +1 -1
- package/dist/store/fix-msg-ascii-store-resend.js +18 -7
- package/dist/store/fix-msg-ascii-store-resend.js.map +1 -1
- package/dist/store/fix-msg-memory-store.d.ts +3 -3
- package/dist/store/fix-msg-memory-store.js +93 -69
- package/dist/store/fix-msg-memory-store.js.map +1 -1
- package/dist/store/fix-msg-store-record.d.ts +6 -6
- package/dist/store/fix-msg-store-record.js +2 -1
- package/dist/store/fix-msg-store-record.js.map +1 -1
- package/dist/store/fix-msg-store-state.js.map +1 -1
- package/dist/store/fix-msg-store.d.ts +7 -7
- package/dist/store/fix-msg-store.js.map +1 -1
- package/dist/test/ascii/ascii-encoder.test.js +93 -63
- package/dist/test/ascii/ascii-encoder.test.js.map +1 -1
- package/dist/test/ascii/ascii-parser.test.js +28 -24
- package/dist/test/ascii/ascii-parser.test.js.map +1 -1
- package/dist/test/ascii/ascii-segment.test.js +16 -11
- package/dist/test/ascii/ascii-segment.test.js.map +1 -1
- package/dist/test/ascii/ascii-store-replay.test.js +1 -1
- package/dist/test/ascii/ascii-store-replay.test.js.map +1 -1
- package/dist/test/ascii/ascii-tag-pos.test.js +7 -3
- package/dist/test/ascii/ascii-tag-pos.test.js.map +1 -1
- package/dist/test/ascii/execution-report.test.js +80 -72
- package/dist/test/ascii/execution-report.test.js.map +1 -1
- package/dist/test/ascii/fix-log-replay.test.js +1 -1
- package/dist/test/ascii/fix-log-replay.test.js.map +1 -1
- package/dist/test/ascii/fix-repo-dict.test.js +58 -55
- package/dist/test/ascii/fix-repo-dict.test.js.map +1 -1
- package/dist/test/ascii/includes.test.js +1 -1
- package/dist/test/ascii/includes.test.js.map +1 -1
- package/dist/test/ascii/logon.test.js +3 -3
- package/dist/test/ascii/logon.test.js.map +1 -1
- package/dist/test/ascii/memory-store.test.js +3 -3
- package/dist/test/ascii/memory-store.test.js.map +1 -1
- package/dist/test/ascii/qf-full-msg.test.js +19 -16
- package/dist/test/ascii/qf-full-msg.test.js.map +1 -1
- package/dist/test/ascii/repo-full-ascii-msg.test.js +11 -11
- package/dist/test/ascii/repo-full-ascii-msg.test.js.map +1 -1
- package/dist/test/ascii/session-state.test.js.map +1 -1
- package/dist/test/ascii/session.test.js +59 -42
- package/dist/test/ascii/session.test.js.map +1 -1
- package/dist/test/ascii/view-decode.test.js +30 -22
- package/dist/test/ascii/view-decode.test.js.map +1 -1
- package/dist/test/encode-proxy.test.js +29 -29
- package/dist/test/encode-proxy.test.js.map +1 -1
- package/dist/test/env/experiment.js +5 -5
- package/dist/test/env/experiment.js.map +1 -1
- package/dist/test/env/parsing-result.d.ts +3 -3
- package/dist/test/env/parsing-result.js.map +1 -1
- package/dist/test/env/setup.d.ts +2 -2
- package/dist/test/env/setup.js +13 -11
- package/dist/test/env/setup.js.map +1 -1
- package/dist/test/env/skeleton-runner.d.ts +1 -1
- package/dist/test/env/skeleton-runner.js +16 -16
- package/dist/test/env/skeleton-runner.js.map +1 -1
- package/dist/test/env/test-recovery.d.ts +3 -3
- package/dist/test/env/test-recovery.js +1 -1
- package/dist/test/env/test-recovery.js.map +1 -1
- package/dist/test/env/to-views.d.ts +1 -1
- package/dist/test/env/to-views.js +2 -2
- package/dist/test/env/to-views.js.map +1 -1
- package/dist/test/fixml/fixml-alloc-parse.test.js +32 -15
- package/dist/test/fixml/fixml-alloc-parse.test.js.map +1 -1
- package/dist/test/fixml/fixml-mkt-data-fut-parse.test.js +2 -2
- package/dist/test/fixml/fixml-mkt-data-fut-parse.test.js.map +1 -1
- package/dist/test/fixml/fixml-mkt-data-settle-parse.test.js +2 -1
- package/dist/test/fixml/fixml-mkt-data-settle-parse.test.js.map +1 -1
- package/dist/test/fixml/fixml-tc-bi-lateral-parse.test.js +19 -12
- package/dist/test/fixml/fixml-tc-bi-lateral-parse.test.js.map +1 -1
- package/dist/test/fixml/repo-full-fixml-msg.test.js +2 -2
- package/dist/test/fixml/repo-full-fixml-msg.test.js.map +1 -1
- package/dist/transport/ascii/ascii-msg-transmitter.d.ts +1 -1
- package/dist/transport/ascii/ascii-msg-transmitter.js +18 -8
- package/dist/transport/ascii/ascii-msg-transmitter.js.map +1 -1
- package/dist/transport/ascii/ascii-session-msg-factory.d.ts +3 -3
- package/dist/transport/ascii/ascii-session-msg-factory.js +4 -2
- package/dist/transport/ascii/ascii-session-msg-factory.js.map +1 -1
- package/dist/transport/ascii/ascii-session.d.ts +1 -1
- package/dist/transport/ascii/ascii-session.js +34 -16
- package/dist/transport/ascii/ascii-session.js.map +1 -1
- package/dist/transport/duplex/http-duplex.js +10 -8
- package/dist/transport/duplex/http-duplex.js.map +1 -1
- package/dist/transport/duplex/string-duplex.js +2 -2
- package/dist/transport/duplex/string-duplex.js.map +1 -1
- package/dist/transport/factory/msg-transport.js +21 -10
- package/dist/transport/factory/msg-transport.js.map +1 -1
- package/dist/transport/fix-acceptor.d.ts +3 -3
- package/dist/transport/fix-acceptor.js.map +1 -1
- package/dist/transport/fix-entity.d.ts +1 -1
- package/dist/transport/fix-entity.js.map +1 -1
- package/dist/transport/fix-initiator.d.ts +2 -2
- package/dist/transport/fix-initiator.js.map +1 -1
- package/dist/transport/fixml/fixml-msg-transmitter.d.ts +1 -1
- package/dist/transport/fixml/fixml-msg-transmitter.js +4 -2
- package/dist/transport/fixml/fixml-msg-transmitter.js.map +1 -1
- package/dist/transport/fixml/fixml-session-msg-factory.d.ts +1 -1
- package/dist/transport/fixml/fixml-session-msg-factory.js.map +1 -1
- package/dist/transport/fixml/fixml-session.js +7 -3
- package/dist/transport/fixml/fixml-session.js.map +1 -1
- package/dist/transport/http/html-options.d.ts +2 -2
- package/dist/transport/http/html-options.js.map +1 -1
- package/dist/transport/http/html-route.js.map +1 -1
- package/dist/transport/http/http-acceptor-listener.js +27 -23
- package/dist/transport/http/http-acceptor-listener.js.map +1 -1
- package/dist/transport/http/http-acceptor.d.ts +2 -2
- package/dist/transport/http/http-acceptor.js +52 -41
- package/dist/transport/http/http-acceptor.js.map +1 -1
- package/dist/transport/http/http-adapter.d.ts +3 -3
- package/dist/transport/http/http-adapter.js.map +1 -1
- package/dist/transport/http/http-initiator.js +35 -23
- package/dist/transport/http/http-initiator.js.map +1 -1
- package/dist/transport/http/http-json-sample-adapter.d.ts +4 -4
- package/dist/transport/http/http-json-sample-adapter.js +16 -11
- package/dist/transport/http/http-json-sample-adapter.js.map +1 -1
- package/dist/transport/http/http-transaction.js.map +1 -1
- package/dist/transport/http/http-transport-description.js.map +1 -1
- package/dist/transport/msg-application.js.map +1 -1
- package/dist/transport/msg-transmitter.d.ts +1 -1
- package/dist/transport/msg-transmitter.js +2 -2
- package/dist/transport/msg-transmitter.js.map +1 -1
- package/dist/transport/session/a-session-msg-factory.d.ts +3 -5
- package/dist/transport/session/a-session-msg-factory.js.map +1 -1
- package/dist/transport/session/fix-session-state.d.ts +8 -5
- package/dist/transport/session/fix-session-state.js +21 -16
- package/dist/transport/session/fix-session-state.js.map +1 -1
- package/dist/transport/session/fix-session.d.ts +19 -6
- package/dist/transport/session/fix-session.js +197 -110
- package/dist/transport/session/fix-session.js.map +1 -1
- package/dist/transport/session/make-fix-session.d.ts +1 -3
- package/dist/transport/session/make-fix-session.js.map +1 -1
- package/dist/transport/session/session-description.d.ts +1 -1
- package/dist/transport/session/session-description.js.map +1 -1
- package/dist/transport/session/session-msg-factory.d.ts +9 -9
- package/dist/transport/session/session-msg-factory.js.map +1 -1
- package/dist/transport/tcp/recovering-tcp-initiator.d.ts +4 -2
- package/dist/transport/tcp/recovering-tcp-initiator.js +62 -30
- package/dist/transport/tcp/recovering-tcp-initiator.js.map +1 -1
- package/dist/transport/tcp/tcp-acceptor-listener.js +28 -25
- package/dist/transport/tcp/tcp-acceptor-listener.js.map +1 -1
- package/dist/transport/tcp/tcp-acceptor.d.ts +2 -2
- package/dist/transport/tcp/tcp-acceptor.js +23 -15
- package/dist/transport/tcp/tcp-acceptor.js.map +1 -1
- package/dist/transport/tcp/tcp-initiator-connector.js +39 -30
- package/dist/transport/tcp/tcp-initiator-connector.js.map +1 -1
- package/dist/transport/tcp/tcp-initiator.d.ts +1 -1
- package/dist/transport/tcp/tcp-initiator.js +130 -104
- package/dist/transport/tcp/tcp-initiator.js.map +1 -1
- package/dist/transport/tcp/tcp-transport-description.js.map +1 -1
- package/dist/transport/tcp/tls-options-factory.d.ts +3 -3
- package/dist/transport/tcp/tls-options-factory.js +10 -3
- package/dist/transport/tcp/tls-options-factory.js.map +1 -1
- package/dist/transport/tcp/tls-options.d.ts +6 -2
- package/dist/transport/tcp/tls-options.js.map +1 -1
- package/dist/util/json-helper.js +2 -1
- package/dist/util/json-helper.js.map +1 -1
- package/dist/util/message-generator.d.ts +1 -1
- package/dist/util/message-generator.js +1 -1
- package/dist/util/message-generator.js.map +1 -1
- package/package.json +53 -48
- package/src/buffer/ascii/ascii-chars.ts +0 -1
- package/src/buffer/ascii/ascii-encoder.ts +18 -16
- package/src/buffer/ascii/ascii-parser-state.ts +4 -4
- package/src/buffer/ascii/ascii-parser.ts +16 -13
- package/src/buffer/ascii/ascii-segment-parser.ts +16 -15
- package/src/buffer/ascii/ascii-view.ts +22 -14
- package/src/buffer/ascii/itime-formatter.ts +12 -12
- package/src/buffer/ascii/time-formatter.ts +11 -12
- package/src/buffer/elastic-buffer.ts +5 -6
- package/src/buffer/encode-proxy.ts +6 -5
- package/src/buffer/encoder-state.ts +7 -3
- package/src/buffer/fixml/fixml-encoder.ts +10 -10
- package/src/buffer/fixml/fixml-parser.ts +80 -60
- package/src/buffer/fixml/fixml-view.ts +6 -7
- package/src/buffer/fixml/populated-attributes.ts +1 -1
- package/src/buffer/msg-encoder.ts +2 -1
- package/src/buffer/msg-view.ts +73 -53
- package/src/buffer/segment/segment-description.ts +13 -13
- package/src/buffer/segment/segment-summary.ts +3 -2
- package/src/buffer/structure.ts +6 -6
- package/src/buffer/time-format-template.ts +1 -1
- package/src/collections/collection.ts +2 -6
- package/src/collections/dictionary.ts +4 -5
- package/src/config/empty-log-factory.ts +1 -0
- package/src/config/get-js-fx-logger.ts +1 -2
- package/src/config/js-fix-config.ts +6 -6
- package/src/config/js-fix-logger.ts +14 -9
- package/src/config/js-fix-winston-log-factory.ts +2 -1
- package/src/config/winston-logger.ts +9 -7
- package/src/dictionary/compiler/compiler-settings.ts +5 -5
- package/src/dictionary/compiler/compiler-type.ts +1 -1
- package/src/dictionary/compiler/enum-compiler.ts +14 -16
- package/src/dictionary/compiler/msg-compiler.ts +15 -17
- package/src/dictionary/compiler/standard-snippet.ts +28 -27
- package/src/dictionary/contained/contained-component-field.ts +5 -4
- package/src/dictionary/contained/contained-field-dispatcher.ts +3 -3
- package/src/dictionary/contained/contained-field-set.ts +21 -21
- package/src/dictionary/contained/contained-field.ts +4 -1
- package/src/dictionary/contained/contained-group-field.ts +4 -4
- package/src/dictionary/contained/contained-simple-field.ts +5 -5
- package/src/dictionary/contained/field-dispatcher.ts +3 -3
- package/src/dictionary/contained/fields-dispatch.ts +0 -1
- package/src/dictionary/definition/component-field-definition.ts +4 -4
- package/src/dictionary/definition/fix-definitions.ts +8 -8
- package/src/dictionary/definition/group-field-definition.ts +5 -5
- package/src/dictionary/definition/message-definition.ts +4 -4
- package/src/dictionary/definition/simple-field-definition.ts +9 -9
- package/src/dictionary/dict-primitive.ts +2 -2
- package/src/dictionary/field-enum.ts +3 -2
- package/src/dictionary/fix-versions.ts +10 -10
- package/src/dictionary/parser/fix-repository/repository-xml-parser.ts +7 -8
- package/src/dictionary/parser/fix-repository/repository.ts +38 -30
- package/src/dictionary/parser/fixml/components-parser.ts +57 -51
- package/src/dictionary/parser/fixml/fields-parser.ts +9 -10
- package/src/dictionary/parser/fixml/fix-xsd-parser.ts +2 -3
- package/src/dictionary/parser/fixml/include-graph.ts +26 -21
- package/src/dictionary/parser/fixml/xsd-parser.ts +5 -5
- package/src/dictionary/parser/quickfix/field-definition-parser.ts +3 -5
- package/src/dictionary/parser/quickfix/field-set-parser.ts +2 -2
- package/src/dictionary/parser/quickfix/message-parser.ts +9 -6
- package/src/dictionary/parser/quickfix/node-parser.ts +20 -18
- package/src/dictionary/parser/quickfix/parse-context.ts +4 -4
- package/src/dictionary/parser/quickfix/quick-fix-xml-file-parser.ts +13 -15
- package/src/dictionary/set-reduce.ts +4 -3
- package/src/dictionary/type-dispatcher.ts +3 -3
- package/src/dictionary/version-util.ts +8 -8
- package/src/jsfix-cmd.ts +82 -58
- package/src/runtime/make-config.ts +15 -10
- package/src/runtime/session-container.ts +26 -18
- package/src/runtime/session-launcher.ts +58 -30
- package/src/sample/http/oms/app.ts +24 -7
- package/src/sample/http/oms/http-client.ts +3 -3
- package/src/sample/http/oms/http-server.ts +7 -1
- package/src/sample/http/oms/oms-factory.ts +3 -3
- package/src/sample/tcp/qf-md/app.ts +3 -3
- package/src/sample/tcp/qf-md/md-client.ts +1 -1
- package/src/sample/tcp/qf-md/md-factory.ts +3 -2
- package/src/sample/tcp/qf-md/md-server.ts +2 -2
- package/src/sample/tcp/recovering-skeleton/app.ts +37 -20
- package/src/sample/tcp/recovering-skeleton/respawn-acceptor.ts +66 -4
- package/src/sample/tcp/recovering-skeleton/skeleton-client.ts +2 -2
- package/src/sample/tcp/recovering-skeleton/skeleton-server.ts +4 -4
- package/src/sample/tcp/skeleton/app.ts +1 -1
- package/src/sample/tcp/skeleton/skeleton-session.ts +7 -7
- package/src/sample/tcp/tls-trade-capture/app.ts +1 -1
- package/src/sample/tcp/trade-capture/app-launcher.ts +4 -4
- package/src/sample/tcp/trade-capture/trade-capture-client.ts +7 -5
- package/src/sample/tcp/trade-capture/trade-capture-server.ts +10 -5
- package/src/sample/tcp/trade-capture/trade-factory.ts +1 -1
- package/src/store/fix-msg-ascii-store-resend.ts +5 -6
- package/src/store/fix-msg-memory-store.ts +22 -21
- package/src/store/fix-msg-store-record.ts +8 -8
- package/src/store/fix-msg-store-state.ts +2 -2
- package/src/store/fix-msg-store.ts +7 -7
- package/src/transport/ascii/ascii-msg-transmitter.ts +20 -14
- package/src/transport/ascii/ascii-session-msg-factory.ts +5 -6
- package/src/transport/ascii/ascii-session.ts +40 -29
- package/src/transport/duplex/http-duplex.ts +11 -9
- package/src/transport/duplex/string-duplex.ts +4 -5
- package/src/transport/factory/msg-transport.ts +5 -6
- package/src/transport/fix-acceptor.ts +2 -2
- package/src/transport/fix-entity.ts +1 -1
- package/src/transport/fix-initiator.ts +1 -1
- package/src/transport/fixml/fixml-msg-transmitter.ts +4 -3
- package/src/transport/fixml/fixml-session-msg-factory.ts +1 -2
- package/src/transport/fixml/fixml-session.ts +7 -6
- package/src/transport/http/html-options.ts +5 -5
- package/src/transport/http/html-route.ts +1 -1
- package/src/transport/http/http-acceptor-listener.ts +6 -4
- package/src/transport/http/http-acceptor.ts +36 -34
- package/src/transport/http/http-adapter.ts +3 -3
- package/src/transport/http/http-initiator.ts +22 -16
- package/src/transport/http/http-json-sample-adapter.ts +17 -16
- package/src/transport/http/http-transaction.ts +1 -1
- package/src/transport/http/http-transport-description.ts +1 -1
- package/src/transport/msg-application.ts +4 -4
- package/src/transport/msg-transmitter.ts +5 -5
- package/src/transport/session/a-session-msg-factory.ts +2 -3
- package/src/transport/session/fix-session-state.ts +24 -18
- package/src/transport/session/fix-session.ts +169 -96
- package/src/transport/session/make-fix-session.ts +1 -2
- package/src/transport/session/session-description.ts +2 -2
- package/src/transport/session/session-msg-factory.ts +9 -9
- package/src/transport/tcp/recovering-tcp-initiator.ts +39 -21
- package/src/transport/tcp/tcp-acceptor-listener.ts +4 -3
- package/src/transport/tcp/tcp-acceptor.ts +23 -22
- package/src/transport/tcp/tcp-initiator-connector.ts +16 -10
- package/src/transport/tcp/tcp-initiator.ts +57 -46
- package/src/transport/tcp/tcp-transport-description.ts +1 -1
- package/src/transport/tcp/tls-options-factory.ts +21 -8
- package/src/transport/tcp/tls-options.ts +11 -7
- package/src/util/json-helper.ts +6 -5
- package/src/util/message-generator.ts +6 -7
- package/tsconfig.json +2 -0
- package/.eslintrc.js +0 -6
- package/dist/buffer/ascii-chars.d.ts +0 -22
- package/dist/buffer/ascii-chars.js +0 -29
- package/dist/buffer/ascii-chars.js.map +0 -1
- package/dist/buffer/segment-description.d.ts +0 -33
- package/dist/buffer/segment-description.js +0 -80
- package/dist/buffer/segment-description.js.map +0 -1
- package/dist/buffer/segment-summary.d.ts +0 -13
- package/dist/buffer/segment-summary.js +0 -20
- package/dist/buffer/segment-summary.js.map +0 -1
- package/dist/buffer/tag-pos.d.ts +0 -12
- package/dist/buffer/tag-pos.js +0 -55
- package/dist/buffer/tag-pos.js.map +0 -1
- package/dist/buffer/tags.d.ts +0 -32
- package/dist/buffer/tags.js +0 -135
- package/dist/buffer/tags.js.map +0 -1
- package/dist/dictionary/fields-dispatch.d.ts +0 -13
- package/dist/dictionary/fields-dispatch.js +0 -40
- package/dist/dictionary/fields-dispatch.js.map +0 -1
- package/dist/sample/launcher.d.ts +0 -12
- package/dist/sample/launcher.js +0 -63
- package/dist/sample/launcher.js.map +0 -1
- package/dist/test/ascii-encoder.test.d.ts +0 -1
- package/dist/test/ascii-encoder.test.js +0 -529
- package/dist/test/ascii-encoder.test.js.map +0 -1
- package/dist/test/ascii-parser.test.d.ts +0 -1
- package/dist/test/ascii-parser.test.js +0 -142
- package/dist/test/ascii-parser.test.js.map +0 -1
- package/dist/test/ascii-segment.test.d.ts +0 -1
- package/dist/test/ascii-segment.test.js +0 -107
- package/dist/test/ascii-segment.test.js.map +0 -1
- package/dist/test/ascii-store-replay.test.d.ts +0 -1
- package/dist/test/ascii-store-replay.test.js +0 -121
- package/dist/test/ascii-store-replay.test.js.map +0 -1
- package/dist/test/ascii-tag-pos.test.d.ts +0 -1
- package/dist/test/ascii-tag-pos.test.js +0 -105
- package/dist/test/ascii-tag-pos.test.js.map +0 -1
- package/dist/test/execution-report.test.d.ts +0 -1
- package/dist/test/execution-report.test.js +0 -490
- package/dist/test/execution-report.test.js.map +0 -1
- package/dist/test/fix-log-replay.test.d.ts +0 -1
- package/dist/test/fix-log-replay.test.js +0 -45
- package/dist/test/fix-log-replay.test.js.map +0 -1
- package/dist/test/fix-repo-dict.test.d.ts +0 -1
- package/dist/test/fix-repo-dict.test.js +0 -127
- package/dist/test/fix-repo-dict.test.js.map +0 -1
- package/dist/test/fixml-alloc-parse.test.d.ts +0 -1
- package/dist/test/fixml-alloc-parse.test.js +0 -160
- package/dist/test/fixml-alloc-parse.test.js.map +0 -1
- package/dist/test/fixml-mkt-data-fut-parse.test.d.ts +0 -1
- package/dist/test/fixml-mkt-data-fut-parse.test.js +0 -60
- package/dist/test/fixml-mkt-data-fut-parse.test.js.map +0 -1
- package/dist/test/fixml-mkt-data-settle-parse.test.d.ts +0 -1
- package/dist/test/fixml-mkt-data-settle-parse.test.js +0 -33
- package/dist/test/fixml-mkt-data-settle-parse.test.js.map +0 -1
- package/dist/test/fixml-tc-bi-lateral-parse.test.d.ts +0 -1
- package/dist/test/fixml-tc-bi-lateral-parse.test.js +0 -96
- package/dist/test/fixml-tc-bi-lateral-parse.test.js.map +0 -1
- package/dist/test/includes.test.d.ts +0 -1
- package/dist/test/includes.test.js +0 -42
- package/dist/test/includes.test.js.map +0 -1
- package/dist/test/logon.test.d.ts +0 -1
- package/dist/test/logon.test.js +0 -93
- package/dist/test/logon.test.js.map +0 -1
- package/dist/test/memory-store.test.d.ts +0 -1
- package/dist/test/memory-store.test.js +0 -75
- package/dist/test/memory-store.test.js.map +0 -1
- package/dist/test/qf-full-msg.test.d.ts +0 -1
- package/dist/test/qf-full-msg.test.js +0 -76
- package/dist/test/qf-full-msg.test.js.map +0 -1
- package/dist/test/repo-full-ascii-msg.test.d.ts +0 -1
- package/dist/test/repo-full-ascii-msg.test.js +0 -82
- package/dist/test/repo-full-ascii-msg.test.js.map +0 -1
- package/dist/test/repo-full-fixml-msg.test.d.ts +0 -1
- package/dist/test/repo-full-fixml-msg.test.js +0 -136
- package/dist/test/repo-full-fixml-msg.test.js.map +0 -1
- package/dist/test/session-state.test.d.ts +0 -1
- package/dist/test/session-state.test.js +0 -74
- package/dist/test/session-state.test.js.map +0 -1
- package/dist/test/session.test.d.ts +0 -1
- package/dist/test/session.test.js +0 -412
- package/dist/test/session.test.js.map +0 -1
- package/dist/test/time-formatter.test.d.ts +0 -1
- package/dist/test/time-formatter.test.js +0 -78
- package/dist/test/time-formatter.test.js.map +0 -1
- package/dist/test/to-views.d.ts +0 -11
- package/dist/test/to-views.js +0 -55
- package/dist/test/to-views.js.map +0 -1
- package/dist/test/view-decode.test.d.ts +0 -1
- package/dist/test/view-decode.test.js +0 -208
- package/dist/test/view-decode.test.js.map +0 -1
- package/dist/transport/a-session-msg-factory.d.ts +0 -23
- package/dist/transport/a-session-msg-factory.js +0 -58
- package/dist/transport/a-session-msg-factory.js.map +0 -1
- package/dist/transport/ascii-session-msg-factory.d.ts +0 -16
- package/dist/transport/ascii-session-msg-factory.js +0 -47
- package/dist/transport/ascii-session-msg-factory.js.map +0 -1
- package/dist/transport/fix-msg-factory.d.ts +0 -15
- package/dist/transport/fix-msg-factory.js +0 -3
- package/dist/transport/fix-msg-factory.js.map +0 -1
- package/dist/transport/fix-session-state-args.d.ts +0 -8
- package/dist/transport/fix-session-state-args.js +0 -3
- package/dist/transport/fix-session-state-args.js.map +0 -1
- package/dist/transport/fix-session-state.d.ts +0 -32
- package/dist/transport/fix-session-state.js +0 -133
- package/dist/transport/fix-session-state.js.map +0 -1
- package/dist/transport/fix-session.d.ts +0 -50
- package/dist/transport/fix-session.js +0 -290
- package/dist/transport/fix-session.js.map +0 -1
- package/dist/transport/fixml/acceptor.d.ts +0 -3
- package/dist/transport/fixml/acceptor.js +0 -38
- package/dist/transport/fixml/acceptor.js.map +0 -1
- package/dist/transport/fixml-session-msg-factory.d.ts +0 -13
- package/dist/transport/fixml-session-msg-factory.js +0 -68
- package/dist/transport/fixml-session-msg-factory.js.map +0 -1
- package/dist/transport/make-config.d.ts +0 -4
- package/dist/transport/make-config.js +0 -31
- package/dist/transport/make-config.js.map +0 -1
- package/dist/transport/make-fix-session.d.ts +0 -5
- package/dist/transport/make-fix-session.js +0 -3
- package/dist/transport/make-fix-session.js.map +0 -1
- package/dist/transport/make-fixl-session.d.ts +0 -5
- package/dist/transport/make-fixl-session.js +0 -3
- package/dist/transport/make-fixl-session.js.map +0 -1
- package/dist/transport/msg-transport.d.ts +0 -14
- package/dist/transport/msg-transport.js +0 -57
- package/dist/transport/msg-transport.js.map +0 -1
- package/dist/transport/session-description.d.ts +0 -64
- package/dist/transport/session-description.js +0 -3
- package/dist/transport/session-description.js.map +0 -1
- package/dist/transport/session-msg-factory.d.ts +0 -6
- package/dist/transport/session-msg-factory.js +0 -13
- package/dist/transport/session-msg-factory.js.map +0 -1
- package/dist/transport/session-state.d.ts +0 -25
- package/dist/transport/session-state.js +0 -30
- package/dist/transport/session-state.js.map +0 -1
- package/dist/transport/tcp/acceptor.d.ts +0 -3
- package/dist/transport/tcp/acceptor.js +0 -40
- package/dist/transport/tcp/acceptor.js.map +0 -1
- package/dist/transport/tcp/initiator.d.ts +0 -3
- package/dist/transport/tcp/initiator.js +0 -67
- package/dist/transport/tcp/initiator.js.map +0 -1
- package/dist/util/dictionary-definitions.d.ts +0 -8
- package/dist/util/dictionary-definitions.js +0 -51
- package/dist/util/dictionary-definitions.js.map +0 -1
- package/tslint.json +0 -3
|
@@ -40,17 +40,19 @@ var InitiatorState;
|
|
|
40
40
|
})(InitiatorState = exports.InitiatorState || (exports.InitiatorState = {}));
|
|
41
41
|
let TcpInitiator = class TcpInitiator extends fix_initiator_1.FixInitiator {
|
|
42
42
|
constructor(jsFixConfig) {
|
|
43
|
-
|
|
43
|
+
var _a, _b, _c, _d;
|
|
44
|
+
super((_a = jsFixConfig.description.application) !== null && _a !== void 0 ? _a : null);
|
|
44
45
|
this.jsFixConfig = jsFixConfig;
|
|
45
46
|
this.state = InitiatorState.Idle;
|
|
46
47
|
this.th = null;
|
|
47
|
-
|
|
48
|
+
const name = (_c = (_b = this.application) === null || _b === void 0 ? void 0 : _b.name) !== null && _c !== void 0 ? _c : 'initiator';
|
|
49
|
+
this.logger = jsFixConfig.logFactory.logger(`${name}:TcpInitiator`);
|
|
48
50
|
if (!this.application) {
|
|
49
|
-
throw new Error(
|
|
51
|
+
throw new Error('no application in session description.');
|
|
50
52
|
}
|
|
51
|
-
this.tcp = this.application.tcp;
|
|
53
|
+
this.tcp = (_d = this.application.tcp) !== null && _d !== void 0 ? _d : null;
|
|
52
54
|
if (!this.tcp) {
|
|
53
|
-
throw new Error(
|
|
55
|
+
throw new Error('no tcp in session description need tcp { host: hostname, port: port }');
|
|
54
56
|
}
|
|
55
57
|
}
|
|
56
58
|
end() {
|
|
@@ -70,98 +72,117 @@ let TcpInitiator = class TcpInitiator extends fix_initiator_1.FixInitiator {
|
|
|
70
72
|
}
|
|
71
73
|
}
|
|
72
74
|
connect(timeoutSeconds) {
|
|
73
|
-
return
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
.
|
|
80
|
-
.catch((e) => {
|
|
81
|
-
this.repeatConnect(timeoutSeconds)
|
|
75
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
76
|
+
return yield new Promise((resolve, reject) => __awaiter(this, void 0, void 0, function* () {
|
|
77
|
+
switch (this.state) {
|
|
78
|
+
case InitiatorState.Idle: {
|
|
79
|
+
this.state = InitiatorState.Connecting;
|
|
80
|
+
this.logger.info(`connecting with timeout ${timeoutSeconds}`);
|
|
81
|
+
this.tryConnect()
|
|
82
82
|
.then((t) => resolve(t))
|
|
83
|
-
.catch((
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
this.logger.warning(`rejecting from state ${this.state}`);
|
|
90
|
-
reject(e);
|
|
91
|
-
}
|
|
92
|
-
}));
|
|
93
|
-
}
|
|
94
|
-
unsecureDuplex() {
|
|
95
|
-
const tcp = this.tcp;
|
|
96
|
-
return new Promise((resolve, reject) => {
|
|
97
|
-
try {
|
|
98
|
-
this.logger.info(`unsecureDuplex try to connect to endPoint`);
|
|
99
|
-
const socket = (0, net_1.createConnection)(tcp, () => {
|
|
100
|
-
try {
|
|
101
|
-
this.logger.info(`net.createConnection cb, resolving`);
|
|
102
|
-
const tcpDuplex = new duplex_1.TcpDuplex(socket);
|
|
103
|
-
resolve(tcpDuplex);
|
|
83
|
+
.catch((_) => {
|
|
84
|
+
this.repeatConnect(timeoutSeconds)
|
|
85
|
+
.then((t) => resolve(t))
|
|
86
|
+
.catch((e) => reject(e));
|
|
87
|
+
});
|
|
88
|
+
break;
|
|
104
89
|
}
|
|
105
|
-
|
|
90
|
+
default: {
|
|
91
|
+
const e = new Error('connect not valid from non idle state');
|
|
92
|
+
this.logger.warning(`rejecting from state ${this.state}`);
|
|
106
93
|
reject(e);
|
|
107
94
|
}
|
|
108
|
-
}
|
|
109
|
-
|
|
110
|
-
reject(err);
|
|
111
|
-
});
|
|
112
|
-
}
|
|
113
|
-
catch (e) {
|
|
114
|
-
reject(e);
|
|
115
|
-
}
|
|
95
|
+
}
|
|
96
|
+
}));
|
|
116
97
|
});
|
|
117
98
|
}
|
|
118
|
-
|
|
119
|
-
return
|
|
120
|
-
let tlsSocket = null;
|
|
99
|
+
unsecureDuplex() {
|
|
100
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
121
101
|
const tcp = this.tcp;
|
|
122
|
-
|
|
123
|
-
if (connectionOptions) {
|
|
102
|
+
return yield new Promise((resolve, reject) => {
|
|
124
103
|
try {
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
this.logger.info(`enabling tls session trace`);
|
|
138
|
-
tlsSocket.enableTrace();
|
|
104
|
+
this.logger.info('unsecureDuplex try to connect to endPoint');
|
|
105
|
+
const socket = tcp
|
|
106
|
+
? (0, net_1.createConnection)(tcp, () => {
|
|
107
|
+
try {
|
|
108
|
+
this.logger.info('net.createConnection cb, resolving');
|
|
109
|
+
if (socket) {
|
|
110
|
+
const tcpDuplex = new duplex_1.TcpDuplex(socket);
|
|
111
|
+
resolve(tcpDuplex);
|
|
112
|
+
}
|
|
113
|
+
else {
|
|
114
|
+
reject(new Error('no socket in tcp initiator'));
|
|
115
|
+
}
|
|
139
116
|
}
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
117
|
+
catch (e) {
|
|
118
|
+
reject(e);
|
|
119
|
+
}
|
|
120
|
+
})
|
|
121
|
+
: null;
|
|
122
|
+
socket === null || socket === void 0 ? void 0 : socket.on('error', (err) => {
|
|
145
123
|
reject(err);
|
|
146
124
|
});
|
|
147
125
|
}
|
|
148
126
|
catch (e) {
|
|
149
127
|
reject(e);
|
|
150
128
|
}
|
|
151
|
-
}
|
|
129
|
+
});
|
|
130
|
+
});
|
|
131
|
+
}
|
|
132
|
+
tlsDuplex() {
|
|
133
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
134
|
+
return yield new Promise((resolve, reject) => {
|
|
135
|
+
let tlsSocket = null;
|
|
136
|
+
const tcp = this.tcp;
|
|
137
|
+
const connectionOptions = tcp ? tls_options_factory_1.TlsOptionsFactory.getTlsConnectionOptions(tcp) : null;
|
|
138
|
+
if (connectionOptions) {
|
|
139
|
+
try {
|
|
140
|
+
tlsSocket = (0, tls_1.connect)(connectionOptions, () => {
|
|
141
|
+
var _a;
|
|
142
|
+
if (!tlsSocket)
|
|
143
|
+
return null;
|
|
144
|
+
this.logger.info(`client connected ${tlsSocket.authorized ? 'authorized' : 'unauthorized'}`);
|
|
145
|
+
if (!tlsSocket.authorized) {
|
|
146
|
+
const error = tlsSocket.authorizationError;
|
|
147
|
+
this.logger.warning(`rejecting from state ${this.state} authorizationError ${error}`);
|
|
148
|
+
tlsSocket.end();
|
|
149
|
+
reject(error);
|
|
150
|
+
}
|
|
151
|
+
else {
|
|
152
|
+
tlsSocket.setEncoding('utf8');
|
|
153
|
+
const tlsDuplex = new duplex_1.TcpDuplex(tlsSocket);
|
|
154
|
+
if ((_a = tcp === null || tcp === void 0 ? void 0 : tcp.tls) === null || _a === void 0 ? void 0 : _a.enableTrace) {
|
|
155
|
+
this.logger.info('enabling tls session trace');
|
|
156
|
+
tlsSocket.enableTrace();
|
|
157
|
+
}
|
|
158
|
+
this.logger.info('tlsDuplex resolving');
|
|
159
|
+
resolve(tlsDuplex);
|
|
160
|
+
}
|
|
161
|
+
});
|
|
162
|
+
tlsSocket.on('error', (err) => {
|
|
163
|
+
reject(err);
|
|
164
|
+
});
|
|
165
|
+
}
|
|
166
|
+
catch (e) {
|
|
167
|
+
reject(e);
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
});
|
|
152
171
|
});
|
|
153
172
|
}
|
|
154
173
|
tryConnect() {
|
|
155
|
-
return
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
174
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
175
|
+
return yield new Promise((resolve, reject) => {
|
|
176
|
+
const tcp = this.tcp;
|
|
177
|
+
const connectionOptions = tcp ? tls_options_factory_1.TlsOptionsFactory.getTlsConnectionOptions(tcp) : null;
|
|
178
|
+
const connector = connectionOptions ? this.tlsDuplex() : this.unsecureDuplex();
|
|
179
|
+
this.logger.info(`tryConnect ${tcp === null || tcp === void 0 ? void 0 : tcp.host}:${tcp === null || tcp === void 0 ? void 0 : tcp.port}`);
|
|
180
|
+
connector.then(duplex => {
|
|
181
|
+
this.duplex = duplex;
|
|
182
|
+
resolve(new factory_1.MsgTransport(0, this.jsFixConfig, duplex));
|
|
183
|
+
}).catch(e => {
|
|
184
|
+
reject(e);
|
|
185
|
+
});
|
|
165
186
|
});
|
|
166
187
|
});
|
|
167
188
|
}
|
|
@@ -172,33 +193,38 @@ let TcpInitiator = class TcpInitiator extends fix_initiator_1.FixInitiator {
|
|
|
172
193
|
}
|
|
173
194
|
}
|
|
174
195
|
repeatConnect(timeoutSeconds) {
|
|
175
|
-
return
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
196
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
197
|
+
return yield new Promise((resolve, reject) => __awaiter(this, void 0, void 0, function* () {
|
|
198
|
+
var _a, _b;
|
|
199
|
+
const application = this.application;
|
|
200
|
+
const promisify = util.promisify;
|
|
201
|
+
const timeoutPromise = promisify(setTimeout);
|
|
202
|
+
const reconnectSeconds = (_a = application === null || application === void 0 ? void 0 : application.reconnectSeconds) !== null && _a !== void 0 ? _a : 5;
|
|
203
|
+
let retries = 0;
|
|
204
|
+
let lastError;
|
|
205
|
+
const name = (_b = application === null || application === void 0 ? void 0 : application.name) !== null && _b !== void 0 ? _b : 'initiator';
|
|
206
|
+
this.th = setInterval(() => {
|
|
207
|
+
++retries;
|
|
208
|
+
this.tryConnect()
|
|
209
|
+
.then((t) => {
|
|
210
|
+
this.state = InitiatorState.Connected;
|
|
211
|
+
this.clearTimer();
|
|
212
|
+
resolve(t);
|
|
213
|
+
}).catch((e) => {
|
|
214
|
+
lastError = e;
|
|
215
|
+
this.logger.info(`${name}: retries ${retries} ${e.message}`);
|
|
216
|
+
});
|
|
217
|
+
}, reconnectSeconds * 1000);
|
|
218
|
+
timeoutPromise(timeoutSeconds * 1000).then(() => {
|
|
186
219
|
this.clearTimer();
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
220
|
+
this.state = InitiatorState.Stopped;
|
|
221
|
+
const e = lastError !== null && lastError !== void 0 ? lastError : new Error(`${name}: timeout of ${timeoutSeconds} whilst connecting`);
|
|
222
|
+
reject(e);
|
|
223
|
+
}).catch(e => {
|
|
224
|
+
reject(e);
|
|
191
225
|
});
|
|
192
|
-
}
|
|
193
|
-
|
|
194
|
-
this.clearTimer();
|
|
195
|
-
this.state = InitiatorState.Stopped;
|
|
196
|
-
const e = lastError !== null && lastError !== void 0 ? lastError : new Error(`${application.name}: timeout of ${timeoutSeconds} whilst connecting`);
|
|
197
|
-
reject(e);
|
|
198
|
-
}).catch(e => {
|
|
199
|
-
reject(e);
|
|
200
|
-
});
|
|
201
|
-
}));
|
|
226
|
+
}));
|
|
227
|
+
});
|
|
202
228
|
}
|
|
203
229
|
};
|
|
204
230
|
TcpInitiator = __decorate([
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tcp-initiator.js","sourceRoot":"","sources":["../../../src/transport/tcp/tcp-initiator.ts"],"names":[],"mappings":"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","sourcesContent":["\r\nimport { FixInitiator } from '../fix-initiator'\r\nimport { MsgTransport } from '../factory'\r\n\r\nimport { IJsFixConfig, IJsFixLogger } from '../../config'\r\nimport { TcpDuplex, FixDuplex } from '../duplex'\r\n\r\nimport * as util from 'util'\r\nimport { connect as tlsConnect, ConnectionOptions, TLSSocket } from 'tls'\r\nimport { createConnection } from 'net'\r\nimport Timeout = NodeJS.Timeout\r\nimport { TlsOptionsFactory } from './tls-options-factory'\r\nimport { inject, injectable } from 'tsyringe'\r\nimport { DITokens } from '../../runtime/di-tokens'\r\nimport { ITcpTransportDescription } from './tcp-transport-description'\r\n\r\nexport enum InitiatorState {\r\n Idle = 1,\r\n Connecting = 2,\r\n Connected = 3,\r\n Stopped = 4\r\n}\r\n\r\n@injectable()\r\nexport class TcpInitiator extends FixInitiator {\r\n public tcp: ITcpTransportDescription\r\n public state: InitiatorState = InitiatorState.Idle\r\n private readonly logger: IJsFixLogger\r\n private duplex: FixDuplex\r\n private th: Timeout = null\r\n\r\n constructor (@inject(DITokens.IJsFixConfig) public readonly jsFixConfig: IJsFixConfig) {\r\n super(jsFixConfig.description.application)\r\n this.logger = jsFixConfig.logFactory.logger(`${this.application.name}:TcpInitiator`)\r\n if (!this.application) {\r\n throw new Error(`no application in session description.`)\r\n }\r\n this.tcp = this.application.tcp\r\n if (!this.tcp) {\r\n throw new Error(`no tcp in session description need tcp { host: hostname, port: port }`)\r\n }\r\n }\r\n\r\n public end (): void {\r\n this.clearTimer()\r\n switch (this.state) {\r\n case InitiatorState.Connected: {\r\n this.logger.info('end')\r\n this.duplex.end()\r\n this.state = InitiatorState.Stopped\r\n break\r\n }\r\n\r\n default: {\r\n this.logger.info(`end :state ${this.state}`)\r\n this.state = InitiatorState.Stopped\r\n break\r\n }\r\n }\r\n }\r\n\r\n public connect (timeoutSeconds: number): Promise<MsgTransport> {\r\n return new Promise<MsgTransport>(async (resolve, reject) => {\r\n switch (this.state) {\r\n case InitiatorState.Idle: {\r\n this.state = InitiatorState.Connecting\r\n this.logger.info(`connecting with timeout ${timeoutSeconds}`)\r\n this.tryConnect()\r\n .then((t: MsgTransport) => resolve(t))\r\n .catch((e: Error) => {\r\n this.repeatConnect(timeoutSeconds)\r\n .then((t: MsgTransport) => resolve(t))\r\n .catch((e: Error) => reject(e))\r\n })\r\n break\r\n }\r\n\r\n default:\r\n const e: Error = new Error(`connect not valid from non idle state`)\r\n this.logger.warning(`rejecting from state ${this.state}`)\r\n reject(e)\r\n }\r\n })\r\n }\r\n\r\n private unsecureDuplex (): Promise<TcpDuplex> {\r\n const tcp = this.tcp\r\n return new Promise<TcpDuplex>((resolve, reject) => {\r\n try {\r\n this.logger.info(`unsecureDuplex try to connect to endPoint`)\r\n const socket = createConnection(tcp, () => {\r\n try {\r\n this.logger.info(`net.createConnection cb, resolving`)\r\n const tcpDuplex = new TcpDuplex(socket)\r\n resolve(tcpDuplex)\r\n } catch (e) {\r\n reject(e)\r\n }\r\n })\r\n socket.on('error', (err) => {\r\n reject(err)\r\n })\r\n } catch (e) {\r\n reject(e)\r\n }\r\n })\r\n }\r\n\r\n private tlsDuplex (): Promise < TcpDuplex > {\r\n return new Promise<TcpDuplex>((resolve, reject) => {\r\n let tlsSocket: TLSSocket = null\r\n const tcp = this.tcp\r\n const connectionOptions: ConnectionOptions = TlsOptionsFactory.getTlsConnectionOptions(tcp)\r\n if (connectionOptions) {\r\n try {\r\n tlsSocket = tlsConnect(connectionOptions, () => {\r\n this.logger.info(`client connected ${tlsSocket.authorized ? 'authorized' : 'unauthorized'}`)\r\n if (!tlsSocket.authorized) {\r\n const error = tlsSocket.authorizationError\r\n this.logger.warning(`rejecting from state ${this.state} authorizationError ${error}`)\r\n tlsSocket.end()\r\n reject(error)\r\n } else {\r\n tlsSocket.setEncoding('utf8')\r\n const tlsDuplex = new TcpDuplex(tlsSocket)\r\n if (tcp.tls.enableTrace) {\r\n this.logger.info(`enabling tls session trace`)\r\n tlsSocket.enableTrace()\r\n }\r\n this.logger.info(`tlsDuplex resolving`)\r\n resolve(tlsDuplex)\r\n }\r\n })\r\n tlsSocket.on('error', (err) => {\r\n reject(err)\r\n })\r\n } catch (e) {\r\n reject(e)\r\n }\r\n }\r\n })\r\n }\r\n\r\n private tryConnect (): Promise < MsgTransport > {\r\n return new Promise<MsgTransport>((resolve, reject) => {\r\n const tcp = this.tcp\r\n const connectionOptions: ConnectionOptions = TlsOptionsFactory.getTlsConnectionOptions(tcp)\r\n const connector = connectionOptions ? this.tlsDuplex() : this.unsecureDuplex()\r\n this.logger.info(`tryConnect ${tcp.host}:${tcp.port}`)\r\n connector.then(duplex => {\r\n this.duplex = duplex\r\n resolve(new MsgTransport(0, this.jsFixConfig, duplex))\r\n }).catch(e => {\r\n reject(e)\r\n })\r\n })\r\n }\r\n\r\n public clearTimer () {\r\n if (this .th) {\r\n clearInterval(this.th)\r\n this.th = null\r\n }\r\n }\r\n\r\n private repeatConnect (timeoutSeconds: number): Promise < MsgTransport > {\r\n return new Promise<MsgTransport>(async (resolve, reject) => {\r\n const application = this.application\r\n const promisify = util.promisify\r\n const timeoutPromise = promisify(setTimeout)\r\n let retries = 0\r\n let lastError: Error\r\n this.th = setInterval(() => {\r\n ++retries\r\n this.tryConnect()\r\n .then((t: MsgTransport) => {\r\n this.state = InitiatorState.Connected\r\n this.clearTimer()\r\n resolve(t)\r\n }).catch((e: Error) => {\r\n lastError = e\r\n this.logger.info(`${application.name}: retries ${retries} ${e.message}`)\r\n })\r\n }, application.reconnectSeconds * 1000)\r\n timeoutPromise(timeoutSeconds * 1000).then(() => {\r\n this.clearTimer()\r\n this.state = InitiatorState.Stopped\r\n const e = lastError ?? new Error(`${application.name}: timeout of ${timeoutSeconds} whilst connecting`)\r\n reject(e)\r\n }).catch(e => {\r\n reject(e)\r\n })\r\n })\r\n }\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"tcp-initiator.js","sourceRoot":"","sources":["../../../src/transport/tcp/tcp-initiator.ts"],"names":[],"mappings":"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","sourcesContent":["\r\nimport { FixInitiator } from '../fix-initiator'\r\nimport { MsgTransport } from '../factory'\r\n\r\nimport { IJsFixConfig, IJsFixLogger } from '../../config'\r\nimport { TcpDuplex, FixDuplex } from '../duplex'\r\n\r\nimport * as util from 'util'\r\nimport { connect as tlsConnect, ConnectionOptions, TLSSocket } from 'tls'\r\nimport { createConnection } from 'net'\r\nimport Timeout = NodeJS.Timeout\r\nimport { TlsOptionsFactory } from './tls-options-factory'\r\nimport { inject, injectable } from 'tsyringe'\r\nimport { DITokens } from '../../runtime/di-tokens'\r\nimport { ITcpTransportDescription } from './tcp-transport-description'\r\n\r\nexport enum InitiatorState {\r\n Idle = 1,\r\n Connecting = 2,\r\n Connected = 3,\r\n Stopped = 4\r\n}\r\n\r\n@injectable()\r\nexport class TcpInitiator extends FixInitiator {\r\n public tcp: ITcpTransportDescription | null\r\n public state: InitiatorState = InitiatorState.Idle\r\n private readonly logger: IJsFixLogger\r\n private duplex: FixDuplex\r\n private th: Timeout | null = null\r\n\r\n constructor (@inject(DITokens.IJsFixConfig) public readonly jsFixConfig: IJsFixConfig) {\r\n super(jsFixConfig.description.application ?? null)\r\n const name = this.application?.name ?? 'initiator'\r\n this.logger = jsFixConfig.logFactory.logger(`${name}:TcpInitiator`)\r\n if (!this.application) {\r\n throw new Error('no application in session description.')\r\n }\r\n this.tcp = this.application.tcp ?? null\r\n if (!this.tcp) {\r\n throw new Error('no tcp in session description need tcp { host: hostname, port: port }')\r\n }\r\n }\r\n\r\n public end (): void {\r\n this.clearTimer()\r\n switch (this.state) {\r\n case InitiatorState.Connected: {\r\n this.logger.info('end')\r\n this.duplex.end()\r\n this.state = InitiatorState.Stopped\r\n break\r\n }\r\n\r\n default: {\r\n this.logger.info(`end :state ${this.state}`)\r\n this.state = InitiatorState.Stopped\r\n break\r\n }\r\n }\r\n }\r\n\r\n public async connect (timeoutSeconds: number): Promise<MsgTransport> {\r\n return await new Promise<MsgTransport>(async (resolve, reject) => {\r\n switch (this.state) {\r\n case InitiatorState.Idle: {\r\n this.state = InitiatorState.Connecting\r\n this.logger.info(`connecting with timeout ${timeoutSeconds}`)\r\n this.tryConnect()\r\n .then((t: MsgTransport) => resolve(t))\r\n .catch((_: Error) => {\r\n this.repeatConnect(timeoutSeconds)\r\n .then((t: MsgTransport) => resolve(t))\r\n .catch((e: Error) => reject(e))\r\n })\r\n break\r\n }\r\n\r\n default: {\r\n const e: Error = new Error('connect not valid from non idle state')\r\n this.logger.warning(`rejecting from state ${this.state}`)\r\n reject(e)\r\n }\r\n }\r\n })\r\n }\r\n\r\n private async unsecureDuplex (): Promise<TcpDuplex> {\r\n const tcp = this.tcp\r\n return await new Promise<TcpDuplex>((resolve, reject) => {\r\n try {\r\n this.logger.info('unsecureDuplex try to connect to endPoint')\r\n const socket = tcp\r\n ? createConnection(tcp, () => {\r\n try {\r\n this.logger.info('net.createConnection cb, resolving')\r\n if (socket) {\r\n const tcpDuplex = new TcpDuplex(socket)\r\n resolve(tcpDuplex)\r\n } else {\r\n reject(new Error('no socket in tcp initiator'))\r\n }\r\n } catch (e) {\r\n reject(e)\r\n }\r\n })\r\n : null\r\n socket?.on('error', (err) => {\r\n reject(err)\r\n })\r\n } catch (e) {\r\n reject(e)\r\n }\r\n })\r\n }\r\n\r\n private async tlsDuplex (): Promise<TcpDuplex > {\r\n return await new Promise<TcpDuplex>((resolve, reject) => {\r\n let tlsSocket: TLSSocket | null = null\r\n const tcp = this.tcp\r\n const connectionOptions: ConnectionOptions | null = tcp ? TlsOptionsFactory.getTlsConnectionOptions(tcp) : null\r\n if (connectionOptions) {\r\n try {\r\n tlsSocket = tlsConnect(connectionOptions, () => {\r\n if (!tlsSocket) return null\r\n this.logger.info(`client connected ${tlsSocket.authorized ? 'authorized' : 'unauthorized'}`)\r\n if (!tlsSocket.authorized) {\r\n const error = tlsSocket.authorizationError\r\n this.logger.warning(`rejecting from state ${this.state} authorizationError ${error}`)\r\n tlsSocket.end()\r\n reject(error)\r\n } else {\r\n tlsSocket.setEncoding('utf8')\r\n const tlsDuplex = new TcpDuplex(tlsSocket)\r\n if (tcp?.tls?.enableTrace) {\r\n this.logger.info('enabling tls session trace')\r\n tlsSocket.enableTrace()\r\n }\r\n this.logger.info('tlsDuplex resolving')\r\n resolve(tlsDuplex)\r\n }\r\n })\r\n tlsSocket.on('error', (err) => {\r\n reject(err)\r\n })\r\n } catch (e) {\r\n reject(e)\r\n }\r\n }\r\n })\r\n }\r\n\r\n private async tryConnect (): Promise < MsgTransport > {\r\n return await new Promise<MsgTransport>((resolve, reject) => {\r\n const tcp = this.tcp\r\n const connectionOptions: ConnectionOptions | null = tcp ? TlsOptionsFactory.getTlsConnectionOptions(tcp) : null\r\n const connector = connectionOptions ? this.tlsDuplex() : this.unsecureDuplex()\r\n this.logger.info(`tryConnect ${tcp?.host}:${tcp?.port}`)\r\n connector.then(duplex => {\r\n this.duplex = duplex\r\n resolve(new MsgTransport(0, this.jsFixConfig, duplex))\r\n }).catch(e => {\r\n reject(e)\r\n })\r\n })\r\n }\r\n\r\n public clearTimer (): void {\r\n if (this.th) {\r\n clearInterval(this.th)\r\n this.th = null\r\n }\r\n }\r\n\r\n private async repeatConnect (timeoutSeconds: number): Promise < MsgTransport > {\r\n return await new Promise<MsgTransport>(async (resolve, reject) => {\r\n const application = this.application\r\n const promisify = util.promisify\r\n const timeoutPromise = promisify(setTimeout)\r\n const reconnectSeconds = application?.reconnectSeconds ?? 5\r\n let retries = 0\r\n let lastError: Error\r\n const name = application?.name ?? 'initiator'\r\n this.th = setInterval(() => {\r\n ++retries\r\n this.tryConnect()\r\n .then((t: MsgTransport) => {\r\n this.state = InitiatorState.Connected\r\n this.clearTimer()\r\n resolve(t)\r\n }).catch((e: Error) => {\r\n lastError = e\r\n this.logger.info(`${name}: retries ${retries} ${e.message}`)\r\n })\r\n }, reconnectSeconds * 1000)\r\n timeoutPromise(timeoutSeconds * 1000).then(() => {\r\n this.clearTimer()\r\n this.state = InitiatorState.Stopped\r\n const e = lastError ?? new Error(`${name}: timeout of ${timeoutSeconds} whilst connecting`)\r\n reject(e)\r\n }).catch(e => {\r\n reject(e)\r\n })\r\n })\r\n }\r\n}\r\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tcp-transport-description.js","sourceRoot":"","sources":["../../../src/transport/tcp/tcp-transport-description.ts"],"names":[],"mappings":"","sourcesContent":["import { ITlsOptions } from './tls-options'\r\n\r\nexport interface ITcpTransportDescription {\r\n readonly port: number\r\n readonly host: string
|
|
1
|
+
{"version":3,"file":"tcp-transport-description.js","sourceRoot":"","sources":["../../../src/transport/tcp/tcp-transport-description.ts"],"names":[],"mappings":"","sourcesContent":["import { ITlsOptions } from './tls-options'\r\n\r\nexport interface ITcpTransportDescription {\r\n readonly port: number\r\n readonly host: string\r\n readonly tls?: ITlsOptions\r\n}\r\n"]}
|
|
@@ -3,7 +3,7 @@ import { ConnectionOptions, TlsOptions } from 'tls';
|
|
|
3
3
|
import { ITlsOptions } from './tls-options';
|
|
4
4
|
import { ITcpTransportDescription } from './tcp-transport-description';
|
|
5
5
|
export declare class TlsOptionsFactory {
|
|
6
|
-
static read(filePath: string):
|
|
7
|
-
static getTlsOptions(tls: ITlsOptions): TlsOptions;
|
|
8
|
-
static getTlsConnectionOptions(tcp: ITcpTransportDescription): ConnectionOptions;
|
|
6
|
+
static read(filePath: string): string;
|
|
7
|
+
static getTlsOptions(tls: ITlsOptions): TlsOptions | null;
|
|
8
|
+
static getTlsConnectionOptions(tcp: ITcpTransportDescription): ConnectionOptions | null;
|
|
9
9
|
}
|
|
@@ -20,15 +20,19 @@ class TlsOptionsFactory {
|
|
|
20
20
|
};
|
|
21
21
|
if (tls.key) {
|
|
22
22
|
tlsOptions.key = TlsOptionsFactory.read(tls.key);
|
|
23
|
-
tlsOptions.cert = TlsOptionsFactory.read(tls.cert);
|
|
23
|
+
tlsOptions.cert = (tls === null || tls === void 0 ? void 0 : tls.cert) ? TlsOptionsFactory.read(tls === null || tls === void 0 ? void 0 : tls.cert) : undefined;
|
|
24
24
|
}
|
|
25
25
|
if (tls.ca && tls.ca.length > 0) {
|
|
26
26
|
tlsOptions.ca = tls.ca.map(i => TlsOptionsFactory.read(i));
|
|
27
27
|
}
|
|
28
|
+
if (tls.nodeTlsServerOptions) {
|
|
29
|
+
tlsOptions = Object.assign(Object.assign({}, tlsOptions), tls.nodeTlsServerOptions);
|
|
30
|
+
}
|
|
28
31
|
}
|
|
29
32
|
return tlsOptions;
|
|
30
33
|
}
|
|
31
34
|
static getTlsConnectionOptions(tcp) {
|
|
35
|
+
var _a, _b, _c, _d;
|
|
32
36
|
let connectionOptions = null;
|
|
33
37
|
const tls = tcp.tls;
|
|
34
38
|
if (tls) {
|
|
@@ -37,8 +41,8 @@ class TlsOptionsFactory {
|
|
|
37
41
|
host: tcp.host
|
|
38
42
|
};
|
|
39
43
|
if (tls.key) {
|
|
40
|
-
connectionOptions.key = TlsOptionsFactory.read(tcp.tls.key);
|
|
41
|
-
connectionOptions.cert = TlsOptionsFactory.read(tcp.tls.cert);
|
|
44
|
+
connectionOptions.key = TlsOptionsFactory.read((_b = (_a = tcp.tls) === null || _a === void 0 ? void 0 : _a.key) !== null && _b !== void 0 ? _b : '');
|
|
45
|
+
connectionOptions.cert = ((_c = tcp.tls) === null || _c === void 0 ? void 0 : _c.cert) ? TlsOptionsFactory.read((_d = tcp === null || tcp === void 0 ? void 0 : tcp.tls) === null || _d === void 0 ? void 0 : _d.cert) : undefined;
|
|
42
46
|
}
|
|
43
47
|
if (tcp.tls.ca && tcp.tls.ca.length > 0) {
|
|
44
48
|
connectionOptions.ca = tcp.tls.ca.map(i => TlsOptionsFactory.read(i));
|
|
@@ -49,6 +53,9 @@ class TlsOptionsFactory {
|
|
|
49
53
|
if (tcp.tls.sessionTimeout) {
|
|
50
54
|
connectionOptions.sessionTimeout = tcp.tls.sessionTimeout;
|
|
51
55
|
}
|
|
56
|
+
if (tls.nodeTlsConnectionOptions) {
|
|
57
|
+
connectionOptions = Object.assign(Object.assign({}, connectionOptions), tls.nodeTlsConnectionOptions);
|
|
58
|
+
}
|
|
52
59
|
}
|
|
53
60
|
return connectionOptions;
|
|
54
61
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tls-options-factory.js","sourceRoot":"","sources":["../../../src/transport/tcp/tls-options-factory.ts"],"names":[],"mappings":";;;AAGA,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,CAAA;AAC5B,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;AAExB,MAAa,iBAAiB;IAC5B,MAAM,CAAC,IAAI,CAAE,QAAgB;QAC3B,MAAM,IAAI,GAAW,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,WAAW,CAAC,CAAA;QACtD,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAA;QAC1C,OAAO,EAAE,CAAC,YAAY,CAAC,QAAQ,EAC7B;YACE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG;SAC5B,CAAC,CAAA;IACN,CAAC;IAED,MAAM,CAAC,aAAa,CAAE,GAAgB;QACpC,IAAI,UAAU,
|
|
1
|
+
{"version":3,"file":"tls-options-factory.js","sourceRoot":"","sources":["../../../src/transport/tcp/tls-options-factory.ts"],"names":[],"mappings":";;;AAGA,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,CAAA;AAC5B,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;AAExB,MAAa,iBAAiB;IAC5B,MAAM,CAAC,IAAI,CAAE,QAAgB;QAC3B,MAAM,IAAI,GAAW,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,WAAW,CAAC,CAAA;QACtD,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAA;QAC1C,OAAO,EAAE,CAAC,YAAY,CAAC,QAAQ,EAC7B;YACE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG;SAC5B,CAAC,CAAA;IACN,CAAC;IAED,MAAM,CAAC,aAAa,CAAE,GAAgB;QACpC,IAAI,UAAU,GAAsB,IAAI,CAAA;QACxC,IAAI,GAAG,EAAE;YACP,UAAU,GAAG;gBACX,WAAW,EAAE,GAAG,CAAC,WAAW;gBAC5B,kBAAkB,EAAE,GAAG,CAAC,kBAAkB;aAC7B,CAAA;YAEf,IAAI,GAAG,CAAC,GAAG,EAAE;gBACX,UAAU,CAAC,GAAG,GAAG,iBAAiB,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;gBAChD,UAAU,CAAC,IAAI,GAAG,CAAA,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAE,IAAI,EAAC,CAAC,CAAC,iBAAiB,CAAC,IAAI,CAAC,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAE,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;aAC5E;YAED,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE;gBAC/B,UAAU,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAA;aAC3D;YAED,IAAI,GAAG,CAAC,oBAAoB,EAAE;gBAC5B,UAAU,mCACL,UAAU,GACV,GAAG,CAAC,oBAAoB,CAC5B,CAAA;aACF;SACF;QACD,OAAO,UAAU,CAAA;IACnB,CAAC;IAED,MAAM,CAAC,uBAAuB,CAAE,GAA6B;;QAC3D,IAAI,iBAAiB,GAA6B,IAAI,CAAA;QACtD,MAAM,GAAG,GAAG,GAAG,CAAC,GAAG,CAAA;QACnB,IAAI,GAAG,EAAE;YACP,iBAAiB,GAAG;gBAClB,IAAI,EAAE,GAAG,CAAC,IAAI;gBACd,IAAI,EAAE,GAAG,CAAC,IAAI;aACM,CAAA;YACtB,IAAI,GAAG,CAAC,GAAG,EAAE;gBACX,iBAAiB,CAAC,GAAG,GAAG,iBAAiB,CAAC,IAAI,CAAC,MAAA,MAAA,GAAG,CAAC,GAAG,0CAAE,GAAG,mCAAI,EAAE,CAAC,CAAA;gBAClE,iBAAiB,CAAC,IAAI,GAAG,CAAA,MAAA,GAAG,CAAC,GAAG,0CAAE,IAAI,EAAC,CAAC,CAAC,iBAAiB,CAAC,IAAI,CAAC,MAAA,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAE,GAAG,0CAAE,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;aAC5F;YACD,IAAI,GAAG,CAAC,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE;gBACvC,iBAAiB,CAAC,EAAE,GAAG,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAA;aACtE;YACD,IAAI,GAAG,CAAC,GAAG,CAAC,OAAO,EAAE;gBACnB,iBAAiB,CAAC,OAAO,GAAG,GAAG,CAAC,GAAG,CAAC,OAAO,CAAA;aAC5C;YACD,IAAI,GAAG,CAAC,GAAG,CAAC,cAAc,EAAE;gBAC1B,iBAAiB,CAAC,cAAc,GAAG,GAAG,CAAC,GAAG,CAAC,cAAc,CAAA;aAC1D;YACD,IAAI,GAAG,CAAC,wBAAwB,EAAE;gBAChC,iBAAiB,mCACZ,iBAAiB,GACjB,GAAG,CAAC,wBAAwB,CAChC,CAAA;aACF;SACF;QACD,OAAO,iBAAiB,CAAA;IAC1B,CAAC;CACF;AAnED,8CAmEC","sourcesContent":["import { ConnectionOptions, TlsOptions } from 'tls'\r\nimport { ITlsOptions } from './tls-options'\r\nimport { ITcpTransportDescription } from './tcp-transport-description'\r\nconst path = require('path')\r\nconst fs = require('fs')\r\n\r\nexport class TlsOptionsFactory {\r\n static read (filePath: string): string {\r\n const root: string = path.join(__dirname, '../../../')\r\n const fullPath = path.join(root, filePath)\r\n return fs.readFileSync(fullPath,\r\n {\r\n encoding: 'utf8', flag: 'r'\r\n })\r\n }\r\n\r\n static getTlsOptions (tls: ITlsOptions): TlsOptions | null {\r\n let tlsOptions: TlsOptions | null = null\r\n if (tls) {\r\n tlsOptions = {\r\n requestCert: tls.requestCert,\r\n rejectUnauthorized: tls.rejectUnauthorized\r\n } as TlsOptions\r\n\r\n if (tls.key) {\r\n tlsOptions.key = TlsOptionsFactory.read(tls.key)\r\n tlsOptions.cert = tls?.cert ? TlsOptionsFactory.read(tls?.cert) : undefined\r\n }\r\n\r\n if (tls.ca && tls.ca.length > 0) {\r\n tlsOptions.ca = tls.ca.map(i => TlsOptionsFactory.read(i))\r\n }\r\n\r\n if (tls.nodeTlsServerOptions) {\r\n tlsOptions = {\r\n ...tlsOptions,\r\n ...tls.nodeTlsServerOptions\r\n }\r\n }\r\n }\r\n return tlsOptions\r\n }\r\n\r\n static getTlsConnectionOptions (tcp: ITcpTransportDescription): ConnectionOptions | null {\r\n let connectionOptions: ConnectionOptions | null = null\r\n const tls = tcp.tls\r\n if (tls) {\r\n connectionOptions = {\r\n port: tcp.port,\r\n host: tcp.host\r\n } as ConnectionOptions\r\n if (tls.key) {\r\n connectionOptions.key = TlsOptionsFactory.read(tcp.tls?.key ?? '')\r\n connectionOptions.cert = tcp.tls?.cert ? TlsOptionsFactory.read(tcp?.tls?.cert) : undefined\r\n }\r\n if (tcp.tls.ca && tcp.tls.ca.length > 0) {\r\n connectionOptions.ca = tcp.tls.ca.map(i => TlsOptionsFactory.read(i))\r\n }\r\n if (tcp.tls.timeout) {\r\n connectionOptions.timeout = tcp.tls.timeout\r\n }\r\n if (tcp.tls.sessionTimeout) {\r\n connectionOptions.sessionTimeout = tcp.tls.sessionTimeout\r\n }\r\n if (tls.nodeTlsConnectionOptions) {\r\n connectionOptions = {\r\n ...connectionOptions,\r\n ...tls.nodeTlsConnectionOptions\r\n }\r\n }\r\n }\r\n return connectionOptions\r\n }\r\n}\r\n"]}
|
|
@@ -1,10 +1,14 @@
|
|
|
1
|
+
/// <reference types="node" />
|
|
2
|
+
import { ConnectionOptions, TlsOptions } from 'tls';
|
|
1
3
|
export interface ITlsOptions {
|
|
2
|
-
readonly key
|
|
3
|
-
readonly cert
|
|
4
|
+
readonly key?: string;
|
|
5
|
+
readonly cert?: string;
|
|
4
6
|
readonly ca?: string[];
|
|
5
7
|
readonly timeout?: number;
|
|
6
8
|
readonly sessionTimeout?: number;
|
|
7
9
|
readonly enableTrace?: boolean;
|
|
8
10
|
readonly requestCert?: boolean;
|
|
9
11
|
readonly rejectUnauthorized?: boolean;
|
|
12
|
+
readonly nodeTlsConnectionOptions?: ConnectionOptions;
|
|
13
|
+
readonly nodeTlsServerOptions?: TlsOptions;
|
|
10
14
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tls-options.js","sourceRoot":"","sources":["../../../src/transport/tcp/tls-options.ts"],"names":[],"mappings":"","sourcesContent":["
|
|
1
|
+
{"version":3,"file":"tls-options.js","sourceRoot":"","sources":["../../../src/transport/tcp/tls-options.ts"],"names":[],"mappings":"","sourcesContent":["import { ConnectionOptions, TlsOptions } from 'tls'\r\n\r\nexport interface ITlsOptions {\r\n readonly key?: string\r\n readonly cert?: string\r\n readonly ca?: string[]\r\n readonly timeout?: number\r\n readonly sessionTimeout?: number\r\n readonly enableTrace?: boolean\r\n readonly requestCert?: boolean\r\n readonly rejectUnauthorized?: boolean\r\n readonly nodeTlsConnectionOptions?: ConnectionOptions\r\n readonly nodeTlsServerOptions?: TlsOptions\r\n}\r\n"]}
|
package/dist/util/json-helper.js
CHANGED
|
@@ -26,11 +26,12 @@ class JsonHelper {
|
|
|
26
26
|
object[name] = Buffer.from(v, 'utf8');
|
|
27
27
|
break;
|
|
28
28
|
}
|
|
29
|
-
case tag_type_1.TagType.UtcTimestamp:
|
|
29
|
+
case tag_type_1.TagType.UtcTimestamp: {
|
|
30
30
|
const m = moment(v);
|
|
31
31
|
const d = m.toDate();
|
|
32
32
|
object[name] = d;
|
|
33
33
|
break;
|
|
34
|
+
}
|
|
34
35
|
case tag_type_1.TagType.UtcDateOnly: {
|
|
35
36
|
const m = moment(v);
|
|
36
37
|
object[name] = m.toDate();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"json-helper.js","sourceRoot":"","sources":["../../src/util/json-helper.ts"],"names":[],"mappings":";;;AACA,uDAMgC;AAGhC,iCAAiC;AAEjC,qDAAgD;AAEhD,MAAa,UAAU;IAErB,YAA6B,WAA2B;QAA3B,gBAAW,GAAX,WAAW,CAAgB;QADxD,eAAU,GAAmB,IAAI,0BAAc,EAAE,CAAA;IAEjD,CAAC;IAEO,MAAM,CAAC,WAAW,CAAE,MAAoB,EAAE,KAA2B;QAC3E,IAAI,IAAI,GAAW,KAAK,CAAC,UAAU,CAAC,IAAI,CAAA;QACxC,IAAI,CAAC,GAAQ,MAAM,CAAC,IAAI,CAAC,CAAA;QACzB,IAAI,CAAC,IAAI,IAAI,EAAE;YACb,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;YACtB,IAAI,CAAC,KAAK,IAAI,EAAE;gBACd,IAAI,GAAG,KAAK,CAAC,IAAI,CAAA;aAClB;SACF;QACD,IAAI,CAAC,IAAI,IAAI,EAAE;YACb,OAAM;SACP;QACD,QAAQ,KAAK,CAAC,UAAU,CAAC,OAAO,EAAE;YAChC,KAAK,kBAAO,CAAC,OAAO,CAAC,CAAC;gBACpB,MAAM,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,MAAM,CAAC,CAAA;gBACrC,MAAK;aACN;YAED,KAAK,kBAAO,CAAC,YAAY;
|
|
1
|
+
{"version":3,"file":"json-helper.js","sourceRoot":"","sources":["../../src/util/json-helper.ts"],"names":[],"mappings":"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","sourcesContent":["import { ILooseObject } from '../collections/collection'\r\nimport {\r\n ContainedSimpleField,\r\n ContainedFieldSet,\r\n ContainedGroupField,\r\n ContainedComponentField,\r\n FieldsDispatch\r\n} from '../dictionary/contained'\r\nimport { FixDefinitions, MessageDefinition } from '../dictionary/definition'\r\n\r\nimport moment = require('moment')\r\nimport { IFieldDispatcher } from '../dictionary/contained/field-dispatcher'\r\nimport { TagType } from '../buffer/tag/tag-type'\r\n\r\nexport class JsonHelper {\r\n dispatcher: FieldsDispatch = new FieldsDispatch()\r\n constructor (public readonly definitions: FixDefinitions) {\r\n }\r\n\r\n private static patchSimple (object: ILooseObject, field: ContainedSimpleField): void {\r\n let name: string = field.definition.name\r\n let v: any = object[name]\r\n if (v == null) {\r\n v = object[field.name]\r\n if (v !== null) {\r\n name = field.name\r\n }\r\n }\r\n if (v == null) {\r\n return\r\n }\r\n switch (field.definition.tagType) {\r\n case TagType.RawData: {\r\n object[name] = Buffer.from(v, 'utf8')\r\n break\r\n }\r\n\r\n case TagType.UtcTimestamp: {\r\n const m = moment(v)\r\n const d = m.toDate()\r\n object[name] = d\r\n break\r\n }\r\n\r\n case TagType.UtcDateOnly: {\r\n const m = moment(v)\r\n object[name] = m.toDate()\r\n break\r\n }\r\n\r\n case TagType.UtcTimeOnly: {\r\n const m = moment(v)\r\n object[name] = m.toDate()\r\n break\r\n }\r\n\r\n case TagType.LocalDate: {\r\n const m = moment(v)\r\n object[name] = m.toDate()\r\n break\r\n }\r\n\r\n case TagType.Float: {\r\n object[name] = parseFloat(v)\r\n break\r\n }\r\n\r\n case TagType.Int:\r\n case TagType.Length: {\r\n object[name] = parseInt(v, 10)\r\n break\r\n }\r\n }\r\n }\r\n\r\n public fromJson (fileName: string, msgType: string): ILooseObject {\r\n const msg: ILooseObject = require(fileName)\r\n const def: MessageDefinition | null = this.definitions.message.get(msgType)\r\n if (!def) {\r\n return msg\r\n }\r\n if (msg.Batch) {\r\n msg.Batch.forEach((m: ILooseObject) => {\r\n this.patchJsonFields(def, m)\r\n })\r\n } else {\r\n this.patchJsonFields(def, msg)\r\n }\r\n return msg\r\n }\r\n\r\n public patchJsonFields (set: ContainedFieldSet, object: ILooseObject): void {\r\n if (!object) {\r\n return\r\n }\r\n\r\n const dispatcher: IFieldDispatcher = {\r\n simple: (field: ContainedSimpleField) => JsonHelper.patchSimple(object, field),\r\n group: (gf: ContainedGroupField) => this.patchGroup(object, gf),\r\n component: (cf: ContainedComponentField) => this.patchComponent(object, cf)\r\n }\r\n\r\n this.dispatcher.dispatchFields(set.localAttribute, dispatcher)\r\n this.dispatcher.dispatchFields(set.fields, dispatcher)\r\n }\r\n\r\n private patchComponent (object: ILooseObject, cf: ContainedComponentField): void {\r\n const c = object[cf.name] || object[cf.definition.name]\r\n if (c) {\r\n this.patchJsonFields(cf.definition, c)\r\n }\r\n }\r\n\r\n private patchGroup (object: ILooseObject, gf: ContainedGroupField): void {\r\n const arr: ILooseObject[] = object[gf.definition.name] || object[gf.name]\r\n if (arr) {\r\n arr.forEach((o) => {\r\n this.patchJsonFields(gf.definition, o)\r\n })\r\n }\r\n }\r\n}\r\n"]}
|
|
@@ -6,7 +6,7 @@ export declare class MessageGenerator {
|
|
|
6
6
|
private word;
|
|
7
7
|
private length;
|
|
8
8
|
constructor(words: string[], definitions: FixDefinitions);
|
|
9
|
-
static getRandomEnum(field: SimpleFieldDefinition):
|
|
9
|
+
static getRandomEnum(field: SimpleFieldDefinition): any;
|
|
10
10
|
private static randomIntFromInterval;
|
|
11
11
|
private static makeRandomString;
|
|
12
12
|
private static makeBuffer;
|
|
@@ -60,7 +60,7 @@ class MessageGenerator {
|
|
|
60
60
|
return reducer.reduce(set, {
|
|
61
61
|
simple: (a, sf) => {
|
|
62
62
|
const tag = sf.definition.tag;
|
|
63
|
-
|
|
63
|
+
const include = tag === set.firstSimple.definition.tag || this.length > 0 || Math.random() <= density;
|
|
64
64
|
if (include) {
|
|
65
65
|
const val = sf.definition.isEnum() ? MessageGenerator.getRandomEnum(sf.definition) : this.createSimple(sf);
|
|
66
66
|
if (val != null) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"message-generator.js","sourceRoot":"","sources":["../../src/util/message-generator.ts"],"names":[],"mappings":"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","sourcesContent":["import { ILooseObject } from '../collections/collection'\r\nimport { ContainedComponentField, ContainedGroupField, ContainedFieldSet, ContainedSimpleField } from '../dictionary/contained'\r\nimport { FixDefinitions, MessageDefinition, SimpleFieldDefinition } from '../dictionary/definition'\r\nimport { SetReduce } from '../dictionary'\r\nimport { TagType } from '../buffer/tag/tag-type'\r\n\r\nexport class MessageGenerator {\r\n private word: number = 0\r\n private length: number = 0\r\n\r\n constructor (public readonly words: string[], public readonly definitions: FixDefinitions) {\r\n }\r\n\r\n public static getRandomEnum (field: SimpleFieldDefinition) {\r\n const tagType: TagType = field.tagType\r\n const keys: string[] = field.enums.keys()\r\n const choice: string = keys[Math.floor(Math.random() * keys.length)]\r\n switch (tagType) {\r\n case TagType.Int: {\r\n return parseInt(choice, 10)\r\n }\r\n case TagType.Float: {\r\n return parseFloat(choice)\r\n }\r\n case TagType.Boolean: {\r\n return choice === 'Y'\r\n }\r\n default: {\r\n return choice\r\n }\r\n }\r\n }\r\n\r\n private static randomIntFromInterval (min: number, max: number): number {\r\n return Math.floor(Math.random() * (max - min + 1) + min)\r\n }\r\n\r\n private static makeRandomString (len: number): string {\r\n let text: string = ''\r\n const possible: string = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'\r\n\r\n for (let i: number = 0; i < len; i++) {\r\n text += possible.charAt(Math.floor(Math.random() * possible.length))\r\n }\r\n\r\n return text\r\n }\r\n\r\n private static makeBuffer (len: number): Buffer {\r\n return Buffer.from(MessageGenerator.makeRandomString(len))\r\n }\r\n\r\n public generate (msgType: string, density?: number, repeatGroups: boolean = true): ILooseObject {\r\n if (!density) {\r\n density = 1.0\r\n }\r\n density = Math.max(0.2, density)\r\n density = Math.min(1.0, density)\r\n const def: MessageDefinition = this.definitions.message.get(msgType)\r\n if (!def) {\r\n throw new Error(`definitions do not contain type ${msgType}`)\r\n }\r\n return this.toObject(def, density, repeatGroups)\r\n }\r\n\r\n private toObject (set: ContainedFieldSet, density: number, repeatGroups: boolean): ILooseObject {\r\n const reducer = new SetReduce<ILooseObject>()\r\n return reducer.reduce(set, {\r\n simple: (a: ILooseObject, sf: ContainedSimpleField) => {\r\n const tag: number = sf.definition.tag\r\n let include = tag === set.firstSimple.definition.tag || this.length > 0 || Math.random() <= density\r\n if (include) {\r\n const val: any = sf.definition.isEnum() ? MessageGenerator.getRandomEnum(sf.definition) : this.createSimple(sf)\r\n if (val != null) {\r\n a[sf.name] = val\r\n }\r\n }\r\n },\r\n component: (a: ILooseObject, cf: ContainedComponentField) => {\r\n if (cf.name !== 'StandardHeader' && cf.name !== 'StandardTrailer') {\r\n a[cf.name] = this.toObject(cf.definition, density, repeatGroups)\r\n }\r\n },\r\n group: (a: ILooseObject, gf: ContainedGroupField) => {\r\n if (repeatGroups) {\r\n const numberGroups: number = MessageGenerator.randomIntFromInterval(1, 3)\r\n const arr: ILooseObject[] = new Array(numberGroups)\r\n a[gf.name] = arr\r\n for (let j: number = 0; j < numberGroups; ++j) {\r\n arr[j] = this.toObject(gf.definition, density, repeatGroups)\r\n }\r\n }\r\n }\r\n }, {})\r\n }\r\n\r\n private createSimple (field: ContainedSimpleField): any {\r\n const tagType: TagType = field.definition.tagType\r\n switch (tagType) {\r\n\r\n case TagType.String: {\r\n return this.nextString()\r\n }\r\n\r\n case TagType.Float: {\r\n this.length = 0\r\n const sign = MessageGenerator.randomIntFromInterval(1, 10) <= 5 ? 1 : -1\r\n const num = sign * MessageGenerator.randomIntFromInterval(1, 100000)\r\n const raised = MessageGenerator.randomIntFromInterval(1, 8)\r\n const r = num * Math.pow(10, -1 * raised)\r\n // console.log(`sign = ${sign} num = ${num} raised = ${raised} r = ${r} ret = ${ret}`)\r\n return Math.round(r * 1e7) / 1e7\r\n }\r\n\r\n case TagType.Int: {\r\n this.length = 0\r\n return MessageGenerator.randomIntFromInterval(1, 100000)\r\n }\r\n\r\n case TagType.Length: {\r\n this.length = MessageGenerator.randomIntFromInterval(5, 20)\r\n return this.length\r\n }\r\n\r\n case TagType.Boolean: {\r\n this.length = 0\r\n return MessageGenerator.randomIntFromInterval(1, 2) === 1\r\n }\r\n\r\n case TagType.UtcDateOnly: {\r\n this.length = 0\r\n const now: Date = new Date()\r\n return new Date(Date.UTC(now.getUTCFullYear(), now.getUTCMonth(), now.getUTCDate()\r\n , 0, 0, 0, 0))\r\n }\r\n\r\n case TagType.UtcTimeOnly: {\r\n this.length = 0\r\n const s: Date = new Date()\r\n return new Date(Date.UTC(0, 0, 0, s.getUTCHours(), s.getUTCMinutes(),\r\n s.getUTCSeconds(), s.getUTCMilliseconds()))\r\n }\r\n\r\n case TagType.UtcTimestamp: {\r\n this.length = 0\r\n const now: Date = new Date()\r\n return new Date(Date.UTC(now.getUTCFullYear(), now.getUTCMonth(), now.getUTCDate(),\r\n now.getUTCHours(), now.getUTCMinutes(), now.getUTCSeconds()))\r\n }\r\n\r\n case TagType.LocalDate: {\r\n const now = new Date()\r\n return new Date(now.getFullYear(), now.getMonth(), now.getDate()\r\n , 0, 0, 0, 0)\r\n }\r\n\r\n case TagType.RawData: {\r\n const length = this.length\r\n this.length = 0\r\n return length > 0 ? MessageGenerator.makeBuffer(length) : null\r\n }\r\n\r\n default: {\r\n throw new Error(`cannot manage type ${tagType}`)\r\n }\r\n }\r\n }\r\n\r\n private nextString (): string {\r\n const words: string[] = this.words\r\n const w: string = words[this.word++]\r\n if (this.word === words.length) {\r\n this.word = 0\r\n }\r\n return w\r\n }\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"message-generator.js","sourceRoot":"","sources":["../../src/util/message-generator.ts"],"names":[],"mappings":"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","sourcesContent":["import { ILooseObject } from '../collections/collection'\r\nimport { ContainedComponentField, ContainedGroupField, ContainedFieldSet, ContainedSimpleField } from '../dictionary/contained'\r\nimport { FixDefinitions, MessageDefinition, SimpleFieldDefinition } from '../dictionary/definition'\r\nimport { SetReduce } from '../dictionary'\r\nimport { TagType } from '../buffer/tag/tag-type'\r\n\r\nexport class MessageGenerator {\r\n private word: number = 0\r\n private length: number = 0\r\n\r\n constructor (public readonly words: string[], public readonly definitions: FixDefinitions) {\r\n }\r\n\r\n public static getRandomEnum (field: SimpleFieldDefinition): any {\r\n const tagType: TagType = field.tagType\r\n const keys: string[] = field.enums.keys()\r\n const choice: string = keys[Math.floor(Math.random() * keys.length)]\r\n switch (tagType) {\r\n case TagType.Int: {\r\n return parseInt(choice, 10)\r\n }\r\n case TagType.Float: {\r\n return parseFloat(choice)\r\n }\r\n case TagType.Boolean: {\r\n return choice === 'Y'\r\n }\r\n default: {\r\n return choice\r\n }\r\n }\r\n }\r\n\r\n private static randomIntFromInterval (min: number, max: number): number {\r\n return Math.floor(Math.random() * (max - min + 1) + min)\r\n }\r\n\r\n private static makeRandomString (len: number): string {\r\n let text: string = ''\r\n const possible: string = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'\r\n\r\n for (let i: number = 0; i < len; i++) {\r\n text += possible.charAt(Math.floor(Math.random() * possible.length))\r\n }\r\n\r\n return text\r\n }\r\n\r\n private static makeBuffer (len: number): Buffer {\r\n return Buffer.from(MessageGenerator.makeRandomString(len))\r\n }\r\n\r\n public generate (msgType: string, density?: number, repeatGroups: boolean = true): ILooseObject {\r\n if (!density) {\r\n density = 1.0\r\n }\r\n density = Math.max(0.2, density)\r\n density = Math.min(1.0, density)\r\n const def: MessageDefinition | null = this.definitions.message.get(msgType)\r\n if (!def) {\r\n throw new Error(`definitions do not contain type ${msgType}`)\r\n }\r\n return this.toObject(def, density, repeatGroups)\r\n }\r\n\r\n private toObject (set: ContainedFieldSet, density: number, repeatGroups: boolean): ILooseObject {\r\n const reducer = new SetReduce<ILooseObject>()\r\n return reducer.reduce(set, {\r\n simple: (a: ILooseObject, sf: ContainedSimpleField) => {\r\n const tag: number = sf.definition.tag\r\n const include = tag === set.firstSimple.definition.tag || this.length > 0 || Math.random() <= density\r\n if (include) {\r\n const val: any = sf.definition.isEnum() ? MessageGenerator.getRandomEnum(sf.definition) : this.createSimple(sf)\r\n if (val != null) {\r\n a[sf.name] = val\r\n }\r\n }\r\n },\r\n component: (a: ILooseObject, cf: ContainedComponentField) => {\r\n if (cf.name !== 'StandardHeader' && cf.name !== 'StandardTrailer') {\r\n a[cf.name] = this.toObject(cf.definition, density, repeatGroups)\r\n }\r\n },\r\n group: (a: ILooseObject, gf: ContainedGroupField) => {\r\n if (repeatGroups) {\r\n const numberGroups: number = MessageGenerator.randomIntFromInterval(1, 3)\r\n const arr: ILooseObject[] = new Array(numberGroups)\r\n a[gf.name] = arr\r\n for (let j: number = 0; j < numberGroups; ++j) {\r\n arr[j] = this.toObject(gf.definition, density, repeatGroups)\r\n }\r\n }\r\n }\r\n }, {})\r\n }\r\n\r\n private createSimple (field: ContainedSimpleField): any {\r\n const tagType: TagType = field.definition.tagType\r\n switch (tagType) {\r\n case TagType.String: {\r\n return this.nextString()\r\n }\r\n\r\n case TagType.Float: {\r\n this.length = 0\r\n const sign = MessageGenerator.randomIntFromInterval(1, 10) <= 5 ? 1 : -1\r\n const num = sign * MessageGenerator.randomIntFromInterval(1, 100000)\r\n const raised = MessageGenerator.randomIntFromInterval(1, 8)\r\n const r = num * Math.pow(10, -1 * raised)\r\n // console.log(`sign = ${sign} num = ${num} raised = ${raised} r = ${r} ret = ${ret}`)\r\n return Math.round(r * 1e7) / 1e7\r\n }\r\n\r\n case TagType.Int: {\r\n this.length = 0\r\n return MessageGenerator.randomIntFromInterval(1, 100000)\r\n }\r\n\r\n case TagType.Length: {\r\n this.length = MessageGenerator.randomIntFromInterval(5, 20)\r\n return this.length\r\n }\r\n\r\n case TagType.Boolean: {\r\n this.length = 0\r\n return MessageGenerator.randomIntFromInterval(1, 2) === 1\r\n }\r\n\r\n case TagType.UtcDateOnly: {\r\n this.length = 0\r\n const now: Date = new Date()\r\n return new Date(Date.UTC(now.getUTCFullYear(), now.getUTCMonth(), now.getUTCDate()\r\n , 0, 0, 0, 0))\r\n }\r\n\r\n case TagType.UtcTimeOnly: {\r\n this.length = 0\r\n const s: Date = new Date()\r\n return new Date(Date.UTC(0, 0, 0, s.getUTCHours(), s.getUTCMinutes(),\r\n s.getUTCSeconds(), s.getUTCMilliseconds()))\r\n }\r\n\r\n case TagType.UtcTimestamp: {\r\n this.length = 0\r\n const now: Date = new Date()\r\n return new Date(Date.UTC(now.getUTCFullYear(), now.getUTCMonth(), now.getUTCDate(),\r\n now.getUTCHours(), now.getUTCMinutes(), now.getUTCSeconds()))\r\n }\r\n\r\n case TagType.LocalDate: {\r\n const now = new Date()\r\n return new Date(now.getFullYear(), now.getMonth(), now.getDate()\r\n , 0, 0, 0, 0)\r\n }\r\n\r\n case TagType.RawData: {\r\n const length = this.length\r\n this.length = 0\r\n return length > 0 ? MessageGenerator.makeBuffer(length) : null\r\n }\r\n\r\n default: {\r\n throw new Error(`cannot manage type ${tagType}`)\r\n }\r\n }\r\n }\r\n\r\n private nextString (): string {\r\n const words: string[] = this.words\r\n const w: string = words[this.word++]\r\n if (this.word === words.length) {\r\n this.word = 0\r\n }\r\n return w\r\n }\r\n}\r\n"]}
|