summaryrefslogtreecommitdiff
path: root/desk/app
diff options
context:
space:
mode:
Diffstat (limited to 'desk/app')
-rw-r--r--desk/app/nostril.hoon204
1 files changed, 204 insertions, 0 deletions
diff --git a/desk/app/nostril.hoon b/desk/app/nostril.hoon
new file mode 100644
index 0000000..51f9965
--- /dev/null
+++ b/desk/app/nostril.hoon
@@ -0,0 +1,204 @@
+/- sur=nostril, nsur=nostr
+/+ lib=nostril, nlib=nostr, sr=sortug,
+ shim, dbug, muta=nostril-mutations, jsonlib=json-nostril,
+ trill=trill-post
+/= web /web/router
+|%
++$ versioned-state $%(state-0:sur)
+--
+=| versioned-state
+=* state -
+%- agent:dbug
+^- agent:gall
+|_ =bowl:gall
++* this .
+ rout ~(. router:web [state bowl])
+ cards ~(. cards:lib bowl)
+ mutat ~(. muta [state bowl])
+++ on-init
+ ^- (quip card:agent:gall agent:gall)
+ :_ this(state default:sur)
+ :~ shim-binding:cards
+ ==
+::
+++ on-save
+ ^- vase
+ !>(state)
+::
+++ on-load
+ |~ old-state=vase
+ ^- (quip card:agent:gall agent:gall)
+ =/ old-state !<(versioned-state old-state)
+ ?- -.old-state
+ %0 `this(state old-state)
+ ==
+::
+++ on-poke
+ |~ [=mark =vase]
+ ^- (quip card:agent:gall agent:gall)
+ ~& >> on-poke-nostril=mark
+ |^
+ ?+ mark `this
+ %noun debug
+ %json on-ui
+ %handle-http-request serve
+ ==
+ :: handling shim events
+ ++ serve
+ =/ order !<(order:web vase)
+ :: ~& request.req.order
+ ?: .=(url.request.req.order '/nostr-shim')
+ =/ msg (handle:shim order)
+ ?~ msg `this
+ ~& "msg processed"
+ =/ relay (~(get by relays) url.u.msg)
+ =/ nevents=(list event:nsur) ?~ relay [event.u.msg ~] [event.u.msg u.relay]
+ =/ nevents2 (scag 100 nevents)
+ =. relays (~(put by relays) url.u.msg nevents2)
+ =/ response (ebail:rout id.order)
+ [response this]
+
+ ::
+ :_ this (rout:rout order)
+
+ ::
+ ++ on-ui
+ =/ jon=json !<(json vase)
+ ~& > on-ui-jon=jon
+ =/ upoke=(unit poke:ui:sur) (ui:de:jsonlib jon)
+ ?~ upoke ~& bad-ui-poke=jon `this
+ ?- -.u.upoke
+ %fols (handle-fols +.u.upoke)
+ %prof (handle-prof +.u.upoke)
+ %keys (handle-keys +.u.upoke)
+ %post (handle-post +.u.upoke)
+ %rela (handle-rela +.u.upoke)
+ ==
+ ++ handle-post |= poke=post-poke:ui:sur
+ ?- -.poke
+ %add
+ =/ sp (build-sp:trill our.bowl our.bowl content.poke)
+ =/ p (build-post:trill now.bowl pubkey.poke sp)
+ =. state (add-to-feed:mutat p)
+ `this
+ %rt `this
+ %del `this
+ ==
+ ++ handle-fols |= poke=fols-poke:ui:sur
+ `this
+ ++ handle-prof |= poke=prof-poke:ui:sur
+ ?- -.poke
+ %add
+ =. profiles (~(put by profiles) +<.poke +>.poke)
+ `this
+ %del
+ =. profiles (~(del by profiles) +.poke)
+ `this
+ ==
+ ++ handle-keys |= poke=keys-poke:ui:sur
+ ?- -.poke
+ %add
+ =/ ks (gen-keys:nlib eny.bowl)
+ =. keys (~(put by keys) -.ks +.ks)
+ ~& new-keys=keys
+ `this
+ %del
+ =. profiles (~(del by profiles) +.poke)
+ `this
+ ==
+ ++ handle-rela |= poke=relay-poke:ui:sur
+ ?- -.poke
+ %send
+ =/ upoast (get-poast:mutat host.poke id.poke)
+ ?~ upoast `this
+ :_ this :_ ~
+ =/ keylist ~(tap by keys)
+ =/ key (snag 0 keylist)
+ =/ event (post-to-event:lib key eny.bowl u.upoast)
+ =/ =req:shim:nsur [%post event relays.poke]
+ (send:shim dap.bowl req)
+ ==
+
+ ::
+ ++ debug
+ =/ noun !<(* vase)
+ ?+ -.noun `this
+ %wtf
+ =/ lol=(unit @) ~
+ =/ l ~| "wtf" (need lol)
+ `this
+ %genkey
+ =/ keys (gen-keys:nlib eny.bowl)
+ ~& keys=keys
+ `this
+ %printkey
+ =/ keylist ~(tap by keys)
+ =/ key (snag 0 keylist)
+ ~& pub=(scow:sr %ux -.key)
+ ~& priv=(scow:sr %ux +.key)
+ `this
+ %feed
+ =/ lol debug-own-feed:mutat
+ `this
+ %rt :: relay test
+ :_ this :_ ~
+ :: khan
+ =/ =req:shim:nsur :- %get
+ %+ turn ~(tap by relays)
+ |= [url=@t *]
+ =/ kinds ~[0 1 6 7]
+ =/ =filter:nsur [~ ~ kinds ~ ~ ~ `5]
+ [url ~[filter]]
+ (send:shim dap.bowl req)
+ ::
+ %rt2
+ =/ rls ~(tap by relays)
+ =/ lol
+ |- ?~ rls ~
+ =/ rl i.rls
+ ~& > relay=[-.rl (lent +.rl)]
+ $(rls t.rls)
+ `this
+ ==
+ ::
+ --
+::
+++ on-watch
+|= =(pole knot)
+ ?> .=(our.bowl src.bowl)
+ ?+ pole !!
+ [%ui ~]
+ :_ this
+ =/ jon (state:en:jsonlib state)
+ [%give %fact ~ [%json !>(jon)]]^~
+ ==
+::
+++ on-leave
+ |~ =(pole knot)
+ ^- (quip card:agent:gall agent:gall)
+ `this
+::
+++ on-peek
+ |~ =(pole knot)
+ ^- (unit (unit cage))
+ ~& > on-peek=pole
+ ?+ pole ~
+ [%j %feed rest=*] ~
+ [%j %post rest=*] ~
+ ==
+::
+++ on-agent
+ |~ [wire sign:agent:gall]
+ ^- (quip card:agent:gall agent:gall)
+ `this
+::
+++ on-arvo
+ |~ [wire =sign-arvo]
+ ^- (quip card:agent:gall agent:gall)
+ `this
+::
+++ on-fail
+ |~ [term tang]
+ ^- (quip card:agent:gall agent:gall)
+ `this
+--