forest-cli
Version:
The Lumberjacks' toolbelt is the Forest CLI which makes easy to manage your back office application directly from the terminal.
112 lines • 11.1 kB
JavaScript
const agent = require('superagent');
const Context = require('@forestadmin/context');
const EnvironmentSerializer = require('../serializers/environment');
const environmentDeserializer = require('../deserializers/environment');
const { handleError } = require('../utils/error');
function EnvironmentManager(config) {
const { assertPresent, authenticator, env, keyGenerator } = Context.inject();
assertPresent({ authenticator, env, keyGenerator });
this.listEnvironments = async () => {
const authToken = authenticator.getAuthToken();
return agent
.get(`${env.FOREST_SERVER_URL}/api/projects/${config.projectId}/environments`)
.set('Authorization', `Bearer ${authToken}`)
.set('forest-project-id', config.projectId)
.send()
.then(response => environmentDeserializer.deserialize(response.body));
};
this.getEnvironment = async (environmentId) => {
const authToken = authenticator.getAuthToken();
return agent
.get(`${env.FOREST_SERVER_URL}/api/environments/${environmentId}`)
.set('Authorization', `Bearer ${authToken}`)
.set('forest-environment-id', environmentId)
.send()
.then(response => environmentDeserializer.deserialize(response.body));
};
this.getEnvironmentApimap = async (environmentId) => {
const authToken = authenticator.getAuthToken();
const response = await agent
.get(`${env.FOREST_SERVER_URL}/api/apimaps/${environmentId}`)
.set('Authorization', `Bearer ${authToken}`)
.set('forest-environment-id', environmentId)
.send();
return response.body.data.apimap;
};
this.createEnvironment = async () => {
const authToken = authenticator.getAuthToken();
const attributes = {
name: config.name,
project: { id: config.projectId },
areRolesDisabled: config.disableRoles,
};
// A production environment can be created without a URL; only send one when provided.
if (config.url)
attributes.apiEndpoint = config.url;
// Required to create the first production environment (e.g. `--type production`).
// When omitted, the server defaults the type to "remote" (see environment-service).
if (config.type)
attributes.type = config.type;
const response = await agent
.post(`${env.FOREST_SERVER_URL}/api/environments`)
.set('Authorization', `Bearer ${authToken}`)
.set('forest-project-id', config.projectId)
.send(EnvironmentSerializer.serialize(attributes));
const environment = await environmentDeserializer.deserialize(response.body);
environment.authSecret = keyGenerator.generate();
return environment;
};
this.createDevelopmentEnvironment = async (projectId, endpoint) => {
const authToken = authenticator.getAuthToken();
return agent
.post(`${env.FOREST_SERVER_URL}/api/projects/${projectId}/development-environment-for-user`)
.set('Authorization', `Bearer ${authToken}`)
.send({ endpoint })
.then(response => environmentDeserializer.deserialize(response.body));
};
this.updateEnvironment = async () => {
const authToken = authenticator.getAuthToken();
return agent
.put(`${env.FOREST_SERVER_URL}/api/environments/${config.environmentId}`)
.set('Authorization', `Bearer ${authToken}`)
.send(EnvironmentSerializer.serialize({
name: config.name,
apiEndpoint: config.url,
}));
};
this.deleteEnvironment = async (environmentId) => {
const authToken = authenticator.getAuthToken();
return agent
.del(`${env.FOREST_SERVER_URL}/api/environments/${environmentId}`)
.set('Authorization', `Bearer ${authToken}`)
.set('forest-environment-id', environmentId);
};
this.reset = async (environmentName, environmentSecret) => {
const authToken = authenticator.getAuthToken();
return agent
.post(`${env.FOREST_SERVER_URL}/api/environments/reset`)
.set('Authorization', `Bearer ${authToken}`)
.set('forest-secret-key', `${environmentSecret}`)
.send({ environmentName });
};
/**
* Deploy layout changes of an environment to production.
* @param {Number} environment.id - The environment id that contains the layout changes to deploy.
*/
this.deploy = () => {
const authToken = authenticator.getAuthToken();
return agent
.post(`${env.FOREST_SERVER_URL}/api/environments/deploy`)
.set('Authorization', `Bearer ${authToken}`)
.set('forest-secret-key', `${config.envSecret}`);
};
this.handleEnvironmentError = rawError => {
const error = handleError(rawError);
if (error === 'Forbidden') {
return 'You do not have the permission to perform this action on the given environments.';
}
return error;
};
}
module.exports = EnvironmentManager;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW52aXJvbm1lbnQtbWFuYWdlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zZXJ2aWNlcy9lbnZpcm9ubWVudC1tYW5hZ2VyLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1BQU0sS0FBSyxHQUFHLE9BQU8sQ0FBQyxZQUFZLENBQUMsQ0FBQztBQUNwQyxNQUFNLE9BQU8sR0FBRyxPQUFPLENBQUMsc0JBQXNCLENBQUMsQ0FBQztBQUVoRCxNQUFNLHFCQUFxQixHQUFHLE9BQU8sQ0FBQyw0QkFBNEIsQ0FBQyxDQUFDO0FBQ3BFLE1BQU0sdUJBQXVCLEdBQUcsT0FBTyxDQUFDLDhCQUE4QixDQUFDLENBQUM7QUFDeEUsTUFBTSxFQUFFLFdBQVcsRUFBRSxHQUFHLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0FBRWxELFNBQVMsa0JBQWtCLENBQUMsTUFBTTtJQUNoQyxNQUFNLEVBQUUsYUFBYSxFQUFFLGFBQWEsRUFBRSxHQUFHLEVBQUUsWUFBWSxFQUFFLEdBQUcsT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDO0lBQzdFLGFBQWEsQ0FBQyxFQUFFLGFBQWEsRUFBRSxHQUFHLEVBQUUsWUFBWSxFQUFFLENBQUMsQ0FBQztJQUVwRCxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsS0FBSyxJQUFJLEVBQUU7UUFDakMsTUFBTSxTQUFTLEdBQUcsYUFBYSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBRS9DLE9BQU8sS0FBSzthQUNULEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxpQkFBaUIsaUJBQWlCLE1BQU0sQ0FBQyxTQUFTLGVBQWUsQ0FBQzthQUM3RSxHQUFHLENBQUMsZUFBZSxFQUFFLFVBQVUsU0FBUyxFQUFFLENBQUM7YUFDM0MsR0FBRyxDQUFDLG1CQUFtQixFQUFFLE1BQU0sQ0FBQyxTQUFTLENBQUM7YUFDMUMsSUFBSSxFQUFFO2FBQ04sSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsdUJBQXVCLENBQUMsV0FB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