diff options
| author | polwex <polwex@sortug.com> | 2025-10-28 02:54:55 +0700 |
|---|---|---|
| committer | polwex <polwex@sortug.com> | 2025-10-28 02:54:55 +0700 |
| commit | c61bca793741959fdcd87f70854bc75cf263495f (patch) | |
| tree | 042f5b37f89ce82e552e70364bb708450f2cd685 /app/lib/nostr | |
| parent | 53ca6679beb5cc7c5d9016d0af4adc4e31ccd69d (diff) | |
refactor of nostrill backend to deal with websockets on Iris. almost complete
Diffstat (limited to 'app/lib/nostr')
| -rw-r--r-- | app/lib/nostr/client.hoon | 131 |
1 files changed, 131 insertions, 0 deletions
diff --git a/app/lib/nostr/client.hoon b/app/lib/nostr/client.hoon new file mode 100644 index 0000000..908b360 --- /dev/null +++ b/app/lib/nostr/client.hoon @@ -0,0 +1,131 @@ +/- sur=nostrill, nsur=nostr +/+ js=json-nostr, sr=sortug, nostr-keys, constants, server +/= web /web/router +|_ [=state:sur =bowl:gall] + ++$ card card:agent:gall +++ parse-msg + |= [eyre-id=@ta req=inbound-request:eyre] + ^- (unit relay-msg:nsur) + ?~ body.request.req ~ + =/ jstring q.u.body.request.req + (parse-body jstring) +++ parse-body |= jstring=@t + =/ ures (de:json:html jstring) + ?~ ures ~ + =/ ur (relay-msg:de:js u.ures) + ?~ ur ~& >>> relay-msg-parsing-failed=jstring ~ + ur +:: __ + +:: ++ get-req |= fs=(list filter:nsur) +:: ^- [bulk-req:shim:nsur _state] +:: =/ rls ~(tap by relays.state) +:: =| urls=(list @t) +:: =/ sub-id (gen-sub-id:nostr-keys eny.bowl) +:: =/ req=client-msg:nsur [%req sub-id fs] +:: |- ?~ rls [[urls req] state] +:: :: build http card +:: =/ [url=@t rs=relay-stats:nsur] i.rls +:: :: mutate relays stats +:: =/ es=event-stats:nsur [fs 0] +:: =/ nreqs (~(put by reqs.rs) sub-id es) +:: =/ nrs rs(reqs nreqs) +:: =. relays.state (~(put by relays.state) url nrs) +:: $(urls [url urls], rls t.rls) + +++ send-req |= fs=(list filter:nsur) + ^- (quip card _state) + =/ rls ~(tap by relays.state) + =/ sub-id (gen-sub-id:nostr-keys eny.bowl) + =/ req=client-msg:nsur [%req sub-id fs] + =/ rls ~(tap by relays.state) + ?~ rls !! + =/ url -.i.rls + :- :~ (send url req) == state + + +++ get-posts + ^- (quip card _state) + =/ kinds (silt ~[1]) + =/ last-week (sub now.bowl ~d7) + :: =/ since (to-unix-secs:jikan:sr last-week) + =/ =filter:nsur [~ ~ `kinds ~ `last-week ~ ~] + (send-req ~[filter]) + +++ 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]) + +++ get-profiles + |= pubkeys=(set @ux) + ^- (quip card _state) + =/ kinds (silt ~[0]) + =/ =filter:nsur [~ `pubkeys `kinds ~ ~ ~ ~] + (send-req ~[filter]) + +++ get-engagement + |= post-ids=(set @ux) + ^- (quip card _state) + =/ post-strings %- ~(run 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]) + +++ 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])])) + =/ =filter:nsur [~ ~ `kinds `tags ~ ~ ~] + (send-req ~[filter]) + +:: TODO URGENT +++ send + |= [relay-url=@t req=client-msg:nsur] ^- card:agent:gall + =/ req-body=json (req:en:js req) + =/ octs (json-to-octs:server req-body) + =/ wev=websocket-event:eyre [%message 1 `octs] + =/ pat /to-nostr-relay + [%pass (weld /ws pat) %arvo %k %fard dap.bowl %ws %noun !>([relay-url wev])] + +:: ++ send-http +:: |= req=http-req:shim:nsur +:: ^- 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)] +:: :: +:: :: HTTP +:: :: + +:: ++ get-profiles-http +:: |= pubkeys=(set @ux) +:: ^- (quip card _state) +:: =/ relays ~(key by relays.state) +:: :: TODO make a function to use most reliable +:: =/ relay (head ~(tap in relays)) +:: ~& http=relay +:: =/ sub-id (gen-sub-id:nostr-keys eny.bowl) +:: =/ kinds (silt ~[0]) +:: =/ total=filter:nsur [~ `pubkeys `kinds ~ ~ ~ ~] +:: =/ req=http-req:shim:nsur [relay http-delay:constants sub-id ~[total]] +:: =/ =card (send-http req) +:: :- :~(card) state + +-- |
