[package]
name = "pkarr"
version = "3.6.0"
authors = ["Nuh <nuh@nuh.dev>"]
edition = "2021"
description = "Public-Key Addressable Resource Records (Pkarr); publish and resolve DNS records over Mainline DHT"
homepage = "https://pkarr.org"
repository = "https://git.pkarr.org"
license = "MIT"
keywords = ["mainline", "dht", "dns", "decentralized", "identity"]
categories = ["network-programming"]

[dependencies]
base32 = "0.5.1"
ed25519-dalek = { version = "2.1.1" }
thiserror = "2.0.11"
serde = { version = "1.0.217", features = ["derive"] }

document-features = "0.2.10"

#feat: signed_packet dependencies
simple-dns = { version = "0.9.3", optional = true }
bytes = { version = "1.10.0", optional = true }
self_cell = { version = "1.1.0", optional = true }
ntimestamp = { version = "1.0.0", features = ["full"], optional = true }

#feat: client dependencies
futures-lite = { version = "2.6.0", default-features = false, optional = true , features =["std"]}
futures-buffered = { version = "0.2.9", optional = true }
dyn-clone = { version = "1.0.18", optional = true }
lru = { version = "0.13.0", default-features = false, optional = true }

#feat: relay dependencies
sha1_smol = { version = "1.0.1", optional = true }
url = { version = "2.5.4", optional = true }

# feat: endpoints dependencies
genawaiter = { version = "0.99.1", default-features = false, features = ["futures03"], optional = true }

[target.'cfg(not(target_family = "wasm"))'.dependencies]
getrandom = { version = "0.2.15", default-features = false }

#feat: client dependencies
tracing = { version = "0.1.41", optional = true }

# feat: dht dependencies
mainline = { version = "5.3.1", optional = true }

# feat: relay dependencies
reqwest = { version = "0.12.13", default-features = false, features = ["rustls-tls"], optional = true }
tokio = { version = "1.43.0", default-features = false, optional = true }
async-compat = { version = "0.2.4", optional = true }

# feat: lmdb-cache defendencies
heed = { version = "0.21.0", default-features = false, optional = true }
byteorder = { version = "1.5.0", default-features = false, optional = true }
page_size = { version = "0.6.0", optional = true }

# feat: tls
rustls = { version = "0.23", default-features = false, features = ["ring", "std"], optional = true }
webpki = { package = "rustls-webpki", version = "0.102", optional = true }

[target.wasm32-unknown-unknown.dependencies]
getrandom = { version = "0.2.15", default-features = false, features = ["js"] }

#feat: client dependencies
log = { version = "0.4.25", optional = true}
wasm-bindgen-futures = { version = "0.4.50", optional = true }

# feat: relay dependencies
reqwest = { version = "0.12.13", default-features = false, optional = true }

[dev-dependencies]
anyhow = "1.0.95"
postcard = { version = "1.1.1", features = ["alloc"] }
reqwest = "0.12.13"
rstest = "0.24.0"

[target.'cfg(not(target_family = "wasm"))'.dev-dependencies]
pkarr-relay = { path = "../relay" }
clap = { version = "4.5.29", features = ["derive"] }
tracing-subscriber = { version = "0.3.19", features = ["env-filter"] }
mainline = "5.3.1"
tokio-rustls = "0.26.1"
axum = "0.8.1"
axum-server = { version = "0.7.1", features = ["tls-rustls-no-provider"] }
tokio = { version = "1.43.0", features = ["macros", "rt-multi-thread"] }

[target.wasm32-unknown-unknown.dev-dependencies]
wasm-bindgen = { version = "0.2.100", features = ["serde-serialize"] }
wasm-bindgen-test = "0.3"
console_log = { version = "1.0.0", features = ["color"] }

[build-dependencies]
cfg_aliases = "0.2.1"

[features]
# Basic types
keys = []
signed_packet = ["keys", "dep:simple-dns", "dep:ntimestamp", "dep:bytes", 'dep:self_cell']

# Clients 
## Enable the [Client] with [mainline] support.
dht = ["dep:mainline", "__client"]
## Enables [Client] with [Relays](https://pkarr.org/relays).
relays = ["dep:url", "dep:reqwest", "dep:futures-buffered", "__client"]

# Extra
## Use [LmdbCache][extra::lmdb_cache::LmdbCache] implementation. Only available if the `client` module is enabled.
lmdb-cache = ["__client", "dep:heed", "dep:byteorder", "dep:page_size"]
## Enables [endpoints](https://pkarr.org/endpoints) spec.
##
## Only available if the `client` module is enabled.
endpoints = ["__client", "dep:genawaiter"]
## Enables [tls](https://pkarr.org/tls) spec.
##
## Only available if the `client` module is enabled.
tls = ["endpoints", "ed25519-dalek/pkcs8", "dep:webpki", "dep:rustls"]
## Use [reqwest::dns::Resolve] trait implementation for [Client].
##
## Only available if the `client` module is enabled.
reqwest-resolve = ["endpoints", "dep:reqwest"]
## Create a [reqwest::ClientBuilder] from [Client].
##
## Only available if the `client` module is enabled.
reqwest-builder = ["tls", "reqwest-resolve"]

# Combinations
## Use all features
full-client = ["dht", "relays"]
## Extra features that might benefit most but not all developers building apps using Pkarr.
##
## Only available if the `client` module is enabled.
extra = ["endpoints", "lmdb-cache", "reqwest-resolve", "tls", "reqwest-builder"]
## Use all features including the `full-client` and `extra` features.
full = ["full-client", "extra"]

default = ["full-client"]

## Enable client dependencies.
##
## Does not enable anything on its own you need to enable either `dht` and/or `relays` to enable the [Client].
##
## Except in WASM where you have to enable `relays`, while `dht` does not do anything.
__client = [
  "signed_packet", "dep:dyn-clone", "dep:lru", "dep:sha1_smol", "dep:futures-lite", "dep:async-compat", "dep:tokio",
  "dep:log", "dep:tracing", "dep:wasm-bindgen-futures", 
]

[package.metadata.docs.rs]
all-features = true

[[example]]
name = "http-get"
required-features = ["reqwest-builder"]

[[example]]
name = "http-serve"
required-features = ["tls"]