Skip to content

Commit

Permalink
add keep-alive http to axios
Browse files Browse the repository at this point in the history
  • Loading branch information
Samuel Sramko committed Aug 16, 2021
1 parent 56196e9 commit 440e089
Show file tree
Hide file tree
Showing 8 changed files with 103 additions and 104 deletions.
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@tatumio/tatum",
"version": "1.19.14",
"version": "1.19.15",
"description": "Tatum API client allows browsers and Node.js clients to interact with Tatum API.",
"main": "dist/src/index.js",
"repository": "https://github.com/tatumio/tatum-js",
Expand Down
23 changes: 15 additions & 8 deletions src/connector/tatum.ts
Original file line number Diff line number Diff line change
@@ -1,18 +1,25 @@
import axios from 'axios'
import axiosRetry, { isNetworkOrIdempotentRequestError } from 'axios-retry'
import { plainToClass } from 'class-transformer'
import { ClassType } from 'class-transformer/ClassTransformer'
import { validateOrReject } from 'class-validator'
import { TATUM_API_URL, TATUM_RETRIES, TATUM_RETRY_DELAY } from '../constants'
import a from 'axios';
import axiosRetry, {isNetworkOrIdempotentRequestError} from 'axios-retry';
import {plainToClass} from 'class-transformer';
import {ClassType} from 'class-transformer/ClassTransformer';
import {validateOrReject} from 'class-validator';
import http from 'http';
import https from 'https';
import {TATUM_API_URL, TATUM_RETRIES, TATUM_RETRY_DELAY} from '../constants';

export const axios = a.create({
httpAgent: new http.Agent({keepAlive: true}),
httpsAgent: new https.Agent({keepAlive: true})
});

// In case of 429 Too Many Requests response error, request is triggered again
axiosRetry(axios, {
retryDelay: () => process.env.TATUM_RETRY_DELAY ? Number(process.env.TATUM_RETRY_DELAY) : TATUM_RETRY_DELAY,
retries: process.env.TATUM_RETRIES ? Number(process.env.TATUM_RETRIES) : TATUM_RETRIES,
retryCondition: (error) => isNetworkOrIdempotentRequestError(error) || error?.response?.status === 429
})
});

const baseUrl = () => process.env.TATUM_API_URL || TATUM_API_URL
const baseUrl = () => process.env.TATUM_API_URL || TATUM_API_URL;

const headers = () => ({ headers: { 'x-api-key': process.env.TATUM_API_KEY } })

Expand Down
66 changes: 32 additions & 34 deletions src/transaction/egld.ts
Original file line number Diff line number Diff line change
@@ -1,43 +1,41 @@
import axios from 'axios'
import {BigNumber} from 'bignumber.js'
import * as tweetnacl from 'tweetnacl'
import Web3 from 'web3'
import {TransactionConfig} from 'web3-core'
import {egldBroadcast, egldGetTransactionsCount, egldEstimateGas} from '../blockchain'
import {validateBody} from '../connector/tatum'
import {TATUM_API_URL, ESDT_SYSTEM_SMART_CONTRACT_ADDRESS} from '../constants'
import {BigNumber} from 'bignumber.js';
import * as tweetnacl from 'tweetnacl';
import Web3 from 'web3';
import {TransactionConfig} from 'web3-core';
import {egldBroadcast, egldEstimateGas, egldGetTransactionsCount} from '../blockchain';
import {axios, validateBody} from '../connector/tatum';
import {ESDT_SYSTEM_SMART_CONTRACT_ADDRESS, TATUM_API_URL} from '../constants';
import {
// CreateRecord,
Currency,
EgldEsdtTransaction,
EgldSendTransaction,
EsdtToken,
EsdtIssue,
EsdtTransfer,
EsdtMint,
EsdtFreezeOrWipeOrOwnership,
EsdtSpecialRole,
EsdtAddOrBurnNftQuantity,
EsdtControlChanges,
EsdtIssueNftOrSft,
EsdtCreateNftOrSft,
EsdtTransferNftCreateRole,
EsdtAddOrBurnNftQuantity,
EsdtFreezeOrWipeNft,
EsdtFreezeOrWipeOrOwnership,
EsdtIssue,
EsdtIssueNftOrSft,
EsdtMint,
EsdtSpecialRole,
EsdtToken,
EsdtTransfer,
EsdtTransferNft,
EgldEsdtTransaction,
EsdtTransferNftCreateRole,
Fee,
TransactionKMS,
} from '../model'
import {generateAddressFromPrivatekey} from '../wallet/address'
} from '../model';
import {generateAddressFromPrivatekey} from '../wallet/address';

const ELROND_V3_ENDPOINT = `${TATUM_API_URL}/v3/egld/web3/${process.env.TATUM_API_KEY}`
const ELROND_V3_ENDPOINT = `${TATUM_API_URL}/v3/egld/web3/${process.env.TATUM_API_KEY}`;

/**
* Get Elrond network config
*/
export const egldGetConfig = async () => {
const gasStationUrl = await getEgldClient('https://api.elrond.com') // TODO: use TATUM API endpoint
const gasStationUrl = await getEgldClient('https://api.elrond.com'); // TODO: use TATUM API endpoint
try {
const {data} = await axios.get(`${gasStationUrl}/network/config`)
const {data} = await axios.get(`${gasStationUrl}/network/config`);
return data
} catch (e) {
console.error(e.toString())
Expand Down Expand Up @@ -393,7 +391,7 @@ const prepareSignedTransactionAbstraction = async (
const gasPrice = fee?.gasPrice ? new BigNumber(fee?.gasPrice as string).toNumber() : config?.erd_min_gas_price || 1000000000
const sender = await generateAddressFromPrivatekey(Currency.EGLD, false, fromPrivateKey as string)
const nonce = transaction.nonce ? transaction.nonce as number : await egldGetTransactionsCount(sender as string)

const egldTx: EgldSendTransaction = {
nonce,
value: new BigNumber(transaction.value as string).isLessThan(0) ? '0' : new BigNumber(transaction.value as string).multipliedBy(1e18).toString(),
Expand All @@ -403,7 +401,7 @@ const prepareSignedTransactionAbstraction = async (
gasLimit: new BigNumber(fee?.gasLimit as string).toNumber(),
data: transaction.data,
chainID: config.erd_chain_id,
version: config.erd_min_transaction_version,
version: config.erd_min_transaction_version,
signature: signatureId,
}

Expand Down Expand Up @@ -434,7 +432,7 @@ export const prepareEgldDeployEsdtSignedTransaction = async (body: EgldEsdtTrans
} = body

const client = getEgldClient(provider)

const value = amount ? new BigNumber(amount).toNumber() : 0.05
const gasLimit = fee?.gasLimit ? fee.gasLimit : '60000000'

Expand Down Expand Up @@ -667,7 +665,7 @@ export const prepareEgldDeployNftOrSftSignedTransaction = async (body: EgldEsdtT
} = body

const client = getEgldClient(provider)

const value = amount ? new BigNumber(amount).toNumber() : 0.05
const gasLimit = fee?.gasLimit ? fee.gasLimit : '60000000'

Expand Down Expand Up @@ -701,7 +699,7 @@ export const prepareEgldCreateNftOrSftSignedTransaction = async (body: EgldEsdtT
} = body

const client = getEgldClient(provider)

const value = amount ? new BigNumber(amount).toNumber() : 0
const sender = await generateAddressFromPrivatekey(Currency.EGLD, false, fromPrivateKey as string)

Expand Down Expand Up @@ -737,7 +735,7 @@ export const prepareEgldTransferNftCreateRoleSignedTransaction = async (body: Eg
} = body

const client = getEgldClient(provider)

const value = amount ? new BigNumber(amount).toNumber() : 0

const tx: TransactionConfig = {
Expand Down Expand Up @@ -772,7 +770,7 @@ export const prepareEgldStopNftCreateSignedTransaction = async (body: EgldEsdtTr
} = body

const client = getEgldClient(provider)

const value = amount ? new BigNumber(amount).toNumber() : 0
const gasLimit = fee?.gasLimit ? fee.gasLimit : '60000000'

Expand Down Expand Up @@ -805,7 +803,7 @@ export const prepareEgldAddOrBurnNftQuantitySignedTransaction = async (body: Egl
} = body

const client = getEgldClient(provider)

const value = amount ? new BigNumber(amount).toNumber() : 0
const gasLimit = fee?.gasLimit ? fee.gasLimit : '10000000'
const sender = await generateAddressFromPrivatekey(Currency.EGLD, false, fromPrivateKey as string)
Expand Down Expand Up @@ -839,7 +837,7 @@ export const prepareEgldFreezeNftSignedTransaction = async (body: EgldEsdtTransa
} = body

const client = getEgldClient(provider)

const value = amount ? new BigNumber(amount).toNumber() : 0
const gasLimit = fee?.gasLimit ? fee.gasLimit : '60000000'

Expand Down Expand Up @@ -872,7 +870,7 @@ export const prepareEgldTransferNftSignedTransaction = async (body: EgldEsdtTran
} = body

const client = getEgldClient(provider)

const value = amount ? new BigNumber(amount).toNumber() : 0
const sender = await generateAddressFromPrivatekey(Currency.EGLD, false, fromPrivateKey as string)

Expand Down
39 changes: 19 additions & 20 deletions src/transaction/eth.ts
Original file line number Diff line number Diff line change
@@ -1,19 +1,18 @@
import axios from 'axios'
import {BigNumber} from 'bignumber.js'
import Web3 from 'web3'
import {TransactionConfig} from 'web3-core'
import {toWei} from 'web3-utils'
import {ethBroadcast, ethGetTransactionsCount} from '../blockchain'
import {validateBody} from '../connector/tatum'
import {CONTRACT_ADDRESSES, CONTRACT_DECIMALS, TATUM_API_URL, TRANSFER_METHOD_ABI} from '../constants'
import erc1155TokenABI from '../contracts/erc1155/erc1155_abi'
import erc1155TokenBytecode from '../contracts/erc1155/erc1155_bytecode'
import erc20_abi from '../contracts/erc20/token_abi'
import erc20TokenABI from '../contracts/erc20/token_abi'
import erc20TokenBytecode from '../contracts/erc20/token_bytecode'
import erc721TokenABI from '../contracts/erc721/erc721_abi'
import erc721TokenBytecode from '../contracts/erc721/erc721_bytecode'
import * as listing from '../contracts/marketplace'
import {BigNumber} from 'bignumber.js';
import Web3 from 'web3';
import {TransactionConfig} from 'web3-core';
import {toWei} from 'web3-utils';
import {ethBroadcast, ethGetTransactionsCount} from '../blockchain';
import {axios, validateBody} from '../connector/tatum';
import {CONTRACT_ADDRESSES, CONTRACT_DECIMALS, TATUM_API_URL, TRANSFER_METHOD_ABI} from '../constants';
import erc1155TokenABI from '../contracts/erc1155/erc1155_abi';
import erc1155TokenBytecode from '../contracts/erc1155/erc1155_bytecode';
import erc20_abi from '../contracts/erc20/token_abi';
import erc20TokenABI from '../contracts/erc20/token_abi';
import erc20TokenBytecode from '../contracts/erc20/token_bytecode';
import erc721TokenABI from '../contracts/erc721/erc721_abi';
import erc721TokenBytecode from '../contracts/erc721/erc721_bytecode';
import * as listing from '../contracts/marketplace';
import {
BurnErc20,
CreateRecord,
Expand Down Expand Up @@ -41,16 +40,16 @@ import {
TransferMultiToken,
TransferMultiTokenBatch,
UpdateCashbackErc721,
} from '../model'
import {obtainCustodialAddressType} from '../wallet'
} from '../model';
import {obtainCustodialAddressType} from '../wallet';

/**
* Estimate Gas price for the transaction.
*/
export const ethGetGasPriceInWei = async () => {
let gasStationUrl = 'https://ethgasstation.info/json/ethgasAPI.json'
let gasStationUrl = 'https://ethgasstation.info/json/ethgasAPI.json';
if (process.env.TATUM_GAS_STATION_API_KEY) {
gasStationUrl = `${gasStationUrl}?apiKey=${process.env.TATUM_GAS_STATION_API_KEY}`
gasStationUrl = `${gasStationUrl}?apiKey=${process.env.TATUM_GAS_STATION_API_KEY}`;
}
const data = await Promise.all([
axios.get(gasStationUrl.toString())
Expand Down
3 changes: 1 addition & 2 deletions src/transaction/polygon.ts
Original file line number Diff line number Diff line change
@@ -1,10 +1,9 @@
import axios from 'axios';
import {BigNumber} from 'bignumber.js';
import Web3 from 'web3';
import {TransactionConfig} from 'web3-core';
import {toWei} from 'web3-utils';
import {polygonBroadcast} from '../blockchain';
import {validateBody} from '../connector/tatum';
import {axios, validateBody} from '../connector/tatum';
import {CONTRACT_ADDRESSES, CONTRACT_DECIMALS, TATUM_API_URL, TRANSFER_METHOD_ABI} from '../constants';
import erc1155TokenABI from '../contracts/erc1155/erc1155_abi';
import erc1155TokenBytecode from '../contracts/erc1155/erc1155_bytecode';
Expand Down
10 changes: 4 additions & 6 deletions src/transaction/quorum.ts
Original file line number Diff line number Diff line change
@@ -1,8 +1,6 @@
import axios from 'axios'
import {isHex, stringToHex, toHex} from 'web3-utils'
import { validateBody } from '../connector/tatum'
import {CreateRecord} from '../model'
import {TransferQuorum} from '../model'
import {isHex, stringToHex, toHex} from 'web3-utils';
import {axios, validateBody} from '../connector/tatum';
import {CreateRecord, TransferQuorum} from '../model';

/**
* Send Quorum store data transaction to the blockchain.
Expand All @@ -12,7 +10,7 @@ import {TransferQuorum} from '../model'
* @returns transaction id of the transaction in the blockchain
*/
export const sendStoreDataQuorumTransaction = async (body: CreateRecord, provider: string) => {
await validateBody(body, CreateRecord)
await validateBody(body, CreateRecord);
const data = (await axios.post(provider, {
'jsonrpc': '2.0',
'method': 'eth_sendTransaction',
Expand Down
38 changes: 19 additions & 19 deletions src/transaction/tron.ts
Original file line number Diff line number Diff line change
@@ -1,14 +1,14 @@
import axios, {AxiosRequestConfig} from 'axios'
import BigNumber from 'bignumber.js'
import {tronBroadcast} from '../blockchain'
import {validateBody} from '../connector/tatum'

import {TATUM_API_URL} from '../constants'
import * as listing from '../contracts/marketplace'
import abi from '../contracts/trc20/token_abi'
import bytecode from '../contracts/trc20/token_bytecode'
import trc721_abi from '../contracts/trc721/trc721_abi'
import trc721_bytecode from '../contracts/trc721/trc721_bytecode'
import {AxiosRequestConfig} from 'axios';
import BigNumber from 'bignumber.js';
import {tronBroadcast} from '../blockchain';
import {axios, validateBody} from '../connector/tatum';

import {TATUM_API_URL} from '../constants';
import * as listing from '../contracts/marketplace';
import abi from '../contracts/trc20/token_abi';
import bytecode from '../contracts/trc20/token_bytecode';
import trc721_abi from '../contracts/trc721/trc721_abi';
import trc721_bytecode from '../contracts/trc721/trc721_bytecode';
import {
CreateTronTrc10,
CreateTronTrc20,
Expand All @@ -27,18 +27,18 @@ import {
TronMintTrc721,
TronTransferTrc721,
TronUpdateCashbackTrc721,
} from '../model'
import {obtainCustodialAddressType} from '../wallet'
} from '../model';
import {obtainCustodialAddressType} from '../wallet';

// tslint:disable-next-line:no-var-requires
const TronWeb = require('tronweb')
const TronWeb = require('tronweb');

const prepareTronWeb = (testnet: boolean, provider?: string) => {
const HttpProvider = TronWeb.providers.HttpProvider
const url = provider || `${TATUM_API_URL}/v3/tron/node/${process.env.TATUM_API_KEY}`
const fullNode = new HttpProvider(url)
const solidityNode = new HttpProvider(url)
const eventServer = new HttpProvider(url)
const HttpProvider = TronWeb.providers.HttpProvider;
const url = provider || `${TATUM_API_URL}/v3/tron/node/${process.env.TATUM_API_KEY}`;
const fullNode = new HttpProvider(url);
const solidityNode = new HttpProvider(url);
const eventServer = new HttpProvider(url);
const tronWeb = new TronWeb(fullNode, solidityNode, eventServer)
tronWeb.setHeader({'TRON-PRO-API-KEY': process.env.TRON_PRO_API_KEY})
return tronWeb
Expand Down
26 changes: 12 additions & 14 deletions src/transaction/xdc.ts
Original file line number Diff line number Diff line change
@@ -1,15 +1,14 @@
import axios from 'axios'
import {BigNumber} from 'bignumber.js'
import Web3 from 'web3'
import {TransactionConfig} from 'web3-core'
import {toWei} from 'web3-utils'
import {xdcBroadcast, xdcGetTransactionsCount} from '../blockchain'
import {validateBody} from '../connector/tatum'
import {TATUM_API_URL, TRANSFER_METHOD_ABI} from '../constants'
import erc20TokenABI from '../contracts/erc20/token_abi'
import erc20TokenBytecode from '../contracts/erc20/token_bytecode'
import erc721TokenABI from '../contracts/erc721/erc721_abi'
import erc721TokenBytecode from '../contracts/erc721/erc721_bytecode'
import {BigNumber} from 'bignumber.js';
import Web3 from 'web3';
import {TransactionConfig} from 'web3-core';
import {toWei} from 'web3-utils';
import {xdcBroadcast, xdcGetTransactionsCount} from '../blockchain';
import {axios, validateBody} from '../connector/tatum';
import {TATUM_API_URL, TRANSFER_METHOD_ABI} from '../constants';
import erc20TokenABI from '../contracts/erc20/token_abi';
import erc20TokenBytecode from '../contracts/erc20/token_bytecode';
import erc721TokenABI from '../contracts/erc721/erc721_abi';
import erc721TokenBytecode from '../contracts/erc721/erc721_bytecode';
import {
BurnErc20,
CreateRecord,
Expand All @@ -28,8 +27,7 @@ import {
TransferCustomErc20,
TransferErc20,
UpdateCashbackErc721
} from '../model'

} from '../model';

/**
* Convert XDC address format.
Expand Down

0 comments on commit 440e089

Please sign in to comment.