summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorpolwex <polwex@sortug.com>2025-11-01 03:55:13 +0700
committerpolwex <polwex@sortug.com>2025-11-01 03:55:13 +0700
commit7305d67ff7f9e78b73326ef0e1f68a9613d34205 (patch)
tree5e075673b42811a76963c956502ac2c5fc2ea8f4
parentf019da2e338733dd88d3a8efe60f260d74b9a7ad (diff)
ws connection to relay fixed, tested
-rw-r--r--app/app/nostrill.hoon16
-rw-r--r--app/lib/json/nostr.hoon2
-rw-r--r--app/lib/nostr/client.hoon12
-rw-r--r--app/lib/websockets.hoon12
-rw-r--r--app/ted/ws.hoon34
-rw-r--r--arvo/iris.hoon58
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)