webylib 0.3.2

Webcash HD wallet library — bearer e-cash with BIP32-style key derivation, SQLite storage, AES-256-GCM encryption, and full C FFI for cross-platform SDKs
Documentation
[workspace]
resolver = "2"
members = [".", "crates/webylib-wasm"]

[package]
name = "webylib"
version = "0.3.2"
edition = "2021"
rust-version = "1.85"
description = "Webcash HD wallet library — bearer e-cash with BIP32-style key derivation, SQLite storage, AES-256-GCM encryption, and full C FFI for cross-platform SDKs"
license = "MIT"
authors = ["Webycash Developers"]
homepage = "https://weby.cash"
repository = "https://github.com/webycash/webylib"
documentation = "https://docs.rs/webylib"
readme = "README.md"
keywords = ["webcash", "wallet", "payments", "bearer-cash", "hd-wallet"]
categories = ["cryptography", "cryptography::cryptocurrencies", "api-bindings"]
include = [
    "src/**/*.rs",
    "tests/**/*.rs",
    "tests/**/*.txt",
    "LICENSE",
    "README.md",
    "CHANGELOG.md",
    "docs/**/*.md",
    "include/**/*",
    "cbindgen.toml",
]

[lib]
name = "webylib"
crate-type = ["lib", "cdylib", "staticlib"]

[[bin]]
name = "webyc"
path = "src/bin/cli.rs"
required-features = ["cli"]

[dependencies]
# ── Always available (WASM-safe) ────────────────────────────────
log = "0.4"
serde = { version = "1.0", features = ["derive"] }
serde_json = "1.0"
thiserror = "2.0"
anyhow = "1.0"
async-trait = "0.1"
sha2 = "0.10"
hmac = "0.12"
rand = "0.9"
rand_chacha = "0.9"
aes-gcm = "0.10"
argon2 = "0.5"
hkdf = "0.12"
hex = "0.4"
base64 = "0.22"
chrono = { version = "0.4", default-features = false, features = ["serde", "clock"] }
uuid = { version = "1.0", features = ["v4"] }
url = "2.5"
zeroize = { version = "1.5", features = ["derive"] }

# getrandom: native uses default, WASM uses js feature
getrandom = "0.2"
getrandom_0_3 = { package = "getrandom", version = "0.3" }

# ── Native-only (optional) ──────────────────────────────────────
tokio = { version = "1.0", features = ["full"], optional = true }
rusqlite = { version = "0.37.0", features = ["bundled"], optional = true }
reqwest = { version = "0.12", default-features = false, features = ["json"], optional = true }
keyring = { version = "3", features = ["apple-native", "linux-native", "windows-native"], optional = true }

# CLI (optional)
clap = { version = "4.0", features = ["derive"], optional = true }
rpassword = { version = "7.3", optional = true }
dirs-next = { version = "2", optional = true }

[dev-dependencies]
tempfile = "3.0"
mockito = "1.7.0"

[features]
default = ["native", "cli"]

# Native: SQLite storage, HTTP client with TLS, async runtime, keyring
native = [
    "dep:tokio",
    "dep:rusqlite",
    "dep:reqwest",
    "reqwest?/rustls-tls",
    "dep:keyring",
    "bundled-sqlite",
]
bundled-sqlite = ["rusqlite?/bundled"]

# WASM: HTTP client via browser fetch, getrandom via JS
wasm = ["dep:reqwest", "getrandom/js", "getrandom_0_3/wasm_js", "uuid/js"]

ffi = []
cli = ["dep:clap", "dep:rpassword", "dep:dirs-next"]
passkey = []

[package.metadata.docs.rs]
all-features = true
rustdoc-args = ["--cfg", "docsrs"]