-- | Description: JWT effects
module Polysemy.Account.Api.Effect.Jwt where

import Crypto.JOSE (JWK)
import Servant.Auth.Server (JWTSettings)

import Polysemy.Account.Data.AuthToken (AuthToken)

-- | Effect for generating JSON Web Keys.
data GenJwk :: Effect where
  -- | Generate a JSON Web Key.
  GenJwk :: GenJwk m JWK

makeSem ''GenJwk

-- | Effect for managing JSON Web Token generation.
data Jwt a :: Effect where
  -- | Generate a new JSON Web Key for signing tokens.
  Key :: Jwt a m JWK
  -- | Obtain the settings used to sign and validate tokens.
  Settings :: Jwt a m JWTSettings
  -- | Create a new JSON Web Token.
  MakeToken :: a -> Jwt a m AuthToken

makeSem ''Jwt