summaryrefslogtreecommitdiff
path: root/app/lib
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 /app/lib
parent53ca6679beb5cc7c5d9016d0af4adc4e31ccd69d (diff)
refactor of nostrill backend to deal with websockets on Iris. almost complete
Diffstat (limited to 'app/lib')
-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
8 files changed, 182 insertions, 194 deletions
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
-
---