packages feed

api-rpc-pegnet-0.1.0.0: src/PegNet/RPC/Api.hs

{-# 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.SyncStatus
import           PegNet.RPC.Types.Transaction

--------------------------------------------------------------------------------

endpoint  = "http://localhost:8070/v1"
endpointRemote = "http://dev.pegnet.org/v1"

-- | "get-sync-status"
--   Return the current heights synced by pegnetd and the factomd it is communicating with
reqGetSyncStatus :: RPC SyncStatus
reqGetSyncStatus =
  method "get-sync-status" None -- $ List [toJSON height]

-- | "get-transaction"
--   Returns if a given entry hash is a pegnet transaction, and if so returns the transaction.
reqGetTransaction :: Text -> Text -> RPC Transaction
reqGetTransaction chainId entryHash =
  method "get-transaction" $ List [String chainId, String entryHash]

reqPegNetIssuance :: RPC ()
reqPegNetIssuance =
  method "get-pegnet-issuance" None

reqPegNetBalances :: RPC ()
reqPegNetBalances =
  method "get-pegnet-balances" None

reqPegNetRates :: RPC ()
reqPegNetRates =
  method "get-pegnet-rates" None

reqGetTransactionStatus :: Text -> RPC ()
reqGetTransactionStatus id =
  method "get-transaction-status" None

reqGeTransactions :: RPC [Transaction]
reqGeTransactions =
  method "get-transactions" None

--------------------------------------------------------------------------------

main = do
  let s = weakSession (traceSendAPI "" $ clientSendAPI endpoint)
  h <- send s $ do
         h <- reqGetSyncStatus
         return h
  print h