summaryrefslogtreecommitdiff
path: root/app/lib/nostr/client.hoon
diff options
context:
space:
mode:
Diffstat (limited to 'app/lib/nostr/client.hoon')
-rw-r--r--app/lib/nostr/client.hoon91
1 files changed, 48 insertions, 43 deletions
diff --git a/app/lib/nostr/client.hoon b/app/lib/nostr/client.hoon
index 9c732bb..259852e 100644
--- a/app/lib/nostr/client.hoon
+++ b/app/lib/nostr/client.hoon
@@ -1,7 +1,7 @@
/- sur=nostrill, nsur=nostr
/+ js=json-nostr, sr=sortug, seq, nostr-keys, constants, server, ws=websockets
/= web /web/router
-|_ [=state:sur =bowl:gall]
+|_ [=state:sur =bowl:gall wid=@ud relay=relay-stats:nsur]
+$ card card:agent:gall
++ parse-msg
@@ -10,6 +10,7 @@
?~ body.request.req ~
=/ jstring q.u.body.request.req
(parse-body jstring)
+
++ parse-body |= jstring=@t
=/ ures (de:json:html jstring)
?~ ures ~
@@ -18,119 +19,123 @@
ur
:: __
-++ get-relay
- =/ rls ~(tap by relays.state) ^- [@ud relay-stats:nsur]
- ?~ rls !!
- :: TODO not how this should work
- =/ wid -.i.rls
- =/ rs=relay-stats:nsur +.i.rls
- [wid rs]
-
++ close-sub |= [sub-id=@t wid=@ud relay=relay-stats:nsur]
- ^- (quip card _state)
+ ^- (quip card _relay)
=. reqs.relay (~(del by reqs.relay) sub-id)
- =. relays.state (~(put by relays.state) wid relay)
=/ req=client-msg:nsur [%close sub-id]
- =/ rl get-relay
- =/ relay +.rl
- =/ url url.relay
- :- :~ (send url req) == state
+ :- :~ (send url.relay req) == relay
-++ send-req |= [fs=(list filter:nsur) ongoing=? chunked=(list filter:nsur)]
- ^- (quip card _state)
+++ send-req |= [fs=(list filter:nsur) ongoing=(unit ?) chunked=(list filter:nsur)]
+ ^- (quip card _relay)
=/ sub-id (gen-sub-id:nostr-keys eny.bowl)
=/ req=client-msg:nsur [%req sub-id fs]
=/ es=event-stats:nsur [fs 0 ongoing chunked]
- =/ rl get-relay
- =/ wid -.rl
- =/ relay +.rl
=/ url url.relay
=. reqs.relay (~(put by reqs.relay) sub-id es)
- =. relays.state (~(put by relays.state) wid relay)
~& > sending-ws-req=sub-id
- :- :~ (send url req) == state
+ :- :~ (send url req) == relay
++ get-posts
- ^- (quip card _state)
=/ kinds (silt ~[1])
:: =/ last-week (sub now.bowl ~d7)
- =/ last-week (sub now.bowl ~m2)
+ =/ last-week (sub now.bowl ~m1)
:: =/ since (to-unix-secs:jikan:sr last-week)
=/ =filter:nsur [~ ~ `kinds ~ `last-week ~ ~]
- (send-req ~[filter] .y ~)
-
+ (send-req ~[filter] `.n ~)
+::
++ get-user-feed
|= pubkey=@ux
- ^- (quip card _state)
=/ kinds (silt ~[1])
:: =/ since (to-unix-secs:jikan:sr last-week)
=/ pubkeys (silt ~[pubkey])
=/ =filter:nsur [~ `pubkeys `kinds ~ ~ ~ ~]
- (send-req ~[filter] .y ~)
+ (send-req ~[filter] `.n ~)
+
+++ get-thread |= id=@ux
+ =/ kinds (silt ~[1])
+ =/ ids (silt :~(id))
+ =/ f1=filter:nsur [`ids ~ `kinds ~ ~ ~ ~]
+ =/ ids=(list @t) :~((crip (scow:parsing:sr %ux id)))
+ =/ tag ['e' ids]
+ =/ tags=(map @t (list @t)) (malt :~(tag))
+ =/ f2=filter:nsur [~ ~ `kinds `tags ~ ~ ~]
+ (send-req ~[f1 f2] `.n ~)
+
+++ get-post |= id=@ux
+ =/ kinds (silt ~[1])
+ =/ ids (silt :~(id))
+ =/ =filter:nsur [`ids ~ `kinds ~ ~ ~ ~]
+ (send-req ~[filter] ~ ~)
+++ get-replies |= id=@ux
+ =/ kinds (silt ~[1])
+ =/ ids=(list @t) :~((crip (scow:parsing:sr %ux id)))
+ =/ tag ['e' ids]
+ =/ tags=(map @t (list @t)) (malt :~(tag))
+ =/ =filter:nsur [~ ~ `kinds `tags ~ ~ ~]
+ (send-req ~[filter] `.n ~)
+::
++ get-profile |= pubkey=@ux
=/ kinds (silt ~[0])
:: =/ since (to-unix-secs:jikan:sr last-week)
=/ pubkeys (silt ~[pubkey])
=/ =filter:nsur [~ `pubkeys `kinds ~ ~ ~ ~]
- (send-req ~[filter] .n ~)
+ (send-req ~[filter] ~ ~)
++ get-profiles
- ^- (quip card _state)
+ ~& >>> "getting profiles"
=/ npoasts (tap:norm:sur nostr-feed.state)
=| missing-profs=(set @ux)
=/ pubkeys=(set @ux)
|- ?~ npoasts missing-profs
=/ poast=event:nsur +.i.npoasts
=/ have (~(has by profiles.state) [%nostr pubkey.poast])
- =. missing-profs ?: have missing-profs (~(put in missing-profs) pubkey.poast)
+ =? missing-profs !have (~(put in missing-profs) pubkey.poast)
$(npoasts t.npoasts)
=/ kinds (silt ~[0])
=/ chunk-size 300
+ ~& >> fetching-profiles=~(wyt in pubkeys)
?. (gth ~(wyt in pubkeys) chunk-size)
=/ =filter:nsur [~ `pubkeys `kinds ~ ~ ~ ~]
- (send-req ~[filter] .n ~)
+ (send-req ~[filter] ~ ~)
::
=/ chunks=(list (list @ux)) (chunk-by-size:seq ~(tap in pubkeys) chunk-size)
- ?~ chunks ~& >>> "error chunking pubkeys" `state
+ ?~ chunks ~& >>> "error chunking pubkeys" `relay
=/ queue=(list filter:nsur)
%+ turn t.chunks |= l=(list @ux) ^- filter:nsur
=/ pubkeys=(set @ux) (silt l)
[~ `pubkeys `kinds ~ ~ ~ ~]
=/ pubkeys=(set @ux) (silt i.chunks)
=/ =filter:nsur [~ `pubkeys `kinds ~ ~ ~ ~]
- (send-req ~[filter] .n queue)
+ (send-req ~[filter] ~ queue)
++ get-engagement
|= post-ids=(set @ux)
- ^- (quip card _state)
- =/ post-strings %- ~(run in post-ids) |= id=@ux (crip (scow:sr %ux id))
+ =/ post-strings %+ turn ~(tap in post-ids) |= id=@ux (crip (scow:sr %ux id))
=/ =filter:nsur
=/ kinds (silt ~[6 7])
=/ tags (malt :~([%e post-strings]))
[~ ~ `kinds `tags ~ ~ ~]
- (send-req ~[filter] .y ~)
+ (send-req ~[filter] `.n ~)
++ get-quotes
|= post-id=@ux
- ^- (quip card _state)
=/ post-string (crip (scow:sr %ux post-id))
=/ kinds (silt ~[1])
- =/ tags (malt :~([%q (silt ~[post-string])]))
+ =/ tags (malt :~([%q ~[post-string]]))
=/ =filter:nsur [~ ~ `kinds `tags ~ ~ ~]
- (send-req ~[filter] .y ~)
+ (send-req ~[filter] `.n ~)
::
++ test-connection
- |= relay-url=@t
=/ kinds (silt ~[1])
=/ since (sub now.bowl ~m10)
=/ =filter:nsur [~ ~ `kinds ~ `since ~ ~]
=/ sub-id (gen-sub-id:nostr-keys eny.bowl)
=/ req=client-msg:nsur [%req sub-id ~[filter]]
- :- :~ (send relay-url req) == state
+ :- :~ (send url.relay req) == relay
++ send
|= [relay-url=@t req=client-msg:nsur] ^- card
@@ -138,10 +143,10 @@
=/ req-body=json (req:en:js req)
=/ octs (json-to-octs:server req-body)
=/ wmsg=websocket-message:eyre [1 `octs]
- ~& >> sup=sup.bowl
=/ conn (check-connected:ws relay-url bowl)
~& >>> send-client-conn=conn
?~ conn :: if no ws connection we start a thread which will connect first, then send the message
+ ~& >>> "no connection!!"
!!
:: =/ =task:iris [%websocket-connect dap.bowl relay-url]
:: [%pass /ws-req/nostrill %arvo %i task]