diff options
| author | DanConwayDev <DanConwayDev@protonmail.com> | 2025-12-22 17:22:25 +0000 |
|---|---|---|
| committer | DanConwayDev <DanConwayDev@protonmail.com> | 2025-12-22 20:21:26 +0000 |
| commit | 5d3d96c7f0397a079384b7291ff21df76029b126 (patch) | |
| tree | 9bb558649611409b8612899776a865dd8232f783 /src | |
| parent | 777509bb03f5233b3ef470329d23cec371baf53c (diff) | |
accept all UserGraspList for better discovery
Diffstat (limited to 'src')
| -rw-r--r-- | src/nostr/builder.rs | 12 | ||||
| -rw-r--r-- | src/nostr/events.rs | 3 | ||||
| -rw-r--r-- | src/sync/filters.rs | 4 | ||||
| -rw-r--r-- | src/sync/self_subscriber.rs | 3 |
4 files changed, 20 insertions, 2 deletions
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::*; | |||
| 13 | use crate::config::{Config, DatabaseBackend}; | 13 | use crate::config::{Config, DatabaseBackend}; |
| 14 | use crate::nostr::events::{ | 14 | use crate::nostr::events::{ |
| 15 | RepositoryAnnouncement, RepositoryState, KIND_PR, KIND_PR_UPDATE, KIND_REPOSITORY_ANNOUNCEMENT, | 15 | RepositoryAnnouncement, RepositoryState, KIND_PR, KIND_PR_UPDATE, KIND_REPOSITORY_ANNOUNCEMENT, |
| 16 | KIND_REPOSITORY_STATE, | 16 | KIND_REPOSITORY_STATE, KIND_USER_GRASP_LIST, |
| 17 | }; | 17 | }; |
| 18 | use crate::nostr::policy::{ | 18 | use crate::nostr::policy::{ |
| 19 | AnnouncementPolicy, AnnouncementResult, PolicyContext, PrEventPolicy, ReferenceResult, | 19 | AnnouncementPolicy, AnnouncementResult, PolicyContext, PrEventPolicy, ReferenceResult, |
| @@ -257,6 +257,16 @@ impl WritePolicy for Nip34WritePolicy { | |||
| 257 | KIND_REPOSITORY_ANNOUNCEMENT => self.handle_announcement(event).await, | 257 | KIND_REPOSITORY_ANNOUNCEMENT => self.handle_announcement(event).await, |
| 258 | KIND_REPOSITORY_STATE => self.handle_state(event).await, | 258 | KIND_REPOSITORY_STATE => self.handle_state(event).await, |
| 259 | KIND_PR | KIND_PR_UPDATE => self.handle_pr_event(event).await, | 259 | KIND_PR | KIND_PR_UPDATE => self.handle_pr_event(event).await, |
| 260 | KIND_USER_GRASP_LIST => { | ||
| 261 | // Accept all kind 10317 (User Grasp List) events | ||
| 262 | // for better GRASP repository discovery | ||
| 263 | tracing::debug!( | ||
| 264 | event_id = %event.id.to_bech32().unwrap_or_else(|_| event.id.to_hex()), | ||
| 265 | author = %event.pubkey.to_hex(), | ||
| 266 | "Accepted kind 10317 user grasp list" | ||
| 267 | ); | ||
| 268 | PolicyResult::Accept | ||
| 269 | } | ||
| 260 | _ => self.handle_related_event(event, "Event").await, | 270 | _ => self.handle_related_event(event, "Event").await, |
| 261 | } | 271 | } |
| 262 | }) | 272 | }) |
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; | |||
| 21 | /// NIP-34 Pull Request Update (kind 1619) - has `c` tag for commit | 21 | /// NIP-34 Pull Request Update (kind 1619) - has `c` tag for commit |
| 22 | pub const KIND_PR_UPDATE: u16 = 1619; | 22 | pub const KIND_PR_UPDATE: u16 = 1619; |
| 23 | 23 | ||
| 24 | /// User Grasp List (kind 10317) - user's personal list of GRASP repositories | ||
| 25 | pub const KIND_USER_GRASP_LIST: u16 = 10317; | ||
| 26 | |||
| 24 | /// Repository announcement details extracted from NIP-34 event | 27 | /// Repository announcement details extracted from NIP-34 event |
| 25 | #[derive(Debug, Clone)] | 28 | #[derive(Debug, Clone)] |
| 26 | pub struct RepositoryAnnouncement { | 29 | 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; | |||
| 13 | 13 | ||
| 14 | use nostr_sdk::prelude::*; | 14 | use nostr_sdk::prelude::*; |
| 15 | 15 | ||
| 16 | /// Layer 1: Announcements filter (kinds 30617 + 30618) | 16 | /// Layer 1: Announcements filter (kinds 30617 + 30618 + 10317) |
| 17 | /// | 17 | /// |
| 18 | /// Subscribed ONCE on connect - NOT included in consolidation rebuilds. | 18 | /// Subscribed ONCE on connect - NOT included in consolidation rebuilds. |
| 19 | /// Note: 30618 is ONLY synced from remote relays, not self-subscribed. | 19 | /// Note: 30618 is ONLY synced from remote relays, not self-subscribed. |
| 20 | /// Note: 10317 (User Grasp List) is synced for better GRASP discovery. | ||
| 20 | pub fn build_announcement_filter(since: Option<Timestamp>) -> Filter { | 21 | pub fn build_announcement_filter(since: Option<Timestamp>) -> Filter { |
| 21 | let filter = Filter::new().kinds([ | 22 | let filter = Filter::new().kinds([ |
| 22 | Kind::Custom(30617), // Repository announcements | 23 | Kind::Custom(30617), // Repository announcements |
| 23 | Kind::Custom(30618), // Maintainer lists | 24 | Kind::Custom(30618), // Maintainer lists |
| 25 | Kind::Custom(10317), // User Grasp List | ||
| 24 | ]); | 26 | ]); |
| 25 | 27 | ||
| 26 | match since { | 28 | 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 { | |||
| 285 | 285 | ||
| 286 | // Subscribe to announcement and root event kinds | 286 | // Subscribe to announcement and root event kinds |
| 287 | // Per v4 spec: 30617, 1617, 1618, 1621 (NOT 30618) | 287 | // Per v4 spec: 30617, 1617, 1618, 1621 (NOT 30618) |
| 288 | // Plus kind 10317 (User Grasp List) for GRASP discovery | ||
| 288 | // Check if we have a last_connected time for reconnect filtering | 289 | // Check if we have a last_connected time for reconnect filtering |
| 289 | let filter = if let Some(last) = self.last_connected { | 290 | let filter = if let Some(last) = self.last_connected { |
| 290 | // Quick reconnect - use since filter (15 min buffer) | 291 | // Quick reconnect - use since filter (15 min buffer) |
| @@ -299,6 +300,7 @@ impl SelfSubscriber { | |||
| 299 | Kind::Custom(1617), // Patches | 300 | Kind::Custom(1617), // Patches |
| 300 | Kind::Custom(1621), // Issues | 301 | Kind::Custom(1621), // Issues |
| 301 | Kind::Custom(1618), // Pull Requests | 302 | Kind::Custom(1618), // Pull Requests |
| 303 | Kind::Custom(10317), // User Grasp List | ||
| 302 | ]) | 304 | ]) |
| 303 | .since(since) | 305 | .since(since) |
| 304 | } else { | 306 | } else { |
| @@ -308,6 +310,7 @@ impl SelfSubscriber { | |||
| 308 | Kind::Custom(1617), // Patches | 310 | Kind::Custom(1617), // Patches |
| 309 | Kind::Custom(1621), // Issues | 311 | Kind::Custom(1621), // Issues |
| 310 | Kind::Custom(1618), // Pull Requests | 312 | Kind::Custom(1618), // Pull Requests |
| 313 | Kind::Custom(10317), // User Grasp List | ||
| 311 | ]) | 314 | ]) |
| 312 | }; | 315 | }; |
| 313 | 316 | ||