"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = exports.ApiV2Error = void 0;
function _merge() {
const data = _interopRequireDefault(require("lodash/merge"));
_merge = function () {
return data;
};
return data;
}
function _es6Error() {
const data = _interopRequireDefault(require("es6-error"));
_es6Error = function () {
return data;
};
return data;
}
function _querystring() {
const data = _interopRequireDefault(require("querystring"));
_querystring = function () {
return data;
};
return data;
}
function _axios() {
const data = _interopRequireDefault(require("axios"));
_axios = function () {
return data;
};
return data;
}
function _idx() {
const data = _interopRequireDefault(require("idx"));
_idx = function () {
return data;
};
return data;
}
function _Config() {
const data = _interopRequireDefault(require("./Config"));
_Config = function () {
return data;
};
return data;
}
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
// These aren't constants because some commands switch between staging and prod
function _rootBaseUrl() {
return `${_Config().default.api.scheme}://${_Config().default.api.host}`;
}
function _apiBaseUrl() {
let rootBaseUrl = _rootBaseUrl();
if (_Config().default.api.port) {
rootBaseUrl += ':' + _Config().default.api.port;
}
return rootBaseUrl + '/--/api/v2';
}
class ApiV2Error extends _es6Error().default {
constructor(message, code = 'UNKNOWN') {
super(message);
_defineProperty(this, "code", void 0);
_defineProperty(this, "details", void 0);
_defineProperty(this, "serverStack", void 0);
_defineProperty(this, "_isApiError", true);
this.code = code;
}
}
exports.ApiV2Error = ApiV2Error;
class ApiV2Client {
static clientForUser(user) {
if (user && user.sessionSecret) {
return new ApiV2Client({
sessionSecret: user.sessionSecret
});
}
return new ApiV2Client();
}
static setClientName(name) {
ApiV2Client.exponentClient = name;
}
constructor(options = {}) {
_defineProperty(this, "sessionSecret", null);
if (options.sessionSecret) {
this.sessionSecret = options.sessionSecret;
}
}
async getAsync(methodName, args = {}, extraOptions, returnEntireResponse = false) {
return this._requestAsync(methodName, {
httpMethod: 'get',
queryParameters: args
}, extraOptions, returnEntireResponse);
}
async postAsync(methodName, data, extraOptions, returnEntireResponse = false) {
return this._requestAsync(methodName, {
httpMethod: 'post',
body: data
}, extraOptions, returnEntireResponse);
}
async putAsync(methodName, data, extraOptions, returnEntireResponse = false) {
return this._requestAsync(methodName, {
httpMethod: 'put',
body: data
}, extraOptions, returnEntireResponse);
}
async deleteAsync(methodName, extraOptions, returnEntireResponse = false) {
return this._requestAsync(methodName, {
httpMethod: 'delete'
}, extraOptions, returnEntireResponse);
}
async _requestAsync(methodName, options, extraRequestOptions, returnEntireResponse = false) {
const url = `${_apiBaseUrl()}/${methodName}`;
let reqOptions = {
url,
method: options.httpMethod,
headers: {
'Exponent-Client': ApiV2Client.exponentClient
}
};
if (this.sessionSecret) {
reqOptions.headers['Expo-Session'] = this.sessionSecret;
} // Handle qs
if (options.queryParameters) {
reqOptions.params = options.queryParameters;
reqOptions.paramsSerializer = _querystring().default.stringify;
} // Handle body
if (options.body) {
reqOptions.data = options.body;
}
reqOptions = (0, _merge().default)({}, reqOptions, extraRequestOptions);
let response;
let result;
try {
response = await _axios().default.request(reqOptions);
result = response.data;
} catch (e) {
const maybeErrorData = (0, _idx().default)(e, _ => _.response.data.errors.length);
if (maybeErrorData) {
result = e.response.data;
} else {
throw e;
}
}
if (result.errors && result.errors.length) {
let responseError = result.errors[0];
let error = new ApiV2Error(responseError.message, responseError.code);
error.serverStack = responseError.stack;
error.details = responseError.details;
throw error;
}
return returnEntireResponse ? response : result.data;
}
}
exports.default = ApiV2Client;
_defineProperty(ApiV2Client, "exponentClient", 'xdl');
//# sourceMappingURL=__sourcemaps__/ApiV2.js.map