From 5d3d96c7f0397a079384b7291ff21df76029b126 Mon Sep 17 00:00:00 2001 From: DanConwayDev Date: Mon, 22 Dec 2025 17:22:25 +0000 Subject: accept all UserGraspList for better discovery --- src/nostr/builder.rs | 12 +++++++++++- src/nostr/events.rs | 3 +++ src/sync/filters.rs | 4 +++- src/sync/self_subscriber.rs | 3 +++ 4 files changed, 20 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/nostr/builder.rs b/src/nostr/builder.rs index c9bd1e1..84d8ab4 100644 --- a/src/nostr/builder.rs +++ b/src/nostr/builder.rs @@ -13,7 +13,7 @@ use nostr_relay_builder::prelude::*; use crate::config::{Config, DatabaseBackend}; use crate::nostr::events::{ RepositoryAnnouncement, RepositoryState, KIND_PR, KIND_PR_UPDATE, KIND_REPOSITORY_ANNOUNCEMENT, - KIND_REPOSITORY_STATE, + KIND_REPOSITORY_STATE, KIND_USER_GRASP_LIST, }; use crate::nostr::policy::{ AnnouncementPolicy, AnnouncementResult, PolicyContext, PrEventPolicy, ReferenceResult, @@ -257,6 +257,16 @@ impl WritePolicy for Nip34WritePolicy { KIND_REPOSITORY_ANNOUNCEMENT => self.handle_announcement(event).await, KIND_REPOSITORY_STATE => self.handle_state(event).await, KIND_PR | KIND_PR_UPDATE => self.handle_pr_event(event).await, + KIND_USER_GRASP_LIST => { + // Accept all kind 10317 (User Grasp List) events + // for better GRASP repository discovery + tracing::debug!( + event_id = %event.id.to_bech32().unwrap_or_else(|_| event.id.to_hex()), + author = %event.pubkey.to_hex(), + "Accepted kind 10317 user grasp list" + ); + PolicyResult::Accept + } _ => self.handle_related_event(event, "Event").await, } }) diff --git a/src/nostr/events.rs b/src/nostr/events.rs index 050bfdd..1fcb75e 100644 --- a/src/nostr/events.rs +++ b/src/nostr/events.rs @@ -21,6 +21,9 @@ pub const KIND_PR: u16 = 1618; /// NIP-34 Pull Request Update (kind 1619) - has `c` tag for commit pub const KIND_PR_UPDATE: u16 = 1619; +/// User Grasp List (kind 10317) - user's personal list of GRASP repositories +pub const KIND_USER_GRASP_LIST: u16 = 10317; + /// Repository announcement details extracted from NIP-34 event #[derive(Debug, Clone)] pub struct RepositoryAnnouncement { diff --git a/src/sync/filters.rs b/src/sync/filters.rs index 963fa02..dddc49c 100644 --- a/src/sync/filters.rs +++ b/src/sync/filters.rs @@ -13,14 +13,16 @@ use std::collections::HashSet; use nostr_sdk::prelude::*; -/// Layer 1: Announcements filter (kinds 30617 + 30618) +/// Layer 1: Announcements filter (kinds 30617 + 30618 + 10317) /// /// Subscribed ONCE on connect - NOT included in consolidation rebuilds. /// Note: 30618 is ONLY synced from remote relays, not self-subscribed. +/// Note: 10317 (User Grasp List) is synced for better GRASP discovery. pub fn build_announcement_filter(since: Option) -> Filter { let filter = Filter::new().kinds([ Kind::Custom(30617), // Repository announcements Kind::Custom(30618), // Maintainer lists + Kind::Custom(10317), // User Grasp List ]); match since { diff --git a/src/sync/self_subscriber.rs b/src/sync/self_subscriber.rs index 9643fc0..09e3b56 100644 --- a/src/sync/self_subscriber.rs +++ b/src/sync/self_subscriber.rs @@ -285,6 +285,7 @@ impl SelfSubscriber { // Subscribe to announcement and root event kinds // Per v4 spec: 30617, 1617, 1618, 1621 (NOT 30618) + // Plus kind 10317 (User Grasp List) for GRASP discovery // Check if we have a last_connected time for reconnect filtering let filter = if let Some(last) = self.last_connected { // Quick reconnect - use since filter (15 min buffer) @@ -299,6 +300,7 @@ impl SelfSubscriber { Kind::Custom(1617), // Patches Kind::Custom(1621), // Issues Kind::Custom(1618), // Pull Requests + Kind::Custom(10317), // User Grasp List ]) .since(since) } else { @@ -308,6 +310,7 @@ impl SelfSubscriber { Kind::Custom(1617), // Patches Kind::Custom(1621), // Issues Kind::Custom(1618), // Pull Requests + Kind::Custom(10317), // User Grasp List ]) }; -- cgit v1.2.3