web3.js/lib/web3/jsonrpc.js

92 lines
2.5 KiB
JavaScript
Raw Normal View History

2015-02-03 13:24:17 -08:00
/*
This file is part of ethereum.js.
ethereum.js is free software: you can redistribute it and/or modify
it under the terms of the GNU Lesser General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
ethereum.js is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public License
along with ethereum.js. If not, see <http://www.gnu.org/licenses/>.
*/
/** @file jsonrpc.js
* @authors:
* Marek Kotewicz <marek@ethdev.com>
* @date 2015
*/
2015-03-21 15:34:24 -07:00
var Jsonrpc = function () {
2015-03-26 07:43:35 -07:00
// singleton pattern
if (arguments.callee._singletonInstance) {
return arguments.callee._singletonInstance;
}
2015-03-28 06:38:56 -07:00
arguments.callee._singletonInstance = this;
2015-03-21 15:34:24 -07:00
this.messageId = 1;
};
2015-02-03 13:24:17 -08:00
2015-03-26 07:43:35 -07:00
/**
* @return {Jsonrpc} singleton
*/
Jsonrpc.getInstance = function () {
var instance = new Jsonrpc();
return instance;
};
2015-03-21 15:34:24 -07:00
/**
* Should be called to valid json create payload object
*
* @method toPayload
* @param {Function} method of jsonrpc call, required
* @param {Array} params, an array of method params, optional
* @returns {Object} valid jsonrpc payload object
*/
Jsonrpc.prototype.toPayload = function (method, params) {
2015-02-03 13:24:17 -08:00
if (!method)
console.error('jsonrpc method should be specified!');
return {
jsonrpc: '2.0',
method: method,
params: params || [],
2015-03-21 15:34:24 -07:00
id: this.messageId++
2015-03-27 15:32:52 -07:00
};
2015-02-03 13:24:17 -08:00
};
2015-03-21 15:34:24 -07:00
/**
* Should be called to check if jsonrpc response is valid
*
* @method isValidResponse
* @param {Object}
2015-03-27 15:32:52 -07:00
* @returns {Boolean} true if response is valid, otherwise false
2015-03-21 15:34:24 -07:00
*/
Jsonrpc.prototype.isValidResponse = function (response) {
return !!response &&
!response.error &&
response.jsonrpc === '2.0' &&
typeof response.id === 'number' &&
response.result !== undefined; // only undefined is not valid json object
2015-02-03 13:24:17 -08:00
};
2015-03-21 15:34:24 -07:00
/**
* Should be called to create batch payload object
*
* @method toBatchPayload
* @param {Array} messages, an array of objects with method (required) and params (optional) fields
* @returns {Array} batch payload
*/
Jsonrpc.prototype.toBatchPayload = function (messages) {
var self = this;
2015-02-03 13:24:17 -08:00
return messages.map(function (message) {
2015-03-21 15:34:24 -07:00
return self.toPayload(message.method, message.params);
2015-03-27 15:32:52 -07:00
});
2015-02-03 13:24:17 -08:00
};
2015-03-21 15:34:24 -07:00
module.exports = Jsonrpc;
2015-02-03 13:24:17 -08:00