diff options
Diffstat (limited to 'desk/lib/shim.hoon')
-rw-r--r-- | desk/lib/shim.hoon | 112 |
1 files changed, 102 insertions, 10 deletions
diff --git a/desk/lib/shim.hoon b/desk/lib/shim.hoon index be95b70..4afdf2b 100644 --- a/desk/lib/shim.hoon +++ b/desk/lib/shim.hoon @@ -1,23 +1,115 @@ -/- sur=nostr -/+ js=json-nostr +/- sur=nostrill, nsur=nostr +/+ js=json-nostr, sr=sortug, nlib=nostr, constants /= web /web/router -|% +|_ [=state:sur =bowl:gall] -++ handle ++$ card card:agent:gall +++ parse-msg |= [eyre-id=@ta req=inbound-request:eyre] - ^- (unit [url=@ event=event:sur]) + ^- (unit res:shim:nsur) ?~ body.request.req ~ =/ jstring q.u.body.request.req + (parse-body jstring) +++ parse-body |= jstring=@t =/ ures (de:json:html jstring) ?~ ures ~ - (msg:de:js u.ures) + (shim-res:de:js u.ures) +:: __ +++ get-req |= fs=(list filter:nsur) + ^- [bulk-req:shim:nsur _state] + =/ rls ~(tap by relays.state) + =| urls=(list @t) + =/ sub-id (gen-sub-id:nlib eny.bowl) + =/ =req:shim: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) + +++ 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 ~ ~] + =^ req=bulk-req:shim:nsur state (get-req ~[filter]) + :- :~((send req)) state + +++ get-profiles + |= pubkeys=(set @ux) + ^- (quip card _state) + =/ kinds (silt ~[0]) + =/ =filter:nsur [~ `pubkeys `kinds ~ ~ ~ ~] + =^ req=bulk-req:shim:nsur state (get-req ~[filter]) + :- :~((send req)) state + +++ 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 ~ ~ ~] + =^ req state (get-req ~[filter]) + :- :~((send req)) state + +++ 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 ~ ~ ~] + =^ req state (get-req ~[filter]) + :- :~((send req)) state + + ++ send - |= [desk=@tas =req:shim:sur] ^- card:agent:gall - =/ req-body (req:en:js req) + |= req=bulk-req:shim:nsur ^- card:agent:gall + =/ req-body (bulk-req:en:js req) + :: ~& shim-req-json=(en:json:html req-body) =/ headers :~ [key='content-type' value='application/json'] == - =/ =request:http [%'POST' url:shim:sur headers `(json-body:web req-body)] + =/ =request:http [%'POST' url:shim:nsur headers `(json-body:web req-body)] =/ pat /shim - [%pass (weld /ws pat) %arvo %k %fard desk %fetch %noun !>(request)] + [%pass (weld /ws pat) %arvo %k %fard dap.bowl %fetch %noun !>(request)] + +++ 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) + =/ headers :~ + [key='content-type' value='application/json'] + == + =/ =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:nlib eny.bowl) + =/ kinds (silt ~[0]) + =/ total=filter:nsur [~ `pubkeys `kinds ~ ~ ~ ~] + =/ chunk (silt (scag 10 ~(tap in pubkeys))) + =/ =filter:nsur [~ `chunk `kinds ~ ~ ~ ~] + =. pending.state (~(put by pending.state) sub-id [total *filter:nsur]) + =/ req=http-req:shim:nsur [relay http-delay:constants sub-id ~[total]] + =/ =card (send-http req) + :- :~(card) state + -- |