import type { AccountData } from "@cardinal/common"; import { BorshAccountsCoder } from "@project-serum/anchor"; import type { Connection, PublicKey } from "@solana/web3.js"; import type { PaidClaimApproverData } from "./constants"; import { CLAIM_APPROVER_ADDRESS, CLAIM_APPROVER_IDL, claimApproverProgram, } from "./constants"; import { findClaimApproverAddress } from "./pda"; export const getClaimApprover = async ( connection: Connection, tokenManagerId: PublicKey ): Promise> => { const program = claimApproverProgram(connection); const claimApproverId = findClaimApproverAddress(tokenManagerId); const parsed = await program.account.paidClaimApprover.fetch(claimApproverId); return { parsed, pubkey: claimApproverId, }; }; export const getClaimApprovers = async ( connection: Connection, claimApproverIds: PublicKey[] ): Promise[]> => { const program = claimApproverProgram(connection); let claimApprovers: (PaidClaimApproverData | null)[] = []; try { claimApprovers = (await program.account.paidClaimApprover.fetchMultiple( claimApproverIds )) as (PaidClaimApproverData | null)[]; } catch (e) { console.log(e); } return claimApprovers.map((tm, i) => ({ parsed: tm, pubkey: claimApproverIds[i]!, })); }; export const getAllClaimApprovers = async ( connection: Connection ): Promise[]> => { const programAccounts = await connection.getProgramAccounts( CLAIM_APPROVER_ADDRESS ); const claimApprovers: AccountData[] = []; const coder = new BorshAccountsCoder(CLAIM_APPROVER_IDL); programAccounts.forEach((account) => { try { const claimApproverData: PaidClaimApproverData = coder.decode( "paidClaimApprover", account.account.data ); claimApprovers.push({ ...account, parsed: claimApproverData, }); } catch (e) { console.log(`Failed to decode claim approver data`); } }); return claimApprovers; };