Skip to content

Commit

Permalink
ALL-9108 Fix tatum connector undefined error (#1134)
Browse files Browse the repository at this point in the history
* ALL-9108 Fix tatum connector undefined error

* ALL-9108 Implement feedback from Filip

* ALL-9108 Refactor and fix some existing tests

* ALL-9108 Fix further tests

---------

Co-authored-by: juraj.bacovcin <juraj.bacovcin@tatum.io>
  • Loading branch information
hehe100596 and juraj.bacovcin authored Oct 11, 2024
1 parent 6ff4ab2 commit 7ad7dec
Show file tree
Hide file tree
Showing 18 changed files with 135 additions and 88 deletions.
7 changes: 7 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,10 @@
## [4.2.43] - 2024.10.11

### Fixed

- Fixed Tatum Connector issue with process is undefined on the pure browser
- Fixed and refactored some tests

## [4.2.42] - 2024.9.4

### Fixed
Expand Down
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": "4.2.42",
"version": "4.2.43",
"description": "Tatum JS SDK",
"author": "Tatum",
"repository": "https://github.com/tatumio/tatum-js",
Expand Down
5 changes: 2 additions & 3 deletions src/connector/tatum.connector.ts
Original file line number Diff line number Diff line change
@@ -1,8 +1,7 @@
import process from 'process'
import { Container, Service } from 'typedi'
import { JsonRpcCall } from '../dto'
import { ApiVersion } from '../service'
import { CONFIG, Constant, Utils } from '../util'
import { CONFIG, Constant, EnvUtils, Utils } from '../util'
import { DefaultBodyType, DefaultParamsType, FileUploadRequest, GetUrl, SdkRequest } from './connector.dto'

@Service({
Expand Down Expand Up @@ -150,7 +149,7 @@ export class TatumConnector {

private getBaseUrl() {
const config = Container.of(this.id).get(CONFIG)
if (process.env.TATUM_URL) {
if (EnvUtils.isProcessAvailable() && process.env?.TATUM_URL) {
return process.env.TATUM_URL
}
return config.version === ApiVersion.V3 ? Constant.TATUM_API_URL.V3 : Constant.TATUM_API_URL.V4
Expand Down
10 changes: 10 additions & 0 deletions src/e2e/e2e.constant.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,15 @@
import { Network } from '../dto'

export const ApiKey = {
mainnet: process.env.V4_API_KEY_MAINNET || '',
testnet: process.env.V4_API_KEY_TESTNET || '',
}

export const ApiKeyV3 = {
mainnet: process.env.V3_API_KEY_MAINNET || '',
testnet: process.env.V3_API_KEY_TESTNET || '',
}

export const TestConst = {
EXISTING_SUBSCRIPTION_ETH_ADDRESS: '0xbaf6dc2e647aeb6f510f9e318856a1bcd66c5e19',
INVALID_ETH_ADDRESS: 'TLduuX5NWFucPPafLbj9eab6Znwrdm72Qv',
Expand Down
3 changes: 2 additions & 1 deletion src/e2e/ipfs.spec.ts
Original file line number Diff line number Diff line change
@@ -1,10 +1,11 @@
import fs from 'fs'
import { Network } from '../dto'
import { ApiKey } from './e2e.constant'
import { EvmE2eUtils } from './rpc/evm/evm.e2e.utils'

describe.skip('IPFS', () => {
it('should upload file to IPFS', async () => {
const tatum = await EvmE2eUtils.initTatum(Network.ETHEREUM, process.env.V4_API_KEY_MAINNET)
const tatum = await EvmE2eUtils.initTatum(Network.ETHEREUM, ApiKey.mainnet)
const fileData = fs.readFileSync('./test.txt') // Adjust the path to your file
const response = await tatum.ipfs.uploadFile({ file: fileData })
expect(response.status).toBe('SUCCESS')
Expand Down
25 changes: 14 additions & 11 deletions src/e2e/rpc/evm/eth/tatum.rpc.beacon.spec.ts
Original file line number Diff line number Diff line change
@@ -1,70 +1,73 @@
import { Network } from '../../../../dto'
import { Ethereum } from '../../../../service'
import { ApiKey } from '../../../e2e.constant'
import { EvmE2eUtils } from '../evm.e2e.utils'

describe('Beacon', () => {
describe('v1', () => {
const networks = [Network.ETHEREUM_HOLESKY, Network.ETHEREUM_SEPOLIA, Network.ETHEREUM]
const networks = [Network.ETHEREUM_HOLESKY, Network.ETHEREUM]

describe.each(networks)('%s', (network) => {
it('should get node version', async () => {
const tatum = await EvmE2eUtils.initTatum<Ethereum>(network, process.env.V4_API_KEY_TESTNET)
const apiKey = network === Network.ETHEREUM ? ApiKey.mainnet : ApiKey.testnet

it.skip('should get node version', async () => {
const tatum = await EvmE2eUtils.initTatum<Ethereum>(network, apiKey)
const { data } = await tatum.rpc.beacon.v1.getNodeVersion()
await tatum.destroy()
expect(data).toBeDefined()
})

it('should get genesis', async () => {
const tatum = await EvmE2eUtils.initTatum<Ethereum>(network, process.env.V4_API_KEY_TESTNET)
const tatum = await EvmE2eUtils.initTatum<Ethereum>(network, apiKey)
const { data } = await tatum.rpc.beacon.v1.getGenesis()
await tatum.destroy()
expect(data).toBeDefined()
})

it('should get state root', async () => {
const tatum = await EvmE2eUtils.initTatum<Ethereum>(network, process.env.V4_API_KEY_TESTNET)
const tatum = await EvmE2eUtils.initTatum<Ethereum>(network, apiKey)
const { data } = await tatum.rpc.beacon.v1.getStateRoot({ stateId: 'head' })
await tatum.destroy()
expect(data).toBeDefined()
})

it('should get block headers', async () => {
const tatum = await EvmE2eUtils.initTatum<Ethereum>(network, process.env.V4_API_KEY_TESTNET)
const tatum = await EvmE2eUtils.initTatum<Ethereum>(network, apiKey)
const { data } = await tatum.rpc.beacon.v1.getBlockHeaders({ slot: '1000' })
await tatum.destroy()
expect(data).toBeDefined()
})

it('should get block root', async () => {
const tatum = await EvmE2eUtils.initTatum<Ethereum>(network, process.env.V4_API_KEY_TESTNET)
const tatum = await EvmE2eUtils.initTatum<Ethereum>(network, apiKey)
const { data } = await tatum.rpc.beacon.v1.getBlockRoot({ blockId: 'head' })
await tatum.destroy()
expect(data).toBeDefined()
})

it('should get state committees', async () => {
const tatum = await EvmE2eUtils.initTatum<Ethereum>(network, process.env.V4_API_KEY_TESTNET)
const tatum = await EvmE2eUtils.initTatum<Ethereum>(network, apiKey)
const { data } = await tatum.rpc.beacon.v1.getStateCommittees({ stateId: 'head' })
await tatum.destroy()
expect(data).toBeDefined()
})

it('should get state finality checkpoints', async () => {
const tatum = await EvmE2eUtils.initTatum<Ethereum>(network, process.env.V4_API_KEY_TESTNET)
const tatum = await EvmE2eUtils.initTatum<Ethereum>(network, apiKey)
const { data } = await tatum.rpc.beacon.v1.getStateFinalityCheckpoints({ stateId: 'head' })
await tatum.destroy()
expect(data).toBeDefined()
})

it('should get state fork', async () => {
const tatum = await EvmE2eUtils.initTatum<Ethereum>(network, process.env.V4_API_KEY_TESTNET)
const tatum = await EvmE2eUtils.initTatum<Ethereum>(network, apiKey)
const { data } = await tatum.rpc.beacon.v1.getStateFork({ stateId: 'head' })
await tatum.destroy()
expect(data).toBeDefined()
})

it('should get state sync committees', async () => {
const tatum = await EvmE2eUtils.initTatum<Ethereum>(network, process.env.V4_API_KEY_TESTNET)
const tatum = await EvmE2eUtils.initTatum<Ethereum>(network, apiKey)
const { data } = await tatum.rpc.beacon.v1.getStateSyncCommittees({ stateId: 'head' })
await tatum.destroy()
expect(data).toBeDefined()
Expand Down
14 changes: 7 additions & 7 deletions src/e2e/rpc/evm/eth/tatum.rpc.ethereum.spec.ts
Original file line number Diff line number Diff line change
@@ -1,26 +1,26 @@
import process from 'process'
import { BaseEvm, Network, RpcNodeType, TatumSDK } from '../../../../service'
import { ApiKey } from '../../../e2e.constant'
import { EvmE2eUtils } from '../evm.e2e.utils'

describe('Ethereum', () => {
it('should get token total supply', async () => {
const tatum = await EvmE2eUtils.initTatum(Network.ETHEREUM, process.env.V4_API_KEY_MAINNET)
const tatum = await EvmE2eUtils.initTatum(Network.ETHEREUM, ApiKey.mainnet)
const { result } = await tatum.rpc.getTokenTotalSupply('0xdac17f958d2ee523a2206206994597c13d831ec7')
await tatum.destroy()
expect(result).toBeDefined()
expect(result?.isGreaterThan(1))
})

it('should get token cap', async () => {
const tatum = await EvmE2eUtils.initTatum(Network.ETHEREUM, process.env.V4_API_KEY_MAINNET)
const tatum = await EvmE2eUtils.initTatum(Network.ETHEREUM, ApiKey.mainnet)
const { result } = await tatum.rpc.getTokenCap('0x43044f861ec040DB59A7e324c40507adDb673142')
await tatum.destroy()
expect(result).toBeDefined()
expect(result?.isGreaterThan(1))
})

it('should return true if contract is a multitoken', async () => {
const tatum = await EvmE2eUtils.initTatum(Network.ETHEREUM, process.env.V4_API_KEY_MAINNET)
const tatum = await EvmE2eUtils.initTatum(Network.ETHEREUM, ApiKey.mainnet)
const { result } = await tatum.rpc.supportsInterfaceERC1155('0xF4Dd946D1406e215a87029db56C69e1Bcf3e1773')
await tatum.destroy()
expect(result).toBeDefined()
Expand All @@ -39,7 +39,7 @@ describe('Ethereum', () => {
],
},
apiKey: {
v4: process.env.V4_API_KEY_MAINNET,
v4: ApiKey.mainnet,
},
})
const { result } = await tatum.rpc.chainId()
Expand All @@ -48,7 +48,7 @@ describe('Ethereum', () => {
})

it('debug storage range at', async () => {
const tatum = await EvmE2eUtils.initTatum(Network.ETHEREUM, process.env.V4_API_KEY_MAINNET)
const tatum = await EvmE2eUtils.initTatum(Network.ETHEREUM, ApiKey.mainnet)
const { result } = await tatum.rpc.debugStorageRangeAt(
'0xc20f6b582e0c7923341cdb1299a94ea00c8a23e1ccabc532955a2a07b27121dc',
0,
Expand All @@ -61,7 +61,7 @@ describe('Ethereum', () => {
})

it('get logs', async () => {
const tatum = await EvmE2eUtils.initTatum(Network.ETHEREUM, process.env.V4_API_KEY_MAINNET)
const tatum = await EvmE2eUtils.initTatum(Network.ETHEREUM, ApiKey.mainnet)
const result = await tatum.rpc.getLogs({
address: '0xdafea492d9c6733ae3d56b7ed1adb60692c98bc5',
})
Expand Down
13 changes: 7 additions & 6 deletions src/e2e/rpc/evm/evm.rpc.spec.ts
Original file line number Diff line number Diff line change
@@ -1,22 +1,23 @@
import { Network } from '../../../dto'
import { ApiKey } from '../../e2e.constant'
import { EvmE2eUtils } from './evm.e2e.utils'

const testNetworks = [
{ network: Network.CELO },
{ network: Network.CELO_ALFAJORES },
// { network: Network.ARBITRUM_ONE },
{ network: Network.ARBITRUM_NOVA, apiKey: process.env.V3_API_KEY_MAINNET },
{ network: Network.ARBITRUM_NOVA, apiKey: ApiKey.mainnet },
{
network: Network.ARBITRUM_NOVA_TESTNET,
apiKey: process.env.V3_API_KEY_TESTNET,
apiKey: ApiKey.testnet,
},
{ network: Network.HORIZEN_EON },
// { network: Network.HORIZEN_EON_GOBI },
{ network: Network.CHILIZ },
{ network: Network.BINANCE_SMART_CHAIN },
{
network: Network.BINANCE_SMART_CHAIN_TESTNET,
apiKey: process.env.V3_API_KEY_TESTNET,
apiKey: ApiKey.testnet,
},
{ network: Network.FLARE },
{ network: Network.FLARE_SONGBIRD },
Expand Down Expand Up @@ -49,14 +50,14 @@ const testNetworks = [
{
network: Network.TRON_SHASTA,
skipEstimateGas: true,
apiKey: process.env.V3_API_KEY_TESTNET,
apiKey: ApiKey.testnet,
},
{
network: Network.KLAYTN,
},
{
network: Network.KLAYTN_BAOBAB,
apiKey: process.env.V4_API_KEY_TESTNET,
apiKey: ApiKey.testnet,
},
{
network: Network.AVALANCHE_C,
Expand All @@ -69,7 +70,7 @@ const testNetworks = [
network: Network.XINFIN,
},
// { network: Network.CRONOS },
{ network: Network.CRONOS_TESTNET, apiKey: process.env.V3_API_KEY_TESTNET },
{ network: Network.CRONOS_TESTNET, apiKey: ApiKey.testnet },
{ network: Network.BASE },
{ network: Network.ZK_SYNC, url: 'https://mainnet.era.zksync.io' },
{ network: Network.ZK_SYNC_TESTNET, url: 'https://sepolia.era.zksync.dev' },
Expand Down
4 changes: 2 additions & 2 deletions src/e2e/rpc/other/tatum.rpc.eos.spec.ts
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
import * as process from 'process'
import { ApiVersion, Eos, Network, TatumSDK } from '../../../service'
import { ApiKey, ApiKeyV3 } from '../../e2e.constant'
import { e2eUtil } from '../../e2e.util'

const getEosRpc = async (testnet?: boolean) =>
await TatumSDK.init<Eos>({
network: testnet ? Network.EOS_TESTNET : Network.EOS,
apiKey: {
v4: testnet ? process.env.V3_API_KEY_TESTNET : process.env.V4_API_KEY_MAINNET,
v4: testnet ? ApiKeyV3.testnet : ApiKey.mainnet,
},
version: ApiVersion.V3,
retryCount: 1,
Expand Down
4 changes: 3 additions & 1 deletion src/e2e/rpc/other/tatum.rpc.solana.spec.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import { Commitment, Encoding } from '../../../dto'
import { Network, Solana, TatumSDK } from '../../../service'
import { ApiKey } from '../../e2e.constant'
import { e2eUtil } from '../../e2e.util'

const getClient = async (testnet?: boolean): Promise<Solana> =>
Expand All @@ -8,6 +9,7 @@ const getClient = async (testnet?: boolean): Promise<Solana> =>
retryCount: 1,
retryDelay: 2000,
verbose: e2eUtil.isVerbose,
apiKey: testnet ? ApiKey.testnet : ApiKey.mainnet,
})

const blockNumber = 203046000
Expand Down Expand Up @@ -159,7 +161,7 @@ describe('Solana', () => {
})

describe('getFirstAvailableBlock', () => {
it('should return first available block', async () => {
it.skip('should return first available block', async () => {
const tatum = await getClient()
const { result } = await tatum.rpc.getFirstAvailableBlock()
await tatum.destroy()
Expand Down
6 changes: 3 additions & 3 deletions src/e2e/rpc/other/tatum.rpc.stellar.spec.ts
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
import process from 'process'
import { ApiVersion, Network, Stellar, TatumSDK } from '../../../service'
import { ApiKey, ApiKeyV3 } from '../../e2e.constant'
import { e2eUtil } from '../../e2e.util'

const getStellarRpc = async (testnet?: boolean) =>
await TatumSDK.init<Stellar>({
network: testnet ? Network.STELLAR_TESTNET : Network.STELLAR,
verbose: e2eUtil.isVerbose,
...(testnet && { apiKey: { v3: process.env.V3_API_KEY_TESTNET } }),
...(!testnet && { apiKey: process.env.V4_API_KEY_MAINNET }),
...(testnet && { apiKey: { v3: ApiKeyV3.testnet } }),
...(!testnet && { apiKey: ApiKey.mainnet }),
version: testnet ? ApiVersion.V3 : ApiVersion.V4,
})

Expand Down
43 changes: 28 additions & 15 deletions src/e2e/rpc/other/tatum.rpc.ton.spec.ts
Original file line number Diff line number Diff line change
@@ -1,25 +1,38 @@
import { Network, TatumSDK, Ton } from '../../../service'
import { e2eUtil } from '../../e2e.util'

const getTonClient = async (testnet: boolean) => {
const getTonClient = async (testnet?: boolean) => {
return await TatumSDK.init<Ton>(e2eUtil.initConfig(testnet ? Network.TON_TESTNET : Network.TON))
}

describe('Ton', () => {
[true, false].forEach(testnet => {
describe(testnet ? 'Testnet' : 'Mainnet', () => {
it('status', async () => {
const ton = await getTonClient(testnet)
const result = await ton.rpc.getBlockchainMasterchainHead()
await ton.destroy()
expect(result).toBeDefined()
})
it('getMasterchainInfo', async () => {
const ton = await getTonClient(testnet)
const result = await ton.rpc.getMasterchainInfo()
await ton.destroy()
expect(result).toBeDefined()
})
describe('Testnet', () => {
it('Ton V2 API - status', async () => {
const ton = await getTonClient(true)
const result = await ton.rpc.getBlockchainMasterchainHead()
await ton.destroy()
expect(result).toBeDefined()
})
it('Ton Http API - getMasterchainInfo', async () => {
const ton = await getTonClient(true)
const result = await ton.rpc.getMasterchainInfo()
await ton.destroy()
expect(result).toBeDefined()
})
})

describe('Mainnet', () => {
it.skip('Ton V2 API - status', async () => {
const ton = await getTonClient()
const result = await ton.rpc.getBlockchainMasterchainHead()
await ton.destroy()
expect(result).toBeDefined()
})
it('Ton Http API - getMasterchainInfo', async () => {
const ton = await getTonClient()
const result = await ton.rpc.getMasterchainInfo()
await ton.destroy()
expect(result).toBeDefined()
})
})
})
9 changes: 7 additions & 2 deletions src/e2e/rpc/other/tatum.rpc.tron.spec.ts
Original file line number Diff line number Diff line change
@@ -1,11 +1,16 @@
import BigNumber from 'bignumber.js'
import * as process from 'process'
import { BlockIdentifier } from '../../../dto'
import { Network, TatumSDK, Tron } from '../../../service'
import { ApiKey, ApiKeyV3 } from '../../e2e.constant'
import { e2eUtil } from '../../e2e.util'

const getTronRpc = async (testnet?: boolean) =>
await TatumSDK.init<Tron>(e2eUtil.initConfig(testnet ? Network.TRON_SHASTA : Network.TRON, testnet ? process.env.V3_API_KEY_TESTNET : process.env.V4_API_KEY_MAINNET))
await TatumSDK.init<Tron>(
e2eUtil.initConfig(
testnet ? Network.TRON_SHASTA : Network.TRON,
testnet ? ApiKeyV3.testnet : ApiKey.mainnet,
),
)

describe.skip('RPCs', () => {
describe('TRON', () => {
Expand Down
Loading

0 comments on commit 7ad7dec

Please sign in to comment.