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