diff options
Diffstat (limited to 'desk/lib/nostrill')
-rw-r--r-- | desk/lib/nostrill/comms.hoon | 99 | ||||
-rw-r--r-- | desk/lib/nostrill/mutations.hoon | 19 |
2 files changed, 108 insertions, 10 deletions
diff --git a/desk/lib/nostrill/comms.hoon b/desk/lib/nostrill/comms.hoon new file mode 100644 index 0000000..833c07d --- /dev/null +++ b/desk/lib/nostrill/comms.hoon @@ -0,0 +1,99 @@ +/- sur=nostrill, nsur=nostr, comms=nostrill-comms, feed=trill-feed +/+ js=json-nostr, sr=sortug, nlib=nostr, constants, gatelib=trill-gate, feedlib=trill-feed, jsonlib=json-nostrill +|_ [=state:sur =bowl:gall] +++ cast-poke + |= raw=* ^- poke:comms + ;; poke:comms raw +:: Req +++ handle-req |= =req:comms + ?- -.req + %feed handle-feed + %thread (handle-thread +.req) + %prof handle-prof + == +++ handle-feed + =/ can (can-access:gatelib src.bowl lock.feed-perms.state bowl) + ?. can + :: TODO keep track of the requests at the feed-perms struct + =/ crd (res-poke [%ng 'not allowed']) + :_ state :~(crd) + :: + =/ lp latest-page:feedlib + =/ lp2 lp(count backlog.feed-perms.state) + =/ =fc:feed (lp2 feed.state) + =/ crd (res-poke [%ok %feed fc]) + :_ state :~(crd) + +++ give-feed + ~& give-feed=src.bowl + =/ can (can-access:gatelib src.bowl lock.feed-perms.state bowl) + ?. can + :: TODO keep track of the requests at the feed-perms struct + (res-fact [%ng 'not allowed']) + :: + =/ lp latest-page:feedlib + =/ lp2 lp(count backlog.feed-perms.state) + =/ =fc:feed (lp2 feed.state) + (res-fact [%ok %feed fc]) + +++ give-ted |= id=@ + =/ ted (get:orm:feed feed.state id) + ?~ ted + (res-fact [%ng 'no such thread']) + =/ can (can-access:gatelib src.bowl read.u.ted bowl) + ?. can + (res-fact [%ng 'not allowed']) + :: + =/ fn (node-to-full:feedlib u.ted feed.state) + (res-fact [%ok %thread fn]) +:: +++ handle-prof + =/ can (can-access:gatelib src.bowl lock.feed-perms.state bowl) + ?. can + :: TODO keep track of the requests at the feed-perms struct + =/ crd (res-poke [%ng 'not allowed']) + :_ state :~(crd) + :: + :: TODO @p or keys... wat do + :: =/ up (~(get by profiles.state) our.bowl) + =/ up (~(get by profiles.state) pub.i.keys.state) + ?~ up + =/ crd (res-poke [%ng 'dont have one']) + :_ state :~(crd) + + =/ crd (res-poke [%ok %prof u.up]) + :_ state :~(crd) + +++ handle-thread |= id=@da + =/ ted (get:orm:feed feed.state id) + ?~ ted + =/ crd (res-poke [%ng 'no such thread']) + :_ state :~(crd) + =/ can (can-access:gatelib src.bowl read.u.ted bowl) + ?. can + =/ crd (res-poke [%ng 'not allowed']) + :_ state :~(crd) + :: + =/ fn (node-to-full:feedlib u.ted feed.state) + =/ crd (res-poke [%ok %thread fn]) + :_ state :~(crd) +:: res +++ handle-res |= =res:comms + `state +:: +++ res-poke |= =res:comms ^- card:agent:gall + =/ =poke:comms [%res res] + =/ cage [%noun !>(poke)] + [%pass /poke %agent [src.bowl dap.bowl] %poke cage] +++ res-fact |= =res:comms ^- (list card:agent:gall) + =/ paths ~[/beg/feed] + =/ =poke:comms [%res res] + ~& > giving-res-fact=res + =/ jon (beg-res:en:jsonlib res) + =/ cage [%json !>(jon)] + :~ + [%give %fact paths cage] + [%give %kick paths ~] + == + +-- diff --git a/desk/lib/nostrill/mutations.hoon b/desk/lib/nostrill/mutations.hoon index 4dda095..f493bcf 100644 --- a/desk/lib/nostrill/mutations.hoon +++ b/desk/lib/nostrill/mutations.hoon @@ -2,6 +2,7 @@ post=trill-post, gate=trill-gate, feed=trill-feed /+ appjs=json-nostrill, + lib=nostrill, njs=json-nostr, postlib=trill-post, shim, @@ -57,12 +58,6 @@ -:: ++ handle-shim-msg |= msg=res:shim:nsur -:: ^- (quip card _state) -:: ?- -.msg -:: %ws (handle-ws +.msg) -:: %http (handle-http +.msg) -:: == ++ handle-http |= [sub-id=@t msgs=(list relay-msg:nsur)] @@ -92,8 +87,10 @@ ++ handle-ws |= [relay=@t msg=relay-msg:nsur] =/ rs (~(get by relays.state) relay) - ?~ rs `state + ?~ rs :: TODO do we really + `state =^ cards state + ~& handle-ws=-.msg ?- -.msg %ok (handle-ok relay +.msg) %event @@ -102,11 +99,13 @@ %eose :: TODO do unsub for replaceable/addressable events - :: =/ creq (~(get by reqs.u.rs) +.msg) - :: ?~ creq `state + =/ creq (~(get by reqs.u.rs) +.msg) + ?~ creq `state :: =. reqs.u.rs (~(del by reqs.u.rs) +.msg) :: =. relays.state (~(put by relays.state) relay u.rs) - `state + =/ cardslib ~(. cards:lib bowl) + =/ c (update-ui:cardslib [%nostr nostr-feed.state]) + :_ state :~(c) %closed =. reqs.u.rs (~(del by reqs.u.rs) sub-id.msg) =. relays.state (~(put by relays.state) relay u.rs) `state |