@expo/xdl
Version:
The Expo Development Library
244 lines (184 loc) • 5.81 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = exports.TurtleApiError = void 0;
function _axios() {
const data = _interopRequireDefault(require("axios"));
_axios = function () {
return data;
};
return data;
}
function _concatStream() {
const data = _interopRequireDefault(require("concat-stream"));
_concatStream = function () {
return data;
};
return data;
}
function _formData() {
const data = _interopRequireDefault(require("form-data"));
_formData = function () {
return data;
};
return data;
}
function _fsExtra() {
const data = _interopRequireDefault(require("fs-extra"));
_fsExtra = function () {
return data;
};
return data;
}
function _merge() {
const data = _interopRequireDefault(require("lodash/merge"));
_merge = function () {
return data;
};
return data;
}
function _querystring() {
const data = _interopRequireDefault(require("querystring"));
_querystring = function () {
return data;
};
return data;
}
function _url() {
const data = require("url");
_url = 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; }
const apiBaseUrl = `${_Config().default.turtleApi.scheme}://${_Config().default.turtleApi.host}:${_Config().default.turtleApi.port}`;
class TurtleApiError extends Error {
constructor(message, code = 'UNKNOWN') {
super(message);
_defineProperty(this, "name", 'TurtleApiError');
_defineProperty(this, "code", void 0);
_defineProperty(this, "details", void 0);
_defineProperty(this, "serverStack", void 0);
_defineProperty(this, "_isApiError", true);
this.code = code;
}
}
exports.TurtleApiError = TurtleApiError;
class TurtleApiClient {
static clientForUser(sessionSecret) {
return new TurtleApiClient({
sessionSecret
});
}
constructor(options) {
_defineProperty(this, "sessionSecret", void 0);
this.sessionSecret = options.sessionSecret;
}
async getAsync(methodName, args = {}, extraOptions) {
return this._requestAsync(methodName, {
httpMethod: 'get',
queryParameters: args
}, extraOptions);
}
async postAsync(methodName, data, extraOptions) {
return this._requestAsync(methodName, {
httpMethod: 'post',
body: data
}, extraOptions);
}
async putAsync(methodName, data, extraOptions) {
return this._requestAsync(methodName, {
httpMethod: 'put',
body: data
}, extraOptions);
}
async deleteAsync(methodName, extraOptions) {
return this._requestAsync(methodName, {
httpMethod: 'delete'
}, extraOptions);
}
async _requestAsync(methodName, options, extraRequestOptions) {
const formattedUrl = new (_url().URL)(methodName, apiBaseUrl);
let reqOptions = {
url: formattedUrl.href,
method: options.httpMethod,
headers: {
'Expo-Session': this.sessionSecret || null
}
};
if (options.queryParameters) {
reqOptions.params = options.queryParameters;
reqOptions.paramsSerializer = _querystring().default.stringify;
}
if (options.body) {
reqOptions.data = options.body;
}
reqOptions = (0, _merge().default)({}, reqOptions, extraRequestOptions);
return await this.handleRequest(reqOptions);
}
async uploadFile(tarPath) {
const formattedUrl = new (_url().URL)('upload', apiBaseUrl);
const projectFormData = new (_formData().default)();
projectFormData.append('file', _fsExtra().default.createReadStream(tarPath));
const convertedFormData = await this.convertFormDataToBuffer(projectFormData);
const {
data
} = convertedFormData;
const headers = projectFormData.getHeaders();
const reqOptions = {
method: 'post',
url: formattedUrl.href,
data,
headers,
maxContentLength: data.byteLength
};
if (this.sessionSecret) {
reqOptions.headers['Expo-Session'] = this.sessionSecret;
}
return await this.handleRequest(reqOptions);
}
async handleRequest(reqOptions) {
let response;
let result;
try {
response = await _axios().default.request(reqOptions);
result = response.data;
} catch (e) {
var _e$response, _e$response$data, _e$response$data$erro;
if (e === null || e === void 0 ? void 0 : (_e$response = e.response) === null || _e$response === void 0 ? void 0 : (_e$response$data = _e$response.data) === null || _e$response$data === void 0 ? void 0 : (_e$response$data$erro = _e$response$data.errors) === null || _e$response$data$erro === void 0 ? void 0 : _e$response$data$erro.length) {
result = e.response.data;
} else {
throw e;
}
}
if (result.errors && result.errors.length) {
const responseError = result.errors[0];
const error = new TurtleApiError(responseError.message, responseError.code);
error.serverStack = responseError.stack;
error.details = responseError.details;
throw error;
}
return result;
}
async convertFormDataToBuffer(formData) {
return new Promise(resolve => {
formData.pipe((0, _concatStream().default)({
encoding: 'buffer'
}, data => resolve({
data
})));
});
}
}
exports.default = TurtleApiClient;
//# sourceMappingURL=__sourcemaps__/TurtleApi.js.map