UNPKG

forest-cli

Version:

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

123 lines 11.1 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const core_1 = require("@oclif/core"); const abstract_authenticated_command_1 = __importDefault(require("../../abstract-authenticated-command")); const invitation_manager_1 = __importDefault(require("../../services/invitation-manager")); const role_manager_1 = __importDefault(require("../../services/role-manager")); const team_manager_1 = __importDefault(require("../../services/team-manager")); const with_current_project_1 = __importDefault(require("../../services/with-current-project")); const PERMISSION_LEVELS = ['admin', 'editor', 'user', 'developer', 'manager']; class UsersInviteCommand extends abstract_authenticated_command_1.default { constructor(argv, config, plan) { super(argv, config, plan); const { assertPresent, env, inquirer } = this.context; assertPresent({ env, inquirer }); this.env = env; this.inquirer = inquirer; } // Resolve a team/role by name (headless when passed as a flag), with the // same UX as project selection: auto-pick when there is only one, prompt // when several and none provided, clear error listing the valid names. async resolveByName(entities, providedName, label, emptyHint) { if (providedName) { const match = entities.find(entity => entity.name === providedName); if (match) return match; const available = entities.map(entity => entity.name).join(', ') || '(none)'; this.logger.error(`${label} "${providedName}" not found in this project. Available: ${available}.`); return this.exit(1); } if (!entities.length) { this.logger.error(`No ${label} found in this project.${emptyHint ? ` ${emptyHint}` : ''}`); return this.exit(1); } if (entities.length === 1) return entities[0]; const { choice } = await this.inquirer.prompt([ { name: 'choice', message: `Select a ${label}:`, type: 'list', choices: entities.map(entity => ({ name: entity.name, value: entity.id })), }, ]); return entities.find(entity => entity.id === choice); } async runAuthenticated() { const { flags } = await this.parse(UsersInviteCommand); const config = await (0, with_current_project_1.default)({ ...this.env, projectId: flags.projectId }); try { const teams = await new team_manager_1.default(config).listForProject(); const team = await this.resolveByName(teams, flags.team, 'team'); const roles = await new role_manager_1.default(config).listForProject(); const role = await this.resolveByName(roles, flags.role, 'role', "Deploy a production environment first (it creates the project's first role), or create one via the API."); const invitations = flags.email.map((email) => ({ email, teamId: team.id, roleId: role.id, permissionLevel: flags['permission-level'], })); const result = await new invitation_manager_1.default(config).inviteUsers(invitations); if (flags.format === 'json') { this.logger.info(JSON.stringify(result, null, 2)); return; } this.logger.info(`Invited ${invitations.length} user(s) to team "${team.name}" (${flags['permission-level']}) on project ${config.projectId}: ${flags.email.join(', ')}.`); } catch (error) { const { response, status } = error; if (response && status !== 403 && response.text) { let detail; try { detail = JSON.parse(response.text)?.errors?.[0]?.detail; } catch { // Non-JSON error body: fall through and rethrow the original error. } if (detail) { this.logger.error(detail); this.exit(1); } } throw error; } } } exports.default = UsersInviteCommand; UsersInviteCommand.description = 'Invite users to a project.'; UsersInviteCommand.flags = { email: core_1.Flags.string({ char: 'e', description: 'Email of the user to invite (repeat the flag to invite several users).', required: true, multiple: true, }), team: core_1.Flags.string({ char: 't', description: 'Team name to add the invited users to (prompted if omitted and several exist).', }), role: core_1.Flags.string({ char: 'r', description: 'Role name to assign (prompted if omitted and several exist).', }), 'permission-level': core_1.Flags.string({ char: 'l', description: 'Permission level of the invited users.', options: PERMISSION_LEVELS, required: true, }), projectId: core_1.Flags.integer({ char: 'p', description: 'Forest project ID.', }), format: core_1.Flags.string({ char: 'f', description: 'Output format.', options: ['table', 'json'], default: 'table', }), }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW52aXRlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NvbW1hbmRzL3VzZXJzL2ludml0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUVBLHNDQUFvQztBQUVwQywwR0FBZ0Y7QUFDaEYsMkZBQWtFO0FBQ2xFLCtFQUFzRDtBQUN0RCwrRUFBc0Q7QUFDdEQsK0ZBQXFFO0FBRXJFLE1BQU0saUJBQWlCLEdBQUcsQ0FBQyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxXQUFXLEVBQUUsU0FBUyxDQUFDLENBQUM7QUFJOUUsTUFBcUIsa0JBQW1CLFNBQVEsd0NBQTRCO0lBd0MxRSxZQUFZLElBQWMsRUFBRSxNQUFjLEVBQUUsSUFBSztRQUMvQyxLQUFLLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztRQUMxQixNQUFNLEVBQUUsYUFBYSxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDO1FBQ3RELGFBQWEsQ0FBQyxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDO1FBQ2pDLElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO1FBQ2YsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7SUFDM0IsQ0FBQztJQUVELHlFQUF5RTtJQUN6RSx5RUFBeUU7SUFDekUsdUVBQXVFO0lBQy9ELEtBQUssQ0FBQyxhQUFhLENBQ3pCLFFBQXVCLEVBQ3ZCLFlBQWdDLEVBQ2hDLEtBQWEsRUFDYixTQUFrQjtRQUVsQixJQUFJLFlBQVksRUFBRTtZQUNoQixNQUFNLEtBQUssR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksS0FBSyxZQUFZLENBQUMsQ0FBQztZQUNwRSxJQUFJLEtBQUs7Z0JBQUUsT0FBTyxLQUFLLENBQUM7WUFDeEIsTUFBTSxTQUFTLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksUUFBUSxDQUFDO1lBQzdFLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUNmLEdBQUcsS0FBSyxLQUFLLFlBQVksMkNBQTJDLFNBQVMsR0FBRyxDQUNqRixDQUFDO1lBQ0YsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ3JCO1FBRUQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUU7WUFDcEIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxLQUFLLDBCQUEwQixTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksU0FBUyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDM0YsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ3JCO1FBQ0QsSUFBSSxRQUFRLENBQUMsTUFBTSxLQUFLLENBQUM7WUFBRSxPQUFPLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUU5QyxNQUFNLEVBQUUsTUFBTSxFQUFFLEdBQUcsTUFBTSxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQztZQUM1QztnQkFDRSxJQUFJLEVBQUUsUUFBUTtnQkFDZCxPQUFPLEVBQUUsWUFBWSxLQUFLLEdBQUc7Z0JBQzdCLElBQUksRUFBRSxNQUFNO2dCQUNaLE9BQU8sRUFBRSxRQUFRLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxNQUFNLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQzthQUMzRTtTQUNGLENBQUMsQ0FBQztRQUNILE9BQU8sUUFBUSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEtBQUssTUFBTSxDQUFnQixDQUFDO0lBQ3RFLENBQUM7SUFFRCxLQUFLLENBQUMsZ0JBQWdCO1FBQ3BCLE1BQU0sRUFBRSxLQUFLLEVBQUUsR0FBRyxNQUFNLElBQUksQ0FBQyxLQUFLLENBQUMsa0JBQWtCLENBQUMsQ0FBQztRQUN2RCxNQUFNLE1BQU0sR0FBRyxNQUFNLElBQUEsOEJBQWtCLEVBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsU0FBUyxFQUFFLEtBQUssQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDO1FBRXJGLElBQUk7WUFDRixNQUFNLEtBQUssR0FBRyxNQUFNLElBQUksc0JBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUM3RCxNQUFNLElBQUksR0FBRyxNQUFNLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7WUFFakUsTUFBTSxLQUFLLEdBQUcsTUFBTSxJQUFJLHNCQUFXLENBQUMsTUFBTSxDQUFDLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDN0QsTUFBTSxJQUFJLEdBQUcsTUFBTSxJQUFJLENBQUMsYUFBYSxDQUNuQyxLQUFLLEVBQ0wsS0FBSyxDQUFDLElBQUksRUFDVixNQUFNLEVBQ04seUdBQXlHLENBQzFHLENBQUM7WUFFRixNQUFNLFdBQVcsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQWEsRUFBRSxFQUFFLENBQUMsQ0FBQztnQkFDdEQsS0FBSztnQkFDTCxNQUFNLEVBQUUsSUFBSSxDQUFDLEVBQUU7Z0JBQ2YsTUFBTSxFQUFFLElBQUksQ0FBQyxFQUFFO2dCQUNmLGVBQWUsRUFBRSxLQUFLLENBQUMsa0JBQWtCLENBQUM7YUFDM0MsQ0FBQyxDQUFDLENBQUM7WUFFSixNQUFNLE1BQU0sR0FBRyxNQUFNLElBQUksNEJBQWlCLENBQUMsTUFBTSxDQUFDLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBRTVFLElBQUksS0FBSyxDQUFDLE1BQU0sS0FBSyxNQUFNLEVBQUU7Z0JBQzNCLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUNsRCxPQUFPO2FBQ1I7WUFFRCxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FDZCxXQUFXLFdBQVcsQ0FBQyxNQUFNLHFCQUFxQixJQUFJLENBQUMsSUFBSSxNQUN6RCxLQUFLLENBQUMsa0JBQWtCLENBQzFCLGdCQUFnQixNQUFNLENBQUMsU0FBUyxLQUFLLEtBQUssQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQy9ELENBQUM7U0FDSDtRQUFDLE9BQU8sS0FBSyxFQUFFO1lBQ2QsTUFBTSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsR0FBRyxLQUc1QixDQUFDO1lBQ0YsSUFBSSxRQUFRLElBQUksTUFBTSxLQUFLLEdBQUcsSUFBSSxRQUFRLENBQUMsSUFBSSxFQUFFO2dCQUMvQyxJQUFJLE1BQU0sQ0FBQztnQkFDWCxJQUFJO29CQUNGLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUM7aUJBQ3pEO2dCQUFDLE1BQU07b0JBQ04sb0VBQW9FO2lCQUNyRTtnQkFDRCxJQUFJLE1BQU0sRUFBRTtvQkFDVixJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztvQkFDMUIsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztpQkFDZDthQUNGO1lBQ0QsTUFBTSxLQUFLLENBQUM7U0FDYjtJQUNILENBQUM7O0FBMUlILHFDQTJJQztBQXRJaUIsOEJBQVcsR0FBRyw0QkFBNEIsQ0FBQztBQUUzQyx3QkFBSyxHQUFHO0lBQ3RCLEtBQUssRUFBRSxZQUFLLENBQUMsTUFBTSxDQUFDO1FBQ2xCLElBQUksRUFBRSxHQUFHO1FBQ1QsV0FBVyxFQUFFLHdFQUF3RTtRQUNyRixRQUFRLEVBQUUsSUFBSTtRQUNkLFFBQVEsRUFBRSxJQUFJO0tBQ2YsQ0FBQztJQUNGLElBQUksRUFBRSxZQUFLLENBQUMsTUFBTSxDQUFDO1FBQ2pCLElBQUksRUFBRSxHQUFHO1FBQ1QsV0FBVyxFQUFFLGdGQUFnRjtLQUM5RixDQUFDO0lBQ0YsSUFBSSxFQUFFLFlBQUssQ0FBQyxNQUFNLENBQUM7UUFDakIsSUFBSSxFQUFFLEdBQUc7UUFDVCxXQUFXLEVBQUUsOERBQThEO0tBQzVFLENBQUM7SUFDRixrQkFBa0IsRUFBRSxZQUFLLENBQUMsTUFBTSxDQUFDO1FBQy9CLElBQUksRUFBRSxHQUFHO1FBQ1QsV0FBVyxFQUFFLHdDQUF3QztRQUNyRCxPQUFPLEVBQUUsaUJBQWlCO1FBQzFCLFFBQVEsRUFBRSxJQUFJO0tBQ2YsQ0FBQztJQUNGLFNBQVMsRUFBRSxZQUFLLENBQUMsT0FBTyxDQUFDO1FBQ3ZCLElBQUksRUFBRSxHQUFHO1FBQ1QsV0FBVyxFQUFFLG9CQUFvQjtLQUNsQyxDQUFDO0lBQ0YsTUFBTSxFQUFFLFlBQUssQ0FBQyxNQUFNLENBQUM7UUFDbkIsSUFBSSxFQUFFLEdBQUc7UUFDVCxXQUFXLEVBQUUsZ0JBQWdCO1FBQzdCLE9BQU8sRUFBRSxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUM7UUFDMUIsT0FBTyxFQUFFLE9BQU87S0FDakIsQ0FBQztDQUNILENBQUMifQ==