| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980 |
- const pull = require('./node_modules/pull-stream');
- const Ref = require('./node_modules/ssb-ref');
- const fs = require('fs');
- const path = require('path');
- const staged = new Set();
- function readOasisConfig() {
- try {
- const p = path.join(__dirname, '..', 'configs', 'oasis-config.json');
- return JSON.parse(fs.readFileSync(p, 'utf8')) || {};
- } catch (_) { return {}; }
- }
- function stagePeer(ssb, address, key, eagerReplicate) {
- if (!address || !key || key === ssb.id) return;
- if (staged.has(address)) return;
- staged.add(address);
- let routed = false;
- try {
- if (ssb.conn && typeof ssb.conn.stage === 'function') {
- ssb.conn.stage(address, { type: 'lan', key });
- routed = true;
- }
- } catch (_) {}
- if (!routed) {
- try {
- if (ssb.gossip && typeof ssb.gossip.add === 'function') {
- ssb.gossip.add(address, 'local');
- }
- } catch (_) {}
- }
- if (eagerReplicate) {
- try {
- if (ssb.ebt && typeof ssb.ebt.request === 'function') {
- ssb.ebt.request(key, true);
- }
- } catch (_) {}
- try {
- if (ssb.replicate && typeof ssb.replicate.request === 'function') {
- ssb.replicate.request(key, true);
- }
- } catch (_) {}
- }
- }
- function handleDiscovery(ssb, d, opts) {
- if (!d || !d.address) return;
- if (!d.verified && !opts.acceptUnverified) return;
- let key = null;
- try { key = Ref.getKeyFromAddress(d.address); } catch (_) {}
- if (key) stagePeer(ssb, d.address, key, opts.eagerReplicate);
- }
- function startRouter(ssb, opts) {
- if (!ssb.lan || typeof ssb.lan.discoveredPeers !== 'function') return;
- const oasisCfg = readOasisConfig();
- if (oasisCfg.lanBroadcasting === false) return;
- try { ssb.lan.start(); } catch (_) {}
- pull(
- ssb.lan.discoveredPeers(),
- pull.drain(d => handleDiscovery(ssb, d, opts), () => {})
- );
- }
- module.exports = {
- name: 'lanRouter',
- version: '1.1.0',
- manifest: {},
- init(ssb, config) {
- const lanCfg = (config && config.lan) || {};
- const opts = {
- acceptUnverified: lanCfg.acceptUnverified === true,
- eagerReplicate: lanCfg.eagerReplicate === true
- };
- setImmediate(() => startRouter(ssb, opts));
- return {};
- }
- };
|