UNPKG

2.31 kBJavaScriptView Raw
1"use strict";
2Object.defineProperty(exports, "__esModule", { value: true });
3const cli_ux_1 = require("cli-ux");
4const axios_1 = require("axios");
5const login_1 = require("../actions/login");
6const constants_1 = require("./constants");
7class Client {
8 constructor(command) {
9 this.command = command;
10 this.instance = axios_1.default.create({
11 baseURL: command.constants.DeveloperPortalAPIUrl
12 });
13 this.instance.interceptors.response.use(r => r, error => {
14 if (error.response && error.response.status) {
15 command.error('Unauthorized action, please run bearer login first');
16 }
17 return Promise.reject(error);
18 });
19 }
20 async request(data) {
21 await withFreshToken(this.command);
22 const token = await this.command.bearerConfig.getToken();
23 return await this.instance.post('', data, {
24 headers: {
25 Authorization: `Bearer ${token.access_token}`
26 }
27 });
28 }
29}
30exports.Client = Client;
31exports.devPortalClient = (command) => {
32 return new Client(command);
33};
34async function withFreshToken(command) {
35 const { expires_at, refresh_token } = (await command.bearerConfig.getToken()) || {
36 expires_at: null,
37 refresh_token: null
38 };
39 if (expires_at && refresh_token) {
40 try {
41 if (expires_at < Date.now()) {
42 cli_ux_1.default.action.start('Refreshing token');
43 await refreshMyToken(command, refresh_token);
44 cli_ux_1.default.action.stop();
45 }
46 }
47 catch (error) {
48 cli_ux_1.default.action.stop(`Failed`);
49 command.error(error.message);
50 }
51 }
52 else {
53 await login_1.promptToLogin(command);
54 }
55}
56exports.withFreshToken = withFreshToken;
57// tslint:disable-next-line variable-name
58async function refreshMyToken(command, refresh_token) {
59 // TODO: rework refresh mechanism
60 const response = await axios_1.default.post(`${command.constants.LoginDomain}/oauth/token`, {
61 refresh_token,
62 grant_type: 'refresh_token',
63 client_id: constants_1.LOGIN_CLIENT_ID
64 });
65 await command.bearerConfig.storeToken(Object.assign({}, response.data, { refresh_token }));
66 return true;
67}