[package]
name = "hyperdb-api-core"
version.workspace = true
edition.workspace = true
rust-version.workspace = true
description = "Internal implementation details for hyperdb-api. Not a stable API; use hyperdb-api instead."
license.workspace = true
repository.workspace = true
homepage.workspace = true
readme = "README.md"
keywords = ["database", "hyper", "tableau", "postgres", "internal"]
categories = ["database"]

[features]
default = []
# Optional: Salesforce Data Cloud OAuth authentication (via standalone crate).
# Users should normally pick this up through `hyperdb-api` which sets it when
# needed; `hyperdb-api-core` exposing it directly is a plumbing detail.
salesforce-auth = ["dep:hyperdb-api-salesforce", "dep:arrow"]

[dependencies]
# Core types & protocol (collapsed layers)
bytes = { workspace = true }
byteorder = { workspace = true }
memchr = { workspace = true }
tracing = { workspace = true }
socket2 = { workspace = true }

# Geography dependencies (types layer)
geo-types = { version = "0.7" }
wkt = { version = "0.14" }
geozero = { version = "0.15", features = ["with-wkb", "with-geo"] }

# Chrono (types layer; required)
chrono = { version = "0.4" }

# Authentication (client layer)
md-5 = "0.11"
sha2 = { workspace = true }
hmac = { workspace = true }
pbkdf2 = { workspace = true }
base64 = { workspace = true }
rand = { workspace = true }
zeroize = { workspace = true }

# TLS support (rustls)
# `rustls` re-exports `rustls-pki-types` as `rustls::pki_types`, which provides
# both the cert/key types we hand to `ClientConfig::with_*` and the PEM-parsing
# trait `pki_types::pem::PemObject` that replaced the now-archived
# `rustls-pemfile` crate.
rustls = { workspace = true }
webpki-roots = { workspace = true }
tokio-rustls = { version = "0.26", default-features = false, features = ["ring", "logging", "tls12"] }

# gRPC transport (always available)
tonic = { workspace = true }
tonic-prost = { workspace = true }
prost = { workspace = true }
prost-types = { workspace = true }
tokio = { workspace = true }

# Serialization (used by gRPC params)
serde = { workspace = true }
serde_json = { workspace = true }

# Salesforce OAuth authentication (optional, via standalone crate)
# x-release-please-start-version
hyperdb-api-salesforce = { path = "../hyperdb-api-salesforce", version = "=0.5.3", optional = true }
# x-release-please-end

# Arrow parsing for catalog operations (optional, used by authenticated_client)
arrow = { version = "58.0", optional = true }

[lints]
workspace = true

[build-dependencies]
tonic-build = { workspace = true }
tonic-prost-build = { workspace = true }

[dev-dependencies]
tracing-subscriber = { version = "0.3", features = ["env-filter"] }
tokio = { workspace = true, features = ["rt-multi-thread", "macros", "net", "io-util"] }
arrow = "58.0"
# For integration tests - we need HyperProcess to start a server
hyperdb-api = { path = "../hyperdb-api" }
tempfile = { workspace = true }
# For TLS integration tests - certificate generation
rcgen = "0.14"
