appcenter-cli
Version:
Command line tool for Visual Studio App Center
107 lines (106 loc) • 5.07 kB
JavaScript
;
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
Object.defineProperty(exports, "__esModule", { value: true });
// Helper function to create client objects
const debug = require("debug")("appcenter-cli:util:apis:create-client");
const util_1 = require("util");
const appCenterClient_1 = require("./generated/appCenterClient");
const appcenter_client_credentials_1 = require("./appcenter-client-credentials");
const user_agent_filter_1 = require("./user-agent-filter");
const telemetry_filter_1 = require("./telemetry-filter");
const BasicAuthenticationCredentials = require("ms-rest").BasicAuthenticationCredentials;
const createLogger = require("ms-rest").LogFilter.create;
const interaction_1 = require("../interaction");
const command_result_1 = require("../../util/commandline/command-result");
function createAppCenterClient(command, telemetryEnabled) {
function createClientOptions() {
debug(`Creating client options, isDebug = ${interaction_1.isDebug()}`);
const filters = [user_agent_filter_1.userAgentFilter, telemetry_filter_1.telemetryFilter(command.join(" "), telemetryEnabled)];
return {
filters: interaction_1.isDebug() ? [createLogger()].concat(filters) : filters
};
}
return {
fromUserNameAndPassword(userName, password, endpoint) {
debug(`Creating client from user name and password for endpoint ${endpoint}`);
return new appCenterClient_1.AppCenterClient(new BasicAuthenticationCredentials(userName, password), endpoint, createClientOptions());
},
fromToken(token, endpoint) {
debug(`Creating client from token for endpoint ${endpoint}`);
let tokenFunc;
if (typeof token === "string") {
debug("Creating from token as string");
tokenFunc = () => Promise.resolve(token);
}
else if (typeof token === "object") {
debug("Creating from token as promise");
tokenFunc = () => token;
}
else {
debug("Creating from token as function");
tokenFunc = token;
}
debug(`Passing token ${tokenFunc} of type ${typeof tokenFunc}`);
return new appCenterClient_1.AppCenterClient(new appcenter_client_credentials_1.AppCenterClientCredentials(tokenFunc), endpoint, createClientOptions());
},
fromProfile(user) {
if (!user) {
debug(`No current user, not creating client`);
return null;
}
debug(`Creating client from user for user ${util_1.inspect(user)}`);
return new appCenterClient_1.AppCenterClient(new appcenter_client_credentials_1.AppCenterClientCredentials(() => user.accessToken), user.endpoint, createClientOptions());
}
};
}
exports.createAppCenterClient = createAppCenterClient;
// Helper function to wrap client calls into promises while maintaining some type safety.
function clientCall(action) {
return new Promise((resolve, reject) => {
action((err, result) => {
if (err) {
reject(err);
}
else {
resolve(result);
}
});
});
}
exports.clientCall = clientCall;
function handleHttpError(error, check404, messageDefault, message404 = `404 Error received from api`, message401 = `401 Error received from api`) {
return __awaiter(this, void 0, void 0, function* () {
if (check404 && error.statusCode === 404) {
throw command_result_1.failure(command_result_1.ErrorCodes.InvalidParameter, message404);
}
if (error.statusCode === 401) {
throw command_result_1.failure(command_result_1.ErrorCodes.NotLoggedIn, message401);
}
else {
debug(`${messageDefault}- ${util_1.inspect(error)}`);
throw command_result_1.failure(command_result_1.ErrorCodes.Exception, messageDefault);
}
});
}
exports.handleHttpError = handleHttpError;
// Helper function to wrap client calls into pormises and returning both HTTP response and parsed result
function clientRequest(action) {
return new Promise((resolve, reject) => {
action((err, result, request, response) => {
if (err) {
reject(err);
}
else {
resolve({ result, response });
}
});
});
}
exports.clientRequest = clientRequest;