UNPKG

onesky-fetch

Version:

Fetch and upload translation files from www.oneskyapp.com working in node.js and browser apps.

124 lines (105 loc) 4.88 kB
'use strict'; var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; var _md = require('md5'); var _md2 = _interopRequireDefault(_md); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var apiUrl = 'https://platform.api.onesky.io/1'; function getDevHash(secret) { var timestamp = Math.floor(Date.now() / 1000); return { dev_hash: (0, _md2.default)(timestamp + secret), timestamp: timestamp }; } function buildUrlParams(obj) { var str = ''; for (var key in obj) { if (str !== '') { str += '&'; } str += key + '=' + obj[key]; } return str; } function oneSkyRequest(fetch, config, resourcePath) { var params = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {}; var method = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 'GET'; var headers = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : null; var body = arguments.length > 6 && arguments[6] !== undefined ? arguments[6] : null; var devHash = getDevHash(config.secret); var urlParams = _extends({ api_key: config.apiKey }, devHash, params); var url = '' + apiUrl + resourcePath + '?' + buildUrlParams(urlParams); return fetch(url, { method: method, headers: headers, body: body }); } module.exports = function (fetch) { return function (config) { return { config: config, fetchLanguages: function fetchLanguages() { var resourcePath = '/projects/' + config.projectId + '/languages'; return oneSkyRequest(fetch, config, resourcePath).then(function (res) { if (res.status > 299) { throw new Error('Error fetching languages: ' + res.statusMessage); } return res.json(); }).then(function (json) { return json.data; }); }, fetchTranslations: function fetchTranslations(languages, fileName) { var languages_ = typeof languages == 'string' ? [languages] : languages; var languageFetches = languages_.map(function (language) { var params = { locale: language, source_file_name: fileName, export_file_name: language + '.json' }; var resourcePath = '/projects/' + config.projectId + '/translations'; return oneSkyRequest(fetch, config, resourcePath, params).then(function (res) { if (res.status > 299) { throw new Error('Error fetching translations: ' + res.statusMessage); } return res.text(); }).then(function (text) { return { language: language, text: text }; }); }); return Promise.all(languageFetches); }, fetchAllTranslations: function fetchAllTranslations(fileName) { var _this = this; return this.fetchLanguages().then(function (languages) { return languages.map(function (language) { return language.code; }); }).then(function (languages) { return _this.fetchTranslations(languages, fileName); }); }, uploadFile: function uploadFile(content, fileName, fileFormat) { var options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null; var resourcePath = '/projects/' + config.projectId + '/files'; var boundary = (0, _md2.default)(Date.now()); var multipart = '--' + boundary + '\n'; multipart += 'Content-Disposition: form-data; name="file"; filename="' + fileName + '"\n\n'; multipart += content + '\n'; multipart += '--' + boundary + '\n'; multipart += 'Content-Disposition: form-data; name="file_format"\n\n'; multipart += fileFormat + '\n'; if (options && (typeof options === 'undefined' ? 'undefined' : _typeof(options)) === 'object') { multipart += Object.keys(options).reduce(function (mp, optionKey) { mp += '--' + boundary + '\n'; mp += 'Content-Disposition: form-data; name="' + optionKey + '"\n\n'; mp += options[optionKey] + '\n'; return mp; }, multipart); } multipart += '--' + boundary + '--\n'; return oneSkyRequest(fetch, config, resourcePath, {}, 'POST', { 'Content-Type': 'multipart/form-data; boundary=' + boundary }, multipart); } }; }; };