diff --git a/apps/desktop/src/bun/index.ts b/apps/desktop/src/bun/index.ts index bddeec8..11e1201 100644 --- a/apps/desktop/src/bun/index.ts +++ b/apps/desktop/src/bun/index.ts @@ -195,6 +195,10 @@ type RPC = { params: {} response: void } + setAutoSync: { + params: { address: string; chainid: string } | null + response: void + } fetchTokenBalances: { params: { address: string @@ -316,7 +320,13 @@ type RPC = { }> webview: RPCSchema<{ requests: {} - messages: {} + messages: { + transfersUpdate: { + count: number + chainid: string + address: string + } + } }> } @@ -419,6 +429,9 @@ function mapTransfer(t: any): TxEntry { let moneroManager: MoneroWalletManager | null = null let moneroDownloading = false +let autoSyncTarget: { address: string; chainid: string } | null = null +let autoSyncTimer: ReturnType | null = null + const rpc = BrowserView.defineRPC({ maxRequestTime: 120000, handlers: { @@ -614,9 +627,45 @@ const rpc = BrowserView.defineRPC({ name: 'alchemy_key', }) if (!key) return - syncTransactionHistory(key, chainid, address).catch((e) => - console.error('[sync] error:', e), - ) + try { + const count = await syncTransactionHistory( + key, + chainid, + address, + ) + rpc.send.transfersUpdate({ count, chainid, address }) + } catch (e) { + console.error('[sync] error:', e) + } + }, + setAutoSync: async (target) => { + if (autoSyncTimer) clearInterval(autoSyncTimer) + autoSyncTimer = null + autoSyncTarget = null + if (!target) return + autoSyncTarget = target + autoSyncTimer = setInterval(async () => { + if (!autoSyncTarget) return + const key = await Bun.secrets.get({ + service: 'koins', + name: 'alchemy_key', + }) + if (!key) return + try { + const count = await syncTransactionHistory( + key, + autoSyncTarget.chainid, + autoSyncTarget.address, + ) + rpc.send.transfersUpdate({ + count, + chainid: autoSyncTarget.chainid, + address: autoSyncTarget.address, + }) + } catch (e) { + console.error('[auto-sync] error:', e) + } + }, 30000) }, flushTxCache: async () => { sqlite.run('DELETE FROM tx_history') diff --git a/apps/desktop/src/bun/lib/sync/sync-tx-history.ts b/apps/desktop/src/bun/lib/sync/sync-tx-history.ts index 45f1294..93db22d 100644 --- a/apps/desktop/src/bun/lib/sync/sync-tx-history.ts +++ b/apps/desktop/src/bun/lib/sync/sync-tx-history.ts @@ -11,7 +11,7 @@ export const syncTransactionHistory = async ( key: string, chainid: string, address: string, -) => { +): Promise => { const addrLower = address.toLowerCase() const existing = db @@ -39,7 +39,7 @@ export const syncTransactionHistory = async ( }, ) - if (!transfers || transfers.length === 0) return + if (!transfers || transfers.length === 0) return 0 const prepared: Array = [] let latestBlock = Number(existing?.lastSyncBlock ?? '0') @@ -91,6 +91,8 @@ export const syncTransactionHistory = async ( console.log( `[sync] ${chainid}/${addrLower}: synced ${prepared.length} transfers up to block ${latestBlock}`, ) + + return prepared.length } function flush(prepared: Array) { diff --git a/apps/desktop/src/lib/components/EvmDashboard.svelte b/apps/desktop/src/lib/components/EvmDashboard.svelte index 93dfb7a..b063e78 100644 --- a/apps/desktop/src/lib/components/EvmDashboard.svelte +++ b/apps/desktop/src/lib/components/EvmDashboard.svelte @@ -367,12 +367,6 @@ {/if}
-