const querystring = require('querystring'); const lbryio = {}; const CONNECTION_STRING = 'https://apidev.lbry.tech/'; const mocks = { 'reward_type.get': (name) => { return { name: 'link_github', title: 'Link your GitHub account', description: 'Link LBRY to your GitHub account', value: 50, claimed: false, }; }, 'reward_type.list': () => { return [ { name: 'link_github', title: 'Link your GitHub account', description: 'Link LBRY to your GitHub account', value: 50, claimed: false, }, ]; } }; lbryio.call = function(resource, action, params, method='get') { return new Promise((resolve, reject) => { /* temp code for mocks */ if (`${resource}.${action}` in mocks) { resolve(mocks[`${resource}.${action}`](params)); return; } /* end temp */ console.log('about to create xhr object'); const xhr = new XMLHttpRequest; xhr.addEventListener('error', function (error) { console.log('received XHR error:', error); reject(error); }); console.log('about to add timeout listener'); xhr.addEventListener('timeout', function() { console.log('XHR timed out'); reject(new Error('XMLHttpRequest connection timed out')); }); console.log('about to create load listener'); xhr.addEventListener('load', function() { console.log('loaded'); const response = JSON.parse(xhr.responseText); if (!response.success) { if (reject) { reject(new Error(response.error)); } else { document.dispatchEvent(new CustomEvent('unhandledError', { detail: { connectionString: connectionString, method: action, params: params, message: response.error.message, ... response.error.data ? {data: response.error.data} : {}, } })); } } else { console.info(`${resource}.${action} response data:`, response); resolve(response.data); } }); console.log('about to call xhr.open'); if (method == 'get') { console.info('GET ', CONNECTION_STRING + resource + '/' + action, ' | params:', params); xhr.open('get', CONNECTION_STRING + resource + '/' + action + '?' + querystring.stringify(params), true); xhr.send(); } else if (method == 'post') { console.info('POST ', CONNECTION_STRING + resource + '/' + action, '| params: ', params); xhr.open('post', CONNECTION_STRING + resource + '/' + action, true); xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); xhr.send(querystring.stringify(params)); } }); }; export default lbryio;