UNPKG

r2-lcp-js

Version:

Readium 2 LCP bits for NodeJS (TypeScript)

181 lines 11.7 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.lsdLcpUpdate = lsdLcpUpdate; var tslib_1 = require("tslib"); var debug_ = require("debug"); var moment = require("moment"); var request = require("request"); var BufferUtils_1 = require("r2-utils-js/dist/es5/src/_utils/stream/BufferUtils"); var debug = debug_("r2:lcp#lsd/lcpl-update"); var IS_DEV = (process.env.NODE_ENV === "development" || process.env.NODE_ENV === "dev"); function lsdLcpUpdate(lcp, httpHeaders) { return tslib_1.__awaiter(this, void 0, void 0, function () { var updatedLicenseLSD, updatedLicense, forceUpdate, licenseLink_1; var _this = this; return tslib_1.__generator(this, function (_a) { if (!lcp.LSD) { return [2, Promise.reject("LCP LSD data is missing.")]; } if (lcp.LSD.Updated && lcp.LSD.Updated.License && (lcp.Updated || lcp.Issued)) { updatedLicenseLSD = moment(lcp.LSD.Updated.License); updatedLicense = moment(lcp.Updated || lcp.Issued); forceUpdate = false; if (forceUpdate || (updatedLicense.isBefore(updatedLicenseLSD))) { if (IS_DEV) { debug("LSD license updating..."); } if (lcp.LSD.Links) { licenseLink_1 = lcp.LSD.Links.find(function (link) { return link.Rel === "license"; }); if (!licenseLink_1) { return [2, Promise.reject("LSD license link is missing.")]; } if (IS_DEV) { debug("OLD LCP LICENSE, FETCHING LSD UPDATE ... " + licenseLink_1.Href); } return [2, new Promise(function (resolve, reject) { return tslib_1.__awaiter(_this, void 0, void 0, function () { var failure, success, headers; var _this = this; return tslib_1.__generator(this, function (_a) { failure = function (err) { reject(err); }; success = function (response) { return tslib_1.__awaiter(_this, void 0, void 0, function () { var tryErrorJson, failBuff, buffErr_1, failStr, responseData, err_1, lcplStr, tryLcpJson; return tslib_1.__generator(this, function (_a) { switch (_a.label) { case 0: if (IS_DEV) { Object.keys(response.headers).forEach(function (header) { debug(header + " => " + response.headers[header]); }); } tryErrorJson = function (str) { try { var failJson = global.JSON.parse(str); if (IS_DEV) { debug(failJson); } failJson.httpStatusCode = response.statusCode; failure(failJson); } catch (jsonErr) { if (IS_DEV) { debug(jsonErr); } failure({ httpStatusCode: response.statusCode, httpResponseBody: str }); } }; if (!(response.statusCode && (response.statusCode < 200 || response.statusCode >= 300))) return [3, 5]; failBuff = void 0; _a.label = 1; case 1: _a.trys.push([1, 3, , 4]); return [4, (0, BufferUtils_1.streamToBufferPromise)(response)]; case 2: failBuff = _a.sent(); return [3, 4]; case 3: buffErr_1 = _a.sent(); if (IS_DEV) { debug(buffErr_1); } failure(response.statusCode); return [2]; case 4: try { failStr = failBuff.toString("utf8"); if (IS_DEV) { debug(failStr); } tryErrorJson(failStr); } catch (strErr) { if (IS_DEV) { debug(strErr); } failure(response.statusCode); } return [2]; case 5: _a.trys.push([5, 7, , 8]); return [4, (0, BufferUtils_1.streamToBufferPromise)(response)]; case 6: responseData = _a.sent(); return [3, 8]; case 7: err_1 = _a.sent(); reject(err_1); return [2]; case 8: lcplStr = responseData.toString("utf8"); if (IS_DEV) { debug(lcplStr); } try { tryLcpJson = global.JSON.parse(lcplStr); if (!tryLcpJson.id || !tryLcpJson.issued || !tryLcpJson.provider || !tryLcpJson.encryption || !tryLcpJson.encryption.profile) { if (IS_DEV) { debug(lcplStr); debug("NOT AN LCP LICENSE!"); } tryErrorJson(lcplStr); return [2]; } } catch (jsonErr) { if (IS_DEV) { debug(jsonErr); } tryErrorJson(lcplStr); return [2]; } resolve(lcplStr); return [2]; } }); }); }; headers = Object.assign({ "Accept": "application/json,application/xml", "Accept-Language": "en-UK,en-US;q=0.7,en;q=0.5", "User-Agent": "Readium2-LCP", }, httpHeaders ? httpHeaders : {}); request.get({ headers: headers, method: "GET", timeout: 2000, uri: licenseLink_1.Href, }) .on("response", function (res) { return tslib_1.__awaiter(_this, void 0, void 0, function () { var successError_1; return tslib_1.__generator(this, function (_a) { switch (_a.label) { case 0: _a.trys.push([0, 2, , 3]); return [4, success(res)]; case 1: _a.sent(); return [3, 3]; case 2: successError_1 = _a.sent(); failure(successError_1); return [2]; case 3: return [2]; } }); }); }) .on("error", failure); return [2]; }); }); })]; } } } return [2, Promise.reject("No LSD LCP update.")]; }); }); } //# sourceMappingURL=lcpl-update.js.map