urbit/base/ape/bit/core.hook

269 lines
7.8 KiB
Plaintext
Raw Normal View History

2015-05-07 00:00:06 +03:00
::
::
::::
::
/? 314
/- *talk
/+ talk, sole, http
!:
2015-05-08 00:33:18 +03:00
:::: sivtyv-barnel
2015-05-08 02:53:08 +03:00
:: be sure to have oauth2-code markk
2015-05-07 00:00:06 +03:00
|%
++ axle cred
++ cred
$: client-id=(unit ,@t) app-secret=(unit ,@t)
oauth-code=(unit ,@t) auth-token=(unit ,@t)
refr-token=(unit ,@t) contacts=(map ,@t ,@t)
2015-05-08 00:33:18 +03:00
outgoing=(map ship ,@t) incoming=(map ,@t ship)
2015-05-07 00:00:06 +03:00
==
2015-05-13 22:46:25 +03:00
++ move ,[bone note]
++ hapt ,[ship path]
++ note
2015-05-13 22:46:25 +03:00
$% [%send wire [ship term] %poke mesa]
[%them wire (unit hiss)]
==
++ gift
$% [%nice ~]
[%mean ares]
==
2015-05-07 00:00:06 +03:00
++ sign
$% [%thou p=httr]
2015-05-13 22:46:25 +03:00
[%unto %coup p=(unit tang)]
==
++ mesa
$% [%bit-addr-request ~]
[%bit-addr-made @t]
[%talk-command command]
2015-05-07 00:00:06 +03:00
==
--
::
!:
|_ [hid=hide vat=axle]
2015-05-13 22:46:25 +03:00
::++ prep ,_`.
++ redirect-uri (crip (weld hostname "/~~/home/pub/bit/fab"))
2015-05-08 02:27:50 +03:00
++ hostname
?+ (clan our.hid) !!
2015-05-13 22:46:25 +03:00
%czar "http://localhost:{?+(our.hid !! %~zod "8443", %~fyr "8444")}"
2015-05-08 02:27:50 +03:00
%duke "http://{+:<our.hid>}.urbit.org"
==
++ auth-url
%+ weld "https://www.coinbase.com/oauth/authorize"
%- tail:earn :~
'response_type'^%code
'client_id'^(need client-id.vat)
'redirect_uri'^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'
==
++ api-call
|= [ost=bone pour-path=wire end-point=path req=$|(%get [%post p=json])]
^- move
%^ httpreq ost pour-path
[/com/coinbase/api v1/end-point req ~ ['access_token' (need auth-token.vat)]~]
::
++ callback-uri (weld hostname "/~/to/{(trip app.hid)}/json.json?anon&wire=/")
2015-05-07 00:00:06 +03:00
++ poke-auth
2015-05-13 22:46:25 +03:00
|= [[ost=bone you=ship] arg=[secr=cord id=cord]]
2015-05-07 00:00:06 +03:00
=: app-secret.vat [~ secr.arg]
client-id.vat [~ id.arg]
==
=+ prl=`purl`(need (epur (crip auth-url)))
:_ +>.$
2015-05-13 22:46:25 +03:00
:- %^ publish ost you
:~ [%lin & 'secret and client id saved successfully']
[%lin & 'please click on the url below to continue authentication']
[%url prl]
==
2015-05-07 00:00:06 +03:00
~
::
2015-05-13 22:46:25 +03:00
++ send-friend :: inter-app interface
2015-05-08 02:53:08 +03:00
|= [ost=bone pax=path his=ship mez=$%([%bit-addr-request ~] [%bit-addr-made @t])]
^- move
2015-05-13 22:46:25 +03:00
[ost %send pax [his app.hid] %poke mez]
::
++ poke--send :: send to ship
2015-05-13 22:46:25 +03:00
|= [[ost=bone @] to=ship amount=@t]
=. outgoing.vat (~(put by outgoing.vat) to amount)
:_ +>.$
2015-05-13 22:46:25 +03:00
:_ ~
(send-friend ost /sent to %bit-addr-request ~)
++ poke-bit-addr-request :: give your address to receive bit
2015-05-13 22:46:25 +03:00
|= [[ost=bone his=ship] req=~] :: gen new address with callback
:_ +>.$
2015-05-13 22:46:25 +03:00
:_ ~
%^ api-call ost /addr-request/(scot %p his)
:+ /addresses %post
%+ joba %address
%- jobe :~
label/(jape "address for {<his>}")
'callback_url'^(jape callback-uri)
==
::
++ pour-addr-request :: send new address to sender
|= [ost=bone pax=path rez=json]
2015-05-08 00:33:18 +03:00
=+ adr=(need ((ot address/so ~):jo rez))
=+ his=(slav %p +<.pax)
~! incoming.vat
=. incoming.vat
(~(put by incoming.vat) adr his)
:_ +>.$
:_ ~
2015-05-13 22:46:25 +03:00
(send-friend ost [%message ~] his %bit-addr-made adr)
::
++ poke-bit-addr-made :: receive address for sending
2015-05-13 22:46:25 +03:00
|= [[ost=bone his=ship] addr=@t]
:_ +>.$
2015-05-13 22:46:25 +03:00
:_ ~
=+ amount=(~(got by outgoing.vat) his) :: get amount to send
=+ info=[to/s/addr amount/s/amount ~]
=+ jon=(joba %transaction (jobe info))
(api-call ost /send /transactions/'send_money' %post jon)
::
2015-05-07 00:00:06 +03:00
++ poke-oauth2-code
2015-05-13 22:46:25 +03:00
|= [[ost=bone you=ship] code=cord]
2015-05-07 00:00:06 +03:00
=. oauth-code.vat
[~ code]
2015-05-07 00:00:06 +03:00
?< |(?=(~ client-id.vat) ?=(~ oauth-code.vat))
=+ ^= queries
:~ ['grant_type' 'authorization_code']
['code' (need oauth-code.vat)]
['redirect_uri' redirect-uri]
2015-05-07 00:00:06 +03:00
['client_id' (need client-id.vat)]
['client_secret' (need app-secret.vat)]
==
:_ +>.$
2015-05-13 22:46:25 +03:00
:- (httpreq ost /auth-token /com/coinbase /oauth/token [%post ~] ~ queries)
2015-05-07 00:00:06 +03:00
~
++ poke-buy
2015-05-13 22:46:25 +03:00
|= [[ost=bone you=ship] arg=[amount=@t currency=@t]]
2015-05-07 00:00:06 +03:00
?< =(~ amount.arg)
=+ query=['access_token' (need auth-token.vat)]~
=+ ^= pst
?: =(~ currency.arg)
(jobe qty/s/amount.arg ~)
(jobe qty/s/amount.arg currency/s/currency.arg ~)
:_ +>.$
2015-05-13 22:46:25 +03:00
:- (httpreq ost /buy /com/coinbase/api /v1/buys [%post pst] ~ query)
2015-05-07 00:00:06 +03:00
~
::
2015-05-07 09:49:30 +03:00
++ poke-list
2015-05-13 22:46:25 +03:00
|= [[ost=bone you=ship] arg=~]
2015-05-07 00:00:06 +03:00
=+ query=['access_token' (need auth-token.vat)]~
:_ +>.$
2015-05-13 22:46:25 +03:00
:- (httpreq ost /list /com/coinbase/api /v1/accounts %get ~ query)
2015-05-07 00:00:06 +03:00
~
::
++ poke-sell
2015-05-13 22:46:25 +03:00
|= [[ost=bone you=ship] arg=[amount=@t currency=@t]]
2015-05-07 00:00:06 +03:00
?< =(amount.arg ~)
=+ query=['access_token' (need auth-token.vat)]~
=+ ^= pst
?: =(~ currency.arg)
(jobe qty/s/amount.arg currency/s/currency.arg ~)
(jobe qty/s/amount.arg ~)
:_ +>.$
2015-05-13 22:46:25 +03:00
:+ ~
2015-05-07 09:49:30 +03:00
(httpreq ost /buy /com/coinbase/api /v1/sells [%post pst] ~ query)
2015-05-07 00:00:06 +03:00
~
::
++ poke-send-raw
2015-05-13 22:46:25 +03:00
|= $: [ost=bone you=ship]
2015-05-07 00:00:06 +03:00
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)))
=+ query=['access_token' (need auth-token.vat)]~
=+ ^= 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) ~)
:_ +>.$
2015-05-13 22:46:25 +03:00
:- (httpreq ost /send /com/coinbase/api /v1/transactions/'send_money' [%post pst] ~ query)
2015-05-07 00:00:06 +03:00
~
2015-05-07 09:49:30 +03:00
::
++ poke-json
2015-05-13 22:46:25 +03:00
|= [[ost=bone you=ship] arg=json]
2015-05-07 09:49:30 +03:00
~& arg
:_ +>.$
2015-05-08 02:25:22 +03:00
=+ [adr amo]=(need %.(arg (ot address/so amount/no ~):jo))
2015-05-08 00:33:18 +03:00
=+ frm=(~(get by incoming.vat) adr)
2015-05-13 22:46:25 +03:00
:_ ~
2015-05-08 00:33:18 +03:00
~! frm
2015-05-08 02:25:22 +03:00
(publish ost our.hid [%lin & (crip "just received {(trip amo)} BTC from {<frm>}")]~)
::(api-call ost /get-id /transactions/[transaction-id] %get)
++ pour-get-id :: display transaction info
|= [ost=bone pax=path rez=json]
:_ +>.$
:_ ~
!!
::
2015-05-07 00:00:06 +03:00
++ pour
|= [ost=bone pax=path res=sign]
?+ -.pax !!
%auth-token
2015-05-13 22:46:25 +03:00
?> ?=(%thou -.res)
~| 'must receive a 200'^oauth-code.vat
~| res
2015-05-07 00:00:06 +03:00
?> =(200 p.p.res)
=+ resp=(rash q:(need r.p.res) apex:poja)
=+ parsed=(need ((ot 'refresh_token'^so 'access_token'^so ~):jo resp))
~& parsed
=: auth-token.vat [~ +.parsed]
refr-token.vat [~ -.parsed]
==
2015-05-08 03:01:25 +03:00
:_ +>.$
2015-05-13 22:46:25 +03:00
:_ ~
2015-05-08 03:01:25 +03:00
(publish ost our.hid [%lin & 'authenticated.']~)
%message `+>.$
?(%addr-request %get-id)
2015-05-13 22:46:25 +03:00
?> ?=(%thou -.res)
~| 'must receive a 200'
~| res
?> =(200 p.p.res)
%- ?-(-.pax %addr-request pour-addr-request, %get-id pour-get-id)
[ost pax (rash q:(need r.p.res) apex:poja)]
2015-05-07 00:00:06 +03:00
%auth
:_ +>.$
2015-05-13 22:46:25 +03:00
~
?(%get-id %send %buy %list %sell)
~& [`@tas`-.pax res]
2015-05-07 00:00:06 +03:00
:_ +>.$
2015-05-13 22:46:25 +03:00
~
2015-05-08 02:53:08 +03:00
%sent
2015-05-13 22:46:25 +03:00
?> ?=(%thou -.res)
~| 'must receive a 200'
~| res
?> =(200 p.p.res)
2015-05-08 02:53:08 +03:00
=+ resp=(rash q:(need r.p.res) apex:poja)
=+ suc=((ot success/so ~):jo resp)
:_ +>.$
2015-05-13 22:46:25 +03:00
:_ ~
2015-05-08 02:53:08 +03:00
?~ suc
(publish ost our.hid [%lin & (crip "something went wrong")]~)
(publish ost our.hid [%lin & (crip "success!")]~)
2015-05-07 00:00:06 +03:00
==
::
++ publish
2015-05-08 02:25:22 +03:00
|= [ost=bone you=ship act=(list speech)]
^- move
2015-05-13 22:46:25 +03:00
=+ ^= thotz
2015-05-07 09:49:30 +03:00
%+ turn act
2015-05-13 22:46:25 +03:00
|= sp=speech ^- thought
2015-05-07 09:49:30 +03:00
=+ ^= tail
:- ^- audience
2015-05-08 02:25:22 +03:00
:+ :- `partner`[%& our.hid ?+((clan our.hid) !! %czar %court, %duke %porch)]
2015-05-07 09:49:30 +03:00
^- (pair envelope delivery)
[`envelope`[& ~] %pending]
~
2015-05-07 00:00:06 +03:00
~
2015-05-07 09:49:30 +03:00
`statement`[lat.hid ~ sp]
:- `@`(sham eny.hid tail)
tail
2015-05-13 22:46:25 +03:00
[ost %send /auth [our.hid %talk] %poke [%talk-command %publish thotz]]
2015-05-07 00:00:06 +03:00
--