From bef825d35d780170eb0fcf361c384883b03f3360 Mon Sep 17 00:00:00 2001 From: tompro Date: Wed, 17 Dec 2025 11:18:47 +0100 Subject: [PATCH] Update dependencies, rework deprecated calls --- Cargo.lock | 225 ++++++++++++++++++++----------------- Cargo.toml | 17 +-- examples/postgres-relay.rs | 5 +- src/model.rs | 4 +- src/postgres.rs | 2 +- src/query.rs | 4 +- tests/edge_cases.rs | 2 +- 7 files changed, 144 insertions(+), 115 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index e4a9562..efb36ab 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -42,6 +42,22 @@ version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7c02d123df017efcdfbd739ef81735b36c5ba83ec3c59c80a9d7ecc718f92e50" +[[package]] +name = "astral-tokio-tar" +version = "0.5.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec179a06c1769b1e42e1e2cbe74c7dcdb3d6383c838454d063eaac5bbb7ebbe5" +dependencies = [ + "filetime", + "futures-core", + "libc", + "portable-atomic", + "rustc-hash", + "tokio", + "tokio-stream", + "xattr", +] + [[package]] name = "async-stream" version = "0.3.6" @@ -234,12 +250,6 @@ dependencies = [ "serde", ] -[[package]] -name = "bitflags" -version = "1.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" - [[package]] name = "bitflags" version = "2.9.4" @@ -266,13 +276,13 @@ dependencies = [ [[package]] name = "bollard" -version = "0.19.1" +version = "0.19.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "899ca34eb6924d6ec2a77c6f7f5c7339e60fd68235eaf91edd5a15f12958bb06" +checksum = "87a52479c9237eb04047ddb94788c41ca0d26eaff8b697ecfbb4c32f7fdc3b1b" dependencies = [ "async-stream", "base64 0.22.1", - "bitflags 2.9.4", + "bitflags", "bollard-buildkit-proto", "bollard-stubs", "bytes", @@ -313,21 +323,22 @@ dependencies = [ [[package]] name = "bollard-buildkit-proto" -version = "0.6.1" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "40b3e79f8bd0f25f32660e3402afca46fd91bebaf135af017326d905651f8107" +checksum = "85a885520bf6249ab931a764ffdb87b0ceef48e6e7d807cfdb21b751e086e1ad" dependencies = [ "prost", "prost-types", "tonic", + "tonic-prost", "ureq", ] [[package]] name = "bollard-stubs" -version = "1.48.3-rc.28.0.4" +version = "1.49.1-rc.28.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "64ea257e555d16a2c01e5593f40b73865cdf12efbceda33c6d14a2d8d1490368" +checksum = "5731fe885755e92beff1950774068e0cae67ea6ec7587381536fca84f1779623" dependencies = [ "base64 0.22.1", "bollard-buildkit-proto", @@ -615,13 +626,12 @@ dependencies = [ [[package]] name = "etcetera" -version = "0.10.0" +version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26c7b13d0780cb82722fd59f6f57f925e143427e4a75313a6c77243bf5326ae6" +checksum = "de48cc4d1c1d97a20fd819def54b890cadde72ed3ad0c614822a0a433361be96" dependencies = [ "cfg-if", - "home", - "windows-sys 0.59.0", + "windows-sys 0.61.2", ] [[package]] @@ -630,6 +640,17 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4443176a9f2c162692bd3d352d745ef9413eec5782a80d8fd6f8a1ac692a07f7" +[[package]] +name = "ferroid" +version = "0.8.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e0e9414a6ae93ef993ce40a1e02944f13d4508e2bf6f1ced1580ce6910f08253" +dependencies = [ + "portable-atomic", + "rand 0.9.2", + "web-time", +] + [[package]] name = "filetime" version = "0.2.26" @@ -654,7 +675,7 @@ version = "25.9.23" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "09b6620799e7340ebd9968d2e0708eb82cf1971e9a16821e2091b6d6e475eed5" dependencies = [ - "bitflags 2.9.4", + "bitflags", "rustc_version", ] @@ -1013,7 +1034,7 @@ dependencies = [ "hyper", "libc", "pin-project-lite", - "socket2 0.6.1", + "socket2", "tokio", "tower-service", "tracing", @@ -1259,9 +1280,9 @@ version = "0.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "416f7e718bdb06000964960ffa43b4335ad4012ae8b99060261aa4a8088d5ccb" dependencies = [ - "bitflags 2.9.4", + "bitflags", "libc", - "redox_syscall 0.5.18", + "redox_syscall", ] [[package]] @@ -1344,9 +1365,9 @@ checksum = "f0efe882e02d206d8d279c20eb40e03baf7cb5136a1476dc084a324fbc3ec42d" [[package]] name = "nostr" -version = "0.43.1" +version = "0.44.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62a97d745f1bd8d5e05a978632bbb87b0614567d5142906fe7c86fb2440faac6" +checksum = "3aa5e3b6a278ed061835fe1ee293b71641e6bf8b401cfe4e1834bbf4ef0a34e1" dependencies = [ "base64 0.22.1", "bech32", @@ -1356,6 +1377,7 @@ dependencies = [ "chacha20", "chacha20poly1305", "getrandom 0.2.16", + "hex", "instant", "scrypt", "secp256k1", @@ -1367,9 +1389,9 @@ dependencies = [ [[package]] name = "nostr-database" -version = "0.43.0" +version = "0.44.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1c75a8c2175d2785ba73cfddef21d1e30da5fbbdf158569b6808ba44973a15b" +checksum = "7462c9d8ae5ef6a28d66a192d399ad2530f1f2130b13186296dbb11bdef5b3d1" dependencies = [ "flatbuffers", "lru", @@ -1379,7 +1401,7 @@ dependencies = [ [[package]] name = "nostr-postgres-db" -version = "0.1.0" +version = "0.1.1" dependencies = [ "deadpool", "deadpool-postgres", @@ -1396,13 +1418,14 @@ dependencies = [ [[package]] name = "nostr-relay-builder" -version = "0.43.0" +version = "0.44.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "019df99035f53643078e4733b9559f6d5a2f666d576e26254aa3ab8a043eb86e" +checksum = "51ba8e48eaadd5644e7317ca2f892b89a394a8cc57e99fea9f624dc081df1a24" dependencies = [ "async-utility", "async-wsocket", "atomic-destructor", + "hex", "negentropy", "nostr", "nostr-database", @@ -1544,7 +1567,7 @@ checksum = "2621685985a2ebf1c516881c026032ac7deafcda1a2c9b7850dc81e3dfcb64c1" dependencies = [ "cfg-if", "libc", - "redox_syscall 0.5.18", + "redox_syscall", "smallvec", "windows-link", ] @@ -1663,6 +1686,12 @@ dependencies = [ "universal-hash", ] +[[package]] +name = "portable-atomic" +version = "1.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f84267b20a16ea918e43c6a88433c2d54fa145c92a811b5b047ccbe153674483" + [[package]] name = "postgres-protocol" version = "0.6.9" @@ -1730,9 +1759,9 @@ dependencies = [ [[package]] name = "prost" -version = "0.13.5" +version = "0.14.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2796faa41db3ec313a31f7624d9286acf277b52de526150b7e69f3debf891ee5" +checksum = "7231bd9b3d3d33c86b58adbac74b5ec0ad9f496b19d22801d773636feaa95f3d" dependencies = [ "bytes", "prost-derive", @@ -1740,9 +1769,9 @@ dependencies = [ [[package]] name = "prost-derive" -version = "0.13.5" +version = "0.14.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a56d757972c98b346a9b766e3f02746cde6dd1cd1d1d563472929fdd74bec4d" +checksum = "9120690fafc389a67ba3803df527d0ec9cbbc9cc45e4cc20b332996dfb672425" dependencies = [ "anyhow", "itertools", @@ -1753,9 +1782,9 @@ dependencies = [ [[package]] name = "prost-types" -version = "0.13.5" +version = "0.14.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "52c2c1bf36ddb1a1c396b3601a3cec27c2462e45f07c386894ec3ccf5332bd16" +checksum = "b9b4db3d6da204ed77bb26ba83b6122a73aeb2e87e25fbf7ad2e84c4ccbf8f72" dependencies = [ "prost", ] @@ -1834,22 +1863,13 @@ dependencies = [ "getrandom 0.3.4", ] -[[package]] -name = "redox_syscall" -version = "0.3.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "567664f262709473930a4bf9e51bf2ebf3348f2e748ccc50dea20646858f8f29" -dependencies = [ - "bitflags 1.3.2", -] - [[package]] name = "redox_syscall" version = "0.5.18" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ed2bf2547551a7053d6fdfafda3f938979645c44812fbfcda098faae3f1a362d" dependencies = [ - "bitflags 2.9.4", + "bitflags", ] [[package]] @@ -1915,6 +1935,12 @@ dependencies = [ "windows-sys 0.52.0", ] +[[package]] +name = "rustc-hash" +version = "2.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "357703d41365b4b27c590e3ed91eabb1b663f07c4c084095e60cbed4362dff0d" + [[package]] name = "rustc_version" version = "0.4.1" @@ -1930,7 +1956,7 @@ version = "1.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cd15f8a2c5551a84d56efdc1cd049089e409ac19a3072d5037a17fd70719ff3e" dependencies = [ - "bitflags 2.9.4", + "bitflags", "errno", "libc", "linux-raw-sys", @@ -2091,7 +2117,7 @@ version = "3.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b3297343eaf830f66ede390ea39da1d462b6b0c1b000f420d0a83f898bbbe6ef" dependencies = [ - "bitflags 2.9.4", + "bitflags", "core-foundation", "core-foundation-sys", "libc", @@ -2248,6 +2274,15 @@ version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" +[[package]] +name = "signal-hook-registry" +version = "1.4.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7664a098b8e616bdfcc2dc0e9ac44eb231eedf41db4e9fe95d8d32ec728dedad" +dependencies = [ + "libc", +] + [[package]] name = "siphasher" version = "1.0.1" @@ -2266,16 +2301,6 @@ version = "1.15.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03" -[[package]] -name = "socket2" -version = "0.5.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e22376abed350d73dd1cd119b57ffccad95b4e585a7cda43e286245ce23c0678" -dependencies = [ - "libc", - "windows-sys 0.52.0", -] - [[package]] name = "socket2" version = "0.6.1" @@ -2368,18 +2393,20 @@ dependencies = [ [[package]] name = "testcontainers" -version = "0.25.0" +version = "0.26.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b92bce247dc9260a19808321e11b51ea6a0293d02b48ab1c6578960610cfa2a7" +checksum = "a347cac4368ba4f1871743adb27dc14829024d26b1763572404726b0b9943eb8" dependencies = [ + "astral-tokio-tar", "async-trait", "bollard", - "bollard-stubs", "bytes", "docker_credential", "either", "etcetera", + "ferroid", "futures", + "itertools", "log", "memchr", "parse-display", @@ -2390,17 +2417,15 @@ dependencies = [ "thiserror", "tokio", "tokio-stream", - "tokio-tar", "tokio-util", - "ulid", "url", ] [[package]] name = "testcontainers-modules" -version = "0.13.0" +version = "0.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1966329d5bb3f89d33602d2db2da971fb839f9297dad16527abf4564e2ae0a6d" +checksum = "5e75e78ff453128a2c7da9a5d5a3325ea34ea214d4bf51eab3417de23a4e5147" dependencies = [ "testcontainers", ] @@ -2500,7 +2525,8 @@ dependencies = [ "libc", "mio", "pin-project-lite", - "socket2 0.6.1", + "signal-hook-registry", + "socket2", "tokio-macros", "windows-sys 0.61.2", ] @@ -2536,7 +2562,7 @@ dependencies = [ "postgres-protocol", "postgres-types", "rand 0.9.2", - "socket2 0.6.1", + "socket2", "tokio", "tokio-util", "whoami", @@ -2563,21 +2589,6 @@ dependencies = [ "tokio", ] -[[package]] -name = "tokio-tar" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d5714c010ca3e5c27114c1cdeb9d14641ace49874aa5626d7149e47aedace75" -dependencies = [ - "filetime", - "futures-core", - "libc", - "redox_syscall 0.3.5", - "tokio", - "tokio-stream", - "xattr", -] - [[package]] name = "tokio-tungstenite" version = "0.26.2" @@ -2609,9 +2620,9 @@ dependencies = [ [[package]] name = "tonic" -version = "0.13.1" +version = "0.14.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e581ba15a835f4d9ea06c55ab1bd4dce26fc53752c69a04aac00703bfb49ba9" +checksum = "eb7613188ce9f7df5bfe185db26c5814347d110db17920415cf2fbcad85e7203" dependencies = [ "async-trait", "axum", @@ -2626,8 +2637,8 @@ dependencies = [ "hyper-util", "percent-encoding", "pin-project", - "prost", - "socket2 0.5.10", + "socket2", + "sync_wrapper", "tokio", "tokio-stream", "tower", @@ -2636,6 +2647,17 @@ dependencies = [ "tracing", ] +[[package]] +name = "tonic-prost" +version = "0.14.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "66bd50ad6ce1252d87ef024b3d64fe4c3cf54a86fb9ef4c631fdd0ded7aeaa67" +dependencies = [ + "bytes", + "prost", + "tonic", +] + [[package]] name = "tower" version = "0.5.2" @@ -2755,16 +2777,6 @@ version = "1.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "562d481066bde0658276a35467c4af00bdc6ee726305698a55b86e61d7ad82bb" -[[package]] -name = "ulid" -version = "1.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "470dbf6591da1b39d43c14523b2b469c86879a53e8b758c8e090a470fe7b1fbe" -dependencies = [ - "rand 0.9.2", - "web-time", -] - [[package]] name = "unicode-bidi" version = "0.3.18" @@ -2810,17 +2822,30 @@ checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" [[package]] name = "ureq" -version = "2.12.1" +version = "3.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02d1a66277ed75f640d608235660df48c8e3c19f3b4edb6a263315626cc3c01d" +checksum = "d39cb1dbab692d82a977c0392ffac19e188bd9186a9f32806f0aaa859d75585a" dependencies = [ "base64 0.22.1", "log", - "once_cell", + "percent-encoding", "rustls", "rustls-pki-types", - "url", - "webpki-roots 0.26.11", + "ureq-proto", + "utf-8", + "webpki-roots 1.0.3", +] + +[[package]] +name = "ureq-proto" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d81f9efa9df032be5934a46a068815a10a042b494b6a58cb0a1a97bb5467ed6f" +dependencies = [ + "base64 0.22.1", + "http", + "httparse", + "log", ] [[package]] diff --git a/Cargo.toml b/Cargo.toml index a407b24..adf3902 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "nostr-postgres-db" -version = "0.1.0" +version = "0.1.1" edition = "2024" description = "Postgres SQL storage backend for Nostr relays" keywords = ["nostr", "database", "postgres"] @@ -8,8 +8,8 @@ license = "MIT" [dependencies] deadpool = { version = "0.12", features = ["managed", "rt_tokio_1"] } -nostr = { version = "0.43", features = ["std"] } -nostr-database = { version = "0.43", features = ["flatbuf"] } +nostr = { version = "0.44", features = ["std"] } +nostr-database = { version = "0.44", features = ["flatbuf"] } tracing = { version = "0.1", default-features = false } tokio-postgres = { version = "0.7", features = [ "with-chrono-0_4", @@ -18,11 +18,14 @@ tokio-postgres = { version = "0.7", features = [ deadpool-postgres = "0.14" [dev-dependencies] -nostr-relay-builder = "0.43" -tokio = { version = "1", default-features = false, features = ["macros", "rt-multi-thread"] } +nostr-relay-builder = "0.44" +tokio = { version = "1", default-features = false, features = [ + "macros", + "rt-multi-thread", +] } tracing-subscriber = "0.3" -testcontainers = "0.25" -testcontainers-modules = { version = "0.13", features = ["postgres"] } +testcontainers = "0.26" +testcontainers-modules = { version = "0.14", features = ["postgres"] } [[example]] name = "postgres-relay" diff --git a/examples/postgres-relay.rs b/examples/postgres-relay.rs index 618cf56..9536c20 100644 --- a/examples/postgres-relay.rs +++ b/examples/postgres-relay.rs @@ -21,8 +21,9 @@ async fn main() -> Result<()> { let builder = RelayBuilder::default().database(db); // Create local relay - let relay = LocalRelay::run(builder).await?; - println!("Url: {}", relay.url()); + let relay = LocalRelay::new(builder); + relay.run().await?; + println!("Url: {}", relay.url().await); // Keep up the program loop { diff --git a/src/model.rs b/src/model.rs index db2e23a..1e76a7c 100644 --- a/src/model.rs +++ b/src/model.rs @@ -60,7 +60,7 @@ impl TryFrom<&Event> for EventDataDb { event: EventDb { id: value.id.as_bytes().to_vec(), pubkey: value.pubkey.as_bytes().to_vec(), - created_at: value.created_at.as_u64() as i64, + created_at: value.created_at.as_secs() as i64, kind: value.kind.as_u16() as i64, payload: encode_payload(value), deleted: false, @@ -118,7 +118,7 @@ mod tests { assert_eq!(event_data.event.pubkey, event.pubkey.as_bytes().to_vec()); assert_eq!( event_data.event.created_at, - event.created_at.as_u64() as i64 + event.created_at.as_secs() as i64 ); assert_eq!(event_data.event.kind, event.kind.as_u16() as i64); assert!(!event_data.event.deleted); diff --git a/src/postgres.rs b/src/postgres.rs index ae2cf60..87268f8 100644 --- a/src/postgres.rs +++ b/src/postgres.rs @@ -115,7 +115,7 @@ impl NostrDatabase for NostrPostgres { let until = if event.created_at.is_zero() { event.created_at } else { - Timestamp::from_secs(event.created_at.as_u64() - 1) + Timestamp::from_secs(event.created_at.as_secs() - 1) }; if event.kind.is_replaceable() && matches!(result, Ok(SaveEventStatus::Success)) diff --git a/src/query.rs b/src/query.rs index 419c30b..9d4c5b2 100644 --- a/src/query.rs +++ b/src/query.rs @@ -47,13 +47,13 @@ pub fn filter_to_sql_params( if let Some(since) = filter.since { sql.push_str(&format!(" AND events.created_at >= ${}", idx)); - params.push(Box::new(i64::try_from(since.as_u64()).unwrap_or(i64::MAX))); + params.push(Box::new(i64::try_from(since.as_secs()).unwrap_or(i64::MAX))); idx += 1; } if let Some(until) = filter.until { sql.push_str(&format!(" AND events.created_at <= ${}", idx)); - params.push(Box::new(i64::try_from(until.as_u64()).unwrap_or(i64::MAX))); + params.push(Box::new(i64::try_from(until.as_secs()).unwrap_or(i64::MAX))); idx += 1; } diff --git a/tests/edge_cases.rs b/tests/edge_cases.rs index 64da133..c97a1c2 100644 --- a/tests/edge_cases.rs +++ b/tests/edge_cases.rs @@ -232,7 +232,7 @@ async fn test_query_ordering() { let filter = Filter::new().author(keys.public_key()); let events = test_db.db.query(filter).await.unwrap(); - let timestamps: Vec = events.iter().map(|e| e.created_at.as_u64()).collect(); + let timestamps: Vec = events.iter().map(|e| e.created_at.as_secs()).collect(); assert_eq!(timestamps, vec![3000, 2000, 1000]); cleanup_test_db(&test_db).await;