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
JavaScript
;
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);
}
};
};
};