diff options
| author | polwex <polwex@sortug.com> | 2025-11-01 03:55:13 +0700 |
|---|---|---|
| committer | polwex <polwex@sortug.com> | 2025-11-01 03:55:13 +0700 |
| commit | 7305d67ff7f9e78b73326ef0e1f68a9613d34205 (patch) | |
| tree | 5e075673b42811a76963c956502ac2c5fc2ea8f4 | |
| parent | f019da2e338733dd88d3a8efe60f260d74b9a7ad (diff) | |
ws connection to relay fixed, tested
| -rw-r--r-- | app/app/nostrill.hoon | 16 | ||||
| -rw-r--r-- | app/lib/json/nostr.hoon | 2 | ||||
| -rw-r--r-- | app/lib/nostr/client.hoon | 12 | ||||
| -rw-r--r-- | app/lib/websockets.hoon | 12 | ||||
| -rw-r--r-- | app/ted/ws.hoon | 34 | ||||
| -rw-r--r-- | arvo/iris.hoon | 58 |
6 files changed, 84 insertions, 50 deletions
diff --git a/app/app/nostrill.hoon b/app/app/nostrill.hoon index 9b3b974..15a20a3 100644 --- a/app/app/nostrill.hoon +++ b/app/app/nostrill.hoon @@ -60,21 +60,30 @@ handle-comms %json on-ui %handle-http-request handle-shim + %websocket-thread handle-ws-thread %websocket-client-message handle-relay-ws %websocket-handshake handle-ws-handshake %websocket-server-message handle-ws-msg == +$ ws-msg [@ud websocket-message:eyre] + ++ handle-ws-thread + ~& >> "proxying ws thread" + =/ msg !<(ws-msg vase) + :_ this + ~& "giving payload" + :~ (give-ws-payload-client:ws msg) + == ++ handle-relay-ws ^- (quip card:agent:gall agent:gall) =/ msg !<(ws-msg vase) - ~& handle-relay-ws=msg + ~& handle-relay-ws=-.msg =/ 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 + ~& >> urelay-msg + =/ relay-url (get-url:ws -.msg bowl) =^ cards state (handle-ws:mutan relay-url u.urelay-msg) [cards this] ++ handle-ws-handshake @@ -232,7 +241,8 @@ :~ [%pass /iris-test %arvo %i task] == %wsted - =/ relay-url 'ws://localhost:8888' + :: =/ relay-url 'ws://localhost:8888' + =/ relay-url 'wss://nos.lol' =^ cs state (test-connection:nclient relay-url) [cs this] %irisf diff --git a/app/lib/json/nostr.hoon b/app/lib/json/nostr.hoon index 887e0d8..cd7e95f 100644 --- a/app/lib/json/nostr.hoon +++ b/app/lib/json/nostr.hoon @@ -121,7 +121,7 @@ =/ second i.t.p.jon ?. ?=(%s -.head) ~ :: TODO make sure they're always caps - ~& dejson=[p.head second] + ~& dejson=[p.head subid=second] ?+ p.head ~ %'EVENT' =/ d (so second) ?~ d ~ diff --git a/app/lib/nostr/client.hoon b/app/lib/nostr/client.hoon index 41c3080..2438a47 100644 --- a/app/lib/nostr/client.hoon +++ b/app/lib/nostr/client.hoon @@ -48,9 +48,9 @@ ++ get-posts ^- (quip card _state) =/ kinds (silt ~[1]) - =/ last-week (sub now.bowl ~d7) + =/ since (sub now.bowl ~m1) :: =/ since (to-unix-secs:jikan:sr last-week) - =/ =filter:nsur [~ ~ `kinds ~ `last-week ~ ~] + =/ =filter:nsur [~ ~ `kinds ~ `since ~ ~] (send-req ~[filter]) ++ get-user-feed @@ -92,7 +92,7 @@ ++ test-connection |= relay-url=@t =/ kinds (silt ~[1]) - =/ since (sub now.bowl ~h1) + =/ since (sub now.bowl ~m1) =/ =filter:nsur [~ ~ `kinds ~ `since ~ ~] =/ sub-id (gen-sub-id:nostr-keys eny.bowl) =/ req=client-msg:nsur [%req sub-id ~[filter]] @@ -103,14 +103,14 @@ ~& >>> send=relay-url =/ req-body=json (req:en:js req) =/ octs (json-to-octs:server req-body) - =/ wev=websocket-event:eyre [%message 1 `octs] + =/ wmsg=websocket-message:eyre [1 `octs] =/ 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 =/ pat /to-nostr-relay - [%pass (weld /ws pat) %arvo %k %fard dap.bowl %ws %noun !>([relay-url wev])] + [%pass (weld /ws pat) %arvo %k %fard dap.bowl %ws %noun !>([relay-url wmsg])] :: - (give-ws-payload-client:ws id.u.conn [1 `octs]) + (give-ws-payload-client:ws id.u.conn wmsg) :: ++ send-http diff --git a/app/lib/websockets.hoon b/app/lib/websockets.hoon index 98ea25b..8e6d45c 100644 --- a/app/lib/websockets.hoon +++ b/app/lib/websockets.hoon @@ -6,6 +6,13 @@ [%message !>(msg)] =/ wsid (scot %ud wid) [%give %fact ~[/websocket-client/[wsid]] cage] + ++ close-ws-client + |= wid=@ + ^- card:agent:gall + =/ =cage + [%disconnect !>(~)] + =/ wsid (scot %ud wid) + [%give %fact ~[/websocket-client/[wsid]] cage] ++ give-ws-payload-server |= [wid=@ event=websocket-event:eyre] @@ -26,6 +33,11 @@ (give-ws-payload-server wid response) == + ++ get-url + |= [wid=@ud =bowl:gall] ^- @t + =/ scry-path=path /(scot %p our.bowl)/ws/(scot %da now.bowl)/id/(scot %ud wid) + =/ conn .^(websocket-connection:iris %ix scry-path) + url.conn ++ check-connected |= [url=@t =bowl:gall] ^- (unit websocket-connection:iris) =/ scry-path=path /(scot %p our.bowl)/ws/(scot %da now.bowl)/url/[url] diff --git a/app/ted/ws.hoon b/app/ted/ws.hoon index ebb7926..9f9c298 100644 --- a/app/ted/ws.hoon +++ b/app/ted/ws.hoon @@ -6,9 +6,9 @@ =/ m (strand ,vase) ^- form:m :: =/ [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=@t wmsg=websocket-message:eyre] !<([@t websocket-message:eyre] arg) ~& > url=url -~& > req=wev +~& > req=wmsg ;< =bowl:spider bind:m get-bowl:strandio =/ desk q.byk.bowl =/ =task:iris [%websocket-connect desk url] @@ -19,25 +19,29 @@ :: confirm connection was established ?. ?=([%iris %websocket-response id=@ud websocket-event:eyre] q.res) (strand-fail:strand %bad-sign ~) -~& > ted-ws-res=+>.q.res +~& > ted-ws-res=+>+<.q.res ?. ?=(%accept +>+<.q.res) (pure:m !>([%ng ''])) :: (strand-fail:strand %bad-sign ~) -:: :: ~& ws-handshake=[id.q.res url.q.res] -:: TODO this might fail if the subscription is not set yet +~& "ws connection accepted, sending ws msg" ~& >>> "sleeping" ;< ~ bind:m (sleep:strandio ~s3) ~& >>> "slept" - -=/ subwire=path /websocket-server/(scot %ud id.q.res) -=/ =cage [%websocket-response !>(+>.q.res)] -=/ gf=gift:agent:gall [%fact :~(subwire) cage] -=/ =card:agent:gall [%give gf] -~& >> ws-ted-ok-sending-msg=id.q.res -;< ~ bind:m (send-raw-card:strandio card) +=/ card2=card:agent:gall + [%pass /ws/proxy %agent [our.bowl desk] %poke %websocket-thread !>([id.q.res wmsg])] +;< ~ bind:m (send-raw-card:strandio card2) ;< res2=(pair wire sign-arvo) bind:m take-sign-arvo:strandio -?. ?=([%iris %websocket-response id=@ud %message wm=websocket-message:eyre] q.res2) - (strand-fail:strand %bad-sign ~) -=/ wm=websocket-message:eyre +>+>.q.res2 + + +:: =/ subwire=path /websocket-server/(scot %ud id.q.res) +:: =/ =cage [%websocket-response !>(+>.q.res)] +:: =/ gf=gift:agent:gall [%fact :~(subwire) cage] +:: =/ =card:agent:gall [%give gf] +:: ~& >> ws-ted-ok-sending-msg=id.q.res +:: ;< ~ bind:m (send-raw-card:strandio card) +:: ;< res2=(pair wire sign-arvo) bind:m take-sign-arvo:strandio +:: ?. ?=([%iris %websocket-response id=@ud %message wm=websocket-message:eyre] q.res2) +:: (strand-fail:strand %bad-sign ~) +:: =/ wm=websocket-message:eyre +>+>.q.res2 (pure:m !>([%ok id.q.res])) diff --git a/arvo/iris.hoon b/arvo/iris.hoon index 7b618b2..c55c0ae 100644 --- a/arvo/iris.hoon +++ b/arvo/iris.hoon @@ -325,7 +325,7 @@ :: incoming websockets event to be sent BY VERE NOT USERSPACE ++ ws-event |= [wid=@ud event=websocket-event:eyre] - ~& iris-ws-event=[wid event duct] + ~& iris-ws-event=[wid -.event duct] =/ wc (~(get by sockets.state) wid) ?~ wc `state =/ wc u.wc @@ -478,32 +478,39 @@ [%iris-ws-watch wids=@t ~] =/ wid (slav %ud wids.wire) ~& iris-take=-.hin ?+ -.hin ~ - %gall - ?> ?=(%unto +<.hin) - ~& hin=p.hin - ?+ -.p.hin ~ - ?(%poke-ack %watch-ack) - ?~ p.p.hin ~ - ~ - %kick + %gall + ?> ?=(%unto +<.hin) + ~& hin=p.hin + ?+ -.p.hin ~ + ?(%poke-ack %watch-ack) + ?~ p.p.hin ~ + ~ + %kick + =/ event-args [[eny duct now rof] state.ax] + =/ client (per-client-event event-args) + =^ movs state.ax (cleanup-ws:client wid) + movs + %fact + =* cag cage.p.hin + ?+ p.cag ~&(bad-fact+p.cag !!) + %message =/ msg !<(websocket-message:eyre q.cag) + :~ [outbound-duct.state.ax %give %websocket-response wid %message msg] + == + %disconnect =/ event-args [[eny duct now rof] state.ax] =/ client (per-client-event event-args) =^ movs state.ax (cleanup-ws:client wid) - movs - %fact - =* cag cage.p.hin - ?+ p.cag ~&(bad-fact+p.cag !!) - %message =/ msg !<(websocket-message:eyre q.cag) - :~ [outbound-duct.state.ax %give %websocket-response wid %message msg] - == - :: =/ =tang !<(tang q.cag) - :: :: %- (slog 'khan-fact' tang) - :: :: [hen %give %arow %| p.cag tang]~ - :: ~ - :: :: - :: %thread-done - :: :: [hen %give %arow %& %noun q.cag]~ - :: ~ + %+ welp movs + :~ [outbound-duct.state.ax %give %websocket-response wid %disconnect ~] + == + :: =/ =tang !<(tang q.cag) + :: :: %- (slog 'khan-fact' tang) + :: :: [hen %give %arow %| p.cag tang]~ + :: ~ + :: :: + :: %thread-done + :: :: [hen %give %arow %& %noun q.cag]~ + :: ~ == == == @@ -538,7 +545,8 @@ ?+ s.bem ~ ~ ``noun+!>(sockets.state.ax) [%id @ ~] - =/ wid (slav %ud i.s.bem) + + =/ wid (slav %ud i.t.s.bem) =/ socket (~(got by sockets.state.ax) wid) ?. .=(app.socket caller) ~ ``noun+!>(socket) |
