1e32ccf9fSEvan Baconimport { env } from '../utils/env';
28d307f52SEvan Baconimport { CommandError } from '../utils/errors';
329128565SEvan Baconimport { isInteractive } from '../utils/interactive';
48d307f52SEvan Baconimport { learnMore } from '../utils/link';
5*065a44f7SCedric van Puttenimport { openBrowserAsync } from '../utils/open';
68d307f52SEvan Baconimport { ora } from '../utils/ora';
78d307f52SEvan Bacon
88d307f52SEvan Baconexport async function registerAsync() {
929128565SEvan Bacon  if (!isInteractive()) {
108d307f52SEvan Bacon    throw new CommandError(
118d307f52SEvan Bacon      'NON_INTERACTIVE',
128d307f52SEvan Bacon      `Cannot register an account in CI. Use the EXPO_TOKEN environment variable to authenticate in CI (${learnMore(
138d307f52SEvan Bacon        'https://docs.expo.dev/accounts/programmatic-access/'
148d307f52SEvan Bacon      )})`
158d307f52SEvan Bacon    );
16e32ccf9fSEvan Bacon  } else if (env.EXPO_OFFLINE) {
17e32ccf9fSEvan Bacon    throw new CommandError('OFFLINE', `Cannot register an account in offline-mode`);
188d307f52SEvan Bacon  }
198d307f52SEvan Bacon
208d307f52SEvan Bacon  const registrationUrl = `https://expo.dev/signup`;
218d307f52SEvan Bacon  const failedMessage = `Unable to open a web browser. Register an account at: ${registrationUrl}`;
228d307f52SEvan Bacon  const spinner = ora(`Opening ${registrationUrl}`).start();
238d307f52SEvan Bacon  try {
248d307f52SEvan Bacon    const opened = await openBrowserAsync(registrationUrl);
258d307f52SEvan Bacon
268d307f52SEvan Bacon    if (opened) {
278d307f52SEvan Bacon      spinner.succeed(`Opened ${registrationUrl}`);
288d307f52SEvan Bacon    } else {
298d307f52SEvan Bacon      spinner.fail(failedMessage);
308d307f52SEvan Bacon    }
318d307f52SEvan Bacon  } catch (error) {
328d307f52SEvan Bacon    spinner.fail(failedMessage);
338d307f52SEvan Bacon    throw error;
348d307f52SEvan Bacon  }
358d307f52SEvan Bacon}
36