UNPKG

ara-context

Version:

ARA context to encapsulate things like Web3, etc

74 lines (61 loc) 1.7 kB
const provider = require('eth-provider') const Web3 = require('web3') const rc = require('ara-runtime-configuration')() /** * Creates a `Web3' context for a given optional * provider. This function will attempt to resolve * a provider from the ara-runtime-configuration' * `ararc' file if one is not given. * * @public * @param {?(Object)} opts * @param {?(String|Object)} opts.provider * @return {Web3} * @throws TypeError */ function load(opts) { if (null === opts || (undefined !== opts && 'object' !== typeof opts)) { throw new TypeError('Expecting options to be an object.') } else if ('object' !== typeof opts) { // eslint-disable no-param-reassign opts = {} } opts = { ...opts } if (!opts.provider) { if (false === opts.provider) { return new Web3(provider()) } if (rc.web3 && rc.web3.provider) { opts.provider = rc.web3.provider } if (rc.web3 && rc.web3.network_id) { opts.provider = getProvider(rc.web3) } } if (opts.provider && opts.provider.targets) { const { targets, ..._opts } = opts.provider opts = _opts opts.provider = targets } const providers = Array.isArray(opts.provider) && 1 === opts.provider.length ? opts.provider[0] : opts.provider delete opts.provider return new Web3(provider(providers, opts)) } /** * Returns the provider(s) based on .ararc network id. * @param {Object} web3 * @return {String|Array} */ function getProvider(web3) { const { network_id: networkId } = web3 if (networkId && web3[networkId]) { const ctx = web3[networkId] return ctx.providers || ctx.provider } return web3.provider } module.exports = { load }