module Hercules.CLI.Common ( runAuthenticated, exitMsg, ) where import Hercules.CLI.Client import Hercules.CLI.Credentials (determineDomain, readToken) import Hercules.CLI.Exception (exitMsg) import Protolude import RIO (RIO, runRIO) import Servant.Auth.Client (Token (Token)) runAuthenticated :: RIO (HerculesClientToken, HerculesClientEnv) b -> IO b runAuthenticated :: forall b. RIO (HerculesClientToken, HerculesClientEnv) b -> IO b runAuthenticated RIO (HerculesClientToken, HerculesClientEnv) b m = do HerculesClientEnv clientEnv <- IO HerculesClientEnv Hercules.CLI.Client.init Text domain <- IO Text determineDomain Text token <- Text -> IO Text readToken Text domain (HerculesClientToken, HerculesClientEnv) -> RIO (HerculesClientToken, HerculesClientEnv) b -> IO b forall (m :: * -> *) env a. MonadIO m => env -> RIO env a -> m a runRIO (Token -> HerculesClientToken HerculesClientToken (Token -> HerculesClientToken) -> Token -> HerculesClientToken forall a b. (a -> b) -> a -> b $ ByteString -> Token Token (ByteString -> Token) -> ByteString -> Token forall a b. (a -> b) -> a -> b $ Text -> ByteString encodeUtf8 Text token, HerculesClientEnv clientEnv) RIO (HerculesClientToken, HerculesClientEnv) b m