UNPKG

forest-cli

Version:

The Lumberjacks' toolbelt is the Forest CLI which makes easy to manage your back office application directly from the terminal.

104 lines 9.74 kB
const HEADER_CONTENT_TYPE = 'Content-Type'; const HEADER_CONTENT_TYPE_JSON = 'application/json'; const HEADER_FOREST_ORIGIN = 'forest-origin'; const HEADER_USER_AGENT = 'User-Agent'; /** * @class * @param {import('../context/plan').Context} context */ function Api({ pkg, env, superagent: agent, applicationTokenSerializer, applicationTokenDeserializer, environmentDeserializer, environmentSerializer, projectDeserializer, projectSerializer, }) { this.endpoint = () => env.FOREST_SERVER_URL; this.userAgent = `forest-cli@${pkg.version}`; const headers = { [HEADER_FOREST_ORIGIN]: 'forest-cli', [HEADER_CONTENT_TYPE]: HEADER_CONTENT_TYPE_JSON, [HEADER_USER_AGENT]: this.userAgent, }; this.login = async (email, password) => agent .post(`${this.endpoint()}/api/sessions`) .set(headers) .send({ email, password }) .then(response => response.body.token); /** * @param {import('../serializers/application-token').InputApplicationToken} applicationToken * @param {string} sessionToken * @returns {Promise<import('../deserializers/application-token').ApplicationToken>} */ this.createApplicationToken = async (applicationToken, sessionToken) => agent .post(`${this.endpoint()}/api/application-tokens`) .set(headers) .set('Authorization', `Bearer ${sessionToken}`) .send(applicationTokenSerializer.serialize(applicationToken)) .then(response => applicationTokenDeserializer.deserialize(response.body)); /** * @param {string} sessionToken * @returns {Promise<import('../deserializers/application-token').ApplicationToken>} */ this.deleteApplicationToken = async (sessionToken) => { try { await agent .delete(`${this.endpoint()}/api/application-tokens`) .set(HEADER_FOREST_ORIGIN, 'forest-cli') .set(HEADER_CONTENT_TYPE, HEADER_CONTENT_TYPE_JSON) .set(HEADER_USER_AGENT, this.userAgent) .set('Authorization', `Bearer ${sessionToken}`) .send(); } catch (error) { if (error.code === 'ERR_INVALID_CHAR' && error?.message.includes('"Authorization"')) { // token is wrong. silencing this error since it cannot be used for auth anyway. } else { throw error; } } }; this.createProject = async (config, sessionToken, project) => { let newProject; try { newProject = await agent .post(`${this.endpoint()}/api/projects`) .set(HEADER_CONTENT_TYPE, HEADER_CONTENT_TYPE_JSON) .set(HEADER_USER_AGENT, this.userAgent) .set('Authorization', `Bearer ${sessionToken}`) .send(projectSerializer.serialize(project)) .then(response => projectDeserializer.deserialize(response.body)); } catch (error) { if (error.message === 'Conflict') { const { projectId } = error.response.body.errors[0].meta; if (!projectId) { throw error; } newProject = await agent .get(`${this.endpoint()}/api/projects/${projectId}`) .set('Authorization', `Bearer ${sessionToken}`) .set(HEADER_USER_AGENT, this.userAgent) .send() .then(response => projectDeserializer.deserialize(response.body)); // NOTICE: Avoid to erase an existing project that has been already initialized. if (newProject.initializedAt) { throw error; } } else { throw error; } } const hostname = config.appHostname || 'http://localhost'; const port = config.appPort || 3310; const protocol = hostname.startsWith('http') ? '' : 'http://'; newProject.defaultEnvironment.apiEndpoint = `${protocol}${hostname}:${port}`; const updatedEnvironment = await agent .put(`${this.endpoint()}/api/environments/${newProject.defaultEnvironment.id}`) .set(HEADER_CONTENT_TYPE, HEADER_CONTENT_TYPE_JSON) .set(HEADER_USER_AGENT, this.userAgent) .set('Authorization', `Bearer ${sessionToken}`) .send(environmentSerializer.serialize(newProject.defaultEnvironment)) .then(response => environmentDeserializer.deserialize(response.body)); newProject.defaultEnvironment.secretKey = updatedEnvironment.secretKey; return newProject; }; } module.exports = Api; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3NlcnZpY2VzL2FwaS5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLG1CQUFtQixHQUFHLGNBQWMsQ0FBQztBQUMzQyxNQUFNLHdCQUF3QixHQUFHLGtCQUFrQixDQUFDO0FBQ3BELE1BQU0sb0JBQW9CLEdBQUcsZUFBZSxDQUFDO0FBQzdDLE1BQU0saUJBQWlCLEdBQUcsWUFBWSxDQUFDO0FBRXZDOzs7R0FHRztBQUNILFNBQVMsR0FBRyxDQUFDLEVBQ1gsR0FBRyxFQUNILEdBQUcsRUFDSCxVQUFVLEVBQUUsS0FBSyxFQUNqQiwwQkFBMEIsRUFDMUIsNEJBQTRCLEVBQzVCLHVCQUF1QixFQUN2QixxQkFBcUIsRUFDckIsbUJBQW1CLEVBQ25CLGlCQUFpQixHQUNsQjtJQUNDLElBQUksQ0FBQyxRQUFRLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLGlCQUFpQixDQUFDO0lBQzVDLElBQUksQ0FBQyxTQUFTLEdBQUcsY0FBYyxHQUFHLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDN0MsTUFBTSxPQUFPLEdBQUc7UUFDZCxDQUFDLG9CQUFvQixDQUFDLEVBQUUsWUFBWTtRQUNwQyxDQUFDLG1CQUFtQixDQUFDLEVBQUUsd0JBQXdCO1FBQy9DLENBQUMsaUJBQWlCLENBQUMsRUFBRSxJQUFJLENBQUMsU0FBUztLQUNwQyxDQUFDO0lBRUYsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxFQUFFLENBQ3JDLEtBQUs7U0FDRixJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLGVBQWUsQ0FBQztTQUN2QyxHQUFHLENBQUMsT0FBTyxDQUFDO1NBQ1osSUFBSSxDQUFDLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxDQUFDO1NBQ3pCLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxJQUFJ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