function Uib(RED) {
    // Keep a global reference to the RED object for convenience, especially in the libraries
    uib.RED = RED

    // Lets get set up
    runtimeSetup() // (1a)

    /** 2) Register the node by name. This must be called before overriding any of the
     *  Node functions.
     */
    RED.nodes.registerType(uib.moduleName, nodeInstance, {
        credentials: {
            jwtSecret: { type: 'password', },
        },
        // Makes these available to the editor as RED.settings.uibuilderxxxxxx
        settings: {
            // The server's NODE_ENV environment var (e.g. PRODUCTION or DEVELOPMENT)
            uibuilderNodeEnv: { value: process.env.NODE_ENV, exportable: true, },
            // Available templates and details
            uibuilderTemplates: { value: templateConf, exportable: true, },
            // Custom server details
            uibuilderCustomServer: { value: (uib.customServer), exportable: true, },
            // Current version of uibuilder
            uibuilderCurrentVersion: { value: (uib.version), exportable: true, },
            // Should the editor tell the user that a redeploy is needed (based on uib versions)
            uibuilderRedeployNeeded: { value: uib.reDeployNeeded, exportable: true, },
            // TODO REMOVE? since only correct at first load and an API is needed anyway. List of the deployed uib instances [{node_id: url}]
            uibuilderInstances: { value: uib.instances, exportable: true, },
            // uibRoot
            uibuilderRootFolder: { value: uib.rootFolder, exportable: true, },
        },
    })
}
1) The function that defines the node - runs even if no nodes are deployed
@param {runtimeRED} RED Node-RED's runtime object