import { base32, bytes, hex } from '../convert'\r
import { Blake2b, NanoNaCl } from '../crypto'\r
import { Rpc } from '../rpc'\r
+import { _refresh } from './refresh'\r
\r
/**\r
* Represents a single Nano address and the associated public key. To include the\r
* @param {Rpc|string|URL} rpc - RPC node information required to call `account_info`\r
*/\r
async refresh (rpc: Rpc | string | URL): Promise<void> {\r
- if (typeof rpc === 'string' || rpc instanceof URL) {\r
- rpc = new Rpc(rpc)\r
- }\r
- if (!(rpc instanceof Rpc)) {\r
- throw new TypeError('RPC must be a valid node')\r
- }\r
- const reqAccountInfo = {\r
- account: this.address,\r
- include_confirmed: true,\r
- receivable: true,\r
- representative: true,\r
- weight: true\r
- }\r
- const resAccountInfo = await rpc.call('account_info', reqAccountInfo)\r
- if (resAccountInfo.frontier == null) {\r
- throw new Error('Account not found')\r
- }\r
- Object.assign(this, resAccountInfo)\r
-\r
- const reqConfirmedFrontier = {\r
- json_block: true,\r
- hash: this.confirmed_frontier\r
- }\r
- const { contents: confirmedFrontierContents, subtype: confirmedFrontierSubtype } = await rpc.call('block_info', reqConfirmedFrontier)\r
- const confirmedFrontierBlock = new Block(confirmedFrontierContents.account, confirmedFrontierContents.balance, confirmedFrontierContents.previous, confirmedFrontierContents.representative)\r
- if (typeof confirmedFrontierBlock[confirmedFrontierSubtype] !== 'function') {\r
- throw new TypeError('Unknown subtype of confirmed frontier block', { cause: confirmedFrontierSubtype })\r
- }\r
- confirmedFrontierBlock[confirmedFrontierSubtype](confirmedFrontierContents.link, 0).sign(confirmedFrontierContents.signature)\r
- this.confirmed_frontier_block = confirmedFrontierBlock\r
-\r
- const reqFrontier = {\r
- json_block: true,\r
- hash: this.frontier\r
- }\r
- const { contents: frontierContents, subtype: frontierSubtype } = await rpc.call('block_info', reqFrontier)\r
- const frontierBlock = new Block(frontierContents.account, frontierContents.balance, frontierContents.previous, frontierContents.representative)\r
- if (typeof frontierBlock[frontierSubtype] !== 'function') {\r
- throw new TypeError('Unknown subtype of frontier block', { cause: frontierSubtype })\r
- }\r
- frontierBlock[frontierSubtype](frontierContents.link, 0).sign(frontierContents.signature)\r
- this.frontier_block = frontierBlock\r
+ return await _refresh(this, rpc)\r
}\r
\r
/**\r
--- /dev/null
+//! SPDX-FileCopyrightText: 2025 Chris Duncan <chris@zoso.dev>
+//! 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<void>
+export async function _refresh (account: Account, rpc: unknown): Promise<void> {
+ 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
+}