{-# LANGUAGE DataKinds #-}
{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE GADTs #-}
{-# LANGUAGE GeneralizedNewtypeDeriving #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE TemplateHaskell #-}
{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE TypeOperators #-}
module PegNet.RPC.Api where
import Control.Concurrent
import Control.Exception (bracket)
import Control.Monad.IO.Class
import Control.Remote.Monad.JSON
import Control.Remote.Monad.JSON.Client
import Control.Remote.Monad.JSON.Router
import Control.Remote.Monad.JSON.Trace
import Data.Aeson
import Data.Aeson.Types
import Data.Text
import Network.Socket (HostName, ServiceName,
SocketType (Stream),
addrAddress, addrFamily,
addrProtocol,
addrSocketType, close,
connect, defaultHints,
getAddrInfo, socket)
import PegNet.RPC.Types.Balances
import PegNet.RPC.Types.Issuance
import PegNet.RPC.Types.Rates
import PegNet.RPC.Types.RichEntry
import PegNet.RPC.Types.SyncStatus
import PegNet.RPC.Types.Transaction
import PegNet.RPC.Types.TransactionStatus
endpoint = "http://localhost:8070/v1"
endpointRemote = "https://api.pegnetd.com"
reqGetSyncStatus :: RPC SyncStatus
reqGetSyncStatus =
method "get-sync-status" None
reqGetTransaction :: Text
-> RPC Transaction
reqGetTransaction txid =
method "get-transaction"
$ Named [("txid", String txid)]
reqPegNetIssuance :: RPC NetIssuance
reqPegNetIssuance =
method "get-pegnet-issuance" None
reqPegNetBalances :: Text
-> RPC NetBalances
reqPegNetBalances address =
method "get-pegnet-balances"
$ Named [("address", String address)]
reqPegNetRates :: Int
-> RPC Rates
reqPegNetRates height =
method "get-pegnet-rates"
$ Named [("height", toJSON height)]
reqGetTransactionStatus :: Text
-> RPC TransactionStatus
reqGetTransactionStatus entryHash =
method "get-transaction-status"
$ Named [("entryhash", String entryHash)]
reqGetTransactions :: Maybe Text
-> Maybe Text
-> Maybe Int
-> Maybe Int
-> Maybe Bool
-> Maybe Bool
-> Maybe Bool
-> Maybe Bool
-> Maybe Bool
-> RPC [Transaction]
reqGetTransactions mbEntryHash mbAddress mbHeight mbOffset b1 b2 b3 b4 b5 =
method "get-transactions"
$ Named ([]
++ (case mbEntryHash of
Nothing -> []
Just eh -> [("entryhash", String eh)])
++ (case mbAddress of
Nothing -> []
Just ad -> [("address", String ad)])
++ (case mbHeight of
Nothing -> []
Just hg -> [("height", toJSON hg)]))
reqGetRichList :: Maybe Text
-> Int
-> RPC [RichEntry]
reqGetRichList mbAsset limit =
method "get-rich-list"
$ Named ([("count", toJSON limit)]
++ (case mbAsset of
Nothing -> []
Just asset -> [("asset", String asset)]))
main = do
let s = weakSession $ traceSendAPI "" $ clientSendAPIWithAlt endpointRemote
(h, i) <- send s $ do
h <- reqGetSyncStatus
i <- reqPegNetIssuance
rich <- reqGetRichList (Just "PEG") 5
return (h, i)
return ()