"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