const { getAppApis, getTemplateApi, crypto } = require("@budibase/core") const getDatastore = require("./datastore") const { masterAppPackage } = require("../utilities/createAppPackage") const getDatabaseManager = require("../utilities/databaseManager") const constructHierarchy = (datastore, appDefinition) => { appDefinition.hierarchy = getTemplateApi({ datastore }).constructHierarchy( appDefinition.hierarchy ) return appDefinition } module.exports.getApisWithFullAccess = async (datastore, appPackage) => { const appDefinition = constructHierarchy(datastore, appPackage.appDefinition) const bb = await getAppApis( datastore, appPackage.behaviourSources, null, //cleanupTransations null, // getEpochTime crypto, appDefinition ) bb.withFullAccess() return bb } module.exports.getApisForUser = async ( datastore, appPackage, username, password ) => { const bb = await getAppApis( datastore, appPackage.behaviourSources, null, //cleanupTransations null, // getEpochTime crypto, constructHierarchy(datastore, appPackage.appDefinition) ) await bb.authenticateAs(username, password) return bb } module.exports.getApisForSession = async (datastore, appPackage, session) => { const user = JSON.parse(session.user_json) const bb = await getAppApis( datastore, appPackage.behaviourSources, null, //cleanupTransations null, // getEpochTime crypto, constructHierarchy(datastore, appPackage.appDefinition) ) bb.asUser(user) return bb } module.exports.getMasterApisWithFullAccess = async context => { const { config } = context const datastoreModule = getDatastore(config) const databaseManager = getDatabaseManager( datastoreModule, config.datastoreConfig ) const masterDatastore = datastoreModule.getDatastore( databaseManager.masterDatastoreConfig ) return await module.exports.getApisWithFullAccess( masterDatastore, masterAppPackage(context) ) }