"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