UNPKG

14.6 kBSource Map (JSON)View Raw
1{"version":3,"file":"status-document-processing.js","sourceRoot":"","sources":["../../../../src/lsd/status-document-processing.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 { LCP } from \"../parser/epub/lcp\";\nimport { LSD, StatusEnum } from \"../parser/epub/lsd\";\nimport { TaJsonDeserialize } from \"../serializable\";\nimport { IDeviceIDManager } from \"./deviceid-manager\";\nimport { lsdLcpUpdate } from \"./lcpl-update\";\nimport { lsdRegister_ } from \"./register\";\n\nconst debug = debug_(\"r2:lcp#lsd/status-document-processing\");\n\nconst IS_DEV = (process.env.NODE_ENV === \"development\" || process.env.NODE_ENV === \"dev\");\n\nexport async function launchStatusDocumentProcessing(\n lcp: LCP,\n deviceIDManager: IDeviceIDManager,\n onStatusDocumentProcessingComplete: (licenseUpdateJson: string | undefined) => void,\n httpHeaders?: { [key: string]: string; }) {\n\n if (!lcp || !lcp.Links) {\n if (onStatusDocumentProcessingComplete) {\n onStatusDocumentProcessingComplete(undefined);\n }\n return;\n }\n const linkStatus = lcp.Links.find((link) => {\n return link.Rel === \"status\";\n });\n if (!linkStatus) {\n if (onStatusDocumentProcessingComplete) {\n onStatusDocumentProcessingComplete(undefined);\n }\n return;\n }\n\n if (IS_DEV) {\n debug(linkStatus);\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const failure = (err: any) => {\n debug(err);\n if (onStatusDocumentProcessingComplete) {\n onStatusDocumentProcessingComplete(undefined);\n }\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 debug(err);\n if (onStatusDocumentProcessingComplete) {\n onStatusDocumentProcessingComplete(undefined);\n }\n return;\n }\n const responseStr = responseData.toString(\"utf8\");\n\n // https://github.com/readium/readium-lcp-specs/issues/15#issuecomment-358247286\n // application/vnd.readium.lcp.license-1.0+json (LEGACY)\n // application/vnd.readium.lcp.license.v1.0+json (NEW)\n // application/vnd.readium.license.status.v1.0+json (LSD)\n const mime = \"application/vnd.readium.license.status.v1.0+json\";\n if (IS_DEV) {\n if (response.headers[\"content-type\"] === mime ||\n response.headers[\"content-type\"] === \"application/json\") {\n debug(responseStr);\n }\n }\n const lsdJSON = global.JSON.parse(responseStr);\n if (IS_DEV) {\n debug(lsdJSON);\n }\n\n try {\n lcp.LSD = TaJsonDeserialize<LSD>(lsdJSON, LSD);\n if (IS_DEV) {\n debug(lcp.LSD);\n }\n } catch (err) {\n debug(err);\n if (onStatusDocumentProcessingComplete) {\n onStatusDocumentProcessingComplete(undefined);\n }\n return;\n }\n\n // debug(lsdJson.id);\n // debug(lsdJson.status); // revoked, returned, cancelled, expired\n // debug(lsdJson.message);\n // if (lsdJson.updated) {\n // debug(lsdJson.updated.license);\n // debug(lsdJson.updated.status);\n // }\n // if (lsdJson.links) {\n // lsdJson.links.forEach((link: any) => {\n // debug(link.rel); // license, register, return, renew\n // debug(link.href);\n // debug(link.type);\n // debug(link.templated);\n // debug(link.title);\n // debug(link.profile);\n // });\n // }\n // if (lsdJson.potential_rights) {\n // debug(lsdJson.potential_rights.end);\n // }\n // if (lsdJson.events) {\n // lsdJson.events.forEach((event: any) => {\n // debug(event.type);\n // debug(event.name);\n // debug(event.timestamp); // ISO 8601 time and date\n // debug(event.id);\n // });\n // }\n\n let licenseUpdateResponseJson: string | undefined;\n try {\n licenseUpdateResponseJson = await lsdLcpUpdate(lcp, httpHeaders);\n } catch (err) {\n debug(err);\n // if (onStatusDocumentProcessingComplete) {\n // onStatusDocumentProcessingComplete();\n // }\n // return;\n }\n if (licenseUpdateResponseJson) {\n if (onStatusDocumentProcessingComplete) {\n onStatusDocumentProcessingComplete(licenseUpdateResponseJson);\n }\n return;\n }\n\n // lcp.LSD.Status !== StatusEnum.Active && lcp.LSD.Status !== StatusEnum.Ready\n if (lcp.LSD.Status === StatusEnum.Revoked\n || lcp.LSD.Status === StatusEnum.Returned\n || lcp.LSD.Status === StatusEnum.Cancelled\n || lcp.LSD.Status === StatusEnum.Expired) {\n\n debug(\"What?! LSD status:\" + lcp.LSD.Status);\n // This should really never happen,\n // as the LCP license should not even have passed validation\n // due to expired end date / timestamp\n if (onStatusDocumentProcessingComplete) {\n onStatusDocumentProcessingComplete(undefined);\n }\n return;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n let registerResponse: any;\n try {\n registerResponse = await lsdRegister_(lcp.LSD, deviceIDManager, httpHeaders);\n } catch (err) {\n debug(err);\n }\n if (registerResponse) {\n lcp.LSD = registerResponse;\n if (IS_DEV) {\n debug(lcp.LSD);\n }\n }\n if (onStatusDocumentProcessingComplete) {\n onStatusDocumentProcessingComplete(undefined);\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.get({\n headers,\n method: \"GET\",\n timeout: 2000,\n uri: linkStatus.Href,\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: \"GET\",\n resolveWithFullResponse: true,\n uri: linkStatus.Href,\n });\n } catch (err) {\n failure(err);\n return;\n }\n\n await success(response);\n }\n}\n"]}
\No newline at end of file