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/lib/json/common.hoon | 3 +- desk/lib/json/nostr.hoon | 141 +++++++++++++++++++++++++++++++++----------- desk/lib/json/nostril.hoon | 113 ----------------------------------- desk/lib/json/nostrill.hoon | 123 ++++++++++++++++++++++++++++++++++++++ 4 files changed, 233 insertions(+), 147 deletions(-) delete mode 100644 desk/lib/json/nostril.hoon create mode 100644 desk/lib/json/nostrill.hoon (limited to 'desk/lib/json') diff --git a/desk/lib/json/common.hoon b/desk/lib/json/common.hoon index 64d4b03..0ed54cd 100644 --- a/desk/lib/json/common.hoon +++ b/desk/lib/json/common.hoon @@ -5,7 +5,8 @@ |% ++ cord |= s=@t ^- json s+s ++ hex |= h=@ux ^- json - [%s (crip (scow:sr %ux h))] + =/ scoww scow:sr + [%s (crip (scoww(min-chars 64) %ux h))] ++ b64 |= h=@uv ^- json [%s (crip (scow:sr %uv h))] ++ ud |= n=@ ^- json diff --git a/desk/lib/json/nostr.hoon b/desk/lib/json/nostr.hoon index aa5952a..9c36eb0 100644 --- a/desk/lib/json/nostr.hoon +++ b/desk/lib/json/nostr.hoon @@ -2,29 +2,39 @@ /+ common=json-common, sr=sortug |% ++ en -=, enjs:format +=, enjs:format |% :: shim comms - ++ req |= =req:shim:sur ^- json - %+ frond -.req - ?- -.req - %get (get +.req) - %post (post +.req) - == - ++ get |= rs=get:shim:sur - :- %a %+ turn rs |= [r=@t fs=(list filter:sur)] + ++ bulk-req |= [relays=(list @t) r=req:shim:sur] ^- json + %+ frond %ws %: pairs - relay+s+r - filters+a+(turn fs filter) + relays+a+(turn relays cord:en:common) + req+(req r) ~ == - :: - ++ post |= p=post:shim:sur + ++ http-req |= [relay=@t delay=@ud sub-id=@t fs=(list filter:sur)] + %+ frond %http %: pairs - event+(event event.p) - relays+a+(turn relays.p cord:en:common) - ~ + relay+s+relay + delay+(numb delay) + ['subscription_id' %s sub-id] + filters+a+(turn fs filter) + ~ == + ++ req |= =req:shim:sur ^- json + :- %a :- s+(crip (cuss (trip -.req))) + ?- -.req + %req (enreq +.req) + %event :_ ~ (event +.req) + %auth :_ ~ (event +.req) + %close :_ ~ [%s +.req] + == +++ enreq + |= [sub-id=@t fs=(list filter:sur)] + ^- (list json) + :- [%s sub-id] + %+ turn fs filter + :: ++ raw-event |= raw-event:sur :: WTF nostr doesn't want the prefix on the pubkey @@ -64,33 +74,82 @@ ++ filter |= f=filter:sur ^- json =| l=(list [key=@t jon=json]) - =. l ?~ ids.f l :_ l ['ids' [%a (turn ids.f hex:en:common)]] - =. l ?~ authors.f l :_ l ['authors' [%a (turn authors.f hex:en:common)]] - =. l ?~ kinds.f l :_ l ['kinds' [%a (turn kinds.f numb)]] - =. l ?~ since.f l :_ l ['since' (numb u.since.f)] - =. l ?~ until.f l :_ l ['until' (numb u.until.f)] + =. l ?~ ids.f l :_ l ['ids' %a (turn ~(tap in u.ids.f) hex:en:common)] + =. l ?~ authors.f l :_ l ['authors' %a (turn ~(tap in u.authors.f) hex:en:common)] + =. l ?~ kinds.f l :_ l ['kinds' %a (turn ~(tap in u.kinds.f) numb)] + =. l ?~ tags.f l %+ weld l (tags u.tags.f) + + =. l ?~ since.f l :_ l ['since' (sect u.since.f)] + =. l ?~ until.f l :_ l ['until' (sect u.until.f)] =. l ?~ limit.f l :_ l ['limit' (numb u.limit.f)] + :: %- pairs l + + + ++ tags + |= tm=(map @t (set @t)) ^- (list [@t json]) :: entries to the filter obeject + %+ turn ~(tap by tm) |= [key=@t values=(set @t)] + =/ nkey (cat 3 '#' key) + [nkey %a (turn ~(tap in values) cord:en:common)] + ++ user-meta |= meta=user-meta:sur - =/ other %+ turn ~(tap by other.meta) |= [key=@t val=@t] - [key %s val] %: pairs name+s+name.meta picture+s+picture.meta about+s+about.meta - other + other+o+other.meta + ~ == -- ++ de =, dejs-soft:format |% :: shim + ++ shim-res + %- of :~ + http+(ar relay-msg) + ws+msg + == ++ msg %- ot :~ relay+so + msg+relay-msg + == + ++ relay-msg + %- of :~ + event+event-sub + ok+relay-ok + eose+so + closed+closed + notice+so + error+so + == + + + :: | { event: { subscription_id: string; event: NostrEvent } } + :: | { ok: { event_id: string; accepted: boolean; message: string } } + :: | { eose: string } + :: | { closed: { subscription_id: string; message: string } } + :: | { notice: string } + :: // this is ours + :: | { error: string }; + ++ event-sub + %- ot :~ + ['subscription_id' so] event+event == + ++ relay-ok + %- ot :~ + ['event_id' hex:de:common] + accepted+bo + message+so + == + ++ closed + %- ot :~ + ['subscription_id' so] + message+so + == ++ event %- ot :~ id+hex:de:common @@ -103,14 +162,30 @@ == ++ user-meta |= jon=json ^- (unit user-meta:sur) - =/ all ((om so) jon) - ?~ all ~ - =/ base=(unit [name=@t about=@t picture=@t]) %. jon %- ot :~ - name+so - about+so - picture+so - == - ?~ base ~ - `[name.u.base about.u.base picture.u.base u.all] + ?. ?=(%o -.jon) ~ + =| um=user-meta:sur + =/ fields ~(tap by p.jon) + |- ?~ fields (some um) + =/ k -.i.fields + =/ jn=json +.i.fields + ?+ k + =/ ot (~(put by other.um) k jn) + =. um um(other ot) $(fields t.fields) + %'name' + =/ crd (so jn) + ?~ crd $(fields t.fields) $(fields t.fields, um um(name u.crd)) + %'display_name' + =/ crd (so jn) + ?~ crd $(fields t.fields) $(fields t.fields, um um(name u.crd)) + %'displayName' + =/ crd (so jn) + ?~ crd $(fields t.fields) $(fields t.fields, um um(name u.crd)) + %'about' + =/ crd (so jn) + ?~ crd $(fields t.fields) $(fields t.fields, um um(picture u.crd)) + %'picture' + =/ crd (so jn) + ?~ crd $(fields t.fields) $(fields t.fields, um um(picture u.crd)) + == -- -- diff --git a/desk/lib/json/nostril.hoon b/desk/lib/json/nostril.hoon deleted file mode 100644 index 16792a9..0000000 --- a/desk/lib/json/nostril.hoon +++ /dev/null @@ -1,113 +0,0 @@ -/- sur=nostril, nsur=nostr, feed=trill-feed -/+ sr=sortug, common=json-common, trill=json-trill, nostr=json-nostr -|% -++ en -=, enjs:format -|% - :: UI comms - ++ state |= state-0:sur ^- json - %: pairs - relays+(en-relays relays) - keys+a+(turn ~(tap in ~(key by keys)) hex:en:common) - profiles+(en-profiles profiles) - feed+(feed-with-cursor:en:trill feed ~ ~) - following+(enfollowing following) - ['followGraph' (engraph follow-graph)] - ~ - == - ++ en-relays - |= r=(map @t (list event:nsur)) ^- json - %- pairs %+ turn ~(tap by r) - |= [url=@t events=(list event:nsur)] - :- url :- %a %+ turn events event:en:nostr - ++ en-profiles |= m=(map @ux user-meta:nsur) - %- pairs - %+ turn ~(tap by m) |= [key=@ux p=user-meta:nsur] - :- (crip (scow:sr %ux key)) (user-meta:en:nostr p) - - ++ enfollowing - |= m=(map @ux feed:feed) - ^- json - %- pairs %+ turn ~(tap by m) |= [key=@ux f=feed:feed] - :- (crip (scow:sr %ux key)) (feed:en:trill f) - - ++ engraph - |= m=(map @ux (set follow:sur)) - ^- json - %- pairs %+ turn ~(tap by m) |= [key=@ux s=(set follow:sur)] - :- (crip (scow:sr %ux key)) - :- %a %+ turn ~(tap in s) |= f=follow:sur - %- pairs - :~ pubkey+(hex:en:common pubkey.f) - name+s+name.f - :- %relay ?~ relay.f ~ s+u.relay.f - == - - - -- -++ de -=, dejs-soft:format -|% - :: ui -++ ui - %- of :~ - fols+ui-fols - prof+ui-prof - keys+ui-keys - post+ui-post - rela+ui-relay - == -++ ui-fols - %- of :~ - add+hex:de:common - del+hex:de:common - == -++ ui-prof - %- of :~ - add+add-prof - del+hex:de:common - == -++ add-prof %- ot :~ - pubkey+hex:de:common - meta+user-meta:de:nostr -== -++ ui-keys - %- of :~ - add+ul - del+hex:de:common - == -++ ui-post - %- of :~ - add+de-post - rt+de-rt - del+hex:de:common - == -++ de-post - %- ot :~ - pubkey+hex:de:common - content+so - == -++ de-rt - %- ot :~ - id+hex:de:common - pubkey+hex:de:common - relay+so - == -++ ui-relay - %- of :~ - send+de-relay - == -++ de-relay %- ot :~ - host+(se:de:common %p) - id+de-atom-id - relays+(ar so) - == -++ de-atom-id - |= jon=json - ?. ?=([%s @t] jon) ~ - (rush p.jon dem) - - -- - --- - diff --git a/desk/lib/json/nostrill.hoon b/desk/lib/json/nostrill.hoon new file mode 100644 index 0000000..43f7708 --- /dev/null +++ b/desk/lib/json/nostrill.hoon @@ -0,0 +1,123 @@ +/- sur=nostrill, nsur=nostr, feed=trill-feed +/+ sr=sortug, common=json-common, trill=json-trill, nostr=json-nostr +|% +++ en +=, enjs:format +|% + :: UI comms + ++ state |= state-0:sur ^- json + %: pairs + relays+(en-relays relays) + key+(hex:en:common pub.i.keys) + profiles+(en-profiles profiles) + :: TODO proper cursors + feed+(feed-with-cursor:en:trill feed ~ ~) + nostr+(en-nostr-feed nostr-feed) + following+(enfollowing following) + ['followGraph' (engraph follow-graph)] + ~ + == + ++ en-nostr-feed + |= feed=nostr-feed:sur ^- json + :- %a %+ turn (tap:norm:sur feed) |= [id=@ud ev=event:nsur] + (event:en:nostr ev) + + ++ en-relays + |= r=(map @t relay-stats:nsur) ^- json + %- pairs %+ turn ~(tap by r) + |= [url=@t rs=relay-stats:nsur] + :- url %- pairs + :~ :- %connected ?~ connected.rs ~ (time u.connected.rs) + :- %reqs (relay-stats reqs.rs) + == + ++ relay-stats |= rm=(map @t event-stats:nsur) + %- pairs %+ turn ~(tap by rm) |= [sub-id=@t es=event-stats:nsur] + :: TODO do we even need this + :- sub-id (numb received.es) + + ++ en-profiles |= m=(map @ux user-meta:nsur) + %- pairs + %+ turn ~(tap by m) |= [key=@ux p=user-meta:nsur] + :- (crip (scow:sr %ux key)) (user-meta:en:nostr p) + + ++ enfollowing + |= m=(map @ux feed:feed) + ^- json + %- pairs %+ turn ~(tap by m) |= [key=@ux f=feed:feed] + :- (crip (scow:sr %ux key)) (feed:en:trill f) + + ++ engraph + |= m=(map @ux (set follow:sur)) + ^- json + %- pairs %+ turn ~(tap by m) |= [key=@ux s=(set follow:sur)] + :- (crip (scow:sr %ux key)) + :- %a %+ turn ~(tap in s) |= f=follow:sur + %- pairs + :~ pubkey+(hex:en:common pubkey.f) + name+s+name.f + :- %relay ?~ relay.f ~ s+u.relay.f + == + + + -- +++ de +=, dejs-soft:format +|% + :: ui +++ ui + %- of :~ + keys+ul + fols+ui-fols + prof+ui-prof + post+ui-post + rela+ui-relay + == +++ ui-fols + %- of :~ + add+hex:de:common + del+hex:de:common + == +++ ui-prof + %- of :~ + add+add-prof + del+hex:de:common + == +++ add-prof %- ot :~ + pubkey+hex:de:common + meta+user-meta:de:nostr +== +++ ui-post + %- of :~ + add+de-post + rt+de-rt + del+hex:de:common + == +++ de-post + %- ot :~ + pubkey+hex:de:common + content+so + == +++ de-rt + %- ot :~ + id+hex:de:common + pubkey+hex:de:common + relay+so + == +++ ui-relay + %- of :~ + send+de-relay + == +++ de-relay %- ot :~ + host+(se:de:common %p) + id+de-atom-id + relays+(ar so) + == +++ de-atom-id + |= jon=json + ?. ?=([%s @t] jon) ~ + (rush p.jon dem) + + -- + +-- + -- cgit v1.2.3