[package]
name = "justapi-py"
version.workspace = true
edition.workspace = true
license.workspace = true
[lib]
crate-type = ["cdylib", "lib"]
[features]
default = ["mail"]
mail = ["justapi-core/mail"]
orjson = ["justapi-core/orjson"]
[dependencies]
pyo3.workspace = true
justapi-core = { workspace = true, features = ["db", "ws"] }
tokio.workspace = true
http-body-util.workspace = true
http-body = "1"
hyper.workspace = true
http = "1"
futures = "0.3"
serde.workspace = true
serde_json.workspace = true
base64 = { workspace = true }
serde_urlencoded.workspace = true
tracing.workspace = true
anyhow.workspace = true
tokio-util.workspace = true
tonic = "0.14.6"
tokio-stream.workspace = true
tokio-tungstenite = "0.24"
pyo3-async-runtimes = { version = "0.29.0", features = ["tokio", "tokio-runtime"] }
jsonschema = { version = "0.46", default-features = false }
uuid = { version = "1", features = ["v4"] }
# Native cron/scheduler (ADR-060): cron expression parsing + next-fire math.
# Chosen over hand-rolling because cron has nasty edge cases (DST, leap years,
# L/W/# specifiers) and is untrusted-spec-parsing-adjacent; a maintained crate
# is the responsible Rust-first choice. See DECISIONS.md ADR-060.
cron = "0.15"
chrono = { version = "0.4", default-features = false, features = ["clock", "std"] }
jsonwebtoken.workspace = true