[package]
name = "digdigdig3"
version.workspace = true
edition.workspace = true
license.workspace = true
repository.workspace = true
homepage.workspace = true
keywords.workspace = true
categories.workspace = true
description = "Unified async Rust API for 47 exchange connectors (REST + WebSocket). The core layer — pure ExchangeHub + connectors. Higher-level builder, persistence, replay, OB tracker live in `digdigdig3-station`."
documentation = "https://docs.rs/digdigdig3"
readme = "../../README.md"
exclude = [
    # Internal research / workflow / audit notes — never ship to crates.io
    "**/research/**",
    "contributing/**",
    "**/AUDIT*.md",
    "**/ARCHITECTURE_AUDIT.md",
    "**/IMPLEMENTATION*.md",
    "**/FIX_SUMMARY.md",
    "**/PROBLEM_ANALYSIS.md",
    "**/API_TESTING_REPORT.md",
    "**/AUTHENTICATION_SETUP.md",
    "**/CRYPTO_NO_AUTH.md",
    "**/QUICK_START.md",
    "**/integration_test_guide.md",
    # Local harness artefacts — already gitignored, defence in depth
    "e2e_smoke_*.txt", "deep_smoke_*.txt", "smoke_*.txt", "*.log",
    "e2e_trace*/", "liq_capture/", "liq_trace_new/",
    "dig3_storage/", "target/",
]

[lib]
name = "digdigdig3"
path = "src/lib.rs"

[features]
default = ["onchain-evm"]
websocket = []
# Canonical on-chain feature flags
# onchain-evm: EIP-712 signing via k256+sha3 (HyperLiquid auth)
onchain-evm = ["dep:k256", "dep:sha3"]
onchain-cosmos = ["dep:cosmrs"]
onchain-starknet = ["dep:starknet-crypto"]
# Backward-compat alias — onchain-ethereum is now onchain-evm
onchain-ethereum = ["onchain-evm"]
grpc = ["dep:tonic", "dep:prost"]
k256-signing = ["dep:k256", "dep:sha3"]
# Legacy alias — starknet feature now maps to onchain-starknet
starknet = ["onchain-starknet"]

[dependencies]
# Serialization
serde = { version = "1.0", features = ["derive"] }
serde_json = "1.0"

# Async
tokio = { version = "1.0", features = ["full"] }
async-trait = "0.1"
futures-util = "0.3"

# HTTP/WebSocket
reqwest = { version = "0.12", features = ["json", "rustls-tls"], default-features = false }
tokio-tungstenite = { version = "0.24", features = ["rustls-tls-webpki-roots"] }
# Explicit rustls dep to pin ring as the process-level CryptoProvider.
# reqwest pulls ring; we pin ring here to avoid provider conflicts.
rustls = { version = "0.23", default-features = false, features = ["ring"] }
tokio-stream = { version = "0.1", features = ["sync"] }

# Error handling
thiserror = "1.0"

# Logging
tracing = "0.1"

# Crypto (for HMAC signatures)
hmac = "0.12"
sha2 = "0.10"
hex = "0.4"
base64 = "0.22"

# Time (for OKX ISO timestamps)
chrono = "0.4"

# Binary parsing (for Dhan WebSocket binary format - Little Endian)
byteorder = "1.5"

# UUID generation (for client order IDs)
uuid = { version = "1.0", features = ["v4"] }

# Compression (for BingX and HTX WebSocket, Dukascopy binary files)
flate2 = "1.0"
lzma-rs = "0.3"

# URL encoding (for HTX authentication and Polygon)
url = "2.5"
urlencoding = "2.1"

# JWT (for Coinbase authentication)
jsonwebtoken = "9.3"
# ring: explicit dep for manual JWT signing (Coinbase nonce-in-header);
# already a transitive dep via jsonwebtoken, pinned to the same major version
ring = "0.17"
rand = "0.8"

# Base58 encoding (for Raydium pubkey parsing)
bs58 = "0.5"

# Solana (for Raydium WebSocket via Solana RPC)
# Implemented using raw WebSocket to avoid OpenSSL dependency
# Uses tokio-tungstenite with native-tls (already available via reqwest)
# No additional dependencies needed

tracing-subscriber = "0.3.22"

# TOTP (for Angel One 2FA)
totp-rs = "5.6"

# Concurrent hashmap (for ConnectorPool)
dashmap = "5.5"

# gRPC transport (feature-gated behind `grpc`)
tonic = { version = "0.12", features = ["tls", "tls-native-roots"], optional = true }
prost = { version = "0.13", optional = true }

# Cryptographic signing (feature-gated)
k256 = { version = "0.13", features = ["ecdsa-core", "ecdsa"], optional = true }
sha3 = { version = "0.10", optional = true }
starknet-crypto = { version = "0.6", optional = true }

# Cosmos SDK transaction builder + signer (for dYdX, Osmosis, etc.)
cosmrs = { version = "0.22", optional = true, default-features = false, features = ["bip32"] }

# Decimal arithmetic (f64 → Decimal conversion for safe price/qty rounding)
rust_decimal = "1"

# TOML config parsing (for dig3-catcher, now in dig3-cli)
toml = "0.8"
