@amplitude/ampli
Version:
Amplitude CLI
57 lines (56 loc) • 1.8 kB
JavaScript
;
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;