summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorpolwex <polwex@sortug.com>2025-10-28 02:54:55 +0700
committerpolwex <polwex@sortug.com>2025-10-28 02:54:55 +0700
commitc61bca793741959fdcd87f70854bc75cf263495f (patch)
tree042f5b37f89ce82e552e70364bb708450f2cd685
parent53ca6679beb5cc7c5d9016d0af4adc4e31ccd69d (diff)
refactor of nostrill backend to deal with websockets on Iris. almost complete
-rw-r--r--app/app/nostrill.hoon101
-rw-r--r--app/lib/json/nostr.hoon73
-rw-r--r--app/lib/mutations/nostr.hoon28
-rw-r--r--app/lib/mutations/trill.hoon1
-rw-r--r--app/lib/nostr/client.hoon131
-rw-r--r--app/lib/nostrill.hoon6
-rw-r--r--app/lib/nostrill/follows.hoon6
-rw-r--r--app/lib/scri.hoon1
-rw-r--r--app/lib/shim.hoon130
-rw-r--r--app/sur/nostr.hoon10
-rw-r--r--app/ted/ws.hoon43
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'))