/- 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 --