diff options
Diffstat (limited to 'desk/lib/json')
-rw-r--r-- | desk/lib/json/common.hoon | 3 | ||||
-rw-r--r-- | desk/lib/json/nostr.hoon | 141 | ||||
-rw-r--r-- | desk/lib/json/nostrill.hoon (renamed from desk/lib/json/nostril.hoon) | 32 |
3 files changed, 131 insertions, 45 deletions
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/nostrill.hoon index 16792a9..43f7708 100644 --- a/desk/lib/json/nostril.hoon +++ b/desk/lib/json/nostrill.hoon @@ -1,4 +1,4 @@ -/- sur=nostril, nsur=nostr, feed=trill-feed +/- sur=nostrill, nsur=nostr, feed=trill-feed /+ sr=sortug, common=json-common, trill=json-trill, nostr=json-nostr |% ++ en @@ -8,18 +8,33 @@ ++ state |= state-0:sur ^- json %: pairs relays+(en-relays relays) - keys+a+(turn ~(tap in ~(key by keys)) hex:en:common) + 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 (list event:nsur)) ^- json + |= r=(map @t relay-stats:nsur) ^- json %- pairs %+ turn ~(tap by r) - |= [url=@t events=(list event:nsur)] - :- url :- %a %+ turn events event:en:nostr + |= [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] @@ -51,9 +66,9 @@ :: ui ++ ui %- of :~ + keys+ul fols+ui-fols prof+ui-prof - keys+ui-keys post+ui-post rela+ui-relay == @@ -71,11 +86,6 @@ pubkey+hex:de:common meta+user-meta:de:nostr == -++ ui-keys - %- of :~ - add+ul - del+hex:de:common - == ++ ui-post %- of :~ add+de-post |