const jsonrpc = {}; jsonrpc.call = function( connectionString, method, params, callback, errorCallback, connectFailedCallback, timeout ) { var xhr = new XMLHttpRequest(); if (typeof connectFailedCallback !== 'undefined') { if (timeout) { xhr.timeout = timeout; } xhr.addEventListener('error', function(e) { connectFailedCallback(e); }); xhr.addEventListener('timeout', function() { connectFailedCallback( new Error(__('XMLHttpRequest connection timed out')) ); }); } xhr.addEventListener('load', function() { var response = JSON.parse(xhr.responseText); if (response.error) { if (errorCallback) { errorCallback(response.error); } else { var errorEvent = new CustomEvent('unhandledError', { detail: { connectionString: connectionString, method: method, params: params, code: response.error.code, message: response.error.message, data: response.error.data } }); document.dispatchEvent(errorEvent); } } else if (callback) { callback(response.result); } }); if (connectFailedCallback) { xhr.addEventListener('error', function(event) { connectFailedCallback(event); }); } else { xhr.addEventListener('error', function(event) { var errorEvent = new CustomEvent('unhandledError', { detail: { connectionString: connectionString, method: method, params: params, code: xhr.status, message: __('Connection to API server failed') } }); document.dispatchEvent(errorEvent); }); } const counter = parseInt(sessionStorage.getItem('JSONRPCCounter') || 0); xhr.open('POST', connectionString, true); xhr.send( JSON.stringify({ jsonrpc: '2.0', method: method, params: params, id: counter }) ); sessionStorage.setItem('JSONRPCCounter', counter + 1); return xhr; }; export default jsonrpc;