UNPKG

@mason-api/cli

Version:

CLI assistant for Mason builder

117 lines (106 loc) 3.22 kB
import readline from 'readline'; import fetch from 'node-fetch'; import colors from 'colors/safe'; import _ from 'lodash'; export async function prompt(text) { return new Promise((resolve) => { const rl = readline.createInterface({ input: process.stdin, output: process.stdout, }); rl.question(colors.gray(text), (value) => { resolve(value); rl.close(); }); }); } export async function promptChoice(text, keyName = 'choice', choices, blankChoice, multiple) { let i = 0; const list = {}; console.log(_.join(_.map(choices, (value, key) => { i += 1; list[i] = key; return `${colors.yellow(i)}) ${value}`; }), '\n')); if (blankChoice) { console.log(colors.gray(colors.italic(blankChoice))); } while (true) { const input = _.toLower(await prompt(text, text)); if (multiple) { return _.compact(_.split(_.replace(input, /\s*/g, ''), ',').map(num => list[parseInt(num)])); } const choice = list[parseInt(input)] || (choices[input] && input); if (!input && blankChoice) { return; } if (!_.isNil(choice)) { return choice; } console.log(`Please type in number or ${keyName}: e.g. ${_.keys(choices)[0]}\n`); } } export async function promptPassword(text) { return new Promise((resolve) => { const rl = readline.createInterface({ input: process.stdin, output: process.stdout, }); rl.question(colors.gray(text), (password) => { console.log(''); console.log(''); resolve(password); rl.close(); }); rl._writeToOutput = function _writeToOutput(stringToWrite) { rl.output.write('*'); }; }); } const MASON_API_HOST = process.env.MASON_API_HOST || process.env.REACT_APP_MASON_API_HOST || 'https://api.trymason.com'; export async function sendLoginRequest(email, password) { const response = await fetch(`${MASON_API_HOST}/users/login`, { body: JSON.stringify({ email, password }), headers: { 'Content-Type': 'application/json', }, method: 'POST', }); if (response.status !== 200) { throw new Error('Cant find'); } return response.json(); } export async function fetchProject(apiKey, projectId, verbose) { const url = `${MASON_API_HOST}/serve?apiKey=${encodeURIComponent(apiKey)}&pIds=${projectId}&true&libraryVersion=3.2.4`; if (verbose) { console.log(` ${colors.gray(url)}`); } const response = await fetch(url); if (response.status !== 200) { throw new Error('Cant find'); } return response.json(); } export async function fetchProjects(idToken, verbose) { const url = `${MASON_API_HOST}/projects?idToken=${idToken}`; if (verbose) { console.log(` ${colors.gray(url)}`); } const response = await fetch(url); if (response.status !== 200) { throw new Error('Cant find'); } return (await response.json()).projects; } export async function fetchDatasource(datasource, verbose) { const url = `${MASON_API_HOST}/projects?idToken=${datasource.url}`; if (verbose) { console.log(` ${colors.gray(url)}`); } const response = await fetch(url); if (response.status !== 200) { throw new Error('Cant find'); } return response.json(); }