Eddie Wang 980366694c RPC Error Handling (#384)
* create ensureOkResponse and check against RPC responses

* Merge with develop branch

* added single unit test

* main nodes added

* getBalance method

* remove console.log

* minor conflict fix - readd polyfill to integration test

* added two more method tests

* seperate rpcnode from extended classes

* fixes etherscan

* added all tests

* revert files with only formatting changes

* remove console.logs - still need to update snapshot before tests will pass

* updated snapshot due to RpcNode fixes for Infura and Etherscan nodes

* added RpcNodeTest config so we don't rely on constants in code

* undo formatting changes

* Multiple fixes to error handling tokens.

* Fixed TSC errors

* Minor styling edit - change async func to promise

* changed shape of tokenBalances

* change balance type back to stricter TokenValue type

* remove package.json change and include test for error state.

* minor change removing unneeded line of code

* added longer timeout for api

* update snapshot
2017-11-29 23:35:17 -06:00

30 lines
937 B
TypeScript

import RPCClient from '../rpc/client';
import { JsonRpcResponse } from '../rpc/types';
import { EtherscanRequest } from './types';
export default class EtherscanClient extends RPCClient {
public encodeRequest(request: EtherscanRequest): string {
const encoded = new URLSearchParams();
Object.keys(request).forEach(key => {
if (request[key]) {
encoded.set(key, request[key]);
}
});
return encoded.toString();
}
public call = (request: EtherscanRequest): Promise<JsonRpcResponse> =>
fetch(this.endpoint, {
method: 'POST',
headers: new Headers({
'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'
}),
body: this.encodeRequest(request)
}).then(r => r.json());
public batch = (requests: EtherscanRequest[]): Promise<JsonRpcResponse[]> => {
const promises = requests.map(req => this.call(req));
return Promise.all(promises);
};
}