# All files / web3-providers-http/src index.js

67.86% Statements 19/28
62.5% Branches 5/8
100% Functions 4/4
67.86% Lines 19/28

    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

    1x
    2x

    2x
    37x
    37x
    37x

    2x
    1x
    1x

    1x
    1x

    1x
    1x
    1x

    1x

    1x

    1x
    1x

    2x
     /*
        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 httpprovider.js
     * @authors:
     *   Marek Kotewicz <marek@parity.io>
     *   Marian Oancea
     *   Fabian Vogelsteller <fabian@ethereum.org>
     * @date 2015
     */

    var errors = require('web3-core-helpers').errors;
    var XHR2 = require('xhr2');

    /**
     * HttpProvider should be used to send rpc calls over http
     */
    var HttpProvider = function HttpProvider(host, timeout) {
        this.host = host || 'http://localhost:8545';
        this.timeout = timeout || 0;
        this.connected = false;
    };

    /**
     * Should be used to make async request
     *
     * @method send
     * @param {Object} payload
     * @param {Function} callback triggered on end with (err, result)
     */
    HttpProvider.prototype.send = function (payload, callback) {
        var _this = this;
        var request = new XHR2();

        request.open('POST', this.host, true);
        request.setRequestHeader('Content-Type','application/json');

        request.onreadystatechange = function() {
            if (request.readyState === 4 && request.timeout !== 1) {
                var result = request.responseText;
                var error = null;

                try {
                    result = JSON.parse(result);
                } catch(e) {
                    error = errors.InvalidResponse(request.responseText);
                }

                _this.connected = true;
                callback(error, result);
            }
        };

        request.ontimeout = function() {
            _this.connected = false;
            callback(errors.ConnectionTimeout(this.timeout));
        };

        try {
            request.send(JSON.stringify(payload));
        } catch(error) {
            this.connected = false;
            callback(errors.InvalidConnection(this.host));
        }
    };

    module.exports = HttpProvider;