# Lifecycles
# Introduction
The platform will call certain lyfecycle callbacks when registering and unregistering your application to help you prepare your application for running your code.
# Callbacks
The callbacks are declared as shown below.
const app = {
    lifeCycle: {
        onInstall: function(context, uiValues) {
            console.log('Installing')
            // This callback runs when your application is being installed.
            // Do your validation/setup here and indicate if the installation should succeed or fail.
            return {
                success: true,
                message: 'Ready for use'
            }
        },
        onUninstall: function(context) {
            console.log('Uninstalling')
            // This callback runs when your application is being uninstalled.
            // Do your cleanup operation here and optionally decline the uninstall.
            return {
                success: true,
                message: 'Successfully uninstalled'
            }
        },
        onRunRequest: async function(context, req) {
            // This callback runs when your is intentionally/manually run externally.
            // Use this callback to respond to custom external requests.
        },
        onRun: async function(context) {
            // This callback runs when your is intentionally/manually run from the ide.
            // Use this callback to test your code.
        },
        onStart: function(context) {
            console.log('Starting')
            // This callback signals that the platform has registered your app for running. Not all applications have been registered at this time.
            // Use this callback for preparing your app. Registering globals, subscribing to platform & custom events.
        },
        onResume: function(context) {
            console.log('Resuming')
            // This callback signals that the plaftorm has started your application and all other applications successfully.
            // Use this callback for signaling other apps by emitting platform & custom events.
        },
        onPause: function(context) {
            console.log('Pausing')
            // This callback signals that the platform has already executed the required request/operation and is preparing to release your application and all others.
            // Use this callback for signaling other apps by emitting platform & custom events.
        },
        onStop: function(context) {
            console.log('Stopping')
            // This callback signals that the platform will release your app after calling this function and may have already released other apps.
            // Use this callback to do cleanup such as unsubscribing to events, releasing memory, etc.
        }
    },
}
# onInstall
This callback runs when your application is being installed. Do your validation/setup here and indicate if the installation should succeed or fail.
As a developer this callback will help you and your users to get your application working right off the bat.
# Declaration
{
    ...
    onInstall: function(context, uiValues) {
        console.log('Installing')
        // This callback runs when your application is being installed.
        // Do your validation/setup here and indicate if the installation should succeed or fail.
        return {
            success: true,
            message: 'Ready for use'
        }
    }
}
# onUninstall
This callback runs when your application is being uninstalled. Do your cleanup operation here and optionally decline the uninstall.
As a developer this callback will help you and your users to get your application uninstalled properly & gracefully.
# Declaration
{
    ...
    onUninstall: function(context) {
        console.log('Uninstalling')
        // This callback runs when your application is being uninstalled.
        // Do your cleanup operation here and optionally decline the uninstall.
        return {
            success: true,
            message: 'Successfully uninstalled'
        }
    }
}
# onRun
This callback runs when your is intentionally/manually run from the ide. Use this callback to test your code.
# Declaration
{
    ...
    onRun: async function(context) {
        // This callback runs when your is intentionally/manually run from the ide.
        // Use this callback to test your code.
    },
}
# onRunRequest
This callback runs when your is intentionally/manually run externally. Use this callback to respond to custom external requests.
As Developer this callback will help you with to forcefully run your application. Like a webhook to start and run your application.
# Declaration
{
    ...
    onRun: async function(context) {
        // This callback runs when your is intentionally/manually run from the ide.
        // Use this callback to test your code.
    },
}
# How to run this callback externally
This requires you to know 3 things:
- The uuid of your app referred to as {uuid}.
 - The uuid of the organization that has installed your app referred to as {organization}.
 - The uuid of the installation of your app referred to as {installation_uuid}
 
Base url to execute the app is as follows:
https://graph.salescloud.is/runApp/{uuid}
It accepts GET/PUT/POST/DELETE and it is up to your code in the callback to respond to these accordingly.
The endpoint above requires two headers as follows:
X-SALESCLOUD-APP-INSTALL-ID
This is the {installation_uuid}.
X-SALESCLOUD-ORGANIZATION-ID
This is the {organization_uuid}