"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.loginOrRegisterIfLoggedOut = loginOrRegisterIfLoggedOut; exports.login = login; exports.register = register; function _chalk() { const data = _interopRequireDefault(require("chalk")); _chalk = function () { return data; }; return data; } function _commander() { const data = _interopRequireDefault(require("commander")); _commander = function () { return data; }; return data; } function _xdl() { const data = require("@expo/xdl"); _xdl = function () { return data; }; return data; } function _CommandError() { const data = _interopRequireDefault(require("./CommandError")); _CommandError = function () { return data; }; return data; } function _prompt() { const data = _interopRequireDefault(require("./prompt")); _prompt = function () { return data; }; return data; } function _log() { const data = _interopRequireDefault(require("./log")); _log = function () { return data; }; return data; } function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } _xdl().UserManager.initialize(); async function loginOrRegisterIfLoggedOut() { let user = await _xdl().UserManager.getCurrentUserAsync(); if (user) { return user; } _log().default.warn('An Expo user account is required to proceed.'); if (_commander().default.nonInteractive) { throw new (_CommandError().default)('NOT_LOGGED_IN', `Not logged in. Use \`${_commander().default.name} login -u username -p password\` to log in.`); } const question = { type: 'list', name: 'action', message: 'How would you like to authenticate?', choices: [{ name: 'Make a new Expo account', value: 'register' }, { name: 'Log in with an existing Expo account', value: 'existingUser' }, { name: 'Cancel', value: 'cancel' }] }; const { action } = await (0, _prompt().default)(question); if (action === 'register') { return register(); } else if (action === 'existingUser') { return login({}); } else { throw new (_CommandError().default)('BAD_CHOICE', 'Not logged in.'); } } async function login(options) { const user = await _xdl().UserManager.getCurrentUserAsync(); const nonInteractive = options.parent && options.parent.nonInteractive; if (!nonInteractive) { if (user) { const question = { type: 'confirm', name: 'action', message: `You are already logged in as ${_chalk().default.green(user.username)}. Log in as new user?` }; const { action } = await (0, _prompt().default)(question); if (!action) { // If user chooses to stay logged in, return return user; } } return _usernamePasswordAuth(options.username, options.password); } else if (options.username && options.password) { return _usernamePasswordAuth(options.username, options.password); } else if (options.username && process.env.EXPO_CLI_PASSWORD) { return _usernamePasswordAuth(options.username, process.env.EXPO_CLI_PASSWORD); } else { throw new (_CommandError().default)('NON_INTERACTIVE', "Username and password not provided in non-interactive mode. Set the EXPO_CLI_PASSWORD environment variable if you don't want to pass in passwords through the command line."); } } async function _usernamePasswordAuth(username, password) { const questions = []; if (!username) { questions.push({ type: 'input', name: 'username', message: 'Username/Email Address:', validate(val) { if (val.trim() === '') { return false; } return true; } }); } if (!password) { questions.push({ type: 'password', name: 'password', message: 'Password:', validate(val) { if (val.trim() === '') { return false; } return true; } }); } const answers = await (0, _prompt().default)(questions); const data = { username: username || answers.username, password: password || answers.password }; let user = await _xdl().UserManager.loginAsync('user-pass', data); if (user) { console.log(`\nSuccess. You are now logged in as ${_chalk().default.green(user.username)}.`); return user; } else { throw new Error('Unexpected Error: No user returned from the API'); } } async function register() { console.log(` Thanks for signing up for Expo! Just a few questions: `); const questions = [{ type: 'input', name: 'email', message: 'E-mail:', filter: val => val.trim(), validate(val) { if (val.trim() === '') { return false; } return true; } }, { type: 'input', name: 'username', message: 'Username:', filter: val => val.trim(), validate(val) { if (val.trim() === '') { return false; } return true; } }, { type: 'password', name: 'password', message: 'Password:', filter: val => val.trim(), validate(val) { if (val.trim() === '') { return 'Please create a password'; } return true; } }, { type: 'password', name: 'passwordRepeat', message: 'Confirm Password:', validate(val, answers) { if (val.trim() === '') { return false; } if (!answers || !answers.password || val.trim() !== answers.password.trim()) { return `Passwords don't match!`; } return true; } }]; const answers = await (0, _prompt().default)(questions); const registeredUser = await _xdl().UserManager.registerAsync(answers); console.log('\nThanks for signing up!'); return registeredUser; } //# sourceMappingURL=__sourcemaps__/accounts.js.map