From: Chris Duncan Date: Thu, 21 Aug 2025 22:23:41 +0000 (-0700) Subject: Extract account refresh into its own file. X-Git-Tag: v0.10.5~41^2~13 X-Git-Url: https://git.codecow.com/?a=commitdiff_plain;h=db21dfd498929a1b9b3e575ada4533255f65aa08;p=libnemo.git Extract account refresh into its own file. --- diff --git a/src/lib/account/index.ts b/src/lib/account/index.ts index 0642030..b1ae259 100644 --- a/src/lib/account/index.ts +++ b/src/lib/account/index.ts @@ -7,6 +7,7 @@ import { ACCOUNT_KEY_BYTE_LENGTH, ACCOUNT_KEY_HEX_LENGTH, ALPHABET, PREFIX, PREF import { base32, bytes, hex } from '../convert' import { Blake2b, NanoNaCl } from '../crypto' import { Rpc } from '../rpc' +import { _refresh } from './refresh' /** * Represents a single Nano address and the associated public key. To include the @@ -222,48 +223,7 @@ export class Account { * @param {Rpc|string|URL} rpc - RPC node information required to call `account_info` */ async refresh (rpc: Rpc | string | URL): Promise { - if (typeof rpc === 'string' || rpc instanceof URL) { - rpc = new Rpc(rpc) - } - if (!(rpc instanceof Rpc)) { - throw new TypeError('RPC must be a valid node') - } - const reqAccountInfo = { - account: this.address, - include_confirmed: true, - receivable: true, - representative: true, - weight: true - } - const resAccountInfo = await rpc.call('account_info', reqAccountInfo) - if (resAccountInfo.frontier == null) { - throw new Error('Account not found') - } - Object.assign(this, resAccountInfo) - - const reqConfirmedFrontier = { - json_block: true, - hash: this.confirmed_frontier - } - const { contents: confirmedFrontierContents, subtype: confirmedFrontierSubtype } = await rpc.call('block_info', reqConfirmedFrontier) - const confirmedFrontierBlock = new Block(confirmedFrontierContents.account, confirmedFrontierContents.balance, confirmedFrontierContents.previous, confirmedFrontierContents.representative) - if (typeof confirmedFrontierBlock[confirmedFrontierSubtype] !== 'function') { - throw new TypeError('Unknown subtype of confirmed frontier block', { cause: confirmedFrontierSubtype }) - } - confirmedFrontierBlock[confirmedFrontierSubtype](confirmedFrontierContents.link, 0).sign(confirmedFrontierContents.signature) - this.confirmed_frontier_block = confirmedFrontierBlock - - const reqFrontier = { - json_block: true, - hash: this.frontier - } - const { contents: frontierContents, subtype: frontierSubtype } = await rpc.call('block_info', reqFrontier) - const frontierBlock = new Block(frontierContents.account, frontierContents.balance, frontierContents.previous, frontierContents.representative) - if (typeof frontierBlock[frontierSubtype] !== 'function') { - throw new TypeError('Unknown subtype of frontier block', { cause: frontierSubtype }) - } - frontierBlock[frontierSubtype](frontierContents.link, 0).sign(frontierContents.signature) - this.frontier_block = frontierBlock + return await _refresh(this, rpc) } /** diff --git a/src/lib/account/refresh.ts b/src/lib/account/refresh.ts new file mode 100644 index 0000000..713dc95 --- /dev/null +++ b/src/lib/account/refresh.ts @@ -0,0 +1,52 @@ +//! SPDX-FileCopyrightText: 2025 Chris Duncan +//! SPDX-License-Identifier: GPL-3.0-or-later + +import { Block } from '../block' +import { Rpc } from '../rpc' +import { Account } from '.' + +export async function _refresh (account: Account, rpc: Rpc | string | URL): Promise +export async function _refresh (account: Account, rpc: unknown): Promise { + if (typeof rpc === 'string' || rpc instanceof URL) { + rpc = new Rpc(rpc) + } + if (!(rpc instanceof Rpc)) { + throw new TypeError('RPC must be a valid node') + } + const reqAccountInfo = { + account: account.address, + include_confirmed: true, + receivable: true, + representative: true, + weight: true + } + const resAccountInfo = await rpc.call('account_info', reqAccountInfo) + if (resAccountInfo.frontier == null) { + throw new Error('Account not found') + } + Object.assign(account, resAccountInfo) + + const reqConfirmedFrontier = { + json_block: true, + hash: account.confirmed_frontier + } + const { contents: confirmedFrontierContents, subtype: confirmedFrontierSubtype } = await rpc.call('block_info', reqConfirmedFrontier) + const confirmedFrontierBlock = new Block(confirmedFrontierContents.account, confirmedFrontierContents.balance, confirmedFrontierContents.previous, confirmedFrontierContents.representative) + if (typeof confirmedFrontierBlock[confirmedFrontierSubtype] !== 'function') { + throw new TypeError('Unknown subtype of confirmed frontier block', { cause: confirmedFrontierSubtype }) + } + confirmedFrontierBlock[confirmedFrontierSubtype](confirmedFrontierContents.link, 0).sign(confirmedFrontierContents.signature) + account.confirmed_frontier_block = confirmedFrontierBlock + + const reqFrontier = { + json_block: true, + hash: account.frontier + } + const { contents: frontierContents, subtype: frontierSubtype } = await rpc.call('block_info', reqFrontier) + const frontierBlock = new Block(frontierContents.account, frontierContents.balance, frontierContents.previous, frontierContents.representative) + if (typeof frontierBlock[frontierSubtype] !== 'function') { + throw new TypeError('Unknown subtype of frontier block', { cause: frontierSubtype }) + } + frontierBlock[frontierSubtype](frontierContents.link, 0).sign(frontierContents.signature) + account.frontier_block = frontierBlock +}