summaryrefslogtreecommitdiff
path: root/desk/lib/shim.hoon
blob: 4afdf2b292bb010572a04a2793b8f192c9f8ec73 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
/-  sur=nostrill, nsur=nostr
/+  js=json-nostr, sr=sortug, nlib=nostr, constants
/=  web  /web/router
|_  [=state:sur =bowl:gall]

+$  card  card:agent:gall
++  parse-msg
  |=  [eyre-id=@ta req=inbound-request:eyre]
  ^-  (unit res:shim:nsur)
  ?~  body.request.req  ~
  =/  jstring  q.u.body.request.req
  (parse-body jstring)
++  parse-body  |=  jstring=@t
  =/  ures  (de:json:html jstring)
  ?~  ures  ~
  (shim-res:de:js u.ures)
:: __
++  get-req  |=  fs=(list filter:nsur)
    ^-  [bulk-req:shim:nsur _state]
    =/  rls  ~(tap by relays.state)
    =|  urls=(list @t)
    =/  sub-id  (gen-sub-id:nlib eny.bowl)
    =/  =req:shim:nsur  [%req sub-id fs]
    |-  ?~  rls  [[urls req] state]
      ::  build http card
      =/  [url=@t rs=relay-stats:nsur]  i.rls
      ::  mutate relays stats
      =/  es=event-stats:nsur  [fs 0]  
      =/  nreqs  (~(put by reqs.rs) sub-id es)
      =/  nrs  rs(reqs nreqs)
      =.  relays.state  (~(put by relays.state) url nrs)
      $(urls [url urls], rls t.rls)

++  get-posts
  ^-  (quip card _state)
  =/  kinds  (silt ~[1])
  =/  last-week  (sub now.bowl ~d7)
  :: =/  since  (to-unix-secs:jikan:sr last-week)
  =/  =filter:nsur  [~ ~ `kinds ~ `last-week ~ ~]
  =^  req=bulk-req:shim:nsur  state  (get-req ~[filter])
  :-  :~((send req))  state

++  get-profiles
  |=  pubkeys=(set @ux)
    ^-  (quip card _state)
    =/  kinds  (silt ~[0])
    =/  =filter:nsur  [~ `pubkeys `kinds ~ ~ ~ ~]
    =^  req=bulk-req:shim:nsur  state  (get-req ~[filter])
    :-  :~((send req))  state

++  get-engagement
  |=  post-ids=(set @ux)
    ^-  (quip card _state)
    =/  post-strings  %-  ~(run in post-ids)  |=  id=@ux  (crip (scow:sr %ux id))
    =/  =filter:nsur
      =/  kinds  (silt ~[6 7])
      =/  tags  (malt :~([%e post-strings]))
      [~ ~ `kinds `tags ~ ~ ~]
    =^  req  state  (get-req ~[filter])
    :-  :~((send req))  state

++  get-quotes
  |=  post-id=@ux
  ^-  (quip card _state)
    =/  post-string  (crip (scow:sr %ux post-id))
    =/  kinds  (silt ~[1])
    =/  tags  (malt :~([%q (silt ~[post-string])]))
    =/  =filter:nsur  [~ ~ `kinds `tags ~ ~ ~]
    =^  req  state  (get-req ~[filter])
    :-  :~((send req))  state

    
++  send
  |=  req=bulk-req:shim:nsur  ^-  card:agent:gall
    =/  req-body  (bulk-req:en:js req)
    :: ~&  shim-req-json=(en:json:html req-body)
    =/  headers  :~
      [key='content-type' value='application/json']
    ==
    =/  =request:http  [%'POST' url:shim:nsur headers `(json-body:web req-body)]
    =/  pat  /shim
    [%pass (weld /ws pat) %arvo %k %fard dap.bowl %fetch %noun !>(request)]  

++  send-http
  |=  req=http-req:shim:nsur
  ^-  card:agent:gall
    =/  req-body  (http-req:en:js req)
    :: ~&  shim-req-json=(en:json:html req-body)
    =/  headers  :~
      [key='content-type' value='application/json']
    ==
    =/  =request:http  [%'POST' url:shim:nsur headers `(json-body:web req-body)]
    [%pass /http/[sub-id.req] %arvo %k %fard dap.bowl %fetch %noun !>(request)]  
::
:: HTTP
:: 

++  get-profiles-http
  |=  pubkeys=(set @ux)
    ^-  (quip card _state)
    =/  relays  ~(key by relays.state)
    :: TODO make a function to use most reliable
    =/  relay  (head ~(tap in relays))
    ~&  http=relay
    =/  sub-id  (gen-sub-id:nlib eny.bowl)
    =/  kinds  (silt ~[0])
    =/  total=filter:nsur  [~ `pubkeys `kinds ~ ~ ~ ~]
    =/  chunk  (silt (scag 10 ~(tap in pubkeys)))
    =/  =filter:nsur  [~ `chunk `kinds ~ ~ ~ ~]
    =.  pending.state  (~(put by pending.state) sub-id [total *filter:nsur])
    =/  req=http-req:shim:nsur  [relay http-delay:constants sub-id ~[total]]
    =/  =card  (send-http req)
    :-  :~(card)  state

--