1#!/usr/bin/env node 2import { Command } from '../../bin/cli'; 3import { assertArgs, printHelp } from '../utils/args'; 4import { logCmdError } from '../utils/errors'; 5 6export const expoLogin: Command = async (argv) => { 7 const args = assertArgs( 8 { 9 // Types 10 '--help': Boolean, 11 '--username': String, 12 '--password': String, 13 '--otp': String, 14 '--sso': Boolean, 15 // Aliases 16 '-h': '--help', 17 '-u': '--username', 18 '-p': '--password', 19 '-s': '--sso', 20 }, 21 argv 22 ); 23 24 if (args['--help']) { 25 printHelp( 26 `Log in to an Expo account`, 27 `npx expo login`, 28 [ 29 `-u, --username <string> Username`, 30 `-p, --password <string> Password`, 31 `--otp <string> One-time password from your 2FA device`, 32 // hiding from help until SSO is public 33 // `-s, --sso Log in with SSO`, 34 `-h, --help Usage info`, 35 ].join('\n') 36 ); 37 } 38 39 const { showLoginPromptAsync } = await import('../api/user/actions'); 40 return showLoginPromptAsync({ 41 // Parsed options 42 username: args['--username'], 43 password: args['--password'], 44 otp: args['--otp'], 45 sso: !!args['--sso'], 46 }).catch(logCmdError); 47}; 48