diff options
Diffstat (limited to 'desk/lib/nostrill')
-rw-r--r-- | desk/lib/nostrill/comms.hoon | 4 | ||||
-rw-r--r-- | desk/lib/nostrill/follows.hoon | 7 | ||||
-rw-r--r-- | desk/lib/nostrill/mutations.hoon | 250 |
3 files changed, 5 insertions, 256 deletions
diff --git a/desk/lib/nostrill/comms.hoon b/desk/lib/nostrill/comms.hoon index 23e442a..5ae07a0 100644 --- a/desk/lib/nostrill/comms.hoon +++ b/desk/lib/nostrill/comms.hoon @@ -83,8 +83,10 @@ =/ c2 [%give %kick paths ~] :~(c1 c2) :: for the follow flow - =/ cage [%noun !>(res)] + =/ cage [%noun !>([%init res])] =/ c1 [%give %fact paths cage] :~(c1) + + -- diff --git a/desk/lib/nostrill/follows.hoon b/desk/lib/nostrill/follows.hoon index 1cf8a66..9cda041 100644 --- a/desk/lib/nostrill/follows.hoon +++ b/desk/lib/nostrill/follows.hoon @@ -31,10 +31,7 @@ =/ c2 (urbit-leave +.user) :~(c1 c2) -++ handle-agent-res |= raw=* - ~& "handling-agent-res" - =/ =res:comms ;; res:comms raw - ~& res=-.res +++ handle-follow-res |= =res:comms ?- -.res %ng :: bruh `state @@ -47,7 +44,7 @@ ++ handle-refollow |= sip=@p :_ state :_ ~ :: (urbit-watch sip) - [%pass /refollow %agent [sip dap.bowl] %watch /followre] + [%pass /follow %agent [sip dap.bowl] %watch /follow] ++ handle-follow-ok |= [=user:sur =fc:feed profile=(unit user-meta:nsur)] ^- (quip card:agent:gall _state) diff --git a/desk/lib/nostrill/mutations.hoon b/desk/lib/nostrill/mutations.hoon deleted file mode 100644 index 8fca2b2..0000000 --- a/desk/lib/nostrill/mutations.hoon +++ /dev/null @@ -1,250 +0,0 @@ -/- sur=nostrill, nsur=nostr, - post=trill-post, gate=trill-gate, feed=trill-feed - -/+ appjs=json-nostrill, - lib=nostrill, - njs=json-nostr, - postlib=trill-post, - shim, - sr=sortug - -|_ [=state:sur =bowl:gall] -+$ card card:agent:gall -++ debug-own-feed - =/ postlist (tap:orm:feed feed.state) - =/ lol - |- ?~ postlist ~ - ~& >> poast=+.i.postlist - $(postlist t.postlist) - ~ -:: TODO not a mutation but fuck it -++ get-poast |= [host=@p id=@] ^- (unit post:post) - =/ poast ?: .=(host our.bowl) - (get:orm:feed feed.state id) - ~ - poast - -:: state -++ add-to-feed |= p=post:post - =. feed.state (put:orm:feed feed.state id.p p) - state -:: events -++ process-events ^- (quip card _state) - :: =/ l events.state - :: =| cards=(list card:agent:gall) - :: |- ?~ l [cards state] - :: =/ n (event-parsing i.l) - :: $(cards -.n, state +.n, l t.l) - :: TODO - `state - -:: ++ parse-events -:: |= evs=(list event:nsur) -:: ^- (quip card _state) -:: =| cards=(list card) -:: =^ cards state -:: |- ?~ evs [cards state] -:: =^ cards state (handle-event i.evs) -:: $(evs t.evs) -:: [cards state] - -++ populate-profiles - |= pubkeys=(set @ux) - ^- (quip card _state) - =/ shimm ~(. shim [state bowl]) - =^ cards state (get-profiles-http:shimm pubkeys) - [cards state] - - - - - -++ handle-http - |= [sub-id=@t msgs=(list relay-msg:nsur)] - ~& handling-http=[sub-id (lent msgs)] - =| cards=(list card) - |- ?~ msgs [cards state] - =^ cards state (handle-msg i.msgs) - $(msgs t.msgs) - - -++ handle-msg |= msg=relay-msg:nsur - ^- (quip card _state) - ?+ -.msg `state - %event - (handle-event '' sub-id.msg event.msg) - %eose - `state - %closed - `state - %auth ~& >> auth=+.msg :: TODO handle auth challenges? - `state - %notice ~& >> notice=+.msg :: TODO pass to UI? - `state - %error ~& >>> relay-error=+.msg - `state - == - -++ handle-ws |= [relay=@t msg=relay-msg:nsur] - =/ rs (~(get by relays.state) relay) - ?~ rs :: TODO do we really - `state - =^ cards state - ~& handle-ws=-.msg - ?- -.msg - %ok (handle-ok relay +.msg) - %event - =. relays.state (update-relay-stats relay sub-id.msg) - (handle-event relay sub-id.msg event.msg) - - %eose - :: TODO do unsub for replaceable/addressable events - =/ 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) - =/ 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 - %auth ~& >> auth=+.msg :: TODO handle auth challenges? - `state - %notice ~& >> notice=+.msg :: TODO pass to UI? - `state - %error ~& >>> relay-error=+.msg - =. relays.state (~(del by relays.state) relay) - `state - == - [cards state] - - - :: =^ cards state (handle-event:mutat url.u.msg sub-id.u.msg event.u.msg) - :: :: TODO not just stash events - :: =/ relay (~(get by relays) url.u.msg) - :: =/ nevents=(list event:nsur) ?~ relay [event.u.msg ~] [event.u.msg u.relay] - :: =/ nevents2 (scag 100 nevents) - - :: =. relays (~(put by relays) url.u.msg nevents2) - :: :: TODO respond better - :: =/ response (ebail:rout id.order) - :: =/ ncards (weld cards response) - - :: [ncards this] - :: `state - -++ update-relay-stats - |= [relay=@t sub-id=@t] ^+ relays.state - - =/ cur (~(get by relays.state) relay) - =/ curr ?~ cur *relay-stats:nsur u.cur - =? connected.curr ?=(%~ connected.curr) (some now.bowl) - =/ creq (~(get by reqs.curr) sub-id) - ?~ creq relays.state :: bail - =/ nreq u.creq(received +(received.u.creq)) - =. reqs.curr (~(put by reqs.curr) sub-id nreq) - (~(put by relays.state) relay curr) - -++ handle-ok |= [relay=@t event-id=@ux accepted=? msg=@t] - ^- (quip card _state) - :: TODO pass to UI - `state - - -++ handle-event - |= [relay=@t sub-id=@t =event:nsur] - ^- (quip card _state) - |^ - ~& parsing-nostr-event=kind.event -:: https://nostrdata.github.io/kinds/ - ?: .=(kind.event 666) :: one_off subs eose cf. 999 - parse-shim-oneose - ?: .=(kind.event 0) :: user metadata - parse-metadata - ?: .=(kind.event 1) :: apparently a poast - parse-poast - ?: .=(kind.event 3) :: follow list - parse-follow - :: ?: .=(kind.event 5) :: delete - ?: .=(kind.event 6) :: RT - parse-follow - ?: .=(kind.event 7) :: Reaction - parse-follow - - `state - - ++ parse-metadata - ^- (quip card _state) - =/ jstring content.event - =/ ujon (de:json:html jstring) - ?~ ujon ~& failed-parse-metadata=ujon `state - =/ umeta (user-meta:de:njs u.ujon) - ?~ umeta ~& >> failed-dejs-metadata=ujon `state - =. profiles.state (~(put by profiles.state) [%nostr pubkey.event] u.umeta) - `state - - - ++ parse-poast - ^- (quip card _state) - =. nostr-feed.state (put:norm:sur nostr-feed.state created-at.event event) - :: =/ uprof (~(get by profiles.state) pubkey.event) - :: ?~ uprof - :: =/ shimm ~(. shim [state bowl]) - :: =^ cards state (get-profiles:shimm (silt ~[pubkey.event])) - :: [cards state] - - - :: =/ fid (~(get by following.state) pubkey.event) - :: ?~ fid `state :: don't save post if we don't follow the fucker - - :: =/ cl (tokenize:postlib content.event) - - :: =/ ts (from-unix:jikan:sr created-at.event) - :: :: TODO wtf - :: =/ cm=content-map:post (init-content-map:postlib cl ts) - - :: =/ p=post:post :* - :: id=ts - :: host=`@p`pubkey.event - :: author=`@p`pubkey.event - :: thread=ts - :: parent=~ - :: children=~ - :: contents=cm - :: read=*lock:gate - :: write=*lock:gate - :: *engagement:post - :: 0v0 - :: *signature:post - :: tags=~ - :: == - :: =/ nfid (put:orm:feed u.fid ts p) - :: =. following.state (~(put by following.state) pubkey.event nfid) - `state - ++ parse-follow - ^- (quip card _state) - =/ following (~(get by follow-graph.state) [%nostr pubkey.event]) - =/ follow-set ?~ following *(set follow:sur) u.following - |- ?~ tags.event `state - =/ t=tag:nsur i.tags.event - :: ?. .=('p' key.t) $(tags.event t.tags.event) - :: =/ pubkeys value.t - :: =/ pubkey (slaw:sr %ux pubkeys) - :: ?~ pubkey ~& "parsing hex error" $(tags.event t.tags.event) - :: =/ relay (snag 0 rest.t) - :: =/ rel ?: .=(relay '') ~ (some relay) - :: =/ nickname (snag 1 rest.t) - :: =/ meta=follow:sur [u.pubkey nickname rel] - :: =. follow-set (~(put in follow-set) meta) - :: =. follow-graph.state (~(put by follow-graph.state) pubkey.event follow-set) - $(tags.event t.tags.event) - ++ parse-shim-oneose - ^- (quip card _state) - =/ rs (~(get by relays.state) relay) - ?~ rs `state - =. reqs.u.rs (~(del by reqs.u.rs) sub-id) - =. relays.state (~(put by relays.state) relay u.rs) - `state - -- --- |