UNPKG

1.54 kBJavaScriptView Raw
1const superagent = require('superagent');
2const BaseProvider = require('./BaseProvider');
3
4/**
5 * Http protocol json rpc provider.
6 */
7class HttpProvider extends BaseProvider {
8 /**
9 * @param url {string} - Full json rpc http url
10 * @param [options] {object} - See `BaseProvider.constructor`
11 * @return {HttpProvider}
12 *
13 * @example
14 * > const provider = new HttpProvider('http://testnet-jsonrpc.conflux-chain.org:12537', {logger: console});
15 */
16 // eslint-disable-next-line no-useless-constructor
17 constructor(url, options) {
18 super(url, options);
19 }
20
21 /**
22 * Call a json rpc method with params
23 *
24 * @param method {string} - Json rpc method name.
25 * @param [params] {array} - Json rpc method params.
26 * @return {Promise<*>} Json rpc method return value.
27 *
28 * @example
29 * > await provider.call('cfx_epochNumber');
30 * > await provider.call('cfx_getBlockByHash', blockHash);
31 */
32 async call(method, ...params) {
33 const startTime = Date.now();
34
35 const data = { jsonrpc: '2.0', id: this.requestId(), method, params };
36
37 const { body: { result, error } = {} } = await superagent
38 .post(this.url)
39 .send(data)
40 .timeout(this.timeout);
41
42 if (error) {
43 this.logger.error({ data, error, duration: Date.now() - startTime });
44 throw new BaseProvider.RPCError(error);
45 } else {
46 this.logger.info({ data, result, duration: Date.now() - startTime });
47 }
48
49 return result;
50 }
51}
52
53module.exports = HttpProvider;