]> git.codecow.com Git - libnemo.git/commitdiff
Extract account refresh into its own file.
authorChris Duncan <chris@zoso.dev>
Thu, 21 Aug 2025 22:23:41 +0000 (15:23 -0700)
committerChris Duncan <chris@zoso.dev>
Thu, 21 Aug 2025 22:23:41 +0000 (15:23 -0700)
src/lib/account/index.ts
src/lib/account/refresh.ts [new file with mode: 0644]

index 064203067d0bd9cb3e899bf9e56ab01d8ca6fa33..b1ae25916ea28f9ecd5a79c7a3665b970687aebb 100644 (file)
@@ -7,6 +7,7 @@ import { ACCOUNT_KEY_BYTE_LENGTH, ACCOUNT_KEY_HEX_LENGTH, ALPHABET, PREFIX, PREF
 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
@@ -222,48 +223,7 @@ export class Account {
        * @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
diff --git a/src/lib/account/refresh.ts b/src/lib/account/refresh.ts
new file mode 100644 (file)
index 0000000..713dc95
--- /dev/null
@@ -0,0 +1,52 @@
+//! 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
+}