urbit/pkg/arvo/app/azimuth-rpc.hoon

236 lines
5.8 KiB
Plaintext
Raw Normal View History

2021-05-11 14:28:26 +03:00
:: Azimuth JSON-RPC API
::
/- rpc=json-rpc
/+ naive,
azimuth-rpc,
json-rpc,
*server,
default-agent,
verb,
dbug,
2021-04-29 13:10:58 +03:00
version,
agentio
|%
2021-05-11 14:28:26 +03:00
:: FIXME: import tx-status, pend-tx from aggregator
::
+$ tx-status
$: status=?(%unknown %pending %sent %confirmed %failed)
tx=(unit @ux)
==
::
+$ pend-tx [force=? =raw-tx:naive]
::
+$ card card:agent:gall
::
+$ state-0 [%0 ~]
--
::
%+ verb |
%- agent:dbug
::
=| state-0
=* state -
::
^- agent:gall
=<
|_ =bowl:gall
+* this .
do ~(. +> bowl)
def ~(. (default-agent this %|) bowl)
::
++ on-init
^- (quip card _this)
~& > 'init'
:_ this
[%pass /bind %arvo %e %connect [~ [%v1 %azimuth ~]] dap.bowl]~
::
++ on-save !>(state)
++ on-load
|= old=vase
^- (quip card _this)
[~ this(state !<(state-0 old))]
::
++ on-poke
|= [=mark =vase]
^- (quip card _this)
|^
?> (team:title our.bowl src.bowl)
?+ mark (on-poke:def mark vase)
%handle-http-request
=+ !<([id=@ta req=inbound-request:eyre] vase)
:_ this
(handle-http-request id req)
::
%azimuth-action
=+ !<([%disconnect bind=binding:eyre] vase)
~& >>> "disconnecting at {<bind>}"
:_ this
[[%pass /bind %arvo %e %disconnect bind]]~
==
::
++ handle-http-request
|= [id=@ta =inbound-request:eyre]
^- (list card)
|^
=* req request.inbound-request
=* headers header-list.req
=/ req-line (parse-request-line url.req)
?. =(method.req %'POST')
:: TODO: method not supported
::
(give-simple-payload:app id not-found:gen)
?~ rpc-request=(validate-request:json-rpc body.req parse-method)
:: TODO: malformed request
::
(give-simple-payload:app id not-found:gen)
=/ [data=(unit cage) response=simple-payload:http]
(process-rpc-request:do u.rpc-request)
%+ weld
(give-simple-payload:app id response)
?~ data ~
:_ ~
^- card
[%pass / %agent [our.bowl %dice] %poke u.data]
:: TODO: validate that format is e.g. 'getPoint'
:: TODO: maybe use getPoint and translate to %get-point
::
++ parse-method |=(t=@t `term`t)
--
--
::
++ on-watch
|= =path
^- (quip card _this)
?> (team:title our.bowl src.bowl)
?+ path (on-watch:def path)
[%http-response *] [~ this]
==
::
++ on-arvo
|= [=wire =sign-arvo]
^- (quip card _this)
?+ sign-arvo (on-arvo:def wire sign-arvo)
[%eyre %bound *]
~? !accepted.sign-arvo
[dap.bowl 'bind rejected!' binding.sign-arvo]
[~ this]
==
::
++ on-leave on-leave:def
++ on-peek on-peek:def
++ on-agent on-agent:def
++ on-fail on-fail:def
--
::
|_ =bowl:gall
++ process-rpc-request
|= request:rpc
^- [(unit cage) simple-payload:http]
=; [data=(unit cage) =response:rpc]
:- data
%- json-response:gen
(response-to-json:json-rpc response)
=, azimuth-rpc
2021-05-04 11:08:44 +03:00
?. ?=([%map *] params)
[~ ~(parse error id)]
?+ method [~ ~(method error id)]
2021-05-11 14:28:26 +03:00
%get-point [~ (get-point id +.params point:scry)]
%transfer-point (transfer-point id +.params)
%configure-keys (configure-keys id +.params)
%spawn (spawn id +.params)
%escape (escape id +.params)
%cancel-escape (cancel-escape id +.params)
%adopt (adopt id +.params)
%detach (detach id +.params)
%reject (reject id +.params)
%set-management-proxy (management-proxy id +.params)
%set-spawn-proxy (spawn-proxy id +.params)
%set-transfer-proxy (transfer-proxy id +.params)
2021-05-11 14:28:26 +03:00
%pending [~ (all:pending id +.params all:pending:scry)]
%pending-by-ship [~ (ship:pending id +.params ship:pending:scry)]
%pending-by-address [~ (addr:pending id +.params addr:pending:scry)]
%status [~ (status id +.params tx-status:scry)]
:: %history [~ (history id +.params all:history:scry)]
==
::
2021-05-11 14:28:26 +03:00
++ scry
|%
2021-05-11 14:28:26 +03:00
++ point
|= =ship
.^ (unit point:naive)
%gx
2021-05-11 14:28:26 +03:00
(~(scry agentio bowl) %azimuth /nas/[(scot %p ship)]/noun)
==
2021-05-11 14:28:26 +03:00
::
++ pending
|%
++ all
.^ (list pend-tx)
%gx
(~(scry agentio bowl) %dice /pending/noun)
==
::
++ ship
|= =^ship
.^ (list pend-tx)
%gx
(~(scry agentio bowl) %dice /pending/[(scot %p ship)]/noun)
==
::
++ addr
|= =address:naive
.^ (list pend-tx)
%gx
%+ ~(scry agentio bowl) %dice
/pending/[(scot %ux address)]/noun
==
--
::
++ history
|%
++ all
:: FIXME: use proper type from aggregator/index
::
.^ (list tx:naive)
%gx
(~(scry agentio bowl) %dice /history/noun)
==
::
++ ship
|= =^ship
:: FIXME: use proper type from aggregator/index
::
.^ (list tx:naive)
%gx
(~(scry agentio bowl) %dice /history/[(scot %p ship)]/noun)
==
::
++ addr
|= =address:naive
:: FIXME: use proper type from aggregator/index
::
.^ (list tx:naive)
%gx
(~(scry agentio bowl) %dice /history/[(scot %ux address)]/noun)
==
--
::
++ tx-status
|= keccak=@ux
.^ ^tx-status
%gx
2021-05-11 14:28:26 +03:00
(~(scry agentio bowl) %dice /tx/[(scot %ux keccak)]/status/noun)
==
2021-05-06 17:47:38 +03:00
::
2021-05-11 14:28:26 +03:00
++ nonce
|= [=ship =address:naive]
:: FIXME: use proper type from aggregator/index
.^ @
%gx
%+ ~(scry agentio bowl)
%dice
/nonce/[(scot %p ship)]/[(scot %ux address)]/atom
==
--
--