UNPKG

@cto.ai/ops

Version:

šŸ’» CTO.ai Ops - The CLI built for Teams šŸš€

99 lines (98 loc) • 4.44 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const tslib_1 = require("tslib"); const sdk_1 = require("@cto.ai/sdk"); const base_1 = tslib_1.__importDefault(require("../../base")); const utils_1 = require("../../utils"); const CustomErrors_1 = require("../../errors/CustomErrors"); const { white, reset } = sdk_1.ux.colors; class SecretsRegister extends base_1.default { constructor() { super(...arguments); this.validateRegisterInput = async (input) => { try { if (!input) { return `šŸ˜ž Sorry, the value cannot be empty`; } return true; } catch (err) { throw new CustomErrors_1.InvalidTeamNameFormat(err); } }; this.promptForSecretsProviderCredentials = async (team) => { const { url, token } = await sdk_1.ux.prompt([ { type: 'input', name: 'url', message: `\nšŸ” Register your secret storage to share secrets and passwords with team ${reset.blueBright(`${team.name}`)} \n${reset.grey('Enter your secret storage')} ${reset.blue('url')} ${reset.grey('and')} ${reset.blue('access token.')}\n${reset.grey(`Run ${utils_1.terminalText('ops team:switch')}`)} ${reset.grey('to change the team for')} ${reset.grey('the secret storage registration.')}\n${white('Link your secret storage to your team')} ${reset.green('→')}`, afterMessage: `${reset.green('āœ“')} URL `, validate: this.validateRegisterInput.bind(this), }, { type: 'password', name: 'token', message: `\nšŸ” Register secret storage access token ${reset.green('→')} \n${white('Enter access token:')} `, afterMessage: `${reset.green('āœ“')} TOKEN ${reset.grey('********')} \nšŸ™Œ Secrets registration complete!`, validate: this.validateRegisterInput.bind(this), }, ]); return { activeTeam: team, url, token }; }; this.registerSecretsProvider = async (inputs) => { try { await this.services.api.create(`/private/teams/${inputs.activeTeam.name}/secrets/register`, { token: inputs.token, url: inputs.url, }, { headers: { Authorization: this.accessToken, }, }); return inputs; } catch (err) { this.debug('%O', err); switch (err.error[0].code) { case 400: throw new CustomErrors_1.InvalidSecretVault(err); case 401: throw new CustomErrors_1.UserUnauthorized(err); case 403: throw new CustomErrors_1.InvalidSecretToken(err); case 404: throw new CustomErrors_1.NoTeamFound(inputs.activeTeam.name); default: throw new CustomErrors_1.RegisterSecretsProvider(err); } } }; this.sendAnalytics = (state) => async () => { const { team } = state.config; const { email, username } = state.config.user; this.services.analytics.track({ userId: email, teamId: team.id, cliEvent: 'Ops CLI Register Secrets Provider', event: 'Ops CLI Register Secrets Provider', properties: { email, username, }, }, this.accessToken); }; } async run() { try { await this.isLoggedIn(); const switchPipeline = utils_1.asyncPipe(this.promptForSecretsProviderCredentials, this.registerSecretsProvider, this.sendAnalytics(this.state)); await switchPipeline(this.state.config.team); } catch (err) { this.debug('%O', err); this.config.runHook('error', { err, accessToken: this.accessToken }); } } } exports.default = SecretsRegister; SecretsRegister.description = 'Register a secrets provider for a team';