Skip to content

Commit becb729

Browse files
committed
Feat 17: Hackage readiness - An important fix/change: New route to pass for api key instead of it being overridden in each request
1 parent 237cfb1 commit becb729

File tree

12 files changed

+31
-30
lines changed

12 files changed

+31
-30
lines changed

src/Maestro/API.hs

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
module Maestro.API where
22

3-
import Data.Proxy (Proxy (..))
3+
import Data.Text (Text)
44
import Maestro.API.Accounts
55
import Maestro.API.Address
66
import Maestro.API.Assets
@@ -13,7 +13,7 @@ import Maestro.API.Transaction
1313
import Servant.API
1414
import Servant.API.Generic
1515

16-
data MaestroApi route = Routes
16+
data MaestroApiV0 route = MaestroApiV0
1717
{ _accounts :: route :- "accounts" :> ToServantApi AccountsAPI
1818
, _address :: route :- "addresses" :> ToServantApi AddressAPI
1919
, _assets :: route :- "assets" :> ToServantApi AssetsAPI
@@ -25,5 +25,6 @@ data MaestroApi route = Routes
2525
, _scripts :: route :- "scripts" :> ToServantApi ScriptsAPI
2626
} deriving Generic
2727

28-
api :: Proxy (ToServantApi MaestroApi)
29-
api = genericApi (Proxy :: Proxy MaestroApi)
28+
newtype MaestroApiV0Auth route = MaestroApiV0Auth
29+
{ _apiV0 :: route :- Header' '[Required] "api-key" Text :> ToServantApi MaestroApiV0 }
30+
deriving Generic

src/Maestro/Client/Accounts.hs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ import Servant.API.Generic
1010
import Servant.Client
1111

1212
accountsClient :: MaestroEnv -> AccountsAPI (AsClientT IO)
13-
accountsClient = fromServant . _accounts . apiClient
13+
accountsClient = fromServant . _accounts . apiV0Client
1414

1515
getAccount :: MaestroEnv -> Text -> IO AccountInfo
1616
getAccount = _account . accountsClient

src/Maestro/Client/Address.hs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ import Servant.API.Generic
1111
import Servant.Client
1212

1313
addressClient :: MaestroEnv -> AddressAPI (AsClientT IO)
14-
addressClient = fromServant . _address . apiClient
14+
addressClient = fromServant . _address . apiV0Client
1515

1616
-- |
1717
-- Returns list of utxos for multiple addresses

src/Maestro/Client/Assets.hs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ import Servant.API.Generic
1111
import Servant.Client
1212

1313
assetClient :: MaestroEnv -> AssetsAPI (AsClientT IO)
14-
assetClient = fromServant . _assets . apiClient
14+
assetClient = fromServant . _assets . apiV0Client
1515

1616
-- |
1717
-- Returns list of Information about the assets of the given policy ID

src/Maestro/Client/Core.hs

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
module Maestro.Client.Core
44
(
55
ApiError (..)
6-
, apiClient
6+
, apiV0Client
77
, MaestroError (..)
88
, fromServantClientError
99
, module Maestro.Client.Core.Pagination
@@ -18,6 +18,7 @@ import Maestro.Client.Core.Pagination
1818
import Maestro.Client.Env
1919
import Maestro.Types.Common (LowerFirst)
2020
import Network.HTTP.Types
21+
import Servant.API (fromServant)
2122
import Servant.Client
2223
import Servant.Client.Generic
2324

@@ -79,5 +80,8 @@ fromServantClientError e = case e of
7980
Just (ae :: ApiError) -> _apiErrorMessage ae
8081
Nothing -> mempty
8182

82-
apiClient :: MaestroEnv -> MaestroApi (AsClientT IO)
83-
apiClient MaestroEnv{..} = genericClientHoist $ \x -> runClientM x _maeClientEnv >>= either (throwIO . fromServantClientError) pure
83+
apiV0ClientAuth :: MaestroEnv -> MaestroApiV0Auth (AsClientT IO)
84+
apiV0ClientAuth MaestroEnv{..} = genericClientHoist $ \x -> runClientM x _maeClientEnv >>= either (throwIO . fromServantClientError) pure
85+
86+
apiV0Client :: MaestroEnv -> MaestroApiV0 (AsClientT IO)
87+
apiV0Client mEnv@MaestroEnv {..} = fromServant $ _apiV0 (apiV0ClientAuth mEnv) _maeToken

src/Maestro/Client/Datum.hs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ import Servant.API.Generic
1212
import Servant.Client
1313

1414
datumClient :: MaestroEnv -> DatumAPI (AsClientT IO)
15-
datumClient = fromServant . _datum . apiClient
15+
datumClient = fromServant . _datum . apiV0Client
1616

1717
-- | Get information about the datum from it's hash.
1818
getDatumByHash :: MaestroEnv -> Text -> IO Datum

src/Maestro/Client/Env.hs

Lines changed: 10 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -6,16 +6,16 @@ module Maestro.Client.Env
66
) where
77

88
import Data.Text (Text)
9-
import Data.Text.Encoding (encodeUtf8)
10-
import Network.HTTP.Client (managerModifyRequest, requestHeaders)
11-
import Network.HTTP.Client.TLS (newTlsManagerWith, tlsManagerSettings)
9+
import Network.HTTP.Client (newManager)
10+
import Network.HTTP.Client.TLS (tlsManagerSettings)
1211

1312
import qualified Servant.Client as Servant
1413

1514
type MaestroToken = Text
1615

17-
newtype MaestroEnv = MaestroEnv
18-
{ _maeClientEnv :: Servant.ClientEnv
16+
data MaestroEnv = MaestroEnv
17+
{ _maeClientEnv :: !Servant.ClientEnv
18+
, _maeToken :: !MaestroToken
1919
}
2020

2121
data MaestroNetwork = Mainnet | Preprod
@@ -26,15 +26,11 @@ maestroBaseUrl Mainnet = "https://mainnet.gomaestro-api.org/v0"
2626

2727
mkMaestroEnv :: MaestroToken -> MaestroNetwork -> IO MaestroEnv
2828
mkMaestroEnv token nid = do
29-
clientEnv <- servantClientEnv token $ maestroBaseUrl nid
30-
pure $ MaestroEnv {_maeClientEnv = clientEnv}
29+
clientEnv <- servantClientEnv $ maestroBaseUrl nid
30+
pure $ MaestroEnv { _maeClientEnv = clientEnv, _maeToken = token }
3131

32-
servantClientEnv :: MaestroToken -> String -> IO Servant.ClientEnv
33-
servantClientEnv token url = do
32+
servantClientEnv :: String -> IO Servant.ClientEnv
33+
servantClientEnv url = do
3434
baseUrl <- Servant.parseBaseUrl url
35-
manager <- newTlsManagerWith $ tlsManagerSettings {managerModifyRequest = addTokenHeader}
36-
35+
manager <- newManager tlsManagerSettings
3736
pure $ Servant.mkClientEnv manager baseUrl
38-
39-
where
40-
addTokenHeader req = pure $ req {requestHeaders = [("api-key", encodeUtf8 token), ("Content-Type", "application/json")]}

src/Maestro/Client/Epochs.hs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ import Servant.API.Generic
1212
import Servant.Client
1313

1414
epochsClient :: MaestroEnv -> EpochsAPI (AsClientT IO)
15-
epochsClient = fromServant . _epochs . apiClient
15+
epochsClient = fromServant . _epochs . apiV0Client
1616

1717
-- | Get information about the current epoch.
1818
getCurrentEpoch :: MaestroEnv -> IO CurrentEpochInfo

src/Maestro/Client/General.hs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ import Servant.API.Generic
1414
import Servant.Client
1515

1616
generalClient :: MaestroEnv -> GeneralAPI (AsClientT IO)
17-
generalClient = fromServant . _general . apiClient
17+
generalClient = fromServant . _general . apiV0Client
1818

1919
-- | Get details about the latest block of the network.
2020
getChainTip :: MaestroEnv -> IO ChainTip

src/Maestro/Client/Pools.hs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ import Servant.API.Generic
2020
import Servant.Client
2121

2222
poolsClient :: MaestroEnv -> PoolAPI (AsClientT IO)
23-
poolsClient = fromServant . _pools . apiClient
23+
poolsClient = fromServant . _pools . apiV0Client
2424

2525
-- | Returns a list of currently registered stake pools
2626
listPools :: MaestroEnv -> Page -> IO [PoolListInfo]

0 commit comments

Comments
 (0)