xref: /expo/packages/@expo/cli/src/login/index.ts (revision 4bf00a55)
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