UNPKG

6.64 kBJavaScriptView Raw
1"use strict";
2Object.defineProperty(exports, "__esModule", { value: true });
3exports.lsdRenew_ = exports.lsdRenew = void 0;
4const debug_ = require("debug");
5const request = require("request");
6const requestPromise = require("request-promise-native");
7const BufferUtils_1 = require("r2-utils-js/dist/es8-es2017/src/_utils/stream/BufferUtils");
8const lsd_1 = require("../parser/epub/lsd");
9const serializable_1 = require("../serializable");
10const URI = require("urijs");
11const URITemplate = require("urijs/src/URITemplate");
12const debug = debug_("r2:lcp#lsd/renew");
13const IS_DEV = (process.env.NODE_ENV === "development" || process.env.NODE_ENV === "dev");
14async function lsdRenew(end, lsdJSON, deviceIDManager, httpHeaders) {
15 if (lsdJSON instanceof lsd_1.LSD) {
16 return lsdRenew_(end, lsdJSON, deviceIDManager);
17 }
18 let lsd;
19 try {
20 lsd = (0, serializable_1.TaJsonDeserialize)(lsdJSON, lsd_1.LSD);
21 }
22 catch (err) {
23 debug(err);
24 debug(lsdJSON);
25 return Promise.reject("Bad LSD JSON?");
26 }
27 const obj = lsdRenew_(end, lsd, deviceIDManager, httpHeaders);
28 return (0, serializable_1.TaJsonSerialize)(obj);
29}
30exports.lsdRenew = lsdRenew;
31async function lsdRenew_(end, lsd, deviceIDManager, httpHeaders) {
32 if (!lsd) {
33 return Promise.reject("LCP LSD data is missing.");
34 }
35 if (!lsd.Links) {
36 return Promise.reject("No LSD links!");
37 }
38 const licenseRenew = lsd.Links.find((link) => {
39 return link.Rel === "renew";
40 });
41 if (!licenseRenew) {
42 return Promise.reject("No LSD renew link!");
43 }
44 let deviceID;
45 try {
46 deviceID = await deviceIDManager.getDeviceID();
47 }
48 catch (err) {
49 debug(err);
50 return Promise.reject("Problem getting Device ID !?");
51 }
52 let deviceNAME;
53 try {
54 deviceNAME = await deviceIDManager.getDeviceNAME();
55 }
56 catch (err) {
57 debug(err);
58 return Promise.reject("Problem getting Device NAME !?");
59 }
60 let renewURL = licenseRenew.Href;
61 if (licenseRenew.Templated) {
62 const urlTemplate = new URITemplate(renewURL);
63 const uri1 = urlTemplate.expand({ end: "xxx", id: deviceID, name: deviceNAME }, { strict: false });
64 renewURL = uri1.toString();
65 const uri2 = new URI(renewURL);
66 uri2.search((data) => {
67 data.end = end === null || end === void 0 ? void 0 : end.toISOString();
68 });
69 renewURL = uri2.toString();
70 }
71 if (IS_DEV) {
72 debug("RENEW: " + renewURL);
73 }
74 return new Promise(async (resolve, reject) => {
75 const failure = (err) => {
76 reject(err);
77 };
78 const success = async (response) => {
79 if (IS_DEV) {
80 Object.keys(response.headers).forEach((header) => {
81 debug(header + " => " + response.headers[header]);
82 });
83 }
84 if (response.statusCode && (response.statusCode < 200 || response.statusCode >= 300)) {
85 let failBuff;
86 try {
87 failBuff = await (0, BufferUtils_1.streamToBufferPromise)(response);
88 }
89 catch (buffErr) {
90 if (IS_DEV) {
91 debug(buffErr);
92 }
93 failure(response.statusCode);
94 return;
95 }
96 try {
97 const failStr = failBuff.toString("utf8");
98 if (IS_DEV) {
99 debug(failStr);
100 }
101 try {
102 const failJson = global.JSON.parse(failStr);
103 if (IS_DEV) {
104 debug(failJson);
105 }
106 failJson.httpStatusCode = response.statusCode;
107 failure(failJson);
108 }
109 catch (jsonErr) {
110 if (IS_DEV) {
111 debug(jsonErr);
112 }
113 failure({ httpStatusCode: response.statusCode, httpResponseBody: failStr });
114 }
115 }
116 catch (strErr) {
117 if (IS_DEV) {
118 debug(strErr);
119 }
120 failure(response.statusCode);
121 }
122 return;
123 }
124 let responseData;
125 try {
126 responseData = await (0, BufferUtils_1.streamToBufferPromise)(response);
127 }
128 catch (err) {
129 reject(err);
130 return;
131 }
132 const responseStr = responseData.toString("utf8");
133 if (IS_DEV) {
134 debug(responseStr);
135 }
136 const responseJson = global.JSON.parse(responseStr);
137 if (IS_DEV) {
138 debug(responseJson);
139 }
140 try {
141 const newLsd = (0, serializable_1.TaJsonDeserialize)(responseJson, lsd_1.LSD);
142 if (IS_DEV) {
143 debug(newLsd);
144 }
145 resolve(newLsd);
146 }
147 catch (err) {
148 debug(err);
149 resolve(responseJson);
150 }
151 };
152 const headers = Object.assign({
153 "Accept": "application/json,application/xml",
154 "Accept-Language": "en-UK,en-US;q=0.7,en;q=0.5",
155 "User-Agent": "Readium2-LCP",
156 }, httpHeaders ? httpHeaders : {});
157 const needsStreamingResponse = true;
158 if (needsStreamingResponse) {
159 request.put({
160 headers,
161 method: "PUT",
162 timeout: 5000,
163 uri: renewURL,
164 })
165 .on("response", async (res) => {
166 try {
167 await success(res);
168 }
169 catch (successError) {
170 failure(successError);
171 return;
172 }
173 })
174 .on("error", failure);
175 }
176 else {
177 let response;
178 try {
179 response = await requestPromise({
180 headers,
181 method: "PUT",
182 resolveWithFullResponse: true,
183 uri: renewURL,
184 });
185 }
186 catch (err) {
187 failure(err);
188 return;
189 }
190 await success(response);
191 }
192 });
193}
194exports.lsdRenew_ = lsdRenew_;
195//# sourceMappingURL=renew.js.map
\No newline at end of file