From 387af8fc1603805b02ce03f8adba4fa73a954f7c Mon Sep 17 00:00:00 2001 From: polwex Date: Wed, 17 Sep 2025 12:24:41 +0700 Subject: relay much more robust --- desk/sur/nostr.hoon | 80 +++++++++++++++++++++++++++++++++++++++++++------- desk/sur/nostril.hoon | 54 ---------------------------------- desk/sur/nostrill.hoon | 52 ++++++++++++++++++++++++++++++++ 3 files changed, 121 insertions(+), 65 deletions(-) delete mode 100644 desk/sur/nostril.hoon create mode 100644 desk/sur/nostrill.hoon (limited to 'desk/sur') diff --git a/desk/sur/nostr.hoon b/desk/sur/nostr.hoon index 78c00ab..ff5ad6b 100644 --- a/desk/sur/nostr.hoon +++ b/desk/sur/nostr.hoon @@ -25,23 +25,81 @@ $: pubkey=@ux :: 32bytes $: name=@t about=@t picture=@t - other=(map @t @t) + other=(map @t json) +== ++$ relay-stats +$: connected=(unit @da) + reqs=(map sub-id event-stats) +== ++$ event-stats + [filters=(list filter) received=event-count] ++$ sub-id @t ++$ event-count @ud + ++$ relay-req +$: sub-id=@t + filters=(list filter) == :: Relay comms +$ filter -$: ids=(list @ux) - authors=(list @ux) - kinds=(list @ud) - tag=(unit [key=@ values=(list @t)]) - since=(unit @ud) - until=(unit @ud) - limit=(unit @ud) +$: ids=(unit (set @ux)) + authors=(unit (set @ux)) + kinds=(unit (set @ud)) + tags=(unit (map @t (set @t))) + since=(unit @da) + until=(unit @da) + limit=(unit @ud) +== +:: messages from relay +++ relay-msg +$% [%event sub-id=@t =event] + [%ok id=@ux accepted=? msg=@t] + [%eose sub-id=@t] + [%closed sub-id=@t msg=@t] + [%notice msg=@t] + [%auth challenge=@t] + :: from our shim + [%error msg=@t] == ++ shim |% ++ url 'http://localhost:8888/shim' - +$ get (list [relay=@t filters=(list filter)]) - +$ post [=event relays=(list @t)] - +$ req $%([%get get] [%post post]) + +$ req + $% [%req relay-req] + [%event =event] + [%auth =event] + [%close sub-id=@t] + == + +$ bulk-req [relays=(list @t) =req] + +$ http-req [relay=@t delay=@ud sub-id=@t filters=(list filter)] + +$ res $%([%http p=(list relay-msg)] [%ws relay=@t msg=relay-msg]) -- + +:: https://github.com/sesseor/nostr-relays-list/blob/main/relays.txt +++ public-relays ^- (list @t) + :~ 'wss://nos.lol' + :: 'wss://relay.damus.io' + :: 'wss://nostr.wine' + :: 'wss://offchain.pub' + == + :: 'wss://knostr.neutrine.com' -- +:: event: { +:: content: "😂", +:: created_at: 1758049319, +:: id: "36c8a0bb6a9a1ff3ca3e6868fdf2c055a09aea39b1c078b75c38f5a7b580da87", +:: kind: 7, +:: pubkey: "26d6a946675e603f8de4bf6f9cef442037b70c7eee170ff06ed7673fc34c98f1", +:: sig: "7b5a9c799776935f959eccfd311af6152db6a1360296c9790b35544d0b83a8d75f8937ad1ad6f5da3e0d3e2bdb1bfb92686adbde42c3ef53ca06771080d08153", +:: tags: [ +:: [ "e", "091d00811bb9a57088ab7c1d39697b0ed9bbbe05dae135b406f3560290fba311", +:: "wss://relay.nostr.band/", "root", "26d6a946675e603f8de4bf6f9cef442037b70c7eee170ff06ed7673fc34c98f1" +:: ], [ "e", "1cd926b58a1bac70adcedf38212d72ee1380e17dad1aef6bbc18782c5c540236", +:: "wss://relay.nostr.band/", "reply", "3252715543f6e43be086465129b030d47d76cf8cead4798e48864563c3375083" +:: ], [ "p", "26d6a946675e603f8de4bf6f9cef442037b70c7eee170ff06ed7673fc34c98f1", +:: "wss://nostr.bitcoiner.social/" +:: ], [ "p", "3252715543f6e43be086465129b030d47d76cf8cead4798e48864563c3375083", +:: "ws://relay.snort.social/" +:: ], [ "e", "b9a0c3b28a291d80bcb41ee730f2c48366fd2fefba0e68f9fb928bb9ca96f757" ], [ "p", "3252715543f6e43be086465129b030d47d76cf8cead4798e48864563c3375083" ] +:: ], +:: }, diff --git a/desk/sur/nostril.hoon b/desk/sur/nostril.hoon deleted file mode 100644 index a1cc5ee..0000000 --- a/desk/sur/nostril.hoon +++ /dev/null @@ -1,54 +0,0 @@ -/- trill=trill-feed, nostr -|% -+$ state state-0 -+$ state-0 - $: %0 - :: nostr config - relays=(map @t (list event:nostr)) - keys=(map @ux @ux) :: pubkey to privkey - :: own feed - feed=feed:trill - profiles=(map @ux user-meta:nostr) - following=(map @ux =feed:trill) - follow-graph=(map @ux (set follow)) - :: TODO global feed somehow? - - == -+$ follow [pubkey=@ux name=@t relay=(unit @t)] -++ default ^- state-0 - =/ s *state-0 - =/ l ~[['wss://relay.damus.io' ~] ['wss://nos.lol' ~]] - s(relays (malt l)) - -++ ui - |% - +$ poke - $% [%fols fols-poke] - [%post post-poke] - :: [%reac reac-poke] - [%prof prof-poke] - [%keys keys-poke] - [%rela relay-poke] - == - +$ post-poke - $% [%add pubkey=@ux content=@t] - [%rt id=@ux pubkey=@ux relay=@t] :: NIP-18 - [%del pubkey=@ux] - == - +$ fols-poke - $% [%add pubkey=@ux] - [%del pubkey=@ux] - == - +$ prof-poke - $% [%add pubkey=@ux meta=user-meta:nostr] - [%del pubkey=@ux] - == - +$ keys-poke - $% [%add ~] - [%del pubkey=@ux] - == - +$ relay-poke - $% [%send host=@p id=@ relays=(list @t)] - == - -- --- diff --git a/desk/sur/nostrill.hoon b/desk/sur/nostrill.hoon new file mode 100644 index 0000000..ad82661 --- /dev/null +++ b/desk/sur/nostrill.hoon @@ -0,0 +1,52 @@ +/- trill=trill-feed, nostr +|% ++$ state state-0 ++$ state-0 + $: %0 + :: nostr config + relays=(map @t relay-stats:nostr) + keys=(lest keys:nostr) :: cycled, i.keys is current one + :: own feed + feed=feed:trill + :: nostr feed from relays + =nostr-feed + :: profiles + profiles=(map @ux user-meta:nostr) + following=(map @ux =feed:trill) + follow-graph=(map @ux (set follow)) + :: for http requests + pending=(map @t [pending=filter:nostr done=filter:nostr]) + :: TODO global feed somehow? + + == ++$ nostr-feed ((mop @ud event:nostr) gth) +++ norm ((on @ud event:nostr) gth) ++$ follow [pubkey=@ux name=@t relay=(unit @t)] +++ ui + |% + +$ poke + $% [%fols fols-poke] + [%post post-poke] + :: [%reac reac-poke] + [%prof prof-poke] + [%keys ~] :: cycle-keys + [%rela relay-poke] + == + +$ post-poke + $% [%add pubkey=@ux content=@t] + [%rt id=@ux pubkey=@ux relay=@t] :: NIP-18 + [%del pubkey=@ux] + == + +$ fols-poke + $% [%add pubkey=@ux] + [%del pubkey=@ux] + == + +$ prof-poke + $% [%add pubkey=@ux meta=user-meta:nostr] + [%del pubkey=@ux] + == + +$ relay-poke + $% [%send host=@p id=@ relays=(list @t)] + == + -- +-- -- cgit v1.2.3