diff options
Diffstat (limited to 'desk/app')
-rw-r--r-- | desk/app/nostril.hoon | 204 |
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 +-- |