import lbry from './lbry.js'; var lighthouse = { _query_timeout: 5000, _max_query_tries: 5, servers: [ 'http://lighthouse4.lbry.io:50005', 'http://lighthouse5.lbry.io:50005', 'http://lighthouse6.lbry.io:50005', ], path: '/', call: function(method, params, callback, errorCallback, connectFailedCallback, timeout) { const handleConnectFailed = function(tryNum=0) { if (tryNum > lighthouse._max_query_tries) { if (connectFailedCallback) { connectFailedCallback(); } else { throw new Error(`Could not connect to Lighthouse server. Last server attempted: ${lighthouse.server}`); } } else { lbry.call(method, params, callback, errorCallback, () => { handleConnectFailed(tryNum + 1) }, timeout); } } // Set the Lighthouse server if it hasn't been set yet, or if the current server is not in // the current set of servers (most likely because of a settings change). if (typeof lighthouse.server === 'undefined' || lighthouse.getServers().indexOf(lighthouse.server) == -1) { lighthouse.chooseNewServer(); } lbry.jsonrpc_call(this.server + this.path, method, params, callback, errorCallback, () => { handleConnectFailed() }, timeout || lighthouse.query_timeout); }, getServers: function() { return lbry.getClientSetting('useCustomLighthouseServers') ? lbry.getClientSetting('customLighthouseServers') : lighthouse.servers; }, chooseNewServer: function() { // Randomly choose a new Lighthouse server and switch to it. If a server is already set, this // will choose a different one (used for switching servers after a failed query). const servers = lighthouse.getServers(); let newServerChoices; if (!lighthouse.server) { newServerChoices = servers; } else { newServerChoices = lighthouse.getServers().slice(); newServerChoices.splice(newServerChoices.indexOf(lighthouse.server), 1); } lighthouse.server = newServerChoices[Math.round(Math.random() * (newServerChoices.length - 1))]; }, search: function(query, callback, errorCallback, connectFailedCallback, timeout) { lighthouse.call('search', [query], callback, errorCallback, connectFailedCallback, timeout); }, getSizeForName: function(name, callback, errorCallback, connectFailedCallback, timeout) { lighthouse.call('get_size_for_name', [name], callback, errorCallback, connectFailedCallback, timeout); } }; export default lighthouse;