lex-runtime 0.11.21

Effect handler runtime + capability policy for Lex.
Documentation
[package]
name = "lex-runtime"
description = "Effect handler runtime + capability policy for Lex."
version.workspace = true
edition.workspace = true
rust-version.workspace = true
license.workspace = true
repository.workspace = true
homepage.workspace = true
authors.workspace = true
keywords.workspace = true
categories.workspace = true

[dependencies]
serde.workspace = true
serde_json.workspace = true
thiserror.workspace = true
indexmap.workspace = true
sha2.workspace = true
hmac = "0.13"
ed25519-dalek = "2"
# P-256 ECDSA / ES256 for std.crypto (#651) — JWT / SD-JWT / AP2 signing.
# `ecdsa` feature brings sign/verify + DER; `pem` is intentionally off
# (JWK/PEM serialization lives in the downstream `lex-jose` package).
p256 = { version = "0.13", default-features = false, features = ["ecdsa", "std"] }
# secp256k1 ECDSA + public-key recovery for EVM / EIP-712 / x402 signing (#655).
# `ecdsa` brings sign/verify + recoverable signatures (sign_prehash_recoverable /
# recover_from_prehash); PEM/JWK serialization stays out (downstream concern).
k256 = { version = "0.13", default-features = false, features = ["ecdsa", "std"] }
# Keccak-256 (Ethereum padding, distinct from SHA3-256) for EIP-712 / address
# derivation (#655).
sha3 = "0.12"
blake2 = "0.10"
aes-gcm = "0.10"
# AES-CBC, unauthenticated, for speaking legacy device protocols only
# (see crypto.aes_cbc_*_raw). `aes` is already in the tree via aes-gcm;
# both are RustCrypto and share cipher 0.4.
aes = "0.8"
cbc = { version = "0.1", features = ["alloc"] }
chacha20poly1305 = "0.10"
pbkdf2 = { version = "0.13", default-features = false }
hkdf = "0.13"
argon2 = "0.5"
regex = "1"
sled = "0.34"
walkdir = "2"
glob = "0.3"
chrono = "0.4"
chrono-tz = "0.10"
md-5 = "0.11"
base64 = "0.22"
# base58 (Bitcoin/Solana alphabet, no checksum) for Solana / x402 (#658).
bs58 = "0.5"
hex = "0.4"
subtle = "2.6"
rand = { version = "0.10", features = ["sys_rng"] }
tiny_http = { version = "0.12", features = ["ssl-rustls"] }
tokio = { version = "1", features = ["rt-multi-thread", "net"] }
hyper = { version = "1", features = ["http1", "http2", "server"] }
hyper-util = { version = "0.1", features = ["tokio", "server-auto", "http1", "http2"] }
http-body-util = "0.1"
bytes = "1"
tungstenite = { version = "0.29", features = ["rustls-tls-webpki-roots"] }
ureq = { version = "3.3", default-features = false, features = ["rustls", "platform-verifier"] }
# HTTP/3 (#496). `quic` feature gates the heavy quinn+h3+rcgen deps so
# the default build stays slim. Without the feature the serve_quic
# dispatch arms return a "compiled without quic feature" error.
quinn  = { version = "0.11", optional = true, default-features = false, features = ["runtime-tokio", "rustls", "ring"] }
h3     = { version = "0.0.8", optional = true }
h3-quinn = { version = "0.0.10", optional = true }
rustls = { version = "0.23", optional = true, default-features = false, features = ["ring", "std"] }
rustls-pemfile = { version = "2", optional = true }
rcgen  = { version = "0.14", optional = true, default-features = false, features = ["ring", "pem"] }
toml = "1.1"
serde_yaml = "0.9"
csv = "1"
rusqlite = { version = "0.40", features = ["bundled"] }
postgres = "0.19"
redis = "1.2"
arrow-array = "58"
arrow-schema = "58"
arrow-select = "58"
arrow-arith = "58"
arrow-cast = "58"
arrow-csv = "58"
parquet = { version = "58", default-features = false, features = ["arrow", "snap"] }
# polars 0.53 split the previously-transitive `polars-time` dep out of
# `strings`; add `temporal` explicitly so `strings`'s string ops still
# compile. Found the hard way during the arrow-55→58 / polars-0.50→0.53
# coordinated bump.
polars = { version = "0.54", optional = true, default-features = false, features = ["lazy", "is_in", "csv", "performant", "strings", "temporal", "cross_join"] }
lex-bytecode = { path = "../lex-bytecode", version = "0.11.0" }
# Blob/stage content store for std.vcs (#5). `default-features = false` drops the
# `trace` feature (lex-trace) to avoid a lex-store → lex-trace → lex-runtime cycle.
lex-store = { path = "../lex-store", version = "0.11.0", default-features = false }
# The declarative builtin catalogue (#778): purity answers and the
# dispatch table for the declared stdlib modules come from it.
lex-types = { path = "../lex-types", version = "0.11.0" }
lex-ast = { path = "../lex-ast", version = "0.11.0" }
smol_str = { workspace = true }

[features]
default = ["df"]
# `df` gates the Polars-backed `std.df` query ops (filter / sort /
# group_by / join). Polars pulls a heavy dep tree (polars-arrow, …)
# that embedders like lex-hub don't need and that has conflicted on
# `chrono`'s `std` feature in the past. On by default for the `lex`
# toolchain; API/embedder consumers drop it with
# `default-features = false`. `std.arrow` (arrow-rs) stays available
# regardless — only the polars-backed query layer is gated.
df = ["dep:polars"]
# `quic` brings in quinn / h3 / rcgen / rustls + rustls-pemfile. Off
# by default to keep `cargo build` slim; enable with `--features quic`
# to use `net.serve_quic`, `tls.from_pem_files`, or `tls.self_signed`.
quic = ["dep:quinn", "dep:h3", "dep:h3-quinn", "dep:rustls", "dep:rustls-pemfile", "dep:rcgen"]

[dev-dependencies]
lex-syntax = { path = "../lex-syntax", version = "0.11.0" }
tempfile = "3"