[package]
name = "ethers-signers"
authors = ["Georgios Konstantopoulos <me@gakonst.com>"]
readme = "README.md"
description = "A unified interface for locally signing Ethereum transactions"

version.workspace = true
edition.workspace = true
rust-version.workspace = true
license.workspace = true
documentation.workspace = true
repository.workspace = true
homepage.workspace = true
categories.workspace = true
keywords.workspace = true
exclude.workspace = true

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

[package.metadata.playground]
all-features = true

[dependencies]
ethers-core = { workspace = true, features = ["eip712"] }

# crypto
coins-bip32 = "0.8.3"
coins-bip39 = "0.8.3"
elliptic-curve.workspace = true
sha2.workspace = true
rand.workspace = true

# misc
thiserror.workspace = true
tracing.workspace = true
async-trait.workspace = true
hex.workspace = true

# futures
futures-util = { workspace = true, optional = true }
futures-executor = { workspace = true, optional = true }

# aws
rusoto_core = { version = "0.48.0", default-features = false, optional = true }
rusoto_kms = { version = "0.48.0", default-features = false, optional = true }
spki = { workspace = true, optional = true }

[target.'cfg(not(target_arch = "wasm32"))'.dependencies]
eth-keystore = "0.5.0"
home = { version = "0.5.4", optional = true }

# ledger
coins-ledger = { version = "0.8.3", default-features = false, optional = true }
semver = { workspace = true, optional = true }

# trezor
trezor-client = { version = "0.0.7", default-features = false, features = [
    "f_ethereum",
], optional = true }

# yubi
yubihsm = { version = "0.42.0-pre.0", features = ["secp256k1", "http", "usb"], optional = true }

[dev-dependencies]
ethers-contract-derive.workspace = true
ethers-derive-eip712.workspace = true

serde_json.workspace = true
tempfile.workspace = true
tracing-subscriber.workspace = true

[target.'cfg(not(target_arch = "wasm32"))'.dev-dependencies]
yubihsm = { version = "0.42.0-pre.0", features = ["secp256k1", "usb", "mockhsm"] }
tokio = { workspace = true, features = ["macros", "rt"] }

[features]
futures = ["futures-util", "futures-executor"]

celo = ["ethers-core/celo"]

ledger = ["coins-ledger", "futures", "semver"]
trezor = ["trezor-client", "futures", "semver", "home"]
aws = ["rusoto_core/rustls", "rusoto_kms/rustls", "spki"]
yubi = ["yubihsm"]
