clodds 1.5.1 → 1.5.2
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/dist/acp/identity.js +21 -13
- package/dist/acp/identity.js.map +1 -1
- package/dist/acp/persistence.js +9 -7
- package/dist/acp/persistence.js.map +1 -1
- package/dist/acp/registry.js +7 -3
- package/dist/acp/registry.js.map +1 -1
- package/dist/agents/handlers/agentbets.js.map +1 -1
- package/dist/agents/handlers/paper-trading.js +1 -1
- package/dist/agents/handlers/paper-trading.js.map +1 -1
- package/dist/agents/handlers/predictfun.js +4 -2
- package/dist/agents/handlers/predictfun.js.map +1 -1
- package/dist/agents/index.js +5 -1
- package/dist/agents/index.js.map +1 -1
- package/dist/alerts/index.js +5 -5
- package/dist/alerts/index.js.map +1 -1
- package/dist/alerts/realtime.js +8 -0
- package/dist/alerts/realtime.js.map +1 -1
- package/dist/api/apikeys.js +1 -1
- package/dist/api/compute/code.js +4 -1
- package/dist/api/compute/code.js.map +1 -1
- package/dist/api/compute/data.js +8 -2
- package/dist/api/compute/data.js.map +1 -1
- package/dist/api/compute/gateway.js +14 -9
- package/dist/api/compute/gateway.js.map +1 -1
- package/dist/api/compute/llm.js +14 -10
- package/dist/api/compute/llm.js.map +1 -1
- package/dist/api/compute/storage.js +6 -2
- package/dist/api/compute/storage.js.map +1 -1
- package/dist/api/compute/trade.js +6 -5
- package/dist/api/compute/trade.js.map +1 -1
- package/dist/api/compute/web.js +5 -0
- package/dist/api/compute/web.js.map +1 -1
- package/dist/api/fees.js +5 -1
- package/dist/api/fees.js.map +1 -1
- package/dist/api/gateway.js +35 -7
- package/dist/api/gateway.js.map +1 -1
- package/dist/api/jobs.js +15 -6
- package/dist/api/jobs.js.map +1 -1
- package/dist/api/middleware.js +12 -3
- package/dist/api/middleware.js.map +1 -1
- package/dist/api/sdk.js +1 -1
- package/dist/api/server.js +16 -7
- package/dist/api/server.js.map +1 -1
- package/dist/arbitrage/index.js +14 -4
- package/dist/arbitrage/index.js.map +1 -1
- package/dist/auth/copilot.js +3 -3
- package/dist/auth/copilot.js.map +1 -1
- package/dist/auth/google.js +6 -2
- package/dist/auth/google.js.map +1 -1
- package/dist/auth/oauth.js +18 -11
- package/dist/auth/oauth.js.map +1 -1
- package/dist/auth/qwen.js +4 -4
- package/dist/auth/qwen.js.map +1 -1
- package/dist/auto-reply/index.js +18 -4
- package/dist/auto-reply/index.js.map +1 -1
- package/dist/automation/cron.js +10 -3
- package/dist/automation/cron.js.map +1 -1
- package/dist/automation/webhooks.js +13 -2
- package/dist/automation/webhooks.js.map +1 -1
- package/dist/bankr/client.js +3 -3
- package/dist/base/provider.js +16 -2
- package/dist/base/provider.js.map +1 -1
- package/dist/bin/worker.js +4 -4
- package/dist/bin/worker.js.map +1 -1
- package/dist/bittensor/chutes.js +1 -1
- package/dist/bittensor/chutes.js.map +1 -1
- package/dist/bittensor/python-runner.js +5 -1
- package/dist/bittensor/python-runner.js.map +1 -1
- package/dist/bittensor/service.js +1 -1
- package/dist/bittensor/service.js.map +1 -1
- package/dist/browser/index.js +40 -16
- package/dist/browser/index.js.map +1 -1
- package/dist/cache/index.d.ts +2 -0
- package/dist/cache/index.js +30 -5
- package/dist/cache/index.js.map +1 -1
- package/dist/canvas/index.js +56 -27
- package/dist/canvas/index.js.map +1 -1
- package/dist/channels/googlechat/index.js +3 -0
- package/dist/channels/googlechat/index.js.map +1 -1
- package/dist/channels/imessage/index.js +6 -0
- package/dist/channels/imessage/index.js.map +1 -1
- package/dist/channels/index.js +7 -2
- package/dist/channels/index.js.map +1 -1
- package/dist/channels/line/index.d.ts +1 -1
- package/dist/channels/line/index.js +4 -2
- package/dist/channels/line/index.js.map +1 -1
- package/dist/channels/mattermost/index.js +5 -0
- package/dist/channels/mattermost/index.js.map +1 -1
- package/dist/channels/nostr/index.js +10 -2
- package/dist/channels/nostr/index.js.map +1 -1
- package/dist/channels/teams/index.js +20 -3
- package/dist/channels/teams/index.js.map +1 -1
- package/dist/channels/telegram/index.js +20 -3
- package/dist/channels/telegram/index.js.map +1 -1
- package/dist/channels/tlon/index.js +6 -1
- package/dist/channels/tlon/index.js.map +1 -1
- package/dist/channels/voice/index.js +16 -0
- package/dist/channels/voice/index.js.map +1 -1
- package/dist/channels/webchat/index.js +6 -1
- package/dist/channels/webchat/index.js.map +1 -1
- package/dist/channels/zalo/index.js +4 -2
- package/dist/channels/zalo/index.js.map +1 -1
- package/dist/cli/commands/doctor.js +2 -2
- package/dist/cli/commands/doctor.js.map +1 -1
- package/dist/cli/commands/index.js +54 -24
- package/dist/cli/commands/index.js.map +1 -1
- package/dist/cli/commands/onboard.js +12 -11
- package/dist/cli/commands/onboard.js.map +1 -1
- package/dist/cli/commands/skills.js +1 -1
- package/dist/cli/index.js +2 -2
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/secure.js +11 -5
- package/dist/cli/secure.js.map +1 -1
- package/dist/commands/registry.js +17 -9
- package/dist/commands/registry.js.map +1 -1
- package/dist/config/index.js +42 -32
- package/dist/config/index.js.map +1 -1
- package/dist/credentials/index.js +7 -6
- package/dist/credentials/index.js.map +1 -1
- package/dist/cron/index.js +15 -1
- package/dist/cron/index.js.map +1 -1
- package/dist/db/index.d.ts +12 -4
- package/dist/db/index.js +8 -6
- package/dist/db/index.js.map +1 -1
- package/dist/docker/index.d.ts +0 -10
- package/dist/docker/index.js +52 -57
- package/dist/docker/index.js.map +1 -1
- package/dist/doctor/index.js +16 -7
- package/dist/doctor/index.js.map +1 -1
- package/dist/embeddings/index.js +42 -8
- package/dist/embeddings/index.js.map +1 -1
- package/dist/evm/contracts.js +8 -1
- package/dist/evm/contracts.js.map +1 -1
- package/dist/evm/odos.js +1 -1
- package/dist/evm/odos.js.map +1 -1
- package/dist/evm/oneinch.js +7 -4
- package/dist/evm/oneinch.js.map +1 -1
- package/dist/evm/pancakeswap.js +1 -1
- package/dist/evm/pancakeswap.js.map +1 -1
- package/dist/evm/transfers.js +10 -5
- package/dist/evm/transfers.js.map +1 -1
- package/dist/evm/uniswap.js +1 -1
- package/dist/evm/uniswap.js.map +1 -1
- package/dist/evm/virtuals.js +7 -2
- package/dist/evm/virtuals.js.map +1 -1
- package/dist/exchanges/binance-futures/index.js +24 -21
- package/dist/exchanges/binance-futures/index.js.map +1 -1
- package/dist/exchanges/bybit/index.js +17 -14
- package/dist/exchanges/bybit/index.js.map +1 -1
- package/dist/exchanges/hyperliquid/index.js +28 -20
- package/dist/exchanges/hyperliquid/index.js.map +1 -1
- package/dist/exchanges/lighter/index.js +4 -4
- package/dist/exchanges/mexc/index.js +15 -15
- package/dist/exchanges/mexc/index.js.map +1 -1
- package/dist/exchanges/opinion/index.js +7 -7
- package/dist/exchanges/opinion/index.js.map +1 -1
- package/dist/exchanges/predictfun/index.js +1 -1
- package/dist/execution/index.js +93 -87
- package/dist/execution/index.js.map +1 -1
- package/dist/extensions/copilot-proxy/index.js +13 -7
- package/dist/extensions/copilot-proxy/index.js.map +1 -1
- package/dist/extensions/diagnostics-otel/index.js +8 -0
- package/dist/extensions/diagnostics-otel/index.js.map +1 -1
- package/dist/extensions/google-auth/index.js +4 -1
- package/dist/extensions/google-auth/index.js.map +1 -1
- package/dist/extensions/llm-task/index.js +28 -10
- package/dist/extensions/llm-task/index.js.map +1 -1
- package/dist/extensions/lobster/index.js +27 -8
- package/dist/extensions/lobster/index.js.map +1 -1
- package/dist/extensions/memory-lancedb/index.js +16 -6
- package/dist/extensions/memory-lancedb/index.js.map +1 -1
- package/dist/extensions/open-prose/index.js +1 -1
- package/dist/extensions/task-runner/index.js +12 -5
- package/dist/extensions/task-runner/index.js.map +1 -1
- package/dist/farcaster/client.js +7 -7
- package/dist/feeds/agentbets/index.d.ts +1 -1
- package/dist/feeds/betfair/index.js +12 -6
- package/dist/feeds/betfair/index.js.map +1 -1
- package/dist/feeds/crypto/index.js +38 -30
- package/dist/feeds/crypto/index.js.map +1 -1
- package/dist/feeds/drift/trading.js +4 -4
- package/dist/feeds/external/index.js +3 -0
- package/dist/feeds/external/index.js.map +1 -1
- package/dist/feeds/fred/index.js.map +1 -1
- package/dist/feeds/hedgehog/index.js +10 -2
- package/dist/feeds/hedgehog/index.js.map +1 -1
- package/dist/feeds/manifold/index.js +1 -1
- package/dist/feeds/metaculus/index.js +2 -2
- package/dist/feeds/opinion/index.js +2 -2
- package/dist/feeds/polymarket/index.js +7 -1
- package/dist/feeds/polymarket/index.js.map +1 -1
- package/dist/feeds/polymarket/whale-tracker.js.map +1 -1
- package/dist/feeds/predictfun/index.js +2 -2
- package/dist/feeds/smarkets/index.js +12 -6
- package/dist/feeds/smarkets/index.js.map +1 -1
- package/dist/gateway/feeds-routes.d.ts +8 -7
- package/dist/gateway/feeds-routes.js.map +1 -1
- package/dist/gateway/index.js +28 -6
- package/dist/gateway/index.js.map +1 -1
- package/dist/history/index.js +8 -4
- package/dist/history/index.js.map +1 -1
- package/dist/hooks/index.js +14 -5
- package/dist/hooks/index.js.map +1 -1
- package/dist/i18n/index.js +2 -1
- package/dist/i18n/index.js.map +1 -1
- package/dist/identity/erc8004.js +13 -3
- package/dist/identity/erc8004.js.map +1 -1
- package/dist/index.js +3 -3
- package/dist/index.js.map +1 -1
- package/dist/infra/index.d.ts +1 -1
- package/dist/infra/index.js +39 -26
- package/dist/infra/index.js.map +1 -1
- package/dist/ledger/hooks.js +26 -18
- package/dist/ledger/hooks.js.map +1 -1
- package/dist/ledger/storage.js +23 -13
- package/dist/ledger/storage.js.map +1 -1
- package/dist/link-understanding/index.js +26 -2
- package/dist/link-understanding/index.js.map +1 -1
- package/dist/logging/index.js +31 -4
- package/dist/logging/index.js.map +1 -1
- package/dist/macos/index.d.ts +1 -1
- package/dist/macos/index.js +41 -36
- package/dist/macos/index.js.map +1 -1
- package/dist/markdown/index.js +25 -8
- package/dist/markdown/index.js.map +1 -1
- package/dist/market-index/index.js +8 -6
- package/dist/market-index/index.js.map +1 -1
- package/dist/mcp/index.js +67 -10
- package/dist/mcp/index.js.map +1 -1
- package/dist/mcp/server.js +21 -3
- package/dist/mcp/server.js.map +1 -1
- package/dist/media/index.js +17 -15
- package/dist/media/index.js.map +1 -1
- package/dist/memory/context.js +17 -9
- package/dist/memory/context.js.map +1 -1
- package/dist/memory/index.js +6 -5
- package/dist/memory/index.js.map +1 -1
- package/dist/ml-pipeline/collector.js +14 -3
- package/dist/ml-pipeline/collector.js.map +1 -1
- package/dist/ml-pipeline/trainer.js +1 -1
- package/dist/ml-pipeline/trainer.js.map +1 -1
- package/dist/monitoring/health.js +15 -3
- package/dist/monitoring/health.js.map +1 -1
- package/dist/monitoring/metrics.js +2 -2
- package/dist/nodes/index.js +40 -25
- package/dist/nodes/index.js.map +1 -1
- package/dist/opportunity/combinatorial.js +4 -1
- package/dist/opportunity/combinatorial.js.map +1 -1
- package/dist/opportunity/correlation.js +2 -2
- package/dist/opportunity/executor.js +14 -5
- package/dist/opportunity/executor.js.map +1 -1
- package/dist/opportunity/risk.js +3 -1
- package/dist/opportunity/risk.js.map +1 -1
- package/dist/opportunity/scoring.js +3 -1
- package/dist/opportunity/scoring.js.map +1 -1
- package/dist/pairing/index.js +8 -4
- package/dist/pairing/index.js.map +1 -1
- package/dist/payments/x402/evm.js +4 -4
- package/dist/payments/x402/index.js +26 -7
- package/dist/payments/x402/index.js.map +1 -1
- package/dist/payments/x402/solana.js +3 -3
- package/dist/percolator/feed.js +1 -1
- package/dist/percolator/feed.js.map +1 -1
- package/dist/permissions/index.d.ts +2 -0
- package/dist/permissions/index.js +22 -12
- package/dist/permissions/index.js.map +1 -1
- package/dist/plugins/index.d.ts +3 -1
- package/dist/plugins/index.js +18 -6
- package/dist/plugins/index.js.map +1 -1
- package/dist/portfolio/index.js +16 -15
- package/dist/portfolio/index.js.map +1 -1
- package/dist/presence/index.js +17 -5
- package/dist/presence/index.js.map +1 -1
- package/dist/process/index.js +40 -14
- package/dist/process/index.js.map +1 -1
- package/dist/providers/discovery.js +34 -28
- package/dist/providers/discovery.js.map +1 -1
- package/dist/providers/health.js +7 -4
- package/dist/providers/health.js.map +1 -1
- package/dist/providers/index.js +36 -33
- package/dist/providers/index.js.map +1 -1
- package/dist/queue/index.js +1 -1
- package/dist/remote/index.d.ts +0 -5
- package/dist/remote/index.js +41 -9
- package/dist/remote/index.js.map +1 -1
- package/dist/risk/circuit-breaker.js +13 -5
- package/dist/risk/circuit-breaker.js.map +1 -1
- package/dist/risk/engine.js +2 -2
- package/dist/risk/volatility.js +1 -1
- package/dist/risk/volatility.js.map +1 -1
- package/dist/routing/index.js +5 -2
- package/dist/routing/index.js.map +1 -1
- package/dist/search/index.js +7 -5
- package/dist/search/index.js.map +1 -1
- package/dist/security/address-checker.js +40 -19
- package/dist/security/address-checker.js.map +1 -1
- package/dist/security/code-scanner.js +7 -5
- package/dist/security/code-scanner.js.map +1 -1
- package/dist/security/index.d.ts +3 -0
- package/dist/security/index.js +19 -7
- package/dist/security/index.js.map +1 -1
- package/dist/security/tx-validator.js +2 -2
- package/dist/security/tx-validator.js.map +1 -1
- package/dist/services/feature-engineering/rolling-window.d.ts +7 -0
- package/dist/services/feature-engineering/rolling-window.js +23 -0
- package/dist/services/feature-engineering/rolling-window.js.map +1 -1
- package/dist/services/feature-engineering/thresholds.js +2 -2
- package/dist/services/feature-engineering/thresholds.js.map +1 -1
- package/dist/services/tick-recorder/index.js +13 -1
- package/dist/services/tick-recorder/index.js.map +1 -1
- package/dist/services/tick-recorder/queries.js +11 -7
- package/dist/services/tick-recorder/queries.js.map +1 -1
- package/dist/services/tick-streamer/index.js +6 -2
- package/dist/services/tick-streamer/index.js.map +1 -1
- package/dist/session/index.d.ts +1 -1
- package/dist/session/index.js +31 -6
- package/dist/session/index.js.map +1 -1
- package/dist/sessions/index.js +76 -52
- package/dist/sessions/index.js.map +1 -1
- package/dist/signal-router/router.js +8 -1
- package/dist/signal-router/router.js.map +1 -1
- package/dist/skills/bundled/agentbets/index.js.map +1 -1
- package/dist/skills/bundled/auto-reply/SKILL.md +19 -16
- package/dist/skills/bundled/automation/SKILL.md +33 -215
- package/dist/skills/bundled/backtest/SKILL.md +2 -1
- package/dist/skills/bundled/credentials/SKILL.md +2 -1
- package/dist/skills/bundled/edge/SKILL.md +6 -3
- package/dist/skills/bundled/sandbox/SKILL.md +29 -240
- package/dist/skills/bundled/trading-kalshi/SKILL.md +65 -586
- package/dist/skills/bundled/usage/SKILL.md +8 -18
- package/dist/skills/bundled/webhooks/SKILL.md +31 -279
- package/dist/skills/bundled/whale-tracking/SKILL.md +24 -22
- package/dist/solana/copytrade.js +5 -5
- package/dist/solana/drift.js +2 -2
- package/dist/solana/drift.js.map +1 -1
- package/dist/solana/meteora-dbc.d.ts +2 -2
- package/dist/solana/pumpapi.js +4 -0
- package/dist/solana/pumpapi.js.map +1 -1
- package/dist/solana/raydium.js +46 -10
- package/dist/solana/raydium.js.map +1 -1
- package/dist/solana/swarm-copytrade.js +2 -2
- package/dist/solana/wallet.js +12 -3
- package/dist/solana/wallet.js.map +1 -1
- package/dist/strategies/crypto-hft/index.js +2 -0
- package/dist/strategies/crypto-hft/index.js.map +1 -1
- package/dist/strategies/crypto-hft/positions.js +11 -3
- package/dist/strategies/crypto-hft/positions.js.map +1 -1
- package/dist/strategies/crypto-hft/presets.js +2 -1
- package/dist/strategies/crypto-hft/presets.js.map +1 -1
- package/dist/strategies/crypto-hft/strategies.js +4 -3
- package/dist/strategies/crypto-hft/strategies.js.map +1 -1
- package/dist/strategies/hft-divergence/detector.js +5 -1
- package/dist/strategies/hft-divergence/detector.js.map +1 -1
- package/dist/strategies/hft-divergence/position-manager.js +13 -1
- package/dist/strategies/hft-divergence/position-manager.js.map +1 -1
- package/dist/strategies/hft-divergence/strategy.js +3 -1
- package/dist/strategies/hft-divergence/strategy.js.map +1 -1
- package/dist/streaming/index.js +21 -5
- package/dist/streaming/index.js.map +1 -1
- package/dist/tailscale/index.d.ts +0 -4
- package/dist/tailscale/index.js +5 -8
- package/dist/tailscale/index.js.map +1 -1
- package/dist/telemetry/index.d.ts +1 -0
- package/dist/telemetry/index.js +49 -6
- package/dist/telemetry/index.js.map +1 -1
- package/dist/tools/canvas.js +32 -8
- package/dist/tools/canvas.js.map +1 -1
- package/dist/tools/exec.js +32 -2
- package/dist/tools/exec.js.map +1 -1
- package/dist/tools/image.js +19 -0
- package/dist/tools/image.js.map +1 -1
- package/dist/tools/sql.js +4 -1
- package/dist/tools/sql.js.map +1 -1
- package/dist/tools/transcription.js +13 -0
- package/dist/tools/transcription.js.map +1 -1
- package/dist/tools/web-fetch.js +14 -0
- package/dist/tools/web-fetch.js.map +1 -1
- package/dist/tools/web-search.js +14 -0
- package/dist/tools/web-search.js.map +1 -1
- package/dist/trading/backtest.js +3 -3
- package/dist/trading/backtest.js.map +1 -1
- package/dist/trading/bots/index.d.ts +9 -1
- package/dist/trading/bots/index.js +4 -0
- package/dist/trading/bots/index.js.map +1 -1
- package/dist/trading/devtools.js +1 -1
- package/dist/trading/devtools.js.map +1 -1
- package/dist/trading/futures/index.js +5 -5
- package/dist/trading/index.js +1 -1
- package/dist/trading/index.js.map +1 -1
- package/dist/trading/logger.js +27 -20
- package/dist/trading/logger.js.map +1 -1
- package/dist/trading/safety.d.ts +2 -0
- package/dist/trading/safety.js +12 -2
- package/dist/trading/safety.js.map +1 -1
- package/dist/trading/stream.js +1 -1
- package/dist/trading/stream.js.map +1 -1
- package/dist/trading/tracking.d.ts +1 -1
- package/dist/trading/tracking.js.map +1 -1
- package/dist/utils/config.js +4 -3
- package/dist/utils/config.js.map +1 -1
- package/dist/utils/http.js +15 -1
- package/dist/utils/http.js.map +1 -1
- package/dist/utils/kelly.js +14 -5
- package/dist/utils/kelly.js.map +1 -1
- package/dist/utils/rate-limiter.js +25 -10
- package/dist/utils/rate-limiter.js.map +1 -1
- package/dist/voice/index.d.ts +5 -1
- package/dist/voice/index.js +65 -25
- package/dist/voice/index.js.map +1 -1
- package/dist/weather/edge.js +4 -2
- package/dist/weather/edge.js.map +1 -1
- package/dist/weather/markets.d.ts +1 -0
- package/dist/weather/markets.js +17 -8
- package/dist/weather/markets.js.map +1 -1
- package/dist/weather/noaa.d.ts +2 -0
- package/dist/weather/noaa.js +22 -5
- package/dist/weather/noaa.js.map +1 -1
- package/dist/web/index.d.ts +3 -0
- package/dist/web/index.js +60 -12
- package/dist/web/index.js.map +1 -1
- package/dist/wizard/index.js +13 -14
- package/dist/wizard/index.js.map +1 -1
- package/package.json +1 -1
package/dist/execution/index.js
CHANGED
|
@@ -974,9 +974,11 @@ async function placeKalshiOrder(auth, ticker, side, action, price, count, orderT
|
|
|
974
974
|
};
|
|
975
975
|
}
|
|
976
976
|
// Calculate slippage from mid price
|
|
977
|
-
const slippage =
|
|
978
|
-
? (
|
|
979
|
-
|
|
977
|
+
const slippage = orderbook.midPrice > 0
|
|
978
|
+
? (action === 'buy'
|
|
979
|
+
? (avgFillPrice - orderbook.midPrice) / orderbook.midPrice
|
|
980
|
+
: (orderbook.midPrice - avgFillPrice) / orderbook.midPrice)
|
|
981
|
+
: 0;
|
|
980
982
|
if (slippage > maxSlippage) {
|
|
981
983
|
return {
|
|
982
984
|
success: false,
|
|
@@ -1844,6 +1846,10 @@ function createExecutionService(config) {
|
|
|
1844
1846
|
}
|
|
1845
1847
|
// ==========================================================================
|
|
1846
1848
|
function validateOrder(request) {
|
|
1849
|
+
// Guard against NaN/Infinity values that would bypass all checks
|
|
1850
|
+
if (!Number.isFinite(request.price) || !Number.isFinite(request.size)) {
|
|
1851
|
+
return `Invalid order: price=${request.price}, size=${request.size} (must be finite numbers)`;
|
|
1852
|
+
}
|
|
1847
1853
|
// Circuit breaker check - block orders when tripped
|
|
1848
1854
|
if (circuitBreaker && !circuitBreaker.canTrade()) {
|
|
1849
1855
|
const state = circuitBreaker.getState();
|
|
@@ -1901,8 +1907,9 @@ function createExecutionService(config) {
|
|
|
1901
1907
|
}
|
|
1902
1908
|
}
|
|
1903
1909
|
catch (err) {
|
|
1904
|
-
// Shield
|
|
1905
|
-
|
|
1910
|
+
// Shield failure — log at warn level so it's visible; allow trade to proceed
|
|
1911
|
+
// but flag it so operators know security was not verified
|
|
1912
|
+
logger_1.logger.warn({ err }, 'Security shield check failed — trade proceeding without security verification');
|
|
1906
1913
|
}
|
|
1907
1914
|
}
|
|
1908
1915
|
// Dry run mode
|
|
@@ -2242,133 +2249,132 @@ function createExecutionService(config) {
|
|
|
2242
2249
|
}
|
|
2243
2250
|
},
|
|
2244
2251
|
async placeOrdersBatch(orders) {
|
|
2245
|
-
|
|
2246
|
-
const
|
|
2247
|
-
const
|
|
2248
|
-
const
|
|
2249
|
-
const
|
|
2250
|
-
const
|
|
2252
|
+
// Track original indices so results are returned in the same order as input
|
|
2253
|
+
const indexedOrders = orders.map((o, i) => ({ order: o, index: i }));
|
|
2254
|
+
const resultsByIndex = new Array(orders.length);
|
|
2255
|
+
const polyIndexed = indexedOrders.filter(o => o.order.platform === 'polymarket');
|
|
2256
|
+
const kalshiIndexed = indexedOrders.filter(o => o.order.platform === 'kalshi');
|
|
2257
|
+
const opinionIndexed = indexedOrders.filter(o => o.order.platform === 'opinion');
|
|
2258
|
+
const predictfunIndexed = indexedOrders.filter(o => o.order.platform === 'predictfun');
|
|
2259
|
+
const otherIndexed = indexedOrders.filter(o => o.order.platform !== 'opinion' && o.order.platform !== 'polymarket' && o.order.platform !== 'kalshi' && o.order.platform !== 'predictfun');
|
|
2251
2260
|
// Execute Polymarket batch if we have Polymarket orders and config
|
|
2252
|
-
if (
|
|
2261
|
+
if (polyIndexed.length > 0 && config.polymarket) {
|
|
2253
2262
|
try {
|
|
2254
|
-
const batchInput =
|
|
2255
|
-
tokenId: o.tokenId,
|
|
2256
|
-
side: o.side,
|
|
2257
|
-
price: o.price,
|
|
2258
|
-
size: o.size,
|
|
2259
|
-
negRisk: o.negRisk,
|
|
2260
|
-
postOnly: o.postOnly,
|
|
2263
|
+
const batchInput = polyIndexed.map(o => ({
|
|
2264
|
+
tokenId: o.order.tokenId,
|
|
2265
|
+
side: o.order.side,
|
|
2266
|
+
price: o.order.price,
|
|
2267
|
+
size: o.order.size,
|
|
2268
|
+
negRisk: o.order.negRisk,
|
|
2269
|
+
postOnly: o.order.postOnly,
|
|
2261
2270
|
}));
|
|
2262
2271
|
const batchResults = await placePolymarketOrdersBatch(config.polymarket, batchInput);
|
|
2263
|
-
|
|
2272
|
+
for (let i = 0; i < polyIndexed.length; i++) {
|
|
2273
|
+
resultsByIndex[polyIndexed[i].index] = batchResults[i] ?? { success: false, error: 'Missing batch result' };
|
|
2274
|
+
}
|
|
2264
2275
|
}
|
|
2265
2276
|
catch (err) {
|
|
2266
|
-
|
|
2267
|
-
success: false,
|
|
2268
|
-
|
|
2269
|
-
})));
|
|
2277
|
+
for (const o of polyIndexed) {
|
|
2278
|
+
resultsByIndex[o.index] = { success: false, error: err instanceof Error ? err.message : 'Batch order failed' };
|
|
2279
|
+
}
|
|
2270
2280
|
}
|
|
2271
2281
|
}
|
|
2272
|
-
else if (
|
|
2273
|
-
|
|
2274
|
-
success: false,
|
|
2275
|
-
|
|
2276
|
-
})));
|
|
2282
|
+
else if (polyIndexed.length > 0) {
|
|
2283
|
+
for (const o of polyIndexed) {
|
|
2284
|
+
resultsByIndex[o.index] = { success: false, error: 'Polymarket trading not configured' };
|
|
2285
|
+
}
|
|
2277
2286
|
}
|
|
2278
2287
|
// Execute Kalshi batch if we have Kalshi orders and config
|
|
2279
|
-
if (
|
|
2288
|
+
if (kalshiIndexed.length > 0 && config.kalshi) {
|
|
2280
2289
|
try {
|
|
2281
|
-
const batchInput =
|
|
2282
|
-
ticker: o.marketId,
|
|
2283
|
-
side: o.outcome?.toLowerCase() || 'yes',
|
|
2284
|
-
action: o.side,
|
|
2285
|
-
price: o.price,
|
|
2286
|
-
count: o.size,
|
|
2290
|
+
const batchInput = kalshiIndexed.map(o => ({
|
|
2291
|
+
ticker: o.order.marketId,
|
|
2292
|
+
side: o.order.outcome?.toLowerCase() || 'yes',
|
|
2293
|
+
action: o.order.side,
|
|
2294
|
+
price: o.order.price,
|
|
2295
|
+
count: o.order.size,
|
|
2287
2296
|
}));
|
|
2288
2297
|
const batchResults = await placeKalshiOrdersBatch(config.kalshi, batchInput);
|
|
2289
|
-
|
|
2298
|
+
for (let i = 0; i < kalshiIndexed.length; i++) {
|
|
2299
|
+
resultsByIndex[kalshiIndexed[i].index] = batchResults[i] ?? { success: false, error: 'Missing batch result' };
|
|
2300
|
+
}
|
|
2290
2301
|
}
|
|
2291
2302
|
catch (err) {
|
|
2292
|
-
|
|
2293
|
-
success: false,
|
|
2294
|
-
|
|
2295
|
-
})));
|
|
2303
|
+
for (const o of kalshiIndexed) {
|
|
2304
|
+
resultsByIndex[o.index] = { success: false, error: err instanceof Error ? err.message : 'Batch order failed' };
|
|
2305
|
+
}
|
|
2296
2306
|
}
|
|
2297
2307
|
}
|
|
2298
|
-
else if (
|
|
2299
|
-
|
|
2300
|
-
success: false,
|
|
2301
|
-
|
|
2302
|
-
})));
|
|
2308
|
+
else if (kalshiIndexed.length > 0) {
|
|
2309
|
+
for (const o of kalshiIndexed) {
|
|
2310
|
+
resultsByIndex[o.index] = { success: false, error: 'Kalshi trading not configured' };
|
|
2311
|
+
}
|
|
2303
2312
|
}
|
|
2304
2313
|
// Execute Opinion batch if we have Opinion orders and config
|
|
2305
|
-
if (
|
|
2314
|
+
if (opinionIndexed.length > 0 && config.opinion) {
|
|
2306
2315
|
try {
|
|
2307
|
-
const batchInput =
|
|
2308
|
-
marketId: parseInt(o.marketId, 10),
|
|
2309
|
-
tokenId: o.tokenId,
|
|
2310
|
-
side: o.side.toUpperCase(),
|
|
2311
|
-
price: o.price,
|
|
2312
|
-
amount: o.size,
|
|
2316
|
+
const batchInput = opinionIndexed.map(o => ({
|
|
2317
|
+
marketId: parseInt(o.order.marketId, 10),
|
|
2318
|
+
tokenId: o.order.tokenId,
|
|
2319
|
+
side: o.order.side.toUpperCase(),
|
|
2320
|
+
price: o.order.price,
|
|
2321
|
+
amount: o.order.size,
|
|
2313
2322
|
}));
|
|
2314
2323
|
const batchResults = await placeOpinionOrdersBatch(config.opinion, batchInput);
|
|
2315
|
-
|
|
2316
|
-
|
|
2317
|
-
|
|
2318
|
-
|
|
2319
|
-
|
|
2324
|
+
for (let i = 0; i < opinionIndexed.length; i++) {
|
|
2325
|
+
const r = batchResults[i];
|
|
2326
|
+
resultsByIndex[opinionIndexed[i].index] = r
|
|
2327
|
+
? { success: r.success, orderId: r.orderId, error: r.error }
|
|
2328
|
+
: { success: false, error: 'Missing batch result' };
|
|
2329
|
+
}
|
|
2320
2330
|
}
|
|
2321
2331
|
catch (err) {
|
|
2322
|
-
|
|
2323
|
-
|
|
2324
|
-
|
|
2325
|
-
error: err instanceof Error ? err.message : 'Batch order failed',
|
|
2326
|
-
})));
|
|
2332
|
+
for (const o of opinionIndexed) {
|
|
2333
|
+
resultsByIndex[o.index] = { success: false, error: err instanceof Error ? err.message : 'Batch order failed' };
|
|
2334
|
+
}
|
|
2327
2335
|
}
|
|
2328
2336
|
}
|
|
2329
|
-
else if (
|
|
2330
|
-
|
|
2331
|
-
|
|
2332
|
-
|
|
2333
|
-
error: 'Opinion trading not configured',
|
|
2334
|
-
})));
|
|
2337
|
+
else if (opinionIndexed.length > 0) {
|
|
2338
|
+
for (const o of opinionIndexed) {
|
|
2339
|
+
resultsByIndex[o.index] = { success: false, error: 'Opinion trading not configured' };
|
|
2340
|
+
}
|
|
2335
2341
|
}
|
|
2336
2342
|
// Execute PredictFun orders (no native batch API — sequential via SDK with EIP-712 signing)
|
|
2337
|
-
if (
|
|
2338
|
-
for (const
|
|
2343
|
+
if (predictfunIndexed.length > 0 && config.predictfun) {
|
|
2344
|
+
for (const o of predictfunIndexed) {
|
|
2339
2345
|
try {
|
|
2340
|
-
const result = await placePredictFunOrder(config.predictfun, order.tokenId, order.side, order.price, order.size, order.marketId);
|
|
2341
|
-
|
|
2346
|
+
const result = await placePredictFunOrder(config.predictfun, o.order.tokenId, o.order.side, o.order.price, o.order.size, o.order.marketId);
|
|
2347
|
+
resultsByIndex[o.index] = result;
|
|
2342
2348
|
}
|
|
2343
2349
|
catch (err) {
|
|
2344
|
-
|
|
2350
|
+
resultsByIndex[o.index] = {
|
|
2345
2351
|
success: false,
|
|
2346
2352
|
error: err instanceof Error ? err.message : 'Order failed',
|
|
2347
|
-
}
|
|
2353
|
+
};
|
|
2348
2354
|
}
|
|
2349
2355
|
}
|
|
2350
2356
|
}
|
|
2351
|
-
else if (
|
|
2352
|
-
|
|
2353
|
-
success: false,
|
|
2354
|
-
|
|
2355
|
-
})));
|
|
2357
|
+
else if (predictfunIndexed.length > 0) {
|
|
2358
|
+
for (const o of predictfunIndexed) {
|
|
2359
|
+
resultsByIndex[o.index] = { success: false, error: 'PredictFun trading not configured' };
|
|
2360
|
+
}
|
|
2356
2361
|
}
|
|
2357
2362
|
// Execute other orders individually (fallback)
|
|
2358
|
-
for (const
|
|
2363
|
+
for (const o of otherIndexed) {
|
|
2359
2364
|
try {
|
|
2360
|
-
const result = order.side === 'buy'
|
|
2361
|
-
? await this.buyLimit(order)
|
|
2362
|
-
: await this.sellLimit(order);
|
|
2363
|
-
|
|
2365
|
+
const result = o.order.side === 'buy'
|
|
2366
|
+
? await this.buyLimit(o.order)
|
|
2367
|
+
: await this.sellLimit(o.order);
|
|
2368
|
+
resultsByIndex[o.index] = result;
|
|
2364
2369
|
}
|
|
2365
2370
|
catch (err) {
|
|
2366
|
-
|
|
2371
|
+
resultsByIndex[o.index] = {
|
|
2367
2372
|
success: false,
|
|
2368
2373
|
error: err instanceof Error ? err.message : 'Order failed',
|
|
2369
|
-
}
|
|
2374
|
+
};
|
|
2370
2375
|
}
|
|
2371
2376
|
}
|
|
2377
|
+
const results = resultsByIndex;
|
|
2372
2378
|
return results;
|
|
2373
2379
|
},
|
|
2374
2380
|
async cancelOrdersBatch(platform, orderIds) {
|