diff options
Diffstat (limited to 'desk/app')
-rw-r--r-- | desk/app/nostril.hoon | 204 | ||||
-rw-r--r-- | desk/app/nostrill.hoon | 254 |
2 files changed, 254 insertions, 204 deletions
diff --git a/desk/app/nostril.hoon b/desk/app/nostril.hoon deleted file mode 100644 index 51f9965..0000000 --- a/desk/app/nostril.hoon +++ /dev/null @@ -1,204 +0,0 @@ -/- 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 --- diff --git a/desk/app/nostrill.hoon b/desk/app/nostrill.hoon new file mode 100644 index 0000000..575fa3e --- /dev/null +++ b/desk/app/nostrill.hoon @@ -0,0 +1,254 @@ +/- sur=nostrill, nsur=nostr +/+ lib=nostrill, nlib=nostr, sr=sortug, + shim, dbug, muta=nostrill-mutations, jsonlib=json-nostrill, + 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]) + shimm ~(. shim [state bowl]) +++ on-init + ^- (quip card:agent:gall agent:gall) + =/ default (default-state:lib bowl) + :_ this(state default) + :~ 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) + |^ + ?+ mark `this + %noun debug + %json on-ui + %handle-http-request handle-shim + == + :: handling shim events + ++ handle-shim + =/ order !<(order:web vase) + :: ~& request.req.order + ?: .=(url.request.req.order '/nostr-shim') + =/ msg (parse-msg:shim order) + ?~ msg `this + ?> ?=(%ws -.u.msg) + :: =^ cards state (handle-shim-msg:mutat u.msg) + =^ cards state (handle-ws:mutat +.u.msg) + [cards 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 + %keys handle-cycle-keys + %fols (handle-fols +.u.upoke) + %prof (handle-prof +.u.upoke) + %post (handle-post +.u.upoke) + %rela (handle-rela +.u.upoke) + == + ++ handle-cycle-keys + =/ ks (gen-keys:nlib eny.bowl) + =. keys [ks keys] + :: =/ nkeys keys(i ks, t `(list keys:nsur)`keys) + :: :: =. keys nkeys + ~& new-keys=keys + `this + + ++ 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-rela |= poke=relay-poke:ui:sur + ?- -.poke + %send + =/ upoast (get-poast:mutat host.poke id.poke) + ?~ upoast `this + =/ event (post-to-event:lib i.keys eny.bowl u.upoast) + =/ req=bulk-req:shim:nsur [relays.poke %event event] + =/ cards :~((send:shimm req)) + [cards this] + == + + + :: + ++ debug + =/ noun !<(* vase) + ?+ noun `this + %wtf + =/ lol=(unit @) ~ + =/ l ~| "wtf" (need lol) + `this + %genkey + =/ keys (gen-keys:nlib eny.bowl) + ~& keys=keys + `this + %printkey + =/ key i.keys + ~& pub=(scow:sr %ux -.key) + ~& priv=(scow:sr %ux +.key) + `this + %feed + =/ lol debug-own-feed:mutat + `this + %nstats + ~& nostr-feed=~(wyt by nostr-feed) + ~& profiles=~(wyt in ~(key by profiles)) + =/ lol (print-relay-stats:lib relays) + + `this + %http + ~& pending=pending + `this + %rt :: relay test + =^ cards state get-posts:shimm + [cards this] + %rt0 + =/ ids + %+ roll (tap:norm:sur nostr-feed) |= [[@ ev=event:nsur] acc=[(set @ux) (set @ux)]] + ?. .=(kind.ev 1) acc + %= acc + - (~(put in -.acc) id.ev) + + (~(put in +.acc) pubkey.ev) + == + =^ cards state (populate-profiles:mutat -.ids) + :: (get-profiles:shimm +.ids) + :: (get-engagement:shimm -.ids) + [cards this] + %rt1 + =/ l ~(tap by pending) + =/ l (scag 1 l) + =| cards=(list card:agent:gall) + |- + ?~ l + ~& cards=(lent cards) [cards this] + =/ [sub-id=@t pf=filter:nsur done=filter:nsur] i.l + =/ diff (diff-filters:nlib pf done) + :: ~& > diff=diff + ?~ authors.pf $(l t.l) + =^ cs state (populate-profiles:mutat u.authors.pf) + + $(l t.l, cards (weld cards cs)) + %rt2 + + =/ poasts (tap:norm:sur nostr-feed) + =/ pcount (lent poasts) + =| invalid=(list @t) + |- ?~ poasts + ~& >>> invalid=invalid + `this + =/ p=event:nsur +.i.poasts + =/ valid (validate-pubkey:nlib pubkey.p) + ?. valid + =/ ids (crip (scow:sr %ux id.p)) + ~& ids + ~& content.p + $(invalid [ids invalid], poasts t.poasts) + $(poasts t.poasts) + %rt3 + =/ poasts (tap:norm:sur nostr-feed) + =| pubkeys=(set @ux) + =/ pks=(set @ux) + |- ?~ poasts pubkeys + =/ p=event:nsur +.i.poasts + =/ npks (~(put in pubkeys) pubkey.p) + $(poasts t.poasts, pubkeys npks) + :: + =^ cards state (populate-profiles:mutat pks) + [cards 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=(pole knot) =sign-arvo] + ^- (quip card:agent:gall agent:gall) + ?+ wire `this + [%http sub-id=@t *] + ?> ?=([%khan %arow *] sign-arvo) + ?: ?=(%| -.p.sign-arvo) `this + =/ jstring !<(@ +>.p.sign-arvo) + =/ msg (parse-body:shimm jstring) + ?~ msg ~& `@t`jstring `this + ?> ?=(%http -.u.msg) + =^ cards state (handle-http:mutat sub-id.wire +.u.msg) + `this + == +:: +++ on-fail + |~ [term tang] + ^- (quip card:agent:gall agent:gall) + `this +-- |