"use strict"; import fs from 'fs'; import os from 'os'; import log from 'log'; const l = log.get("agent"); import settings from '../../settings.mjs'; import PeerServer from './PeerServer.mjs'; import parse_peer_name from '../parse/peer_name.mjs'; import hostuuid from '../io/hostuuid.mjs'; class Agent { constructor(config) { this.config = config; } async find_secret() { if(this.config.secret_join_filepath !== "CHANGE_ME" && fs.existsSync(this.config.secret_join_filepath)) return await fs.promises.readFile( path.resolve( path.dirname(settings.cli.config), this.config.secret_join_filepath ), "utf-8"); if(this.config.secret_join !== "CHANGE_ME") return this.config.secret_join; return null; } async init() { /** Our peer id - calculated automatically from the system's uuid */ this.peer_id = await hostuuid(); this.peer_name = os.hostname(); this.server = new PeerServer( this.peer_id, await this.find_secret() ); this.server.retries = this.config.net.peer_retries; l.notice(`Starting peer listener....`); await this.server.listen( this.config.net.port, this.config.net.bind_address ); l.notice(`Listening on ${this.config.net.bind_address}:${this.config.net.port}`); await this.server.add_peers(...this.config.peers.map( peer => parse_peer_name(peer) )); l.notice(`Added ${this.config.peers.length} initial peers`); if(this.config.peers.length < 1) l.warn(`No initial peers were specified! It's recommended that you specify at least 1 on every host.`); } } export default Agent;