All files / src/modules/debug balance.ts

100% Statements 28/28
100% Branches 0/0
100% Functions 8/8
100% Lines 26/26

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 9733x   33x 33x 33x     33x 33x             33x 1x         1x 20911x   1x 20911x                         33x 1x         1x   1x                     33x 1x         1x 20911x   1x 20911x                         33x       1x         1x   1x          
import { Types } from 'cafe-utility'
import type { BalanceResponse, BeeRequestOptions, PeerBalance } from '../../types'
import { http } from '../../utils/http'
import { BZZ } from '../../utils/tokens'
import { asNumberString } from '../../utils/type'
import { PeerAddress } from '../../utils/typed-bytes'
 
const balancesEndpoint = 'balances'
const consumedEndpoint = 'consumed'
 
/**
 * Get the balances with all known peers including prepaid services
 *
 * @param requestOptions Options for making requests
 */
export async function getAllBalances(requestOptions: BeeRequestOptions): Promise<BalanceResponse> {
  const response = await http<unknown>(requestOptions, {
    url: balancesEndpoint,
    responseType: 'json',
  })
 
  const body = Types.asObject(response.data, { name: 'response.data' })
  const balances = Types.asArray(body.balances, { name: 'balances' }).map(x => Types.asObject(x, { name: 'balance' }))
 
  return {
    balances: balances.map(x => ({
      peer: Types.asString(x.peer, { name: 'peer' }),
      balance: BZZ.fromPLUR(asNumberString(x.balance, { name: 'balance' })),
    })),
  }
}
 
/**
 * Get the balances with a specific peer including prepaid services
 *
 * @param requestOptions Options for making requests
 * @param address Swarm address of peer
 */
export async function getPeerBalance(requestOptions: BeeRequestOptions, address: PeerAddress): Promise<PeerBalance> {
  const response = await http<unknown>(requestOptions, {
    url: `${balancesEndpoint}/${address}`,
    responseType: 'json',
  })
 
  const body = Types.asObject(response.data, { name: 'response.data' })
 
  return {
    peer: Types.asString(body.peer, { name: 'peer' }),
    balance: BZZ.fromPLUR(asNumberString(body.balance, { name: 'balance' })),
  }
}
 
/**
 * Get the past due consumption balances with all known peers
 *
 * @param requestOptions Options for making requests
 */
export async function getPastDueConsumptionBalances(requestOptions: BeeRequestOptions): Promise<BalanceResponse> {
  const response = await http<unknown>(requestOptions, {
    url: consumedEndpoint,
    responseType: 'json',
  })
 
  const body = Types.asObject(response.data, { name: 'response.data' })
  const balances = Types.asArray(body.balances, { name: 'balances' }).map(x => Types.asObject(x, { name: 'balance' }))
 
  return {
    balances: balances.map(x => ({
      peer: Types.asString(x.peer, { name: 'peer' }),
      balance: BZZ.fromPLUR(asNumberString(x.balance, { name: 'balance' })),
    })),
  }
}
 
/**
 * Get the past due consumption balance with a specific peer
 *
 * @param requestOptions Options for making requests
 * @param address Swarm address of peer
 */
export async function getPastDueConsumptionPeerBalance(
  requestOptions: BeeRequestOptions,
  address: PeerAddress,
): Promise<PeerBalance> {
  const response = await http<unknown>(requestOptions, {
    url: `${consumedEndpoint}/${address}`,
    responseType: 'json',
  })
 
  const body = Types.asObject(response.data, { name: 'response.data' })
 
  return {
    peer: Types.asString(body.peer, { name: 'peer' }),
    balance: BZZ.fromPLUR(asNumberString(body.balance, { name: 'balance' })),
  }
}