CLI app for developers prototyping atproto functionality
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

at main 74 lines 2.9 kB view raw
1[package] 2name = "atproto-devtool" 3version = "0.1.1" 4authors = ["Jack Grigg <thestr4d@gmail.com>"] 5edition = "2024" 6rust-version = "1.85" 7description = "A multitool for the atproto developer ecosystem" 8repository = "https://tangled.org/str4d.xyz/atproto-devtool" 9license = "MIT OR Apache-2.0" 10keywords = ["atmosphere", "bluesky"] 11categories = [ 12 "command-line-utilities", 13 "development-tools::testing", 14 "web-programming", 15] 16 17[dependencies] 18async-trait = "0.1" 19atrium-api = "0.25" 20# Used to decode the atproto JSON `{"$bytes": "<base64>"}` wrapper that appears 21# in label `sig` fields, since atrium-api's generated types assume CBOR byte 22# strings. 23base64 = "0.22" 24atrium-xrpc-client = { version = "0.5", default-features = false, features = ["reqwest"] } 25axum = { version = "0.8", default-features = false, features = ["http1", "json", "tokio"] } 26bytes = "1.10" 27ciborium = "0.2" 28clap = { version = "4.6", features = ["derive"] } 29futures-util = { version = "0.3", default-features = false, features = ["std"] } 30# Direct CSPRNG access for JWT `jti` nonces and the sentinel run-id. 31# Transitively present (k256 → elliptic-curve → rand_core with the 32# `getrandom` feature disabled), so we can't reach OsRng through the 33# existing dep graph. Promoting `getrandom` to a direct dep is the 34# smallest viable fix. 35getrandom = "0.2" 36hickory-resolver = "0.25" 37humantime = "2.1" 38# JWS/JWK parsing and signing. Use rust_crypto backend (no ring). 39jsonwebtoken = { version = "10.3", default-features = false, features = ["rust_crypto"] } 40k256 = { version = "0.13", features = ["ecdsa"] } 41miette = { version = "7.6", features = ["fancy", "derive"] } 42multibase = "0.9" 43# PKCS8 export needed for jsonwebtoken's rust_crypto backend to read keys via from_pkcs8_der. 44p256 = { version = "0.13", features = ["ecdsa", "pkcs8"] } 45percent-encoding = "2.3" 46rand_chacha = "0.3" 47rand_core = "0.6" 48reqwest = { version = "0.13", default-features = false, features = ["rustls", "json", "gzip"] } 49serde = { version = "1.0", features = ["derive"] } 50serde_json = "1.0" 51serde_urlencoded = "0.7" 52sha2 = "0.11" 53thiserror = "2.0" 54tokio = { version = "1.51", features = ["rt", "macros", "time", "net", "signal"] } 55tokio-tungstenite = { version = "0.29", default-features = false, features = ["connect", "rustls-tls-native-roots"] } 56tracing = "0.1" 57tracing-subscriber = { version = "0.3", features = ["env-filter", "fmt"] } 58url = "2.5" 59 60[dev-dependencies] 61assert_cmd = "2.0" 62insta = "1.47" 63# Property-based tests pin roundtrip / idempotence properties for the 64# cryptographic primitives (multikey encode/decode, JWT encode/verify, 65# JWS sign/verify, signature byte-length invariants). 64 cases per 66# property is enough to exercise every byte-pattern edge case without 67# making the test suite slow. 68proptest = "1.5" 69rand = "0.8" 70rand_chacha = "0.3" 71tokio = { version = "1.51", features = ["rt", "macros", "test-util", "time"] } 72 73[lints.clippy] 74uninlined_format_args = "deny"