import type { NftEntity, TokenEntity } from "../types/db.types"; import { tokenIdToHex } from "../utils/common"; import type { WalletDB } from "../persistence/wallet-db"; export class WalletCache { private readonly walletDb: WalletDB; private readonly tokens = new Map(); private readonly nfts = new Map(); public constructor(walletDb: WalletDB) { this.walletDb = walletDb; } public clear(): void { this.tokens.clear(); this.nfts.clear(); } public hasToken(id: string): boolean { id = tokenIdToHex(id); return this.tokens.has(id); } public hasNft(id: string): boolean { id = tokenIdToHex(id); return this.nfts.has(id); } public async getToken(id: string): Promise { id = tokenIdToHex(id); if (this.tokens.has(id)) { return this.tokens.get(id)!; } const token = await this.walletDb.getToken(id); if (token) { this.tokens.set(id, token); } return token; } public async getNft(id: string): Promise { id = tokenIdToHex(id); if (this.nfts.has(id)) { return this.nfts.get(id)!; } const nft = await this.walletDb.getLocalNft(id); if (nft) { this.nfts.set(id, nft); } return nft; } public removeToken(id: string): void { this.tokens.delete(tokenIdToHex(id)); } public removeNft(id: string): void { this.nfts.delete(tokenIdToHex(id)); } }