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 | |
| parent | 53ca6679beb5cc7c5d9016d0af4adc4e31ccd69d (diff) | |
refactor of nostrill backend to deal with websockets on Iris. almost complete
| -rw-r--r-- | app/app/nostrill.hoon | 101 | ||||
| -rw-r--r-- | app/lib/json/nostr.hoon | 73 | ||||
| -rw-r--r-- | app/lib/mutations/nostr.hoon | 28 | ||||
| -rw-r--r-- | app/lib/mutations/trill.hoon | 1 | ||||
| -rw-r--r-- | app/lib/nostr/client.hoon | 131 | ||||
| -rw-r--r-- | app/lib/nostrill.hoon | 6 | ||||
| -rw-r--r-- | app/lib/nostrill/follows.hoon | 6 | ||||
| -rw-r--r-- | app/lib/scri.hoon | 1 | ||||
| -rw-r--r-- | app/lib/shim.hoon | 130 | ||||
| -rw-r--r-- | app/sur/nostr.hoon | 10 | ||||
| -rw-r--r-- | app/ted/ws.hoon | 43 |
11 files changed, 299 insertions, 231 deletions
diff --git a/app/app/nostrill.hoon b/app/app/nostrill.hoon index 271f774..c8ed796 100644 --- a/app/app/nostrill.hoon +++ b/app/app/nostrill.hoon @@ -2,7 +2,8 @@ /+ lib=nostrill, nostr-keys, sr=sortug, scri, ws=websockets, nreq=nostr-req, - shim, dbug, + nostr-client, + dbug, evlib=nostr-events, mutations-nostr, mutations-trill, @@ -22,10 +23,10 @@ cards ~(. cards:lib bowl) mutan ~(. mutations-nostr [state bowl]) mutat ~(. mutations-trill [state bowl]) - shimm ~(. shim [state bowl]) scry ~(. scri [state bowl]) coms ~(. commlib [state bowl]) fols ~(. followlib [state bowl]) + nclient ~(. nostr-client [state bowl]) ++ on-init ^- (quip card:agent:gall agent:gall) =/ default (default-state:lib bowl) @@ -54,12 +55,26 @@ |^ ~& nostrill-on-poke=mark ?+ mark `this - %noun handle-comms + %noun + ~& vase=q.vase + handle-comms %json on-ui %handle-http-request handle-shim + %websocket-client-message handle-relay-ws %websocket-handshake handle-ws-handshake %websocket-server-message handle-ws-msg == + +$ ws-msg [@ud websocket-message:eyre] + ++ handle-relay-ws + =/ msg !<(ws-msg vase) + =/ m=websocket-message:eyre +.msg + ?~ message.m `this + =/ =octs u.message.m + =/ urelay-msg (parse-body:nclient q.octs) + ?~ urelay-msg `this + =/ relay-url '' :: TODO IMPORTANT!! where to keep this + =^ cards state (handle-ws:mutan relay-url u.urelay-msg) + [cards this] ++ handle-ws-handshake =/ order !<([@ inbound-request:eyre] vase) ~& >> nostrill-ws-handshake=order @@ -69,7 +84,6 @@ =/ ok=? ?+ u.pat .n [%nostrill-ui ~] authenticated.order [%nostrill ~] .y :: TODO which nostr clients do we filter - [%nostr-shim ~] .y :: TODO deprecate? == :_ this ?: ok (accept-handshake:ws -.order) (refuse-handshake:ws -.order) @@ -113,15 +127,16 @@ %res (handle-res:coms +.pok) == [cs this] + :: DEPRECATED ++ handle-shim =/ order !<(order:web vase) ~& request.req.order ?: .=(url.request.req.order '/nostr-shim') - =/ msg (parse-msg:shim order) + =/ msg (parse-msg:nclient order) ?~ msg `this - ?> ?=(%ws -.u.msg) :: =^ cards state (handle-shim-msg:mutat u.msg) - =^ cards state (handle-ws:mutan +.u.msg) + =/ relay-url '' + =^ cards state (handle-ws:mutan relay-url u.msg) [cards this] :: @@ -186,22 +201,46 @@ %del =. relays (~(del by relays) +.poke) `this :: - %sync =^ cs state get-posts:shimm + %sync =^ cs state get-posts:nclient [cs this] :: %send =/ upoast (get-poast:scry host.poke id.poke) ?~ upoast `this =/ event (post-to-event:evlib i.keys eny.bowl u.upoast) - =/ req=bulk-req:shim:nsur [relays.poke %event event] - =/ cards :~((send:shimm req)) - [cards this] + :: TODO URGENT + :: =/ req=bulk-req:shim:nsur [relays.poke %event event] + :: =/ cards :~((send:nclient req)) + :: [cards this] + `this == :: ++ debug |= noun=* ?+ noun `this + %iris + :_ this + =/ =task:iris [%websocket-connect dap.bowl 'ws://localhost:8888'] + :~ [%pass /iris-test %arvo %i task] + == + %irisf + :_ this + =/ inc-subs ~(tap by sup.bowl) + =/ ws-paths %+ roll inc-subs |= [i=[=duct =ship =path] acc=(list path)] + ~& bitt=i + ?. ?=([%websocket-client *] path.i) acc + [path.i acc] + =/ jon [%s 'lolazo'] + =/ octs (as-octs:mimes:html (en:json:html jon)) + =/ msg=websocket-message:eyre [1 `octs] + :~ [%give %fact ws-paths %message !>(msg)] + == + [%iris @] + :_ this + =/ =task:iris [%websocket-event +.noun %message 1 `(as-octs:mimes:html 'heyhey')] + :~ [%pass /iris-test2 %arvo %i task] + == %wtf =/ lol=(unit @) ~ =/ l ~| "wtf" (need lol) @@ -232,7 +271,7 @@ %http `this %rt :: relay test - =^ cards state get-posts:shimm + =^ cards state get-posts:nclient [cards this] %rt0 =/ ids @@ -304,6 +343,7 @@ ~& on-watch=`path`pole ?+ pole !! [%http-response *] `this + [%websocket-client wids=@t ~] `this [%websocket-server *] `this [%follow ~] :_ this (give-feed:coms pole) [%beg %feed ~] @@ -364,16 +404,41 @@ ++ on-arvo |~ [wire=(pole knot) =sign-arvo] ^- (quip card:agent:gall agent:gall) + ~& >> on-arvo=[`path`wire -.sign-arvo +<.sign-arvo] ?+ wire `this - [%http sub-id=@t *] + [%ws %to-nostr-relay *] ?> ?=([%khan %arow *] sign-arvo) ?: ?=(%| -.p.sign-arvo) `this - =/ jstring !<(@ +>.p.sign-arvo) - =/ msg (parse-body:shimm jstring) - ?~ msg ~& `@t`jstring `this - ?> ?=(%http -.u.msg) - =^ cards state (handle-http:mutan sub-id.wire +.u.msg) + =/ =cage +.p.sign-arvo + =/ v=vase q.cage + =/ gift !<(gift:iris v) + ?. ?=(%websocket-response -.gift) `this + ~& m5=+.gift + =/ wid=@ +<.gift + =/ ev=websocket-event:eyre +>.gift + ?. ?=(%message -.ev) `this + ?~ message.message.ev `this + =/ =octs u.message.message.ev + =/ jstring=@t q.octs + ~& >> jstring=jstring + + :: =/ msg (parse-body:nclient jstring) + :: ~& "m5" + :: ?~ msg ~& badparse=`@t`jstring `this + :: ~& >> ws-relay-msg=msg + :: ?> ?=(%http -.u.msg) + :: =^ cards state (handle-http:mutan sub-id.wire +.u.msg) `this + :: [%ws sub-id=@t *] + :: ?> ?=([%khan %arow *] sign-arvo) + :: ?: ?=(%| -.p.sign-arvo) `this + :: =/ jstring !<(@ +>.p.sign-arvo) + :: =/ msg (parse-body:nclient jstring) + :: ?~ msg ~& `@t`jstring `this + :: ~& >> ws-ui-msg=msg + :: :: ?> ?=(%http -.u.msg) + :: :: =^ cards state (handle-http:mutan sub-id.wire +.u.msg) + :: `this == :: ++ on-fail diff --git a/app/lib/json/nostr.hoon b/app/lib/json/nostr.hoon index 0000234..887e0d8 100644 --- a/app/lib/json/nostr.hoon +++ b/app/lib/json/nostr.hoon @@ -4,23 +4,7 @@ ++ en =, enjs:format |% - :: shim comms - ++ bulk-req |= [relays=(list @t) r=client-msg:sur] ^- json - %+ frond %ws - %: pairs - relays+a+(turn relays cord:en:common) - req+(req r) - ~ - == - ++ http-req |= [relay=@t delay=@ud sub-id=@t fs=(list filter:sur)] - %+ frond %http - %: pairs - relay+s+relay - delay+(numb delay) - ['subscription_id' %s sub-id] - filters+a+(turn fs filter) - ~ - == + :: relay comms ++ req |= req=client-msg:sur ^- json =/ en-ev event :- %a :- s+(crip (cuss (trip -.req))) @@ -117,31 +101,58 @@ %closed ~[[%s sub-id.msg]] %notice ~[[%s msg.msg]] %auth ~[[%s challenge.msg]] - %error ~ == -- ++ de =, dejs-soft:format |% - :: shim - ++ shim-res - %- of :~ - http+(ar relay-msg) - ws+msg - == + :: relay ++ msg %- ot :~ relay+so msg+relay-msg == ++ relay-msg - %- of :~ - event+event-sub - ok+relay-ok - eose+so - closed+closed - notice+so - error+so + |= jon=json ^- (unit relay-msg:sur) + ?. ?=(%a -.jon) ~ + ?~ p.jon ~ + =/ head i.p.jon + ?~ t.p.jon ~ + =/ second i.t.p.jon + ?. ?=(%s -.head) ~ + :: TODO make sure they're always caps + ~& dejson=[p.head second] + ?+ p.head ~ + %'EVENT' + =/ d (so second) ?~ d ~ + ?~ t.t.p.jon ~ + =/ third i.t.t.p.jon + =/ t (event third) ?~ t ~ + `[%event u.d u.t] + %'OK' + =/ d (hex:de:common second) ?~ d ~ + ?~ t.t.p.jon ~ + =/ third i.t.t.p.jon + =/ t (bo third) ?~ t ~ + ?~ t.t.t.p.jon ~ + =/ fourth i.t.t.t.p.jon + =/ f (so fourth) ?~ f ~ + `[%ok u.d u.t u.f] + %'CLOSED' + =/ d (so second) ?~ d ~ + ?~ t.t.p.jon ~ + =/ third i.t.t.p.jon + =/ t (so third) ?~ t ~ + `[%closed u.d u.t] + %'EOSE' + =/ d (so second) ?~ d ~ + `[%eose u.d] + %'NOTICE' + =/ d (so second) ?~ d ~ + `[%notice u.d] + %'AUTH' + =/ d (so second) ?~ d ~ + `[%auth u.d] == ++ client-msg |= jon=json ^- (unit client-msg:sur) diff --git a/app/lib/mutations/nostr.hoon b/app/lib/mutations/nostr.hoon index 6e1ab3e..154bed9 100644 --- a/app/lib/mutations/nostr.hoon +++ b/app/lib/mutations/nostr.hoon @@ -7,7 +7,7 @@ server, njs=json-nostr, postlib=trill-post, - shim, + nostr-client, sr=sortug |_ [=state:sur =bowl:gall] @@ -50,23 +50,10 @@ ++ populate-profiles |= pubkeys=(set @ux) ^- (quip card _state) - =/ shimm ~(. shim [state bowl]) - =^ cards state (get-profiles-http:shimm pubkeys) + =/ nclient ~(. nostr-client [state bowl]) + =^ cards state (get-profiles:nclient 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 @@ -80,8 +67,6 @@ `state %notice ~& >> notice=+.msg :: TODO pass to UI? `state - %error ~& >>> relay-error=+.msg - `state == ++ handle-ws |= [relay=@t msg=relay-msg:nsur] @@ -112,9 +97,6 @@ `state %notice ~& >> notice=+.msg :: TODO pass to UI? `state - %error ~& >>> relay-error=+.msg - =. relays.state (~(del by relays.state) relay) - `state == [cards state] @@ -158,7 +140,7 @@ ~& parsing-nostr-event=kind.event :: https://nostrdata.github.io/kinds/ ?: .=(kind.event 666) :: one_off subs eose cf. 999 - parse-shim-oneose + parse-relay-oneose ?: .=(kind.event 0) :: user metadata parse-metadata ?: .=(kind.event 1) :: apparently a poast @@ -238,7 +220,7 @@ :: =. 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 + ++ parse-relay-oneose ^- (quip card _state) =/ rs (~(get by relays.state) relay) ?~ rs `state diff --git a/app/lib/mutations/trill.hoon b/app/lib/mutations/trill.hoon index ea6dadf..40cce1e 100644 --- a/app/lib/mutations/trill.hoon +++ b/app/lib/mutations/trill.hoon @@ -6,7 +6,6 @@ trill=trill-post, njs=json-nostr, postlib=trill-post, - shim, sr=sortug |_ [=state:sur =bowl:gall] 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 + +-- diff --git a/app/lib/nostrill.hoon b/app/lib/nostrill.hoon index 933dc7f..b9d8f88 100644 --- a/app/lib/nostrill.hoon +++ b/app/lib/nostrill.hoon @@ -39,16 +39,12 @@ ++ cards |_ =bowl:gall - ++ shim-binding ^- card:agent:gall - [%pass /binding %arvo %e %connect [~ /nostr-shim] dap.bowl] - ++ relay-binding ^- card:agent:gall [%pass /binding %arvo %e %connect [~ /nostrill] dap.bowl] ++ ui-binding ^- card:agent:gall [%pass /binding %arvo %e %connect [~ /nostrill-ui] dap.bowl] ++ bindings - :~ shim-binding - relay-binding + :~ relay-binding ui-binding == ++ update-ui |= =fact:ui:sur ^- card:agent:gall diff --git a/app/lib/nostrill/follows.hoon b/app/lib/nostrill/follows.hoon index e4d04a6..34c1d19 100644 --- a/app/lib/nostrill/follows.hoon +++ b/app/lib/nostrill/follows.hoon @@ -1,19 +1,19 @@ /- sur=nostrill, nsur=nostr, comms=nostrill-comms, feed=trill-feed -/+ lib=nostrill, js=json-nostr, shim, sr=sortug, constants, gatelib=trill-gate, feedlib=trill-feed, jsonlib=json-nostrill +/+ lib=nostrill, js=json-nostr, nostr-client, sr=sortug, constants, gatelib=trill-gate, feedlib=trill-feed, jsonlib=json-nostrill |_ [=state:sur =bowl:gall] ++ handle-add |= =user:sur ^- (quip card:agent:gall _state) ?- -.user %urbit =/ c (urbit-watch +.user) :- :~(c) state - %nostr =/ shimm ~(. shim [state bowl]) + %nostr =/ nclient ~(. nostr-client [state bowl]) :: TODO now or on receival? =. following.state (~(put by following.state) user *feed:feed) =/ graph (~(get by follow-graph.state) [%urbit our.bowl]) =/ follows ?~ graph (silt ~[user]) (~(put in u.graph) user) =. follow-graph.state (~(put by follow-graph.state) [%urbit our.bowl] follows) - =^ cards state (get-user-feed:shimm +.user) + =^ cards state (get-user-feed:nclient +.user) [cards state] == ++ handle-del |= =user:sur diff --git a/app/lib/scri.hoon b/app/lib/scri.hoon index e76d79a..1ebaa54 100644 --- a/app/lib/scri.hoon +++ b/app/lib/scri.hoon @@ -6,7 +6,6 @@ njs=json-nostr, feedlib=trill-feed, postlib=trill-post, - shim, constants, sr=sortug diff --git a/app/lib/shim.hoon b/app/lib/shim.hoon deleted file mode 100644 index 77d5eed..0000000 --- a/app/lib/shim.hoon +++ /dev/null @@ -1,130 +0,0 @@ -/- sur=nostrill, nsur=nostr -/+ js=json-nostr, sr=sortug, nostr-keys, constants -/= web /web/router -|_ [=state:sur =bowl:gall] - -+$ card card:agent:gall -++ parse-msg - |= [eyre-id=@ta req=inbound-request:eyre] - ^- (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 ~ - =/ 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] - =/ 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) - -++ 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-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 ~ ~ ~ ~] - =^ 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 - |= 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 - [%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) - =/ 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 - --- diff --git a/app/sur/nostr.hoon b/app/sur/nostr.hoon index 0d99dc7..f449899 100644 --- a/app/sur/nostr.hoon +++ b/app/sur/nostr.hoon @@ -58,8 +58,6 @@ $% [%event sub-id=@t =event] [%closed sub-id=@t msg=@t] [%notice msg=@t] [%auth challenge=@t] - :: from our shim - [%error msg=@t] == +$ client-msg $% [%req relay-req] @@ -67,14 +65,6 @@ $% [%req relay-req] [%auth =event] [%close sub-id=@t] == -++ shim - |% - ++ url 'http://localhost:8888/shim' - +$ bulk-req [relays=(list @t) req=client-msg] - +$ http-req [relay=@t delay=@ud sub-id=@t filters=(list filter)] - +$ res $%([%http p=(list relay-msg)] [%ws relay=@t msg=relay-msg]) - -- - :: https://github.com/sesseor/nostr-relays-list/blob/main/relays.txt ++ public-relays ^- (list @t) :~ diff --git a/app/ted/ws.hoon b/app/ted/ws.hoon index b8dd583..d721832 100644 --- a/app/ted/ws.hoon +++ b/app/ted/ws.hoon @@ -1,20 +1,45 @@ -/- spider +/- spider, nsur=nostr /+ strandio =, strand=strand:spider ^- thread:spider |= arg=vase =/ m (strand ,vase) ^- form:m -=/ url=@t (need !<((unit @t) arg)) +:: =/ [url=@t req=client-msg:nsur] (need !<((unit [@t client-msg:nsur]) arg)) +=/ [url=@t wev=websocket-event:eyre] !<([@t websocket-event:eyre] arg) +~& > url=url +~& > req=wev +=/ url 'ws://localhost:8888' +:: +:: +:: + + +:: ;< ~ bind:m (send-request:strandio [%'GET' 'http://localhost:8888/test' ~ ~]) +:: ;< =bowl:spider bind:m get-bowl:strandio =/ desk q.byk.bowl =/ =task:iris [%websocket-connect desk url] -=/ =card:agent:gall [%pass /ws-req %arvo %i task] +=/ =card:agent:gall [%pass /ws-req/nostrill %arvo %i task] ;< ~ bind:m (send-raw-card:strandio card) ;< res=(pair wire sign-arvo) bind:m take-sign-arvo:strandio -?. ?=([%iris %websocket-handshake id=@ud url=@t] q.res) - (strand-fail:strand %bad-sign ~) -~& ws-handshake=[id.q.res url.q.res] -:: ?: ?=([%iris %websocket-response id=@ud e=websocket-event:eyre] q.res) -=/ data=@t 'done' -(pure:m !>(data)) +~& > res=res +:: :: confirm connection was established +:: ?. ?=([%iris %websocket-response id=@ud websocket-event:eyre] q.res) +:: (strand-fail:strand %bad-sign ~) +:: ?. ?=(%accept +>+<.q.res) +:: (strand-fail:strand %bad-sign ~) + +:: :: ~& ws-handshake=[id.q.res url.q.res] +:: :: ?. ?=([%iris %websocket-handshake id=@ud url=@t] q.res) +:: :: (strand-fail:strand %bad-sign ~) +:: :: ~& ws-handshake=[id.q.res url.q.res] +:: =/ wid id.+.q.res +:: =/ =task:iris [%websocket-event wid wev] +:: =/ =card:agent:gall [%pass /ws-req-2 %arvo %i task] +:: ;< ~ bind:m (send-raw-card:strandio card) +:: ;< res=(pair wire sign-arvo) bind:m take-sign-arvo:strandio +:: ?. ?=(%iris -.q.res) +:: (strand-fail:strand %bad-sign ~) +:: =/ g=gift:iris +.q.res +(pure:m !>('done')) |
