mirror of
https://github.com/ilyakooo0/urbit.git
synced 2024-11-30 19:11:59 +03:00
Revert "Stripdown part 2."
This reverts commit afcc1cb9a80db3a687d7a2a1dc3bf1be38df5b68.
This commit is contained in:
parent
a0a2cdf64f
commit
fc1068dfae
57
ape/ask.hoon
Normal file
57
ape/ask.hoon
Normal file
@ -0,0 +1,57 @@
|
||||
::
|
||||
:::: /hoon+ask+ape
|
||||
::
|
||||
/? 314
|
||||
/+ sole
|
||||
[. sole]
|
||||
|%
|
||||
++ card
|
||||
$% {$diff $sole-effect sole-effect}
|
||||
==
|
||||
--
|
||||
!:
|
||||
|_ {bow/bowl adr/(set cord) sos/(map bone sole-share)}
|
||||
++ peer-sole
|
||||
|= path
|
||||
^- (quip {bone card} +>)
|
||||
~| [%not-in-whitelist src.bow]
|
||||
?> (~(has in (sa (limo ~zod our.bow ~talsur-todres ~))) src.bow)
|
||||
:_ +>.$(sos (~(put by sos) ost.bow *sole-share))
|
||||
=- [(effect %mor pro+[& %$ "<listening>"] -)]~
|
||||
=+ all=adrs
|
||||
[tan+(turn all message) (turn all put-mail)]
|
||||
::
|
||||
++ adrs (sort (~(tap by adr)) aor)
|
||||
++ effect |=(fec/sole-effect [ost.bow %diff %sole-effect fec])
|
||||
++ message |=(ask/@t leaf+"ask: {(trip ask)}")
|
||||
++ put-mail |=(ask/@t =+(pax=(rash ask unix-path) [%sav pax '']))
|
||||
++ unix-path :: split into path of "name" and "extension"
|
||||
;~ (glue dot)
|
||||
(cook crip (star ;~(less dot next)))
|
||||
;~(plug (cook crip (star next)) (easy ~))
|
||||
==
|
||||
::
|
||||
++ poke-ask-mail
|
||||
|= ask/@t
|
||||
^- (quip {bone card} +>)
|
||||
~| have-mail+ask
|
||||
?< (~(has in adr) ask)
|
||||
:_ +>.$(adr (~(put in adr) ask))
|
||||
=+ [mez=[(message ask)]~ sav=(put-mail ask)]
|
||||
%+ turn (prey /sole bow)
|
||||
|=({ost/bone ^} (effect(ost.bow ost) %mor tan+mez sav ~))
|
||||
::
|
||||
++ poke-sole-action
|
||||
|= act/sole-action
|
||||
^- (quip {bone card} +>)
|
||||
?- -.act
|
||||
$clr `+>.$
|
||||
$ret [[(effect tan+(turn adrs message))]~ +>.$] :: re-print list
|
||||
$det :: reject all input
|
||||
=+ som=(~(got by sos) ost.bow) :: XX this code belongs in a library
|
||||
=^ inv som (~(transceive sole som) +.act)
|
||||
=^ det som (~(transmit sole som) inv)
|
||||
=. sos (~(put by sos) ost.bow som)
|
||||
[[(effect det+det)]~ +>.$]
|
||||
==
|
||||
--
|
220
ape/bit.hoon
Normal file
220
ape/bit.hoon
Normal file
@ -0,0 +1,220 @@
|
||||
::
|
||||
::
|
||||
::::
|
||||
::
|
||||
/? 314
|
||||
/- talk, bit-api
|
||||
/+ talk, sole, http
|
||||
!:
|
||||
:::: sivtyv-barnel
|
||||
:: be sure to have oauth2-code markk
|
||||
[talk bit-api .]
|
||||
|%
|
||||
++ axle
|
||||
$: cred/(unit {app-secret/@t client-id/@t})
|
||||
oauth-code/(unit @t)
|
||||
auth/(unit {access/@t refresh/@t})
|
||||
contacts/(map @t @t)
|
||||
outgoing/(map ship @t) incoming/(map @t ship)
|
||||
==
|
||||
++ move {bone note}
|
||||
++ hapt {ship path}
|
||||
++ note
|
||||
$% {$send wire {ship term} $poke mesa}
|
||||
{$them wire (unit hiss)}
|
||||
{$hiss wire mark bit-any}
|
||||
==
|
||||
++ gift
|
||||
$% {$nice $~}
|
||||
{$mean ares}
|
||||
==
|
||||
++ sign
|
||||
$% {$thou p/httr}
|
||||
{$unto $coup p/(unit tang)}
|
||||
==
|
||||
++ mesa
|
||||
$% {$bit-addr-request $~}
|
||||
{$bit-addr-made @t}
|
||||
{$talk-command command}
|
||||
==
|
||||
--
|
||||
::
|
||||
!:
|
||||
|_ {hid/bowl vat/axle}
|
||||
:: ++ prep ~&(%bit-prep-wipe ,_`.)
|
||||
++ return [*(list move) .]
|
||||
++ redirect-uri [hostname `/~~/home+pub+bit+fab ~]
|
||||
++ hostname ^- hart
|
||||
?+ (clan our.hid) !!
|
||||
$czar [| ?+(our.hid `8.443 $~fyr `8.444) `/localhost]
|
||||
$duke [| `8.444 `/org+urbit+(crip +:<our.hid>)]
|
||||
==
|
||||
++ auth-url
|
||||
%+ weld "https://sandbox.coinbase.com+oauth+authorize"
|
||||
%- tail:earn :~
|
||||
'response_type'^%code
|
||||
'client_id'^client-id:(need cred.vat)
|
||||
'redirect_uri'^(crip (earn redirect-uri))
|
||||
'scope'^'user balance buy sell send transactions addresses'
|
||||
'meta[send_limit_amount]'^'1'
|
||||
'meta[send_limit_curency]'^'BTC'
|
||||
'meta[send_limit_period]'^'day'
|
||||
==
|
||||
++ old-api
|
||||
|= {pour-path/wire end-point/path req/$@($get {$post p/json})}
|
||||
^- move
|
||||
%^ send:http ost.hid pour-path
|
||||
[/com+coinbase+api v1/end-point req ~ ['access_token' access:(need auth.vat)]~]
|
||||
::
|
||||
++ api-call
|
||||
|= {res/mark req/bit-api-call} ^+ return
|
||||
~| %missing-access-token
|
||||
[[ost.hid %hiss / res bit-api-call+[access:(need auth.vat) req]]~ +>.$]
|
||||
::
|
||||
++ print |=(msg/tape [[(publish [%lin & (crip msg)]~)]~ +>.$])
|
||||
++ callback-uri [hostname [`%json /~/to+[dap.hid]/json] ~[anon+'' wire+'/']]
|
||||
++ poke-auth
|
||||
|= arg/{secr/cord id/cord}
|
||||
=. cred.vat `arg
|
||||
=+ prl=`purl`(need (epur (crip auth-url)))
|
||||
:_ +>.$
|
||||
:- %- publish
|
||||
:~ [%lin & 'secret and client id saved successfully']
|
||||
[%lin & 'please click on the url below to continue authentication']
|
||||
[%url prl ~]
|
||||
==
|
||||
~
|
||||
::
|
||||
++ sigh-tang |=({* err/tang} (mean err))
|
||||
++ send-friend :: inter-app interface
|
||||
|= {way/wire his/ship mez/$%({$bit-addr-request $~} {$bit-addr-made @t})}
|
||||
^- move
|
||||
[ost.hid %send way [his dap.hid] %poke mez]
|
||||
::
|
||||
++ poke-bit-send |=(req/bit-send (api-call %bit-transaction send+req))
|
||||
++ sigh-bit-transaction
|
||||
|=({* trid/@t} (print "transaction success {(trip trid)}"))
|
||||
::
|
||||
++ poke-bit-ship-send :: send to ship
|
||||
|= {to/ship amount/@t}
|
||||
=. outgoing.vat (~(put by outgoing.vat) to amount)
|
||||
:_ +>.$
|
||||
:_ ~
|
||||
(send-friend /sent to %bit-addr-request ~)
|
||||
::
|
||||
++ poke-bit-addr-request :: give your address to receive bit
|
||||
|= $~ :: gen new address with callback
|
||||
:_ +>.$
|
||||
:_ ~
|
||||
%+ old-api /addr-request+(scot %p src.hid)
|
||||
:+ /addresses %post
|
||||
%+ joba %address
|
||||
%- jobe :~
|
||||
label+(jape "address for {<src.hid>}")
|
||||
'callback_url'^(jape (earn callback-uri))
|
||||
==
|
||||
::
|
||||
++ pour-addr-request :: send new address to sender
|
||||
|= {pax/path rez/json}
|
||||
=+ adr=(need ((ot address+so ~):jo rez))
|
||||
=+ his=(slav %p +<.pax)
|
||||
~! incoming.vat
|
||||
=. incoming.vat
|
||||
(~(put by incoming.vat) adr his)
|
||||
:_ +>.$
|
||||
:_ ~
|
||||
(send-friend [%message ~] his %bit-addr-made adr)
|
||||
::
|
||||
++ poke-bit-addr-made :: receive address for sending
|
||||
|= addr/@t
|
||||
=+ amount=(~(got by outgoing.vat) src.hid) :: get amount to send
|
||||
(api-call %bit-transaction txt-send+[addr amount])
|
||||
::
|
||||
++ poke-oauth2-code
|
||||
|= code/cord
|
||||
=. oauth-code.vat
|
||||
[~ code]
|
||||
?< ?=($~ cred.vat)
|
||||
=+ req=[code [client-id app-secret]:u.cred.vat redirect-uri]
|
||||
[[ost.hid %hiss / %oauth-tokens bit-get-token+req]~ +>.$]
|
||||
::
|
||||
++ sigh-oauth-tokens
|
||||
|= {wire toke/{access/@t refresh/@t}}
|
||||
=.(auth.vat `toke (print "authenticated."))
|
||||
::
|
||||
++ poke-buy
|
||||
|=(arg/{amount/@t currency/@t} ?<(=(amount.arg ~) (api-call %json %buy arg)))
|
||||
::
|
||||
++ poke-sell
|
||||
|=(arg/{amount/@t currency/@t} ?<(=(amount.arg ~) (api-call %json %sell arg)))
|
||||
++ sigh-json |=({* a/json} ~&(a return))
|
||||
++ poke-list |=($~ (api-call %bit-accounts %list ~))
|
||||
++ sigh-bit-accounts |=({* acc/bit-accounts} ~&(accounts=acc return))
|
||||
++ poke-send-raw
|
||||
|= arg/{to/@t amone/(unit @t) cur/(unit @t) amtwo/(unit @t) nt/(unit @t)}
|
||||
=+ ^= adr
|
||||
?~ (~(get by contacts.vat) to.arg) to
|
||||
~&('contact-exists' (~(get by contacts.vat) to.arg))
|
||||
=+ ^= info
|
||||
?~ cur.arg
|
||||
[to+s+to.arg amount+s+(need amone.arg) ~]
|
||||
?~ nt.arg
|
||||
:* to+s+to.arg
|
||||
'amount_currency_iso'^s+(need cur.arg)
|
||||
'amount_string'^s+(need amtwo.arg)
|
||||
~
|
||||
==
|
||||
:* to+s+to.arg
|
||||
amount+s+(need amtwo.arg)
|
||||
'amount_string'^s+(need amtwo.arg)
|
||||
~
|
||||
==
|
||||
=+ ^= pst
|
||||
(jobe transaction+(jobe info) ~)
|
||||
[[(old-api /send /transactions+'send_money' %post pst) ~] +>.$]
|
||||
::
|
||||
++ poke-json
|
||||
|= arg/json
|
||||
~& arg
|
||||
=+ [adr amo]=(need %.(arg (ot address+so amount+no ~):jo))
|
||||
=+ frm=(~(get by incoming.vat) adr)
|
||||
(print "just received {(trip amo)} BTC from {<frm>}")
|
||||
::(old-api /get-id /transactions+[transaction-id] %get)
|
||||
::
|
||||
++ pour-get-id :: display transaction info
|
||||
|= {pax/path rez/json}
|
||||
:_ +>.$
|
||||
:_ ~
|
||||
!!
|
||||
::
|
||||
++ thou
|
||||
|= {way/wire res/httr}
|
||||
?+ -.way !!
|
||||
$message `+>.$
|
||||
?($addr-request $get-id)
|
||||
~| 'must receive a 200'
|
||||
~| res
|
||||
?> =(200 p.res)
|
||||
%- ?-(-.way $addr-request pour-addr-request, $get-id pour-get-id)
|
||||
[way (rash q:(need r.res) apex:poja)]
|
||||
==
|
||||
::
|
||||
++ publish
|
||||
|= act/(list speech)
|
||||
^- move
|
||||
=+ ^= thotz
|
||||
%+ turn act
|
||||
|= sp/speech ^- thought
|
||||
=+ ^= tail
|
||||
:- ^- audience
|
||||
:+ :- ^- partner
|
||||
[%& our.hid ?+((clan our.hid) !! $czar %court, $duke %porch)]
|
||||
^- (pair envelope delivery)
|
||||
[`envelope`[& ~] %pending]
|
||||
~
|
||||
~
|
||||
`statement`[now.hid ~ sp]
|
||||
:- `@`(sham eny.hid tail)
|
||||
tail
|
||||
[ost.hid %send /auth [our.hid %talk] %poke [%talk-command %publish thotz]]
|
||||
--
|
691
ape/cloud.hoon
Normal file
691
ape/cloud.hoon
Normal file
@ -0,0 +1,691 @@
|
||||
:: digital ocean fleet management
|
||||
::
|
||||
::::
|
||||
::
|
||||
/? 314
|
||||
/- talk
|
||||
::
|
||||
::
|
||||
:::: sivtyv-barnel
|
||||
::
|
||||
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
|
||||
:: data structures ::
|
||||
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
|
||||
!:
|
||||
[talk .]
|
||||
|%
|
||||
++ instance
|
||||
$: plat/?($do $gce)
|
||||
name/@t
|
||||
id/@t
|
||||
status/@t
|
||||
created/@da
|
||||
snapshot/name/@t
|
||||
==
|
||||
++ image
|
||||
$: plat/?($do $gce)
|
||||
name/@t
|
||||
id/@t
|
||||
==
|
||||
++ create-req-do
|
||||
$: name/@t
|
||||
size/@t
|
||||
image/@t
|
||||
ssh/(list cord)
|
||||
backups/(unit ?)
|
||||
ipv6+(unit ?)
|
||||
private-networking/(unit ?)
|
||||
user-data/(unit @t)
|
||||
==
|
||||
++ create-req-gce {project/@t zone/@t name/@t machine-type/@t}
|
||||
++ axle
|
||||
$: auth/{do/keys gce/keys}
|
||||
toke/{do/tokens gce/tokens}
|
||||
insts/(map @t instance)
|
||||
images/(map {@t @t} image)
|
||||
==
|
||||
++ keys {authc/(unit @t) client-secret/(unit @t)}
|
||||
++ tokens {access/@t refresh/@t}
|
||||
++ move {bone card}
|
||||
++ card
|
||||
$% {$diff $json json}
|
||||
{$wait wire @da}
|
||||
{$send wire {ship term} $poke $talk-command command}
|
||||
{$them wire (unit hiss)}
|
||||
==
|
||||
++ droplet-action
|
||||
$% {$start $~}
|
||||
{$stop $~}
|
||||
{$reboot $~}
|
||||
{$delete $~}
|
||||
{$snapshot p/@t}
|
||||
==
|
||||
++ cloud-command
|
||||
$% {$action id/@t name/@t act/droplet-action}
|
||||
{$create-do p/json}
|
||||
{$create-gce p/json}
|
||||
==
|
||||
--
|
||||
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
|
||||
:: miscellaneous functions ::
|
||||
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
|
||||
!:
|
||||
|%
|
||||
++ auth-queries
|
||||
|= code/cord
|
||||
:~ 'grant_type'^'authorization_code'
|
||||
'code'^code
|
||||
:- 'client_id'
|
||||
'd8f46b95af38c1ab3d78ad34c2157a6959c23eb0eb5d8e393f650f08e6a75c6f'
|
||||
'redirect_uri'^'http://localhost:8443/home+pub+cloud+fab'
|
||||
==
|
||||
::
|
||||
++ parse-iso8601
|
||||
=< (cook to-time (parsf ;"{parse-day}T{parse-seconds}{parse-zone}"))
|
||||
|%
|
||||
++ to-time
|
||||
|= {{y/@u m/@u d/@u} t/{h/@u m/@u s/@u ms/@u} {syn/? zh/@u zm/@u}}
|
||||
^- @da
|
||||
%- year
|
||||
^- date
|
||||
=: h.t ?:(syn (sub h.t zh) (add h.t zh))
|
||||
m.t ?:(syn (sub m.t zm) (add m.t zm))
|
||||
==
|
||||
[[& y] m d h.t m.t s.t (div (mul ms.t 0x1.0000) 1.000) ~]
|
||||
++ parse-day (parsf ;"{dem}\-{dem}\-{dem}")
|
||||
++ parse-seconds (parsf ;"{dem}:{dem}:{dem}{(optional ;~(pfix dot dem))}")
|
||||
++ optional |*(fel/rule ;~(pose fel (easy 0)))
|
||||
++ parse-zone
|
||||
;~ pose
|
||||
(cold [& 0 0] (jest 'Z'))
|
||||
(parsf ;"{parse-zone-sign}{dem}:{dem}")
|
||||
==
|
||||
++ parse-zone-sign ;~(plug ;~(pose (cold & lus) (cold | hep)))
|
||||
--
|
||||
++ parse-cloud-command
|
||||
=+ jo
|
||||
%- of :~
|
||||
[%create-gce some]
|
||||
[%create-do some]
|
||||
::[%create-gce some]
|
||||
:- %action
|
||||
(ot id+so name+so act+parse-droplet-action ~)
|
||||
==
|
||||
++ parse-droplet-action
|
||||
=> jo
|
||||
%- of :~
|
||||
[%start ul]
|
||||
[%stop ul]
|
||||
[%reboot ul]
|
||||
[%delete ul]
|
||||
[%snapshot so]
|
||||
==
|
||||
++ key-do
|
||||
(mo [%start 'power_on'] [%stop 'shutdown'] [%reboot 'power_cycle'] ~)
|
||||
::
|
||||
++ adapter-do
|
||||
|= a/cord
|
||||
(~(got by key-do) a)
|
||||
::
|
||||
++ parse-ip-do
|
||||
=> jo
|
||||
%- ot
|
||||
:_ ~ v4/(ar (ot 'ip_address'^(su lip:ag) ~))
|
||||
::
|
||||
++ parse-ip-gce
|
||||
=> jo
|
||||
%+ cu |=(a/(list (list @if)) `(list @if)`(zing a))
|
||||
(ar (ot 'accessConfigs'^(ar (ot 'natIP'^(su lip:ag) ~)) ~))
|
||||
::
|
||||
++ tail-url
|
||||
|= a/cord
|
||||
-:(flop q.q:(need (epur a)))
|
||||
::
|
||||
++ parse-region
|
||||
=> jo
|
||||
(ot name+so ~)
|
||||
::
|
||||
++ parse-id-text
|
||||
|= jon/json
|
||||
?.(?=({?($n $s) *} jon) ~ (some p.jon))
|
||||
::
|
||||
++ create-do-body
|
||||
|= $: name/@t
|
||||
size/@t
|
||||
image/@t
|
||||
ssh-keys/(list cord)
|
||||
backups/(unit ?)
|
||||
ipv6+(unit ?)
|
||||
private-networking/(unit ?)
|
||||
user-data/(unit @t)
|
||||
==
|
||||
%- jobe
|
||||
:~ name+s+name
|
||||
size+s+size
|
||||
image+s+image
|
||||
backups+?~(backups ~ b+u.backups)
|
||||
ipv6/?~(ipv6 ~ b+u.ipv6)
|
||||
'user_data'^?~(user-data ~ s+u.user-data)
|
||||
'private_networking'^?~(private-networking ~ b+u.private-networking)
|
||||
==
|
||||
::
|
||||
++ convert-do
|
||||
|= a/?($start $stop $reboot $snapshot)
|
||||
?- a
|
||||
$start
|
||||
'power_on'
|
||||
$stop
|
||||
'shutdown'
|
||||
$reboot
|
||||
'power_cycle'
|
||||
$snapshot
|
||||
'snapshot'
|
||||
==
|
||||
::
|
||||
++ instance-to-json
|
||||
|= a/(list instance)
|
||||
^- json
|
||||
%+ joba 'instances'
|
||||
:- %a
|
||||
%+ turn a
|
||||
|= instance
|
||||
^- json
|
||||
%- jobe
|
||||
:~ name+`json`s+name
|
||||
id+s+id
|
||||
status+s+status
|
||||
created+s+(crip (dust (yore created)))
|
||||
snapshot+s+snapshot
|
||||
==
|
||||
++ map-to-list
|
||||
|= a/(map {@t @t} image)
|
||||
^- liz/(list image)
|
||||
%+ turn (~(tap by a) *(list {{@t @t} image}))
|
||||
|=(a/{{@t @t} image} `image`+.a)
|
||||
::
|
||||
++ image-to-json
|
||||
|= a/(list image)
|
||||
%+ joba 'images'
|
||||
:- %a
|
||||
%+ turn a
|
||||
|= image
|
||||
^- json
|
||||
%- jobe
|
||||
:~ name+s+name id+s+id ==
|
||||
--
|
||||
::::::::::::::::
|
||||
:: main door ::
|
||||
::::::::::::::::
|
||||
!:
|
||||
|_ {bowl vat/axle}
|
||||
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
|
||||
:: miscellaneous arms that have to be in main door for scope reasons ::
|
||||
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
|
||||
::
|
||||
++ thou
|
||||
|= {pour-path/path resp/?(httr *)}
|
||||
^- {(list move) _+>.$}
|
||||
~& unhandled-pour-path+resp
|
||||
:_ +>.$ ~
|
||||
::
|
||||
++ httpreq
|
||||
|= $: pour-path/wire :: must be in main door because of scope
|
||||
domain/(list cord)
|
||||
end-point/path
|
||||
req-type/$?($get $delt {$post json})
|
||||
headers/math
|
||||
queries/quay
|
||||
==
|
||||
^- move
|
||||
=+ ^- parsed-url/purl
|
||||
:+ ^= host-port :: ++hart
|
||||
:+ security=%.y
|
||||
port=~
|
||||
host=[%.y [path=[%com domain]]]
|
||||
endpoint=[extensions=~ point=end-point] :: ++pork,
|
||||
q-strings=queries :: ++quay
|
||||
=+ ^- request/hiss :: cast to hiss
|
||||
:- parsed-url
|
||||
?@ req-type
|
||||
[req-type headers ~]
|
||||
[%post headers ~ (tact (pojo +.req-type))]
|
||||
:^ ost %them pour-path
|
||||
`(unit hiss)`[~ request]
|
||||
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
|
||||
:: manage supscriptions and publish to talk ::
|
||||
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
|
||||
++ peer
|
||||
|= pax/path
|
||||
^- {(list move) _+>.$}
|
||||
:_ +>.$
|
||||
=+ lis=(~(tap by insts.vat))
|
||||
[ost %diff %json (instance-to-json (turn lis |=(a/{@t instance} +.a)))]~
|
||||
::
|
||||
++ spam
|
||||
|= jon/json
|
||||
%+ turn (~(tap by sup))
|
||||
|= {sub/bone @ pax/path}
|
||||
^- move
|
||||
[sub %diff %json jon]
|
||||
::
|
||||
++ publish
|
||||
|= {act/(list speech)}
|
||||
^- move
|
||||
=+ ^= spchz
|
||||
%+ turn act
|
||||
|= sp/speech
|
||||
=+ ^= tail
|
||||
:- ^- audience
|
||||
:+ :- `partner`[%& our ?+((clan our) !! $czar %court, $duke %porch)]
|
||||
^- (pair envelope delivery)
|
||||
[`envelope`[& ~] %pending]
|
||||
~
|
||||
~
|
||||
`statement`[now ~ sp]
|
||||
^- thought
|
||||
:- `@`(sham eny tail)
|
||||
tail
|
||||
=+ mez=[%talk-command [%publish `(list thought)`spchz]]
|
||||
[ost %send /pub [our %talk] %poke mez]
|
||||
++ thou-pub |=($~ :_(+>.$ ~))
|
||||
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
|
||||
:: authentication ::
|
||||
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
|
||||
++ poke-cloud-auth
|
||||
|= {cde/cord typ/cord}
|
||||
^- {(list move) _+>.$}
|
||||
?: =(%do typ)
|
||||
=. authc.do.auth.vat
|
||||
[~ cde]
|
||||
:_ +>.$ ~
|
||||
=. access.gce.toke.vat
|
||||
cde
|
||||
:_ +>.$
|
||||
:_ list-gce
|
||||
(publish [%lin & 'successfully authenticated to gce']~)
|
||||
::
|
||||
++ poke-cloud-secret
|
||||
|= {secret/cord typ/cord}
|
||||
^- {(list move) _+>.$}
|
||||
?+ typ ~|(missing-platform=typ !!)
|
||||
$do
|
||||
=. client-secret.do.auth.vat
|
||||
[~ secret]
|
||||
:_ +>.$
|
||||
:_ ~
|
||||
%+ httpreq /do/auth
|
||||
:^ ~[%digitalocean %cloud] `path`/v1/oauth/token
|
||||
[%post ~]
|
||||
:- ~ `quay`['client_secret'^secret (auth-queries (need authc.do.auth.vat))]
|
||||
==
|
||||
::
|
||||
++ thou-do-auth
|
||||
|= {$~ resp/httr}
|
||||
^- {(list move) _+>.$}
|
||||
~| resp
|
||||
=+ body=(rash q:(need r.resp) apex:poja)
|
||||
~| receive-auth+resp(r body)
|
||||
=+ [ac re]=(need ((ot 'access_token'^so 'refresh_token'^so ~):jo body))
|
||||
=: access.do.toke.vat ac
|
||||
refresh.do.toke.vat re
|
||||
==
|
||||
:_ +>.$
|
||||
:- (publish [%lin & 'successfully authenticated']~)
|
||||
list-do
|
||||
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
|
||||
:: create digital ocean droplets ::
|
||||
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
|
||||
++ create-do
|
||||
|= act/json
|
||||
=+ ^- deets/create-req-do
|
||||
%- need
|
||||
%. act
|
||||
=> jo
|
||||
%- ot
|
||||
:~ name+so
|
||||
size+so
|
||||
image+so
|
||||
ssh+(ar so)
|
||||
backups+(mu bo)
|
||||
'ipv6'^(mu bo)
|
||||
'priv_networking'^(mu bo)
|
||||
'user_data'^(mu so)
|
||||
==
|
||||
=+ ^- body/json
|
||||
%- create-do-body
|
||||
:* name.deets
|
||||
size.deets
|
||||
image.deets
|
||||
ssh.deets
|
||||
backups.deets
|
||||
ipv6.deets
|
||||
private-networking.deets
|
||||
user-data.deets
|
||||
==
|
||||
%- httpreq :*
|
||||
/create-do
|
||||
~[%digitalocean %api] /v2/droplets
|
||||
[%post body]
|
||||
%^ mo ['Content-Type' 'application+json; charset=utf-8' ~]
|
||||
['Authorization' (cat 3 'Bearer ' access.do.toke.vat) ~]
|
||||
~
|
||||
~
|
||||
==
|
||||
::
|
||||
++ thou-create-do |=({path resp/httr} ~&(resp :_(+>.$ ~)))
|
||||
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
|
||||
:: create google instances ::
|
||||
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
|
||||
++ reserve-ip
|
||||
|= name/json
|
||||
=+ nam=(need ((ot name+so ~):jo name))
|
||||
%- httpreq
|
||||
:* /reserve-ip/[nam]
|
||||
~['googleapis' 'www']
|
||||
/compute/v1/projects/urbcloud/regions/us-central1/addresses
|
||||
[%post (joba name+s+nam)]
|
||||
%^ mo ['Content-Type' 'application+json' ~]
|
||||
['Authorization' (cat 3 'Bearer ' access.gce.toke.vat) ~]
|
||||
~
|
||||
*quay
|
||||
==
|
||||
::
|
||||
++ thou-reserve-ip
|
||||
|= {pax/path resp/httr}
|
||||
~& resp
|
||||
~| r.resp
|
||||
=+ parsed=(rash q:(need r.resp) apex:poja)
|
||||
=+ ur=(need ((ot 'targetLink'^so ~):jo parsed))
|
||||
~& initial-response+parsed
|
||||
=+ name=-:(flop q.q:(need (epur ur)))
|
||||
=+ buf=`@da`(add ~s10 now)
|
||||
:_(+>.$ [ost %wait `path`/check-ip-status/[name] buf]~)
|
||||
::
|
||||
++ wake-check-ip-status
|
||||
|= {name/path $~}
|
||||
~& this-is-the-name+name
|
||||
=+ nam=?~(name !! -.name)
|
||||
:_ +>.$
|
||||
:_ ~
|
||||
%- httpreq
|
||||
:* `path`/check-ip-status/[nam]
|
||||
~['googleapis' 'www']
|
||||
`path`/compute/v1/projects/urbcloud/regions/us-central1/addresses/[nam]
|
||||
%get
|
||||
%^ mo ['Content-Type' 'application+json' ~]
|
||||
['Authorization' (cat 3 'Bearer ' access.gce.toke.vat) ~]
|
||||
~
|
||||
*quay
|
||||
==
|
||||
++ thou-check-ip-status
|
||||
|= {name/path resp/httr}
|
||||
~& api-resp+resp
|
||||
=+ parsed=(rash q:(need r.resp) apex:poja)
|
||||
!!
|
||||
::?. =('RESERVED' (need ((ot status+so ~):jo parsed)))
|
||||
::
|
||||
++ create-gce
|
||||
|= jon/json
|
||||
=+ ^- {name/@t image/@t number/@ud}
|
||||
(need ((ot name+so 'instance_img'^so number+ni ~):jo jon))
|
||||
|- ^- (list move)
|
||||
?~ number ~
|
||||
:_ $(number (dec number))
|
||||
=+ nam=(cat 3 name (scot %ud number))
|
||||
=+ ^- body/json
|
||||
%- jobe
|
||||
:~ name+s+nam
|
||||
'machineType'^s+'zones+us-central1-a+machineTypes+n1-standard-1'
|
||||
:- %disks :- %a :_ ~
|
||||
%- jobe
|
||||
:+ 'initializeParams'^`json`(joba 'sourceImage'^s+image)
|
||||
boot+b+%.y
|
||||
~
|
||||
:- 'networkInterfaces' :- %a :_ ~
|
||||
(joba 'network' `json`[%s 'global+networks+default'])
|
||||
==
|
||||
^- move
|
||||
%- httpreq
|
||||
:* `path`/create-gce
|
||||
`(list cord)`~['googleapis' 'www']
|
||||
`path`/compute/v1/projects/urbcloud/zones/us-central1-a/'instances'
|
||||
[%post `json`body]
|
||||
%^ mo ['Content-Type' 'application+json' ~]
|
||||
['Authorization' (cat 3 'Bearer ' access.gce.toke.vat) ~]
|
||||
~
|
||||
`quay`[%key access.gce.toke.vat]~
|
||||
==
|
||||
::
|
||||
++ thou-create-gce |=({path resp/httr} ~&(resp :_(+>.$ ~)))
|
||||
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
|
||||
:: perform actions on instances (both kinds) ::
|
||||
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
|
||||
++ poke-json :: receive action from client
|
||||
|= jon/json
|
||||
^- {(list move) _+>.$}
|
||||
=+ action=`cloud-command`(need (parse-cloud-command jon))
|
||||
:_ +>.$
|
||||
?- -.action
|
||||
$create-gce [(reserve-ip p.action)]~
|
||||
$create-do [(create-do p.action)]~
|
||||
::$create-gce [(create-gce p.action)]
|
||||
$action [(instance-action [id name act]:action)]~
|
||||
==
|
||||
++ instance-action
|
||||
|= {id/@t name/@t action/droplet-action}
|
||||
=+ d=(~(got by insts.vat) id)
|
||||
~| 'can\'t find id'
|
||||
=+ typ=?~(d !! -.d)
|
||||
?- typ
|
||||
$do
|
||||
=+ ^= meth
|
||||
?: ?=($delete -.action)
|
||||
%delt
|
||||
:- %post
|
||||
%+ jobe type+s+(convert-do -.action)
|
||||
?.(?=($snapshot -.action) ~ [name+s+p.action ~])
|
||||
^- move
|
||||
=+ ^= req
|
||||
%- httpreq :*
|
||||
/do/[-.action]
|
||||
~[%digitalocean %api]
|
||||
?:(?=($delt meth) /v2/droplets/[id] /v2/droplets/[id]/actions)
|
||||
meth
|
||||
%^ mo ['Content-Type' 'application+json' ~]
|
||||
['Authorization' (cat 3 'Bearer ' access.do.toke.vat) ~] ~
|
||||
*quay
|
||||
==
|
||||
req
|
||||
::
|
||||
$gce
|
||||
=+ ^= head-query
|
||||
:- %^ mo ['Content-Type' 'application+json' ~]
|
||||
['Authorization' (cat 3 'Bearer ' access.gce.toke.vat) ~] ~
|
||||
*quay
|
||||
?- -.action
|
||||
?($start $stop $reboot $'snapshot')
|
||||
=+ end=/compute/v1/projects/urbcloud/zones/us-central1-a/instances/[name]
|
||||
%- httpreq
|
||||
:* /gce-act/[-.action] ~['googleapis' 'www']
|
||||
(welp end [?:(?=($reboot -.action) 'reset' -.action) ~])
|
||||
[%post ~]
|
||||
head-query
|
||||
==
|
||||
::
|
||||
$delete
|
||||
=+ end=/compute/v1/projects/urbcloud/zones/us-central1-a/instances/[name]
|
||||
%- httpreq
|
||||
:* /gce-act/[-.action] ~['googleapis' 'www']
|
||||
end
|
||||
%delt
|
||||
head-query
|
||||
==
|
||||
==
|
||||
==
|
||||
++ thou-do-act
|
||||
|= {pax/path resp/httr}
|
||||
~& [resp act+pax]
|
||||
:_ +>.$ ~
|
||||
::
|
||||
++ thou-gce-act
|
||||
|= {pax/path resp/httr}
|
||||
~& [resp act+pax]
|
||||
:_ +>.$ ~
|
||||
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
|
||||
:: retrieve google instances and images ::
|
||||
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
|
||||
++ list-gce
|
||||
^- (list move)
|
||||
:+ (list-something-gce /zones/['us-central1-a']/instances)
|
||||
(list-something-gce /global/snapshots)
|
||||
~
|
||||
::
|
||||
++ list-something-gce
|
||||
|= endpoint/path
|
||||
=+ ^= lis
|
||||
:*
|
||||
/list-gce/[-.endpoint]
|
||||
~[%googleapis %www] (welp /compute/v1/projects/urbcloud endpoint)
|
||||
%get ~
|
||||
^- quay
|
||||
[%'access_token' access.gce.toke.vat]~
|
||||
==
|
||||
~! lis
|
||||
~! +<:httpreq
|
||||
(httpreq lis)
|
||||
::
|
||||
++ thou-list-gce-zones :: instances
|
||||
|= {pax/path resp/httr}
|
||||
^- {(list move) _+>.$}
|
||||
=+ parsed=(rash q:(need r.resp) apex:poja) :: body httr to json
|
||||
~| 'no list received or bad json'
|
||||
=+ items=(need ((ot items+(ar some) ~):jo parsed))
|
||||
=+ ^- ins/(list {@t instance})
|
||||
~| 'bad-json'^items
|
||||
%+ turn items
|
||||
|= in/json
|
||||
=< [id .]
|
||||
^- instance
|
||||
:- %gce
|
||||
%- need
|
||||
%. in =+ jo
|
||||
%- ot
|
||||
:~ name+so
|
||||
id+so
|
||||
status+so
|
||||
'creationTimestamp'^(su parse-iso8601) ::zone+so
|
||||
'machineType'^(cu tail-url so)
|
||||
:: 'networkInterfaces'^parse-ip-gce
|
||||
==
|
||||
=. insts.vat
|
||||
%- mo
|
||||
%+ weld ins
|
||||
%+ skip (~(tap by insts.vat)) :: keep non-gce
|
||||
|=(a/{@t instance} ?=($gce +<.a))
|
||||
=+ buf=`@da`(add ~s10 now)
|
||||
=+ liz=(~(tap by insts.vat))
|
||||
=+ tail=(turn liz |=(a/{@t instance} +.a))
|
||||
:_ +>.$ ::
|
||||
:- [ost %wait /refresh-gce buf]
|
||||
(spam (instance-to-json tail))
|
||||
::
|
||||
++ thou-list-gce-global :: imgs
|
||||
|= {pax/path resp/httr}
|
||||
^- {(list move) _+>.$}
|
||||
=+ parsed=(rash q:(need r.resp) apex:poja)
|
||||
=+ imgz=(need ((ot items+(ar some) ~):jo parsed))
|
||||
=. images.vat
|
||||
%- mo
|
||||
%+ weld
|
||||
%+ skip (~(tap by images.vat) *(list {{@t @t} image}))
|
||||
|=(a/{{@t @t} image} ?=($gce ->.a))
|
||||
%+ turn imgz
|
||||
|= a/json
|
||||
=< [[name %gce] .]
|
||||
^- image
|
||||
:- %gce
|
||||
%- need
|
||||
%. a =+ jo
|
||||
%- ot
|
||||
[name+so id+so ~]
|
||||
:_ +>.$ [(spam `json`(image-to-json `(list image)`(map-to-list images.vat)))]
|
||||
::
|
||||
++ wake-refresh-gce |=({path $~} [list-gce +>.$])
|
||||
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
|
||||
:: list digital ocean droplets and images ::
|
||||
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
|
||||
++ list-do
|
||||
:+((list-something-do %droplets) (list-something-do %images) ~)
|
||||
++ list-something-do
|
||||
|= som/@tas
|
||||
=+ ^= lis
|
||||
:~ /list-do/[som]
|
||||
~[%digitalocean %api]
|
||||
/v2/[som]
|
||||
%get
|
||||
%- mo
|
||||
:~ ['Content-Type' 'application+json' ~]
|
||||
['Authorization' (cat 3 'Bearer ' access.do.toke.vat) ~]
|
||||
==
|
||||
==
|
||||
(httpreq lis)
|
||||
::
|
||||
++ thou-list-do-droplets
|
||||
|= {pax/path resp/httr}
|
||||
^- {(list move) _+>.$}
|
||||
=+ parsed=(rash q:(need r.resp) apex:poja) :: parse httr to json
|
||||
~| receive-list+parsed
|
||||
=+ dar=(need ((ot droplets+(ar some) ~):jo parsed)) :: reparse ar of insts
|
||||
=+ ^- dropz/(list {@t instance})
|
||||
~| bad-json+-.dar
|
||||
%+ turn dar
|
||||
|= drp/json ^- {@t instance}
|
||||
=- ~! - -
|
||||
=< [id .]
|
||||
^- instance
|
||||
:- %do
|
||||
%- need
|
||||
%. drp
|
||||
=+ jo
|
||||
%- ot
|
||||
:~ name+so
|
||||
id+parse-id-text
|
||||
status+so
|
||||
'created_at'^(su parse-iso8601)
|
||||
image+(ot name+so ~)
|
||||
==
|
||||
=. insts.vat
|
||||
%- mo
|
||||
%+ weld dropz
|
||||
%+ skip (~(tap by insts.vat) *(list {@t instance}))
|
||||
|=(a/{@t instance} ?=($do +>.$))
|
||||
=+ buf=`@da`(add ~s10 now)
|
||||
:_ +>.$
|
||||
:- [ost %wait /refresh-do buf]
|
||||
%- spam
|
||||
%- instance-to-json
|
||||
%+ turn (~(tap by insts.vat) *(list {@t instance}))
|
||||
|=(a/{@t instance} +.a)
|
||||
::
|
||||
++ thou-list-do-images
|
||||
|= {pax/path resp/httr}
|
||||
=+ parsed=(rash q:(need r.resp) apex:poja)
|
||||
~| crashed-do-images+parsed
|
||||
=+ ^= imgz
|
||||
%- need
|
||||
((ot images+(ar (ot [name+so distribution+so id+no ~])) ~):jo parsed)
|
||||
=+ ^- images/(list {{@t @t} image})
|
||||
%+ turn imgz
|
||||
|= {name/@t dist/@t id/@t}
|
||||
=+ nom=(cat 3 name dist)
|
||||
[[%do nom] `image`[%do nom id]]
|
||||
=. images.vat
|
||||
%- mo
|
||||
%+ weld images
|
||||
%+ skip (~(tap by images.vat) *(list {{@t @t} image}))
|
||||
|=(a/{{@t @t} image} ?=($do ->.a))
|
||||
:_ +>.$
|
||||
~[(spam `json`(image-to-json `(list image)`(map-to-list images.vat)))]
|
||||
::
|
||||
++ wake-refresh-do |=({path $~} [list-do +>.$])
|
||||
--
|
85
ape/oct1.hoon
Normal file
85
ape/oct1.hoon
Normal file
@ -0,0 +1,85 @@
|
||||
:: :: ::
|
||||
:::: /hoon+oct1/ape :::::: dependencies
|
||||
:: :: ::
|
||||
/? 310 :: arvo version
|
||||
/- sole, oct1 :: structures
|
||||
/+ sole, oct1 :: libraries
|
||||
[. sole oct1] :: ::
|
||||
:: :: ::
|
||||
:::: :::::: interfaces
|
||||
!: :: ::
|
||||
=> |% ::
|
||||
++ axon {$0 eye/face gam/game} :: agent state
|
||||
++ card {$diff $sole-effect sole-effect} :: update
|
||||
++ face (map bone sole-share) :: console state
|
||||
++ move (pair bone card) :: cause and action
|
||||
-- ::
|
||||
:: :: ::
|
||||
:::: :::::: parsers
|
||||
:: :: ::
|
||||
=> |% ::
|
||||
++ colm (cook |=(a/@ (sub a '1')) (shim '1' '3')) :: row or column
|
||||
++ come ;~(plug colm ;~(pfix fas colm)) :: coordinate
|
||||
-- ::
|
||||
:: :: ::
|
||||
:::: :::::: process core
|
||||
:: :: ::
|
||||
|_ $: bowl :: system state
|
||||
moz/(list move) :: pending actions
|
||||
axon :: server state, v0
|
||||
== ::
|
||||
:: :: ::
|
||||
:::: :::::: process tools
|
||||
:: :: ::
|
||||
++ abet [(flop moz) .(moz ~)] :: resolve
|
||||
++ bike $+(_. _+>) :: self-transformer
|
||||
++ dish |=(cad/card %_(+> moz [[ost cad] moz])) :: request
|
||||
++ eels (~(tap by sup)) :: all clients
|
||||
++ echo |= {all/(list sink) fun/bike} =+ old=+>+<- ::
|
||||
|- ^+ +>.^$ ?~ all +>.^$(+<- old) ::
|
||||
=. ost p.i.all ::
|
||||
$(all t.all, +>.^$ (fun +>.^$)) ::
|
||||
++ flap |=(con/bike (echo eels con)) :: update all clients
|
||||
++ here ~(. go gam) :: game core
|
||||
:: :: ::
|
||||
:::: :::::: process logic
|
||||
:: :: ::
|
||||
++ fail (fect %bel ~) :: user error
|
||||
++ fect |=(sole-effect (dish %diff %sole-effect +<)) :: update console
|
||||
++ kick |= point =^ dud gam ~(m at:here +<) ::
|
||||
?.(dud fail wild:kind) ::
|
||||
++ kind =+(res:here ?~(- + (word(gam new:here) ->))) :: move result
|
||||
++ prom (fect %pro %& %oct1 voy:here) :: update prompt
|
||||
++ rend (turn `wall`tab:here |=(tape txt++<)) :: table print
|
||||
++ sawn .(eye (~(del by eye) ost)) :: console unsubscribe
|
||||
++ seen .(eye (~(put by eye) ost *sole-share)) :: console subscribe
|
||||
++ show prom:(fect %mor rend) :: update console
|
||||
++ tame (flap |=(_. prom:+<)) :: light update
|
||||
++ wild (flap |=(_. show:+<)) :: full update
|
||||
++ word |=(tape (flap |=(_+> (fect:+< txt++>+<)))) ::
|
||||
:: :: ::
|
||||
:::: :::::: process UI
|
||||
:: :: ::
|
||||
++ work :: console action
|
||||
|= act/sole-action ::
|
||||
=+ say=(~(got by eye) ost) ::
|
||||
|^ ?+(-.act abet $det (delt +.act), $ret dive) ::
|
||||
++ abet ..work(eye (~(put by eye) ost say)) :: resolve
|
||||
++ delt |= cal/sole-change :: edit command line
|
||||
=^ cul say (~(remit sole say) cal good) ::
|
||||
?~(cul abet fail:(fect:abet det+u.cul)) ::
|
||||
++ dive =+ (rust (tufa buf.say) (punt come)) :: apply command line
|
||||
?~(- fail ?~(-> show (kick:wipe ->+))) ::
|
||||
++ good |=((list @c) -:(rose (tufa +<) come)) :: validate input
|
||||
++ wipe =^ cal say (~(transmit sole say) set+~) :: clear line
|
||||
(fect:abet %det cal) ::
|
||||
-- ::
|
||||
:: :: ::
|
||||
:::: :::::: arvo handlers
|
||||
:: :: ::
|
||||
++ peer-sole |=(* abet:show:seen) :: console subscribe
|
||||
++ prep |= (unit (pair (list move) axon)) :: update self
|
||||
abet:?~(+< +> wild(+<+ +<+)) ::
|
||||
++ poke-sole-action |=(sole-action abet:(work +<)) :: console input
|
||||
++ pull-sole |=(* abet:sawn) :: console unsubscribe
|
||||
--
|
103
ape/oct2.hoon
Normal file
103
ape/oct2.hoon
Normal file
@ -0,0 +1,103 @@
|
||||
:: :: ::
|
||||
:::: /hoon+oct2/ape :::::: dependencies
|
||||
:: :: ::
|
||||
/? 310 :: arvo version
|
||||
/- sole, oct2 :: structures
|
||||
/+ sole, oct2 :: libraries
|
||||
[. sole oct2] :: ::
|
||||
:: :: ::
|
||||
:::: :::::: interfaces
|
||||
!: :: ::
|
||||
=> |% ::
|
||||
++ axle {eye/face gam/game} :: agent state
|
||||
++ card $% {$diff lime} :: update
|
||||
{$quit $~} :: cancel
|
||||
== ::
|
||||
++ face (map bone sole-share) :: console state
|
||||
++ lime {$sole-effect sole-effect} :: :sole update
|
||||
++ move (pair bone card) :: cause and action
|
||||
-- ::
|
||||
:: :: ::
|
||||
:::: :::::: past state
|
||||
:: :: ::
|
||||
=> |% ::
|
||||
++ axon $%({$1 axle} {$0 axle-0}) :: all states
|
||||
++ axle-0 {eye/face gam/game-0} :: old axle
|
||||
++ game-0 {who/? box/board boo/board} :: old game
|
||||
++ wake |= axon :- %1 ?- +<- $1 +<+ :: rough upgrade
|
||||
$0 [eye [who ~^~ ~ box boo]:gam]:+<+ ::
|
||||
== -- ::
|
||||
:: :: ::
|
||||
:::: :::::: parsers
|
||||
:: :: ::
|
||||
=> |% ::
|
||||
++ colm (cook |=(a/@ (sub a '1')) (shim '1' '3')) :: row or column
|
||||
++ come ;~(plug colm ;~(pfix fas colm)) :: coordinate
|
||||
++ cope |=(? ?:(+< (stag %| (cold ~ sig)) come)) :: with wait mode
|
||||
-- ::
|
||||
:: :: ::
|
||||
:::: :::::: process core
|
||||
:: :: ::
|
||||
|_ $: bowl ::
|
||||
moz/(list move) :: pending actions
|
||||
{$1 axle} :: process state v1
|
||||
== ::
|
||||
:: :: ::
|
||||
:::: :::::: process tools
|
||||
:: :: ::
|
||||
++ abet [(flop moz) .(moz ~)] :: resolve
|
||||
++ bike $+(_. _+>) :: self-transformer
|
||||
++ dish |=(cad/card %_(+> moz [[ost cad] moz])) :: request
|
||||
++ echo |= {all/(list sink) fun/bike} =+ old=+>+<- :: publish to all
|
||||
|- ^+ +>.^$ ?~ all +>.^$(+<- old) ::
|
||||
=> .(ost p.i.all, src q.i.all) ::
|
||||
$(all t.all, +>.^$ (fun +>.^$)) ::
|
||||
++ flap |=(con/bike (echo (~(tap by sup)) con)) :: update all clients
|
||||
++ here ~(. go src gam) :: game core
|
||||
:: :: ::
|
||||
:::: :::::: server logic
|
||||
:: :: ::
|
||||
++ fail (fect %bel ~) :: user error
|
||||
++ fect |=(sole-effect (dish %diff %sole-effect +<)) :: update console
|
||||
++ heal |= old/axon =. +>+<+> (wake old) :: complete update
|
||||
=- +>.$(gam -) ?. !=(1 +<-) gam ::
|
||||
(muy:here (turn (~(tap by sup)) |=(sink q))) ::
|
||||
++ kick |= point =^ dud gam ~(m at:here +<) ::
|
||||
?.(dud fail wild:kind) ::
|
||||
++ kind =+(res:here ?~(- + (word(gam new:here) ->))) :: move result
|
||||
++ hail |=(? tame(gam (hey:here +<))) :: toggle subscriber
|
||||
++ prom (fect %pro %& %oct2 voy:here) :: update prompt
|
||||
++ rend (turn `wall`tab:here |=(tape txt++<)) :: table print
|
||||
++ sawn (hail(eye (~(del by eye) ost)) |) :: console unsubscribe
|
||||
++ seen (hail(eye (~(put by eye) ost *sole-share)) &) :: console subscribe
|
||||
++ show prom:(fect %mor rend) :: update console
|
||||
++ tame (flap |=(_. prom:+<)) :: light update
|
||||
++ wild (flap |=(_. show:+<)) :: full update
|
||||
++ word |=(tape (flap |=(_+> (fect:+< txt++>+<)))) ::
|
||||
:: :: ::
|
||||
:::: :::::: console UI
|
||||
:: :: ::
|
||||
++ work :: console action
|
||||
|= act/sole-action ::
|
||||
=+ say=(~(got by eye) ost) ::
|
||||
|^ ?+(-.act abet $det (delt +.act), $ret dive) ::
|
||||
++ abet ..work(eye (~(put by eye) ost say)) :: resolve
|
||||
++ cusp (cope !ept:here) :: parsing rule
|
||||
++ delt |= cal/sole-change :: edit command line
|
||||
=^ cul say (~(remit sole say) cal good) ::
|
||||
?~(cul abet fail:(fect:abet det+u.cul)) ::
|
||||
++ dive =+ (rust (tufa buf.say) (punt come)) :: apply command line
|
||||
?~(- fail ?~(-> show (kick:wipe ->+))) ::
|
||||
++ good |=((list @c) -:(rose (tufa +<) cusp)) :: validate input
|
||||
++ wipe =^ cal say (~(transmit sole say) set+~) :: clear line
|
||||
(fect:abet %det cal) ::
|
||||
-- ::
|
||||
:: :: ::
|
||||
:::: :::::: arvo handlers
|
||||
:: :: ::
|
||||
++ peer-sole |=(* abet:show:seen) :: console subscribe
|
||||
++ poke-sole-action |=(sole-action abet:(work +<)) :: console input
|
||||
++ prep |= (unit (pair (list move) axon)) :: update self
|
||||
abet:?~(+< +> wild:(heal +<+>)) ::
|
||||
++ pull-sole |=(* abet:sawn) :: console unsubscribe
|
||||
--
|
116
ape/oct3.hoon
Normal file
116
ape/oct3.hoon
Normal file
@ -0,0 +1,116 @@
|
||||
:: :: ::
|
||||
:::: /hoon+oct3/ape :::::: dependencies
|
||||
:: :: ::
|
||||
/? 310 :: arvo version
|
||||
/- sole, oct3 :: structures
|
||||
/+ sole, oct3 :: libraries
|
||||
[. sole oct3] :: ::
|
||||
:: :: ::
|
||||
:::: :::::: interfaces
|
||||
!: :: ::
|
||||
=> |% ::
|
||||
++ axle {eye/face gam/game} :: agent state
|
||||
++ card $% {$diff lime} :: update
|
||||
{$quit $~} :: cancel
|
||||
== ::
|
||||
++ face (map bone sole-share) :: console state
|
||||
++ lime $% {$sole-effect sole-effect} :: :sole update
|
||||
{$oct3-update play} :: :oct3 update
|
||||
== ::
|
||||
++ move (pair bone card) :: cause and action
|
||||
-- ::
|
||||
:: :: ::
|
||||
:::: :::::: past state
|
||||
:: :: ::
|
||||
=> |% ::
|
||||
++ axon $%({$1 axle} {$0 axle-0}) :: all states
|
||||
++ axle-0 {eye/face gam/game-0} :: old axle
|
||||
++ game-0 {who/? box/board boo/board} :: old game
|
||||
++ wake |= axon :- %1 ?- +<- $1 +<+ :: coarse upgrade
|
||||
$0 [eye [who ~^~ ~ box boo]:gam]:+<+ ::
|
||||
== -- ::
|
||||
:: :: ::
|
||||
:::: :::::: parsers
|
||||
:: :: ::
|
||||
=> |% ::
|
||||
++ colm (cook |=(a/@ (sub a '1')) (shim '1' '3')) :: row or column
|
||||
++ come ;~(plug colm ;~(pfix fas colm)) :: coordinate
|
||||
++ cope |=(? ?:(+< (stag %| (cold ~ sig)) come)) :: with wait mode
|
||||
-- ::
|
||||
:: :: ::
|
||||
:::: :::::: process core
|
||||
:: :: ::
|
||||
|_ $: bowl ::
|
||||
moz/(list move) :: pending actions
|
||||
{$1 axle} :: process state v1
|
||||
== ::
|
||||
:: :: ::
|
||||
:::: :::::: process tools
|
||||
:: :: ::
|
||||
++ abet [(flop moz) .(moz ~)] :: resolve
|
||||
++ bike $+(_. _+>) :: self-transformer
|
||||
++ dish |=(cad/card %_(+> moz [[ost cad] moz])) :: request
|
||||
++ echo |= {all/(list sink) fun/bike} =+ old=+>+<- :: publish to all
|
||||
|- ^+ +>.^$ ?~ all +>.^$(+<- old) ::
|
||||
=> .(ost p.i.all, src q.i.all) ::
|
||||
$(all t.all, +>.^$ (fun +>.^$)) ::
|
||||
++ eels (~(tap by sup)) :: all clients
|
||||
++ elfs (prey /oct3 +<-) :: network clients
|
||||
++ elks (prey /sole +<-) :: console clients
|
||||
++ flap |= {net/bike con/bike} :: update all clients
|
||||
(echo:(echo elks con) elfs net) ::
|
||||
++ here ~(. go src gam) :: game core
|
||||
:: :: ::
|
||||
:::: :::::: server logic
|
||||
:: :: ::
|
||||
++ fail ?:(soul (fect %bel ~) ~|(%invalid-move !!)) :: user error
|
||||
++ fect |=(sole-effect (dish %diff %sole-effect +<)) :: update console
|
||||
++ fact |=(play (dish %diff %oct3-update +<)) :: update partner
|
||||
++ hail |=(? tame(gam (hey:here +<))) :: toggle subscriber
|
||||
++ heal |= old/axon =. +>+<+> (wake old) :: complete update
|
||||
=- +>.$(gam -) ?. !=(1 +<-) gam ::
|
||||
(muy:here (turn eels |=(sink q))) ::
|
||||
++ kick |= point =^ dud gam ~(m at:here +<) ::
|
||||
?.(dud fail wild:kind) ::
|
||||
++ kind =+(res:here ?~(- + (word(gam new:here) ->))) :: move result
|
||||
++ prom (fect %pro %& %oct3 voy:here) :: update prompt
|
||||
++ rend (turn `wall`tab:here |=(tape txt++<)) :: table print
|
||||
++ sawn (hail(eye (~(del by eye) ost)) |) :: console unsubscribe
|
||||
++ seen (hail(eye (~(put by eye) ost *sole-share)) &) :: console subscribe
|
||||
++ show prom:(fect %mor rend) :: update console
|
||||
++ soul =+((~(get by sup) ost) ?=([~ * %sole *] -)) :: is console
|
||||
++ tame (flap |=(_. (fact:+< &/gam)) |=(_. prom:+<)) :: light update
|
||||
++ wild (flap |=(_. (fact:+< &/gam)) |=(_. show:+<)) :: full update
|
||||
++ word |= txt/tape %+ flap :: game message
|
||||
|=(_+> (fact:+< |/txt)) ::
|
||||
|=(_+> (fect:+< txt+txt)) ::
|
||||
:: :: ::
|
||||
:::: :::::: console UI
|
||||
:: :: ::
|
||||
++ work :: console action
|
||||
|= act/sole-action ::
|
||||
=+ say=(~(got by eye) ost) ::
|
||||
|^ ?+(-.act abet $det (delt +.act), $ret dive) ::
|
||||
++ abet ..work(eye (~(put by eye) ost say)) :: resolve
|
||||
++ cusp (cope !ept:here) :: parsing rule
|
||||
++ delt |= cal/sole-change :: edit command line
|
||||
=^ cul say (~(remit sole say) cal good) ::
|
||||
?~(cul abet fail:(fect:abet det+u.cul)) ::
|
||||
++ dive =+ (rust (tufa buf.say) (punt come)) :: apply command line
|
||||
?~(- fail ?~(-> show (kick:wipe ->+))) ::
|
||||
++ good |=((list @c) -:(rose (tufa +<) cusp)) :: validate input
|
||||
++ wipe =^ cal say (~(transmit sole say) set+~) :: clear line
|
||||
(fect:abet %det cal) ::
|
||||
-- ::
|
||||
:: :: ::
|
||||
:::: :::::: arvo handlers
|
||||
:: :: ::
|
||||
++ peer-oct3 |=(* abet:tame:(hail &)) :: urbit subscribe
|
||||
++ peer-sole |=(* abet:show:seen) :: console subscribe
|
||||
++ poke-sole-action |=(sole-action abet:(work +<)) :: console input
|
||||
++ poke-oct3-move |=(point abet:wild:(kick +<)) :: urbit move
|
||||
++ prep |= (unit (pair (list move) axon)) :: update self
|
||||
abet:?~(+< +> wild:(heal +<+>)) ::
|
||||
++ pull-oct3 |=(* abet:(hail |)) :: urbit unsubscribe
|
||||
++ pull-sole |=(* abet:sawn) :: console unsubscribe
|
||||
--
|
139
ape/oct4.hoon
Normal file
139
ape/oct4.hoon
Normal file
@ -0,0 +1,139 @@
|
||||
:: :: ::
|
||||
:::: /hoon+oct4/ape :::::: dependencies
|
||||
:: :: ::
|
||||
/? 310 :: arvo version
|
||||
/- sole, oct4 :: structures
|
||||
/+ sole, oct4 :: libraries
|
||||
[. sole oct4] :: ::
|
||||
:: :: ::
|
||||
:::: :::::: interfaces
|
||||
!: :: ::
|
||||
=> |% ::
|
||||
++ axle {eye/face rem/(unit ship) gam/game} :: agent state
|
||||
++ card $% {$diff lime} :: update
|
||||
{$quit $~} :: cancel
|
||||
{$peer wire dock path} :: subscribe
|
||||
{$poke wire dock pear} :: send move
|
||||
{$pull wire dock $~} :: unsubscribe
|
||||
== ::
|
||||
++ face (map bone sole-share) :: console state
|
||||
++ lime $% {$sole-effect sole-effect} :: :sole update
|
||||
{$oct4-update play} :: :oct4 update
|
||||
== ::
|
||||
++ move (pair bone card) :: cause and action
|
||||
++ pear {$oct4-move point} :: outgoing move
|
||||
-- ::
|
||||
:: :: ::
|
||||
:::: :::::: past state
|
||||
:: :: ::
|
||||
=> |% ::
|
||||
++ agon (unit {(list move) axon}) :: boot argument
|
||||
++ axon $%({$1 axle} {$0 axle-0}) :: all states
|
||||
++ axle-0 {eye/face gam/game-0} :: old axle
|
||||
++ game-0 {who/? box/board boo/board} :: old game
|
||||
++ wake |= axon :- %1 ?- +<- $1 +<+ :: coarse upgrade
|
||||
$0 [eye ~ [who ~^~ ~ box boo]:gam]:+<+ ::
|
||||
== -- ::
|
||||
:: :: ::
|
||||
:::: :::::: parsers
|
||||
:: :: ::
|
||||
=> |% ::
|
||||
++ colm (cook |=(a/@ (sub a '1')) (shim '1' '3')) :: row or column
|
||||
++ come ;~(plug colm ;~(pfix fas colm)) :: coordinate
|
||||
++ comb (pick come ;~(pfix sig (punt fed:ag))) :: all command input
|
||||
++ cope |=(? ?:(+< (stag %| (cold ~ sig)) comb)) :: with wait mode
|
||||
-- ::
|
||||
:: :: ::
|
||||
:::: :::::: process core
|
||||
:: :: ::
|
||||
|_ $: bowl ::
|
||||
moz/(list move) :: pending actions
|
||||
{$1 axle} :: process state v1
|
||||
== ::
|
||||
:: :: ::
|
||||
:::: :::::: process tools
|
||||
:: :: ::
|
||||
++ abet [(flop moz) .(moz ~)] :: resolve
|
||||
++ bike $+(_. _+>) :: self-transformer
|
||||
++ dish |=(cad/card %_(+> moz [[ost cad] moz])) :: request
|
||||
++ done (echo eels |=(_. (dish:+< %quit ~))) :: cancel everyone
|
||||
++ echo |= {all/(list sink) fun/bike} =+ old=+>+<- :: publish to all
|
||||
|- ^+ +>.^$ ?~ all +>.^$(+<- old) ::
|
||||
=> .(ost p.i.all, src q.i.all) ::
|
||||
$(all t.all, +>.^$ (fun +>.^$)) ::
|
||||
++ eels (~(tap by sup)) :: all clients
|
||||
++ elfs (prey /oct4 +<-) :: network clients
|
||||
++ elks (prey /sole +<-) :: console clients
|
||||
++ emit |=(lime (dish %diff +<)) :: publish
|
||||
++ flap |= {net/bike con/bike} :: update all clients
|
||||
(echo:(echo elks con) elfs net) ::
|
||||
++ here ~(. go src gam) :: game core
|
||||
:: :: ::
|
||||
:::: :::::: server logic
|
||||
:: :: ::
|
||||
++ fail ?:(soul (fect %bel ~) ~|(%invalid-move !!)) :: user error
|
||||
++ fect |=(sole-effect (emit %sole-effect +<)) :: update console
|
||||
++ fact |=(play (emit %oct4-update +<)) :: update partner
|
||||
++ hail |=(? ?^(rem +> tame(gam (hey:here +<)))) :: toggle subscriber
|
||||
++ harp |=(game ?:(=(gam +<) +> wild(gam +<))) :: update game
|
||||
++ heal |= old/axon =. +>+<+> (wake old) :: complete update
|
||||
=- +>.$(gam -) ?. !=(1 +<-) gam ::
|
||||
(muy:here (turn eels |=(sink q))) ::
|
||||
++ hear |=(play ?-(+<- $| (word +<+), $& (harp +<+))) :: network update
|
||||
++ kick |= point =^ dud gam ~(m at:here +<) ::
|
||||
?.(dud fail wild:?~(rem kind (send +>-))) ::
|
||||
++ kind =+(res:here ?~(- + (word(gam new:here) ->))) :: move result
|
||||
++ plan |= (unit ship) ?~ +< stop(gam new:here) :: link+unlink
|
||||
?^(rem fail link(rem +<)) ::
|
||||
++ plot |= (each point (unit ship)) :: apply command
|
||||
?-(+<- $& (kick +<+), $| (plan +<+)) ::
|
||||
++ like |*(* [/oct4 [+.rem dap] +<]) :: friend message
|
||||
++ link (dish peer+(like /oct4)) :: subscribe to friend
|
||||
++ prom (fect %pro %& %oct4 stat) :: update prompt
|
||||
++ rend (turn `wall`tab:here |=(tape txt++<)) :: table print
|
||||
++ sawn (hail(eye (~(del by eye) ost)) |) :: console unsubscribe
|
||||
++ seen (hail(eye (~(put by eye) ost *sole-share)) &) :: console subscribe
|
||||
++ send |=(point (dish poke+(like %oct4-move +<))) :: send move
|
||||
++ show prom:(fect %mor rend) :: update console
|
||||
++ soul =+((~(get by sup) ost) ?=([~ * %sole *] -)) :: is console
|
||||
++ stat (weld ?~(rem ~ "@{(scow p+u.rem)}") voy:here) :: prompt line
|
||||
++ stop ?~(rem done wild:(dish pull+(like ~))) :: unsubscribe
|
||||
++ tame (flap |=(_. (fact:+< &/gam)) |=(_. prom:+<)) :: light update
|
||||
++ wild (flap |=(_. (fact:+< &/gam)) |=(_. show:+<)) :: full update
|
||||
++ with |=(? (word(rem ?:(+< rem ~)) "{<[+< src]>}")) ::
|
||||
++ word |= txt/tape %+ flap :: game message
|
||||
|=(_+> (fact:+< |/txt)) ::
|
||||
|=(_+> (fect:+< txt+txt)) ::
|
||||
:: :: ::
|
||||
:::: :::::: console UI
|
||||
:: :: ::
|
||||
++ work :: console action
|
||||
|= act/sole-action ::
|
||||
=+ say=(~(got by eye) ost) ::
|
||||
|^ ?+(-.act abet $det (delt +.act), $ret dive) ::
|
||||
++ abet ..work(eye (~(put by eye) ost say)) :: resolve
|
||||
++ cusp (cope !ept:here) :: parsing rule
|
||||
++ delt |= cal/sole-change :: edit command line
|
||||
=^ cul say (~(remit sole say) cal good) ::
|
||||
?~(cul abet fail:(fect:abet det+u.cul)) ::
|
||||
++ dive =+ (rust (tufa buf.say) (punt comb)) :: apply command line
|
||||
?~(- fail ?~(-> show (plot:wipe ->+))) ::
|
||||
++ good |=((list @c) -:(rose (tufa +<) cusp)) :: validate input
|
||||
++ wipe =^ cal say (~(transmit sole say) set+~) :: clear line
|
||||
(fect:abet %det cal) ::
|
||||
-- ::
|
||||
:: :: ::
|
||||
:::: :::::: arvo handlers
|
||||
:: :: ::
|
||||
++ reap-oct4 |=({* (unit)} abet:(with =(~ +<+))) :: linked to friend
|
||||
++ coup-oct4 |=({* (unit)} abet:?~(+<+ +> fail)) :: move acknowledge
|
||||
++ diff-oct4-update |=({* play} abet:(hear +<+)) :: network update
|
||||
++ peer-oct4 |=(* abet:tame:(hail &)) :: urbit subscribe
|
||||
++ peer-sole |=(* abet:show:seen) :: console subscribe
|
||||
++ poke-sole-action |=(sole-action abet:(work +<)) :: console input
|
||||
++ poke-oct4-move |=(point abet:wild:(kick +<)) :: urbit move
|
||||
++ prep |=(agon abet:?~(+< +> (heal +<+>))) :: load state
|
||||
++ pull-oct4 |=(* abet:(hail |)) :: urbit unsubscribe
|
||||
++ pull-sole |=(* abet:sawn) :: console unsubscribe
|
||||
++ quit-oct4 |=(* abet:?~(rem +> wild(rem ~))) :: unlinked by friend
|
||||
--
|
8
ape/twif.hoon
Normal file
8
ape/twif.hoon
Normal file
@ -0,0 +1,8 @@
|
||||
/- twitter
|
||||
!:
|
||||
[twitter .]
|
||||
|_ [bowl ~]
|
||||
++ poke-noun |=(span (onwards [%peer / [our %twit] /user+[+<]]))
|
||||
++ onwards |*({mark *} [[ost +<]~ +>.$])
|
||||
++ diff-twit-feed |=({* a/(list twit-stat)} ?~(a `+>.$ ~&(i.a $(a t.a))))
|
||||
--
|
221
ape/twit.hoon
Normal file
221
ape/twit.hoon
Normal file
@ -0,0 +1,221 @@
|
||||
:: Twitter daemon
|
||||
::
|
||||
:::: /hook+core+twit+app
|
||||
::
|
||||
/- twitter
|
||||
/+ twitter, talk
|
||||
::
|
||||
:::: ~fyr
|
||||
::
|
||||
[twitter .]
|
||||
|%
|
||||
++ twit-path :: valid peer path
|
||||
$% :: [%home $~] :: home timeline
|
||||
{$user p/@t $~} :: user's tweets
|
||||
{$post p/span $~} :: status of status
|
||||
==
|
||||
::
|
||||
++ axle :: app state
|
||||
$: $0
|
||||
kes/(map span keys:twit-do) :: auth
|
||||
out/(map @uvI (each {span cord} stat)) :: sent tweets
|
||||
ran/(map path {p/@ud q/@da}) :: polls active
|
||||
fed/(jar path stat) :: feed cache
|
||||
==
|
||||
::
|
||||
++ gift :: subscription action
|
||||
$% {$quit $~} :: terminate
|
||||
{$diff gilt} :: send data
|
||||
==
|
||||
++ gilt
|
||||
$% {$twit-feed p/(list stat)} :: posts in feed
|
||||
{$twit-stat p/stat} :: tweet accepted
|
||||
{$ares term (list tank)}
|
||||
==
|
||||
::
|
||||
++ move {bone card}
|
||||
++ card :: arvo request
|
||||
$? gift
|
||||
$% {$them path $~ u/hiss} :: HTTP request
|
||||
{$poke wire dock $talk-command command:talk} ::
|
||||
{$wait path p/@da} :: timeout
|
||||
== ==
|
||||
::
|
||||
++ sign :: arvo response
|
||||
$% {$e $thou p/httr} :: HTTP result
|
||||
{$t $wake $~} :: timeout ping
|
||||
==
|
||||
::
|
||||
++ stat twit-stat :: recieved tweet
|
||||
--
|
||||
!:
|
||||
::::
|
||||
::
|
||||
|_ {bowl axle}
|
||||
++ any-auth ?~(kes (auth) (auth p.n.kes)) :: use any keys
|
||||
++ auth :: build API door
|
||||
|= a/span
|
||||
~| [%no-auth a]
|
||||
~(. twit (~(got by kes) a) now `@`eny)
|
||||
::
|
||||
++ cull :: remove seen tweets
|
||||
|= {pax/path rep/(list stat)} ^+ rep
|
||||
=+ pev=(sa (turn (~(get ja fed) pax) |=(stat id)))
|
||||
(skip rep |=(stat (~(has in pev) id)))
|
||||
::
|
||||
++ done [*(list move) .]
|
||||
++ dely :: next polling timeout
|
||||
|= pax/path
|
||||
^- {(unit time) _ran}
|
||||
=+ cur=(~(get by ran) pax)
|
||||
=+ tym=(add now (mul ~s8 (bex ?~(cur 0 p.u.cur))))
|
||||
:: ~& dely+`@dr`(sub tym now)
|
||||
?: &(?=(^ cur) (gte tym q.u.cur) (gth q.u.cur now))
|
||||
[~ ran]
|
||||
[`tym (~(put by ran) pax ?~(cur 0 (min 5 +(p.u.cur))) tym)]
|
||||
::
|
||||
++ wait :: ensure poll by path
|
||||
|= {pax/path mof/(list move)}
|
||||
=^ tym ran (dely pax)
|
||||
:_ +>.$
|
||||
?~ tym
|
||||
:: ~& no-wait+ran
|
||||
mof
|
||||
:: ~& will-wait+u.tym
|
||||
:- [ost %wait pax u.tym]
|
||||
mof
|
||||
::
|
||||
++ poke-twit-do :: recieve request
|
||||
|= act/twit-do
|
||||
^+ [*(list move) +>]
|
||||
?- -.q.act
|
||||
$auth
|
||||
:- [(print "authed @{(trip p.act)}")]~
|
||||
+>.$(kes (~(put by kes) p.act p.q.act)) :: XX verify key
|
||||
$post
|
||||
=: out (~(put by out) p.q.act %& p.act q.q.act)
|
||||
ran (~(del by ran) /peer+home)
|
||||
==
|
||||
%+ wait /peer+home
|
||||
=+ mez=(stat-upda:(auth p.act) [%status q.q.act]~ ~)
|
||||
[ost %them /post+(scot %uv p.q.act) ~ mez]~
|
||||
==
|
||||
::
|
||||
++ wake-peer
|
||||
|= {pax/path ~} ^+ done
|
||||
~& twit-wake+peer+pax
|
||||
:_ +>.$
|
||||
?. (~(has by ran) peer+pax) :: ignore if retracted
|
||||
~
|
||||
=+ => |=({a/bone @ b/path} [b a])
|
||||
pus=(~(gas ju *(jug path bone)) (turn (~(tap by sup)) .))
|
||||
?~ (~(get ju pus) pax)
|
||||
~
|
||||
~& peer-again+[pax ran]
|
||||
(pear | our pax)
|
||||
::
|
||||
++ thou
|
||||
|= {pax/path hit/httr} ^+ done
|
||||
?+ p.hit ~|([%unknown-code p.hit] !!)
|
||||
429 :: Rate-limit
|
||||
=. ran (~(put by ran) pax 6 now)
|
||||
=+ lim=%.(%x-rate-limit-reset ;~(biff ~(get by (mo q.hit)) poja ni:jo))
|
||||
=+ tym=?~(lim (add ~m7.s30 now) (add ~1970.1.1 (mul ~s1 u.lim)))
|
||||
~& retrying-in+`@dr`(sub tym now)
|
||||
:_(+>.$ [ost %wait pax tym]~)
|
||||
::
|
||||
200 :: OK
|
||||
=+ jon=(need (poja q:(need r.hit)))
|
||||
:: ~& twit-resp+%.(jon ?+(-.jon !! %o stat:twir, %a (ar:jo stat:twir)))
|
||||
?+ pax ~|([%http-missed pax] !!)
|
||||
{$post @ $~} :: post acknowledged
|
||||
=+ ^= rep
|
||||
~| [%bad-post jon]
|
||||
(need %.(jon stat:twir))
|
||||
=. out (~(put by out) (slav %uv i.t.pax) %| rep)
|
||||
:_ +>.$
|
||||
=+ pax=/[who.rep]/status+(rsh 3 2 (scot %ui id.rep))
|
||||
:- (print (earn [& ~ `/com+twitter] `pax ~))
|
||||
(spam pax (tweet-good rep))
|
||||
::
|
||||
{$peer *} :: feed data
|
||||
=+ ^= rep
|
||||
~| [%bad-feed jon]
|
||||
(need %.(jon (ar:jo stat:twir)))
|
||||
:: ~& got-feed+[(scag 5 (turn rep |=(stat id))) fed]
|
||||
=+ ren=(cull t.pax rep) :: new messages
|
||||
?~ ren
|
||||
(wait pax ~) :: pump polling
|
||||
:: ~& spam-feed+ren
|
||||
=: ran (~(del by ran) pax) :: clear poll delay
|
||||
fed (~(put by fed) t.pax rep) :: saw last message
|
||||
==
|
||||
(wait pax (spam t.pax [%diff twit-feed+(flop ren)] ~))
|
||||
==
|
||||
::
|
||||
?($400 $401 $403 $404) :: Err
|
||||
=+ ^- git/gift
|
||||
=+ err=%.(q:(need r.hit) ;~(biff poja mean:twir))
|
||||
:^ %diff %ares %bad-http
|
||||
[leaf+"HTTP Code {<p.hit>}" (turn (need err) mean:twip)]
|
||||
?+ pax [[ost git]~ +>.$]
|
||||
{$post @ ~}
|
||||
[(spam pax git ~) +>.$]
|
||||
==
|
||||
==
|
||||
++ tweet-good |=(rep/stat `(list gift)`~[[%diff %twit-stat rep] [%quit ~]])
|
||||
++ peer |=(pax/path :_(+> (pear & src pax))) :: accept subscription
|
||||
++ pear :: poll, possibly returning current data
|
||||
|= {ver/? @ pax/path}
|
||||
^- (list move)
|
||||
?. ?=(twit-path pax)
|
||||
~|([%missed-path pax] !!)
|
||||
=> .(pax `twit-path`pax)
|
||||
?: ?=($post -.pax)
|
||||
?. ver ~
|
||||
=+ sta=(~(get by out) (slav %uv p.pax))
|
||||
?. ?=({$~ $| ^} sta) :: post not received
|
||||
~
|
||||
~[[ost %diff %twit-stat p.u.sta] [ost %quit ~]]
|
||||
=+ ole=(~(get ja fed) pax)
|
||||
:_ ^- (list move)
|
||||
?. ver ~
|
||||
?~ ole ~
|
||||
[ost %diff %twit-feed (flop ole)]~
|
||||
=- `move`[ost %them peer+pax ~ `hiss`-]
|
||||
=+ opt=?~(ole ~ ['since_id' (lutt:twit id.i.ole)]~)
|
||||
=+ aut=any-auth
|
||||
?- -.pax
|
||||
$user (stat-user:aut [(to-sd p.pax)]~ opt)
|
||||
:: $home (stat-home:auth ~ opt)
|
||||
==
|
||||
::
|
||||
++ to-sd :: parse user name+numb
|
||||
|= a/span ^- sd:twit
|
||||
~| [%not-user a]
|
||||
%+ rash a
|
||||
;~(pose (stag %user-id dem) (stag %screen-name user:twir))
|
||||
::
|
||||
:: ++ pull :: release subscription
|
||||
:: |= ost/bone
|
||||
:: ?. (~(has by sup) ost) `+>.$ :: XX should not occur
|
||||
:: =+ [his pax]=(~(got by sup) ost)
|
||||
:: ?: (lth 1 ~(wyt in (~(get ju pus) pax)))
|
||||
:: `+>.$
|
||||
:: =: ran (~(del by ran) [%peer pax])
|
||||
:: fed (~(del by fed) pax)
|
||||
:: ==
|
||||
:: `+>.$
|
||||
::
|
||||
++ spam :: send by path
|
||||
|= {a/path b/(list gift)} ^- (list move)
|
||||
%- zing ^- (list (list move))
|
||||
%+ turn (~(tap by sup))
|
||||
|= {ost/bone @ pax/path}
|
||||
?. =(pax a) ~
|
||||
(turn b |=(c/gift [ost c]))
|
||||
::
|
||||
++ print
|
||||
|= mes/tape
|
||||
[ost %poke / [our %talk] (said:^talk our %twit now eny leaf+mes ~)]
|
||||
--
|
337
ape/work.hoon
Normal file
337
ape/work.hoon
Normal file
@ -0,0 +1,337 @@
|
||||
::
|
||||
::::
|
||||
::
|
||||
/? 314
|
||||
/- work
|
||||
/+ talk
|
||||
!:
|
||||
::::
|
||||
::
|
||||
[. work]
|
||||
|%
|
||||
++ move (pair bone card) :: all actions
|
||||
++ card :: general card
|
||||
$% {$diff $work-report client} ::
|
||||
{$peer wire dock path} ::
|
||||
{$poke wire dock pear} ::
|
||||
== ::
|
||||
++ pear :: poke fruit
|
||||
$% {$talk-command command:talk} ::
|
||||
== ::
|
||||
--
|
||||
!:
|
||||
::::
|
||||
::
|
||||
|_ $: bowl
|
||||
client
|
||||
connected/? :: subscribed to talk
|
||||
count/@ud :: / messages from talk
|
||||
unordered/(map {@uvH @u} (pair ship flesh:work-stuff:talk))
|
||||
==
|
||||
++ at
|
||||
|= client-task
|
||||
=| moves/(list move)
|
||||
|%
|
||||
++ abet
|
||||
^- {(list move) _+>.$}
|
||||
[(flop moves) +>.$(tasks (~(put by tasks) id.tax +<.$))]
|
||||
::
|
||||
++ abut
|
||||
^- {(list move) _+>.$}
|
||||
[(flop moves) +>.$]
|
||||
::
|
||||
++ send-audience
|
||||
|= {to/(set station:talk) action/duty:work-stuff:talk}
|
||||
%_ +>.$
|
||||
eny (sham eny action)
|
||||
moves
|
||||
:_ moves
|
||||
^- move
|
||||
:* ost %poke
|
||||
/sending+(scot %uv id.tax)/(scot %ud version.tax)
|
||||
[our %talk]
|
||||
%talk-command
|
||||
=> [. talk] ^- command:talk
|
||||
:- %publish
|
||||
|- ^- (list thought)
|
||||
:_ ~
|
||||
:+ (shaf %task eny)
|
||||
%- mo ^- (list {partner envelope delivery})
|
||||
%+ turn (~(tap in to))
|
||||
|=(sat/station [[%& sat] [*envelope %pending]])
|
||||
[now *bouquet [%tax action]]
|
||||
==
|
||||
==
|
||||
::
|
||||
++ send
|
||||
|= action/duty:work-stuff:talk
|
||||
(send-audience audience action)
|
||||
::
|
||||
++ send-archive
|
||||
|= to/(set station:talk)
|
||||
(send-audience to %archive id.tax)
|
||||
::
|
||||
++ send-create (send %create tax)
|
||||
++ send-change |* *
|
||||
?: =(our creator.tax)
|
||||
(send-update +(version.tax) our +<)
|
||||
%+ send-audience
|
||||
[[creator.tax (main:talk creator.tax)] ~ ~]
|
||||
[%change id.tax +<]
|
||||
++ send-update |*(* (send %update id.tax +<))
|
||||
++ process-update
|
||||
|= up/update
|
||||
^+ +>
|
||||
?- -.up
|
||||
$add ?>(?=($comment +<.up) (send-change %add-comment our +>.up))
|
||||
$doer
|
||||
?- +<.up
|
||||
$release (send-change %set-doer ~)
|
||||
$claim (send-change %set-doer `our)
|
||||
==
|
||||
::
|
||||
$set
|
||||
?- +<.up
|
||||
$audience (process-audience to.up)
|
||||
$date-due (send-change %set-date-due +>.up)
|
||||
$title (send-change %set-title +>.up)
|
||||
$description (send-change %set-description +>.up)
|
||||
$tags (send-change %set-tags +>.up)
|
||||
$done (send-change %set-done +>.up)
|
||||
==
|
||||
==
|
||||
++ process-audience
|
||||
|= to/(set station:talk)
|
||||
^+ +>
|
||||
=. +>.$ (send-archive (~(dif in audience) to))
|
||||
=. +>.$ (send-audience (~(dif in to) audience) %create tax)
|
||||
+>.$(audience to)
|
||||
--
|
||||
::
|
||||
++ prep
|
||||
|= $= old
|
||||
$_
|
||||
=< $
|
||||
%- unit
|
||||
$: client
|
||||
?
|
||||
@ud
|
||||
(map {@uvH @u} (pair ship flesh:work-stuff:talk))
|
||||
==
|
||||
^- {(list move) _+>.$}
|
||||
initialize(+<+ ?~(old +<+.+>.$ u.old))
|
||||
::
|
||||
++ initialize
|
||||
^- {(list move) _.}
|
||||
?: connected
|
||||
[~ .]
|
||||
:_ .(connected %&) :_ ~
|
||||
[ost %peer /peering [our %talk] /f+(main:talk our)/(scot %ud count)]
|
||||
::
|
||||
++ process-duty
|
||||
|= {when/@da her/ship from/(set station:talk) action/duty:work-stuff:talk}
|
||||
^- {(list move) _+>.$}
|
||||
=- =^ mof con mirror-to-web:con
|
||||
[(welp mof mos) con]
|
||||
^- {mos/(list move) con/_+>.$}
|
||||
?- -.action
|
||||
$create
|
||||
=+ existing-task=(~(get by tasks) id.tax.action)
|
||||
?: ?& ?=(^ existing-task)
|
||||
!=(tax.action tax.u.existing-task)
|
||||
!archived.u.existing-task
|
||||
==
|
||||
~& :* %new-task-with-old-id
|
||||
her=her
|
||||
from=from
|
||||
new-task=tax.action
|
||||
existing-task=u.existing-task
|
||||
==
|
||||
[~ +>.$]
|
||||
?. =(her creator.tax.action)
|
||||
~& :* %created-with-bad-creator
|
||||
her=her
|
||||
from=from
|
||||
new-task=tax.action
|
||||
existing-task=existing-task
|
||||
==
|
||||
[~ +>.$]
|
||||
=. tasks
|
||||
%^ ~(put by tasks) id.tax.action |
|
||||
:_ tax.action
|
||||
?~ existing-task from
|
||||
(~(uni in audience.u.existing-task) from)
|
||||
=. sort ?^(existing-task sort [id.tax.action sort])
|
||||
[~ +>.$]
|
||||
::
|
||||
$archive
|
||||
=+ tax=(~(get by tasks) id.action)
|
||||
?~ tax
|
||||
~& :* %archive-for-nonexistent-task
|
||||
her=her
|
||||
from=from
|
||||
action=action
|
||||
==
|
||||
[~ +>.$]
|
||||
?: !=(her creator.tax.u.tax)
|
||||
~& :* %archiver-not-creator
|
||||
her=her
|
||||
from=from
|
||||
action=action
|
||||
tax=tax
|
||||
==
|
||||
[~ +>.$]
|
||||
=. tasks
|
||||
%+ ~(put by tasks) id.action
|
||||
:* =(~ (~(dif in audience.u.tax) from))
|
||||
(~(dif in audience.u.tax) from)
|
||||
tax.u.tax
|
||||
==
|
||||
[~ +>.$]
|
||||
::
|
||||
$change
|
||||
=+ tax=(~(get by tasks) id.action)
|
||||
?~ tax
|
||||
~& :* %change-for-nonexistent-task
|
||||
her=her
|
||||
from=from
|
||||
action=action
|
||||
==
|
||||
[~ +>.$]
|
||||
?: !=(our creator.tax.u.tax)
|
||||
~& :* %me-not-creator
|
||||
her=her
|
||||
from=from
|
||||
action=action
|
||||
tax=tax
|
||||
==
|
||||
[~ +>.$]
|
||||
abet:(send-update:(at u.tax) +(version.tax.u.tax) her meat.action)
|
||||
::
|
||||
$update
|
||||
=+ tax=(~(get by tasks) id.action)
|
||||
?~ tax
|
||||
~& :* %update-for-nonexistent-task
|
||||
her=her
|
||||
from=from
|
||||
action=action
|
||||
==
|
||||
[~ +>.$]
|
||||
?: !=(her creator.tax.u.tax)
|
||||
~& :* %her-not-creator
|
||||
her=her
|
||||
from=from
|
||||
action=action
|
||||
tax=tax
|
||||
==
|
||||
[~ +>.$]
|
||||
?. =(version.action +(version.tax.u.tax))
|
||||
~& :* %update-bad-version
|
||||
her
|
||||
from=from
|
||||
action=action
|
||||
tax=tax
|
||||
==
|
||||
?: (lte version.action version.tax.u.tax)
|
||||
~& %really-bad-version
|
||||
[~ +>.$]
|
||||
:- ~
|
||||
%_ +>.$
|
||||
unordered
|
||||
%+ ~(put by unordered)
|
||||
[id.action version.action]
|
||||
[her.action meat.action]
|
||||
==
|
||||
|-
|
||||
=. tasks
|
||||
%+ ~(put by tasks) id.action
|
||||
:+ archived.u.tax
|
||||
(~(uni in audience.u.tax) from)
|
||||
=. version.tax.u.tax version.action
|
||||
=. date-modified.tax.u.tax when
|
||||
?- -.meat.action
|
||||
$set-doer tax.u.tax(doer her.meat.action)
|
||||
$set-date-due tax.u.tax(date-due wen.meat.action)
|
||||
$set-tags tax.u.tax(tags tag.meat.action)
|
||||
$set-title tax.u.tax(title til.meat.action)
|
||||
$set-description tax.u.tax(description des.meat.action)
|
||||
$set-done tax.u.tax(done ?.(don.meat.action ~ `when))
|
||||
$add-comment
|
||||
%= tax.u.tax
|
||||
discussion [[when [who com]:meat.action] discussion.tax.u.tax]
|
||||
==
|
||||
==
|
||||
=+ ooo=(~(get by unordered) id.action +(version.action))
|
||||
?~ ooo
|
||||
[~ +>.^$]
|
||||
%= $
|
||||
version.action +(version.action)
|
||||
her.action p.u.ooo
|
||||
meat.action q.u.ooo
|
||||
==
|
||||
==
|
||||
::
|
||||
++ mirror-to-web
|
||||
^- {(list move) _.}
|
||||
~& [%mirroring sort=(turn sort |=(a/@uv `@uv`(rsh 2 25 a)))]
|
||||
:_ .
|
||||
%+ murn (~(tap by sup))
|
||||
|= {ust/bone her/ship pax/path}
|
||||
^- (unit move)
|
||||
?:(?=({$sole *} pax) ~ `[ust full-report])
|
||||
::
|
||||
++ full-report [%diff %work-report tasks sort]
|
||||
++ peer-repo |=(path [[ost full-report]~ +>.$])
|
||||
++ coup
|
||||
|= {way/wire saw/(unit tang)}
|
||||
^- {(list move) _+>.$}
|
||||
?> ?=($~ saw)
|
||||
[~ +>.$]
|
||||
::
|
||||
++ quit-peering |=(way/wire ?>(?=($~ way) initialize(connected |)))
|
||||
++ reap-peering
|
||||
|= {way/wire saw/(unit tang)}
|
||||
^- {(list move) _+>.$}
|
||||
?> ?=({$~ $~} +<)
|
||||
[~ +>.$]
|
||||
::
|
||||
++ poke-work-command
|
||||
|= cod/command
|
||||
?. =(our src)
|
||||
~|([%wrong-user our=our src=src] !!)
|
||||
?- -.cod
|
||||
$sort mirror-to-web(sort p.cod)
|
||||
$old
|
||||
=^ mow +>.$
|
||||
=+ (at (~(got by tasks) id.cod))
|
||||
abet:(process-update:- dif.cod)
|
||||
=^ mov +>.$ mirror-to-web
|
||||
[(welp mov mow) +>.$]
|
||||
$new
|
||||
=. +>.cod +>.cod(date-created now, version 0, date-modified now)
|
||||
abut:send-create:(at | +.cod)
|
||||
==
|
||||
::
|
||||
:: XX test the disconnection case
|
||||
++ diff-talk-report
|
||||
|= {way/wire rep/report:talk}
|
||||
^- {(list move) _+>.$}
|
||||
?> ?=($grams -.rep)
|
||||
|- ^- {(list move) _+>.^$}
|
||||
?~ q.rep [~ +>.^$]
|
||||
=. count +(count)
|
||||
=* her p.i.q.rep
|
||||
=* when p.r.q.i.q.rep
|
||||
=* said r.r.q.i.q.rep
|
||||
?. ?=($tax -.said)
|
||||
$(p.rep +(p.rep), q.rep t.q.rep)
|
||||
=+ ^- from/(set station:talk)
|
||||
%- sa ^- (list station:talk)
|
||||
%+ murn (~(tap by q.q.i.q.rep))
|
||||
=> talk
|
||||
|= {par/partner *}
|
||||
`(unit station)`?.(?=($& -.par) ~ `p.par)
|
||||
=^ mos +>.^$ (process-duty when her from +.said)
|
||||
=^ mof +>.^$ $(p.rep +(p.rep), q.rep t.q.rep)
|
||||
[(weld mos mof) +>.^$]
|
||||
--
|
36
ape/write.hoon
Normal file
36
ape/write.hoon
Normal file
@ -0,0 +1,36 @@
|
||||
:: File writer
|
||||
::
|
||||
:::: /hoon+write+app
|
||||
::
|
||||
|_ {bowl $~}
|
||||
++ beak-now byk(r [%da now])
|
||||
++ poke-json
|
||||
|= jon/json
|
||||
=- (poke--data (need (- jon.+)))
|
||||
=> jo
|
||||
%- ot :~
|
||||
pax+(cu deft (su fel:stab))
|
||||
dat+(of json+some mime+(pe / (cu taco so)) ~) :: XX mite
|
||||
==
|
||||
::
|
||||
++ poke-write-paste
|
||||
|= {typ/?($hoon $md $txt) txt/@t}
|
||||
(poke--data [`typ /pub+paste+(scot %da now)] %mime / (taco txt))
|
||||
::
|
||||
++ poke--data
|
||||
|= {{ext/(unit @t) pax/path} dat/$$({$json json} {$mime mime})}
|
||||
?~ ext $(ext [~ -.dat])
|
||||
=+ cay=?-(-.dat %json [-.dat !>(+.dat)], %mime [-.dat !>(+.dat)])
|
||||
?: =(u.ext -.dat) (made pax ~ `cay)
|
||||
[[ost %exec pax our ~ beak-now %cast u.ext `cay]~ +>.$] :: XX defer %nice
|
||||
::
|
||||
++ made
|
||||
|= {pax/wire @ res/gage}
|
||||
?. =(our src)
|
||||
~|(foreign-write+[our=our src=src] !!)
|
||||
?+ -.res ~|(gage+-.res !!)
|
||||
$| (mean p.res)
|
||||
$& =- [[ost %info / our -]~ +>.$]
|
||||
(foal :(welp (tope beak-now ~) pax /[-.p.res]) p.res)
|
||||
==
|
||||
--
|
146
arvo/jael.hoon
Normal file
146
arvo/jael.hoon
Normal file
@ -0,0 +1,146 @@
|
||||
:: %jael, secret storage
|
||||
::
|
||||
:::: /hoon+jael
|
||||
::
|
||||
!? 164
|
||||
::::
|
||||
:: %jael is logically homogeneous, but please follow these conventions:
|
||||
::
|
||||
:: /cap :: foreign app keys
|
||||
:: /service :: service name, eg %face for FB
|
||||
:: /appid :: your ship's app-id
|
||||
:: /@uvH :: by hash
|
||||
:: /@ud :: by number
|
||||
:: /@tas :: by name
|
||||
::
|
||||
:: /key :: foreign user secrets
|
||||
:: /service :: service name, eg %face
|
||||
:: /userid :: user identity
|
||||
::
|
||||
:: /urb :: urbit secrets
|
||||
:: /tok+hash
|
||||
|
||||
|= pit=vase
|
||||
=> =~
|
||||
:: structures
|
||||
|%
|
||||
++ axle :: %jael state
|
||||
$: %0 :: %jael version
|
||||
ent=@ :: entropy
|
||||
sef=safe :: secret tree
|
||||
red=(map duct (set path)) :: reverse subscribers
|
||||
== ::
|
||||
++ gift :: out result <-$
|
||||
$% [%dead p=path] :: key expired
|
||||
[%live p=path q=@] :: key created
|
||||
== ::
|
||||
++ kiss :: in request ->$
|
||||
$% [%kill p=path] :: discard secret
|
||||
[%make p=@uw q=(unit ,@da) r=@ud s=path] :: generate random
|
||||
[%nuke ~] :: erase subscriber
|
||||
[%tell p=@uw q=(unit ,@da) r=path] :: save secret
|
||||
== ::
|
||||
++ move ,[p=duct q=(mold note gift)] :: typed move
|
||||
++ note :: out request $->
|
||||
$% $: %b :: to %behn
|
||||
$% [%wait p=@da] ::
|
||||
[%rest p=@da] ::
|
||||
== == == ::
|
||||
++ perm (pair ,@ud (list ,@ud)) :: prime definition
|
||||
++ safe ::
|
||||
$: nub=(unit ,@uw) :: secret
|
||||
dex=(unit ,@da) :: expiration
|
||||
sud=(set duct) :: subscribers
|
||||
kin=(map term safe) :: children
|
||||
== ::
|
||||
-- ::
|
||||
:: programs
|
||||
|%
|
||||
++ bu
|
||||
|_ $: xap=path
|
||||
fes=(list safe)
|
||||
moz=(list move)
|
||||
==
|
||||
axle
|
||||
::
|
||||
++ bu-abet :: resolve
|
||||
^- axle
|
||||
?~ xap +<+
|
||||
%= bu-abet
|
||||
xap t.xap
|
||||
fes t.fes
|
||||
sef %= i.fes
|
||||
kin
|
||||
?: =(*safe sef)
|
||||
(~(del by kin.i.fes) i.xap)
|
||||
(~(put by kin.i.fes) i.xap sef)
|
||||
==
|
||||
==
|
||||
::
|
||||
++ bu-kill :: destroy
|
||||
^+ .
|
||||
=+ dus=(~(tap by
|
||||
|
||||
::
|
||||
++ bu-ajar :: descend
|
||||
|= pax=path
|
||||
^+ +>
|
||||
?~ pax +>.$
|
||||
%= $
|
||||
pax t.pax
|
||||
xap [i.pax xap]
|
||||
fes [sef fes]
|
||||
sef (fall (~(get by kin.sef) i.pax) *safe)
|
||||
==
|
||||
--
|
||||
++ bury
|
||||
|= [pax=path lex=axle]
|
||||
(~(bu-ajar bu [~ ~ ~] tof.lex lex) pax)
|
||||
--
|
||||
. ==
|
||||
=| axle
|
||||
|= [now=@da eny=@ ski=sled] :: activate
|
||||
^? :: opaque core
|
||||
|% ::
|
||||
++ call :: request
|
||||
|= [hen=duct hic=(hypo (hobo kiss))]
|
||||
^- [p=(list move) q=_..^$]
|
||||
=> .(q.hic ?.(?=(%soft -.q.hic) q.hic ((hard kiss) p.q.hic)))
|
||||
=^ moz +>+>-
|
||||
=< bu-abet
|
||||
?- -.p.q.hic
|
||||
%kill
|
||||
kill:(bury p.p.q.hic +>+>-)
|
||||
::
|
||||
%make
|
||||
%nuke
|
||||
%tell
|
||||
==
|
||||
::
|
||||
++ doze
|
||||
|= [now=@da hen=duct]
|
||||
^- (unit ,@da)
|
||||
~
|
||||
::
|
||||
++ load :: highly forgiving
|
||||
|= old=*
|
||||
=+ lox=((soft axle) old)
|
||||
^+ ..^$
|
||||
?~ lox
|
||||
~& %jael-reset
|
||||
..^$
|
||||
..^$(+>- u.lox)
|
||||
::
|
||||
++ scry
|
||||
|= [fur=(unit (set monk)) ren=@tas who=ship syd=desk lot=coin tyl=path]
|
||||
^- (unit (unit (pair mark ,*)))
|
||||
:: actually scry
|
||||
~
|
||||
::
|
||||
++ stay :: save w+o cache
|
||||
`axle`+>-.$(pol (~(run by pol) |=(a=baby [tad.a dym.a ~])))
|
||||
::
|
||||
++ take :: response
|
||||
|= [tea=wire hen=duct hin=(hypo noun)]
|
||||
!!
|
||||
--
|
103
arvo/kahn.hoon
Normal file
103
arvo/kahn.hoon
Normal file
@ -0,0 +1,103 @@
|
||||
:: %kahn, social state
|
||||
::
|
||||
:::: /hoon+kahn
|
||||
::
|
||||
!? 164
|
||||
::::
|
||||
|= pit=vase
|
||||
=> =~
|
||||
:: structures
|
||||
|%
|
||||
++ axle :: %kahn state
|
||||
$: %0 ::
|
||||
soc=(map monk node) :: social graph
|
||||
red=(map duct (set monk)) :: reverse subscribers
|
||||
== ::
|
||||
++ cert (each will ,*) :: urbit or other
|
||||
++ gift :: out result <-$
|
||||
$: [%then p=node] :: propagate change
|
||||
== ::
|
||||
++ node :: social identity
|
||||
$: tin=(map monk link) :: inbound links
|
||||
oud=(map monk link) :: outbound links
|
||||
cet=cert :: certificate
|
||||
sud=(set duct) :: subscribers
|
||||
== ::
|
||||
++ khan ,[p=@tas q=@ta] :: foreign identity
|
||||
++ kiss :: social update
|
||||
$: [%cert p=monk q=cert] :: set certificate
|
||||
[%hear p=monk] :: watch identity
|
||||
[%know p=monk q=(map monk link)] :: set forward links
|
||||
[%nuke ~] :: erase subscriber
|
||||
== ::
|
||||
++ link (pair rank ,@da) :: trust+expiration
|
||||
++ monk (each ship khan) :: general identity
|
||||
++ rank :: privilege ring
|
||||
$? %0 :: complete trust
|
||||
%1 :: structural trust
|
||||
%2 :: social trust
|
||||
%3 :: neutral trust
|
||||
%4 :: negative trust
|
||||
== ::
|
||||
-- ::
|
||||
. ==
|
||||
=| axle
|
||||
=* lex -
|
||||
|= [now=@da eny=@ ski=sled] :: activate
|
||||
^? :: opaque core
|
||||
|% ::
|
||||
++ call :: request
|
||||
|= [hen=duct hic=(hypo (hobo kiss))]
|
||||
^- [p=(list move) q=_..^$]
|
||||
=> .(q.hic ?.(?=(%soft -.q.hic) q.hic ((hard kiss) p.q.hic)))
|
||||
!!
|
||||
::
|
||||
++ doze
|
||||
|= [now=@da hen=duct]
|
||||
^- (unit ,@da)
|
||||
~
|
||||
::
|
||||
++ load :: highly forgiving
|
||||
|= old=*
|
||||
=+ lox=((soft axle) old)
|
||||
^+ ..^$
|
||||
?~ lox
|
||||
~& %khan-reset
|
||||
..^$
|
||||
..^$(+>- u.lox)
|
||||
::
|
||||
++ scry
|
||||
|= [fur=(unit (set monk)) ren=@tas who=ship syd=desk lot=coin tyl=path]
|
||||
^- (unit (unit (pair mark ,*)))
|
||||
?. =(big [~ who]) ~
|
||||
=+ ^= yub ^- [(unit monk)
|
||||
?: =(%urb syd)
|
||||
?. ?=([* ~] tyl) ~
|
||||
=+ goy=(slaw %p
|
||||
|
||||
?+ ?=([%$ %da @]
|
||||
?+ lot ~
|
||||
[%$ %ud @]
|
||||
%+ bind
|
||||
(perm who u.hun q.p.lot [syd t.tyl])
|
||||
|=(a=* [%noun a])
|
||||
::
|
||||
?. =(now q.p.lot) ~
|
||||
%+ bind
|
||||
(temp who u.hun [syd t.tyl])
|
||||
|=(a=* [%noun a])
|
||||
==
|
||||
?. ?=([%da
|
||||
=+ mok ^- (unit monk)
|
||||
?: =(%urb face)
|
||||
(
|
||||
|
||||
::
|
||||
++ stay :: save w+o cache
|
||||
`axle`+>-.$
|
||||
::
|
||||
++ take :: response
|
||||
|= [tea=wire hen=duct hin=(hypo noun)]
|
||||
!!
|
||||
--
|
||||
|
104
arvo/lunt.hoon
Normal file
104
arvo/lunt.hoon
Normal file
@ -0,0 +1,104 @@
|
||||
:: %lunt, fleet job control
|
||||
::
|
||||
:::: /hoon+lunt
|
||||
::
|
||||
!? 164
|
||||
::::
|
||||
|= pit=vase
|
||||
=> =~
|
||||
:: structures
|
||||
|%
|
||||
++ axle :: %lunt state
|
||||
$: %0 ::
|
||||
all=(map ship axil) :: state by owner
|
||||
== ::
|
||||
++ born ,[p=brat q=(unit ship)] :: task identity
|
||||
++ brat ,@ud :: task number
|
||||
++ bulb ::
|
||||
$: p=@p :: ship identity
|
||||
q=home :: server data
|
||||
== ::
|
||||
++ home :: storage access
|
||||
$: pad=@uvH :: passcode
|
||||
huc=husk :: log server
|
||||
sog=hulk :: storage server
|
||||
== ::
|
||||
++ hulk :: checkpoint service
|
||||
$% [%astr p=@ud q=@ud] :: S3
|
||||
== ::
|
||||
++ husk :: log server
|
||||
$: pro=@tas :: protocol
|
||||
cap=@uvH :: access code
|
||||
srv=(list (pair ,@ud clip)) :: server cluster
|
||||
== ::
|
||||
++ gift :: result
|
||||
$: [%die p=brat] :: kill
|
||||
[%int p=brat] :: interrupt
|
||||
[%run p=brat q=@p r=home] :: load
|
||||
[%say p=brat q=(list ovum)] :: send events
|
||||
[%new p=brat q=@p r=home s=(list ovum)] :: create
|
||||
== ::
|
||||
++ kiss :: request
|
||||
$: [%com p=@p] :: toggle compute svr
|
||||
[%end p=brat] :: local end
|
||||
[%fan p=@ud] :: set local fanout
|
||||
[%kil ~] :: terminate ship
|
||||
[%int ~] :: interrupt ship
|
||||
[%new p=@p q=(set ,@p) q=home r=@uvI] :: create ship
|
||||
[%run p=@p q=home] :: run existing ship
|
||||
[%say p=(list ovum)] :: remote events
|
||||
[%sto p=husk] :: toggle logger
|
||||
== ::
|
||||
++ axil ::
|
||||
$: bus=(unit ,@p) :: master
|
||||
loc=@ud :: local resources
|
||||
hen=(unit duct) :: effect duct
|
||||
ent=@ :: entropy
|
||||
seq=@ :: brat sequence
|
||||
why=(map duct born) :: hosted ships
|
||||
how=(map born duct) :: reverse why
|
||||
hut=(map born home) :: storage control
|
||||
ham=(set hulk) :: block stores
|
||||
sto=(set husk) :: log stores
|
||||
com=(set ship) :: compute resources
|
||||
== ::
|
||||
-- ::
|
||||
. ==
|
||||
=| axle
|
||||
=* lex -
|
||||
|= [now=@da eny=@ ski=sled] :: activate
|
||||
^? :: opaque core
|
||||
|% ::
|
||||
++ call :: request
|
||||
|= [hen=duct hic=(hypo (hobo kiss))]
|
||||
^- [p=(list move) q=_..^$]
|
||||
=> .(q.hic ?.(?=(%soft -.q.hic) q.hic ((hard kiss) p.q.hic)))
|
||||
!!
|
||||
::
|
||||
++ doze
|
||||
|= [now=@da hen=duct]
|
||||
^- (unit ,@da)
|
||||
~
|
||||
::
|
||||
++ load :: highly forgiving
|
||||
|= old=*
|
||||
=+ lox=((soft axle) old)
|
||||
^+ ..^$
|
||||
?~ lox
|
||||
~& %lunt-reset
|
||||
..^$
|
||||
..^$(+>- u.lox)
|
||||
::
|
||||
++ scry
|
||||
|= [fur=(unit (set monk)) ren=@tas who=ship syd=desk lot=coin tyl=path]
|
||||
^- (unit (unit (pair mark ,*)))
|
||||
~
|
||||
::
|
||||
++ stay :: save w+o cache
|
||||
`axle`+>-.$
|
||||
::
|
||||
++ take :: response
|
||||
|= [tea=wire hen=duct hin=(hypo noun)]
|
||||
!!
|
||||
--
|
||||
|
94
arvo/musk.hoon
Normal file
94
arvo/musk.hoon
Normal file
@ -0,0 +1,94 @@
|
||||
:: %musk, realm management
|
||||
::
|
||||
:::: /hoon+musk
|
||||
::
|
||||
!? 164
|
||||
::::
|
||||
|= pit=vase
|
||||
=> =~
|
||||
:: structures
|
||||
|%
|
||||
++ axle :: %musk state
|
||||
$: %0 ::
|
||||
all=(map ship axil) :: state by owner
|
||||
== ::
|
||||
++ axil ::
|
||||
$: kid=(map ship girl) :: daughters
|
||||
deq=(map narc ship) :: reverse address
|
||||
siq=(map ship (list clan)) :: ship to clans
|
||||
kes=(map clan (list ship)) :: clan to ships
|
||||
== ::
|
||||
++ clan ,@tas :: group identity
|
||||
++ narc :: contact address
|
||||
$: [%$ p=ship] :: urbit
|
||||
[%m p=@t q=@t] :: email p@q
|
||||
[%f p=@t] :: facebook
|
||||
[%g p=@t] :: google
|
||||
[%p p=@t] :: phone message
|
||||
[%t p=@t] :: twitter
|
||||
== ::
|
||||
++ pony :: daughter status
|
||||
$% [%cold ~] :: virginal
|
||||
[%dead ~] :: written off
|
||||
[%fake ~] :: virtual
|
||||
[%free ~] :: downloaded
|
||||
[%here ~] :: hosted
|
||||
[%left p=(unit ship)] :: run away to
|
||||
== ::
|
||||
++ rank :: relative privilege
|
||||
$? %0 :: enemy
|
||||
%1 :: neighbor
|
||||
%2 :: guest+customer
|
||||
%3 :: friend+employee
|
||||
%4 :: officer+family
|
||||
%5 :: self+admin
|
||||
== ::
|
||||
++ girl ::
|
||||
$: hop=pony :: status
|
||||
tag=(unit ,@tas) :: petname
|
||||
tip=rank :: rank
|
||||
fig=(set narc) :: identities
|
||||
loc=(unit ,[p=@da q=@ud r=clip]) :: last position
|
||||
sym=(set ,[p=@ q=@uvH]) :: symmetric keys?
|
||||
wyl=will :: crypto will
|
||||
== ::
|
||||
-- ::
|
||||
. ==
|
||||
=| axle
|
||||
=* lex -
|
||||
|= [now=@da eny=@ ski=sled] :: activate
|
||||
^? :: opaque core
|
||||
|% ::
|
||||
++ call :: request
|
||||
|= [hen=duct hic=(hypo (hobo kiss))]
|
||||
^- [p=(list move) q=_..^$]
|
||||
=> .(q.hic ?.(?=(%soft -.q.hic) q.hic ((hard kiss) p.q.hic)))
|
||||
!!
|
||||
::
|
||||
++ doze
|
||||
|= [now=@da hen=duct]
|
||||
^- (unit ,@da)
|
||||
~
|
||||
::
|
||||
++ load :: highly forgiving
|
||||
|= old=*
|
||||
=+ lox=((soft axle) old)
|
||||
^+ ..^$
|
||||
?~ lox
|
||||
~& %lunt-reset
|
||||
..^$
|
||||
..^$(+>- u.lox)
|
||||
::
|
||||
++ scry
|
||||
|= [fur=(unit (set monk)) ren=@tas who=ship syd=desk lot=coin tyl=path]
|
||||
^- (unit (unit (pair mark ,*)))
|
||||
~
|
||||
::
|
||||
++ stay :: save w+o cache
|
||||
`axle`+>-.$
|
||||
::
|
||||
++ take :: response
|
||||
|= [tea=wire hen=duct hin=(hypo noun)]
|
||||
!!
|
||||
--
|
||||
|
14
gen/bit/address-contact.hoon
Normal file
14
gen/bit/address-contact.hoon
Normal file
@ -0,0 +1,14 @@
|
||||
|
||||
::
|
||||
::::
|
||||
::
|
||||
/? 310
|
||||
::
|
||||
:::::::
|
||||
!:
|
||||
:- %say
|
||||
|= {^ arg/{address/@t contact/@t $~} $~}
|
||||
:- %address-contact
|
||||
[address.arg contact.arg]
|
||||
|
||||
|
11
gen/bit/auth.hoon
Normal file
11
gen/bit/auth.hoon
Normal file
@ -0,0 +1,11 @@
|
||||
::
|
||||
::::
|
||||
::
|
||||
/? 310
|
||||
::
|
||||
:::::
|
||||
!:
|
||||
:- %say
|
||||
|= {^ {arg1+cord arg2+cord $~} $~}
|
||||
:- %auth
|
||||
[arg1 arg2]
|
11
gen/bit/buy.hoon
Normal file
11
gen/bit/buy.hoon
Normal file
@ -0,0 +1,11 @@
|
||||
::
|
||||
::::
|
||||
::
|
||||
/? 310
|
||||
::
|
||||
:::::::
|
||||
!:
|
||||
:- %say
|
||||
|= {^ {amount/@t currency/@t $~} $~}
|
||||
:- %buy
|
||||
[amount currency]
|
14
gen/bit/contact-address.hoon
Normal file
14
gen/bit/contact-address.hoon
Normal file
@ -0,0 +1,14 @@
|
||||
|
||||
::
|
||||
::::
|
||||
::
|
||||
/? 310
|
||||
::
|
||||
:::::::
|
||||
!:
|
||||
:- %say
|
||||
|= {^ arg/{contact/@t address/@t $~} $~}
|
||||
:- %bit-contact
|
||||
[contact.arg address.arg]
|
||||
|
||||
|
12
gen/bit/list.hoon
Normal file
12
gen/bit/list.hoon
Normal file
@ -0,0 +1,12 @@
|
||||
::
|
||||
::::
|
||||
::
|
||||
/? 310
|
||||
::
|
||||
:::::::
|
||||
!:
|
||||
:- %say
|
||||
|= {^ $~ $~}
|
||||
:- %list
|
||||
~
|
||||
|
12
gen/bit/sell.hoon
Normal file
12
gen/bit/sell.hoon
Normal file
@ -0,0 +1,12 @@
|
||||
::
|
||||
::::
|
||||
::
|
||||
/? 310
|
||||
::
|
||||
:::::::
|
||||
!:
|
||||
:- %say
|
||||
|= {^ {amount/@t currency/@t $~} $~}
|
||||
:- %sell
|
||||
[amount currency]
|
||||
|
12
gen/bit/send.hoon
Normal file
12
gen/bit/send.hoon
Normal file
@ -0,0 +1,12 @@
|
||||
::
|
||||
::::
|
||||
::
|
||||
/? 310
|
||||
::
|
||||
:::::::
|
||||
!:
|
||||
:- %say
|
||||
|= {^ {to/@uc amo/@t $~} $~}
|
||||
[%bit-send to amo]
|
||||
|
||||
|
33
gen/cat.hoon
Normal file
33
gen/cat.hoon
Normal file
@ -0,0 +1,33 @@
|
||||
:: ConCATenate file listings
|
||||
::
|
||||
:::: /hoon+gen+cat
|
||||
::
|
||||
// /%%/ls+subdir
|
||||
// /%/pretty
|
||||
!:
|
||||
::::
|
||||
::
|
||||
:- %say
|
||||
|= {^ {arg/(list path)} $~}
|
||||
=- tang+(flop `tang`(zing -))
|
||||
%+ turn arg
|
||||
|= pax/path
|
||||
^- tang
|
||||
=+ ark=;;(arch .^(%cy pax))
|
||||
?^ fil.ark
|
||||
?: =(%sched -:(flop pax))
|
||||
[>;;((map ,@da cord) .^(%cx pax))<]~
|
||||
[leaf+(spud pax) (pretty-file .^(%cx pax))]
|
||||
?- dir.ark :: handle ambiguity
|
||||
$~
|
||||
[rose+[" " `~]^~[leaf+"~" (smyt pax)]]~
|
||||
::
|
||||
{{@t $~} $~ $~}
|
||||
$(pax (welp pax /[p.n.dir.ark]))
|
||||
::
|
||||
*
|
||||
=- [palm+[": " ``~]^-]~
|
||||
:~ rose+[" " `~]^~[leaf+"*" (smyt pax)]
|
||||
`tank`(subdir pax dir.ark)
|
||||
==
|
||||
==
|
25
gen/cat/pretty.hoon
Normal file
25
gen/cat/pretty.hoon
Normal file
@ -0,0 +1,25 @@
|
||||
!:
|
||||
|%
|
||||
++ pretty-noun
|
||||
|= pri=* ^- tank
|
||||
?~ pri
|
||||
leaf+"~"
|
||||
?@ pri
|
||||
leaf+?:(((sane %tas) pri) <`@tas`pri> <pri>)
|
||||
=< rose+[" " ?:(- "~[" "[") "]"]^+
|
||||
|- ^- [? (list tank)]
|
||||
?~ +.pri
|
||||
[& ^$(pri -.pri) ~]
|
||||
?@ +.pri
|
||||
[| ^$(pri -.pri) ^$(pri +.pri) ~]
|
||||
[+< - +>]:[^$(pri -.pri) $(pri +.pri)]
|
||||
::
|
||||
++ vale-cord |=(a=cord `?`(levy (trip a) |=(b=@ |((gte b 32) =(10 b)))))
|
||||
::
|
||||
++ pretty-file
|
||||
=+ wain-to-tang=|=(a=wain (turn a |=(b=cord leaf+(trip b))))
|
||||
|= fyl=* ^- tang
|
||||
=+ `(unit wain)`?@(fyl `(lore fyl) ((soft wain) fyl))
|
||||
?^ - (wain-to-tang u)
|
||||
[(pretty-noun fyl)]~
|
||||
--
|
11
gen/coin/keys.hoon
Normal file
11
gen/coin/keys.hoon
Normal file
@ -0,0 +1,11 @@
|
||||
::
|
||||
::::
|
||||
::
|
||||
/? 310
|
||||
::
|
||||
::::
|
||||
!:
|
||||
:- %say
|
||||
|= [^ [arg=(list cord) ~]]
|
||||
:- %keys
|
||||
arg
|
6
gen/curl.hoon
Normal file
6
gen/curl.hoon
Normal file
@ -0,0 +1,6 @@
|
||||
/- sole
|
||||
[sole]
|
||||
:- %get |= {^ {a/tape $~} $~}
|
||||
%+ sole-at (scan a auri:epur)
|
||||
|= hit/httr
|
||||
(sole-so %httr hit)
|
10
gen/curl/url.hoon
Normal file
10
gen/curl/url.hoon
Normal file
@ -0,0 +1,10 @@
|
||||
::
|
||||
::::
|
||||
::
|
||||
/? 310
|
||||
::
|
||||
:::::
|
||||
!:
|
||||
:- %say
|
||||
|= {^ {arg/tape $~} $~}
|
||||
purl+(scan arg auri:epur)
|
11
gen/hello.hoon
Normal file
11
gen/hello.hoon
Normal file
@ -0,0 +1,11 @@
|
||||
::
|
||||
:::: /hoon+hello+gen
|
||||
::
|
||||
/? 314
|
||||
::
|
||||
::::
|
||||
!:
|
||||
:- %say
|
||||
|= {^ {{txt/@tas $~} $~}}
|
||||
:- %noun
|
||||
(crip (weld "hello, " (flop (trip txt))))
|
6
gen/hood/ask.hoon
Normal file
6
gen/hood/ask.hoon
Normal file
@ -0,0 +1,6 @@
|
||||
:- %say
|
||||
|= {^ {mel/cord $~} $~}
|
||||
=+ adr=(star ;~(less (mask "\"\\()[],:;<>@") prn))
|
||||
=+ dom=[;~(plug dlab dot (most dot dlab))]:urlp
|
||||
=+ ~|(bad-email+mel (rash mel ;~((glue pat) adr dom)))
|
||||
helm-send-ask+mel
|
58
gen/hood/begin.hoon
Normal file
58
gen/hood/begin.hoon
Normal file
@ -0,0 +1,58 @@
|
||||
::
|
||||
:::: /hoon+begin+hood+gun
|
||||
::
|
||||
/? 314
|
||||
/- sole
|
||||
::
|
||||
::::
|
||||
!:
|
||||
=> |%
|
||||
++ begs {his/@p tic/@p yen/@t ges/gens}
|
||||
++ scug |*({a/@ b/(pole)} ?~(b ~ ?~(a ~ [-.b $(b +.b, a (dec a))])))
|
||||
--
|
||||
[sole .]
|
||||
:- %ask
|
||||
|= $: {now/@da eny/@uvI bec/beak}
|
||||
{arg/_(scug *@ ~{his/*@p tic/*@p})}
|
||||
safety/?($on $off)
|
||||
==
|
||||
^- (sole-result (cask begs))
|
||||
?. =(safety %off)
|
||||
%+ sole-yo
|
||||
:- %leaf
|
||||
"|begin is deprecated, please invoke urbit with -w [name] -t [ticket]"
|
||||
sole-no
|
||||
=- ?~ arg -
|
||||
=+ (fun.q.q his.arg)
|
||||
?~ +.arg -
|
||||
(fun.q.q tic.arg)
|
||||
%+ sole-lo
|
||||
[%& %helm-begin "your urbit: ~"]
|
||||
%+ sole-go fed:ag
|
||||
|= his/@p
|
||||
%+ sole-lo
|
||||
[%& %helm-ticket "your ticket: ~"]
|
||||
%+ sole-go fed:ag
|
||||
|= tic/@p
|
||||
%+ sole-lo
|
||||
[%& %helm-entropy "some entropy: "]
|
||||
%+ sole-go (boss 256 (more gon qit))
|
||||
|= yen/@t
|
||||
=+ ney=(shax yen)
|
||||
%+ sole-yo `tank`[%leaf "entropy check: {(scow %p `@p`(mug ney))}"]
|
||||
%+ sole-so %helm-begin
|
||||
:* his
|
||||
tic
|
||||
ney
|
||||
::
|
||||
^- gens
|
||||
:- %en
|
||||
=+ can=(clan his)
|
||||
?- can
|
||||
$czar [%czar ~]
|
||||
$duke [%duke %anon ~]
|
||||
$earl [%earl (scot %p his)]
|
||||
$king [%king ?:(=(~doznec his) 'Urban Republic' (scot %p his))]
|
||||
$pawn [%pawn ~]
|
||||
==
|
||||
==
|
13
gen/hood/breload.hoon
Normal file
13
gen/hood/breload.hoon
Normal file
@ -0,0 +1,13 @@
|
||||
::
|
||||
:::: /hoon+reload+hood+gen
|
||||
::
|
||||
/? 314
|
||||
::
|
||||
::::
|
||||
!:
|
||||
:- %say
|
||||
|= $: {now/@da eny/@uvI bec/beak}
|
||||
{arg/(list term) $~}
|
||||
==
|
||||
:+ %helm-reload-desk %base
|
||||
arg
|
13
gen/hood/cancel.hoon
Normal file
13
gen/hood/cancel.hoon
Normal file
@ -0,0 +1,13 @@
|
||||
::
|
||||
:::: /hoon+cancel+hood+gen
|
||||
::
|
||||
/? 314
|
||||
::
|
||||
::::
|
||||
!:
|
||||
:- %say
|
||||
|= $: {now/@da eny/@uvI bec/beak}
|
||||
{{syd/@tas $~} $~}
|
||||
==
|
||||
:- %kiln-cancel
|
||||
syd
|
2
gen/hood/cp.hoon
Normal file
2
gen/hood/cp.hoon
Normal file
@ -0,0 +1,2 @@
|
||||
:- %say
|
||||
|=({^ {input/path output/path $~} $~} kiln-cp+[input output])
|
@ -1,5 +1,9 @@
|
||||
::
|
||||
<<<<<<< HEAD
|
||||
:::: /hoon/deset/hood/gen
|
||||
=======
|
||||
:::: /hoon+deset+hood+gen
|
||||
>>>>>>> parent of afcc1cb... Stripdown part 2.
|
||||
::
|
||||
/? 314
|
||||
::
|
||||
|
2
gen/hood/hi.hoon
Normal file
2
gen/hood/hi.hoon
Normal file
@ -0,0 +1,2 @@
|
||||
:- %say
|
||||
|=({^ {who/ship mez/$@($~ {a/tape $~})} $~} helm-send-hi+[who ?~(mez ~ `a.mez)])
|
13
gen/hood/init.hoon
Normal file
13
gen/hood/init.hoon
Normal file
@ -0,0 +1,13 @@
|
||||
::
|
||||
:::: /hoon+reload+hood+gen
|
||||
::
|
||||
/? 314
|
||||
::
|
||||
::::
|
||||
!:
|
||||
:- %say
|
||||
|= $: {now/@da eny/@uvI bec/beak}
|
||||
{$~ $~}
|
||||
==
|
||||
:- %hood-init
|
||||
p.bec
|
12
gen/hood/invite.hoon
Normal file
12
gen/hood/invite.hoon
Normal file
@ -0,0 +1,12 @@
|
||||
::
|
||||
:::: /hoon+invite+hood+gen
|
||||
::
|
||||
/? 314
|
||||
::
|
||||
::::
|
||||
!:
|
||||
:- %say
|
||||
|= $: {now/@da eny/@uvI bec/beak}
|
||||
{{who/@p myl/@t $~} $~}
|
||||
==
|
||||
[%helm-invite who myl]
|
13
gen/hood/label.hoon
Normal file
13
gen/hood/label.hoon
Normal file
@ -0,0 +1,13 @@
|
||||
::
|
||||
:::: /hoon+label+hood+gen
|
||||
::
|
||||
/? 314
|
||||
::
|
||||
::::
|
||||
!:
|
||||
:- %say
|
||||
|= $: {now/@da eny/@uvI bec/beak}
|
||||
{arg/{syd/desk lab/@tas $~} $~}
|
||||
==
|
||||
:- %kiln-label
|
||||
[syd lab]:arg
|
15
gen/hood/link.hoon
Normal file
15
gen/hood/link.hoon
Normal file
@ -0,0 +1,15 @@
|
||||
::
|
||||
:::: /hoon+link+hood+gen
|
||||
::
|
||||
/? 314
|
||||
::
|
||||
::::
|
||||
!:
|
||||
:- %say
|
||||
|= $: {now/@da eny/@uvI byk/beak}
|
||||
{arg/$?({dap/term $~} {who/ship dap/term $~}) $~}
|
||||
==
|
||||
:- %drum-link
|
||||
?~ +.arg
|
||||
[p.byk dap.arg]
|
||||
[who.arg dap.arg]
|
12
gen/hood/mass.hoon
Normal file
12
gen/hood/mass.hoon
Normal file
@ -0,0 +1,12 @@
|
||||
::
|
||||
:::: /hoon+mass+hood+gen
|
||||
::
|
||||
/? 314
|
||||
::
|
||||
::::
|
||||
!:
|
||||
:- %say
|
||||
|= $: {now/@da eny/@uvI bec/beak}
|
||||
{arg/$~ $~}
|
||||
==
|
||||
[%helm-mass ~]
|
33
gen/hood/merge.hoon
Normal file
33
gen/hood/merge.hoon
Normal file
@ -0,0 +1,33 @@
|
||||
::
|
||||
:::: /hoon+merge+hood+gen
|
||||
::
|
||||
/? 314
|
||||
!:
|
||||
|%
|
||||
++ beaky {span span span $~}
|
||||
++ sorc ?({bek/beaky $~} {her/@p sud/@tas $~})
|
||||
--
|
||||
::
|
||||
::::
|
||||
!:
|
||||
:- %say
|
||||
|= $: {now/@da eny/@uvI bek/beak}
|
||||
{arg/{?(sorc {syd/$@(desk beaky) sorc})} gem/?($auto germ)}
|
||||
==
|
||||
=* our p.bek
|
||||
|^ :- %kiln-merge
|
||||
^- {syd/desk her/ship sud/desk gem/?($auto germ)}
|
||||
?- arg
|
||||
{@ @ $~} =+(arg [sud ?.(=(our her) her (sein her)) sud gem])
|
||||
{^ $~} =+((pars bek.arg) [dez ?.(=(our who) who (sein who)) dez gem])
|
||||
{* @ @ $~} [(pars-src syd.arg) =+(arg [her sud gem])]
|
||||
{* ^ $~} [(pars-src syd.arg) =+((pars bek.arg) [who dez gem])]
|
||||
==
|
||||
++ pars |=(a/beaky =+((need (tome a)) `{who/ship dez/desk}`{p q}))
|
||||
++ pars-src
|
||||
|= syd=$@(desk beaky)
|
||||
?@ syd syd
|
||||
=+ (pars syd)
|
||||
~| [%into-foreign who `path`syd]
|
||||
?>(=(our who) dez)
|
||||
--
|
2
gen/hood/mv.hoon
Normal file
2
gen/hood/mv.hoon
Normal file
@ -0,0 +1,2 @@
|
||||
:- %say
|
||||
|=({^ {input/path output/path $~} $~} kiln-mv+[input output])
|
13
gen/hood/overload.hoon
Normal file
13
gen/hood/overload.hoon
Normal file
@ -0,0 +1,13 @@
|
||||
::
|
||||
:::: /hoon+overload+hood+gen
|
||||
::
|
||||
/? 314
|
||||
::
|
||||
::::
|
||||
!:
|
||||
:- %say
|
||||
|= $: {now/@da eny/@uvI bec/beak}
|
||||
{{arg/term $~} $~}
|
||||
==
|
||||
:- %kiln-overload
|
||||
arg
|
12
gen/hood/rc.hoon
Normal file
12
gen/hood/rc.hoon
Normal file
@ -0,0 +1,12 @@
|
||||
::
|
||||
:::: /hoon+reload+hood+gen
|
||||
::
|
||||
/? 314
|
||||
::
|
||||
::::
|
||||
!:
|
||||
:- %say
|
||||
|= $: {now/@da eny/@uvI bec/beak}
|
||||
{arg/$~ $~}
|
||||
==
|
||||
[%helm-reload ~[%c]]
|
12
gen/hood/reboot.hoon
Normal file
12
gen/hood/reboot.hoon
Normal file
@ -0,0 +1,12 @@
|
||||
::
|
||||
:::: /hoon+reload+hood+gen
|
||||
::
|
||||
/? 314
|
||||
::
|
||||
::::
|
||||
!:
|
||||
:- %say
|
||||
|= $: {now/@da eny/@uvI bec/beak}
|
||||
{arg/$~ $~}
|
||||
==
|
||||
[%helm-reload ~[%z %a %b %c %d %e %f %g]]
|
13
gen/hood/reload-desk.hoon
Normal file
13
gen/hood/reload-desk.hoon
Normal file
@ -0,0 +1,13 @@
|
||||
::
|
||||
:::: /hoon+reload+hood+gen
|
||||
::
|
||||
/? 314
|
||||
::
|
||||
::::
|
||||
!:
|
||||
:- %say
|
||||
|= $: {now/@da eny/@uvI bec/beak}
|
||||
{arg/{desk (list term)} $~}
|
||||
==
|
||||
:- %helm-reload-desk
|
||||
arg
|
12
gen/hood/rf.hoon
Normal file
12
gen/hood/rf.hoon
Normal file
@ -0,0 +1,12 @@
|
||||
::
|
||||
:::: /hoon+reload+hood+gen
|
||||
::
|
||||
/? 314
|
||||
::
|
||||
::::
|
||||
!:
|
||||
:- %say
|
||||
|= $: {now/@da eny/@uvI bec/beak}
|
||||
{arg/$~ $~}
|
||||
==
|
||||
[%helm-reload ~[%f]]
|
2
gen/hood/rm.hoon
Normal file
2
gen/hood/rm.hoon
Normal file
@ -0,0 +1,2 @@
|
||||
:- %say
|
||||
|=({^ {input/path $~} $~} kiln-rm+input)
|
2
gen/hood/schedule.hoon
Normal file
2
gen/hood/schedule.hoon
Normal file
@ -0,0 +1,2 @@
|
||||
:- %say
|
||||
|=({^ {where/path tym/@da eve/@t $~} $~} kiln-schedule+[where tym eve])
|
13
gen/hood/sync.hoon
Normal file
13
gen/hood/sync.hoon
Normal file
@ -0,0 +1,13 @@
|
||||
::
|
||||
:::: /hoon+sync+hood+gen
|
||||
::
|
||||
/? 314
|
||||
::
|
||||
::::
|
||||
!:
|
||||
:- %say
|
||||
|= $: {now/@da eny/@uvI bec/beak}
|
||||
{arg/{syd/@tas her/@p sud/@tas $~} $~}
|
||||
==
|
||||
:- %kiln-sync
|
||||
[syd her sud]:arg
|
16
gen/hood/unix.hoon
Normal file
16
gen/hood/unix.hoon
Normal file
@ -0,0 +1,16 @@
|
||||
::
|
||||
:::: /hoon+unix+hood+gen
|
||||
::
|
||||
/? 314
|
||||
::
|
||||
::::
|
||||
!:
|
||||
:- %say
|
||||
|= $: {now/@da eny/@uvI bec/beak}
|
||||
{{syd/@tas syn/?($~ {? $~})} $~}
|
||||
==
|
||||
:+ %hood-unix
|
||||
syd
|
||||
?~ syn
|
||||
~
|
||||
`-.syn
|
15
gen/hood/unlink.hoon
Normal file
15
gen/hood/unlink.hoon
Normal file
@ -0,0 +1,15 @@
|
||||
::
|
||||
:::: /hoon+link+hood+gen
|
||||
::
|
||||
/? 314
|
||||
::
|
||||
::::
|
||||
!:
|
||||
:- %say
|
||||
|= $: {now/@da eny/@uvI byk/beak}
|
||||
{arg/$?({dap/term $~} {who/ship dap/term $~}) $~}
|
||||
==
|
||||
:- %drum-unlink
|
||||
?~ +.arg
|
||||
[p.byk dap.arg]
|
||||
[who.arg dap.arg]
|
13
gen/hood/unmount.hoon
Normal file
13
gen/hood/unmount.hoon
Normal file
@ -0,0 +1,13 @@
|
||||
::
|
||||
:::: /hoon+mount+hood+gen
|
||||
::
|
||||
/? 314
|
||||
::
|
||||
::::
|
||||
!:
|
||||
:- %say
|
||||
|= $: {now/@da eny/@uvI bec/beak}
|
||||
{{mon/$@(term {span path}) $~} $~}
|
||||
==
|
||||
:- %kiln-unmount
|
||||
mon
|
13
gen/hood/unsync.hoon
Normal file
13
gen/hood/unsync.hoon
Normal file
@ -0,0 +1,13 @@
|
||||
::
|
||||
:::: /hoon+unsync+hood+gen
|
||||
::
|
||||
/? 314
|
||||
::
|
||||
::::
|
||||
!:
|
||||
:- %say
|
||||
|= $: {now/@da eny/@uvI bec/beak}
|
||||
{arg/{syd/@tas her/@p sud/@tas $~} $~}
|
||||
==
|
||||
:- %kiln-unsync
|
||||
[syd her sud]:arg
|
12
gen/ls.hoon
Normal file
12
gen/ls.hoon
Normal file
@ -0,0 +1,12 @@
|
||||
:: LiSt directory subnodes
|
||||
::
|
||||
:::: /hoon+ls+gen
|
||||
::
|
||||
// /%/subdir
|
||||
!:
|
||||
::::
|
||||
::
|
||||
:- %say
|
||||
|= {^ {arg/path $~} $~}
|
||||
=+ lon=((hard arch) .^(%cy arg))
|
||||
tang+[?~(dir.lon leaf+"~" (subdir arg dir.lon))]~
|
20
gen/ls/subdir.hoon
Normal file
20
gen/ls/subdir.hoon
Normal file
@ -0,0 +1,20 @@
|
||||
|%
|
||||
++ subdir
|
||||
|= {pax/path des/(map @t $~)}
|
||||
^- tank
|
||||
:+ %rose [" " `~]
|
||||
%+ turn (sort (~(tap by des)) aor)
|
||||
|= {kid/@ta $~}
|
||||
=+ paf=`path`/[kid]
|
||||
=- :+ %rose ["/" ~ ?:(dir "/" ~)]
|
||||
(turn paf |=(a/span leaf+(trip a)))
|
||||
|- ^- {dir/? paf/path}
|
||||
=+ arf=;;(arch .^(%cy (weld pax paf)))
|
||||
?^ fil.arf
|
||||
[| paf]
|
||||
?~ dir.arf
|
||||
[& paf] :: !!
|
||||
?. ?+({^ $~ $~} dir.arf)
|
||||
[& paf]
|
||||
$(paf (welp paf /[p.n.dir.arf]))
|
||||
--
|
2
gen/make.hoon
Normal file
2
gen/make.hoon
Normal file
@ -0,0 +1,2 @@
|
||||
:- %say
|
||||
|=({^ arg/(list @) foo/_`@`1 bar/_`@`2} noun+[arg foo bar])
|
16
gen/moon.hoon
Normal file
16
gen/moon.hoon
Normal file
@ -0,0 +1,16 @@
|
||||
::
|
||||
:::: /hoon+ticket+gen
|
||||
::
|
||||
/? 314
|
||||
::
|
||||
::::
|
||||
!:
|
||||
:- %say
|
||||
|= $: {now/@da eny/@uvI bec/beak}
|
||||
[$~ $~]
|
||||
==
|
||||
:- %noun
|
||||
?> =(1 (met 5 p.bec))
|
||||
=+ mon=(mix (lsh 5 1 (end 5 1 eny)) p.bec)
|
||||
=+ tic=((hard @p) .^(/a+(scot %p p.bec)/tick+(scot %da now)/(scot %p mon)))
|
||||
"moon: {<`@p`mon>}; ticket: {<tic>}"
|
24
gen/pope.hoon
Normal file
24
gen/pope.hoon
Normal file
@ -0,0 +1,24 @@
|
||||
:: Input twitter keys
|
||||
/- sole
|
||||
!:
|
||||
=+ cryp=bruw :: XX change to ec2 ++brew eventually
|
||||
=+ [sole]
|
||||
:- %ask
|
||||
|= $: {now/@da eny/@uvI bec/beak}
|
||||
{{who/ship $~} $~}
|
||||
==
|
||||
^- (sole-result (cask tang))
|
||||
%+ sole-yo leaf+"generating carrier {(scow %p who)} (#{(scow %ud who)})"
|
||||
%+ sole-lo [%| %pope-pass "passphrase: "]
|
||||
%+ sole-go (boss 256 (star prn))
|
||||
|= fra/@t
|
||||
%+ sole-lo [%| %pope-none "[press enter to compute]"] :: XX oy
|
||||
%+ sole-go (easy ~)
|
||||
|= $~
|
||||
=+ bur=(shax (add who (shax fra)))
|
||||
~& %computing-fingerprint
|
||||
=+ arc=(cryp 2.048 bur)
|
||||
%+ sole-so %tang
|
||||
:~ leaf+"generator: {(scow %uw bur)}"
|
||||
leaf+"fingerprint: {(scow %uw fig:ex:arc)}"
|
||||
==
|
21
gen/tree.hoon
Normal file
21
gen/tree.hoon
Normal file
@ -0,0 +1,21 @@
|
||||
:: Tree view recursive directory contents
|
||||
::
|
||||
:::: /hoon+tree+gen
|
||||
::
|
||||
!:
|
||||
::::
|
||||
::
|
||||
:- %say
|
||||
|= {^ {pax/path fla/$@($~ {$full $~})} $~}
|
||||
=+ len=(lent pax)
|
||||
=+ rend=?^(fla smyt |=(a/path (smyt (slag len a))))
|
||||
:- %tang %- flop
|
||||
|- ^- tang
|
||||
=+ ark=;;(arch .^(cy+pax))
|
||||
=- ?~ fil.ark -
|
||||
[(rend pax) -]
|
||||
%- zing
|
||||
%+ turn
|
||||
(sort (~(tap by dir.ark)) aor)
|
||||
|= {a/@t $~}
|
||||
^$(pax (welp pax /[a]))
|
10
gen/twit/as.hoon
Normal file
10
gen/twit/as.hoon
Normal file
@ -0,0 +1,10 @@
|
||||
/- twitter
|
||||
::
|
||||
::::
|
||||
::
|
||||
[twitter .]
|
||||
:- %say
|
||||
|= $: {now/@da eny/@uvI bec/beak}
|
||||
{{who/span msg/cord $~} $~}
|
||||
==
|
||||
[%twit-do [who %post eny msg]]
|
20
gen/twit/auth.hoon
Normal file
20
gen/twit/auth.hoon
Normal file
@ -0,0 +1,20 @@
|
||||
:: Input twitter keys
|
||||
/- sole, twitter
|
||||
!:
|
||||
[sole twitter .]
|
||||
|%
|
||||
++ baz64 (cook crip (star alp))
|
||||
--
|
||||
!:
|
||||
:- %ask
|
||||
|= $: {now/@da eny/@uvI bec/beak}
|
||||
{$~ $~}
|
||||
==
|
||||
^- (sole-result (cask twit-do))
|
||||
%+ sole-lo [%& %$ "User: "] %+ sole-go urs:ab |= acc=span
|
||||
%+ sole-lo [%& %$ "App token: "] %+ sole-go baz64 |= ctok=cord
|
||||
%+ sole-lo [%& %$ "App secret: "] %+ sole-go baz64 |= csec=cord
|
||||
%+ sole-lo [%& %$ "User token: "] %+ sole-go baz64 |= atok=cord
|
||||
%+ sole-lo [%& %$ "User secret: "] %+ sole-go baz64 |= asec=cord
|
||||
(sole-so %twit-do [acc %auth [ctok csec] atok asec])
|
||||
|
13
gen/twit/tweet.hoon
Normal file
13
gen/twit/tweet.hoon
Normal file
@ -0,0 +1,13 @@
|
||||
/+ sh-utils
|
||||
!:
|
||||
|_ {hide $~}
|
||||
++ peer _`.
|
||||
++ poke--args
|
||||
%+ add-subs [[our /twit] our /post+(scot %uv eny)]
|
||||
%^ gate-mess .
|
||||
|=([a=span b=cord ~] [/twit %twit-do !>([a %post eny b])])
|
||||
,_`.
|
||||
++ posh-twit-stat
|
||||
(args-into-gate . |=({@ @ a/@da @} tang+~[leaf+"tweet received {<a>}"]))
|
||||
++ pour |*({ost/@ * sih/{@ ^}} :_(+>.$ [ost %give +.sih]~))
|
||||
--
|
22
gen/twit/twitter-feed.hoon
Normal file
22
gen/twit/twitter-feed.hoon
Normal file
@ -0,0 +1,22 @@
|
||||
:: Display twitter feed
|
||||
::
|
||||
:::: /hook+core+twitter-feed+app
|
||||
::
|
||||
/+ sh-utils
|
||||
!:
|
||||
::
|
||||
:::: ~fyr
|
||||
::
|
||||
|_ {hide $~}
|
||||
++ stat {id/@u who/@ta now/@da txt/@t}
|
||||
++ rens
|
||||
:- %say
|
||||
|=(stat rose+[": " `~]^~[leaf+"{<now>} @{(trip who)}" leaf+(trip txt)])
|
||||
++ peer _`.
|
||||
++ poke--args
|
||||
|= {ost/bone his/ship who/span $~}
|
||||
%.(+< (add-subs [[our /twit] our /user+[who]] ,_`+>.$))
|
||||
::
|
||||
++ posh-twit-feed
|
||||
(args-into-gate . |+(a=(list stat) tang+(turn a rens)))
|
||||
--
|
19
lib/down-jet.hoon
Normal file
19
lib/down-jet.hoon
Normal file
@ -0,0 +1,19 @@
|
||||
::
|
||||
:::: /hoon+down-jet+lib
|
||||
::
|
||||
/- markdown
|
||||
::
|
||||
::::
|
||||
::
|
||||
[markdown .]
|
||||
// /%/parse :: inli donp parse
|
||||
// /%/rend :: sing sung sang flat into-inner
|
||||
~% %down ..is ~
|
||||
|%
|
||||
++ mark
|
||||
~/ %mark
|
||||
|= p/@t
|
||||
(normalize (rash p parse))
|
||||
::
|
||||
++ print sing
|
||||
--
|
1002
lib/down-jet/parse.hoon
Normal file
1002
lib/down-jet/parse.hoon
Normal file
File diff suppressed because it is too large
Load Diff
239
lib/down-jet/rend.hoon
Normal file
239
lib/down-jet/rend.hoon
Normal file
@ -0,0 +1,239 @@
|
||||
:: ++down rendering arms
|
||||
!:
|
||||
::::
|
||||
::
|
||||
|%
|
||||
++ into-inner
|
||||
|= {a/marl b/manx}
|
||||
?~ c.b b(c a)
|
||||
$(b i.c.b)
|
||||
::
|
||||
++ flat
|
||||
|= a/marl
|
||||
^- tape
|
||||
?~ a ~
|
||||
%- weld :_ $(a t.a)
|
||||
^- tape
|
||||
?~ n.g.i.a
|
||||
?>(?=(_:/(**) i.a) v.i.a.g.i.a)
|
||||
?+ n.g.i.a $(a c.i.a)
|
||||
$img
|
||||
%- zing ^- wall
|
||||
%+ murn a.g.i.a |= {a/mane b/tape}
|
||||
^- (unit tape)
|
||||
?+ a ~
|
||||
$alt [~ b]
|
||||
==
|
||||
==
|
||||
++ sanitize
|
||||
|= a/marl ^- tape
|
||||
=- (zing `wall`(scan (flat a) fel))
|
||||
=< fel=;~(sfix (star ;~(plug (cold '-' -) (plus +))) (star next))
|
||||
[(star ;~(less aln prn)) ;~(pose nud low (cook |=(a/@ (add a ' ')) hig))]
|
||||
::
|
||||
++ sang :: tight item children
|
||||
|= a/(list elem)
|
||||
^- marl
|
||||
?~ a ~
|
||||
%- weld :_ $(a t.a)
|
||||
?. ?=($para -.i.a)
|
||||
(sing i.a ~)
|
||||
(sung p.i.a)
|
||||
::
|
||||
++ sing :: elem to manx
|
||||
=> |%
|
||||
++ first-word
|
||||
|= a/tape
|
||||
=. a (trip (crip a)) :: XX valid tapes
|
||||
^- (unit tape)
|
||||
=. a q.q:(need q:((star ace) [1 1] a))
|
||||
=+ vex=((plus ;~(less ace prn)) [1 1] a)
|
||||
?~ q.vex ~
|
||||
(some (wonk vex))
|
||||
--
|
||||
=+ [tig=| had=*(unit mane)]
|
||||
|= lum/(list elem)
|
||||
|^ ^- marl
|
||||
=+ a=apex
|
||||
?~ q.a
|
||||
p.a
|
||||
(weld p.a $(lum q.a))
|
||||
::
|
||||
++ apex
|
||||
^- {p/marl q/_lum}
|
||||
?~ lum
|
||||
?~ had [~ ~]
|
||||
(lose "unclosed {<u.had>}")
|
||||
=> [ele=i.lum .(lum t.lum)]
|
||||
?. ?=($html -.ele)
|
||||
(push (reso ele) ~)
|
||||
:: begin reparsing of html that the spec jankily lets through ::
|
||||
=+ tex=(trip (role p.ele))
|
||||
=^ mar lum (chomp tex (sear |=(a/marl ?~(a ~ (some a))) many:poxa))
|
||||
?^ mar
|
||||
(push u.mar)
|
||||
=^ hed lum (chomp tex head:poxa)
|
||||
?^ hed
|
||||
=+ max=`marx`u.hed
|
||||
(push(lum q) [max p] ~):[apex(had `n.max) .]
|
||||
=^ tal lum (chomp tex tail:poxa)
|
||||
?~ tal
|
||||
=^ cha lum (chomp tex prn)
|
||||
?^ cha
|
||||
(push :/([u.cha]~) ~)
|
||||
(push ;lost:"{tex}" ~)
|
||||
?: =(had tal)
|
||||
[~ lum]
|
||||
?^ had
|
||||
=. lum [ele lum]
|
||||
(lose "unclosed {<u.had>}")
|
||||
(lose "close {<u.tal>}")
|
||||
:: end reparsing of html that the spec jankily lets through ::
|
||||
::
|
||||
++ lose |=(a/tape [[;lost:"{a}"]~ lum])
|
||||
++ chomp
|
||||
|* {tap/tape fel/rule}
|
||||
^- {(unit _(wonk *fel)) _lum}
|
||||
=+ vex=(fel 1^1 tap)
|
||||
?~ q.vex [~ lum]
|
||||
:- [~ (wonk vex)]
|
||||
?~(q.q.u.q.vex lum [[%html (lore (crip q.q.u.q.vex))] lum])
|
||||
::
|
||||
++ push
|
||||
|= a/marl
|
||||
^+ apex
|
||||
?~ a apex
|
||||
[[b p] q]:[b=i.a (push t.a)]
|
||||
::
|
||||
++ reso
|
||||
|= a/elem
|
||||
?^ -.a
|
||||
=. tig ?.(?=($list -.p.a) tig p.p.a)
|
||||
?: &(tig ?=($item -.p.a))
|
||||
[/li (sang q.a)]
|
||||
%+ into-inner ^$(lum q.a)
|
||||
?- -.p.a
|
||||
$bloq ;blockquote;
|
||||
$item ;li;
|
||||
$list ?@ q.p.a ;ul;
|
||||
?: =(1 p.q.p.a) ;ol;
|
||||
=+ num=(pojo (jone p.q.p.a))
|
||||
;ol(start num);
|
||||
==
|
||||
?- -.a :: :/("unimplemented {<p.a>}")
|
||||
$html !! :: handled earlier XX do type stuff
|
||||
$para [/p (sung p.a)]
|
||||
$head
|
||||
=+ [hed=(add %h0 (lsh 3 1 p.a)) kid=(sung q.a)]
|
||||
[[hed id+(sanitize kid) ~] kid]
|
||||
::
|
||||
$hrul ;hr;
|
||||
$meta =+ jon=`json`o+(~(run by p.a) |=(cord s++<))
|
||||
;meta(value "{(pojo jon)}", name "frontmatter", urb_front "");
|
||||
:: %html
|
||||
::=+ tex=(role (turn p.a crip))
|
||||
::=+ (poxa tex)
|
||||
::?^ - u.-
|
||||
::=+ (rush tex (star ;~(pose gah comt:poxa)))
|
||||
::?^ - :/(~)
|
||||
::;lost: {<p.a>}
|
||||
:: :/([(role (turn p.a crip))]~) :: XX haaaaaaack
|
||||
$defn :/(~)
|
||||
$code =+ lan=?~(p.a ~ (first-word r.u.p.a))
|
||||
=+ tex=(trip (role q.a))
|
||||
?~ lan ;pre:code:"{tex}"
|
||||
;pre:code(class "language-{u.lan}"):"{tex}"
|
||||
|
||||
==
|
||||
--
|
||||
::
|
||||
++ sung
|
||||
|= lim/kids
|
||||
=+ had=*(unit mane)
|
||||
|^ ^- marl
|
||||
=+ a=apex
|
||||
?~ q.a
|
||||
p.a
|
||||
(weld p.a $(lim q.a))
|
||||
::
|
||||
++ apex
|
||||
^- {p/marl q/_lim}
|
||||
?~ lim
|
||||
?~ had [~ ~]
|
||||
(lose "unclosed {<u.had>}")
|
||||
=> [ele=i.lim .(lim t.lim)]
|
||||
?. ?=($htmt -.ele)
|
||||
?: &(?=($$ -.ele) ?=({{$$ *} *} lim))
|
||||
apex(p.i.lim (weld p.ele p.i.lim))
|
||||
(push (reso ele) ~)
|
||||
=+ tex=(trip p.ele)
|
||||
=^ emo lim (chomp tex empt:poxa)
|
||||
?^ emo
|
||||
=+ man=`manx`u.emo
|
||||
(push man ~)
|
||||
=^ hed lim (chomp tex head:poxa)
|
||||
?^ hed
|
||||
=+ max=`marx`u.hed
|
||||
(push(lim q) [max p] ~):[apex(had `n.max) .]
|
||||
=^ tal lim (chomp tex tail:poxa)
|
||||
?~ tal
|
||||
(push ;lost:"{tex}" ~)
|
||||
?: =(had tal)
|
||||
[~ lim]
|
||||
?^ had
|
||||
=. lim [ele lim]
|
||||
(lose "unclosed {<u.had>}")
|
||||
(lose "unopened {<u.tal>}")
|
||||
::
|
||||
++ lose |=(a/tape [[;lost:"{a}"]~ lim])
|
||||
++ chomp
|
||||
|* {tap/tape fel/rule}
|
||||
^- {(unit _(wonk *fel)) _lim}
|
||||
=+ vex=(fel 1^1 tap)
|
||||
?~ q.vex [~ lim]
|
||||
:- [~ (wonk vex)]
|
||||
?~(q.q.u.q.vex lim [[%htmt (crip q.q.u.q.vex)] lim])
|
||||
::
|
||||
++ push
|
||||
|= a/marl
|
||||
^+ apex
|
||||
?~ a apex
|
||||
[[b p] q]:[b=i.a (push t.a)]
|
||||
::
|
||||
++ urly
|
||||
|= a/tape ^- tape
|
||||
?~ a ~
|
||||
:: ?: (gth i.a 0xff) "XX" :: XX
|
||||
?: ?| [?=(^ q)]:(alp 1^1 a)
|
||||
(~(has in (sa "!*'();:@&=+$,/?/%.~_")) i.a) :: XX reparse
|
||||
==
|
||||
[i.a $(a t.a)]
|
||||
(weld (urle (trip i.a)) $(a t.a))
|
||||
::
|
||||
++ reso
|
||||
|= b/inline
|
||||
^- manx
|
||||
?@ -.b
|
||||
?- -.b
|
||||
$$ :/(p.b)
|
||||
$line ;br;
|
||||
$code ;code:"{p.b}"
|
||||
$htmt !! ::p.b :: handled earlier :: XX do type stuff
|
||||
==
|
||||
?: ?=($blot -.p.b)
|
||||
=+ res=`manx`;img(src (urly p.p.b), alt (flat (turn q.b ..$)));
|
||||
:: ;img@"{p.p.b}";
|
||||
?~ q.p.b res
|
||||
res(a.g (welp a.g.res title+u.q.p.b ~))
|
||||
=+ kid=(sung q.b)
|
||||
%+ into-inner kid
|
||||
?- p.b
|
||||
{$emph ?} ?.(p.p.b ;em; ;strong;)
|
||||
{$delt $~} ;del;
|
||||
{$link ^} =+ url=(urly p.p.b)
|
||||
=. url ?^(url url "#{(sanitize kid)}")
|
||||
?~ q.p.b ;a/"{url}";
|
||||
;a/"{url}"(title u.q.p.b);
|
||||
==
|
||||
--
|
||||
--
|
34
lib/frontmatter.hoon
Normal file
34
lib/frontmatter.hoon
Normal file
@ -0,0 +1,34 @@
|
||||
::
|
||||
:::: /hoon+frontmatter+lib
|
||||
::
|
||||
/? 314
|
||||
!:
|
||||
|%
|
||||
++ atr-lines
|
||||
|= atr/(map cord cord)
|
||||
%+ turn (sort (~(tap by atr)) |=({{a/@ @} {b/@ @}} (aor a b)))
|
||||
|= {k/cord v/cord}
|
||||
(rap 3 k ': ' v ~)
|
||||
::
|
||||
++ atr-key ;~(sfix (star ;~(less col prn)) col ace)
|
||||
++ print
|
||||
|= {atr/(map cord cord) src/wain}
|
||||
?~ atr src
|
||||
['---' (welp (atr-lines atr) '---' src)]
|
||||
++ parse
|
||||
=| atr/(map cord cord)
|
||||
|= wan/wain ^+ [atr mud='']
|
||||
?~ wan [~ '']
|
||||
?^ (rush i.wan (star ace))
|
||||
$(wan t.wan)
|
||||
?. =('---' i.wan) [~ (role wan)]
|
||||
|- ^+ [atr mud='']
|
||||
?~ t.wan ~|(%unclosed-metadata !!)
|
||||
?: =('---' i.t.wan) [atr (role t.t.wan)]
|
||||
?^ (rush i.t.wan (star ace))
|
||||
$(wan t.wan)
|
||||
=- $(wan t.wan, atr (~(put by atr) (crip key) (crip val)))
|
||||
~| malformed-attribute+i.t.wan
|
||||
^- {key/tape ^ val/tape}
|
||||
+>:(atr-key 1^1 (trip i.t.wan))
|
||||
--
|
43
lib/oct1.hoon
Normal file
43
lib/oct1.hoon
Normal file
@ -0,0 +1,43 @@
|
||||
:: :: ::
|
||||
:::: /hoon+oct1/lib :::::: dependencies
|
||||
:: :: ::
|
||||
/? 310 :: arvo version
|
||||
/- oct1 :: structures
|
||||
=> ^oct1 :: namespace
|
||||
:: :: ::
|
||||
:::: :::::: semantics
|
||||
!: :: ::
|
||||
|% ::
|
||||
++ icon |=(? ?:(+< 'X' 'O')) :: display at
|
||||
++ bo :: per board
|
||||
|_ bud/board ::
|
||||
++ bit |=(@ =(1 (cut 0 [+< 1] bud))) :: moved at address
|
||||
++ get |=(point (bit (off +<))) :: get point
|
||||
++ off |=(point (add x (mul 3 y))) :: bitfield address
|
||||
++ set |=(point (con bud (bex (off +<)))) :: set point
|
||||
++ win %- lien :_ |=(a/@ =(a (dis a bud))) :: test for win
|
||||
(rip 4 0wl04h0.4A0Aw.4A00s.0e070) :: with bitmasks
|
||||
-- ::
|
||||
++ go :: play from
|
||||
|_ game:oct1 ::
|
||||
++ at |_ point :: per point
|
||||
++ g +>+< :: game
|
||||
++ k !|(x o) :: legal move
|
||||
++ m ?.(k [| g] [& g:t:?:(who y p)]) :: move
|
||||
++ o (~(get bo boo) +<) :: old at o
|
||||
++ p .(boo (~(set bo boo) +<)) :: play at o
|
||||
++ t .(who !who) :: take turn
|
||||
++ v ?:(x (icon &) ?:(o (icon |) '.')) :: view
|
||||
++ x (~(get bo box) +<) :: old at x
|
||||
++ y .(box (~(set bo box) +<)) :: play at x
|
||||
-- ::
|
||||
++ new +<(boo 0, box 0, who &) :: reset game
|
||||
++ res ?. |(~(win bo box) ~(win bo boo)) :: possible result
|
||||
?: =(511 (con boo box)) ::
|
||||
`"tie :-(" ~ `"{<~[(icon who)]>} wins" ::
|
||||
++ row |= y/@ :- (add y '1') %- zing :: print row
|
||||
(turn (gulf 0 3) |=(@ ~[' ' ~(v at y +<)])) ::
|
||||
++ tab ~["+ 1 2 3" (row 0) (row 1) (row 2)] :: print table
|
||||
++ voy ": {<~[(icon who)]>} (row+col): " :: print prompt
|
||||
--
|
||||
--
|
59
lib/oct2.hoon
Normal file
59
lib/oct2.hoon
Normal file
@ -0,0 +1,59 @@
|
||||
:: :: ::
|
||||
:::: /hoon+oct2/lib :::::: dependencies
|
||||
:: :: ::
|
||||
/? 310 :: arvo version
|
||||
/- oct2 :: structures
|
||||
=> ^oct2 :: namespace
|
||||
:: :: ::
|
||||
:::: :::::: semantics
|
||||
!: :: ::
|
||||
|% ::
|
||||
++ icon |=(? ?:(+< 'X' 'O')) :: display at
|
||||
++ bo :: per board
|
||||
|_ bud/board ::
|
||||
++ bit |=(@ =(1 (cut 0 [+< 1] bud))) :: moved at address
|
||||
++ get |=(point (bit (off +<))) :: get point
|
||||
++ off |=(point (add x (mul 3 y))) :: bitfield address
|
||||
++ set |=(point (con bud (bex (off +<)))) :: set point
|
||||
++ win %- lien :_ |=(a/@ =(a (dis a bud))) :: test for win
|
||||
(rip 4 0wl04h0.4A0Aw.4A00s.0e070) :: with bitmasks
|
||||
-- ::
|
||||
++ go :: play from
|
||||
|_ {src/ship game} ::
|
||||
++ at |_ point :: per point
|
||||
++ g `game`+>+<+ :: game
|
||||
++ k &(!|(x o) ept) :: legal move
|
||||
++ m ?.(k [| g] [& g:t:?:(who y p)]) :: move
|
||||
++ o (~(get bo boo) +<) :: old at o
|
||||
++ p .(boo (~(set bo boo) +<), q.sag `src) :: play at o
|
||||
++ t .(who !who) :: take turn
|
||||
++ v ?:(x (icon &) ?:(o (icon |) '.')) :: view
|
||||
++ x (~(get bo box) +<) :: old at x
|
||||
++ y .(box (~(set bo box) +<), p.sag `src) :: play at x
|
||||
-- ::
|
||||
++ ept =+(own |(&(=(~ -) !=(oth `src)) =(`src -))) :: we can play
|
||||
++ hey |=(? +>+<+(aud ((stat ship) +< src aud))) :: enter+leave
|
||||
++ muy |= (list ship) ?~ +< +>+<+ :: many in audience
|
||||
$(+< t.+<, aud ((stat ship) & i.+< aud)) ::
|
||||
++ nam =+ ?: =(p.sag `src) ['=' (icon &) ~] :: print name
|
||||
?: =(q.sag `src) ['=' (icon |) ~] ::
|
||||
"" (welp (scow %p src) `tape`-) ::
|
||||
++ new +<+(boo 0, box 0, who &, sag [~ ~]) :: reset game
|
||||
++ oth own(who !who) :: who owns other turn
|
||||
++ own ?:(who p.sag q.sag) :: who owns this turn
|
||||
++ res ?. |(~(win bo box) ~(win bo boo)) :: possible result
|
||||
?: =(511 (con boo box)) ::
|
||||
`"tie :-(" ~ `"{<nam>} wins" ::
|
||||
++ row |= y/@ :- (add y '1') %- zing :: print row
|
||||
(turn (gulf 0 3) |=(@ ~[' ' ~(v at y +<)])) ::
|
||||
++ str =+ [own ~[(icon who)]] ^- tape :: print player
|
||||
?~(-< -> (scow %p u.-<)) ::
|
||||
++ tab ~["+ 1 2 3" (row 0) (row 1) (row 2)] :: print table
|
||||
++ vew =- ?: =(~ -) ~ :(weld "[" - "]") :: print watchers
|
||||
=+ dow=(~(tap by aud)) |- ^- tape ::
|
||||
?~ dow ~ =+ mor=$(dow t.dow) ::
|
||||
:(weld nam(src p.i.dow) ?~(mor "" ", ") mor) ::
|
||||
++ voy =+ ~[(icon who)] %+ weld vew :: print prompt
|
||||
?.(ept " ({-}'s turn) " ": {-} (row+col): ")::
|
||||
--
|
||||
--
|
60
lib/oct3.hoon
Normal file
60
lib/oct3.hoon
Normal file
@ -0,0 +1,60 @@
|
||||
:: :: ::
|
||||
:::: /hoon+oct3/lib :::::: dependencies
|
||||
:: :: ::
|
||||
/? 310 :: arvo version
|
||||
/- oct3 :: structures
|
||||
:: :: ::
|
||||
:::: :::::: semantics
|
||||
!: :: ::
|
||||
[. ^oct3]
|
||||
|% ::
|
||||
++ icon |=(? ?:(+< 'X' 'O')) :: display at
|
||||
++ bo :: per board
|
||||
|_ bud/board ::
|
||||
++ bit |=(@ =(1 (cut 0 [+< 1] bud))) :: moved at address
|
||||
++ get |=(point (bit (off +<))) :: get point
|
||||
++ jon a+(turn (gulf 0 9) |=(@ b+(bit +<))) :: to json
|
||||
++ off |=(point (add x (mul 3 y))) :: bitfield address
|
||||
++ set |=(point (con bud (bex (off +<)))) :: set point
|
||||
++ win %- lien :_ |=(a/@ =(a (dis a bud))) :: test for win
|
||||
(rip 4 0wl04h0.4A0Aw.4A00s.0e070) :: with bitmasks
|
||||
-- ::
|
||||
++ go :: play from
|
||||
|_ {src/ship game} ::
|
||||
++ at |_ point :: per point
|
||||
++ g `game`+>+<+ :: game
|
||||
++ k &(!|(x o) ept) :: legal move
|
||||
++ m ?.(k [| g] [& g:t:?:(who y p)]) :: move
|
||||
++ o (~(get bo boo) +<) :: old at o
|
||||
++ p .(boo (~(set bo boo) +<), q.sag `src) :: play at o
|
||||
++ t .(who !who) :: take turn
|
||||
++ v ?:(x (icon &) ?:(o (icon |) '.')) :: view
|
||||
++ x (~(get bo box) +<) :: old at x
|
||||
++ y .(box (~(set bo box) +<), p.sag `src) :: play at x
|
||||
-- ::
|
||||
++ ept =+(own |(&(=(~ -) !=(oth `src)) =(`src -))) :: we can play
|
||||
++ hey |=(? +>+<+(aud ((stat ship) +< src aud))) :: enter+leave
|
||||
++ muy |= (list ship) ?~ +< +>+<+ :: many in audience
|
||||
$(+< t.+<, aud ((stat ship) & i.+< aud)) ::
|
||||
++ nam =+ ?: =(p.sag `src) ['=' (icon &) ~] :: print name
|
||||
?: =(q.sag `src) ['=' (icon |) ~] ::
|
||||
"" (welp (scow %p src) `tape`-) ::
|
||||
++ new +<+(boo 0, box 0, who &, sag [~ ~]) :: reset game
|
||||
++ oth own(who !who) :: who owns other turn
|
||||
++ own ?:(who p.sag q.sag) :: who owns this turn
|
||||
++ res ?. |(~(win bo box) ~(win bo boo)) :: possible result
|
||||
?: =(511 (con boo box)) ::
|
||||
`"tie :-(" ~ `"{<nam>} wins" ::
|
||||
++ row |= y/@ :- (add y '1') %- zing :: print row
|
||||
(turn (gulf 0 3) |=(@ ~[' ' ~(v at y +<)])) ::
|
||||
++ str =+ [own ~[(icon who)]] ^- tape :: print player
|
||||
?~(-< -> (scow %p u.-<)) ::
|
||||
++ tab ~["+ 1 2 3" (row 0) (row 1) (row 2)] :: print table
|
||||
++ vew =- ?: =(~ -) ~ :(weld "[" - "]") :: print watchers
|
||||
=+ dow=(~(tap by aud)) |- ^- tape ::
|
||||
?~ dow ~ =+ mor=$(dow t.dow) ::
|
||||
:(weld nam(src p.i.dow) ?~(mor "" ", ") mor) ::
|
||||
++ voy =+ ~[(icon who)] %+ weld vew :: print prompt
|
||||
?.(ept " ({-}'s turn) " ": {-} (row+col): ")::
|
||||
--
|
||||
--
|
60
lib/oct4.hoon
Normal file
60
lib/oct4.hoon
Normal file
@ -0,0 +1,60 @@
|
||||
:: :: ::
|
||||
:::: /hoon+oct4/lib :: :: dependencies
|
||||
:: :: ::
|
||||
/? 310 :: arvo version
|
||||
/- oct4 :: structures
|
||||
:: :: ::
|
||||
:::: :: :: semantics
|
||||
!: :: ::
|
||||
[. ^oct4]
|
||||
|%
|
||||
++ icon |=(? ?:(+< 'X' 'O')) :: display at
|
||||
++ bo :: per board
|
||||
|_ bud/board ::
|
||||
++ bit |=(@ =(1 (cut 0 [+< 1] bud))) :: moved at address
|
||||
++ get |=(point (bit (off +<))) :: get point
|
||||
++ jon a+(turn (gulf 0 9) |=(@ b+(bit +<))) :: to json
|
||||
++ off |=(point (add x (mul 3 y))) :: bitfield address
|
||||
++ set |=(point (con bud (bex (off +<)))) :: set point
|
||||
++ win %- lien :_ |=(a/@ =(a (dis a bud))) :: test for win
|
||||
(rip 4 0wl04h0.4A0Aw.4A00s.0e070) :: with bitmasks
|
||||
-- ::
|
||||
++ go :: play from
|
||||
|_ {src/ship game} ::
|
||||
++ at |_ point :: per point
|
||||
++ g `game`+>+<+ :: game
|
||||
++ k &(!|(x o) ept) :: legal move
|
||||
++ m ?.(k [| g] [& g:t:?:(who y p)]) :: move
|
||||
++ o (~(get bo boo) +<) :: old at o
|
||||
++ p .(boo (~(set bo boo) +<), q.sag `src) :: play at o
|
||||
++ t .(who !who) :: take turn
|
||||
++ v ?:(x (icon &) ?:(o (icon |) '.')) :: view
|
||||
++ x (~(get bo box) +<) :: old at x
|
||||
++ y .(box (~(set bo box) +<), p.sag `src) :: play at x
|
||||
-- ::
|
||||
++ ept =+(own |(&(=(~ -) !=(oth `src)) =(`src -))) :: we can play
|
||||
++ hey |=(? +>+<+(aud ((stat ship) +< src aud))) :: enter+leave
|
||||
++ muy |= (list ship) ?~ +< +>+<+ :: many in audience
|
||||
$(+< t.+<, aud ((stat ship) & i.+< aud)) ::
|
||||
++ nam =+ ?: =(p.sag `src) ['=' (icon &) ~] :: print name
|
||||
?: =(q.sag `src) ['=' (icon |) ~] ::
|
||||
"" (welp (scow %p src) `tape`-) ::
|
||||
++ new +<+(boo 0, box 0, who &, sag [~ ~]) :: reset game
|
||||
++ oth own(who !who) :: who owns other turn
|
||||
++ own ?:(who p.sag q.sag) :: who owns this turn
|
||||
++ res ?. |(~(win bo box) ~(win bo boo)) :: possible result
|
||||
?: =(511 (con boo box)) ::
|
||||
`"tie :-(" ~ `"{<nam>} wins" ::
|
||||
++ row |= y/@ :- (add y '1') %- zing :: print row
|
||||
(turn (gulf 0 3) |=(@ ~[' ' ~(v at y +<)])) ::
|
||||
++ str =+ [own ~[(icon who)]] ^- tape :: print player
|
||||
?~(-< -> (scow %p u.-<)) ::
|
||||
++ tab ~["+ 1 2 3" (row 0) (row 1) (row 2)] :: print table
|
||||
++ vew =- ?: =(~ -) ~ :(weld "[" - "]") :: print watchers
|
||||
=+ dow=(~(tap by aud)) |- ^- tape ::
|
||||
?~ dow ~ =+ mor=$(dow t.dow) ::
|
||||
:(weld nam(src p.i.dow) ?~(mor "" ", ") mor) ::
|
||||
++ voy =+ ~[(icon who)] %+ weld vew :: print prompt
|
||||
?.(ept " ({-}'s turn) " ": {-} (row+col): ")::
|
||||
--
|
||||
--
|
132
lib/react.hoon
Normal file
132
lib/react.hoon
Normal file
@ -0,0 +1,132 @@
|
||||
!:
|
||||
|%
|
||||
++ react-elems :: XX /~
|
||||
~+ %- sa ^- (list term)
|
||||
:~ %a %abbr %address %area %article %aside %audio %b %base
|
||||
%bdi %bdo %big %blockquote %body %br %button %canvas %caption
|
||||
%cite %code %col %colgroup %data %datalist %dd %del %details
|
||||
%dfn %dialog %div %dl %dt %em %embed %fieldset %figcaption
|
||||
%figure %footer %form %h1 %h2 %h3 %h4 %h5 %h6 %head %header
|
||||
%hr %html %i %iframe %img %input %ins %kbd %keygen %label
|
||||
%legend %li %link %main %map %mark %menu %menuitem %meta
|
||||
%meter %nav %noscript %object %ol %optgroup %option %output %p
|
||||
%param %picture %pre %progress %q %rp %rt %ruby %s %samp
|
||||
%script %section %select %small %source %span %strong %style
|
||||
%sub %summary %sup %table %tbody %td %textarea %tfoot %th
|
||||
%thead %time %title %tr %track %u %ul %var %video %wbr
|
||||
%circle %defs %ellipse %g %line %linear-gradient %mask %path
|
||||
%pattern %polygon %polyline %radial-gradient %rect %stop %svg
|
||||
%text %tspan
|
||||
==
|
||||
++ react-attrs
|
||||
~+ ^- (map term cord)
|
||||
%- mo ^- (list {term cord})
|
||||
:- [%class 'className']
|
||||
=- (rash - (more next (cook |=(a/tape [(cass a) (crip a)]) (star alf))))
|
||||
'''
|
||||
accept acceptCharset accessKey action allowFullScreen allowTransparency alt
|
||||
async autoComplete autoFocus autoPlay cellPadding cellSpacing charSet checked
|
||||
classID className colSpan cols content contentEditable contextMenu controls
|
||||
coords crossOrigin data dateTime defer dir disabled download draggable encType
|
||||
form formAction formEncType formMethod formNoValidate formTarget frameBorder
|
||||
headers height hidden high href hrefLang htmlFor httpEquiv icon id label lang
|
||||
list loop low manifest marginHeight marginWidth max maxLength media mediaGroup
|
||||
method min multiple muted name noValidate open optimum pattern placeholder
|
||||
poster preload radioGroup readOnly rel required role rowSpan rows sandbox scope
|
||||
scoped scrolling seamless selected shape size sizes span spellCheck src srcDoc
|
||||
srcSet start step style tabIndex target title type useMap value width wmode
|
||||
'''
|
||||
++ react-vale
|
||||
~(has in react-elems)
|
||||
::
|
||||
++ react-to-json
|
||||
|= src/manx ^- json
|
||||
?: ?=(_:/(**) src)
|
||||
(jape v.i.a.g.src)
|
||||
=+ atr=(mo a.g.src)
|
||||
?: (~(has by atr) [%urb %codemirror])
|
||||
?> ?=({{$pre *} _:/(**) $~} src)
|
||||
$(src ;codemirror(value "{v.i.a.g.i.c.src}");)
|
||||
?: (~(has by atr) [%urb %exec]) :: runnable code attribute tag
|
||||
?> ?=({{$pre *} _:/(**) $~} src) :: verify its only a text node
|
||||
=* code v.i.a.g.i.c.src
|
||||
%_ $
|
||||
src
|
||||
=+ =< result=(mule .)
|
||||
!.(|.((slap !>(.) (ream (crip code))))) :: compile and run safely
|
||||
=+ claz=?:(-.result "rancode" "failedcode")
|
||||
;div(class "{claz}")
|
||||
;pre:"{code}"
|
||||
;+ ?: ?=($& -.result)
|
||||
;code:"{~(ram re (sell p.result))}"
|
||||
;pre
|
||||
;div:"error"
|
||||
;* %+ turn p.result
|
||||
|= a/tank
|
||||
^- manx
|
||||
;div:"{~(ram re a)}"
|
||||
== ==
|
||||
==
|
||||
%- jobe :~
|
||||
c+a+(turn c.src ..$)
|
||||
gn+s+(mane-to-cord n.g.src)
|
||||
=< ga+(jobe (turn a.g.src .))
|
||||
|= {a/mane b/tape} ^- {cord json}
|
||||
:_ (jape b)
|
||||
?^ a (mane-to-cord a)
|
||||
(fall (~(get by react-attrs) a) a)
|
||||
==
|
||||
::
|
||||
++ mane-to-cord |=(a/mane `cord`?@(a a (rap 3 -.a ':' +.a ~)))
|
||||
:: generates React javascript XX deprecated
|
||||
++ react-to-tape
|
||||
|= src/manx ^- tape
|
||||
?: (~(has by (mo a.g.src)) [%urb %codemirror])
|
||||
?> ?=({{$pre *} _:/(**) $~} src)
|
||||
$(src ;codemirror(value "{v.i.a.g.i.c.src}");)
|
||||
?: (~(has by (mo a.g.src)) [%urb %exec]) :: runnable code attribute tag
|
||||
?> ?=({{$pre *} _:/(**) $~} src) :: verify its only a text node
|
||||
=* code v.i.a.g.i.c.src
|
||||
=+ ^= result
|
||||
(mule |.((slap !>(.) (ream (crip code))))) :: compile and run safely
|
||||
?: ?=($.y -.result) :: it was ok
|
||||
=+ ^= new
|
||||
;div(class "rancode")
|
||||
;pre:"{code}"
|
||||
;code:"{~(ram re (sell p.result))}"
|
||||
==
|
||||
$(src new)
|
||||
=+ ^= error
|
||||
;div(class "failedcode")
|
||||
;pre:"{code}"
|
||||
;pre
|
||||
;div:"error"
|
||||
;* %+ turn
|
||||
(scag (dec (lent p.result)) p.result) :: hide react trace
|
||||
|= a/tank
|
||||
^- manx
|
||||
;div:"{~(ram re a)}"
|
||||
==
|
||||
==
|
||||
$(src error)
|
||||
;: weld
|
||||
"React.createElement("
|
||||
=* tan n.g.src
|
||||
?^ tan !! :: namespaces unsupported
|
||||
?: (react-vale tan)
|
||||
"'{(trip tan)}'"
|
||||
(trip tan)
|
||||
", "
|
||||
=- (pojo (jobe (turn a.g.src -)))
|
||||
|= {a/mane b/tape}
|
||||
=. a ?+(a a $class 'className')
|
||||
?^(a !! [a (jape b)])
|
||||
", "
|
||||
=< ~(ram re %rose [", " "[" "]"] (turn c.src .))
|
||||
|= a/manx
|
||||
?: ?=(_:/(**) a)
|
||||
leaf+(pojo (jape v.i.a.g.a))
|
||||
leaf+^$(src a)
|
||||
")"
|
||||
==
|
||||
--
|
65
lib/tree.hoon
Normal file
65
lib/tree.hoon
Normal file
@ -0,0 +1,65 @@
|
||||
/- tree-include
|
||||
!:
|
||||
|%
|
||||
++ extract
|
||||
|= a/marl ^- tape
|
||||
?~ a ~
|
||||
%- weld :_ $(a t.a)
|
||||
?. ?=(_:/(**) i.a)
|
||||
$(a c.i.a)
|
||||
v.i.a.g.i.a
|
||||
::
|
||||
++ getall
|
||||
|= tag/(list mane)
|
||||
|= ele/manx ^- marl
|
||||
?: (lien tag |=(a/mane =(a n.g.ele)))
|
||||
~[ele]
|
||||
(zing (turn c.ele ..$))
|
||||
::
|
||||
++ baff |*({a/(unit) b/(trap)} ?^(a a *b))
|
||||
++ find-in-tree
|
||||
|* {paz/fist:jo fun/$+(* (unit))}
|
||||
|= jon/json
|
||||
=+ a=`(list json)`~[jon]
|
||||
|^ (try)
|
||||
++ try
|
||||
|. ^+ *fun
|
||||
?~ a ~
|
||||
%+ biff (paz i.a)
|
||||
|* {b/(list json) c/*} ^+ *fun
|
||||
(baff (baff (fun c) try(a b)) try(a t.a))
|
||||
--
|
||||
::
|
||||
++ map-to-json
|
||||
|* {a/$+(* cord) b/$+(* json)}
|
||||
|* c/(map) ^- json
|
||||
~! c
|
||||
(jobe (turn (~(tap by c)) |*({k/* v/*} [(a k) (b v)])))
|
||||
::
|
||||
++ json-front
|
||||
|= a/json ^- json
|
||||
=- (fall `(unit json)`- ~)
|
||||
%. a
|
||||
%+ find-in-tree (ot c+(ar some) gn+so ga+(om so) ~):jo
|
||||
|= {nom/span atr/(map span cord)} ^- (unit json)
|
||||
?. (~(has by atr) 'urb:front') ~
|
||||
?> ?=($meta nom)
|
||||
(biff (~(get by atr) %value) poja)
|
||||
::
|
||||
++ read-schem
|
||||
=< (cook to-noun (cook to-tree apex))
|
||||
|%
|
||||
++ noun $@(term [noun noun]) :: shadow
|
||||
++ data $@(term {n/@ l/noun r/data})
|
||||
++ apex ;~(plug sym (star ;~(plug delim sym)))
|
||||
++ delim ;~(pose (cold 0 dot) (cook lent (plus cab)))
|
||||
++ to-noun |=(a/data ?@(a a [l.a $(a r.a)]))
|
||||
++ to-tree
|
||||
|= {acc/data a/(list {p/@u q/term})}
|
||||
%+ roll a =< .(acc ^acc)
|
||||
|= {{n/@u v/term} acc/data}
|
||||
?@ acc [n acc v]
|
||||
?: (gth n n.acc) [n (to-noun acc) v]
|
||||
acc(r $(acc r.acc))
|
||||
--
|
||||
--
|
544
lib/twitter.hoon
Normal file
544
lib/twitter.hoon
Normal file
@ -0,0 +1,544 @@
|
||||
:: A Twitter API library.
|
||||
::
|
||||
:::: /hoon+twitter+lib
|
||||
::
|
||||
/? 314
|
||||
/- twitter
|
||||
=+ twit:^twitter
|
||||
!:
|
||||
:::: functions
|
||||
::
|
||||
|%
|
||||
++ fass :: rewrite path
|
||||
|= a/path
|
||||
%- trip
|
||||
%^ gsub '-' '_'
|
||||
%+ reel a
|
||||
|= {p/@t q/@t}
|
||||
(cat 3 '/' (cat 3 p q))
|
||||
::
|
||||
++ gsub :: replace chars
|
||||
|= {a/@t b/@t t/@t}
|
||||
^- @t
|
||||
?~ t t
|
||||
%+ add (lsh 3 1 $(t (rsh 3 1 t)))
|
||||
=+ c=(mod t (bex 8))
|
||||
?:(=(a c) b c)
|
||||
::
|
||||
++ oauth :: OAuth 1.0 header
|
||||
|= $: med/meth
|
||||
url/tape
|
||||
pas/(list tape)
|
||||
key/keys
|
||||
zet/@
|
||||
ken/@
|
||||
==
|
||||
^- @t
|
||||
=+ non=(turn (rip 2 (shaw zet 128 ken)) |=(a/@ ~(x ne a)))
|
||||
=+ tim=(slag 2 (scow %ui (unt zet)))
|
||||
=+ sky=(crip :(weld (urle (trip sec.con.key)) "&" (urle (trip sec.acc.key))))
|
||||
=+ ^= bas
|
||||
^- tape
|
||||
=+ ^= hds
|
||||
%- reel :_ |=({p/tape q/tape} :(weld p "&" q))
|
||||
%- sort :_ aor
|
||||
%- weld :- pas
|
||||
^- (list tape)
|
||||
:~ :(weld "oauth_consumer_key=" (trip tok.con.key))
|
||||
:(weld "oauth_nonce=" non)
|
||||
:(weld "oauth_signature_method=HMAC-SHA1")
|
||||
:(weld "oauth_timestamp=" tim)
|
||||
:(weld "oauth_token=" (trip tok.acc.key))
|
||||
:(weld "oauth_version=1.0")
|
||||
==
|
||||
;: weld
|
||||
(trip (cuss (trip `@t`med))) "&"
|
||||
(urle url) "&"
|
||||
(urle (scag (dec (lent hds)) `tape`hds))
|
||||
==
|
||||
=+ sig=`tape`(sifo (swap 3 (hmac (swap 3 sky) (crip bas))))
|
||||
%- crip
|
||||
;: weld "OAuth "
|
||||
"oauth_consumer_key=" "\"" (trip tok.con.key) "\", "
|
||||
"oauth_nonce=" "\"" non "\", "
|
||||
"oauth_signature=" "\"" (urle sig) "\", "
|
||||
"oauth_signature_method=\"HMAC-SHA1\", "
|
||||
"oauth_timestamp=" "\"" tim "\", "
|
||||
"oauth_token=" "\"" (trip tok.acc.key) "\", "
|
||||
"oauth_version=1.0"
|
||||
==
|
||||
::
|
||||
++ valve :: produce request
|
||||
|= $: med/meth
|
||||
{rus/tape quy/quay}
|
||||
key/keys
|
||||
est/time
|
||||
eny/@
|
||||
==
|
||||
^- hiss
|
||||
=+ url="https://api.twitter.com+1.1{rus}.json"
|
||||
=+ req=|=(a/tape (scan a auri:epur))
|
||||
=+ ^= help
|
||||
|= quy/(list {tape tape})
|
||||
^- (list tape)
|
||||
%+ turn quy
|
||||
|= a/{p/tape q/tape}
|
||||
:(weld (urle p.a) "=" (urle q.a))
|
||||
=+ tan=(turn quy |=({p/@t q/@t} [(trip p) (trip q)]))
|
||||
=+ har=(help (turn tan |=(p/{p/tape q/tape} [p.p (urle q.p)])))
|
||||
=+ hab=(help tan)
|
||||
=+ lav=(reel har |=({p/tape q/tape} :(weld p "&" q)))
|
||||
=+ voy=?:(=(0 (lent lav)) ~ (scag (dec (lent lav)) `tape`lav))
|
||||
=+ vab=(reel hab |=({p/tape q/tape} :(weld p "&" q)))
|
||||
=+ vur=(crip ?:(=(0 (lent vab)) ~ (scag (dec (lent vab)) `tape`vab)))
|
||||
=+ ^= head
|
||||
%- ~(gas by *math)
|
||||
:~ ['authorization' [(oauth med url hab key est eny) ~]]
|
||||
['content-type' ['application+x-www-form-urlencoded' ~]]
|
||||
==
|
||||
?: =(%get med)
|
||||
?~ voy
|
||||
[(req url) med head ~]
|
||||
[(req :(weld url "?" voy)) med head ~]
|
||||
[(req url) med head (some [(met 3 vur) vur])]
|
||||
--
|
||||
!:
|
||||
:::: library
|
||||
::
|
||||
|%
|
||||
++ twip :: response printers
|
||||
|%
|
||||
++ mean
|
||||
|= {msg/@t num/@ud} ^- tank
|
||||
rose+[": " `~]^~[leaf+"Error {<num>}" leaf+(trip msg)]
|
||||
--
|
||||
++ twir :: response parsers
|
||||
|%
|
||||
++ fasp |*({a/@tas b/*} [(gsub '-' '_' a) b])
|
||||
++ user (cook crip (plus ;~(pose aln cab)))
|
||||
++ mean (ot errors+(ar (ot message+so code+ni ~)) ~):jo
|
||||
++ stat
|
||||
=+ jo
|
||||
^- $+(json (unit {id/@u who/@ta now/@da txt/@t}))
|
||||
%- ot
|
||||
:~ id+ni
|
||||
user+(ot (fasp screen-name+(su user)) ~)
|
||||
(fasp created-at+da)
|
||||
text+so
|
||||
==
|
||||
++ usel
|
||||
=+ jo
|
||||
^- $+(json (unit (list who/@ta)))
|
||||
=- (ot users+(ar -) ~)
|
||||
(ot (fasp screen-name+(su user)) ~)
|
||||
--
|
||||
++ twit
|
||||
=> |% :: request structures
|
||||
++ dev @t :: device name
|
||||
++ gat @t :: grant type
|
||||
++ lat @t :: latitude
|
||||
++ lid (list tid)
|
||||
++ lon @t :: longitude
|
||||
++ lsc (list scr)
|
||||
++ lst (list @t)
|
||||
++ nam @t :: location name
|
||||
++ pla @t :: place-id
|
||||
++ scr @t :: screen name
|
||||
++ slu @t :: category name
|
||||
++ tid @u
|
||||
++ tok @t :: oauth token
|
||||
++ url @t :: callback url
|
||||
::
|
||||
++ at {$access-token p/tok}
|
||||
++ de {$device p/dev}
|
||||
++ fo {$follow p/lid}
|
||||
++ gr {$grant-type p/gat}
|
||||
++ id {$id p/tid}
|
||||
++ ii {$'!inline' p/@t}
|
||||
++ is {$id p/lid}
|
||||
++ la {$lat p/lat}
|
||||
++ lo {$long p/lon}
|
||||
++ na {$name p/lid}
|
||||
++ oa {$oauth-callback p/url}
|
||||
++ os {$source-screen-name p/scr}
|
||||
++ pl {$place-id p/pla}
|
||||
++ qq {$q p/@t}
|
||||
++ sc {$screen-name p/scr}
|
||||
++ sd ?(ui sc)
|
||||
++ ss {$screen-name p/lsc}
|
||||
++ sl {$slug p/slu}
|
||||
++ si {$source-id p/tid}
|
||||
++ st {$status p/@t}
|
||||
++ te {$text p/@t}
|
||||
++ ti {$target-id p/tid}
|
||||
++ ts {$target-screen-name p/scr}
|
||||
++ tr {$track p/lst}
|
||||
++ ur {$url p/url}
|
||||
++ ui {$user-id p/tid}
|
||||
++ us {$user-id p/lid}
|
||||
--
|
||||
|_ {key/keys est/time eny/@uw}
|
||||
++ lutt |=(@ `@t`(rsh 3 2 (scot %ui +<)))
|
||||
++ llsc
|
||||
|= (list scr)
|
||||
(roll +< |=({p/scr q/@t} (cat 3 (cat 3 q ',') p)))
|
||||
::
|
||||
++ llst
|
||||
|= (list @t)
|
||||
(roll +< |=({p/@t q/@t} (cat 3 (cat 3 q ',') p)))
|
||||
::
|
||||
++ llid
|
||||
|= (list tid)
|
||||
(roll +< |=({p/tid q/@t} (cat 3 (cat 3 q ',') (lutt p))))
|
||||
::
|
||||
++ mold :: construct request
|
||||
|* {med/meth pax/path a/$+(* *)}
|
||||
|= {args/a quy/quay}
|
||||
(valve med (cowl pax args quy) key est eny)
|
||||
::
|
||||
++ cowl :: handle parameters
|
||||
|= $: pax/path
|
||||
ban/(list {p/@t q/?(@ (list @))})
|
||||
quy/quay
|
||||
==
|
||||
^- {path quay}
|
||||
?~ ban
|
||||
[(fass pax) quy]
|
||||
?: =('!inline' p.i.ban)
|
||||
?@ q.i.ban
|
||||
[(fass (welp pax /[`@t`q.i.ban])) quy]
|
||||
!!
|
||||
:- (fass pax)
|
||||
%+ welp quy
|
||||
%+ turn `(list {p/@t q/?(@ (list @))})`ban
|
||||
|= {p/@t q/?(@ (list @))}
|
||||
^- {@t @t}
|
||||
:- (gsub '-' '_' p)
|
||||
?@ q
|
||||
?- p
|
||||
?($id $source-id $target-id $user-id) (lutt q)
|
||||
@ `@t`q
|
||||
==
|
||||
?- p
|
||||
?($follow $id $name $user-id) (llid q)
|
||||
$track (llst q)
|
||||
$screen-name (llsc q)
|
||||
* !!
|
||||
==
|
||||
::
|
||||
++ stat-ment
|
||||
(mold %get /statuses+mentions-timeline $~)
|
||||
::
|
||||
++ stat-user
|
||||
(mold %get /statuses+user-timeline {sd $~})
|
||||
::
|
||||
++ stat-home
|
||||
(mold %get /statuses+home-timeline $~)
|
||||
::
|
||||
++ stat-retw
|
||||
(mold %get /statuses+retweets-of-me $~)
|
||||
::
|
||||
++ stat-rets-iddd
|
||||
(mold %get /statuses+retweets {ii $~})
|
||||
::
|
||||
++ stat-show
|
||||
(mold %get /statuses+show {id $~})
|
||||
::
|
||||
++ stat-dest-iddd
|
||||
(mold %post /statuses+destroy {ii $~})
|
||||
::
|
||||
++ stat-upda
|
||||
(mold %post /statuses+update {st $~})
|
||||
::
|
||||
++ stat-retw-iddd
|
||||
(mold %post /statuses+retweet {ii $~})
|
||||
::
|
||||
++ stat-oemb-iddd
|
||||
(mold %get /statuses+oembed {id $~})
|
||||
::
|
||||
++ stat-oemb-urll
|
||||
(mold %get /statuses+oembed {ur $~})
|
||||
::
|
||||
++ stat-retw-idss
|
||||
(mold %get /statuses+retweeters+ids {id $~})
|
||||
::
|
||||
++ sear-twee
|
||||
(mold %get /search+tweets {qq $~})
|
||||
::
|
||||
++ stat-filt-foll
|
||||
(mold %post /statuses+filter {?(fo tr) $~})
|
||||
::
|
||||
++ stat-samp
|
||||
(mold %get /statuses+sample $~)
|
||||
::
|
||||
++ stat-fire
|
||||
(mold %get /statuses+firehose $~)
|
||||
::
|
||||
++ user
|
||||
(mold %get /user $~)
|
||||
::
|
||||
++ site
|
||||
(mold %get /site {fo $~})
|
||||
::
|
||||
++ dire
|
||||
(mold %get /direct-messages $~)
|
||||
::
|
||||
++ dire-sent
|
||||
(mold %get /direct-messages+sent $~)
|
||||
::
|
||||
++ dire-show
|
||||
(mold %get /direct-messages+show {id $~})
|
||||
::
|
||||
++ dire-dest
|
||||
(mold %post /direct-messages+destroy {id $~})
|
||||
::
|
||||
++ dire-neww
|
||||
(mold %post /direct-messages+new {sd te $~})
|
||||
::
|
||||
++ frie-nore-idss
|
||||
(mold %get /friendships+no-retweets+ids $~)
|
||||
::
|
||||
++ frie-idss
|
||||
(mold %get /friends+ids {sd $~})
|
||||
::
|
||||
++ foll-idss
|
||||
(mold %get /followers+ids {sd $~})
|
||||
::
|
||||
++ frie-inco
|
||||
(mold %get /friendships+incoming $~)
|
||||
::
|
||||
++ frie-outg
|
||||
(mold %get /friendships+outgoing $~)
|
||||
::
|
||||
++ frie-crea
|
||||
(mold %post /friendships+create {sd $~})
|
||||
::
|
||||
++ frie-dest
|
||||
(mold %post /friendships+destroy {sd $~})
|
||||
::
|
||||
++ frie-upda
|
||||
(mold %post /friendships+update {sd $~})
|
||||
::
|
||||
++ frie-show
|
||||
(mold %get /friendships+show {?(si os) ?(ti ts) $~})
|
||||
::
|
||||
++ frie-list
|
||||
(mold %get /friends+list {sd $~})
|
||||
::
|
||||
++ foll-list
|
||||
(mold %get /followers+list {sd $~})
|
||||
::
|
||||
++ frie-look
|
||||
(mold %get /friendships+lookup {?(us ss) $~})
|
||||
::
|
||||
++ acco-sett-gett
|
||||
(mold %get /account+settings $~)
|
||||
::
|
||||
++ acco-veri
|
||||
(mold %get /account+verify-credentials $~)
|
||||
::
|
||||
++ acco-sett-post
|
||||
(mold %post /account+settings $~)
|
||||
::
|
||||
++ acco-upda-deli
|
||||
(mold %post /account+update-delivery-device {de $~})
|
||||
::
|
||||
++ acco-upda-prof
|
||||
(mold %post /account+update-profile $~)
|
||||
::
|
||||
++ acco-upda-prof-back
|
||||
(mold %post /account+update-profile-background-image $~)
|
||||
::
|
||||
++ acco-upda-prof-colo
|
||||
(mold %post /account+update-profile-colors $~)
|
||||
::
|
||||
++ bloc-list
|
||||
(mold %get /blocks+list $~)
|
||||
::
|
||||
++ bloc-idss
|
||||
(mold %get /blocks+ids $~)
|
||||
::
|
||||
++ bloc-crea
|
||||
(mold %post /blocks+create {sd $~})
|
||||
::
|
||||
++ bloc-dest
|
||||
(mold %post /blocks+destroy {sd $~})
|
||||
::
|
||||
++ user-look
|
||||
(mold %get /users+lookup {?(us ss) $~})
|
||||
::
|
||||
++ user-show
|
||||
(mold %get /users+show {sd $~})
|
||||
::
|
||||
++ user-sear
|
||||
(mold %get /users+search {qq $~})
|
||||
::
|
||||
++ user-cont-tees
|
||||
(mold %get /users+contributees {sd $~})
|
||||
::
|
||||
++ user-cont-tors
|
||||
(mold %get /users+contributors {sd $~})
|
||||
::
|
||||
++ acco-remo
|
||||
(mold %post /account+remove-profile-banner $~)
|
||||
::
|
||||
++ user-prof
|
||||
(mold %get /users+profile-banner {sd $~})
|
||||
::
|
||||
++ mute-user-crea
|
||||
(mold %post /mutes+users+create {sd $~})
|
||||
::
|
||||
++ mute-user-dest
|
||||
(mold %post /mutes+users+destroy {sd $~})
|
||||
::
|
||||
++ mute-user-idss
|
||||
(mold %get /mutes+users+ids $~)
|
||||
::
|
||||
++ mute-user-list
|
||||
(mold %get /mutes+users+list $~)
|
||||
::
|
||||
++ user-sugg-slug
|
||||
(mold %get /users+suggestions {sl $~})
|
||||
::
|
||||
++ user-sugg
|
||||
(mold %get /users+suggestions $~)
|
||||
::
|
||||
++ favo-list
|
||||
(mold %get /favorites+list $~)
|
||||
::
|
||||
++ favo-dest
|
||||
(mold %post /favorites+destroy {id $~})
|
||||
::
|
||||
++ favo-crea
|
||||
(mold %post /favorites+create {id $~})
|
||||
::
|
||||
++ list-list
|
||||
(mold %get /lists+list $~)
|
||||
::
|
||||
++ list-stat
|
||||
(mold %get /lists+statuses $~)
|
||||
::
|
||||
++ list-memb-dest
|
||||
(mold %post /lists+members+destroy $~)
|
||||
::
|
||||
++ list-memb-hips
|
||||
(mold %get /lists+memberships {sd $~})
|
||||
::
|
||||
++ list-subs-bers
|
||||
(mold %get /lists+subscribers $~)
|
||||
::
|
||||
++ list-subs-crea
|
||||
(mold %post /lists+subscribers+create $~)
|
||||
::
|
||||
++ list-subs-show
|
||||
(mold %get /lists+subscribers+show {sd $~})
|
||||
::
|
||||
++ list-subs-dest
|
||||
(mold %post /lists+subscribers+destroy $~)
|
||||
::
|
||||
++ list-memb-crea-alll
|
||||
(mold %post /lists+members+create-all {?(us ss) $~})
|
||||
::
|
||||
++ list-memb-show
|
||||
(mold %get /lists+members+show {sd $~})
|
||||
::
|
||||
++ list-memb-bers
|
||||
(mold %get /lists+members $~)
|
||||
::
|
||||
++ list-memb-crea
|
||||
(mold %post /lists+members+create {sd $~})
|
||||
::
|
||||
++ list-dest
|
||||
(mold %post /lists+destroy $~)
|
||||
::
|
||||
++ list-upda
|
||||
(mold %post /lists+update $~)
|
||||
::
|
||||
++ list-crea
|
||||
(mold %post /lists+create {na $~})
|
||||
::
|
||||
++ list-show
|
||||
(mold %get /lists+show $~)
|
||||
::
|
||||
++ list-subs-ions
|
||||
(mold %get /lists+subscriptions {sd $~})
|
||||
::
|
||||
++ list-memb-dest-alll
|
||||
(mold %post /lists+members+destroy-all {?(us ss) $~})
|
||||
::
|
||||
++ list-owne
|
||||
(mold %get /lists+ownerships {sd $~})
|
||||
::
|
||||
++ save-list
|
||||
(mold %get /saved-searches+list $~)
|
||||
::
|
||||
++ save-show-iddd
|
||||
(mold %get /saved-searches+show {ii $~})
|
||||
::
|
||||
++ save-crea
|
||||
(mold %post /saved-searches+create {qq $~})
|
||||
::
|
||||
++ save-dest-iddd
|
||||
(mold %post /saved-searches+destroy {ii $~})
|
||||
::
|
||||
++ geoo-iddd-plac
|
||||
(mold %get /geo+id {ii $~})
|
||||
::
|
||||
++ geoo-reve
|
||||
(mold %get /geo+reverse-geocode {la lo $~})
|
||||
::
|
||||
++ geoo-sear
|
||||
(mold %get /geo+search $~)
|
||||
::
|
||||
++ geoo-simi
|
||||
(mold %get /geo+similar-places {la lo na $~})
|
||||
::
|
||||
++ tren-plac
|
||||
(mold %get /trends+place {id $~})
|
||||
::
|
||||
++ tren-avai
|
||||
(mold %get /trends+available $~)
|
||||
::
|
||||
++ tren-clos
|
||||
(mold %get /trends+closest {la lo $~})
|
||||
::
|
||||
++ user-repo
|
||||
(mold %post /users+report-spam {sd $~})
|
||||
::
|
||||
++ oaut-auth-cate
|
||||
(mold %get /oauth+authenticate $~)
|
||||
::
|
||||
++ oaut-auth-rize
|
||||
(mold %get /oauth+authorize $~)
|
||||
::
|
||||
++ oaut-acce
|
||||
(mold %post /oauth+access-token $~)
|
||||
::
|
||||
++ oaut-requ
|
||||
(mold %post /oauth+request-token {oa $~})
|
||||
::
|
||||
++ oaut-toke
|
||||
(mold %post /oauth2/token {gr $~})
|
||||
::
|
||||
++ oaut-inva
|
||||
(mold %post /oauth2/invalidate-token {at $~})
|
||||
::
|
||||
++ help-conf
|
||||
(mold %get /help+configuration $~)
|
||||
::
|
||||
++ help-lang
|
||||
(mold %get /help+languages $~)
|
||||
::
|
||||
++ help-priv
|
||||
(mold %get /help+privacy $~)
|
||||
::
|
||||
++ help-toss
|
||||
(mold %get /help+tos $~)
|
||||
::
|
||||
++ appl-rate
|
||||
(mold %get /application+rate-limit-status $~)
|
||||
::
|
||||
++ stat-look
|
||||
(mold %get /statuses+lookup {us $~})
|
||||
--
|
||||
--
|
18
sur/bit-api.hoon
Normal file
18
sur/bit-api.hoon
Normal file
@ -0,0 +1,18 @@
|
||||
|%
|
||||
++ bit-any
|
||||
$% {$bit-get-token bit-get-token}
|
||||
{$bit-api-call tok/@t bit-api-call}
|
||||
==
|
||||
++ bit-api-call
|
||||
$% {$send bit-send}
|
||||
{$txt-send to/@t btc/@t}
|
||||
{$buy amount/@t currency/@t}
|
||||
{$sell amount/@t currency/@t}
|
||||
{$list $~}
|
||||
==
|
||||
++ bit-send {adr/@uc btc/@t}
|
||||
++ bit-ship-send {who/@p btc/@t}
|
||||
++ bit-get-token {oat/@t {cid/@t sec/@t} red/purl}
|
||||
++ bit-accounts (list {id/@t name/@t balance/{num/@t cur/term}})
|
||||
--
|
||||
|
7
sur/down.hoon
Normal file
7
sur/down.hoon
Normal file
@ -0,0 +1,7 @@
|
||||
::
|
||||
:::: /hoon+gate+down+sur
|
||||
::
|
||||
/? 314
|
||||
/- markdown
|
||||
down.markdown
|
||||
|
1
sur/foobar.hoon
Normal file
1
sur/foobar.hoon
Normal file
@ -0,0 +1 @@
|
||||
,@
|
39
sur/markdown.hoon
Normal file
39
sur/markdown.hoon
Normal file
@ -0,0 +1,39 @@
|
||||
|%
|
||||
++ down (list elem)
|
||||
++ kids (list inline)
|
||||
++ inline
|
||||
=+ ^= inlik
|
||||
$% {$emph p/?} :: strong?
|
||||
{$delt $~} :: strikethrough
|
||||
{$link p/tape q/(unit tape)}
|
||||
{$blot p/tape q/(unit tape)} :: image
|
||||
==
|
||||
=+ ^= inlin
|
||||
$% {$$ p/tape}
|
||||
{$line $~}
|
||||
{$code p/tape}
|
||||
{$htmt p/cord} :: XX (each marx mane)
|
||||
==
|
||||
$^({p/inlik q/kids} inlin)
|
||||
::
|
||||
::
|
||||
++ elem $^(tops node)
|
||||
++ tops :: childful block
|
||||
$: $= p
|
||||
$% {$bloq $~}
|
||||
{$list p/? q/$@(char {p/@u q/char})} :: tight ordered?
|
||||
{$item $~}
|
||||
==
|
||||
q/down
|
||||
==
|
||||
++ node :: childless block
|
||||
$% {$para p/kids}
|
||||
{$meta p/(map cord cord)} :: front matter
|
||||
{$hrul $~}
|
||||
{$head p/@u q/kids}
|
||||
{$code p/(unit {p/char q/@u r/tape}) q/wain} :: info contents
|
||||
{$html p/wain}
|
||||
{$defn $~} :: empty para
|
||||
==
|
||||
--
|
||||
|
16
sur/oct1.hoon
Normal file
16
sur/oct1.hoon
Normal file
@ -0,0 +1,16 @@
|
||||
:: :: ::
|
||||
:::: /hoon+oct1/sur :::::: dependencies
|
||||
:: :: ::
|
||||
/? 310 :: arvo version
|
||||
:: :: ::
|
||||
:::: :::::: semantics
|
||||
:: :: ::
|
||||
|% ::
|
||||
++ board @ :: one-player bitfield
|
||||
++ point {x/@ y/@} :: coordinate
|
||||
++ game :: game state
|
||||
$: who/? :: whose turn
|
||||
box/board :: X board
|
||||
boo/board :: O board
|
||||
== ::
|
||||
--
|
19
sur/oct2.hoon
Normal file
19
sur/oct2.hoon
Normal file
@ -0,0 +1,19 @@
|
||||
:: :: ::
|
||||
:::: /hoon+oct2/sur :::::: dependencies
|
||||
:: :: ::
|
||||
/? 310 :: arvo version
|
||||
:: :: ::
|
||||
:::: :::::: semantics
|
||||
:: :: ::
|
||||
|% ::
|
||||
++ board @ :: one-player bitfield
|
||||
++ point {x/@ y/@} :: coordinate
|
||||
++ stage (pair (unit ship) (unit ship)) :: players
|
||||
++ game :: game state
|
||||
$: who/? :: whose turn
|
||||
sag/stage :: who's playing
|
||||
aud/(map ship @ud) :: who's watching
|
||||
box/board :: X board
|
||||
boo/board :: O board
|
||||
== ::
|
||||
--
|
20
sur/oct3.hoon
Normal file
20
sur/oct3.hoon
Normal file
@ -0,0 +1,20 @@
|
||||
:: :: ::
|
||||
:::: /hoon+oct3/sur :::::: dependencies
|
||||
:: :: ::
|
||||
/? 310 :: arvo version
|
||||
:: :: ::
|
||||
:::: :::::: semantics
|
||||
:: :: ::
|
||||
|% ::
|
||||
++ board @ :: one-player bitfield
|
||||
++ point {x/@ y/@} :: coordinate
|
||||
++ stage (pair (unit ship) (unit ship)) :: players
|
||||
++ play (each game tape) :: update
|
||||
++ game :: game state
|
||||
$: who/? :: whose turn
|
||||
sag/stage :: who's playing
|
||||
aud/(map ship @ud) :: who's watching
|
||||
box/board :: X board
|
||||
boo/board :: O board
|
||||
== ::
|
||||
--
|
20
sur/oct4.hoon
Normal file
20
sur/oct4.hoon
Normal file
@ -0,0 +1,20 @@
|
||||
:: :: ::
|
||||
:::: /hoon+oct4/sur :::::: dependencies
|
||||
:: :: ::
|
||||
/? 310 ::
|
||||
:: :: ::
|
||||
:::: :::::: semantics
|
||||
:: :: ::
|
||||
|% ::
|
||||
++ board @ :: one-player bitfield
|
||||
++ point {x/@ y/@} :: coordinate
|
||||
++ stage (pair (unit ship) (unit ship)) :: players
|
||||
++ play (each game tape) :: update
|
||||
++ game :: game state
|
||||
$: who/? :: whose turn
|
||||
sag/stage :: who's playing
|
||||
aud/(map ship @ud) :: who's watching
|
||||
box/board :: X board
|
||||
boo/board :: O board
|
||||
== ::
|
||||
--
|
1
sur/term-ctrl.hoon
Normal file
1
sur/term-ctrl.hoon
Normal file
@ -0,0 +1 @@
|
||||
,%hail
|
7
sur/term-in.hoon
Normal file
7
sur/term-in.hoon
Normal file
@ -0,0 +1,7 @@
|
||||
$: pax=path ::
|
||||
$= jof ::
|
||||
$% [%line p=cord] ::
|
||||
[%res p=span] ::
|
||||
[%cmd p=char] ::
|
||||
[%type p=?] ::
|
||||
== == ::
|
4
sur/term-line.hoon
Normal file
4
sur/term-line.hoon
Normal file
@ -0,0 +1,4 @@
|
||||
$: p=[p=cord q=prom r=cord]
|
||||
q=(list cord)
|
||||
r=(list ?(tank [%stem p=@da q=tank r=tank]))
|
||||
==
|
7
sur/tree-include.hoon
Normal file
7
sur/tree-include.hoon
Normal file
@ -0,0 +1,7 @@
|
||||
|-
|
||||
$: body/json
|
||||
head/json
|
||||
snip/json
|
||||
meta/json
|
||||
sect/json
|
||||
==
|
16
sur/twitter.hoon
Normal file
16
sur/twitter.hoon
Normal file
@ -0,0 +1,16 @@
|
||||
|%
|
||||
++ twit-do => twit {p/span q/command} :: user and action
|
||||
++ twit-stat {id/@u who/@ta now/@da txt/@t} :: received tweet
|
||||
++ twit
|
||||
|%
|
||||
++ keys :: twitter-key type
|
||||
$: con/{tok/@t sec/@t} :: user key pair
|
||||
acc/{tok/@t sec/@t} :: app key pair
|
||||
==
|
||||
::
|
||||
++ command :: poke action
|
||||
$% {$auth p/keys} :: set API keys
|
||||
{$post p/@uvI q/cord} :: post a tweet
|
||||
==
|
||||
--
|
||||
--
|
3
sur/user.hoon
Normal file
3
sur/user.hoon
Normal file
@ -0,0 +1,3 @@
|
||||
$% {$in p/{p/@p q/@t}}
|
||||
{$out p/{p/@p q/@t}}
|
||||
==
|
1
sur/users.hoon
Normal file
1
sur/users.hoon
Normal file
@ -0,0 +1 @@
|
||||
(list {p/@p q/@t})
|
6
sur/wand.hoon
Normal file
6
sur/wand.hoon
Normal file
@ -0,0 +1,6 @@
|
||||
::
|
||||
:::: /hoon+gate+down+sur
|
||||
::
|
||||
/? 314
|
||||
/- markdown
|
||||
down
|
58
sur/work.hoon
Normal file
58
sur/work.hoon
Normal file
@ -0,0 +1,58 @@
|
||||
::
|
||||
:::: /hoon+work+sur
|
||||
::
|
||||
:: A block comment might go here!
|
||||
::
|
||||
/- talk
|
||||
|%
|
||||
++ client
|
||||
$: tasks/(map @uvH client-task)
|
||||
sort/(list @uvH)
|
||||
==
|
||||
++ client-task
|
||||
$: archived/_|
|
||||
audience/(set station:talk)
|
||||
tax/task
|
||||
==
|
||||
++ task
|
||||
$: id/@uvH
|
||||
date-created/@da
|
||||
version/@u
|
||||
date-modified/@da
|
||||
creator/@p
|
||||
doer/(unit @p)
|
||||
tags/(set @t)
|
||||
date-due/(unit @da)
|
||||
done/(unit @da)
|
||||
title/@t
|
||||
description/@t :: XX (list @t)
|
||||
discussion/(list comment)
|
||||
==
|
||||
++ comment
|
||||
$: date/@da
|
||||
ship/@p
|
||||
body/@t :: XX (list @t)
|
||||
==
|
||||
++ command
|
||||
$% {$new audience/(set station:talk) task}
|
||||
{$old id/@uvH dif/update}
|
||||
{$sort p/(list @uvH)}
|
||||
==
|
||||
++ update :: XX rename, web-edit?
|
||||
$% $: $set
|
||||
$% {$audience to/(set station:talk)}
|
||||
{$date-due p/(unit @da)}
|
||||
{$title p/@t}
|
||||
{$description p/@t}
|
||||
{$tags p/(set @t)}
|
||||
{$done p/?}
|
||||
== ==
|
||||
$: $add
|
||||
$% {$comment @t}
|
||||
== ==
|
||||
$: $doer
|
||||
$% {$release $~}
|
||||
{$claim $~}
|
||||
== ==
|
||||
==
|
||||
--
|
6
sur/zing.hoon
Normal file
6
sur/zing.hoon
Normal file
@ -0,0 +1,6 @@
|
||||
$: %mess p=path
|
||||
$= q
|
||||
$% [%do p=@t]
|
||||
[%exp p=@t q=tank]
|
||||
[%say p=@t]
|
||||
== ==
|
6
sur/zong.hoon
Normal file
6
sur/zong.hoon
Normal file
@ -0,0 +1,6 @@
|
||||
$% $: %mess p=@da q=ship
|
||||
$= r
|
||||
$% [%do p=@t]
|
||||
[%exp p=@t q=tank]
|
||||
[%say p=@t]
|
||||
== == ==
|
8
sur/zung.hoon
Normal file
8
sur/zung.hoon
Normal file
@ -0,0 +1,8 @@
|
||||
$% $: %mess p=path
|
||||
$= q
|
||||
$% [%do p=@t]
|
||||
[%exp p=@t q=tank]
|
||||
[%say p=@t]
|
||||
== ==
|
||||
[%init p=ship q=path]
|
||||
==
|
Loading…
Reference in New Issue
Block a user