UNPKG

@expo/xdl

Version:
244 lines (184 loc) 5.81 kB
"use strict"; 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