UNPKG

r2-lcp-js

Version:

Readium 2 LCP bits for NodeJS (TypeScript)

185 lines 7.09 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.launchStatusDocumentProcessing = launchStatusDocumentProcessing; const tslib_1 = require("tslib"); const debug_ = require("debug"); const request = require("request"); const BufferUtils_1 = require("r2-utils-js/dist/es7-es2016/src/_utils/stream/BufferUtils"); const lsd_1 = require("../parser/epub/lsd"); const serializable_1 = require("../serializable"); const lcpl_update_1 = require("./lcpl-update"); const register_1 = require("./register"); const debug = debug_("r2:lcp#lsd/status-document-processing"); const IS_DEV = (process.env.NODE_ENV === "development" || process.env.NODE_ENV === "dev"); function launchStatusDocumentProcessing(lcp, deviceIDManager, onStatusDocumentProcessingComplete, httpHeaders) { return tslib_1.__awaiter(this, void 0, void 0, function* () { if (!lcp || !lcp.Links) { if (onStatusDocumentProcessingComplete) { onStatusDocumentProcessingComplete(undefined); } return; } const linkStatus = lcp.Links.find((link) => { return link.Rel === "status"; }); if (!linkStatus) { if (onStatusDocumentProcessingComplete) { onStatusDocumentProcessingComplete(undefined); } return; } if (IS_DEV) { debug(linkStatus); } const failure = (err) => { debug(err); if (onStatusDocumentProcessingComplete) { onStatusDocumentProcessingComplete(undefined); } }; const success = (response) => tslib_1.__awaiter(this, void 0, void 0, function* () { if (IS_DEV) { Object.keys(response.headers).forEach((header) => { debug(header + " => " + response.headers[header]); }); } if (response.statusCode && (response.statusCode < 200 || response.statusCode >= 300)) { let failBuff; try { failBuff = yield (0, BufferUtils_1.streamToBufferPromise)(response); } catch (buffErr) { if (IS_DEV) { debug(buffErr); } failure(response.statusCode); return; } try { const failStr = failBuff.toString("utf8"); if (IS_DEV) { debug(failStr); } try { const 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; } let responseData; try { responseData = yield (0, BufferUtils_1.streamToBufferPromise)(response); } catch (err) { debug(err); if (onStatusDocumentProcessingComplete) { onStatusDocumentProcessingComplete(undefined); } return; } const responseStr = responseData.toString("utf8"); const mime = "application/vnd.readium.license.status.v1.0+json"; if (IS_DEV) { if (response.headers["content-type"] === mime || response.headers["content-type"] === "application/json") { debug(responseStr); } } const lsdJSON = global.JSON.parse(responseStr); if (IS_DEV) { debug(lsdJSON); } try { lcp.LSD = (0, serializable_1.TaJsonDeserialize)(lsdJSON, lsd_1.LSD); if (IS_DEV) { debug(lcp.LSD); } } catch (err) { debug(err); if (onStatusDocumentProcessingComplete) { onStatusDocumentProcessingComplete(undefined); } return; } let licenseUpdateResponseJson; try { licenseUpdateResponseJson = yield (0, lcpl_update_1.lsdLcpUpdate)(lcp, httpHeaders); } catch (err) { debug(err); } if (licenseUpdateResponseJson) { if (onStatusDocumentProcessingComplete) { onStatusDocumentProcessingComplete(licenseUpdateResponseJson); } return; } if (lcp.LSD.Status === lsd_1.StatusEnum.Revoked || lcp.LSD.Status === lsd_1.StatusEnum.Returned || lcp.LSD.Status === lsd_1.StatusEnum.Cancelled || lcp.LSD.Status === lsd_1.StatusEnum.Expired) { debug("What?! LSD status:" + lcp.LSD.Status); if (onStatusDocumentProcessingComplete) { onStatusDocumentProcessingComplete(undefined); } return; } let registerResponse; try { registerResponse = yield (0, register_1.lsdRegister_)(lcp.LSD, deviceIDManager, httpHeaders); } catch (err) { debug(err); } if (registerResponse) { lcp.LSD = registerResponse; if (IS_DEV) { debug(lcp.LSD); } } if (onStatusDocumentProcessingComplete) { onStatusDocumentProcessingComplete(undefined); } }); const 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, method: "GET", timeout: 2000, uri: linkStatus.Href, }) .on("response", (res) => tslib_1.__awaiter(this, void 0, void 0, function* () { try { yield success(res); } catch (successError) { failure(successError); return; } })) .on("error", failure); }); } //# sourceMappingURL=status-document-processing.js.map