UNPKG

11.4 kBSource Map (JSON)View Raw
1{"version":3,"file":"publication-download.js","sourceRoot":"","sources":["../../../src/publication-download.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 fs from \"fs\";\nimport * as path from \"path\";\nimport * as request from \"request\";\nimport * as requestPromise from \"request-promise-native\";\n\nimport { streamToBufferPromise } from \"@r2-utils-js/_utils/stream/BufferUtils\";\nimport { injectFileInZip } from \"@r2-utils-js/_utils/zip/zipInjector\";\n\nimport { LCP } from \"./parser/epub/lcp\";\nimport { TaJsonDeserialize } from \"./serializable\";\n\nconst debug = debug_(\"r2:lcp#publication-download\");\n\nconst IS_DEV = (process.env.NODE_ENV === \"development\" || process.env.NODE_ENV === \"dev\");\n\nexport async function downloadEPUBFromLCPL(filePath: string, dir: string, destFileName: string): Promise<string[]> {\n\n return new Promise<string[]>(async (resolve, reject) => {\n\n const lcplStr = fs.readFileSync(filePath, { encoding: \"utf8\" });\n // debug(lcplStr);\n const lcplJson = global.JSON.parse(lcplStr);\n const lcpl = TaJsonDeserialize<LCP>(lcplJson, LCP);\n if (lcpl.Links) {\n const pubLink = lcpl.Links.find((link) => {\n return link.Rel === \"publication\";\n });\n if (pubLink) {\n\n const isAudio = pubLink.Type === \"application/audiobook+zip\";\n const isAudioLcp = pubLink.Type === \"application/audiobook+lcp\";\n\n const ext = isAudio ? \".audiobook\" : (isAudioLcp ? \".lcpa\" : \".epub\");\n\n const destPathTMP = path.join(dir, destFileName + \".tmp\");\n const destPathFINAL = path.join(dir, destFileName + ext);\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const failure = (err: any) => {\n debug(err);\n reject(pubLink.Href + \" (\" + err + \")\");\n };\n\n const success = async (response: request.RequestResponse) => {\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 const destStreamTMP = fs.createWriteStream(destPathTMP);\n response.pipe(destStreamTMP);\n // response.on(\"end\", () => {\n // });\n destStreamTMP.on(\"finish\", () => {\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const zipError = (err: any) => {\n debug(err);\n reject(destPathTMP + \" (\" + err + \")\");\n };\n\n const doneCallback = () => {\n setTimeout(() => {\n fs.unlinkSync(destPathTMP);\n }, 1000);\n\n resolve([destPathFINAL, pubLink.Href]);\n };\n\n const zipEntryPath = (isAudio || isAudioLcp) ? \"license.lcpl\" : \"META-INF/license.lcpl\";\n\n injectFileInZip(destPathTMP, destPathFINAL, filePath, zipEntryPath, zipError, doneCallback);\n });\n };\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: 5000,\n uri: pubLink.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: pubLink.Href,\n });\n } catch (err) {\n failure(err);\n return;\n }\n\n await success(response);\n }\n }\n }\n });\n}\n"]}
\No newline at end of file