diff --git a/src/renderer/dispatchers/banks.ts b/src/renderer/dispatchers/banks.ts index 260742f3..080b7980 100644 --- a/src/renderer/dispatchers/banks.ts +++ b/src/renderer/dispatchers/banks.ts @@ -1,4 +1,5 @@ import axios from 'axios'; +import {Bank} from 'thenewboston'; import { ACCOUNTS, @@ -10,7 +11,7 @@ import { VALIDATOR_CONFIRMATION_SERVICES, VALIDATORS, } from '@renderer/constants/actions'; -import {AXIOS_TIMEOUT_MS, defaultPaginatedQueryParam} from '@renderer/config'; + import { setBankAccounts, setBankAccountsError, @@ -46,25 +47,31 @@ import { RawBankConfig, ValidatorConfirmationService, } from '@renderer/types'; -import {fetchPaginatedResults, sanitizePortFieldFromRawBankConfig} from '@renderer/utils/api'; +import { + fetchPaginatedResults, + fetchBankPaginatedResults, + sanitizePortFieldFromRawBankConfig, +} from '@renderer/utils/api'; -export const fetchBankAccounts = (address: string, params: PaginatedQueryParams = defaultPaginatedQueryParam) => async ( - dispatch: AppDispatch, -) => { - return fetchPaginatedResults(address, ACCOUNTS, params, dispatch, setBankAccounts, setBankAccountsError); +export const fetchBankAccounts = (address: string, params: PaginatedQueryParams) => async (dispatch: AppDispatch) => { + return fetchBankPaginatedResults( + address, + ACCOUNTS, + params, + dispatch, + setBankAccounts, + setBankAccountsError, + ); }; -export const fetchBankBanks = (address: string, params: PaginatedQueryParams = defaultPaginatedQueryParam) => async ( - dispatch: AppDispatch, -) => { - return fetchPaginatedResults(address, BANKS, params, dispatch, setBankBanks, setBankBanksError); +export const fetchBankBanks = (address: string, params: PaginatedQueryParams) => async (dispatch: AppDispatch) => { + return fetchBankPaginatedResults(address, BANKS, params, dispatch, setBankBanks, setBankBanksError); }; -export const fetchBankBankTransactions = ( - address: string, - params: PaginatedQueryParams = defaultPaginatedQueryParam, -) => async (dispatch: AppDispatch) => { - return fetchPaginatedResults( +export const fetchBankBankTransactions = (address: string, params: PaginatedQueryParams) => async ( + dispatch: AppDispatch, +) => { + return fetchBankPaginatedResults( address, BANK_TRANSACTIONS, params, @@ -74,17 +81,15 @@ export const fetchBankBankTransactions = ( ); }; -export const fetchBankBlocks = (address: string, params: PaginatedQueryParams = defaultPaginatedQueryParam) => async ( - dispatch: AppDispatch, -) => { - return fetchPaginatedResults(address, BLOCKS, params, dispatch, setBankBlocks, setBankBlocksError); +export const fetchBankBlocks = (address: string, params: PaginatedQueryParams) => async (dispatch: AppDispatch) => { + return fetchBankPaginatedResults(address, BLOCKS, params, dispatch, setBankBlocks, setBankBlocksError); }; export const fetchBankConfig = (address: string) => async ( dispatch: AppDispatch, ): Promise<{address: string; data?: BankConfig; error?: any}> => { try { - const {data: rawData} = await axios.get(`${address}/config`, {timeout: AXIOS_TIMEOUT_MS}); + const rawData = (await new Bank(address).getConfig()) as RawBankConfig; const data = sanitizePortFieldFromRawBankConfig(rawData); if (data.node_type !== NodeType.bank) { @@ -110,11 +115,10 @@ export const fetchBankConfig = (address: string) => async ( } }; -export const fetchBankConfirmationBlocks = ( - address: string, - params: PaginatedQueryParams = defaultPaginatedQueryParam, -) => async (dispatch: AppDispatch) => { - return fetchPaginatedResults( +export const fetchBankConfirmationBlocks = (address: string, params: PaginatedQueryParams) => async ( + dispatch: AppDispatch, +) => { + return fetchBankPaginatedResults( address, CONFIRMATION_BLOCKS, params, @@ -124,11 +128,10 @@ export const fetchBankConfirmationBlocks = ( ); }; -export const fetchBankInvalidBlocks = ( - address: string, - params: PaginatedQueryParams = defaultPaginatedQueryParam, -) => async (dispatch: AppDispatch) => { - return fetchPaginatedResults( +export const fetchBankInvalidBlocks = (address: string, params: PaginatedQueryParams) => async ( + dispatch: AppDispatch, +) => { + return fetchBankPaginatedResults( address, INVALID_BLOCKS, params, @@ -138,11 +141,10 @@ export const fetchBankInvalidBlocks = ( ); }; -export const fetchBankValidatorConfirmationServices = ( - address: string, - params: PaginatedQueryParams = defaultPaginatedQueryParam, -) => async (dispatch: AppDispatch) => { - return fetchPaginatedResults( +export const fetchBankValidatorConfirmationServices = (address: string, params: PaginatedQueryParams) => async ( + dispatch: AppDispatch, +) => { + return fetchBankPaginatedResults( address, VALIDATOR_CONFIRMATION_SERVICES, params, @@ -152,11 +154,8 @@ export const fetchBankValidatorConfirmationServices = ( ); }; -export const fetchBankValidators = ( - address: string, - params: PaginatedQueryParams = defaultPaginatedQueryParam, -) => async (dispatch: AppDispatch) => { - return fetchPaginatedResults( +export const fetchBankValidators = (address: string, params: PaginatedQueryParams) => async (dispatch: AppDispatch) => { + return fetchBankPaginatedResults( address, VALIDATORS, params, diff --git a/src/renderer/types/network.ts b/src/renderer/types/network.ts index 37fa222c..b20a52e5 100644 --- a/src/renderer/types/network.ts +++ b/src/renderer/types/network.ts @@ -22,9 +22,9 @@ export interface BankAccount extends AccountNumber, CreatedModified, Id { trust: string; } -export interface BankConfig extends Node { +export interface BankConfig extends Omit { node_type: NodeType.bank; - primary_validator: PrimaryValidatorConfig; + primary_validator: Omit; } export interface BankConfirmationBlock extends CreatedModified, Id { @@ -128,7 +128,7 @@ export type ProtocolType = 'http' | 'https'; export interface RawBankConfig extends Omit { port: number | null; - primary_validator: RawPrimaryValidatorConfig; + primary_validator: Omit; } export interface RawPrimaryValidatorConfig extends Omit { diff --git a/src/renderer/utils/api.ts b/src/renderer/utils/api.ts index 06ff0463..8c493c92 100644 --- a/src/renderer/utils/api.ts +++ b/src/renderer/utils/api.ts @@ -1,4 +1,18 @@ import axios from 'axios'; +import {Bank} from 'thenewboston'; + +import {AXIOS_TIMEOUT_MS, defaultPaginatedQueryParam} from '@renderer/config'; +import { + ACCOUNTS, + BANK_TRANSACTIONS, + BANKS, + BLOCKS, + CONFIRMATION_BLOCKS, + INVALID_BLOCKS, + VALIDATOR_CONFIRMATION_SERVICES, + VALIDATORS, +} from '@renderer/constants/actions'; + import { AppDispatch, BankConfig, @@ -8,9 +22,86 @@ import { RawBankConfig, RawPrimaryValidatorConfig, } from '@renderer/types'; + import {formatQueryParams} from '@renderer/utils/address'; import {SetError, SetResults} from '@renderer/utils/store'; -import {AXIOS_TIMEOUT_MS} from '@renderer/config'; + +const formatPaginatedData = (rawData: PaginatedResults) => { + return { + ...rawData, + results: rawData.results.map((result: any) => { + if (!result.port) { + return { + ...result, + port: replaceNullPortFieldWithDefaultValue(result.port), + }; + } + return result; + }), + }; +}; + +export async function fetchBankPaginatedResults( + address: string, + action: string, + queryParams: PaginatedQueryParams, + dispatch: AppDispatch, + setResults: SetResults, + setError: SetError, +) { + const bank = new Bank(address, {defaultPagination: {limit: defaultPaginatedQueryParam.limit, offset: 0}}); + + let rawData; + + try { + switch (action) { + case ACCOUNTS: + rawData = await bank.getAccounts(); + break; + + case BANKS: + rawData = await bank.getBanks(); + break; + + case BANK_TRANSACTIONS: + rawData = await bank.getTransactions(); + break; + + case BLOCKS: + rawData = await bank.getBlocks(); + break; + + case CONFIRMATION_BLOCKS: + rawData = await bank.getConfirmationBlocks(queryParams); + break; + + case INVALID_BLOCKS: + rawData = await bank.getInvalidBlocks(queryParams); + break; + + case VALIDATOR_CONFIRMATION_SERVICES: + rawData = await bank.getValidatorConfirmationServices(queryParams); + break; + + case VALIDATORS: + rawData = await bank.getValidators(queryParams); + break; + + default: + throw new Error('Fetch Bank Pagination Action not Set'); + } + + const data = formatPaginatedData(rawData); + + dispatch(setResults({address, ...data})); + return data.results; + } catch (error) { + if (!error.response) { + throw error; + } + dispatch(setError({address, error: error.response.data})); + } +} export async function fetchPaginatedResults( address: string, @@ -26,18 +117,7 @@ export async function fetchPaginatedResults( {timeout: AXIOS_TIMEOUT_MS}, ); - const data: PaginatedResults = { - ...rawData, - results: rawData.results.map((result: any) => { - if (!result.port) { - return { - ...result, - port: replaceNullPortFieldWithDefaultValue(result.port), - }; - } - return result; - }), - }; + const data = formatPaginatedData(rawData); dispatch(setResults({address, ...data})); return data.results;