UNPKG

novel-opds-now

Version:

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

116 lines 5.11 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.connectPeersAll = exports._connectPeers = exports.connectPeers = exports.getPeerCacheKey = exports.peerAbortController = void 0; const tslib_1 = require("tslib"); const logger_1 = (0, tslib_1.__importDefault)(require("debug-color2/logger")); const bluebird_1 = (0, tslib_1.__importDefault)(require("bluebird")); const pubsub_1 = require("./pubsub"); const multiaddr_1 = require("multiaddr"); const abort_controller_timer_1 = (0, tslib_1.__importDefault)(require("abort-controller-timer")); const getMixinPeers_1 = require("./util/getMixinPeers"); const array_hyper_unique_1 = require("array-hyper-unique"); const connectPeersCache = new Set(); exports.peerAbortController = new abort_controller_timer_1.default(); exports.peerAbortController.on('abort', () => logger_1.default.debug(`[IPFS]`, `[connectPeers]`, `aborted`)); function getPeerCacheKey(peerID) { let peer_id = peerID; let _not_multiaddr = true; let peer_addr; try { peer_addr = (0, multiaddr_1.multiaddr)(peerID); peer_id = peer_addr.toString(); _not_multiaddr = false; } catch (e) { peer_id = peerID; } return { peer_id, _not_multiaddr, peer_addr, }; } exports.getPeerCacheKey = getPeerCacheKey; async function connectPeers(ipfs, peerID, me, timeout, extra) { const { peer_id, _not_multiaddr } = getPeerCacheKey(peerID); if (connectPeersCache.has(peer_id)) { return; } return _connectPeers(ipfs, peerID, me !== null && me !== void 0 ? me : ipfs.id({ timeout: 3000, }), timeout, extra); } exports.connectPeers = connectPeers; async function _connectPeers(ipfs, peerID, me, timeout, extra, ...msg) { const { peer_id, _not_multiaddr, peer_addr } = getPeerCacheKey(peerID); connectPeersCache.add(peer_id); return Promise.resolve(me) .then(async (me) => { var _a; let id = me.id; let id2 = (_a = peer_addr === null || peer_addr === void 0 ? void 0 : peer_addr.getPeerId) === null || _a === void 0 ? void 0 : _a.call(peer_addr); connectPeersCache.add(peer_id); if (id === peerID || id2 === id || peer_id.includes(id) || peerID.includes(id)) { return; } const subAbortController = exports.peerAbortController.child(timeout || 3 * 60 * 1000); let options = { signal: subAbortController.signal, }; !(extra === null || extra === void 0 ? void 0 : extra.hidden) && logger_1.default.debug(`[IPFS]`, `[connectPeers]:start`, peerID, ...msg); let list = (0, array_hyper_unique_1.array_unique_overwrite)([ _not_multiaddr && `/p2p/${peerID}`, _not_multiaddr && `/ip4/0.0.0.0/tcp/4001/p2p/${peerID}`, _not_multiaddr && `/ip4/0.0.0.0/tcp/4002/p2p/${peerID}`, !_not_multiaddr && peerID, ].filter(Boolean)); return bluebird_1.default .any(list.map(peerID => ipfs.swarm.connect(peerID, options))) .tap(e => { !(extra === null || extra === void 0 ? void 0 : extra.hidden) && logger_1.default.debug(`[IPFS]`, `[connectPeers]:end`, peerID, String(e), ...msg); }) .finally(() => { subAbortController.abort(); }); }) .catch(e => { !(extra === null || extra === void 0 ? void 0 : extra.hidden) && logger_1.default.warn(`[IPFS]`, `[connectPeers]`, peerID, String(e), ...msg); }); } exports._connectPeers = _connectPeers; function connectPeersAll(ipfs, peers, extra, ...msg) { return bluebird_1.default .props({ me: ipfs.id(), peers, myPeers: (0, pubsub_1.getPubsubPeers)(ipfs), }) .then(({ me, peers, myPeers, }) => { let id = me.id; if (!(peers === null || peers === void 0 ? void 0 : peers.length)) { return; } peers = (0, array_hyper_unique_1.array_unique_overwrite)(peers.map(String).filter(peerID => { var _a; const { peer_id, peer_addr } = getPeerCacheKey(peerID); const id2 = (_a = peer_addr === null || peer_addr === void 0 ? void 0 : peer_addr.getPeerId) === null || _a === void 0 ? void 0 : _a.call(peer_addr); if (myPeers.includes(peer_id) || myPeers.includes(peerID)) { return false; } else if (id2 === id || peer_id.includes(id) || peerID.includes(id)) { return false; } connectPeersCache.add(peer_id); return true; })); if (!(peers === null || peers === void 0 ? void 0 : peers.length)) { return; } return bluebird_1.default.mapSeries(peers, (peerID, index, length) => { return _connectPeers(ipfs, peerID, me, extra === null || extra === void 0 ? void 0 : extra.timeout, extra, `[${index}${length}]`, ...msg); }) .finally(getMixinPeers_1.saveMixinPeers); }); } exports.connectPeersAll = connectPeersAll; //# sourceMappingURL=peer.js.map