UNPKG

novel-opds-now

Version:

按需生成 epub,此模組不使用排程任務來生成 epub

150 lines 6.17 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const tslib_1 = require("tslib"); const express_1 = (0, tslib_1.__importDefault)(require("express")); const path_1 = require("path"); const bluebird_1 = (0, tslib_1.__importDefault)(require("bluebird")); const file_1 = (0, tslib_1.__importDefault)(require("./file")); const __root_1 = (0, tslib_1.__importDefault)(require("../lib/__root")); const serve_favicon_1 = (0, tslib_1.__importDefault)(require("serve-favicon")); const logger_1 = (0, tslib_1.__importDefault)(require("debug-color2/logger")); require("./init"); const opds_1 = (0, tslib_1.__importDefault)(require("./opds")); const search_1 = (0, tslib_1.__importDefault)(require("./search")); const request_ip_1 = require("request-ip"); const express_useragent_1 = require("express-useragent"); const showClient_1 = require("./util/showClient"); const use_1 = require("../lib/ipfs/use"); const ip_1 = require("../lib/ip"); const os_1 = require("os"); const url_1 = require("url"); const address2_1 = (0, tslib_1.__importDefault)(require("address2")); const poke_1 = (0, tslib_1.__importDefault)(require("./router/poke")); const index_1 = require("../lib/ipfs/pubsub/index"); const helmet_1 = (0, tslib_1.__importDefault)(require("helmet")); const index_2 = (0, tslib_1.__importDefault)(require("./router/calibre/index")); const getMixinPeers_1 = require("../lib/ipfs/util/getMixinPeers"); const pokeRoot_1 = require("../lib/ipfs/mfs/pokeRoot"); const processExit_1 = (0, tslib_1.__importDefault)(require("../lib/util/processExit")); const saveMutableFileSystemRoots_1 = require("../lib/ipfs/mfs/saveMutableFileSystemRoots"); const deepEntryListMap_1 = require("../lib/ipfs/mfs/deepEntryListMap"); const app = (0, express_1.default)(); app.use((0, helmet_1.default)({ contentSecurityPolicy: false, referrerPolicy: { policy: "no-referrer" }, })); app.use((0, serve_favicon_1.default)((0, path_1.join)(__root_1.default, 'static', 'favicon.png'))); app.use((0, request_ip_1.mw)()); app.use((0, express_useragent_1.express)()); app.use('/*', (req, res, next) => { (0, getMixinPeers_1.saveMixinPeers)(); (0, pokeRoot_1.pokeRoot)(); next(); }); (0, processExit_1.default)(() => { return Promise.all([ (0, deepEntryListMap_1._saveDeepEntryListMapToFile)(), (0, use_1.getIPFSFromCache)().then(saveMutableFileSystemRoots_1._saveMutableFileSystemRoots).catchReturn(null), ]); }); app.use(index_2.default); app.use('/file', (0, file_1.default)()); app.use('/opds', (0, opds_1.default)()); app.use('/search', (0, search_1.default)()); app.use('/poke', (0, poke_1.default)()); app.use('/*', (req, res, next) => { logger_1.default.log(req.method, req.baseUrl, req.url, req.params, req.query); (0, showClient_1.showClient)(req, res, next); next(); }); app.use('/.status', async (req, res, next) => { logger_1.default.log(req.headers); let url; try { url = new URL('/opds', req.headers.host).href; } catch (e) { } ; if (!url) { url = (req.headers.host || '') + '/opds'; } let isLocal = await Promise.resolve().then(() => (0, ip_1.isLocalNetwork)(req.clientIp)).catch(e => null); let interfaces = isLocal && Promise.resolve().then(() => { let ip = (0, address2_1.default)(); let interfaceName = ip; let port = process.env.PORT; let interfaces = (0, os_1.networkInterfaces)(); Object.entries(interfaces) .forEach(([name, data]) => { let _skip = false; data = data .filter(v => { if (ip && v.address === ip) { interfaceName = name; _skip = true; } else if (v.address === '127.0.0.1' || v.address === '::1') { _skip = true; } return v.address && !_skip; }); if (_skip) { return; } let ls = data .filter(v => { return v.family === 'IPv4'; }); return (ls.length ? ls : data) .forEach(v => { let ip = v.address; return (0, url_1.format)({ protocol: 'http', hostname: ip, port, pathname: '/opds', }); }); }); return interfaces; }).catch(e => null); let ipfs = await (0, use_1.useIPFS)().timeout(3000).then(_cache => { return bluebird_1.default.props({ id: _cache.ipfs.id({ timeout: 3000, }).then(v => { let { id, agentVersion, protocolVersion } = v; return { id, agentVersion, protocolVersion, }; }).catch(e => null), version: _cache.ipfs.version({ timeout: 3000, }).catch(e => null), address: isLocal && bluebird_1.default.resolve(_cache.address()).timeout(3000).catch(e => null), pubsub: (0, index_1.getPubsubPeers)(_cache.ipfs), }); }).catch(e => null); return res.json({ timestamp: Date.now(), live: true, opds: url, opds_qr: 'https://chart.apis.google.com/chart?cht=qr&chs=300x300&chl=' + url, ipfs: await ipfs, interfaces: await interfaces, user: { client: req.clientIp, useragent: req.useragent, headers: req.headers, }, }); }); app.use('/*', (req, res) => { res.writeHead(200, { 'Content-Type': 'text/html; charset=utf-8' }); res.charset = 'utf-8'; let html = ''; res.end(`${html}Welcome to micro<p>請將 <a href="/opds"><script>document.write(window.location.origin + '/opds')</script></a> 加入閱讀器的訂閱內</p><p><script>document.write('<img src="https://chart.apis.google.com/chart?cht=qr&chs=300x300&chl=' + window.location.origin + '/opds"/>')</script></p>`); }); logger_1.default.debug(`server setup ready`); exports.default = app; //# sourceMappingURL=index.js.map