@sprucelabs/spruce-cli
Version:
Command line interface for building Spruce skills.
104 lines • 4.11 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const schema_1 = require("@sprucelabs/schema");
const spruce_event_utils_1 = require("@sprucelabs/spruce-event-utils");
const SpruceError_1 = __importDefault(require("../../../errors/SpruceError"));
const action_utility_1 = __importDefault(require("../../../utilities/action.utility"));
const AbstractAction_1 = __importDefault(require("../../AbstractAction"));
const RegisterAction_1 = require("./RegisterAction");
const optionsSchema = (0, schema_1.buildSchema)({
id: 'loginSkillAction',
description: 'If you already registered your skill but lost your env or changed environments.',
fields: {
skillSlug: {
type: 'text',
label: 'Namespace',
},
},
});
class LoginAction extends AbstractAction_1.default {
optionsSchema = optionsSchema;
commandAliases = ['login.skill'];
invocationMessage = 'Logging in as skill... ⚡️';
async execute(options) {
const { skillSlug } = this.validateAndNormalizeOptions(options);
const person = this.Service('auth').getLoggedInPerson();
let loginResponse = {};
let skillResponse = {};
if (!person) {
this.ui.renderLine('You gotta login as a person before you can login as a skill.');
const phone = await this.ui.prompt({
type: 'phone',
label: 'Phone number',
isRequired: true,
});
loginResponse = await this.Action('person', 'login').execute({
phone,
});
}
const client = await this.connectToApi();
let [{ skills }] = await client.emitAndFlattenResponses('list-skills::v2020_12_25', {
payload: {
shouldOnlyShowMine: true,
},
});
if (skillSlug) {
const match = skills.find((s) => s.slug === skillSlug);
if (!match) {
return {
errors: [
new SpruceError_1.default({
code: 'SKILL_NOT_FOUND',
friendlyMessage: `I couldn't find a skill that you own with the slug: ${skillSlug}`,
}),
],
};
}
skills = [match];
}
if (skills.length === 0) {
const error = new SpruceError_1.default({ code: 'NO_SKILLS_REGISTERED' });
if (error) {
return {
errors: [error],
};
}
}
else if (skills.length > 1) {
const selectedSkillId = await this.ui.prompt({
type: 'select',
label: 'Which skill are we logging in as?',
isRequired: true,
options: {
choices: skills.map((s) => ({
label: s.name,
value: s.id,
})),
},
});
skills = skills.filter((s) => s.id === selectedSkillId);
}
if (skills.length === 1) {
const currentSkillResults = await client.emit('get-skill::v2020_12_25', {
target: {
skillId: skills[0].id,
},
payload: {
shouldIncludeApiKey: true,
},
});
const { skill } = spruce_event_utils_1.eventResponseUtil.getFirstResponseOrThrow(currentSkillResults);
this.Service('auth').updateCurrentSkill(skill);
skillResponse.summaryLines = (0, RegisterAction_1.generateSkillSummaryLines)(skill);
skillResponse.meta = {
skill,
};
}
return action_utility_1.default.mergeActionResults(loginResponse, skillResponse);
}
}
exports.default = LoginAction;
//# sourceMappingURL=LoginAction.js.map