summaryrefslogtreecommitdiff
path: root/desk/lib
diff options
context:
space:
mode:
Diffstat (limited to 'desk/lib')
-rw-r--r--desk/lib/json/nostrill.hoon51
-rw-r--r--desk/lib/json/trill.hoon30
-rw-r--r--desk/lib/nostrill.hoon2
-rw-r--r--desk/lib/nostrill/comms.hoon99
-rw-r--r--desk/lib/nostrill/mutations.hoon19
-rw-r--r--desk/lib/shim.hoon10
-rw-r--r--desk/lib/trill/feed.hoon37
-rw-r--r--desk/lib/trill/gate.hoon79
8 files changed, 294 insertions, 33 deletions
diff --git a/desk/lib/json/nostrill.hoon b/desk/lib/json/nostrill.hoon
index bd34acc..b5a619c 100644
--- a/desk/lib/json/nostrill.hoon
+++ b/desk/lib/json/nostrill.hoon
@@ -1,4 +1,4 @@
-/- sur=nostrill, nsur=nostr, feed=trill-feed
+/- sur=nostrill, nsur=nostr, feed=trill-feed, comms=nostrill-comms
/+ sr=sortug, common=json-common, trill=json-trill, nostr=json-nostr
|%
++ en
@@ -70,9 +70,13 @@
%+ frond %fact
%+ frond -.f
?- -.f
- %post (postfact +.f)
- %enga (enga +.f)
+ %nostr (en-nostr-feed +.f)
+ %post (postfact +.f)
+ %enga (enga +.f)
==
+ ++ tedfact |= pf=post-fact:ui:sur ^- json
+ %+ frond -.pf
+ (post-wrapper +.pf)
++ postfact |= pf=post-fact:ui:sur ^- json
%+ frond -.pf
(post-wrapper +.pf)
@@ -93,6 +97,21 @@
=. l ?~ relay.p l :_ l ['relay' %s u.relay.p]
=. l ?~ pr.p l :_ l ['profile' (user-meta:en:nostr u.pr.p)]
%- pairs l
+
+ ++ beg-res |= =res:comms ^- json
+ %+ frond %begs %+ frond -.res
+ ?- -.res
+ %ok (resd +.res)
+ %ng [%s msg.res]
+ ==
+ ++ resd |= rd=res-data:comms ^- json
+ %+ frond -.rd
+ ?- -.rd
+ %feed (feed-with-cursor:en:trill +.rd)
+ :: TODO wrap it for nostr shit
+ %thread (full-node:en:trill +.rd)
+ %prof (user-meta:en:nostr +.rd)
+ ==
--
++ de
=, dejs-soft:format
@@ -102,6 +121,7 @@
%- of :~
keys+ul
fols+ui-fols
+ begs+ui-begs
prof+ui-prof
post+ui-post
rela+ui-relay
@@ -111,15 +131,21 @@
add+hex:de:common
del+hex:de:common
==
+++ ui-begs
+ %- of :~
+ feed+(se:de:common %p)
+ thread+de-pid
+ ==
+++ de-pid
+ %- ot :~
+ host+(se:de:common %p)
+ id+de-atom-id
+ ==
++ ui-prof
%- of :~
- add+add-prof
- del+hex:de:common
+ add+user-meta:de:nostr
+ del+ul
==
-++ add-prof %- ot :~
- pubkey+hex:de:common
- meta+user-meta:de:nostr
-==
++ ui-post
%- of :~
add+de-post
@@ -138,9 +164,12 @@
==
++ ui-relay
%- of :~
- send+de-relay
+ add+so
+ del+so
+ sync+ul
+ send+de-relay-send
==
-++ de-relay %- ot :~
+++ de-relay-send %- ot :~
host+(se:de:common %p)
id+de-atom-id
relays+(ar so)
diff --git a/desk/lib/json/trill.hoon b/desk/lib/json/trill.hoon
index efa4ffc..415d2f4 100644
--- a/desk/lib/json/trill.hoon
+++ b/desk/lib/json/trill.hoon
@@ -185,7 +185,35 @@
:~ ship+(patp:en:common ship.pid)
id+(ud:en:common id.pid)
==
- ::
+ ++ full-node
+ |= p=full-node:post ^- json
+ %- pairs
+ :~ id+(ud:en:common id.p)
+ host+(patp:en:common host.p)
+ author+(patp:en:common author.p)
+ thread+(ud:en:common thread.p)
+ parent+?~(parent.p ~ (ud:en:common u.parent.p))
+ contents+(content contents.p)
+ hash+(b64:en:common hash.p)
+ engagement+(engagement engagement.p)
+ children+(internal-graph children.p)
+ time+(time id.p)
+ ==
+ ++ internal-graph
+ |= int=internal-graph:post ^- json
+ ?- -.int
+ %empty ~
+ %full (full-graph +.int)
+ ==
+ ++ full-graph
+ |= f=full-graph:post
+ ^- json
+ %- pairs
+ %+ turn (tap:form:post f)
+ |= [post-id=@da fn=full-node:post]
+ ^- [@ta json]
+ :- (crip (scow:sr %ud `@ud`post-id))
+ (full-node fn)
::
--
--
diff --git a/desk/lib/nostrill.hoon b/desk/lib/nostrill.hoon
index 0570dbc..6d22adc 100644
--- a/desk/lib/nostrill.hoon
+++ b/desk/lib/nostrill.hoon
@@ -5,7 +5,7 @@
++ default-state |= =bowl:gall ^- state:sur
=/ s *state-0:sur
=/ l public-relays:nsur
- =/ l (scag 1 l)
+ :: =/ l (scag 1 l)
:: =/ l ~['wss://relay.damus.io' 'wss://nos.lol']
=/ rl %+ turn l |= t=@t [t *relay-stats:nsur]
:: =/ l ~[['wss://relay.damus.io' ~]]
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
diff --git a/desk/lib/shim.hoon b/desk/lib/shim.hoon
index f2e0b8a..1b78f0a 100644
--- a/desk/lib/shim.hoon
+++ b/desk/lib/shim.hoon
@@ -13,7 +13,9 @@
++ parse-body |= jstring=@t
=/ ures (de:json:html jstring)
?~ ures ~
- (shim-res:de:js u.ures)
+ =/ ur (shim-res:de:js u.ures)
+ ?~ ur ~& >>> shim-msg-parsing-failed=jstring ~
+ ur
:: __
++ get-req |= fs=(list filter:nsur)
^- [bulk-req:shim:nsur _state]
@@ -74,8 +76,11 @@
|= req=bulk-req:shim:nsur ^- card:agent:gall
=/ req-body (bulk-req:en:js req)
:: ~& shim-req-json=(en:json:html req-body)
+ =/ host .^(hart:eyre %e /(scot %p our.bowl)/host/(scot %da now.bowl))
+ =/ origin %- crip (head:en-purl:html host)
=/ headers :~
[key='content-type' value='application/json']
+ [key='origin' value=origin]
==
=/ =request:http [%'POST' url:shim:nsur headers `(json-body:web req-body)]
=/ pat /shim
@@ -86,8 +91,11 @@
^- card:agent:gall
=/ req-body (http-req:en:js req)
:: ~& shim-req-json=(en:json:html req-body)
+ =/ host .^(hart:eyre %e /(scot %p our.bowl)/host/(scot %da now.bowl))
+ =/ origin %- crip (head:en-purl:html host)
=/ headers :~
[key='content-type' value='application/json']
+ [key='origin' value=origin]
==
=/ =request:http [%'POST' url:shim:nsur headers `(json-body:web req-body)]
[%pass /http/[sub-id.req] %arvo %k %fard dap.bowl %fetch %noun !>(request)]
diff --git a/desk/lib/trill/feed.hoon b/desk/lib/trill/feed.hoon
index c21feb3..721a596 100644
--- a/desk/lib/trill/feed.hoon
+++ b/desk/lib/trill/feed.hoon
@@ -1,14 +1,16 @@
-/- feed=trill-feed, sur=nostrill
+/- feed=trill-feed, post=trill-post, sur=nostrill
/+ sr=sortug, constants
|%
-++ latest-page |= f=feed:feed ^- fc:feed
+++ latest-page
+=/ count feed-page-size:constants
+|= f=feed:feed ^- fc:feed
=/ nodelist (tap:orm:feed f)
- =/ subset (scag feed-page-size:constants nodelist)
+ =/ subset (scag count nodelist)
?~ subset [f ~ ~]
- =/ start `id.i.subset
+ =/ start `-.i.subset
=/ rev (flop subset)
?~ rev [f ~ ~]
- =/ end `id.i.rev
+ =/ end `-.i.rev
=/ nf (gas:orm:feed *feed:feed subset)
[nf start end]
::
@@ -16,20 +18,20 @@
=/ nodelist (tap:norm:sur f)
=/ subset (scag feed-page-size:constants nodelist)
?~ subset [f ~ ~]
- =/ start `id.i.subset
+ =/ start (some `@da`-.i.subset)
=/ rev (flop subset)
?~ rev [f ~ ~]
- =/ end `id.i.rev
+ =/ end (some `@da`-.i.rev)
=/ nf (gas:norm:sur *nostr-feed:sur subset)
[nf start end]
::
:: NOTE START IS OLD, END IS NEW
++ subset
+=/ count feed-page-size:constants
|= [=fc:feed replies=? now=@da] ^- fc:feed
?: ?&(?=(%~ start.fc) ?=(%~ end.fc)) (latest-page feed.fc)
- =/ count feed-page-size:constants
=/ start ?~ start.fc 0 u.start.fc
=/ end ?~ end.fc now u.end.fc
=/ nodelist (tap:orm:feed feed.fc)
@@ -43,9 +45,26 @@
==
?& (lte id start) (gte id end) ==
=/ thread-count (lent threads)
- =/ result=(list [id:post post:post]) ?: newest (scag count threads) (flop (scag count (flop threads)))
+ :: TODO I remember something was weird about this
+ :: =/ result=(list [id:post post:post]) ?: newest (scag count threads) (flop (scag count (flop threads)))
+ =/ result=(list [id:post post:post]) (scag count threads)
=/ cursors=[(unit @da) (unit @da)] ?~ result [~ ~] ?~ threads [~ ~] :-
?: .=((head result) (head threads)) ~ `id:(head result)
?: .=((rear result) (rear threads)) ~ `id:(rear result)
[(gas:orm:feed *feed:feed result) -.cursors +.cursors]
+:: posts
+++ node-to-full
+|= [p=post:post f=feed:feed] ^- full-node:post
+ p(children (convert-children children.p f))
+++ convert-children
+|= [children=(set id:post) f=feed:feed]
+ ^- internal-graph:post
+ =/ g=full-graph:post %- ~(rep in children)
+ |= [=id:post acc=full-graph:post]
+ =/ n (get:orm:feed f id)
+ ?~ n acc
+ =/ full-node (node-to-full u.n f)
+ (put:form:post acc id full-node)
+ ?~ children [%empty ~]
+ :- %full g
--
diff --git a/desk/lib/trill/gate.hoon b/desk/lib/trill/gate.hoon
new file mode 100644
index 0000000..ebb78b8
--- /dev/null
+++ b/desk/lib/trill/gate.hoon
@@ -0,0 +1,79 @@
+/- gate=trill-gate
+|%
+++ mask-lock
+|= =lock:gate ^- lock:gate
+ :* ?: public.rank.lock rank.lock [~ %| %|]
+ ?: public.luk.lock luk.lock [~ %| %|]
+ ?: public.ship.lock ship.lock [~ %| %|]
+ ?: public.tags.lock tags.lock [~ %| %|]
+ ?: public.custom.lock custom.lock [~ %|]
+ ==
+++ can-access
+|= [=ship =lock:gate =bowl:gall] ^- ?
+ ?^ fn.custom.lock %- u.fn.custom.lock ship
+ =/ in-luk (~(has in caveats.ship.lock) ship)
+ =/ fu (sein:title our.bowl now.bowl ship)
+ =/ ye (sein:title our.bowl now.bowl fu)
+ =/ ze (sein:title our.bowl now.bowl ye)
+ =/ in-ship ?|
+ (~(has in caveats.luk.lock) fu)
+ (~(has in caveats.luk.lock) ye)
+ (~(has in caveats.luk.lock) ze)
+ ==
+ =/ in-rank (~(has in caveats.rank.lock) (clan:title ship))
+ :: =/ in-tags (~(has in (scry-pals-tags caveats.tags.lock)) ship)
+ =/ can |= [pit=? has=?] ^- ? ?: pit has !has
+ =/ as-ship (can locked.ship.lock in-ship)
+ =/ as-luk (can locked.ship.lock in-luk)
+ =/ as-rank (can locked.ship.lock in-rank)
+ ::=/ as-tags (can locked.ship.lock in-tags)
+ ?&(as-ship as-luk as-rank)
+
+++ scry-pals-tags
+|= tags=(set @t) ^- (set @p)
+ :: .^()
+ ~
+++ apply-change
+|= [=lock:gate =change:gate] ^- lock:gate
+ ?- -.change
+ %set-rank lock(rank +.change)
+ %set-luk lock(luk +.change)
+ %set-ship lock(ship +.change)
+ %set-tags lock(tags +.change)
+ %set-custom lock ::TODO
+ ==
+++ open-all
+|= =lock:gate ^- lock:gate
+ %= lock
+ rank rank.lock(locked .n)
+ luk luk.lock(locked .n)
+ ship ship.lock(locked .n)
+ tags tags.lock(locked .n)
+ ==
+++ lock-all
+|= =lock:gate ^- lock:gate
+%= lock
+rank rank.lock(locked .y)
+luk luk.lock(locked .y)
+ship ship.lock(locked .y)
+tags tags.lock(locked .y)
+==
+++ toggle-rank
+|= [r=rank:title setting=[caveats=(set rank:title) locked=? public=?]]
+ =/ new-caveats=(set rank:title) ?: locked.setting
+ (~(put in caveats.setting) r)
+ (~(del in caveats.setting) r)
+ setting(caveats new-caveats)
+++ toggle-ship
+|= [s=ship setting=[caveats=(set ship) locked=? public=?]]
+ =/ new-caveats=(set ship) ?: locked.setting
+ (~(put in caveats.setting) s)
+ (~(del in caveats.setting) s)
+ setting(caveats new-caveats)
+++ toggle-tag
+|= [t=@t setting=[caveats=(set @t) locked=? public=?]]
+ =/ new-caveats=(set @t) ?: locked.setting
+ (~(put in caveats.setting) t)
+ (~(del in caveats.setting) t)
+ setting(caveats new-caveats)
+--