mirror of
https://relay.ngit.dev/npub15qydau2hjma6ngxkl2cyar74wzyjshvl65za5k5rl69264ar2exs5cyejr/ngit-grasp.git
synced 2026-10-06 07:28:23 +00:00
The SDK sends CLOSED immediately after EOSE for completed ID filters. That triggers a cancellation race in nak 0.20.6: 39 of 45 production lookups returned no event although raw queries received every response. Pin the upstream SDK fixes and disable its automatic completed-ID closure. Clients retain ordinary CLOSE ownership. The SDK also fixes its aggregate query cap, so configure that cap as 20 per-filter pages to preserve our existing documented multi-filter limit instead of truncating history. Keep shared Nostr types on one Git source and update all flake packages and the NixOS module with the verified source hash. This relies on clients closing finished subscriptions; existing connection and subscription bounds still apply. It does not change the configured per-filter limit or fix cancellation in nak when using other servers. Validation: the real-server nak regression failed before and passes 20 consecutive lookups after the fix. Multi-filter overlap/EOSE regression, 32-reader LMDB benchmark and delayed-ACK benchmark pass. Module rendering preserves the default filter limit; full workspace and Nix builds follow.
176 lines
5.5 KiB
TOML
176 lines
5.5 KiB
TOML
[package]
|
|
name = "ngit-grasp"
|
|
version = "3.0.2"
|
|
edition = "2021"
|
|
authors = ["ngit-grasp contributors"]
|
|
license = "MIT"
|
|
description = "A GRASP (Git Relays Authorized via Signed-Nostr Proofs) implementation in Rust"
|
|
repository = "https://gitworkshop.dev/danconwaydev.com/ngit-grasp"
|
|
|
|
[dependencies]
|
|
# Async runtime
|
|
tokio = { version = "1.35", features = ["full"] }
|
|
|
|
# HTTP server (hyper for relay integration)
|
|
hyper = { version = "1.4", features = ["full"] }
|
|
hyper-util = { version = "0.1", features = ["tokio", "server", "http1", "http2"] }
|
|
http-body-util = "0.1"
|
|
|
|
# Nostr
|
|
#
|
|
# The stable 0.45 series contains the upstream NEG-OPEN handling fix used by
|
|
# the embedded relay. Caret requirements accept compatible patch releases.
|
|
nostr = "0.45.0"
|
|
# `local-relay` carries the embedded relay implementation, previously the
|
|
# separate `nostr-relay-builder` crate.
|
|
nostr-sdk = { version = "0.45.0", features = ["local-relay"] }
|
|
nostr-lmdb = "0.45.0"
|
|
nostr-memory = "0.45.0"
|
|
|
|
# Utilities
|
|
# SHA-1 for the `Sec-WebSocket-Accept` handshake. `nostr` uses this same crate
|
|
# internally but stopped re-exporting it as `nostr::hashes` in 0.45,
|
|
# so depend on it directly rather than pulling in a second hash implementation.
|
|
bitcoin_hashes = "0.14"
|
|
futures-util = "0.3"
|
|
tokio-tungstenite = { version = "0.28", default-features = false }
|
|
# Message type in `nostr-sdk`'s `WebSocketTransport` signatures, which the
|
|
# in-process self-subscription transport implements. `nostr-sdk` does not
|
|
# re-export it. No features requested: the build keeps whatever `nostr-sdk`
|
|
# already selects.
|
|
async-wsocket = { version = "0.17", default-features = false }
|
|
base64 = "0.22"
|
|
flate2 = "1.0"
|
|
tar = "0.4"
|
|
fs2 = "0.4"
|
|
ipnet = { version = "2", features = ["serde"] }
|
|
libc = "0.2"
|
|
|
|
# Metrics
|
|
prometheus = { version = "0.14", features = ["process"] }
|
|
dashmap = "6"
|
|
lazy_static = "1.4"
|
|
|
|
# Data structures
|
|
indexmap = "2"
|
|
|
|
# Random (for startup jitter)
|
|
rand = "0.10"
|
|
|
|
# Serialization
|
|
serde = { version = "1.0", features = ["derive"] }
|
|
serde_json = "1.0"
|
|
|
|
# Logging
|
|
tracing = "0.1"
|
|
tracing-subscriber = { version = "0.3", features = ["env-filter"] }
|
|
|
|
# Configuration
|
|
dotenvy = "0.15"
|
|
clap = { version = "4.5", features = ["derive", "env"] }
|
|
|
|
# Error handling
|
|
anyhow = "1.0"
|
|
|
|
# Async traits
|
|
async-trait = "0.1"
|
|
|
|
# Temporary directories (used for GRASP-06 empty-repo synthesis)
|
|
tempfile = "3"
|
|
reqwest = { version = "0.13", default-features = false, features = ["native-tls"] }
|
|
|
|
# Git (for future use)
|
|
# git-http-backend = "0.3"
|
|
|
|
[dev-dependencies]
|
|
# Testing
|
|
grasp-audit = { path = "grasp-audit", version = "0.2.0" }
|
|
tempfile = "3"
|
|
tokio = { version = "1.35", features = ["full", "test-util"] }
|
|
tokio-tungstenite = "0.28.0"
|
|
|
|
[lib]
|
|
name = "ngit_grasp"
|
|
path = "src/lib.rs"
|
|
|
|
[[bin]]
|
|
name = "ngit-grasp"
|
|
path = "src/main.rs"
|
|
|
|
[[test]]
|
|
name = "nip09_announcement_cascade"
|
|
path = "tests/lifecycle/nip09_announcement_cascade.rs"
|
|
|
|
[[test]]
|
|
name = "nip09_blacklist_ops"
|
|
path = "tests/lifecycle/nip09_blacklist_ops.rs"
|
|
|
|
[[test]]
|
|
name = "nip09_cascade_event_types"
|
|
path = "tests/lifecycle/nip09_cascade_event_types.rs"
|
|
|
|
[[test]]
|
|
name = "nip09_disrespector"
|
|
path = "tests/lifecycle/nip09_disrespector.rs"
|
|
|
|
[[test]]
|
|
name = "nip09_git_archive_cleanup"
|
|
path = "tests/lifecycle/nip09_git_archive_cleanup.rs"
|
|
|
|
[[test]]
|
|
name = "nip09_holding_cleanup"
|
|
path = "tests/lifecycle/nip09_holding_cleanup.rs"
|
|
|
|
[[test]]
|
|
name = "nip09_holding_db"
|
|
path = "tests/lifecycle/nip09_holding_db.rs"
|
|
|
|
[[test]]
|
|
name = "nip09_multi_maintainer"
|
|
path = "tests/lifecycle/nip09_multi_maintainer.rs"
|
|
|
|
[[test]]
|
|
name = "nip09_recovery"
|
|
path = "tests/lifecycle/nip09_recovery.rs"
|
|
|
|
[[test]]
|
|
name = "nip09_state_cascade"
|
|
path = "tests/lifecycle/nip09_state_cascade.rs"
|
|
|
|
[[test]]
|
|
name = "nip09_state_multi_maintainer"
|
|
path = "tests/lifecycle/nip09_state_multi_maintainer.rs"
|
|
|
|
[[test]]
|
|
name = "nip09_validation"
|
|
path = "tests/lifecycle/nip09_validation.rs"
|
|
|
|
[[test]]
|
|
name = "deletion_request_retention"
|
|
path = "tests/lifecycle/deletion_request_retention.rs"
|
|
|
|
[[test]]
|
|
name = "nip62_lifecycle"
|
|
path = "tests/lifecycle/nip62_lifecycle.rs"
|
|
|
|
[[test]]
|
|
name = "nip62_validation"
|
|
path = "tests/lifecycle/nip62_validation.rs"
|
|
|
|
[[test]]
|
|
name = "replaceable_history"
|
|
path = "tests/lifecycle/replaceable_history.rs"
|
|
|
|
[workspace]
|
|
members = [".", "grasp-audit"]
|
|
|
|
# Pending upstream local-relay query completion fixes; pin every shared Nostr
|
|
# type to the same source as the embedded SDK.
|
|
[patch.crates-io]
|
|
nostr = { git = "https://relay.ngit.dev/npub1drvpzev3syqt0kjrls50050uzf25gehpz9vgdw08hvex7e0vgfeq0eseet/nostr.git", rev = "refs/nostr/f614f8f875b978c760a587f0be403c2d8405f56f30b32d6f91449bf5186c3f97" }
|
|
nostr-sdk = { git = "https://relay.ngit.dev/npub1drvpzev3syqt0kjrls50050uzf25gehpz9vgdw08hvex7e0vgfeq0eseet/nostr.git", rev = "refs/nostr/f614f8f875b978c760a587f0be403c2d8405f56f30b32d6f91449bf5186c3f97" }
|
|
nostr-database = { git = "https://relay.ngit.dev/npub1drvpzev3syqt0kjrls50050uzf25gehpz9vgdw08hvex7e0vgfeq0eseet/nostr.git", rev = "refs/nostr/f614f8f875b978c760a587f0be403c2d8405f56f30b32d6f91449bf5186c3f97" }
|
|
nostr-lmdb = { git = "https://relay.ngit.dev/npub1drvpzev3syqt0kjrls50050uzf25gehpz9vgdw08hvex7e0vgfeq0eseet/nostr.git", rev = "refs/nostr/f614f8f875b978c760a587f0be403c2d8405f56f30b32d6f91449bf5186c3f97" }
|
|
nostr-memory = { git = "https://relay.ngit.dev/npub1drvpzev3syqt0kjrls50050uzf25gehpz9vgdw08hvex7e0vgfeq0eseet/nostr.git", rev = "refs/nostr/f614f8f875b978c760a587f0be403c2d8405f56f30b32d6f91449bf5186c3f97" }
|
|
nostr-gossip = { git = "https://relay.ngit.dev/npub1drvpzev3syqt0kjrls50050uzf25gehpz9vgdw08hvex7e0vgfeq0eseet/nostr.git", rev = "refs/nostr/f614f8f875b978c760a587f0be403c2d8405f56f30b32d6f91449bf5186c3f97" }
|