@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,605 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.GateioConnector = void 0;
|
|
7
|
+
const base_exchange_connector_1 = require("../../core/exchange/base-exchange-connector");
|
|
8
|
+
const gateio_auth_1 = require("./gateio-auth");
|
|
9
|
+
const gateio_utils_1 = require("./gateio-utils");
|
|
10
|
+
const gateio_data_mapper_1 = require("./gateio-data-mapper");
|
|
11
|
+
const gateio_websocket_1 = require("./gateio-websocket");
|
|
12
|
+
const gateio_user_stream_1 = require("./gateio-user-stream");
|
|
13
|
+
const utils_1 = require("../../utils");
|
|
14
|
+
const environment_1 = __importDefault(require("../../config/environment"));
|
|
15
|
+
/**
|
|
16
|
+
* Gate.io Exchange Connector
|
|
17
|
+
*
|
|
18
|
+
* Implements the BaseExchangeConnector interface for Gate.io exchange.
|
|
19
|
+
* Provides trading operations, market data access, and WebSocket streaming.
|
|
20
|
+
*/
|
|
21
|
+
class GateioConnector extends base_exchange_connector_1.BaseExchangeConnector {
|
|
22
|
+
constructor(credentials) {
|
|
23
|
+
super('gateio', 'Gate.io');
|
|
24
|
+
this.logger = (0, utils_1.createLogger)('gateio-connector');
|
|
25
|
+
this.baseUrl = 'https://api.gateio.ws';
|
|
26
|
+
this.dataMapper = new gateio_data_mapper_1.GateioDataMapper();
|
|
27
|
+
this.logger.info('GateioConnector initialized');
|
|
28
|
+
if (credentials) {
|
|
29
|
+
this.setCredentials(credentials);
|
|
30
|
+
}
|
|
31
|
+
else if (environment_1.default.gateio) {
|
|
32
|
+
this.setCredentials({
|
|
33
|
+
apiKey: environment_1.default.gateio.apiKey,
|
|
34
|
+
secret: environment_1.default.gateio.secret,
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Set API credentials and initialize authentication handler
|
|
40
|
+
*
|
|
41
|
+
* @param credentials - Gate.io API credentials (apiKey and secret only)
|
|
42
|
+
* @throws Error if credentials are missing required fields
|
|
43
|
+
*/
|
|
44
|
+
setCredentials(credentials) {
|
|
45
|
+
super.setCredentials(credentials);
|
|
46
|
+
if (!credentials.apiKey || !credentials.secret) {
|
|
47
|
+
throw new Error('Invalid Gate.io credentials: missing apiKey or secret');
|
|
48
|
+
}
|
|
49
|
+
this.auth = new gateio_auth_1.GateioAuth(credentials, this.baseUrl);
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Connect to Gate.io API by testing server time and validating credentials
|
|
53
|
+
*
|
|
54
|
+
* @returns Promise that resolves when successfully connected to Gate.io API
|
|
55
|
+
* @throws Error if connection fails or credentials are invalid
|
|
56
|
+
*/
|
|
57
|
+
async connect() {
|
|
58
|
+
try {
|
|
59
|
+
const credentials = this.getCredentials();
|
|
60
|
+
this.auth = new gateio_auth_1.GateioAuth(credentials, this.baseUrl);
|
|
61
|
+
const timeResponse = await this.auth.makePublicRequest('/spot/time');
|
|
62
|
+
if (!timeResponse || !timeResponse.server_time) {
|
|
63
|
+
throw new Error('Invalid response from Gate.io time endpoint');
|
|
64
|
+
}
|
|
65
|
+
if (!this.auth.validateCredentialsExist()) {
|
|
66
|
+
this.connected = false;
|
|
67
|
+
this.handleError(new Error('Invalid Gate.io credentials'), 'connect');
|
|
68
|
+
return;
|
|
69
|
+
}
|
|
70
|
+
try {
|
|
71
|
+
await this.auth.makeRequest('/spot/accounts');
|
|
72
|
+
}
|
|
73
|
+
catch (credError) {
|
|
74
|
+
if (credError instanceof Error) {
|
|
75
|
+
const errorMessage = gateio_utils_1.GateioUtils.mapErrorMessage(credError);
|
|
76
|
+
throw new Error(`Credentials validation failed: ${errorMessage}`);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
this.connected = true;
|
|
80
|
+
}
|
|
81
|
+
catch (error) {
|
|
82
|
+
this.connected = false;
|
|
83
|
+
this.handleError(error, 'connect');
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Disconnect from Gate.io API and clean up resources
|
|
88
|
+
*
|
|
89
|
+
* @returns Promise that resolves when successfully disconnected from Gate.io API
|
|
90
|
+
*/
|
|
91
|
+
async disconnect() {
|
|
92
|
+
try {
|
|
93
|
+
await this.disconnectWebSocket();
|
|
94
|
+
await this.disconnectUserDataStream();
|
|
95
|
+
this.connected = false;
|
|
96
|
+
this.auth = undefined;
|
|
97
|
+
}
|
|
98
|
+
catch (error) {
|
|
99
|
+
this.handleError(error, 'disconnect');
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
// =============================================================================
|
|
103
|
+
// REST API Methods Implementation
|
|
104
|
+
// =============================================================================
|
|
105
|
+
/**
|
|
106
|
+
* Get account balance for all assets
|
|
107
|
+
*
|
|
108
|
+
* @returns Promise resolving to balance data for all assets
|
|
109
|
+
* @throws Error if API request fails or credentials are invalid
|
|
110
|
+
*/
|
|
111
|
+
async getBalance() {
|
|
112
|
+
try {
|
|
113
|
+
if (!this.auth) {
|
|
114
|
+
throw new Error('Gate.io connector not authenticated');
|
|
115
|
+
}
|
|
116
|
+
const response = await this.auth.makeRequest('/spot/accounts');
|
|
117
|
+
if (!Array.isArray(response)) {
|
|
118
|
+
throw new Error('Invalid response from Gate.io accounts endpoint - expected array');
|
|
119
|
+
}
|
|
120
|
+
return this.dataMapper.mapAccountBalances(response);
|
|
121
|
+
}
|
|
122
|
+
catch (error) {
|
|
123
|
+
const errorMessage = gateio_utils_1.GateioUtils.mapErrorMessage(error);
|
|
124
|
+
this.logger.error('Get balance failed', { error: errorMessage });
|
|
125
|
+
this.handleError(new Error(errorMessage), 'getBalance');
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* Create a new order on Gate.io exchange
|
|
130
|
+
*
|
|
131
|
+
* @param symbol - Trading pair symbol (e.g., 'SNEK/USDT')
|
|
132
|
+
* @param type - Order type ('market' or 'limit')
|
|
133
|
+
* @param side - Order side ('buy' or 'sell')
|
|
134
|
+
* @param amount - Order quantity/amount
|
|
135
|
+
* @param price - Optional. Price for limit orders (required for limit orders)
|
|
136
|
+
* @returns Promise resolving to the created order details
|
|
137
|
+
* @throws Error if order creation fails or parameters are invalid
|
|
138
|
+
*/
|
|
139
|
+
async createOrder(symbol, type, side, amount, price) {
|
|
140
|
+
try {
|
|
141
|
+
if (!this.auth) {
|
|
142
|
+
throw new Error('Gate.io connector not authenticated');
|
|
143
|
+
}
|
|
144
|
+
if (!gateio_utils_1.GateioUtils.isValidSymbol(symbol)) {
|
|
145
|
+
throw new Error(`Invalid symbol format: ${symbol}`);
|
|
146
|
+
}
|
|
147
|
+
const orderRequest = utils_1.ExchangeUtils.createGateioOrderParams(symbol, type, side, amount, price);
|
|
148
|
+
const response = await this.auth.makeRequest('/spot/orders', {}, 'POST', orderRequest);
|
|
149
|
+
if (!response || !gateio_utils_1.GateioUtils.isValidOrderResponse(response)) {
|
|
150
|
+
throw new Error('Invalid response from Gate.io place-order endpoint');
|
|
151
|
+
}
|
|
152
|
+
this.logger.info('Order created successfully', {
|
|
153
|
+
orderId: response.id,
|
|
154
|
+
symbol: orderRequest.currency_pair,
|
|
155
|
+
side,
|
|
156
|
+
amount,
|
|
157
|
+
price,
|
|
158
|
+
});
|
|
159
|
+
return this.dataMapper.mapOrder(response);
|
|
160
|
+
}
|
|
161
|
+
catch (error) {
|
|
162
|
+
const errorMessage = gateio_utils_1.GateioUtils.mapErrorMessage(error);
|
|
163
|
+
this.logger.error('Create order failed', {
|
|
164
|
+
symbol,
|
|
165
|
+
type,
|
|
166
|
+
side,
|
|
167
|
+
amount,
|
|
168
|
+
price,
|
|
169
|
+
error: errorMessage,
|
|
170
|
+
});
|
|
171
|
+
this.handleError(new Error(errorMessage), 'createOrder');
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
/**
|
|
175
|
+
* Cancel an existing order on Gate.io exchange
|
|
176
|
+
*
|
|
177
|
+
* @param orderId - The ID of the order to cancel
|
|
178
|
+
* @param symbol - Trading pair symbol (e.g., 'SNEK/USDT')
|
|
179
|
+
* @returns Promise that resolves when order is successfully cancelled
|
|
180
|
+
* @throws Error if cancellation fails or order not found
|
|
181
|
+
*/
|
|
182
|
+
async cancelOrder(orderId, symbol) {
|
|
183
|
+
try {
|
|
184
|
+
if (!this.auth) {
|
|
185
|
+
throw new Error('Gate.io connector not authenticated');
|
|
186
|
+
}
|
|
187
|
+
if (!orderId) {
|
|
188
|
+
throw new Error('Order ID is required');
|
|
189
|
+
}
|
|
190
|
+
if (!gateio_utils_1.GateioUtils.isValidSymbol(symbol)) {
|
|
191
|
+
throw new Error(`Invalid symbol format: ${symbol}`);
|
|
192
|
+
}
|
|
193
|
+
const currencyPair = gateio_utils_1.GateioUtils.toGateioSymbol(symbol);
|
|
194
|
+
await this.auth.makeRequest(`/spot/orders/${orderId}`, { currency_pair: currencyPair }, 'DELETE');
|
|
195
|
+
}
|
|
196
|
+
catch (error) {
|
|
197
|
+
const errorMessage = gateio_utils_1.GateioUtils.mapErrorMessage(error);
|
|
198
|
+
this.logger.error('Cancel order failed', { orderId, symbol, error: errorMessage });
|
|
199
|
+
this.handleError(new Error(errorMessage), 'cancelOrder');
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
/**
|
|
203
|
+
* Cancel all open orders for a specific symbol using batch delete endpoint
|
|
204
|
+
*
|
|
205
|
+
* Uses Gate.io's DELETE /spot/orders endpoint to cancel all orders in a single request,
|
|
206
|
+
* which is more efficient than canceling orders one by one.
|
|
207
|
+
*
|
|
208
|
+
* @param symbol - Trading pair symbol (e.g., 'SNEK/USDT')
|
|
209
|
+
* @returns Promise that resolves when all orders are cancelled
|
|
210
|
+
* @throws Error if cancellation fails
|
|
211
|
+
*/
|
|
212
|
+
async cancelAllOrders(symbol) {
|
|
213
|
+
try {
|
|
214
|
+
if (!this.auth) {
|
|
215
|
+
throw new Error('Gate.io connector not authenticated');
|
|
216
|
+
}
|
|
217
|
+
if (!gateio_utils_1.GateioUtils.isValidSymbol(symbol)) {
|
|
218
|
+
throw new Error(`Invalid symbol format: ${symbol}`);
|
|
219
|
+
}
|
|
220
|
+
const currencyPair = gateio_utils_1.GateioUtils.toGateioSymbol(symbol);
|
|
221
|
+
await this.auth.makeRequest('/spot/orders', { currency_pair: currencyPair }, 'DELETE');
|
|
222
|
+
}
|
|
223
|
+
catch (error) {
|
|
224
|
+
const errorMessage = gateio_utils_1.GateioUtils.mapErrorMessage(error);
|
|
225
|
+
this.logger.error('Cancel all orders failed', { symbol, error: errorMessage });
|
|
226
|
+
this.handleError(new Error(errorMessage), 'cancelAllOrders');
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
/**
|
|
230
|
+
* Get details of a specific order by ID
|
|
231
|
+
*
|
|
232
|
+
* @param orderId - The ID of the order to retrieve
|
|
233
|
+
* @param symbol - Trading pair symbol (e.g., 'SNEK/USDT')
|
|
234
|
+
* @returns Promise resolving to order details
|
|
235
|
+
* @throws Error if order not found or request fails
|
|
236
|
+
*/
|
|
237
|
+
async getOrder(orderId, symbol) {
|
|
238
|
+
try {
|
|
239
|
+
if (!this.auth) {
|
|
240
|
+
throw new Error('Gate.io connector not authenticated');
|
|
241
|
+
}
|
|
242
|
+
if (!orderId) {
|
|
243
|
+
throw new Error('Order ID is required');
|
|
244
|
+
}
|
|
245
|
+
if (!gateio_utils_1.GateioUtils.isValidSymbol(symbol)) {
|
|
246
|
+
throw new Error(`Invalid symbol format: ${symbol}`);
|
|
247
|
+
}
|
|
248
|
+
const currencyPair = gateio_utils_1.GateioUtils.toGateioSymbol(symbol);
|
|
249
|
+
const response = await this.auth.makeRequest(`/spot/orders/${orderId}`, {
|
|
250
|
+
currency_pair: currencyPair,
|
|
251
|
+
});
|
|
252
|
+
if (!response || !gateio_utils_1.GateioUtils.isValidOrderResponse(response)) {
|
|
253
|
+
throw new Error('Order not found or invalid response');
|
|
254
|
+
}
|
|
255
|
+
return this.dataMapper.mapOrder(response);
|
|
256
|
+
}
|
|
257
|
+
catch (error) {
|
|
258
|
+
const errorMessage = gateio_utils_1.GateioUtils.mapErrorMessage(error);
|
|
259
|
+
this.logger.error('Get order failed', { orderId, symbol, error: errorMessage });
|
|
260
|
+
this.handleError(new Error(errorMessage), 'getOrder');
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
/**
|
|
264
|
+
* Get all open orders, optionally filtered by symbol
|
|
265
|
+
*
|
|
266
|
+
* @param symbol - Optional. Trading pair symbol to filter orders (e.g., 'SNEK/USDT')
|
|
267
|
+
* @returns Promise resolving to array of open orders
|
|
268
|
+
* @throws Error if request fails
|
|
269
|
+
*/
|
|
270
|
+
async getOpenOrders(symbol) {
|
|
271
|
+
try {
|
|
272
|
+
if (!this.auth) {
|
|
273
|
+
throw new Error('Gate.io connector not authenticated');
|
|
274
|
+
}
|
|
275
|
+
const params = {};
|
|
276
|
+
if (symbol) {
|
|
277
|
+
if (!gateio_utils_1.GateioUtils.isValidSymbol(symbol)) {
|
|
278
|
+
throw new Error(`Invalid symbol format: ${symbol}`);
|
|
279
|
+
}
|
|
280
|
+
params.currency_pair = gateio_utils_1.GateioUtils.toGateioSymbol(symbol);
|
|
281
|
+
}
|
|
282
|
+
const response = await this.auth.makeRequest('/spot/open_orders', params);
|
|
283
|
+
if (!Array.isArray(response)) {
|
|
284
|
+
this.logger.warn('Gate.io open orders returned unexpected format', { response });
|
|
285
|
+
return [];
|
|
286
|
+
}
|
|
287
|
+
const allOrders = gateio_utils_1.GateioUtils.extractOrdersFromOpenOrdersResponse(response);
|
|
288
|
+
return allOrders.map((orderData) => this.dataMapper.mapOrder(orderData));
|
|
289
|
+
}
|
|
290
|
+
catch (error) {
|
|
291
|
+
const errorMessage = gateio_utils_1.GateioUtils.mapErrorMessage(error);
|
|
292
|
+
this.logger.error('Get open orders failed', { symbol, error: errorMessage });
|
|
293
|
+
this.handleError(new Error(errorMessage), 'getOpenOrders');
|
|
294
|
+
}
|
|
295
|
+
}
|
|
296
|
+
/**
|
|
297
|
+
* Get ticker information for a trading pair
|
|
298
|
+
*
|
|
299
|
+
* @param symbol - Trading pair symbol (e.g., 'SNEK/USDT')
|
|
300
|
+
* @returns Promise resolving to ticker data including prices and volume
|
|
301
|
+
* @throws Error if ticker data not found or request fails
|
|
302
|
+
*/
|
|
303
|
+
async getTicker(symbol) {
|
|
304
|
+
try {
|
|
305
|
+
if (!gateio_utils_1.GateioUtils.isValidSymbol(symbol)) {
|
|
306
|
+
throw new Error(`Invalid symbol format: ${symbol}`);
|
|
307
|
+
}
|
|
308
|
+
const currencyPair = gateio_utils_1.GateioUtils.toGateioSymbol(symbol);
|
|
309
|
+
const response = await this.makePublicRequest('/spot/tickers', {
|
|
310
|
+
currency_pair: currencyPair,
|
|
311
|
+
});
|
|
312
|
+
if (!Array.isArray(response) || response.length === 0) {
|
|
313
|
+
throw new Error('No ticker data found');
|
|
314
|
+
}
|
|
315
|
+
return this.dataMapper.mapTicker(response[0]);
|
|
316
|
+
}
|
|
317
|
+
catch (error) {
|
|
318
|
+
const errorMessage = gateio_utils_1.GateioUtils.mapErrorMessage(error);
|
|
319
|
+
this.logger.error('Get ticker failed', { symbol, error: errorMessage });
|
|
320
|
+
this.handleError(new Error(errorMessage), 'getTicker');
|
|
321
|
+
}
|
|
322
|
+
}
|
|
323
|
+
/**
|
|
324
|
+
* Get order book data for a trading pair
|
|
325
|
+
*
|
|
326
|
+
* @param symbol - Trading pair symbol (e.g., 'SNEK/USDT')
|
|
327
|
+
* @returns Promise resolving to order book with bids and asks
|
|
328
|
+
* @throws Error if order book data not found or request fails
|
|
329
|
+
*/
|
|
330
|
+
async getOrderBook(symbol) {
|
|
331
|
+
try {
|
|
332
|
+
if (!gateio_utils_1.GateioUtils.isValidSymbol(symbol)) {
|
|
333
|
+
throw new Error(`Invalid symbol format: ${symbol}`);
|
|
334
|
+
}
|
|
335
|
+
const currencyPair = gateio_utils_1.GateioUtils.toGateioSymbol(symbol);
|
|
336
|
+
const response = await this.makePublicRequest('/spot/order_book', {
|
|
337
|
+
currency_pair: currencyPair,
|
|
338
|
+
limit: '100',
|
|
339
|
+
});
|
|
340
|
+
if (!response) {
|
|
341
|
+
throw new Error('No order book data found');
|
|
342
|
+
}
|
|
343
|
+
return this.dataMapper.mapOrderBook(response, currencyPair);
|
|
344
|
+
}
|
|
345
|
+
catch (error) {
|
|
346
|
+
const errorMessage = gateio_utils_1.GateioUtils.mapErrorMessage(error);
|
|
347
|
+
this.logger.error('Get order book failed', { symbol, error: errorMessage });
|
|
348
|
+
this.handleError(new Error(errorMessage), 'getOrderBook');
|
|
349
|
+
}
|
|
350
|
+
}
|
|
351
|
+
/**
|
|
352
|
+
* Get recent trades for a trading pair
|
|
353
|
+
*
|
|
354
|
+
* @param symbol - Trading pair symbol (e.g., 'SNEK/USDT')
|
|
355
|
+
* @returns Promise resolving to array of recent trade executions
|
|
356
|
+
* @throws Error if request fails
|
|
357
|
+
*/
|
|
358
|
+
async getRecentTrades(symbol) {
|
|
359
|
+
try {
|
|
360
|
+
if (!gateio_utils_1.GateioUtils.isValidSymbol(symbol)) {
|
|
361
|
+
throw new Error(`Invalid symbol format: ${symbol}`);
|
|
362
|
+
}
|
|
363
|
+
const currencyPair = gateio_utils_1.GateioUtils.toGateioSymbol(symbol);
|
|
364
|
+
const response = await this.makePublicRequest('/spot/trades', {
|
|
365
|
+
currency_pair: currencyPair,
|
|
366
|
+
limit: '100',
|
|
367
|
+
});
|
|
368
|
+
if (!Array.isArray(response)) {
|
|
369
|
+
this.logger.warn('Gate.io recent trades returned unexpected format', { response });
|
|
370
|
+
return [];
|
|
371
|
+
}
|
|
372
|
+
return response.map((tradeData) => this.dataMapper.mapTrade(tradeData, currencyPair));
|
|
373
|
+
}
|
|
374
|
+
catch (error) {
|
|
375
|
+
const errorMessage = gateio_utils_1.GateioUtils.mapErrorMessage(error);
|
|
376
|
+
this.logger.error('Get recent trades failed', { symbol, error: errorMessage });
|
|
377
|
+
this.handleError(new Error(errorMessage), 'getRecentTrades');
|
|
378
|
+
}
|
|
379
|
+
}
|
|
380
|
+
// =============================================================================
|
|
381
|
+
// WebSocket Methods
|
|
382
|
+
// =============================================================================
|
|
383
|
+
/**
|
|
384
|
+
* Connect to Gate.io WebSocket for real-time data
|
|
385
|
+
*/
|
|
386
|
+
async connectWebSocket() {
|
|
387
|
+
try {
|
|
388
|
+
if (this.webSocket?.isConnected()) {
|
|
389
|
+
return;
|
|
390
|
+
}
|
|
391
|
+
if (!this.webSocket) {
|
|
392
|
+
this.webSocket = new gateio_websocket_1.GateioWebSocket('wss://api.gateio.ws/ws/v4/');
|
|
393
|
+
}
|
|
394
|
+
await this.webSocket.connectWebSocket();
|
|
395
|
+
}
|
|
396
|
+
catch (error) {
|
|
397
|
+
this.logger.error('Failed to connect Gate.io WebSocket', { error });
|
|
398
|
+
this.handleError(error, 'connectWebSocket');
|
|
399
|
+
}
|
|
400
|
+
}
|
|
401
|
+
/**
|
|
402
|
+
* Disconnect from Gate.io WebSocket
|
|
403
|
+
*/
|
|
404
|
+
async disconnectWebSocket() {
|
|
405
|
+
try {
|
|
406
|
+
if (!this.webSocket) {
|
|
407
|
+
return;
|
|
408
|
+
}
|
|
409
|
+
await this.webSocket.disconnectWebSocket();
|
|
410
|
+
this.webSocket = undefined;
|
|
411
|
+
}
|
|
412
|
+
catch (error) {
|
|
413
|
+
this.logger.error('Failed to disconnect Gate.io WebSocket', { error });
|
|
414
|
+
}
|
|
415
|
+
}
|
|
416
|
+
/**
|
|
417
|
+
* Subscribe to real-time ticker updates for a trading pair
|
|
418
|
+
*/
|
|
419
|
+
async subscribeTicker(symbol, callback) {
|
|
420
|
+
try {
|
|
421
|
+
if (!this.webSocket) {
|
|
422
|
+
await this.connectWebSocket();
|
|
423
|
+
}
|
|
424
|
+
if (!this.webSocket) {
|
|
425
|
+
throw new Error('Failed to initialize WebSocket connection');
|
|
426
|
+
}
|
|
427
|
+
return this.webSocket.subscribeTicker(symbol, callback);
|
|
428
|
+
}
|
|
429
|
+
catch (error) {
|
|
430
|
+
this.logger.error('Failed to subscribe to ticker', { symbol, error });
|
|
431
|
+
this.handleError(error, 'subscribeTicker');
|
|
432
|
+
}
|
|
433
|
+
}
|
|
434
|
+
/**
|
|
435
|
+
* Subscribe to real-time order book updates for a trading pair
|
|
436
|
+
*/
|
|
437
|
+
async subscribeOrderBook(symbol, callback) {
|
|
438
|
+
try {
|
|
439
|
+
if (!this.webSocket) {
|
|
440
|
+
await this.connectWebSocket();
|
|
441
|
+
}
|
|
442
|
+
if (!this.webSocket) {
|
|
443
|
+
throw new Error('Failed to initialize WebSocket connection');
|
|
444
|
+
}
|
|
445
|
+
return this.webSocket.subscribeOrderBook(symbol, callback);
|
|
446
|
+
}
|
|
447
|
+
catch (error) {
|
|
448
|
+
this.logger.error('Failed to subscribe to order book', { symbol, error });
|
|
449
|
+
this.handleError(error, 'subscribeOrderBook');
|
|
450
|
+
}
|
|
451
|
+
}
|
|
452
|
+
/**
|
|
453
|
+
* Subscribe to real-time trade updates for a trading pair
|
|
454
|
+
*/
|
|
455
|
+
async subscribeTrades(symbol, callback) {
|
|
456
|
+
try {
|
|
457
|
+
if (!this.webSocket) {
|
|
458
|
+
await this.connectWebSocket();
|
|
459
|
+
}
|
|
460
|
+
if (!this.webSocket) {
|
|
461
|
+
throw new Error('Failed to initialize WebSocket connection');
|
|
462
|
+
}
|
|
463
|
+
return this.webSocket.subscribeTrades(symbol, callback);
|
|
464
|
+
}
|
|
465
|
+
catch (error) {
|
|
466
|
+
this.logger.error('Failed to subscribe to trades', { symbol, error });
|
|
467
|
+
this.handleError(error, 'subscribeTrades');
|
|
468
|
+
}
|
|
469
|
+
}
|
|
470
|
+
/**
|
|
471
|
+
* Subscribe to real-time order updates (user data)
|
|
472
|
+
* Uses Gate.io UserDataStream for authenticated order updates
|
|
473
|
+
*/
|
|
474
|
+
async subscribeOrders(callback) {
|
|
475
|
+
try {
|
|
476
|
+
if (!this.userDataStream) {
|
|
477
|
+
await this.connectUserDataStream();
|
|
478
|
+
}
|
|
479
|
+
if (!this.userDataStream) {
|
|
480
|
+
throw new Error('User Data Stream not initialized. Call connectUserDataStream() first.');
|
|
481
|
+
}
|
|
482
|
+
return await this.userDataStream.subscribeUserOrders(callback);
|
|
483
|
+
}
|
|
484
|
+
catch (error) {
|
|
485
|
+
this.logger.error('Failed to subscribe to orders', { error });
|
|
486
|
+
this.handleError(error, 'subscribeOrders');
|
|
487
|
+
return '';
|
|
488
|
+
}
|
|
489
|
+
}
|
|
490
|
+
/**
|
|
491
|
+
* Unsubscribe from a WebSocket subscription
|
|
492
|
+
*/
|
|
493
|
+
async unsubscribe(subscriptionId) {
|
|
494
|
+
try {
|
|
495
|
+
if (!this.webSocket) {
|
|
496
|
+
this.logger.warn('No WebSocket instance to unsubscribe from');
|
|
497
|
+
return;
|
|
498
|
+
}
|
|
499
|
+
this.webSocket.unsubscribe(subscriptionId);
|
|
500
|
+
}
|
|
501
|
+
catch (error) {
|
|
502
|
+
this.logger.error('Failed to unsubscribe', { subscriptionId, error });
|
|
503
|
+
}
|
|
504
|
+
}
|
|
505
|
+
/**
|
|
506
|
+
* Check if WebSocket connection is active
|
|
507
|
+
*/
|
|
508
|
+
isWebSocketConnected() {
|
|
509
|
+
return this.webSocket?.isConnected() ?? false;
|
|
510
|
+
}
|
|
511
|
+
/**
|
|
512
|
+
* Get current WebSocket connection status
|
|
513
|
+
*/
|
|
514
|
+
getWebSocketStatus() {
|
|
515
|
+
return this.webSocket?.getWebSocketStatus() ?? 'disconnected';
|
|
516
|
+
}
|
|
517
|
+
// =============================================================================
|
|
518
|
+
// User Data Stream Methods
|
|
519
|
+
// =============================================================================
|
|
520
|
+
/**
|
|
521
|
+
* Connect to user data stream for real-time account updates
|
|
522
|
+
* Uses dedicated GateioUserDataStream class following Bitget/MEXC pattern
|
|
523
|
+
*/
|
|
524
|
+
async connectUserDataStream() {
|
|
525
|
+
try {
|
|
526
|
+
if (!this.auth) {
|
|
527
|
+
throw new Error('Authentication required. Call connect() first.');
|
|
528
|
+
}
|
|
529
|
+
const credentials = this.getCredentials();
|
|
530
|
+
if (!this.userDataStream) {
|
|
531
|
+
this.userDataStream = new gateio_user_stream_1.GateioUserDataStream(credentials);
|
|
532
|
+
}
|
|
533
|
+
await this.userDataStream.connectUserDataStream();
|
|
534
|
+
}
|
|
535
|
+
catch (error) {
|
|
536
|
+
this.handleError(error, 'connectUserDataStream');
|
|
537
|
+
}
|
|
538
|
+
}
|
|
539
|
+
/**
|
|
540
|
+
* Disconnect from user data stream
|
|
541
|
+
*/
|
|
542
|
+
async disconnectUserDataStream() {
|
|
543
|
+
try {
|
|
544
|
+
if (this.userDataStream) {
|
|
545
|
+
await this.userDataStream.disconnectUserDataStream();
|
|
546
|
+
this.userDataStream = undefined;
|
|
547
|
+
}
|
|
548
|
+
}
|
|
549
|
+
catch (error) {
|
|
550
|
+
this.handleError(error, 'disconnectUserDataStream');
|
|
551
|
+
}
|
|
552
|
+
}
|
|
553
|
+
/**
|
|
554
|
+
* Subscribe to real-time user order updates
|
|
555
|
+
* Uses Gate.io's spot.orders channel for authenticated order updates
|
|
556
|
+
*/
|
|
557
|
+
async subscribeUserOrders(callback) {
|
|
558
|
+
try {
|
|
559
|
+
if (!this.userDataStream) {
|
|
560
|
+
throw new Error('User Data Stream not initialized. Call connectUserDataStream() first.');
|
|
561
|
+
}
|
|
562
|
+
return await this.userDataStream.subscribeUserOrders(callback);
|
|
563
|
+
}
|
|
564
|
+
catch (error) {
|
|
565
|
+
this.handleError(error, 'subscribeUserOrders');
|
|
566
|
+
return '';
|
|
567
|
+
}
|
|
568
|
+
}
|
|
569
|
+
/**
|
|
570
|
+
* Subscribe to real-time user trade executions
|
|
571
|
+
* Uses Gate.io's spot.usertrades channel for authenticated trade updates
|
|
572
|
+
*/
|
|
573
|
+
async subscribeUserTrades(callback) {
|
|
574
|
+
try {
|
|
575
|
+
if (!this.userDataStream) {
|
|
576
|
+
throw new Error('User Data Stream not initialized. Call connectUserDataStream() first.');
|
|
577
|
+
}
|
|
578
|
+
return await this.userDataStream.subscribeUserTrades(callback);
|
|
579
|
+
}
|
|
580
|
+
catch (error) {
|
|
581
|
+
this.handleError(error, 'subscribeUserTrades');
|
|
582
|
+
return '';
|
|
583
|
+
}
|
|
584
|
+
}
|
|
585
|
+
/**
|
|
586
|
+
* Check if user data stream is connected
|
|
587
|
+
*/
|
|
588
|
+
isUserDataStreamConnected() {
|
|
589
|
+
return this.userDataStream ? this.userDataStream.isUserDataStreamConnected() : false;
|
|
590
|
+
}
|
|
591
|
+
// =============================================================================
|
|
592
|
+
// Private Helper Methods
|
|
593
|
+
// =============================================================================
|
|
594
|
+
/**
|
|
595
|
+
* Make public request to Gate.io API (no authentication required)
|
|
596
|
+
*/
|
|
597
|
+
async makePublicRequest(endpoint, params = {}) {
|
|
598
|
+
if (!this.auth) {
|
|
599
|
+
throw new Error('Gate.io connector not authenticated');
|
|
600
|
+
}
|
|
601
|
+
return this.auth.makePublicRequest(endpoint, params);
|
|
602
|
+
}
|
|
603
|
+
}
|
|
604
|
+
exports.GateioConnector = GateioConnector;
|
|
605
|
+
//# sourceMappingURL=gateio-connector.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gateio-connector.js","sourceRoot":"","sources":["../../../src/exchanges/gateio/gateio-connector.ts"],"names":[],"mappings":"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"}
|