From a6edb42dfc653b6826b59b7f296e0d0c4ee74557 Mon Sep 17 00:00:00 2001 From: DanConwayDev Date: Wed, 26 Nov 2025 08:45:16 +0000 Subject: fix: parsing maintainers from announcement event --- src/git/authorization.rs | 13 +++++++++---- src/nostr/events.rs | 24 +++++++++++++++++------- 2 files changed, 26 insertions(+), 11 deletions(-) (limited to 'src') diff --git a/src/git/authorization.rs b/src/git/authorization.rs index 06672c8..2fe81b0 100644 --- a/src/git/authorization.rs +++ b/src/git/authorization.rs @@ -444,11 +444,16 @@ mod tests { ) -> Event { let mut tags = vec![Tag::custom(TagKind::d(), vec![identifier.to_string()])]; - // Add maintainers as p tags - for maintainer_keys in maintainers { + // Add maintainers as a single "maintainers" tag per NIP-34 + // Format: ["maintainers", "", "", ...] + if !maintainers.is_empty() { + let maintainer_pubkeys: Vec = maintainers + .iter() + .map(|k| k.public_key().to_hex()) + .collect(); tags.push(Tag::custom( - TagKind::p(), - vec![maintainer_keys.public_key().to_hex()], + TagKind::Custom("maintainers".into()), + maintainer_pubkeys, )); } diff --git a/src/nostr/events.rs b/src/nostr/events.rs index ddbb8f0..643269a 100644 --- a/src/nostr/events.rs +++ b/src/nostr/events.rs @@ -105,14 +105,19 @@ impl RepositoryAnnouncement { }) .collect(); - // Extract maintainers (other-user tags) + // Extract maintainers from "maintainers" tag per NIP-34 + // Format: ["maintainers", "", "", ...] let maintainers = event .tags .iter() - .filter(|t| t.kind() == TagKind::p()) - .filter_map(|t| t.content()) - .map(|s| s.to_string()) - .collect(); + .find(|tag| tag.as_slice().first().map(|s| s.as_str()) == Some("maintainers")) + .map(|tag| { + tag.as_slice()[1..] // Skip the "maintainers" tag name + .iter() + .map(|s| s.to_string()) + .collect() + }) + .unwrap_or_default(); Ok(RepositoryAnnouncement { event, @@ -546,8 +551,12 @@ mod tests { ), ]; - // Add maintainer - tags.push(Tag::public_key(maintainer_keys.public_key())); + // Add maintainer using NIP-34 "maintainers" tag format + // Format: ["maintainers", "", "", ...] + tags.push(Tag::custom( + nostr_sdk::TagKind::Custom("maintainers".into()), + vec![maintainer_keys.public_key().to_hex()], + )); let event = EventBuilder::new(Kind::from(KIND_REPOSITORY_ANNOUNCEMENT), "Test repository") .tags(tags) @@ -556,6 +565,7 @@ mod tests { let announcement = RepositoryAnnouncement::from_event(event).unwrap(); assert_eq!(announcement.maintainers.len(), 1); + assert_eq!(announcement.maintainers[0], maintainer_keys.public_key().to_hex()); } #[test] -- cgit v1.2.3