Files

31 lines
1.8 KiB
JavaScript
Raw Permalink Normal View History

2026-10-29 11:57:29 +01:00
// Generated, do not edit. sha256:ef4dc1eb01e833a602dd00a17d235a583edc55c162bc923df89b4ecb9c82da16
import * as db from '../db.js';
import { nowIso } from './_shared.js';
import { assertSourceMatchesAccount } from './wallet-sources.js';
export function listWalletAddresses(accountId) {
return db.all(`SELECT * FROM WalletAddress
WHERE accountId = ? ORDER BY chainIndex, derivationIndex, address`, [accountId]);
}
export async function upsertWalletAddresses(list) {
for (const a of list) {
assertSourceMatchesAccount('WalletAddress', a.accountId, a.sourceId);
db.run(`INSERT INTO WalletAddress
(accountId, sourceId, address, chainIndex, derivationIndex, automaticLabel, balanceSats, transactionCount, lastScannedAt)
VALUES (?,?,?,?,?,?,?,?,?)
ON CONFLICT(address) DO UPDATE SET
accountId=excluded.accountId, sourceId=excluded.sourceId, chainIndex=excluded.chainIndex,
derivationIndex=excluded.derivationIndex, automaticLabel=excluded.automaticLabel,
balanceSats=excluded.balanceSats, transactionCount=excluded.transactionCount, lastScannedAt=excluded.lastScannedAt`,
[a.accountId, a.sourceId ?? null, a.address, a.chainIndex ?? null, a.derivationIndex ?? null,
a.automaticLabel ?? null, a.balanceSats ?? null, a.transactionCount ?? null, a.lastScannedAt ?? nowIso()]);
}
await db.persist();
}
export function sourceBalance(sourceId) {
return db.one(`SELECT COALESCE(SUM(balanceSats),0) AS sats, COUNT(*) AS n, MAX(lastScannedAt) AS scanned
FROM WalletAddress WHERE sourceId=?`, [sourceId]);
}
export function accountOnchainBalance(accountId) {
return db.one(`SELECT COALESCE(SUM(balanceSats),0) AS sats FROM WalletAddress WHERE accountId=?`, [accountId]).sats;
}