UNPKG

r2-lcp-js

Version:

Readium 2 LCP bits for NodeJS (TypeScript)

263 lines 14.7 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.lsdRegister = lsdRegister; exports.lsdRegister_ = lsdRegister_; var tslib_1 = require("tslib"); var debug_ = require("debug"); var request = require("request"); var BufferUtils_1 = require("r2-utils-js/dist/es5/src/_utils/stream/BufferUtils"); var lsd_1 = require("../parser/epub/lsd"); var serializable_1 = require("../serializable"); var URITemplate = require("urijs/src/URITemplate"); var debug = debug_("r2:lcp#lsd/register"); var IS_DEV = (process.env.NODE_ENV === "development" || process.env.NODE_ENV === "dev"); function lsdRegister(lsdJSON, deviceIDManager, httpHeaders) { return tslib_1.__awaiter(this, void 0, void 0, function () { var lsd, obj; return tslib_1.__generator(this, function (_a) { if (lsdJSON instanceof lsd_1.LSD) { return [2, lsdRegister_(lsdJSON, deviceIDManager)]; } try { lsd = (0, serializable_1.TaJsonDeserialize)(lsdJSON, lsd_1.LSD); } catch (err) { debug(err); debug(lsdJSON); return [2, Promise.reject("Bad LSD JSON?")]; } obj = lsdRegister_(lsd, deviceIDManager, httpHeaders); return [2, (0, serializable_1.TaJsonSerialize)(obj)]; }); }); } function lsdRegister_(lsd, deviceIDManager, httpHeaders) { return tslib_1.__awaiter(this, void 0, void 0, function () { var licenseRegister, deviceID, err_1, deviceNAME, err_2, doRegister, deviceIDForStatusDoc, err_3, registerURL, urlTemplate, uri1; var _this = this; return tslib_1.__generator(this, function (_a) { switch (_a.label) { case 0: if (!lsd) { return [2, Promise.reject("LCP LSD data is missing.")]; } if (!lsd.Links) { return [2, Promise.reject("No LSD links!")]; } licenseRegister = lsd.Links.find(function (link) { return link.Rel === "register"; }); if (!licenseRegister) { return [2, Promise.reject("No LSD register link!")]; } _a.label = 1; case 1: _a.trys.push([1, 3, , 4]); return [4, deviceIDManager.getDeviceID()]; case 2: deviceID = _a.sent(); return [3, 4]; case 3: err_1 = _a.sent(); debug(err_1); return [2, Promise.reject("Problem getting Device ID !?")]; case 4: _a.trys.push([4, 6, , 7]); return [4, deviceIDManager.getDeviceNAME()]; case 5: deviceNAME = _a.sent(); return [3, 7]; case 6: err_2 = _a.sent(); debug(err_2); return [2, Promise.reject("Problem getting Device NAME !?")]; case 7: doRegister = false; if (!(lsd.Status === lsd_1.StatusEnum.Ready)) return [3, 8]; doRegister = true; return [3, 13]; case 8: if (!(lsd.Status === lsd_1.StatusEnum.Active)) return [3, 13]; deviceIDForStatusDoc = void 0; _a.label = 9; case 9: _a.trys.push([9, 11, , 12]); return [4, deviceIDManager.checkDeviceID(lsd.ID)]; case 10: deviceIDForStatusDoc = _a.sent(); return [3, 12]; case 11: err_3 = _a.sent(); debug(err_3); return [3, 12]; case 12: if (!deviceIDForStatusDoc) { doRegister = true; } else if (deviceIDForStatusDoc !== deviceID) { if (IS_DEV) { debug("LSD registered device ID is different? ", lsd.ID, ": ", deviceIDForStatusDoc, " --- ", deviceID); } doRegister = true; } _a.label = 13; case 13: if (!doRegister) { return [2, Promise.reject("No need to LSD register.")]; } registerURL = licenseRegister.Href; if (licenseRegister.Templated) { urlTemplate = new URITemplate(registerURL); uri1 = urlTemplate.expand({ id: deviceID, name: deviceNAME }, { strict: true }); registerURL = uri1.toString(); } if (IS_DEV) { debug("REGISTER: " + registerURL); } 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 failBuff, buffErr_1, failStr, failJson, responseData, err_4, responseStr, responseJson, err_5, newLsd; 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]); }); } 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); } try { failJson = global.JSON.parse(failStr); if (IS_DEV) { debug(failJson); } failJson.httpStatusCode = response.statusCode; failure(failJson); } catch (jsonErr) { if (IS_DEV) { debug(jsonErr); } failure({ httpStatusCode: response.statusCode, httpResponseBody: 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_4 = _a.sent(); reject(err_4); return [2]; case 8: responseStr = responseData.toString("utf8"); if (IS_DEV) { debug(responseStr); } responseJson = global.JSON.parse(responseStr); if (IS_DEV) { debug(responseJson); debug(responseJson.status); } if (!(responseJson.status === "active")) return [3, 12]; _a.label = 9; case 9: _a.trys.push([9, 11, , 12]); return [4, deviceIDManager.recordDeviceID(responseJson.id)]; case 10: _a.sent(); return [3, 12]; case 11: err_5 = _a.sent(); debug(err_5); return [3, 12]; case 12: try { newLsd = (0, serializable_1.TaJsonDeserialize)(responseJson, lsd_1.LSD); if (IS_DEV) { debug(newLsd); } resolve(newLsd); } catch (err) { debug(err); resolve(responseJson); } 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.post({ headers: headers, method: "POST", timeout: 2000, uri: registerURL, }) .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]; }); }); })]; } }); }); } //# sourceMappingURL=register.js.map