{-# LANGUAGE DeriveGeneric #-} module Data.Connect.Lifecycle ( Lifecycle(..) , emptyLifecycle , defaultLifecycle ) where import Data.Aeson import Data.Connect.AesonHelpers import Data.Connect.OrphanInstances () import GHC.Generics import qualified Network.URI as NU -- | Every Atlassian Connect add-on can be installed, uninstalled, enabled and disabled. These are known as 'Lifecycle' -- events. These events will fire on each and every Cloud instance that your add-on is installed on. You can request in -- your Atlassian Connect add-on descriptor to be alerted of lifecycle events. When the event fires, if you have -- requested it, you will be given the details of the event in a JSON blob by the host application. -- -- The lifecycle events are documented fully in the Atlassian Connect documentation: -- -- -- It is important to note that the installed event is particularily important to any Atlassian Connect add-on that -- needs to use 'Jwt' auth tokens because the installed handler will come with the shared secret for your add-on on -- that particular instance. data Lifecycle = Lifecycle { installed :: Maybe NU.URI -- ^ Potential relative URI to call every time an add-on is installed on an instance. , uninstalled :: Maybe NU.URI -- ^ Potential relative URI to call every time an add-on is uninstalled on an instance. , enabled :: Maybe NU.URI -- ^ Potential relative URI to call every time an add-on is enabled on an instance. , disabled :: Maybe NU.URI -- ^ Potential relative URI to call every time an add-on is disabled on an instance. } deriving (Show, Generic) -- TODO instance ToJSON Lifecycle where toJSON = genericToJSON baseOptions -- | The empty 'Lifecycle' allowing you to specify exactly which events you wish to handle with Haskell record syntax. emptyLifecycle :: Lifecycle emptyLifecycle = Lifecycle Nothing Nothing Nothing Nothing -- | The default 'Lifecycle' where installed goes to /installed and so on and so forth for every lifecycle event. You -- can choose to disclude certain events by 'Nothing' them out. defaultLifecycle :: Lifecycle defaultLifecycle = Lifecycle { installed = NU.parseRelativeReference "/installed" , uninstalled = NU.parseRelativeReference "/uninstalled" , enabled = NU.parseRelativeReference "/enabled" , disabled = NU.parseRelativeReference "/disabled" }