UNPKG

@sentry/wizard

Version:

Sentry wizard helping you to configure your project

76 lines (63 loc) 2.23 kB
import type { Answers } from 'inquirer'; import { URL } from 'url'; import { mapIntegrationToPlatform } from '../Constants'; import { BottomBar } from '../Helper/BottomBar'; import { dim, green, l, nl, red } from '../Helper/Logging'; import { getCurrentIntegration } from '../Helper/Wizard'; import { BaseStep } from './BaseStep'; const opn = require('opn'); const r2 = require('r2'); export class OpenSentry extends BaseStep { public async emit(answers: Answers): Promise<Answers> { if (!(await getCurrentIntegration(answers).shouldEmit(answers))) { dim('Skipping connection to Sentry due files already patched'); return {}; } if (this._argv.skipConnect) { dim('Skipping connection to Sentry'); return {}; } const baseUrl = this._argv.url; BottomBar.show('Loading wizard...'); this.debug(`Loading wizard for ${baseUrl}`); try { const data = await r2.get(`${baseUrl}api/0/wizard/`).json; BottomBar.hide(); const urlObj = new URL(`${baseUrl}account/settings/wizard/${data.hash}/`); if (this._argv.signup) { urlObj.searchParams.set('signup', '1'); // integration maps to platform in the wizard if (this._argv.integration) { const platform = mapIntegrationToPlatform(this._argv.integration); if (platform) { urlObj.searchParams.set('project_platform', platform); } } if (this._argv.promoCode) { urlObj.searchParams.set('code', this._argv.promoCode); } } const urlToOpen = urlObj.toString(); opn(urlToOpen).catch(() => { // opn throws in environments that don't have a browser (e.g. remote shells) so we just noop here }); nl(); l('Please open'); green(urlToOpen); l("in your browser (if it's not open already)"); nl(); return { hash: data.hash }; } catch (e) { this._argv.skipConnect = true; BottomBar.hide(); nl(); red( `Wizard couldn't connect to ${baseUrl}\nmake sure the url is correct`, ); l( 'But no worries, we fall back to asking you stuff instead, so here we go:', ); return {}; } } }