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;