UNPKG

forest-cli

Version:

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

100 lines 7.58 kB
const agent = require('superagent'); const Context = require('@forestadmin/context'); const JobStateChecker = require('./job-state-checker'); /** * Read access to a project's teams. * Future `forest teams:*` commands (PRD-528/529) should extend this manager * with write operations rather than re-implementing the HTTP calls. * @param {{ projectId: number | string }} config */ function TeamManager(config) { const { assertPresent, authenticator, env } = Context.inject(); assertPresent({ authenticator, env }); this.listForProject = async () => { const authToken = authenticator.getAuthToken(); const response = await agent .get(`${env.FOREST_SERVER_URL}/api/projects/${config.projectId}/teams`) .set('Authorization', `Bearer ${authToken}`) .set('forest-project-id', config.projectId) .send(); return (response.body.data || []).map(team => ({ id: team.id, name: team.attributes.name, })); }; /** * Create a new team in the project identified by `config.projectId`. * @param {string} name * @returns {Promise<{ id: string, name: string }>} */ this.createTeam = async (name) => { const authToken = authenticator.getAuthToken(); const response = await agent .post(`${env.FOREST_SERVER_URL}/api/teams`) .set('Authorization', `Bearer ${authToken}`) .set('forest-project-id', config.projectId) .send({ data: { type: 'teams', attributes: { name }, relationships: { project: { data: { id: String(config.projectId), type: 'projects' } }, }, }, }); const { data } = response.body; if (!data || !data.attributes) { throw new Error('Unexpected response when creating team: missing data.attributes.'); } return { id: data.id, name: data.attributes.name, }; }; /** * Delete a team by its id. * @param {string|number} teamId * @returns {Promise<void>} */ this.deleteTeam = async (teamId) => { const authToken = authenticator.getAuthToken(); await agent .delete(`${env.FOREST_SERVER_URL}/api/teams/${teamId}`) .set('Authorization', `Bearer ${authToken}`) .set('forest-project-id', config.projectId) .send(); }; /** * Copy the whole layout of one team onto another, within the same project. * Asynchronous server-side: posts a deployment request, then polls the job * until completion. * @param {string|number} fromTeamId * @param {string|number} toTeamId * @param {(code: number) => void} oclifExit * @returns {Promise<boolean>} true when the job completes, false on failure */ this.copyLayout = async (fromTeamId, toTeamId, oclifExit) => { const authToken = authenticator.getAuthToken(); const jobStateChecker = new JobStateChecker('Copying layout', oclifExit); const response = await agent .post(`${env.FOREST_SERVER_URL}/api/deployment-requests`) .set('Authorization', `Bearer ${authToken}`) .set('forest-project-id', config.projectId) .send({ data: { type: 'deployment-requests', attributes: { type: 'team', from: Number(fromTeamId), to: Number(toTeamId), }, }, }); const jobId = response.body?.meta?.job_id; if (!jobId) return false; return jobStateChecker.check(jobId); }; } module.exports = TeamManager; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVhbS1tYW5hZ2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3NlcnZpY2VzL3RlYW0tbWFuYWdlci5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLEtBQUssR0FBRyxPQUFPLENBQUMsWUFBWSxDQUFDLENBQUM7QUFDcEMsTUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFDLHNCQUFzQixDQUFDLENBQUM7QUFFaEQsTUFBTSxlQUFlLEdBQUcsT0FBTyxDQUFDLHFCQUFxQixDQUFDLENBQUM7QUFFdkQ7Ozs7O0dBS0c7QUFDSCxTQUFTLFdBQVcsQ0FBQyxNQUFNO0lBQ3pCLE1BQU0sRUFBRSxhQUFhLEVBQUUsYUFBYSxFQUFFLEdBQUcsRUFBRSxHQUFHLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQztJQUMvRCxhQUFhLENBQUMsRUFBRSxhQUFhLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztJQUV0QyxJQUFJLENBQUMsY0FBYyxHQUFHLEtBQUssSUFBSSxFQUFFO1FBQy9CLE1BQU0sU0FBUyxHQUFHLGFBQWEsQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUUvQyxNQUFNLFFBQVEsR0FBRyxNQUFNLEtBQUs7YUFDekIsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDLGlCQUFpQixpQkFBaUIsTUFBTSxDQUFDLFNBQVMsUUFBUSxDQUFDO2FBQ3RFLEdBQUcsQ0FBQyxlQUFlLEVBQUUsVUFBVSxTQUFTLEVBQUUsQ0FBQzthQUMzQyxHQUFHLENBQUMsbUJBQW1CLEVBQUUsTUFBTSxDQUFDLFNBQVMsQ0FBQzthQUMxQyxJQUFJLEVBQUUsQ0FBQztRQUVWLE9BQU8sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQzdDLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRTtZQUNYLElBQUksRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUk7U0FDM0IsQ0FBQyxDQUFDLENBQUM7SUFDTixDQUFDLENBQUM7SUFFRjs7OztPQUlHO0lBQ0gsSUFBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLEVBQUMsSUFBSSxFQUFDLEVBQUU7UUFDN0IsTUFBTSxTQUFTLEdBQUcsYUFBYSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBRS9DLE1BQU0sUUFBUSxHQUFHLE1BQU0sS0FBSzthQUN6QixJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsaUJBQWlCLFlBQVksQ0FBQzthQUMxQyxHQUFHLENBQUMsZUFBZSxFQUFFLFVBQVUsU0FBUyxFQUFFLENBQUM7YUFDM0MsR0FBRyxDQUFDLG1CQUFtQixFQUFFLE1BQU0sQ0FBQyxTQUFTLENBQUM7YUFDMUMsSUFBSSxDQUFDO1lBQ0osSUFBSSxFQUFFO2dCQUNKLElBQUksRUFBRSxPQUFPO2dCQUNiLFVBQVUsRUFBRSxFQUFFLElBQUksRUFBRTtnQkFDcEIsYUFBYSxFQUFFO29CQUNiLE9BQU8sRUFBRSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsRUFBRTtpQkFDdEU7YUFDRjtTQUNGLENBQUMsQ0FBQztRQUVMLE1BQU0sRUFBRSxJQUFJLEVBQUUsR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDO1FBQy9CLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFO1lBQzdCLE1BQU0sSUFBSSxLQUFLLENBQUMsa0VBQWtFLENBQUMsQ0FBQztTQUNyRjtRQUNELE9BQU87WUFDTCxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUU7WUFDWCxJQUFJLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJO1NBQzNCLENBQUM7SUFDSixDQUFDLENBQUM7SUFFRjs7OztPQUlHO0lBQ0gsSUFBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLEVBQUMsTUFBTSxFQUFDLEVBQUU7UUFDL0IsTUFBTSxTQUFTLEdBQUcsYUFBYSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBRS9DLE1BQU0sS0FBSzthQUNSLE1BQU0sQ0FBQyxHQUFHLEdBQUcsQ0FBQyxpQkFBaUIsY0FBYyxNQUFNLEVBQUUsQ0FBQzthQUN0RCxHQUFHLENBQUMsZUFBZSxFQUFFLFVBQVUsU0FBUyxFQUFFLENBQUM7YUFDM0MsR0FBRyxDQUFDLG1CQUFtQixFQUFFLE1BQU0sQ0FBQyxTQUFTLENBQUM7YUFDMUMsSUFBSSxFQUFFLENBQUM7SUFDWixDQUFDLENBQUM7SUFFRjs7Ozs7Ozs7T0FRRztJQUNILElBQUksQ0FBQyxVQUFVLEdBQUcsS0FBSyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLEVBQUU7UUFDMUQsTUFBTSxTQUFTLEdBQUcsYUFBYSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQy9DLE1BQU0sZUFBZSxHQUFHLElBQUksZUFBZSxDQUFDLGdCQUFnQixFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBRXpFLE1BQU0sUUFBUSxHQUFHLE1BQU0sS0FBSzthQUN6QixJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsaUJBQWlCLDBCQUEwQixDQUFDO2FBQ3hELEdBQUcsQ0FBQyxlQUFlLEVBQUUsVUFBVSxTQUFTLEVBQUUsQ0FBQzthQUMzQyxHQUFHLENBQUMsbUJBQW1CLEVBQUUsTUFBTSxDQUFDLFNBQVMsQ0FBQzthQUMxQyxJQUFJLENBQUM7WUFDSixJQUFJLEVBQUU7Z0JBQ0osSUFBSSxFQUFFLHFCQUFxQjtnQkFDM0IsVUFBVSxFQUFFO29CQUNWLElBQUksRUFBRSxNQUFNO29CQUNaLElBQUksRUFBRSxNQUFNLENBQUMsVUFBVSxDQUFDO29CQUN4QixFQUFFLEVBQUUsTUFBTSxDQUFDLFFBQVEsQ0FBQztpQkFDckI7YUFDRjtTQUNGLENBQUMsQ0FBQztRQUVMLE1BQU0sS0FBSyxHQUFHLFFBQVEsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLE1BQU0sQ0FBQztRQUMxQyxJQUFJLENBQUMsS0FBSztZQUFFLE9BQU8sS0FBSyxDQUFDO1FBRXpCLE9BQU8sZUFBZSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN0QyxDQUFDLENBQUM7QUFDSixDQUFDO0FBRUQsTUFBTSxDQUFDLE9BQU8sR0FBRyxXQUFXLENBQUMifQ==