UNPKG

@amplitude/ampli

Version:

Amplitude CLI

57 lines (56 loc) 1.8 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const http = require("http"); const url_1 = require("url"); const stoppable = require("stoppable"); const _1 = require("."); const stdout_1 = require("../stdout"); const constants_1 = require("../constants"); class Server { constructor(port, zone) { this.port = port; this.zone = zone; this.handleRequest = this.handleRequest.bind(this); } get authSuccessUrl() { return `${constants_1.APP_SETTINGS.ampli(this.zone).webUrl}/cli/auth-success`; } get authErrorUrl() { return `${constants_1.APP_SETTINGS.ampli(this.zone).webUrl}/cli/auth-error`; } async handleRequest(req, res) { if (!req.url) { throw new Error(); } const { code, state } = url_1.parse(req.url, true).query; try { await _1.default.processAuthorizationCode(code, state, this.port); res.writeHead(302, { Location: this.authSuccessUrl, }); } catch (e) { res.writeHead(302, { Location: this.authErrorUrl, }); } finally { res.end(); } } async start() { this.server = stoppable(http.createServer(this.handleRequest)); this.server.on('error', err => { stdout_1.default.writeLine(`Sorry! Something went wrong during authentication: ${err.message}`); stdout_1.default.writeLine(`Please reach out to https://support.amplitude.com for help.`); }); this.server.listen(this.port, () => { }); } stop() { if (this.server) { this.server.stop(); this.server = undefined; } } } exports.default = Server;