UNPKG

13.5 kBSource Map (JSON)View Raw
1{"version":3,"file":"renew.js","sourceRoot":"","sources":["../../../../src/lsd/renew.ts"],"names":[],"mappings":"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","sourcesContent":["// ==LICENSE-BEGIN==\n// Copyright 2017 European Digital Reading Lab. All rights reserved.\n// Licensed to the Readium Foundation under one or more contributor license agreements.\n// Use of this source code is governed by a BSD-style license\n// that can be found in the LICENSE file exposed on Github (readium) in the project repository.\n// ==LICENSE-END==\n\nimport * as debug_ from \"debug\";\nimport * as request from \"request\";\nimport * as requestPromise from \"request-promise-native\";\n\nimport { streamToBufferPromise } from \"@r2-utils-js/_utils/stream/BufferUtils\";\n\nimport { LSD } from \"../parser/epub/lsd\";\nimport { TaJsonDeserialize, TaJsonSerialize } from \"../serializable\";\nimport { IDeviceIDManager } from \"./deviceid-manager\";\n\nimport URI = require(\"urijs\");\nimport URITemplate = require(\"urijs/src/URITemplate\");\n\nconst debug = debug_(\"r2:lcp#lsd/renew\");\n\nconst IS_DEV = (process.env.NODE_ENV === \"development\" || process.env.NODE_ENV === \"dev\");\n\nexport async function lsdRenew(\n end: Date | undefined,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n lsdJSON: any,\n deviceIDManager: IDeviceIDManager,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n httpHeaders?: { [key: string]: string; }): Promise<any> {\n\n if (lsdJSON instanceof LSD) {\n return lsdRenew_(end, lsdJSON as LSD, deviceIDManager);\n }\n\n let lsd: LSD | undefined;\n try {\n lsd = TaJsonDeserialize<LSD>(lsdJSON, LSD);\n } catch (err) {\n debug(err);\n debug(lsdJSON);\n return Promise.reject(\"Bad LSD JSON?\");\n }\n\n const obj = lsdRenew_(end, lsd, deviceIDManager, httpHeaders);\n return TaJsonSerialize(obj);\n}\n\nexport async function lsdRenew_(\n end: Date | undefined,\n lsd: LSD,\n deviceIDManager: IDeviceIDManager,\n httpHeaders?: { [key: string]: string; }): Promise<LSD> {\n\n if (!lsd) {\n return Promise.reject(\"LCP LSD data is missing.\");\n }\n if (!lsd.Links) {\n return Promise.reject(\"No LSD links!\");\n }\n\n const licenseRenew = lsd.Links.find((link) => {\n return link.Rel === \"renew\";\n });\n if (!licenseRenew) {\n return Promise.reject(\"No LSD renew link!\");\n }\n\n let deviceID: string;\n try {\n deviceID = await deviceIDManager.getDeviceID();\n } catch (err) {\n debug(err);\n return Promise.reject(\"Problem getting Device ID !?\");\n }\n\n let deviceNAME: string;\n try {\n deviceNAME = await deviceIDManager.getDeviceNAME();\n } catch (err) {\n debug(err);\n return Promise.reject(\"Problem getting Device NAME !?\");\n }\n\n let renewURL: string = licenseRenew.Href;\n if (licenseRenew.Templated) {\n const urlTemplate = new URITemplate(renewURL);\n const uri1 = urlTemplate.expand({ end: \"xxx\", id: deviceID, name: deviceNAME }, { strict: false });\n renewURL = uri1.toString();\n\n const uri2 = new URI(renewURL); // URIjs necessary for .search() to work\n // TODO: urijs types broke this! (lib remains unchanged)\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (uri2 as any).search((data: any) => {\n // overrides existing (leaves others intact)\n data.end = end?.toISOString(); // can be undefined\n });\n renewURL = uri2.toString();\n\n // url = url.replace(\"{?end,id,name}\", \"\"); // TODO: smarter regexp?\n // url = new URI(url).setQuery(\"id\", deviceID).setQuery(\"name\", deviceNAME).toString();\n }\n if (IS_DEV) {\n debug(\"RENEW: \" + renewURL);\n }\n\n return new Promise<LSD>(async (resolve, reject) => {\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const failure = (err: any) => {\n reject(err);\n };\n\n const success = async (response: request.RequestResponse) => {\n\n if (IS_DEV) {\n Object.keys(response.headers).forEach((header: string) => {\n debug(header + \" => \" + response.headers[header]);\n });\n }\n\n if (response.statusCode && (response.statusCode < 200 || response.statusCode >= 300)) {\n let failBuff: Buffer;\n try {\n failBuff = await streamToBufferPromise(response);\n } catch (buffErr) {\n if (IS_DEV) {\n debug(buffErr);\n }\n failure(response.statusCode);\n return;\n }\n try {\n const failStr = failBuff.toString(\"utf8\");\n if (IS_DEV) {\n debug(failStr);\n }\n try {\n const failJson = global.JSON.parse(failStr);\n if (IS_DEV) {\n debug(failJson);\n }\n failJson.httpStatusCode = response.statusCode;\n failure(failJson);\n } catch (jsonErr) {\n if (IS_DEV) {\n debug(jsonErr);\n }\n failure({ httpStatusCode: response.statusCode, httpResponseBody: failStr });\n }\n } catch (strErr) {\n if (IS_DEV) {\n debug(strErr);\n }\n failure(response.statusCode);\n }\n return;\n }\n\n let responseData: Buffer;\n try {\n responseData = await streamToBufferPromise(response);\n } catch (err) {\n reject(err);\n return;\n }\n const responseStr = responseData.toString(\"utf8\");\n if (IS_DEV) {\n debug(responseStr);\n }\n const responseJson = global.JSON.parse(responseStr);\n if (IS_DEV) {\n debug(responseJson);\n }\n\n try {\n const newLsd = TaJsonDeserialize<LSD>(responseJson, LSD);\n if (IS_DEV) {\n debug(newLsd);\n }\n resolve(newLsd);\n } catch (err) {\n debug(err);\n resolve(responseJson);\n }\n };\n\n const headers = Object.assign({\n \"Accept\": \"application/json,application/xml\",\n \"Accept-Language\": \"en-UK,en-US;q=0.7,en;q=0.5\",\n \"User-Agent\": \"Readium2-LCP\",\n }, httpHeaders ? httpHeaders : {});\n\n // No response streaming! :(\n // https://github.com/request/request-promise/issues/90\n const needsStreamingResponse = true;\n if (needsStreamingResponse) {\n request.put({\n headers,\n method: \"PUT\",\n timeout: 5000,\n uri: renewURL,\n })\n .on(\"response\", async (res) => {\n try {\n await success(res);\n }\n catch (successError) {\n failure(successError);\n return;\n }\n })\n .on(\"error\", failure);\n } else {\n let response: requestPromise.FullResponse;\n try {\n // tslint:disable-next-line:await-promise no-floating-promises\n response = await requestPromise({\n headers,\n method: \"PUT\",\n resolveWithFullResponse: true,\n uri: renewURL,\n });\n } catch (err) {\n failure(err);\n return;\n }\n\n await success(response);\n }\n });\n}\n"]}
\No newline at end of file