rbpcp-api-0.2.0.0: src/RBPCP/Api.hs
{-# LANGUAGE DataKinds, LambdaCase, TypeOperators, OverloadedStrings, FlexibleInstances, MultiParamTypeClasses #-}
module RBPCP.Api where
import RBPCP.Types
import RBPCP.Internal.Types
import Servant.API
type VER = "v2"
-- Example: /funding/028adc96575e3ee23a69eb17723911e77c5c06320e4354b1518bb635f32793c910/1474949961/info
type FundInfo = VER :> "funding" :> Capture "client_pubkey" (Client PubKey) :> Capture "exp_time" BLT :> "info"
:> Get '[JSON, PAYREQ] FundInfoResponse
-- Example: /channels/028adc96575e3ee23a69eb17723911e77c5c06320e4354b1518bb635f32793c910/1474949961/53ee3615ac0dd479ec1d3e144eb651f65764d3a5e400c04cf3c79425e8b22fb0/2
type ChanOpen = VER :> "channels" :> Capture "client_pubkey" (Client PubKey) :> Capture "exp_time" BLT
:> Capture "funding_txid" TxHash :> Capture "funding_vout" Vout
:> ReqBody '[JSON] Payment :> Verb 'POST 201 '[JSON] PaymentResult
type ChanPay = VER :> "channels" :> Capture "client_pubkey" (Client PubKey) :> Capture "exp_time" BLT
:> Capture "funding_txid" TxHash :> Capture "funding_vout" Vout
:> ReqBody '[JSON] Payment :> Put '[JSON] PaymentResult
type ChanClose = VER :> "channels" :> Capture "client_pubkey" (Client PubKey) :> Capture "exp_time" BLT
:> Capture "funding_txid" TxHash :> Capture "funding_vout" Vout :> "close"
:> ReqBody '[JSON] Payment :> Put '[JSON] PaymentResult
-- | RESTful Bitcoin payment channel protocol
type RBPCP =
FundInfo
:<|> ChanOpen
:<|> ChanPay
:<|> ChanClose
-- Short-hands
type BLT = Word32