UNPKG

@silvana-one/abi

Version:

Silvana ABI Experimental Library

59 lines 2.24 kB
import { fetchAccount } from "o1js"; /** * Fetches the Mina account for a given public key with error handling * @param params the parameters for fetching the account * @param params.publicKey the public key of the account * @param params.tokenId the token id of the account * @param params.force whether to force the fetch - use it only if you are sure the account exists * @returns the account object */ export async function fetchMinaAccount(params) { const { publicKey, tokenId, force = false } = params; const timeout = 1000 * 60 * 3; // 3 minutes let attempt = 0; const startTime = Date.now(); let result = { account: undefined }; while (Date.now() - startTime < timeout) { try { const result = await fetchAccount({ publicKey, tokenId, }); return result.account; } catch (error) { if (force === true) console.log("Error in fetchMinaAccount:", { error, publicKey: typeof publicKey === "string" ? publicKey : publicKey.toBase58(), tokenId: tokenId?.toString(), force, }); else { console.log("fetchMinaAccount error", { error, publicKey: typeof publicKey === "string" ? publicKey : publicKey.toBase58(), tokenId: tokenId?.toString(), force, }); return result.account; } } attempt++; await sleep(1000 * 6 * attempt); // to handle rate limit we increase the interval } if (force === true) throw new Error(`fetchMinaAccount timeout ${{ publicKey: typeof publicKey === "string" ? publicKey : publicKey.toBase58(), tokenId: tokenId?.toString(), force, }}`); else console.log("fetchMinaAccount timeout", typeof publicKey === "string" ? publicKey : publicKey.toBase58(), tokenId?.toString(), force); return result.account; } function sleep(ms) { return new Promise((resolve) => setTimeout(resolve, ms)); } //# sourceMappingURL=fetch.js.map