@3rd-eye-labs/openmm 0.0.1 → 0.1.1
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/README.md +6 -1
- package/dist/cli/cli.js +4 -5
- package/dist/cli/cli.js.map +1 -1
- package/dist/cli/commands/balance.d.ts.map +1 -1
- package/dist/cli/commands/balance.js +1 -1
- package/dist/cli/commands/balance.js.map +1 -1
- package/dist/cli/commands/grid.d.ts +3 -0
- package/dist/cli/commands/grid.d.ts.map +1 -0
- package/dist/cli/commands/grid.js +103 -0
- package/dist/cli/commands/grid.js.map +1 -0
- package/dist/cli/commands/multi-trade.d.ts +3 -0
- package/dist/cli/commands/multi-trade.d.ts.map +1 -0
- package/dist/cli/commands/multi-trade.js +175 -0
- package/dist/cli/commands/multi-trade.js.map +1 -0
- package/dist/cli/commands/orderbook.js +1 -1
- package/dist/cli/commands/orderbook.js.map +1 -1
- package/dist/cli/commands/orders.d.ts.map +1 -1
- package/dist/cli/commands/orders.js +3 -4
- package/dist/cli/commands/orders.js.map +1 -1
- package/dist/cli/commands/pool-discovery.d.ts.map +1 -1
- package/dist/cli/commands/pool-discovery.js +15 -8
- package/dist/cli/commands/pool-discovery.js.map +1 -1
- package/dist/cli/commands/price-comparison.d.ts +3 -0
- package/dist/cli/commands/price-comparison.d.ts.map +1 -0
- package/dist/cli/commands/price-comparison.js +103 -0
- package/dist/cli/commands/price-comparison.js.map +1 -0
- package/dist/cli/commands/ticker.d.ts.map +1 -1
- package/dist/cli/commands/ticker.js.map +1 -1
- package/dist/cli/commands/trade.d.ts.map +1 -1
- package/dist/cli/commands/trade.js +135 -18
- package/dist/cli/commands/trade.js.map +1 -1
- package/dist/cli/commands/trades.d.ts.map +1 -1
- package/dist/cli/commands/trades.js +2 -3
- package/dist/cli/commands/trades.js.map +1 -1
- package/dist/cli/exchange-factory.d.ts.map +1 -1
- package/dist/cli/exchange-factory.js +6 -6
- package/dist/cli/exchange-factory.js.map +1 -1
- package/dist/cli/pool-discovery-core.d.ts +2 -1
- package/dist/cli/pool-discovery-core.d.ts.map +1 -1
- package/dist/cli/pool-discovery-core.js +69 -39
- package/dist/cli/pool-discovery-core.js.map +1 -1
- package/dist/cli/pool-discovery.d.ts +56 -0
- package/dist/cli/pool-discovery.d.ts.map +1 -0
- package/dist/cli/pool-discovery.js +283 -0
- package/dist/cli/pool-discovery.js.map +1 -0
- package/dist/cli/utils/error-handler.d.ts.map +1 -1
- package/dist/cli/utils/error-handler.js +6 -5
- package/dist/cli/utils/error-handler.js.map +1 -1
- package/dist/config/environment.d.ts.map +1 -1
- package/dist/config/environment.js +3 -1
- package/dist/config/environment.js.map +1 -1
- package/dist/config/launcher-config.d.ts +13 -0
- package/dist/config/launcher-config.d.ts.map +1 -1
- package/dist/config/launcher-config.js +3 -1
- package/dist/config/launcher-config.js.map +1 -1
- package/dist/config/price-aggregation.d.ts +1 -1
- package/dist/config/price-aggregation.d.ts.map +1 -1
- package/dist/config/price-aggregation.js +20 -20
- package/dist/config/price-aggregation.js.map +1 -1
- package/dist/core/exchange/base-exchange-connector.d.ts.map +1 -1
- package/dist/core/exchange/base-exchange-connector.js +1 -5
- package/dist/core/exchange/base-exchange-connector.js.map +1 -1
- package/dist/core/exchange/base-exchange-data-mapper.d.ts.map +1 -1
- package/dist/core/exchange/base-exchange-data-mapper.js +1 -1
- package/dist/core/exchange/base-exchange-data-mapper.js.map +1 -1
- package/dist/core/price-aggregation/cardano-price-service.d.ts +2 -2
- package/dist/core/price-aggregation/cardano-price-service.d.ts.map +1 -1
- package/dist/core/price-aggregation/cardano-price-service.js +13 -13
- package/dist/core/price-aggregation/cardano-price-service.js.map +1 -1
- package/dist/core/price-aggregation/index.d.ts +1 -1
- package/dist/core/price-aggregation/index.d.ts.map +1 -1
- package/dist/core/price-aggregation/iris-api-client.d.ts.map +1 -1
- package/dist/core/price-aggregation/iris-api-client.js +5 -5
- package/dist/core/price-aggregation/iris-api-client.js.map +1 -1
- package/dist/core/price-aggregation/iris-pool-discovery.d.ts +2 -2
- package/dist/core/price-aggregation/iris-pool-discovery.d.ts.map +1 -1
- package/dist/core/price-aggregation/iris-pool-discovery.js +3 -3
- package/dist/core/price-aggregation/iris-pool-discovery.js.map +1 -1
- package/dist/core/price-aggregation/multi-exchange-price-service.d.ts +38 -0
- package/dist/core/price-aggregation/multi-exchange-price-service.d.ts.map +1 -0
- package/dist/core/price-aggregation/multi-exchange-price-service.js +123 -0
- package/dist/core/price-aggregation/multi-exchange-price-service.js.map +1 -0
- package/dist/core/price-aggregation/price-cache.d.ts +55 -0
- package/dist/core/price-aggregation/price-cache.d.ts.map +1 -0
- package/dist/core/price-aggregation/price-cache.js +152 -0
- package/dist/core/price-aggregation/price-cache.js.map +1 -0
- package/dist/core/price-aggregation/price-calculator.d.ts.map +1 -1
- package/dist/core/price-aggregation/price-calculator.js +3 -3
- package/dist/core/price-aggregation/price-calculator.js.map +1 -1
- package/dist/core/risk-management/risk-manager.d.ts.map +1 -1
- package/dist/core/risk-management/risk-manager.js +2 -2
- package/dist/core/risk-management/risk-manager.js.map +1 -1
- package/dist/core/strategy/strategy-factory.d.ts +5 -0
- package/dist/core/strategy/strategy-factory.d.ts.map +1 -1
- package/dist/core/strategy/strategy-factory.js +127 -5
- package/dist/core/strategy/strategy-factory.js.map +1 -1
- package/dist/examples/mexc-connector-comprehensive-test.d.ts +15 -0
- package/dist/examples/mexc-connector-comprehensive-test.d.ts.map +1 -0
- package/dist/examples/mexc-connector-comprehensive-test.js +514 -0
- package/dist/examples/mexc-connector-comprehensive-test.js.map +1 -0
- package/dist/examples/mexc-order-update-test.d.ts +4 -0
- package/dist/examples/mexc-order-update-test.d.ts.map +1 -0
- package/dist/examples/mexc-order-update-test.js +186 -0
- package/dist/examples/mexc-order-update-test.js.map +1 -0
- package/dist/examples/mexc-test.d.ts +9 -0
- package/dist/examples/mexc-test.d.ts.map +1 -0
- package/dist/examples/mexc-test.js +218 -0
- package/dist/examples/mexc-test.js.map +1 -0
- package/dist/examples/mexc-trades-debug.d.ts +2 -0
- package/dist/examples/mexc-trades-debug.d.ts.map +1 -0
- package/dist/examples/mexc-trades-debug.js +101 -0
- package/dist/examples/mexc-trades-debug.js.map +1 -0
- package/dist/examples/mexc-trades-subscription-debug.d.ts +2 -0
- package/dist/examples/mexc-trades-subscription-debug.d.ts.map +1 -0
- package/dist/examples/mexc-trades-subscription-debug.js +150 -0
- package/dist/examples/mexc-trades-subscription-debug.js.map +1 -0
- package/dist/examples/mexc-websocket-test.d.ts +8 -0
- package/dist/examples/mexc-websocket-test.d.ts.map +1 -0
- package/dist/examples/mexc-websocket-test.js +115 -0
- package/dist/examples/mexc-websocket-test.js.map +1 -0
- package/dist/examples/test-protobuf-status-detection.d.ts +9 -0
- package/dist/examples/test-protobuf-status-detection.d.ts.map +1 -0
- package/dist/examples/test-protobuf-status-detection.js +83 -0
- package/dist/examples/test-protobuf-status-detection.js.map +1 -0
- package/dist/exchanges/base-exchange-connector.d.ts +33 -0
- package/dist/exchanges/base-exchange-connector.d.ts.map +1 -0
- package/dist/exchanges/base-exchange-connector.js +55 -0
- package/dist/exchanges/base-exchange-connector.js.map +1 -0
- package/dist/exchanges/bitget/bitget-auth.d.ts +66 -0
- package/dist/exchanges/bitget/bitget-auth.d.ts.map +1 -0
- package/dist/exchanges/bitget/bitget-auth.js +203 -0
- package/dist/exchanges/bitget/bitget-auth.js.map +1 -0
- package/dist/exchanges/bitget/bitget-connector.d.ts +255 -0
- package/dist/exchanges/bitget/bitget-connector.d.ts.map +1 -0
- package/dist/exchanges/bitget/bitget-connector.js +709 -0
- package/dist/exchanges/bitget/bitget-connector.js.map +1 -0
- package/dist/exchanges/bitget/bitget-data-mapper.d.ts +47 -0
- package/dist/exchanges/bitget/bitget-data-mapper.d.ts.map +1 -0
- package/dist/exchanges/bitget/bitget-data-mapper.js +147 -0
- package/dist/exchanges/bitget/bitget-data-mapper.js.map +1 -0
- package/dist/exchanges/bitget/bitget-user-stream.d.ts +126 -0
- package/dist/exchanges/bitget/bitget-user-stream.d.ts.map +1 -0
- package/dist/exchanges/bitget/bitget-user-stream.js +474 -0
- package/dist/exchanges/bitget/bitget-user-stream.js.map +1 -0
- package/dist/exchanges/bitget/bitget-utils.d.ts +17 -0
- package/dist/exchanges/bitget/bitget-utils.d.ts.map +1 -0
- package/dist/exchanges/bitget/bitget-utils.js +60 -0
- package/dist/exchanges/bitget/bitget-utils.js.map +1 -0
- package/dist/exchanges/bitget/bitget-websocket.d.ts +124 -0
- package/dist/exchanges/bitget/bitget-websocket.d.ts.map +1 -0
- package/dist/exchanges/bitget/bitget-websocket.js +434 -0
- package/dist/exchanges/bitget/bitget-websocket.js.map +1 -0
- package/dist/exchanges/gateio/gateio-auth.d.ts +69 -0
- package/dist/exchanges/gateio/gateio-auth.d.ts.map +1 -0
- package/dist/exchanges/gateio/gateio-auth.js +205 -0
- package/dist/exchanges/gateio/gateio-auth.js.map +1 -0
- package/dist/exchanges/gateio/gateio-connector.d.ts +182 -0
- package/dist/exchanges/gateio/gateio-connector.d.ts.map +1 -0
- package/dist/exchanges/gateio/gateio-connector.js +605 -0
- package/dist/exchanges/gateio/gateio-connector.js.map +1 -0
- package/dist/exchanges/gateio/gateio-data-mapper.d.ts +57 -0
- package/dist/exchanges/gateio/gateio-data-mapper.d.ts.map +1 -0
- package/dist/exchanges/gateio/gateio-data-mapper.js +184 -0
- package/dist/exchanges/gateio/gateio-data-mapper.js.map +1 -0
- package/dist/exchanges/gateio/gateio-user-stream.d.ts +120 -0
- package/dist/exchanges/gateio/gateio-user-stream.d.ts.map +1 -0
- package/dist/exchanges/gateio/gateio-user-stream.js +384 -0
- package/dist/exchanges/gateio/gateio-user-stream.js.map +1 -0
- package/dist/exchanges/gateio/gateio-utils.d.ts +45 -0
- package/dist/exchanges/gateio/gateio-utils.d.ts.map +1 -0
- package/dist/exchanges/gateio/gateio-utils.js +138 -0
- package/dist/exchanges/gateio/gateio-utils.js.map +1 -0
- package/dist/exchanges/gateio/gateio-websocket.d.ts +145 -0
- package/dist/exchanges/gateio/gateio-websocket.d.ts.map +1 -0
- package/dist/exchanges/gateio/gateio-websocket.js +469 -0
- package/dist/exchanges/gateio/gateio-websocket.js.map +1 -0
- package/dist/exchanges/kraken/kraken-auth.d.ts +12 -0
- package/dist/exchanges/kraken/kraken-auth.d.ts.map +1 -0
- package/dist/exchanges/kraken/kraken-auth.js +68 -0
- package/dist/exchanges/kraken/kraken-auth.js.map +1 -0
- package/dist/exchanges/kraken/kraken-connector.d.ts +38 -0
- package/dist/exchanges/kraken/kraken-connector.d.ts.map +1 -0
- package/dist/exchanges/kraken/kraken-connector.js +355 -0
- package/dist/exchanges/kraken/kraken-connector.js.map +1 -0
- package/dist/exchanges/kraken/kraken-data-mapper.d.ts +14 -0
- package/dist/exchanges/kraken/kraken-data-mapper.d.ts.map +1 -0
- package/dist/exchanges/kraken/kraken-data-mapper.js +169 -0
- package/dist/exchanges/kraken/kraken-data-mapper.js.map +1 -0
- package/dist/exchanges/kraken/kraken-utils.d.ts +52 -0
- package/dist/exchanges/kraken/kraken-utils.d.ts.map +1 -0
- package/dist/exchanges/kraken/kraken-utils.js +206 -0
- package/dist/exchanges/kraken/kraken-utils.js.map +1 -0
- package/dist/exchanges/kraken/kraken-websocket.d.ts +64 -0
- package/dist/exchanges/kraken/kraken-websocket.d.ts.map +1 -0
- package/dist/exchanges/kraken/kraken-websocket.js +667 -0
- package/dist/exchanges/kraken/kraken-websocket.js.map +1 -0
- package/dist/exchanges/kraken/test-kraken-websocket.d.ts +19 -0
- package/dist/exchanges/kraken/test-kraken-websocket.d.ts.map +1 -0
- package/dist/exchanges/kraken/test-kraken-websocket.js +413 -0
- package/dist/exchanges/kraken/test-kraken-websocket.js.map +1 -0
- package/dist/exchanges/mexc/mexc-auth.d.ts.map +1 -1
- package/dist/exchanges/mexc/mexc-auth.js +5 -5
- package/dist/exchanges/mexc/mexc-auth.js.map +1 -1
- package/dist/exchanges/mexc/mexc-connector.d.ts.map +1 -1
- package/dist/exchanges/mexc/mexc-connector.js +12 -13
- package/dist/exchanges/mexc/mexc-connector.js.map +1 -1
- package/dist/exchanges/mexc/mexc-data-mapper.d.ts.map +1 -1
- package/dist/exchanges/mexc/mexc-data-mapper.js +6 -6
- package/dist/exchanges/mexc/mexc-data-mapper.js.map +1 -1
- package/dist/exchanges/mexc/mexc-protobuf-decoder.d.ts.map +1 -1
- package/dist/exchanges/mexc/mexc-protobuf-decoder.js +14 -13
- package/dist/exchanges/mexc/mexc-protobuf-decoder.js.map +1 -1
- package/dist/exchanges/mexc/mexc-user-stream.d.ts.map +1 -1
- package/dist/exchanges/mexc/mexc-user-stream.js +5 -5
- package/dist/exchanges/mexc/mexc-user-stream.js.map +1 -1
- package/dist/exchanges/mexc/mexc-utils.d.ts +1 -5
- package/dist/exchanges/mexc/mexc-utils.d.ts.map +1 -1
- package/dist/exchanges/mexc/mexc-utils.js +33 -39
- package/dist/exchanges/mexc/mexc-utils.js.map +1 -1
- package/dist/exchanges/mexc/mexc-websocket.d.ts.map +1 -1
- package/dist/exchanges/mexc/mexc-websocket.js +45 -31
- package/dist/exchanges/mexc/mexc-websocket.js.map +1 -1
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +10 -1
- package/dist/index.js.map +1 -1
- package/dist/mcp/resources/index.d.ts +3 -0
- package/dist/mcp/resources/index.d.ts.map +1 -0
- package/dist/mcp/resources/index.js +11 -0
- package/dist/mcp/resources/index.js.map +1 -0
- package/dist/mcp/server.d.ts +4 -0
- package/dist/mcp/server.d.ts.map +1 -0
- package/dist/mcp/server.js +29 -0
- package/dist/mcp/server.js.map +1 -0
- package/dist/mcp/tools/index.d.ts +3 -0
- package/dist/mcp/tools/index.d.ts.map +1 -0
- package/dist/mcp/tools/index.js +12 -0
- package/dist/mcp/tools/index.js.map +1 -0
- package/dist/strategies/grid/grid-calculator.d.ts +63 -4
- package/dist/strategies/grid/grid-calculator.d.ts.map +1 -1
- package/dist/strategies/grid/grid-calculator.js +190 -15
- package/dist/strategies/grid/grid-calculator.js.map +1 -1
- package/dist/strategies/grid/grid-order-manager.d.ts +9 -4
- package/dist/strategies/grid/grid-order-manager.d.ts.map +1 -1
- package/dist/strategies/grid/grid-order-manager.js +58 -15
- package/dist/strategies/grid/grid-order-manager.js.map +1 -1
- package/dist/strategies/grid/grid-strategy.d.ts +11 -0
- package/dist/strategies/grid/grid-strategy.d.ts.map +1 -1
- package/dist/strategies/grid/grid-strategy.js +127 -20
- package/dist/strategies/grid/grid-strategy.js.map +1 -1
- package/dist/strategies/grid/volatility-tracker.d.ts +67 -0
- package/dist/strategies/grid/volatility-tracker.d.ts.map +1 -0
- package/dist/strategies/grid/volatility-tracker.js +109 -0
- package/dist/strategies/grid/volatility-tracker.js.map +1 -0
- package/dist/tests/fixtures/test-helpers.d.ts +5 -0
- package/dist/tests/fixtures/test-helpers.d.ts.map +1 -0
- package/dist/tests/fixtures/test-helpers.js +8 -0
- package/dist/tests/fixtures/test-helpers.js.map +1 -0
- package/dist/tests/integration/exchanges/mexc/mexc-integration.test.d.ts +2 -0
- package/dist/tests/integration/exchanges/mexc/mexc-integration.test.d.ts.map +1 -0
- package/dist/tests/integration/exchanges/mexc/mexc-integration.test.js +237 -0
- package/dist/tests/integration/exchanges/mexc/mexc-integration.test.js.map +1 -0
- package/dist/tests/integration/price-aggregation/cardano-price-service.test.d.ts +2 -0
- package/dist/tests/integration/price-aggregation/cardano-price-service.test.d.ts.map +1 -0
- package/dist/tests/integration/price-aggregation/cardano-price-service.test.js +57 -0
- package/dist/tests/integration/price-aggregation/cardano-price-service.test.js.map +1 -0
- package/dist/tests/integration/price-aggregation/price-aggregation-integration.test.d.ts +2 -0
- package/dist/tests/integration/price-aggregation/price-aggregation-integration.test.d.ts.map +1 -0
- package/dist/tests/integration/price-aggregation/price-aggregation-integration.test.js +141 -0
- package/dist/tests/integration/price-aggregation/price-aggregation-integration.test.js.map +1 -0
- package/dist/tests/integration/strategies/grid/grid-strategy-e2e.test.d.ts +2 -0
- package/dist/tests/integration/strategies/grid/grid-strategy-e2e.test.d.ts.map +1 -0
- package/dist/tests/integration/strategies/grid/grid-strategy-e2e.test.js +375 -0
- package/dist/tests/integration/strategies/grid/grid-strategy-e2e.test.js.map +1 -0
- package/dist/tests/unit/cli/exchange-factory.test.d.ts +2 -0
- package/dist/tests/unit/cli/exchange-factory.test.d.ts.map +1 -0
- package/dist/tests/unit/cli/exchange-factory.test.js +148 -0
- package/dist/tests/unit/cli/exchange-factory.test.js.map +1 -0
- package/dist/tests/unit/config/environment.test.d.ts +2 -0
- package/dist/tests/unit/config/environment.test.d.ts.map +1 -0
- package/dist/tests/unit/config/environment.test.js +158 -0
- package/dist/tests/unit/config/environment.test.js.map +1 -0
- package/dist/tests/unit/config/launcher-config.test.d.ts +2 -0
- package/dist/tests/unit/config/launcher-config.test.d.ts.map +1 -0
- package/dist/tests/unit/config/launcher-config.test.js +117 -0
- package/dist/tests/unit/config/launcher-config.test.js.map +1 -0
- package/dist/tests/unit/config/price-aggregation.test.d.ts +2 -0
- package/dist/tests/unit/config/price-aggregation.test.d.ts.map +1 -0
- package/dist/tests/unit/config/price-aggregation.test.js +144 -0
- package/dist/tests/unit/config/price-aggregation.test.js.map +1 -0
- package/dist/tests/unit/core/exchange/base-exchange-connector.test.d.ts +2 -0
- package/dist/tests/unit/core/exchange/base-exchange-connector.test.d.ts.map +1 -0
- package/dist/tests/unit/core/exchange/base-exchange-connector.test.js +191 -0
- package/dist/tests/unit/core/exchange/base-exchange-connector.test.js.map +1 -0
- package/dist/tests/unit/core/exchange/base-exchange-data-mapper.test.d.ts +2 -0
- package/dist/tests/unit/core/exchange/base-exchange-data-mapper.test.d.ts.map +1 -0
- package/dist/tests/unit/core/exchange/base-exchange-data-mapper.test.js +324 -0
- package/dist/tests/unit/core/exchange/base-exchange-data-mapper.test.js.map +1 -0
- package/dist/tests/unit/core/price-aggregation/cardano-price-service.test.d.ts +2 -0
- package/dist/tests/unit/core/price-aggregation/cardano-price-service.test.d.ts.map +1 -0
- package/dist/tests/unit/core/price-aggregation/cardano-price-service.test.js +177 -0
- package/dist/tests/unit/core/price-aggregation/cardano-price-service.test.js.map +1 -0
- package/dist/tests/unit/core/price-aggregation/iris-api-client.test.d.ts +2 -0
- package/dist/tests/unit/core/price-aggregation/iris-api-client.test.d.ts.map +1 -0
- package/dist/tests/unit/core/price-aggregation/iris-api-client.test.js +168 -0
- package/dist/tests/unit/core/price-aggregation/iris-api-client.test.js.map +1 -0
- package/dist/tests/unit/core/price-aggregation/iris-pool-discovery.test.d.ts +2 -0
- package/dist/tests/unit/core/price-aggregation/iris-pool-discovery.test.d.ts.map +1 -0
- package/dist/tests/unit/core/price-aggregation/iris-pool-discovery.test.js +217 -0
- package/dist/tests/unit/core/price-aggregation/iris-pool-discovery.test.js.map +1 -0
- package/dist/tests/unit/core/price-aggregation/price-calculator.test.d.ts +2 -0
- package/dist/tests/unit/core/price-aggregation/price-calculator.test.d.ts.map +1 -0
- package/dist/tests/unit/core/price-aggregation/price-calculator.test.js +229 -0
- package/dist/tests/unit/core/price-aggregation/price-calculator.test.js.map +1 -0
- package/dist/tests/unit/core/risk-management/risk-manager.test.d.ts +2 -0
- package/dist/tests/unit/core/risk-management/risk-manager.test.d.ts.map +1 -0
- package/dist/tests/unit/core/risk-management/risk-manager.test.js +194 -0
- package/dist/tests/unit/core/risk-management/risk-manager.test.js.map +1 -0
- package/dist/tests/unit/core/strategy/base-strategy.test.d.ts +2 -0
- package/dist/tests/unit/core/strategy/base-strategy.test.d.ts.map +1 -0
- package/dist/tests/unit/core/strategy/base-strategy.test.js +254 -0
- package/dist/tests/unit/core/strategy/base-strategy.test.js.map +1 -0
- package/dist/tests/unit/core/strategy/strategy-factory.test.d.ts +2 -0
- package/dist/tests/unit/core/strategy/strategy-factory.test.d.ts.map +1 -0
- package/dist/tests/unit/core/strategy/strategy-factory.test.js +213 -0
- package/dist/tests/unit/core/strategy/strategy-factory.test.js.map +1 -0
- package/dist/tests/unit/exchanges/mexc/mexc-auth.test.d.ts +2 -0
- package/dist/tests/unit/exchanges/mexc/mexc-auth.test.d.ts.map +1 -0
- package/dist/tests/unit/exchanges/mexc/mexc-auth.test.js +452 -0
- package/dist/tests/unit/exchanges/mexc/mexc-auth.test.js.map +1 -0
- package/dist/tests/unit/exchanges/mexc/mexc-connector.test.d.ts +2 -0
- package/dist/tests/unit/exchanges/mexc/mexc-connector.test.d.ts.map +1 -0
- package/dist/tests/unit/exchanges/mexc/mexc-connector.test.js +1419 -0
- package/dist/tests/unit/exchanges/mexc/mexc-connector.test.js.map +1 -0
- package/dist/tests/unit/exchanges/mexc/mexc-data-mapper.test.d.ts +2 -0
- package/dist/tests/unit/exchanges/mexc/mexc-data-mapper.test.d.ts.map +1 -0
- package/dist/tests/unit/exchanges/mexc/mexc-data-mapper.test.js +435 -0
- package/dist/tests/unit/exchanges/mexc/mexc-data-mapper.test.js.map +1 -0
- package/dist/tests/unit/exchanges/mexc/mexc-protobuf-decoder.test.d.ts +2 -0
- package/dist/tests/unit/exchanges/mexc/mexc-protobuf-decoder.test.d.ts.map +1 -0
- package/dist/tests/unit/exchanges/mexc/mexc-protobuf-decoder.test.js +314 -0
- package/dist/tests/unit/exchanges/mexc/mexc-protobuf-decoder.test.js.map +1 -0
- package/dist/tests/unit/exchanges/mexc/mexc-protobuf-status-detection.test.d.ts +2 -0
- package/dist/tests/unit/exchanges/mexc/mexc-protobuf-status-detection.test.d.ts.map +1 -0
- package/dist/tests/unit/exchanges/mexc/mexc-protobuf-status-detection.test.js +178 -0
- package/dist/tests/unit/exchanges/mexc/mexc-protobuf-status-detection.test.js.map +1 -0
- package/dist/tests/unit/exchanges/mexc/mexc-user-stream.test.d.ts +2 -0
- package/dist/tests/unit/exchanges/mexc/mexc-user-stream.test.d.ts.map +1 -0
- package/dist/tests/unit/exchanges/mexc/mexc-user-stream.test.js +502 -0
- package/dist/tests/unit/exchanges/mexc/mexc-user-stream.test.js.map +1 -0
- package/dist/tests/unit/exchanges/mexc/mexc-utils.test.d.ts +2 -0
- package/dist/tests/unit/exchanges/mexc/mexc-utils.test.d.ts.map +1 -0
- package/dist/tests/unit/exchanges/mexc/mexc-utils.test.js +317 -0
- package/dist/tests/unit/exchanges/mexc/mexc-utils.test.js.map +1 -0
- package/dist/tests/unit/exchanges/mexc/mexc-websocket.test.d.ts +2 -0
- package/dist/tests/unit/exchanges/mexc/mexc-websocket.test.d.ts.map +1 -0
- package/dist/tests/unit/exchanges/mexc/mexc-websocket.test.js +843 -0
- package/dist/tests/unit/exchanges/mexc/mexc-websocket.test.js.map +1 -0
- package/dist/tests/unit/strategies/grid/grid-calculator.test.d.ts +2 -0
- package/dist/tests/unit/strategies/grid/grid-calculator.test.d.ts.map +1 -0
- package/dist/tests/unit/strategies/grid/grid-calculator.test.js +67 -0
- package/dist/tests/unit/strategies/grid/grid-calculator.test.js.map +1 -0
- package/dist/tests/unit/strategies/grid/grid-order-manager.test.d.ts +2 -0
- package/dist/tests/unit/strategies/grid/grid-order-manager.test.d.ts.map +1 -0
- package/dist/tests/unit/strategies/grid/grid-order-manager.test.js +211 -0
- package/dist/tests/unit/strategies/grid/grid-order-manager.test.js.map +1 -0
- package/dist/tests/unit/strategies/grid/grid-strategy-simple.test.d.ts +2 -0
- package/dist/tests/unit/strategies/grid/grid-strategy-simple.test.d.ts.map +1 -0
- package/dist/tests/unit/strategies/grid/grid-strategy-simple.test.js +197 -0
- package/dist/tests/unit/strategies/grid/grid-strategy-simple.test.js.map +1 -0
- package/dist/tests/unit/strategies/grid/grid-strategy.test.d.ts +2 -0
- package/dist/tests/unit/strategies/grid/grid-strategy.test.d.ts.map +1 -0
- package/dist/tests/unit/strategies/grid/grid-strategy.test.js +429 -0
- package/dist/tests/unit/strategies/grid/grid-strategy.test.js.map +1 -0
- package/dist/tests/unit/utils/logger.test.d.ts +2 -0
- package/dist/tests/unit/utils/logger.test.d.ts.map +1 -0
- package/dist/tests/unit/utils/logger.test.js +260 -0
- package/dist/tests/unit/utils/logger.test.js.map +1 -0
- package/dist/tests/unit/utils/symbol-utils.test.d.ts +2 -0
- package/dist/tests/unit/utils/symbol-utils.test.d.ts.map +1 -0
- package/dist/tests/unit/utils/symbol-utils.test.js +178 -0
- package/dist/tests/unit/utils/symbol-utils.test.js.map +1 -0
- package/dist/types/bitget-raw.d.ts +75 -0
- package/dist/types/bitget-raw.d.ts.map +1 -0
- package/dist/types/bitget-raw.js +10 -0
- package/dist/types/bitget-raw.js.map +1 -0
- package/dist/types/bitget.d.ts +35 -0
- package/dist/types/bitget.d.ts.map +1 -0
- package/dist/types/bitget.js +8 -0
- package/dist/types/bitget.js.map +1 -0
- package/dist/types/gateio-raw.d.ts +104 -0
- package/dist/types/gateio-raw.d.ts.map +1 -0
- package/dist/types/gateio-raw.js +7 -0
- package/dist/types/gateio-raw.js.map +1 -0
- package/dist/types/gateio.d.ts +41 -0
- package/dist/types/gateio.d.ts.map +1 -0
- package/dist/types/gateio.js +8 -0
- package/dist/types/gateio.js.map +1 -0
- package/dist/types/grid.d.ts +77 -0
- package/dist/types/grid.d.ts.map +1 -1
- package/dist/types/index.d.ts +6 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js +6 -0
- package/dist/types/index.js.map +1 -1
- package/dist/types/kraken-raw.d.ts +89 -0
- package/dist/types/kraken-raw.d.ts.map +1 -0
- package/dist/types/kraken-raw.js +10 -0
- package/dist/types/kraken-raw.js.map +1 -0
- package/dist/types/kraken.d.ts +44 -0
- package/dist/types/kraken.d.ts.map +1 -0
- package/dist/types/kraken.js +3 -0
- package/dist/types/kraken.js.map +1 -0
- package/dist/types/mexc.d.ts +9 -0
- package/dist/types/mexc.d.ts.map +1 -1
- package/dist/types/price-aggregation.d.ts +31 -0
- package/dist/types/price-aggregation.d.ts.map +1 -0
- package/dist/types/price-aggregation.js +6 -0
- package/dist/types/price-aggregation.js.map +1 -0
- package/dist/types/price.d.ts +23 -0
- package/dist/types/price.d.ts.map +1 -1
- package/dist/types/strategy.d.ts +5 -0
- package/dist/types/strategy.d.ts.map +1 -1
- package/dist/utils/crypto.d.ts +15 -0
- package/dist/utils/crypto.d.ts.map +1 -0
- package/dist/utils/crypto.js +50 -0
- package/dist/utils/crypto.js.map +1 -0
- package/dist/utils/exchange-utils.d.ts +194 -0
- package/dist/utils/exchange-utils.d.ts.map +1 -0
- package/dist/utils/exchange-utils.js +455 -0
- package/dist/utils/exchange-utils.js.map +1 -0
- package/dist/utils/index.d.ts +1 -0
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +3 -1
- package/dist/utils/index.js.map +1 -1
- package/dist/utils/logger.d.ts +1 -1
- package/dist/utils/logger.d.ts.map +1 -1
- package/dist/utils/logger.js +7 -7
- package/dist/utils/logger.js.map +1 -1
- package/dist/utils/validation.d.ts +36 -0
- package/dist/utils/validation.d.ts.map +1 -0
- package/dist/utils/validation.js +174 -0
- package/dist/utils/validation.js.map +1 -0
- package/package.json +7 -1
|
@@ -0,0 +1,455 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ExchangeUtils = void 0;
|
|
4
|
+
const symbol_utils_1 = require("./symbol-utils");
|
|
5
|
+
/**
|
|
6
|
+
* Shared utility functions for exchange operations
|
|
7
|
+
*
|
|
8
|
+
* This module provides common functionality that can be used across different exchange connectors
|
|
9
|
+
* to avoid code duplication and maintain consistency.
|
|
10
|
+
*/
|
|
11
|
+
class ExchangeUtils {
|
|
12
|
+
/**
|
|
13
|
+
* Validate common order parameters
|
|
14
|
+
*
|
|
15
|
+
* @param symbol - Trading pair symbol
|
|
16
|
+
* @param type - Order type
|
|
17
|
+
* @param side - Order side
|
|
18
|
+
* @param amount - Order amount
|
|
19
|
+
* @param price - Optional price for limit orders
|
|
20
|
+
* @throws Error if parameters are invalid
|
|
21
|
+
*/
|
|
22
|
+
static validateOrderParams(symbol, type, side, amount, price) {
|
|
23
|
+
if (!symbol || !type || !side || !amount) {
|
|
24
|
+
throw new Error('Missing required order parameters: symbol, type, side, and amount are required');
|
|
25
|
+
}
|
|
26
|
+
if (amount <= 0) {
|
|
27
|
+
throw new Error('Order amount must be greater than 0');
|
|
28
|
+
}
|
|
29
|
+
if (type === 'limit') {
|
|
30
|
+
if (!price || price <= 0) {
|
|
31
|
+
throw new Error('Price is required and must be greater than 0 for limit orders');
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Create standardized order parameters for exchange APIs
|
|
37
|
+
*
|
|
38
|
+
* @param symbol - Trading pair symbol (e.g., 'SNEK/USDT')
|
|
39
|
+
* @param type - Order type ('market' or 'limit')
|
|
40
|
+
* @param side - Order side ('buy' or 'sell')
|
|
41
|
+
* @param amount - Order quantity/amount
|
|
42
|
+
* @param price - Optional. Price for limit orders (required for limit orders)
|
|
43
|
+
* @param exchangeFormat - Exchange-specific parameter formatting function
|
|
44
|
+
* @returns Record with order parameters formatted for the exchange
|
|
45
|
+
* @throws Error if required parameters are missing or invalid
|
|
46
|
+
*/
|
|
47
|
+
static createOrderParams(symbol, type, side, amount, price, exchangeFormat) {
|
|
48
|
+
this.validateOrderParams(symbol, type, side, amount, price);
|
|
49
|
+
try {
|
|
50
|
+
const exchangeSymbol = (0, symbol_utils_1.toExchangeFormat)(symbol);
|
|
51
|
+
const baseParams = {
|
|
52
|
+
symbol: exchangeSymbol,
|
|
53
|
+
type,
|
|
54
|
+
side,
|
|
55
|
+
amount,
|
|
56
|
+
price,
|
|
57
|
+
};
|
|
58
|
+
if (exchangeFormat) {
|
|
59
|
+
return exchangeFormat(baseParams);
|
|
60
|
+
}
|
|
61
|
+
const params = {
|
|
62
|
+
symbol: exchangeSymbol,
|
|
63
|
+
side: side.toLowerCase(),
|
|
64
|
+
type: type.toLowerCase(),
|
|
65
|
+
amount: amount,
|
|
66
|
+
};
|
|
67
|
+
if (type === 'limit' && price !== undefined) {
|
|
68
|
+
params.price = price;
|
|
69
|
+
}
|
|
70
|
+
return params;
|
|
71
|
+
}
|
|
72
|
+
catch (error) {
|
|
73
|
+
throw new Error(`Failed to create order parameters: ${error}`);
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Create Bitget-specific order parameters
|
|
78
|
+
*
|
|
79
|
+
* @param symbol - Trading pair symbol (e.g., 'SNEK/USDT')
|
|
80
|
+
* @param type - Order type ('market' or 'limit')
|
|
81
|
+
* @param side - Order side ('buy' or 'sell')
|
|
82
|
+
* @param amount - Order quantity/amount
|
|
83
|
+
* @param price - Optional. Price for limit orders
|
|
84
|
+
* @returns Bitget-formatted order parameters
|
|
85
|
+
*/
|
|
86
|
+
static createBitgetOrderParams(symbol, type, side, amount, price) {
|
|
87
|
+
return this.createOrderParams(symbol, type, side, amount, price, params => {
|
|
88
|
+
this.validateBitgetMinimumOrder(params.amount, params.price, params.symbol);
|
|
89
|
+
const bitgetParams = {
|
|
90
|
+
symbol: params.symbol,
|
|
91
|
+
side: params.side.toLowerCase(),
|
|
92
|
+
orderType: params.type.toLowerCase(),
|
|
93
|
+
force: 'gtc',
|
|
94
|
+
size: this.formatBitgetQuantity(params.amount, params.symbol),
|
|
95
|
+
};
|
|
96
|
+
if (params.type === 'limit' && params.price !== undefined) {
|
|
97
|
+
bitgetParams.price = this.formatBitgetPrice(params.price, params.symbol);
|
|
98
|
+
}
|
|
99
|
+
return bitgetParams;
|
|
100
|
+
});
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Format quantity for Bitget with appropriate precision
|
|
104
|
+
*
|
|
105
|
+
* @param quantity - The quantity to format
|
|
106
|
+
* @param symbol - Trading pair symbol for precision rules
|
|
107
|
+
* @returns Formatted quantity string with correct decimal places
|
|
108
|
+
*/
|
|
109
|
+
static formatBitgetQuantity(quantity, symbol) {
|
|
110
|
+
const precision = this.getBitgetQuantityPrecision(symbol);
|
|
111
|
+
return quantity.toFixed(precision);
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Format price for Bitget with appropriate precision
|
|
115
|
+
*
|
|
116
|
+
* @param price - The price to format
|
|
117
|
+
* @param symbol - Trading pair symbol for precision rules
|
|
118
|
+
* @returns Formatted price string with correct decimal places
|
|
119
|
+
*/
|
|
120
|
+
static formatBitgetPrice(price, symbol) {
|
|
121
|
+
const precision = this.getBitgetPricePrecision(symbol);
|
|
122
|
+
return price.toFixed(precision);
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Get quantity precision for Bitget symbol
|
|
126
|
+
* Based on common Bitget precision rules
|
|
127
|
+
*
|
|
128
|
+
* @param symbol - Trading pair symbol
|
|
129
|
+
* @returns Number of decimal places for quantity
|
|
130
|
+
*/
|
|
131
|
+
static getBitgetQuantityPrecision(symbol) {
|
|
132
|
+
if (symbol.includes('USDT') || symbol.includes('USDC')) {
|
|
133
|
+
if (symbol.includes('SNEK') || symbol.includes('INDY') || symbol.includes('NIGHT')) {
|
|
134
|
+
return 2;
|
|
135
|
+
}
|
|
136
|
+
if (symbol.includes('BTC') || symbol.includes('ETH')) {
|
|
137
|
+
return 6;
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
return 4;
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* Get price precision for Bitget symbol
|
|
144
|
+
* Based on common Bitget precision rules
|
|
145
|
+
*
|
|
146
|
+
* @param symbol - Trading pair symbol
|
|
147
|
+
* @returns Number of decimal places for price
|
|
148
|
+
*/
|
|
149
|
+
static getBitgetPricePrecision(symbol) {
|
|
150
|
+
if (symbol.includes('USDT') || symbol.includes('USDC')) {
|
|
151
|
+
if (symbol.includes('SNEK') || symbol.includes('NIGHT')) {
|
|
152
|
+
return 6;
|
|
153
|
+
}
|
|
154
|
+
if (symbol.includes('INDY')) {
|
|
155
|
+
return 6;
|
|
156
|
+
}
|
|
157
|
+
if (symbol.includes('BTC')) {
|
|
158
|
+
return 2;
|
|
159
|
+
}
|
|
160
|
+
if (symbol.includes('ETH')) {
|
|
161
|
+
return 3;
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
return 6;
|
|
165
|
+
}
|
|
166
|
+
/**
|
|
167
|
+
* Validate minimum order value for Bitget
|
|
168
|
+
* Bitget requires minimum order value of 1 USDT
|
|
169
|
+
*
|
|
170
|
+
* @param amount - Order quantity
|
|
171
|
+
* @param price - Order price
|
|
172
|
+
* @param symbol - Trading pair symbol
|
|
173
|
+
* @throws Error if order value is below minimum
|
|
174
|
+
*/
|
|
175
|
+
static validateBitgetMinimumOrder(amount, price, symbol) {
|
|
176
|
+
if (price && symbol && (symbol.includes('USDT') || symbol.includes('USDC'))) {
|
|
177
|
+
const orderValue = amount * price;
|
|
178
|
+
const minimumValue = 1.0;
|
|
179
|
+
if (orderValue < minimumValue) {
|
|
180
|
+
throw new Error(`Bitget order value ${orderValue.toFixed(6)} USDT is below minimum ${minimumValue} USDT. Increase order size or price.`);
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
/**
|
|
185
|
+
* Create MEXC-specific order parameters
|
|
186
|
+
*
|
|
187
|
+
* @param symbol - Trading pair symbol (e.g., 'SNEK/USDT')
|
|
188
|
+
* @param type - Order type ('market' or 'limit')
|
|
189
|
+
* @param side - Order side ('buy' or 'sell')
|
|
190
|
+
* @param amount - Order quantity/amount
|
|
191
|
+
* @param price - Optional. Price for limit orders
|
|
192
|
+
* @returns MEXC-formatted order parameters
|
|
193
|
+
*/
|
|
194
|
+
static createMexcOrderParams(symbol, type, side, amount, price) {
|
|
195
|
+
return this.createOrderParams(symbol, type, side, amount, price, params => {
|
|
196
|
+
const mexcParams = {
|
|
197
|
+
symbol: params.symbol,
|
|
198
|
+
side: params.side.toUpperCase(),
|
|
199
|
+
type: params.type.toUpperCase(),
|
|
200
|
+
quantity: params.amount.toString(),
|
|
201
|
+
};
|
|
202
|
+
if (params.type === 'limit' && params.price !== undefined) {
|
|
203
|
+
mexcParams.price = params.price.toString();
|
|
204
|
+
mexcParams.timeInForce = 'GTC';
|
|
205
|
+
}
|
|
206
|
+
return mexcParams;
|
|
207
|
+
});
|
|
208
|
+
}
|
|
209
|
+
/**
|
|
210
|
+
* Create Gate.io-specific order parameters
|
|
211
|
+
*
|
|
212
|
+
* @param symbol - Trading pair symbol (e.g., 'SNEK/USDT')
|
|
213
|
+
* @param type - Order type ('market' or 'limit')
|
|
214
|
+
* @param side - Order side ('buy' or 'sell')
|
|
215
|
+
* @param amount - Order quantity/amount
|
|
216
|
+
* @param price - Optional. Price for limit orders
|
|
217
|
+
* @returns Gate.io-formatted order parameters
|
|
218
|
+
*/
|
|
219
|
+
static createGateioOrderParams(symbol, type, side, amount, price) {
|
|
220
|
+
this.validateOrderParams(symbol, type, side, amount, price);
|
|
221
|
+
this.validateGateioMinimumOrder(amount, price, symbol);
|
|
222
|
+
const gateioSymbol = symbol.replace('/', '_').toUpperCase();
|
|
223
|
+
const gateioParams = {
|
|
224
|
+
currency_pair: gateioSymbol,
|
|
225
|
+
side: side.toLowerCase(),
|
|
226
|
+
type: type.toLowerCase(),
|
|
227
|
+
account: 'spot',
|
|
228
|
+
amount: amount.toString(),
|
|
229
|
+
};
|
|
230
|
+
if (type === 'limit' && price !== undefined) {
|
|
231
|
+
gateioParams.price = price.toString();
|
|
232
|
+
}
|
|
233
|
+
return gateioParams;
|
|
234
|
+
}
|
|
235
|
+
/**
|
|
236
|
+
* Validate minimum order value for Gate.io
|
|
237
|
+
* Gate.io requires minimum order value of 3 USDT
|
|
238
|
+
*
|
|
239
|
+
* @param amount - Order quantity
|
|
240
|
+
* @param price - Order price
|
|
241
|
+
* @param symbol - Trading pair symbol
|
|
242
|
+
* @throws Error if order value is below minimum
|
|
243
|
+
*/
|
|
244
|
+
static validateGateioMinimumOrder(amount, price, symbol) {
|
|
245
|
+
if (price && symbol && (symbol.includes('USDT') || symbol.includes('USDC'))) {
|
|
246
|
+
const orderValue = amount * price;
|
|
247
|
+
const minimumValue = 3.0;
|
|
248
|
+
if (orderValue < minimumValue) {
|
|
249
|
+
throw new Error(`Gate.io order value ${orderValue.toFixed(6)} USDT is below minimum ${minimumValue} USDT. Increase order size or price.`);
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
/**
|
|
254
|
+
* Create Kraken-specific order parameters
|
|
255
|
+
*
|
|
256
|
+
* @param symbol - Trading pair symbol (e.g., 'ADA/EUR')
|
|
257
|
+
* @param type - Order type ('market' or 'limit')
|
|
258
|
+
* @param side - Order side ('buy' or 'sell')
|
|
259
|
+
* @param amount - Order quantity/amount
|
|
260
|
+
* @param price - Optional. Price for limit orders
|
|
261
|
+
* @returns Kraken-formatted order parameters
|
|
262
|
+
*/
|
|
263
|
+
static createKrakenOrderParams(symbol, type, side, amount, price) {
|
|
264
|
+
this.validateOrderParams(symbol, type, side, amount, price);
|
|
265
|
+
this.validateKrakenMinimumOrder(amount, price, symbol);
|
|
266
|
+
const krakenSymbol = symbol.replace('/', '').toUpperCase();
|
|
267
|
+
const krakenParams = {
|
|
268
|
+
pair: krakenSymbol,
|
|
269
|
+
type: side.toLowerCase(),
|
|
270
|
+
ordertype: type.toLowerCase(),
|
|
271
|
+
volume: this.formatKrakenQuantity(amount, symbol),
|
|
272
|
+
validate: 'false',
|
|
273
|
+
};
|
|
274
|
+
if (type === 'limit' && price !== undefined) {
|
|
275
|
+
krakenParams.price = this.formatKrakenPrice(price, symbol);
|
|
276
|
+
}
|
|
277
|
+
return krakenParams;
|
|
278
|
+
}
|
|
279
|
+
/**
|
|
280
|
+
* Validate minimum order value for Kraken
|
|
281
|
+
* Kraken requires different minimum order values based on quote currency
|
|
282
|
+
*
|
|
283
|
+
* @param amount - Order quantity
|
|
284
|
+
* @param price - Order price
|
|
285
|
+
* @param symbol - Trading pair symbol
|
|
286
|
+
* @throws Error if order value is below minimum
|
|
287
|
+
*/
|
|
288
|
+
static validateKrakenMinimumOrder(amount, price, symbol) {
|
|
289
|
+
if (!price || !symbol)
|
|
290
|
+
return;
|
|
291
|
+
const orderValue = amount * price;
|
|
292
|
+
let minimumValue = 0;
|
|
293
|
+
let currency = '';
|
|
294
|
+
if (symbol.includes('USD') || symbol.includes('USDT') || symbol.includes('USDC')) {
|
|
295
|
+
minimumValue = 5.0;
|
|
296
|
+
currency = 'USD';
|
|
297
|
+
}
|
|
298
|
+
else if (symbol.includes('EUR')) {
|
|
299
|
+
minimumValue = 5.0;
|
|
300
|
+
currency = 'EUR';
|
|
301
|
+
}
|
|
302
|
+
else if (symbol.includes('GBP')) {
|
|
303
|
+
minimumValue = 5.0;
|
|
304
|
+
currency = 'GBP';
|
|
305
|
+
}
|
|
306
|
+
else if (symbol.includes('BTC')) {
|
|
307
|
+
minimumValue = 0.0001;
|
|
308
|
+
if (amount < minimumValue) {
|
|
309
|
+
throw new Error(`Kraken order amount ${amount.toFixed(8)} BTC is below minimum ${minimumValue} BTC.`);
|
|
310
|
+
}
|
|
311
|
+
return;
|
|
312
|
+
}
|
|
313
|
+
else if (symbol.includes('ETH')) {
|
|
314
|
+
minimumValue = 0.002;
|
|
315
|
+
if (amount < minimumValue) {
|
|
316
|
+
throw new Error(`Kraken order amount ${amount.toFixed(6)} ETH is below minimum ${minimumValue} ETH.`);
|
|
317
|
+
}
|
|
318
|
+
return;
|
|
319
|
+
}
|
|
320
|
+
if (minimumValue > 0 && orderValue < minimumValue) {
|
|
321
|
+
throw new Error(`Kraken order value ${orderValue.toFixed(2)} ${currency} is below minimum ${minimumValue} ${currency}. Increase order size or price.`);
|
|
322
|
+
}
|
|
323
|
+
}
|
|
324
|
+
/**
|
|
325
|
+
* Format quantity for Kraken with appropriate precision
|
|
326
|
+
*
|
|
327
|
+
* @param quantity - The quantity to format
|
|
328
|
+
* @param symbol - Trading pair symbol for precision rules
|
|
329
|
+
* @returns Formatted quantity string with correct decimal places
|
|
330
|
+
*/
|
|
331
|
+
static formatKrakenQuantity(quantity, symbol) {
|
|
332
|
+
const precision = this.getKrakenQuantityPrecision(symbol);
|
|
333
|
+
return quantity.toFixed(precision);
|
|
334
|
+
}
|
|
335
|
+
/**
|
|
336
|
+
* Format price for Kraken with appropriate precision
|
|
337
|
+
*
|
|
338
|
+
* @param price - The price to format
|
|
339
|
+
* @param symbol - Trading pair symbol for precision rules
|
|
340
|
+
* @returns Formatted price string with correct decimal places
|
|
341
|
+
*/
|
|
342
|
+
static formatKrakenPrice(price, symbol) {
|
|
343
|
+
const precision = this.getKrakenPricePrecision(symbol);
|
|
344
|
+
return price.toFixed(precision);
|
|
345
|
+
}
|
|
346
|
+
/**
|
|
347
|
+
* Get quantity precision for Kraken symbol
|
|
348
|
+
* Based on Kraken precision rules
|
|
349
|
+
*
|
|
350
|
+
* @param symbol - Trading pair symbol
|
|
351
|
+
* @returns Number of decimal places for quantity
|
|
352
|
+
*/
|
|
353
|
+
static getKrakenQuantityPrecision(symbol) {
|
|
354
|
+
if (symbol.includes('BTC')) {
|
|
355
|
+
return 8;
|
|
356
|
+
}
|
|
357
|
+
if (symbol.includes('ETH')) {
|
|
358
|
+
return 6;
|
|
359
|
+
}
|
|
360
|
+
if (symbol.includes('ADA') || symbol.includes('XRP') || symbol.includes('DOT')) {
|
|
361
|
+
return 2;
|
|
362
|
+
}
|
|
363
|
+
return 4;
|
|
364
|
+
}
|
|
365
|
+
/**
|
|
366
|
+
* Get price precision for Kraken symbol
|
|
367
|
+
* Kraken has a maximum of 6 decimal places for prices
|
|
368
|
+
*
|
|
369
|
+
* @param symbol - Trading pair symbol
|
|
370
|
+
* @returns Number of decimal places for price
|
|
371
|
+
*/
|
|
372
|
+
static getKrakenPricePrecision(symbol) {
|
|
373
|
+
if (symbol.includes('USD') || symbol.includes('EUR') || symbol.includes('GBP')) {
|
|
374
|
+
if (symbol.includes('BTC')) {
|
|
375
|
+
return 2;
|
|
376
|
+
}
|
|
377
|
+
if (symbol.includes('ETH')) {
|
|
378
|
+
return 3;
|
|
379
|
+
}
|
|
380
|
+
return 6;
|
|
381
|
+
}
|
|
382
|
+
if (symbol.includes('BTC')) {
|
|
383
|
+
return 8;
|
|
384
|
+
}
|
|
385
|
+
if (symbol.includes('ETH')) {
|
|
386
|
+
return 6;
|
|
387
|
+
}
|
|
388
|
+
return 6;
|
|
389
|
+
}
|
|
390
|
+
/**
|
|
391
|
+
* Get minimum order value for exchange
|
|
392
|
+
*
|
|
393
|
+
* @param exchange - Exchange name ('bitget', 'mexc', 'gateio', 'kraken', etc.)
|
|
394
|
+
* @param symbol - Trading pair symbol
|
|
395
|
+
* @returns Minimum order value in quote currency
|
|
396
|
+
*/
|
|
397
|
+
static getMinimumOrderValue(exchange, symbol) {
|
|
398
|
+
switch (exchange.toLowerCase()) {
|
|
399
|
+
case 'bitget':
|
|
400
|
+
if (symbol.includes('USDT') || symbol.includes('USDC')) {
|
|
401
|
+
return 1.0;
|
|
402
|
+
}
|
|
403
|
+
return 0;
|
|
404
|
+
case 'mexc':
|
|
405
|
+
if (symbol.includes('USDT') || symbol.includes('USDC')) {
|
|
406
|
+
return 1.0;
|
|
407
|
+
}
|
|
408
|
+
return 0;
|
|
409
|
+
case 'gateio':
|
|
410
|
+
if (symbol.includes('USDT') || symbol.includes('USDC')) {
|
|
411
|
+
return 3.0;
|
|
412
|
+
}
|
|
413
|
+
return 0;
|
|
414
|
+
case 'kraken':
|
|
415
|
+
if (symbol.includes('USD') || symbol.includes('USDT') || symbol.includes('USDC')) {
|
|
416
|
+
return 5.0;
|
|
417
|
+
}
|
|
418
|
+
if (symbol.includes('EUR')) {
|
|
419
|
+
return 5.0;
|
|
420
|
+
}
|
|
421
|
+
if (symbol.includes('GBP')) {
|
|
422
|
+
return 5.0;
|
|
423
|
+
}
|
|
424
|
+
if (symbol.includes('BTC')) {
|
|
425
|
+
return 0.0001;
|
|
426
|
+
}
|
|
427
|
+
if (symbol.includes('ETH')) {
|
|
428
|
+
return 0.002;
|
|
429
|
+
}
|
|
430
|
+
return 0;
|
|
431
|
+
default:
|
|
432
|
+
return 0;
|
|
433
|
+
}
|
|
434
|
+
}
|
|
435
|
+
/**
|
|
436
|
+
* Validate symbol format for exchange compatibility
|
|
437
|
+
*
|
|
438
|
+
* @param symbol - Symbol to validate
|
|
439
|
+
* @returns True if symbol is valid, false otherwise
|
|
440
|
+
*/
|
|
441
|
+
static isValidSymbol(symbol) {
|
|
442
|
+
if (!symbol) {
|
|
443
|
+
return false;
|
|
444
|
+
}
|
|
445
|
+
try {
|
|
446
|
+
const exchangeFormat = (0, symbol_utils_1.toExchangeFormat)(symbol);
|
|
447
|
+
return exchangeFormat.length > 0 && /^[A-Z0-9]+$/.test(exchangeFormat);
|
|
448
|
+
}
|
|
449
|
+
catch {
|
|
450
|
+
return false;
|
|
451
|
+
}
|
|
452
|
+
}
|
|
453
|
+
}
|
|
454
|
+
exports.ExchangeUtils = ExchangeUtils;
|
|
455
|
+
//# sourceMappingURL=exchange-utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"exchange-utils.js","sourceRoot":"","sources":["../../src/utils/exchange-utils.ts"],"names":[],"mappings":"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"}
|
package/dist/utils/index.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAC9E,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC"}
|
package/dist/utils/index.js
CHANGED
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.logger = exports.createLogger = exports.Logger = void 0;
|
|
3
|
+
exports.ExchangeUtils = exports.logger = exports.createLogger = exports.Logger = void 0;
|
|
4
4
|
var logger_1 = require("./logger");
|
|
5
5
|
Object.defineProperty(exports, "Logger", { enumerable: true, get: function () { return logger_1.Logger; } });
|
|
6
6
|
Object.defineProperty(exports, "createLogger", { enumerable: true, get: function () { return logger_1.createLogger; } });
|
|
7
7
|
Object.defineProperty(exports, "logger", { enumerable: true, get: function () { return logger_1.logger; } });
|
|
8
|
+
var exchange_utils_1 = require("./exchange-utils");
|
|
9
|
+
Object.defineProperty(exports, "ExchangeUtils", { enumerable: true, get: function () { return exchange_utils_1.ExchangeUtils; } });
|
|
8
10
|
//# sourceMappingURL=index.js.map
|
package/dist/utils/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":";;;AAAA,mCAA8E;AAArE,gGAAA,MAAM,OAAA;AAAE,sGAAA,YAAY,OAAA;AAAE,gGAAA,MAAM,OAAA"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":";;;AAAA,mCAA8E;AAArE,gGAAA,MAAM,OAAA;AAAE,sGAAA,YAAY,OAAA;AAAE,gGAAA,MAAM,OAAA;AACrC,mDAAiD;AAAxC,+GAAA,aAAa,OAAA"}
|
package/dist/utils/logger.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,QAAQ,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;AAE3D,MAAM,WAAW,UAAU;IACzB,CAAC,GAAG,EAAE,MAAM,GAAG,
|
|
1
|
+
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,QAAQ,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;AAE3D,MAAM,WAAW,UAAU;IACzB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED;;;GAGG;AACH,qBAAa,MAAM;IACjB,OAAO,CAAC,OAAO,CAAiB;gBAEpB,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM;IAsC7C,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,UAAU,GAAG,IAAI;IAIlD,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,UAAU,GAAG,IAAI;IAIjD,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,UAAU,GAAG,IAAI;IAIjD,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,UAAU,GAAG,IAAI;IAIlD;;OAEG;IACH,QAAQ,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,CAAC,EAAE,UAAU,GAAG,IAAI;CAUnD;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,CAEtE;AAED;;GAEG;AACH,eAAO,MAAM,MAAM,QAAyB,CAAC"}
|
package/dist/utils/logger.js
CHANGED
|
@@ -47,25 +47,25 @@ class Logger {
|
|
|
47
47
|
format: winston.format.combine(winston.format.timestamp({ format: 'HH:mm:ss' }), winston.format.colorize(), winston.format.printf(({ timestamp, level, message, service, ...meta }) => {
|
|
48
48
|
const metaStr = Object.keys(meta).length ? ` ${JSON.stringify(meta)}` : '';
|
|
49
49
|
return `${timestamp} [${service}] ${level}: ${message}${metaStr}`;
|
|
50
|
-
}))
|
|
51
|
-
})
|
|
50
|
+
})),
|
|
51
|
+
}),
|
|
52
52
|
];
|
|
53
53
|
if (logFile) {
|
|
54
54
|
const fileFormat = winston.format.combine(winston.format.timestamp(), winston.format.json());
|
|
55
55
|
transports.push(new winston.transports.File({
|
|
56
56
|
filename: logFile,
|
|
57
|
-
format: fileFormat
|
|
57
|
+
format: fileFormat,
|
|
58
58
|
}), new winston.transports.File({
|
|
59
59
|
filename: logFile.replace('.log', '-error.log'),
|
|
60
60
|
level: 'error',
|
|
61
|
-
format: fileFormat
|
|
61
|
+
format: fileFormat,
|
|
62
62
|
}));
|
|
63
63
|
}
|
|
64
64
|
this.winston = winston.createLogger({
|
|
65
65
|
level: 'debug',
|
|
66
66
|
defaultMeta: { service },
|
|
67
67
|
transports,
|
|
68
|
-
exitOnError: false
|
|
68
|
+
exitOnError: false,
|
|
69
69
|
});
|
|
70
70
|
}
|
|
71
71
|
error(message, context) {
|
|
@@ -89,8 +89,8 @@ class Logger {
|
|
|
89
89
|
error: {
|
|
90
90
|
name: error.name,
|
|
91
91
|
message: error.message,
|
|
92
|
-
stack: error.stack
|
|
93
|
-
}
|
|
92
|
+
stack: error.stack,
|
|
93
|
+
},
|
|
94
94
|
});
|
|
95
95
|
}
|
|
96
96
|
}
|
package/dist/utils/logger.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { OrderType, OrderSide } from '../types';
|
|
2
|
+
export interface ValidationResult {
|
|
3
|
+
isValid: boolean;
|
|
4
|
+
errors: string[];
|
|
5
|
+
warnings?: string[];
|
|
6
|
+
}
|
|
7
|
+
export interface OrderValidationOptions {
|
|
8
|
+
minPrice?: number;
|
|
9
|
+
maxPrice?: number;
|
|
10
|
+
minAmount?: number;
|
|
11
|
+
maxAmount?: number;
|
|
12
|
+
minNotional?: number;
|
|
13
|
+
maxNotional?: number;
|
|
14
|
+
tickSize?: number;
|
|
15
|
+
stepSize?: number;
|
|
16
|
+
maxPrecision?: number;
|
|
17
|
+
}
|
|
18
|
+
export interface SymbolValidationOptions {
|
|
19
|
+
allowedExchanges?: string[];
|
|
20
|
+
supportedAssets?: string[];
|
|
21
|
+
minLength?: number;
|
|
22
|
+
maxLength?: number;
|
|
23
|
+
}
|
|
24
|
+
export declare class ValidationUtils {
|
|
25
|
+
private static readonly SYMBOL_REGEX;
|
|
26
|
+
static validateSymbol(symbol: string, options?: SymbolValidationOptions): ValidationResult;
|
|
27
|
+
static validatePrice(price: number, options?: OrderValidationOptions): ValidationResult;
|
|
28
|
+
static validateAmount(amount: number, options?: OrderValidationOptions): ValidationResult;
|
|
29
|
+
static validateOrder(symbol: string, type: OrderType, side: OrderSide, amount: number, price?: number, options?: OrderValidationOptions): ValidationResult;
|
|
30
|
+
static validateApiCredentials(apiKey: string, apiSecret: string, passphrase?: string): ValidationResult;
|
|
31
|
+
static isValidOrderType(type: string): type is OrderType;
|
|
32
|
+
static isValidOrderSide(side: string): side is OrderSide;
|
|
33
|
+
static getDecimalPlaces(number: number): number;
|
|
34
|
+
}
|
|
35
|
+
export { ValidationUtils as default };
|
|
36
|
+
//# sourceMappingURL=validation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../../src/utils/validation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAEhD,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;CACrB;AAED,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,uBAAuB;IACtC,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC5B,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,qBAAa,eAAe;IAC1B,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,YAAY,CAA4B;IAEhE,MAAM,CAAC,cAAc,CACnB,MAAM,EAAE,MAAM,EACd,OAAO,GAAE,uBAA4B,GACpC,gBAAgB;IAoCnB,MAAM,CAAC,aAAa,CAClB,KAAK,EAAE,MAAM,EACb,OAAO,GAAE,sBAA2B,GACnC,gBAAgB;IAmCnB,MAAM,CAAC,cAAc,CACnB,MAAM,EAAE,MAAM,EACd,OAAO,GAAE,sBAA2B,GACnC,gBAAgB;IAmCnB,MAAM,CAAC,aAAa,CAClB,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,SAAS,EACf,IAAI,EAAE,SAAS,EACf,MAAM,EAAE,MAAM,EACd,KAAK,CAAC,EAAE,MAAM,EACd,OAAO,GAAE,sBAA2B,GACnC,gBAAgB;IAkDnB,MAAM,CAAC,sBAAsB,CAC3B,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,EACjB,UAAU,CAAC,EAAE,MAAM,GAClB,gBAAgB;IA6BnB,MAAM,CAAC,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,IAAI,SAAS;IAIxD,MAAM,CAAC,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,IAAI,SAAS;IAIxD,MAAM,CAAC,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM;CAWhD;AAED,OAAO,EAAE,eAAe,IAAI,OAAO,EAAE,CAAC"}
|