UNPKG

cimpress-translations

Version:
395 lines (335 loc) 12.2 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator")); var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator")); var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck")); var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass")); var rp = require("request-promise-native"); var _require = require("pope"), pope = _require.pope; var httpStatus = require("http-status-codes"); var jsonPatch = require("fast-json-patch"); var _require2 = require("./errors"), buildError = _require2.buildError; var _require3 = require("./language"), findLanguage = _require3.findLanguage, findLanguageCode = _require3.findLanguageCode; var API = { url: "https://api.translations.cimpress.io", v1Services: "/v1/services", v1ServicesId: "/v1/services/{{id}}", v1ServicesIdStructure: "/v1/services/{{id}}/structure", v1ServicesIdLanguage: "/v1/services/{{id}}/blobs/{{language}}" }; var requestCatch = function requestCatch(err) { if (err && err.statusCode === httpStatus.NOT_FOUND) { throw buildError("ENOTFOUND", err.message); } if (err && [httpStatus.UNAUTHORIZED, httpStatus.FORBIDDEN].includes(err.statusCode)) { throw buildError("ENOACCESS", err.message); } throw buildError("EGENERIC", err.message); }; var CimpressTranslationsClient = /*#__PURE__*/ function () { function CimpressTranslationsClient(url, auth) { (0, _classCallCheck2["default"])(this, CimpressTranslationsClient); this.url = url || API.url; this.auth = auth; } (0, _createClass2["default"])(CimpressTranslationsClient, [{ key: "buildUrl", value: function buildUrl(path, dict) { return pope(this.url + path, dict); } }, { key: "addAuth", value: function () { var _addAuth = (0, _asyncToGenerator2["default"])( /*#__PURE__*/ _regenerator["default"].mark(function _callee(options) { var auth; return _regenerator["default"].wrap(function _callee$(_context) { while (1) { switch (_context.prev = _context.next) { case 0: _context.next = 2; return this.getAuth(); case 2: auth = _context.sent; if (auth) { auth = auth.startsWith('Bearer ') ? auth : 'Bearer ' + auth; options.headers = Object.assign(options.headers || {}, { Authorization: auth }); } case 4: case "end": return _context.stop(); } } }, _callee, this); })); function addAuth(_x) { return _addAuth.apply(this, arguments); } return addAuth; }() }, { key: "getAuth", value: function getAuth() { if (typeof this.auth === "function") { return this.auth(); } return this.auth; } }, { key: "listServices", value: function () { var _listServices = (0, _asyncToGenerator2["default"])( /*#__PURE__*/ _regenerator["default"].mark(function _callee2() { var options; return _regenerator["default"].wrap(function _callee2$(_context2) { while (1) { switch (_context2.prev = _context2.next) { case 0: options = { url: this.buildUrl(API.v1Services), json: true }; _context2.next = 3; return this.addAuth(options); case 3: return _context2.abrupt("return", rp(options)["catch"](requestCatch)); case 4: case "end": return _context2.stop(); } } }, _callee2, this); })); function listServices() { return _listServices.apply(this, arguments); } return listServices; }() }, { key: "describeService", value: function () { var _describeService = (0, _asyncToGenerator2["default"])( /*#__PURE__*/ _regenerator["default"].mark(function _callee3(serviceId) { var options; return _regenerator["default"].wrap(function _callee3$(_context3) { while (1) { switch (_context3.prev = _context3.next) { case 0: options = { url: this.buildUrl(API.v1ServicesId, { id: serviceId }), json: true }; _context3.next = 3; return this.addAuth(options); case 3: return _context3.abrupt("return", rp(options)["catch"](requestCatch)); case 4: case "end": return _context3.stop(); } } }, _callee3, this); })); function describeService(_x2) { return _describeService.apply(this, arguments); } return describeService; }() }, { key: "getLanguageBlob", value: function () { var _getLanguageBlob = (0, _asyncToGenerator2["default"])( /*#__PURE__*/ _regenerator["default"].mark(function _callee4(serviceId, language) { var languageCode, options; return _regenerator["default"].wrap(function _callee4$(_context4) { while (1) { switch (_context4.prev = _context4.next) { case 0: languageCode = findLanguageCode(language); if (languageCode) { _context4.next = 3; break; } throw buildError("ENOLANG"); case 3: options = { url: this.buildUrl(API.v1ServicesIdLanguage, { id: serviceId, language: languageCode }), json: true }; _context4.next = 6; return this.addAuth(options); case 6: return _context4.abrupt("return", rp(options)["catch"](requestCatch)); case 7: case "end": return _context4.stop(); } } }, _callee4, this); })); function getLanguageBlob(_x3, _x4) { return _getLanguageBlob.apply(this, arguments); } return getLanguageBlob; }() }, { key: "putLanguageBlob", value: function () { var _putLanguageBlob = (0, _asyncToGenerator2["default"])( /*#__PURE__*/ _regenerator["default"].mark(function _callee5(serviceId, language, blob) { var languageObject, languageCode, shortLanguageCode, requestBody, options; return _regenerator["default"].wrap(function _callee5$(_context5) { while (1) { switch (_context5.prev = _context5.next) { case 0: languageObject = findLanguage(language); // validate that language was found and fields required to form the REST request are present if (languageObject && languageObject["639-2"] && languageObject.en && Array.isArray(languageObject.en) && languageObject.en.length > 0) { _context5.next = 3; break; } throw buildError("ENOLANG"); case 3: languageCode = languageObject["639-2"]; shortLanguageCode = languageObject["639-1"]; requestBody = { blob: blob, metadata: { name: languageObject.en[0], shortName: languageCode, nativeName: shortLanguageCode && languageObject[shortLanguageCode] && languageObject[shortLanguageCode][0] || languageObject.en[0] } }; options = { method: "PUT", url: this.buildUrl(API.v1ServicesIdLanguage, { id: serviceId, language: languageCode }), body: requestBody, json: true }; _context5.next = 9; return this.addAuth(options); case 9: return _context5.abrupt("return", rp(options)["catch"](requestCatch)); case 10: case "end": return _context5.stop(); } } }, _callee5, this); })); function putLanguageBlob(_x5, _x6, _x7) { return _putLanguageBlob.apply(this, arguments); } return putLanguageBlob; }() }, { key: "patchStructure", value: function () { var _patchStructure = (0, _asyncToGenerator2["default"])( /*#__PURE__*/ _regenerator["default"].mark(function _callee6(serviceId, structurePatches) { var error, options; return _regenerator["default"].wrap(function _callee6$(_context6) { while (1) { switch (_context6.prev = _context6.next) { case 0: error = jsonPatch.validate(structurePatches); if (!error) { _context6.next = 3; break; } throw buildError("EBADREQUEST", JSON.stringify(error)); case 3: options = { method: "PATCH", url: this.buildUrl(API.v1ServicesIdStructure, { id: serviceId }), body: structurePatches, json: true }; _context6.next = 6; return this.addAuth(options); case 6: return _context6.abrupt("return", rp(options)["catch"](requestCatch)); case 7: case "end": return _context6.stop(); } } }, _callee6, this); })); function patchStructure(_x8, _x9) { return _patchStructure.apply(this, arguments); } return patchStructure; }() }, { key: "removeKeysFromStructure", value: function () { var _removeKeysFromStructure = (0, _asyncToGenerator2["default"])( /*#__PURE__*/ _regenerator["default"].mark(function _callee7(serviceId) { var blob, remoteBlob, blobPatches, removeFromStructurePatches, _args7 = arguments; return _regenerator["default"].wrap(function _callee7$(_context7) { while (1) { switch (_context7.prev = _context7.next) { case 0: blob = _args7.length > 1 && _args7[1] !== undefined ? _args7[1] : {}; _context7.next = 3; return this.getLanguageBlob(serviceId, blob.blobId); case 3: remoteBlob = _context7.sent; blobPatches = jsonPatch.compare(remoteBlob.data, blob.data); removeFromStructurePatches = blobPatches.filter(function (patch) { return patch.op === "remove"; }); if (!(removeFromStructurePatches.length > 0)) { _context7.next = 10; break; } _context7.next = 9; return this.patchStructure(serviceId, removeFromStructurePatches); case 9: return _context7.abrupt("return", _context7.sent); case 10: case "end": return _context7.stop(); } } }, _callee7, this); })); function removeKeysFromStructure(_x10) { return _removeKeysFromStructure.apply(this, arguments); } return removeKeysFromStructure; }() }]); return CimpressTranslationsClient; }(); CimpressTranslationsClient.API = API; module.exports = CimpressTranslationsClient;