diff options
Diffstat (limited to 'backupdesk/lib/json')
-rw-r--r-- | backupdesk/lib/json/common.hoon | 29 | ||||
-rw-r--r-- | backupdesk/lib/json/nostr.hoon | 176 | ||||
-rw-r--r-- | backupdesk/lib/json/nostrill.hoon | 123 | ||||
-rw-r--r-- | backupdesk/lib/json/trill.hoon | 191 |
4 files changed, 519 insertions, 0 deletions
diff --git a/backupdesk/lib/json/common.hoon b/backupdesk/lib/json/common.hoon new file mode 100644 index 0000000..64d4b03 --- /dev/null +++ b/backupdesk/lib/json/common.hoon @@ -0,0 +1,29 @@ +/+ sr=sortug +|% +++ en +=, enjs:format + |% + ++ cord |= s=@t ^- json s+s + ++ hex |= h=@ux ^- json + [%s (crip (scow:sr %ux h))] + ++ b64 |= h=@uv ^- json + [%s (crip (scow:sr %uv h))] + ++ ud |= n=@ ^- json + [%s (crip (scow:sr %ud n))] + ++ patp |= p=@p ^- json + [%s (scot %p p)] + -- +++ de +=, dejs-soft:format + |% + ++ hex |= jon=json ^- (unit @ux) + ?. ?=(%s -.jon) ~ + =/ atom=(unit @) (slaw:sr %ux p.jon) + ?~ atom ~ + atom + ++ se |= aur=@tas |= jon=json + ?. ?=(%s -.jon) ~ + (slaw aur p.jon) + -- + +-- diff --git a/backupdesk/lib/json/nostr.hoon b/backupdesk/lib/json/nostr.hoon new file mode 100644 index 0000000..defbe77 --- /dev/null +++ b/backupdesk/lib/json/nostr.hoon @@ -0,0 +1,176 @@ +/- sur=nostr +/+ common=json-common, sr=sortug +|% +++ en +=, enjs:format + |% + :: shim comms + ++ bulk-req |= [relays=(list @t) r=req:shim:sur] ^- json + %: pairs + relays+a+(turn relays cord:en:common) + req+(req r) + ~ + == + ++ req |= =req:shim:sur ^- json + :- %a :- s+(crip (cuss (trip -.req))) + ?- -.req + %req (enreq +.req) + %event :_ ~ (event +.req) + %auth :_ ~ (event +.req) + %close :_ ~ [%s +.req] + == +++ enreq + |= [sub-id=@t fs=(list filter:sur)] + ^- (list json) + :- [%s sub-id] + %+ turn fs filter + + :: + ++ raw-event |= raw-event:sur + :: WTF nostr doesn't want the prefix on the pubkey + =/ pubkeyt (scow:sr %ux pubkey) + ?~ pubkeyt !! + =/ pubkeyj [%s (crip t.pubkeyt)] + :- %a :~ + [%n '0'] + pubkeyj + (numb created-at) + (numb kind) + a+(turn tags tag) + s+content + == + ++ event + |= e=event:sur ^- json + =/ pubkeyt (scow:sr %ux pubkey.e) + ?~ pubkeyt !! + =/ pubkeyj [%s (crip t.pubkeyt)] + %: pairs + id+(hex:en:common id.e) + :: pubkey+(hex:en:common pubkey.e) + pubkey+pubkeyj + sig+(hex:en:common sig.e) + ['created_at' (numb created-at.e)] + kind+(numb kind.e) + content+s+content.e + tags+a+(turn tags.e tag) + ~ + == + ++ tag + |= t=tag:sur ^- json [%a (turn t cord:en:common)] + :: :- s+key.t + :: :- s+value.t + :: (turn rest.t |=(tt=@t s+tt)) + :: + ++ filter + |= f=filter:sur ^- json + =| l=(list [key=@t jon=json]) + =. l ?~ ids.f l :_ l ['ids' %a (turn ~(tap in u.ids.f) hex:en:common)] + =. l ?~ authors.f l :_ l ['authors' %a (turn ~(tap in u.authors.f) hex:en:common)] + =. l ?~ kinds.f l :_ l ['kinds' %a (turn ~(tap in u.kinds.f) numb)] + =. l ?~ tags.f l %+ weld l (tags u.tags.f) + + =. l ?~ since.f l :_ l ['since' (sect u.since.f)] + =. l ?~ until.f l :_ l ['until' (sect u.until.f)] + =. l ?~ limit.f l :_ l ['limit' (numb u.limit.f)] + :: + %- pairs l + + + ++ tags + |= tm=(map @t (set @t)) ^- (list [@t json]) :: entries to the filter obeject + %+ turn ~(tap by tm) |= [key=@t values=(set @t)] + =/ nkey (cat 3 '#' key) + [nkey %a (turn ~(tap in values) cord:en:common)] + + ++ user-meta + |= meta=user-meta:sur + %: pairs + name+s+name.meta + picture+s+picture.meta + about+s+about.meta + other+o+other.meta + ~ + == + -- +++ de +=, dejs-soft:format + |% + :: shim + ++ msg + %- ot :~ + relay+so + msg+relay-msg + == + ++ relay-msg + %- of :~ + event+event-sub + ok+relay-ok + eose+so + closed+closed + notice+so + error+so + == + + + :: | { event: { subscription_id: string; event: NostrEvent } } + :: | { ok: { event_id: string; accepted: boolean; message: string } } + :: | { eose: string } + :: | { closed: { subscription_id: string; message: string } } + :: | { notice: string } + :: // this is ours + :: | { error: string }; + ++ event-sub + %- ot :~ + ['subscription_id' so] + event+event + == + ++ relay-ok + %- ot :~ + ['event_id' hex:de:common] + accepted+bo + message+so + == + ++ closed + %- ot :~ + ['subscription_id' so] + message+so + == + ++ event + %- ot :~ + id+hex:de:common + pubkey+hex:de:common + ['created_at' ni] + kind+ni + tags+(ar (ar so)) + content+so + sig+hex:de:common + == + ++ user-meta |= jon=json + ^- (unit user-meta:sur) + ?. ?=(%o -.jon) ~ + =| um=user-meta:sur + =/ fields ~(tap by p.jon) + |- ?~ fields (some um) + =/ k -.i.fields + =/ jn=json +.i.fields + ?+ k + =/ ot (~(put by other.um) k jn) + =. um um(other ot) $(fields t.fields) + %'name' + =/ crd (so jn) + ?~ crd $(fields t.fields) $(fields t.fields, um um(name u.crd)) + %'display_name' + =/ crd (so jn) + ?~ crd $(fields t.fields) $(fields t.fields, um um(name u.crd)) + %'displayName' + =/ crd (so jn) + ?~ crd $(fields t.fields) $(fields t.fields, um um(name u.crd)) + %'about' + =/ crd (so jn) + ?~ crd $(fields t.fields) $(fields t.fields, um um(picture u.crd)) + %'picture' + =/ crd (so jn) + ?~ crd $(fields t.fields) $(fields t.fields, um um(picture u.crd)) + == + -- +-- diff --git a/backupdesk/lib/json/nostrill.hoon b/backupdesk/lib/json/nostrill.hoon new file mode 100644 index 0000000..43f7708 --- /dev/null +++ b/backupdesk/lib/json/nostrill.hoon @@ -0,0 +1,123 @@ +/- sur=nostrill, nsur=nostr, feed=trill-feed +/+ sr=sortug, common=json-common, trill=json-trill, nostr=json-nostr +|% +++ en +=, enjs:format +|% + :: UI comms + ++ state |= state-0:sur ^- json + %: pairs + relays+(en-relays relays) + key+(hex:en:common pub.i.keys) + profiles+(en-profiles profiles) + :: TODO proper cursors + feed+(feed-with-cursor:en:trill feed ~ ~) + nostr+(en-nostr-feed nostr-feed) + following+(enfollowing following) + ['followGraph' (engraph follow-graph)] + ~ + == + ++ en-nostr-feed + |= feed=nostr-feed:sur ^- json + :- %a %+ turn (tap:norm:sur feed) |= [id=@ud ev=event:nsur] + (event:en:nostr ev) + + ++ en-relays + |= r=(map @t relay-stats:nsur) ^- json + %- pairs %+ turn ~(tap by r) + |= [url=@t rs=relay-stats:nsur] + :- url %- pairs + :~ :- %connected ?~ connected.rs ~ (time u.connected.rs) + :- %reqs (relay-stats reqs.rs) + == + ++ relay-stats |= rm=(map @t event-stats:nsur) + %- pairs %+ turn ~(tap by rm) |= [sub-id=@t es=event-stats:nsur] + :: TODO do we even need this + :- sub-id (numb received.es) + + ++ en-profiles |= m=(map @ux user-meta:nsur) + %- pairs + %+ turn ~(tap by m) |= [key=@ux p=user-meta:nsur] + :- (crip (scow:sr %ux key)) (user-meta:en:nostr p) + + ++ enfollowing + |= m=(map @ux feed:feed) + ^- json + %- pairs %+ turn ~(tap by m) |= [key=@ux f=feed:feed] + :- (crip (scow:sr %ux key)) (feed:en:trill f) + + ++ engraph + |= m=(map @ux (set follow:sur)) + ^- json + %- pairs %+ turn ~(tap by m) |= [key=@ux s=(set follow:sur)] + :- (crip (scow:sr %ux key)) + :- %a %+ turn ~(tap in s) |= f=follow:sur + %- pairs + :~ pubkey+(hex:en:common pubkey.f) + name+s+name.f + :- %relay ?~ relay.f ~ s+u.relay.f + == + + + -- +++ de +=, dejs-soft:format +|% + :: ui +++ ui + %- of :~ + keys+ul + fols+ui-fols + prof+ui-prof + post+ui-post + rela+ui-relay + == +++ ui-fols + %- of :~ + add+hex:de:common + del+hex:de:common + == +++ ui-prof + %- of :~ + add+add-prof + del+hex:de:common + == +++ add-prof %- ot :~ + pubkey+hex:de:common + meta+user-meta:de:nostr +== +++ ui-post + %- of :~ + add+de-post + rt+de-rt + del+hex:de:common + == +++ de-post + %- ot :~ + pubkey+hex:de:common + content+so + == +++ de-rt + %- ot :~ + id+hex:de:common + pubkey+hex:de:common + relay+so + == +++ ui-relay + %- of :~ + send+de-relay + == +++ de-relay %- ot :~ + host+(se:de:common %p) + id+de-atom-id + relays+(ar so) + == +++ de-atom-id + |= jon=json + ?. ?=([%s @t] jon) ~ + (rush p.jon dem) + + -- + +-- + diff --git a/backupdesk/lib/json/trill.hoon b/backupdesk/lib/json/trill.hoon new file mode 100644 index 0000000..efa4ffc --- /dev/null +++ b/backupdesk/lib/json/trill.hoon @@ -0,0 +1,191 @@ +/- feed=trill-feed, post=trill-post +/+ common=json-common, sr=sortug +|% +++ en +=, enjs:format + |% + ++ feed-with-cursor + |= [f=feed:^feed start=(unit @da) end=(unit @da)] ^- json + %: pairs + feed+(feed f) + start+(cursor start) + end+(cursor end) + ~ + == + ++ cursor |= c=(unit @da) + ?~ c ~ (time u.c) + ++ feed + |= f=feed:^feed ^- json + %- pairs + %+ turn (tap:orm:^feed f) + |= [post-id=@da p=post:post] + ^- [@ta json] + :- (crip (scow:sr %ud `@ud`post-id)) + (poast p) + + ++ poast + |= p=post:post ^- json + %- pairs + :~ id+(ud:en:common id.p) + host+(patp:en:common host.p) + author+(patp:en:common author.p) + thread+(ud:en:common thread.p) + parent+?~(parent.p ~ (ud:en:common u.parent.p)) + contents+(content contents.p) + hash+(b64:en:common hash.p) + engagement+(engagement engagement.p) + children+a+(turn ~(tap in children.p) ud:en:common) + time+(time id.p) + == + + ++ content + |= cm=content-map:post ^- json + =/ last (pry:corm:post cm) + ?~ last ~ + =/ blocks=content-list:post +.u.last + :- %a %+ turn blocks en-block + ++ en-block + |= b=block:post ^- json + %+ frond -.b + ?- -.b + %paragraph a+(turn p.b inline) + %blockquote a+(turn p.b inline) + %table a+(turn rows.b table-row) + %heading (heading +.b) + %list (ilist +.b) + %media (media media.b) + %codeblock (codespan +.b) + %eval s+hoon.b + %ref (en-ref +.b) + %json (external +.b) + %poll ~ + == + ++ table-row + |= l=(list content-list:post) + :- %a %+ turn l + |= b=content-list:post + :- %a %+ turn b en-block + ++ heading + |= [p=cord q=@] + %- pairs + :~ text+s+p + num+(numb q) + == + ++ ilist + |= [p=(list inline:post) q=?] + %- pairs + :~ text+a+(turn p inline) + ordered+b+q + == + ++ media + |= =media:post + %+ frond -.media + ?- -.media + %images a+(turn p.media string) + %video s+p.media + %audio s+p.media + == + ++ string + |= c=cord s+c + ++ en-ref :: TODO should the backend fetch this shit + |= [type=term s=@p p=^path] + %- pairs + :~ type+s+type + ship+(patp:en:common s) + path+(path p) + == + ++ external + |= [p=term q=cord] + %- pairs + :~ origin+s+p + content+s+q + == + ++ inline + |= i=inline:post ^- json + %+ frond -.i + ?+ -.i s+p.i + %ship (patp:en:common p.i) + %link (link +.i) + %ruby (ruby +.i) + %break ~ + == + ++ ruby + |= [p=@t q=@t] + %- pairs + :~ text+s+p + ruby+s+q + == + ++ codespan + |= [code=cord lang=cord] + %- pairs + :~ code+s+code + lang+s+lang + == + ++ link + |= [href=cord show=cord] + %- pairs + :~ href+s+href + show+s+show + == + + ++ engagement + |= =engagement:post ^- json + %- pairs + :~ reacts+(reacts reacts.engagement) + quoted+a+(turn ~(tap in quoted.engagement) signed-pid) + shared+a+(turn ~(tap in shared.engagement) signed-pid) + == + ++ reacts + |= rs=(map @p [react:post signature:post]) + ^- json + %- pairs + %+ turn ~(val by rs) + |= [r=react:post s=signature:post] + ^- [@ta json] + :- (scot %p q.s) + s+r + ++ signed-pid + |= =signed-pid:post + ^- json + %- pairs + :~ ship+(patp:en:common q.signature.signed-pid) + pid+(pid pid.signed-pid) + == + ++ time-pid + |= [t=@da s=@p =id:post] + %- pairs + :~ id+(ud:en:common id) + ship+(patp:en:common s) + time+(time t) + == + ++ time-ship + |= [t=@da s=@p] ^- json + %- pairs + :~ ship+(patp:en:common s) + time+(time t) + == + ++ mention + |= [t=@da s=@p p=pid:post] ^- json + %- pairs + :~ pid+(pid p) + ship+(patp:en:common s) + time+(time t) + == + ++ react + |= [t=@da s=@p p=pid:post react=@t] ^- json + %- pairs + :~ pid+(pid p) + ship+(patp:en:common s) + react+s+react + time+(time t) + == + ++ pid + |= =pid:post + %- pairs + :~ ship+(patp:en:common ship.pid) + id+(ud:en:common id.pid) + == + :: + :: + -- +-- |