import { AnchorProvider, Program } from "@coral-xyz/anchor"; import { Wallet } from "@coral-xyz/anchor/dist/cjs/provider"; import { ConfirmOptions, Connection } from "@solana/web3.js"; import { SolCatStakingType, SolCatStakingIDL } from "../types"; import { AccountFetcher } from "../fetcher"; import { BaseContext } from "./base-context"; import { SolCatMethods } from "../methods"; export class SolCatContext extends BaseContext { readonly program: Program; readonly methods: SolCatMethods; public static from( connection: Connection, wallet: Wallet, fetcher = new AccountFetcher(connection), opts: ConfirmOptions = AnchorProvider.defaultOptions(), ): SolCatContext { const provider = new AnchorProvider(connection, wallet, opts); const program = new Program(SolCatStakingIDL, provider); return new SolCatContext(provider, wallet, program, fetcher, opts); } public static withProvider( provider: AnchorProvider, fetcher = new AccountFetcher(provider.connection), opts: ConfirmOptions = AnchorProvider.defaultOptions(), ): SolCatContext { const program = new Program(SolCatStakingIDL, provider); return new SolCatContext(provider, provider.wallet, program, fetcher, opts); } private constructor( provider: AnchorProvider, wallet: Wallet, program: Program, fetcher: AccountFetcher, opts: ConfirmOptions, ) { super(provider, wallet, fetcher, opts); this.program = program as unknown as Program; this.methods = new SolCatMethods(this); } }