module Network.MtGoxAPI
( initMtGoxAPI
, getTickerStatus
, simulateBTCSell
, simulateBTCBuy
, simulateUSDSell
, simulateUSDBuy
, waitForBTCDeposit
, getOrderCountR
, getPrivateInfoR
, getBitcoinDepositAddressR
, withdrawBitcoins
, submitOrder
, submitBtcBuyOrder
, submitBtcSellOrder
, module Network.MtGoxAPI.Credentials
, module Network.MtGoxAPI.Handles
, module Control.Watchdog
, TickerStatus(..)
, DepthStoreAnswer(..)
, H.OrderStats(..)
, module Network.MtGoxAPI.Types
) where
import Control.Watchdog
import Network.MtGoxAPI.Credentials
import Network.MtGoxAPI.CurlWrapper
import Network.MtGoxAPI.DepthStore
import Network.MtGoxAPI.Handles
import Network.MtGoxAPI.StreamConnection
import Network.MtGoxAPI.TickerMonitor
import Network.MtGoxAPI.Types
import Network.MtGoxAPI.WalletNotifier
import qualified Network.MtGoxAPI.HttpAPI as H
initMtGoxAPI :: Maybe WatchdogLogger-> MtGoxCredentials -> MtGoxStreamSettings -> IO MtGoxAPIHandles
initMtGoxAPI mLogger mtgoxCreds mtgoxStreamSettings = do
tickerMonitorHandle <- initTickerMonitor
depthStoreHandle <- initDepthStore
curlHandle <- initCurlWrapper
walletNotifierHandle <- initWalletNotifier
let mtgoxAPIHandles = MtGoxAPIHandles
{ mtgoxCredentials = mtgoxCreds
, mtgoxLogger = mLogger
, mtgoxCurlHandle = curlHandle
, mtgoxTickerMonitorHandle = tickerMonitorHandle
, mtgoxDepthStoreHandle = depthStoreHandle
, mtgoxWalletNotifierHandle = walletNotifierHandle
}
_ <- initMtGoxStream mtgoxCreds mtgoxStreamSettings mtgoxAPIHandles
return mtgoxAPIHandles
getOrderCountR :: MtGoxAPIHandles -> IO (Either String OpenOrderCount)
getOrderCountR apiData = callHTTPApi apiData H.getOrderCountR
getPrivateInfoR :: MtGoxAPIHandles -> IO (Either String PrivateInfo)
getPrivateInfoR apiData = callHTTPApi apiData H.getPrivateInfoR
getBitcoinDepositAddressR :: MtGoxAPIHandles -> IO (Either String BitcoinDepositAddress)
getBitcoinDepositAddressR apiData = callHTTPApi apiData H.getBitcoinDepositAddressR
withdrawBitcoins :: MtGoxAPIHandles-> BitcoinAddress -> Integer -> IO (Either String WithdrawResult)
withdrawBitcoins apiData = callHTTPApi' apiData H.withdrawBitcoins
submitOrder :: MtGoxAPIHandles-> OrderType -> Integer -> IO (Either String H.OrderStats)
submitOrder apiData = callHTTPApi apiData H.submitOrder
submitBtcBuyOrder :: MtGoxAPIHandles -> Integer -> IO (Either String Order)
submitBtcBuyOrder apiData = callHTTPApi' apiData H.submitBtcBuyOrder
submitBtcSellOrder :: MtGoxAPIHandles -> Integer -> IO (Either String Order)
submitBtcSellOrder apiData = callHTTPApi' apiData H.submitBtcSellOrder
callHTTPApi :: MtGoxAPIHandles-> (Maybe WatchdogLogger -> CurlHandle -> MtGoxCredentials -> t)-> t
callHTTPApi apiData f =
f (mtgoxLogger apiData) (mtgoxCurlHandle apiData) (mtgoxCredentials apiData)
callHTTPApi' :: MtGoxAPIHandles -> (CurlHandle -> MtGoxCredentials -> t) -> t
callHTTPApi' apiData f =
f (mtgoxCurlHandle apiData) (mtgoxCredentials apiData)