{-# 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