coinbase-pro-0.7.0.0: src/lib/CoinbasePro/Authenticated/API.hs
{-# LANGUAGE DataKinds #-}
{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE TypeOperators #-}
module CoinbasePro.Authenticated.API
( accounts
, singleAccount
, listOrders
, placeOrder
, cancelOrder
, cancelAll
, fills
, fees
, trailingVolume
) where
import Data.Proxy (Proxy (..))
import Servant.API ((:<|>) (..), (:>),
AuthProtect, Capture, JSON,
NoContent, QueryParam,
QueryParams, ReqBody)
import Servant.Client
import Servant.Client.Core (AuthenticatedRequest)
import CoinbasePro.Authenticated.Accounts (Account, AccountId (..),
Fees, TrailingVolume)
import CoinbasePro.Authenticated.Fills (Fill)
import CoinbasePro.Authenticated.Orders (Order, PlaceOrderBody (..),
Status (..))
import CoinbasePro.Authenticated.Request (AuthDelete, AuthGet,
AuthPost)
import CoinbasePro.Types (OrderId (..),
ProductId (..))
type API = "accounts" :> AuthGet [Account]
:<|> "accounts" :> Capture "account-id" AccountId :> AuthGet Account
:<|> "orders" :> QueryParams "status" Status :> QueryParam "product_id" ProductId :> AuthGet [Order]
:<|> "orders" :> ReqBody '[JSON] PlaceOrderBody :> AuthPost Order
:<|> "orders" :> Capture "order_id" OrderId :> AuthDelete NoContent
:<|> "orders" :> QueryParam "product_id" ProductId :> AuthDelete [OrderId]
:<|> "fills" :> QueryParam "product_id" ProductId :> QueryParam "order_id" OrderId :> AuthGet [Fill]
:<|> "fees" :> AuthGet Fees
:<|> "users" :> "self" :> "trailing-volume" :> AuthGet [TrailingVolume]
api :: Proxy API
api = Proxy
accounts :: AuthenticatedRequest (AuthProtect "CBAuth") -> ClientM [Account]
singleAccount :: AccountId -> AuthenticatedRequest (AuthProtect "CBAuth") -> ClientM Account
listOrders :: [Status] -> Maybe ProductId -> AuthenticatedRequest (AuthProtect "CBAuth") -> ClientM [Order]
placeOrder :: PlaceOrderBody -> AuthenticatedRequest (AuthProtect "CBAuth") -> ClientM Order
cancelOrder :: OrderId -> AuthenticatedRequest (AuthProtect "CBAuth") -> ClientM NoContent
cancelAll :: Maybe ProductId -> AuthenticatedRequest (AuthProtect "CBAuth") -> ClientM [OrderId]
fills :: Maybe ProductId -> Maybe OrderId -> AuthenticatedRequest (AuthProtect "CBAuth") -> ClientM [Fill]
fees :: AuthenticatedRequest (AuthProtect "CBAuth") -> ClientM Fees
trailingVolume :: AuthenticatedRequest (AuthProtect "CBAuth") -> ClientM [TrailingVolume]
accounts :<|> singleAccount :<|> listOrders :<|> placeOrder :<|> cancelOrder :<|> cancelAll :<|> fills :<|> fees :<|> trailingVolume = client api