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