summaryrefslogtreecommitdiff
path: root/desk/lib/nostril
diff options
context:
space:
mode:
authorpolwex <polwex@sortug.com>2025-09-11 01:48:14 +0700
committerpolwex <polwex@sortug.com>2025-09-11 01:48:14 +0700
commitb1d68ac307ed87d63e83820cbdf843fff0fd9f7f (patch)
treed6a684a70a80509e68ff667b842aa4e4c091906f /desk/lib/nostril
init
Diffstat (limited to 'desk/lib/nostril')
-rw-r--r--desk/lib/nostril/mutations.hoon117
1 files changed, 117 insertions, 0 deletions
diff --git a/desk/lib/nostril/mutations.hoon b/desk/lib/nostril/mutations.hoon
new file mode 100644
index 0000000..f7de23b
--- /dev/null
+++ b/desk/lib/nostril/mutations.hoon
@@ -0,0 +1,117 @@
+/- sur=nostril, nsur=nostr,
+ post=trill-post, gate=trill-gate, feed=trill-feed
+
+/+ appjs=json-nostril,
+ njs=json-nostr,
+ postlib=nostril-post,
+ sr=sortug
+
+|_ [=state:sur =bowl:gall]
+++ debug-own-feed
+ =/ postlist (tap:orm:feed feed.state)
+ =/ lol
+ |- ?~ postlist ~
+ ~& >> poast=+.i.postlist
+ $(postlist t.postlist)
+ ~
+:: TODO not a mutation but fuck it
+++ get-poast |= [host=@p id=@] ^- (unit post:post)
+ =/ poast ?: .=(host our.bowl)
+ (get:orm:feed feed.state id)
+ ~
+ poast
+
+:: state
+++ add-to-feed |= p=post:post
+ =. feed.state (put:orm:feed feed.state id.p p)
+ state
+:: events
+++ process-events ^- (quip card _state)
+ :: =/ l events.state
+ :: =| cards=(list card:agent:gall)
+ :: |- ?~ l [cards state]
+ :: =/ n (event-parsing i.l)
+ :: $(cards -.n, state +.n, l t.l)
+ :: TODO
+ `state
+
+++ event-parsing
+ |= =event:nsur
+ ^- (quip card _state)
+ |^
+:: https://nostrdata.github.io/kinds/
+ ?: .=(kind.event 0) :: user metadata
+ parse-metadata
+ ?: .=(kind.event 1) :: apparently a poast
+ parse-poast
+ ?: .=(kind.event 3) :: follow list
+ parse-follow
+ :: ?: .=(kind.event 5) :: delete
+ ?: .=(kind.event 6) :: RT
+ parse-follow
+ ?: .=(kind.event 7) :: Reaction
+ parse-follow
+
+ `state
+
+ ++ parse-metadata
+ ^- (quip card _state)
+ =/ jstring content.event
+ =/ ujon (de:json:html jstring)
+ ?~ ujon !!
+ =/ umeta (user-meta:de:njs u.ujon)
+ ?~ umeta `state
+ =. profiles.state (~(put by profiles.state) pubkey.event u.umeta)
+ `state
+
+
+ ++ parse-poast
+ ^- (quip card _state)
+ =/ fid (~(get by following.state) pubkey.event)
+ ?~ fid `state :: don't save post if we don't follow the fucker
+
+ =/ cl (tokenize:postlib content.event)
+
+ =/ ts (from-unix:jikan:sr created-at.event)
+ :: TODO wtf
+ =/ cm=content-map:post (init-content-map:postlib cl ts)
+
+ =/ p=post:post :*
+ id=ts
+ host=`@p`pubkey.event
+ author=`@p`pubkey.event
+ thread=ts
+ parent=~
+ children=~
+ contents=cm
+ read=*lock:gate
+ write=*lock:gate
+ *engagement:post
+ 0v0
+ *signature:post
+ tags=~
+ ==
+ =/ nfid (put:orm:feed u.fid ts p)
+ =. following.state (~(put by following.state) pubkey.event nfid)
+ `state
+
+
+ ++ parse-follow
+ ^- (quip card _state)
+ =/ following (~(get by follow-graph.state) pubkey.event)
+ =/ follow-set ?~ following *(set follow:sur) u.following
+ |- ?~ tags.event `state
+ =/ t=tag:nsur i.tags.event
+ :: ?. .=('p' key.t) $(tags.event t.tags.event)
+ :: =/ pubkeys value.t
+ :: =/ pubkey (slaw:sr %ux pubkeys)
+ :: ?~ pubkey ~& "parsing hex error" $(tags.event t.tags.event)
+ :: =/ relay (snag 0 rest.t)
+ :: =/ rel ?: .=(relay '') ~ (some relay)
+ :: =/ nickname (snag 1 rest.t)
+ :: =/ meta=follow:sur [u.pubkey nickname rel]
+ :: =. follow-set (~(put in follow-set) meta)
+ :: =. follow-graph.state (~(put by follow-graph.state) pubkey.event follow-set)
+ $(tags.event t.tags.event)
+ --
+--