UNPKG

run-db

Version:

A local database that indexes jig states from RUN transactions

107 lines (81 loc) 3.08 kB
/** * index.js * * Entry point */ const Indexer = require('./indexer') const Server = require('./server') const { API, DB, NETWORK, PORT, FETCH_LIMIT, WORKERS, MATTERCLOUD_KEY, PLANARIA_TOKEN, START_HEIGHT, MEMPOOL_EXPIRATION, ZMQ_URL, RPC_URL, DEFAULT_TRUSTLIST, DEBUG, SERVE_ONLY } = require('./config') const MatterCloud = require('./mattercloud') const Planaria = require('./planaria') const RunConnectFetcher = require('./run-connect') const BitcoinNodeConnection = require('./bitcoin-node-connection') const BitcoinRpc = require('./bitcoin-rpc') const BitcoinZmq = require('./bitcoin-zmq') const Database = require('./database') const DirectServer = require('./direct-server') // ------------------------------------------------------------------------------------------------ // Globals // ------------------------------------------------------------------------------------------------ const logger = {} logger.info = console.info.bind(console) logger.warn = console.warn.bind(console) logger.error = console.error.bind(console) logger.debug = DEBUG ? console.debug.bind(console) : () => {} let api = null switch (API) { case 'mattercloud': api = new MatterCloud(MATTERCLOUD_KEY, logger); break case 'planaria': api = new Planaria(PLANARIA_TOKEN, logger); break case 'bitcoin-node': if (ZMQ_URL === null) { throw new Error('please specify ZQM_URL when using bitcoin-node API') } if (RPC_URL === null) { throw new Error('please specify RPC_URL when using bitcoin-node API') } api = new BitcoinNodeConnection(new BitcoinZmq(ZMQ_URL), new BitcoinRpc(RPC_URL)) break case 'run': api = new RunConnectFetcher(); break case 'none': api = {}; break default: throw new Error(`Unknown API: ${API}`) } const readonly = !!SERVE_ONLY const database = new Database(DB, logger, readonly) const indexer = new Indexer(database, api, NETWORK, FETCH_LIMIT, WORKERS, logger, START_HEIGHT, MEMPOOL_EXPIRATION, DEFAULT_TRUSTLIST) const server = SERVE_ONLY ? new Server(database, logger, PORT) : new DirectServer(DB, PORT, logger, database) let started = false // ------------------------------------------------------------------------------------------------ // main // ------------------------------------------------------------------------------------------------ async function main () { database.open() if (!SERVE_ONLY) { await indexer.start() } await server.start() started = true } // ------------------------------------------------------------------------------------------------ // shutdown // ------------------------------------------------------------------------------------------------ async function shutdown () { if (!started) return logger.debug('Shutting down') started = false await server.stop() if (!SERVE_ONLY) { await indexer.stop() } await database.close() process.exit(0) } // ------------------------------------------------------------------------------------------------ process.on('SIGTERM', shutdown) process.on('SIGINT', shutdown) main()