[package]
name = "active-call"
version = "0.3.60"
edition = "2024"
authors = ["jinti<shenjindi@fourz.cn>"]
description = "A SIP/WebRTC voice agent"
license = "MIT"
repository = "https://github.com/miuda-ai/active-call"
readme = "README.md"
keywords = ["sip", "voip", "telephony", "voice-agent", "webrtc"]
categories = ["network-programming", "multimedia"]
exclude = ["fixtures/**", "examples/**"]

[features]
default = ["opus", "offline"]
opus = ["audio-codec/opus"]
offline = ["dep:knf-rs-sys", "dep:ort", "dep:hf-hub", "dep:ndarray"]
cross = ["opus", "offline", "aws-lc-rs/bindgen"]
not_vad = []

[dependencies]
libc = "0.2"
audio-codec = { version = "0.3.33", features = ["opus"] }
rustrtc = "0.3.55"
serde = { version = "1", features = ["derive"] }
serde_json = "1"
minijinja = { version = "2.19.0", features = ["loader", "json"] }
anyhow = "1"
arc-swap = "1.9.1"
async-trait = "0.1.88"
async-stream = "0.3.6"
axum = { version = "0.8.9", features = ["ws", "tokio", "multipart"] }
tower-http = { version = "0.6.10", features = ["fs", "trace"] }
bytes = "1"
futures = "0.3.32"
rustls = "0.23.40"
dotenvy = "0.15.7"
clap = { version = "4.6.1", features = ["derive"] }
chrono = { version = "0.4.44", features = ["serde"] }
tokio = { version = "1.52.3", features = ["full", "tracing"] }
tokio-stream = { version = "0.1.18", features = ["net", "sync"] }
tokio-tungstenite = { version = "0.29.0", features = [
    "rustls-tls-native-roots",
] }
tokio-util = "0.7.18"
tracing = "0.1.43"
tracing-subscriber = { version = "0.3.23", features = ["env-filter"] }
tracing-appender = "0.2.5"
toml = "1.1.2"
rsipstack = "0.5.11"
uuid = { version = "1.23.1", features = ["v4"] }
reqwest = { version = "0.13.3", features = [
    "json",
    "stream",
    "rustls",
    "multipart",
    "form",
    "query",
    "gzip",
] }
object_store = { version = "0.13.2", features = ["aws", "azure", "gcp"] }
serde_with = "3.18.0"
rand = "0.10.1"
humantime = "2.1.0"
lru = "0.18.0"
md5 = { package = "md-5", version = "0.11.0" }
sha2 = "0.11.0"
serde_yaml = "0.9.33"
regex = "1.12.3"
once_cell = "1.21.4"
hex = "0.4.3"
nnnoiseless = "0.5.2"
hound = "3.5.1"
get_if_addrs = "0.5.3"
http = "1.4.0"
urlencoding = "2.1.3"
base64 = "0.22.1"
url = "2.5.8"
unic-emoji = "0.9.0"
socket2 = { version = "0.6.3", features = ["all"] }
realfft = "3.3"
tempfile = "3.27.0"
aws-lc-rs = "1"

# Math / arrays (keep in sync with ort 2.0.0-rc.10 -> ndarray 0.16)
ndarray = { version = "0.16.1", optional = true }
rustfft = "6.2"
num-complex = "0.4"
hf-hub = { version = "0.5.0", default-features = false, features = [
    "rustls-tls",
    "tokio",
    "ureq",
], optional = true }

ort = { version = "=2.0.0-rc.11", default-features = false, features = [
    "std",
    "ndarray",
    "tls-rustls",
    "load-dynamic",
], optional = true }
knf-rs-sys = { version = "0.3.2", optional = true }

# Audio processing
symphonia = { version = "0.5", features = ["all"] }
ogg = "0.9"
unicode-normalization = "0.1"
rand_distr = "0.6.0"
num_cpus = "1.16"

[dev-dependencies]
tempfile = "3.23.0"
warp = { version = "0.4.1", features = ["server", "websocket"] }
tokio-test = "0.4.5"
mockall = "0.14.0"
portpicker = "0.1.1"
dotenvy = "0.15.7"
wiremock = "0.6"
