summaryrefslogtreecommitdiff
path: root/desk/lib/nostrill/comms.hoon
diff options
context:
space:
mode:
authorpolwex <polwex@sortug.com>2025-09-17 21:45:18 +0700
committerpolwex <polwex@sortug.com>2025-09-17 21:45:18 +0700
commit985fa2f7c99832cdf3c3351d2273c8fd05402b78 (patch)
treebc727486a89ad05e588754f8de8b1096400a3d31 /desk/lib/nostrill/comms.hoon
parentf0df4c7297a05bd592d8717b8997284c80fd0500 (diff)
basic comms working
Diffstat (limited to 'desk/lib/nostrill/comms.hoon')
-rw-r--r--desk/lib/nostrill/comms.hoon99
1 files changed, 99 insertions, 0 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 ~]
+ ==
+
+--