# All files / web3-core-requestmanager/src jsonrpc.js

92.31% Statements 12/13
83.33% Branches 10/12
100% Functions 5/5
92.31% Lines 12/13

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90

    1x

    1x
    589x

    589x

    589x

    1x
    588x

    588x

    1x
    6x
    13x

    1x

     /*
        This file is part of web3.js.

        web3.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.

        web3.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 web3.js.  If not, see <http://www.gnu.org/licenses/>.
    */
    /** @file jsonrpc.js
     * @authors:
     *   Fabian Vogelsteller <fabian@ethereum.org>
     *   Marek Kotewicz <marek@ethdev.com>
     *   Aaron Kumavis <aaron@kumavis.me>
     * @date 2015
     */

    "use strict";

    // Initialize Jsonrpc as a simple object with utility functions.
    var Jsonrpc = {
        messageId: 0
    };

    /**
     * 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.toPayload = function (method, params) {
        Iif (!method) {
            throw new Error('JSONRPC method should be specified for params: "'+ JSON.stringify(params) +'"!');
        }

        // advance message ID
        Jsonrpc.messageId++;

        return {
            jsonrpc: '2.0',
            id: Jsonrpc.messageId,
            method: method,
            params: params || []
        };
    };

    /**
     * Should be called to check if jsonrpc response is valid
     *
     * @method isValidResponse
     * @param {Object}
     * @returns {Boolean} true if response is valid, otherwise false
     */
    Jsonrpc.isValidResponse = function (response) {
        return Array.isArray(response) ? response.every(validateSingleMessage) : validateSingleMessage(response);

        function validateSingleMessage(message){
          return !!message &&
            !message.error &&
            message.jsonrpc === '2.0' &&
            (typeof message.id === 'number' || typeof message.id === 'string') &&
            message.result !== undefined; // only undefined is not valid json object
        }
    };

    /**
     * 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.toBatchPayload = function (messages) {
        return messages.map(function (message) {
            return Jsonrpc.toPayload(message.method, message.params);
        });
    };

    module.exports = Jsonrpc;