morley-client-0.1.0: src/Morley/Client/RPC/HttpClient.hs
-- SPDX-FileCopyrightText: 2020 Tocqueville Group
--
-- SPDX-License-Identifier: LicenseRef-MIT-TQ
module Morley.Client.RPC.HttpClient
( newClientEnv
) where
import Network.HTTP.Client (ManagerSettings(..), Request(..), defaultManagerSettings, newManager)
import Network.HTTP.Client.TLS (tlsManagerSettings)
import Servant.Client (BaseUrl(..), ClientEnv, Scheme(..), mkClientEnv)
-- | Make servant client environment from morley client config.
--
-- Note: Creating a new servant manager is a relatively expensive
-- operation, so this function is not supposed to be called often.
newClientEnv :: BaseUrl -> IO ClientEnv
newClientEnv endpointUrl = do
manager' <- newManager $ case baseUrlScheme endpointUrl of
Http -> defaultManagerSettings{ managerModifyRequest = fixRequest }
Https -> tlsManagerSettings{ managerModifyRequest = fixRequest }
return $ mkClientEnv manager' endpointUrl
-- | Add header, required by the Tezos RPC interface
fixRequest :: Request -> IO Request
fixRequest req = return $
req { requestHeaders = ("Content-Type", "application/json") :
filter (("Content-Type" /=) . fst) (requestHeaders req)
}