import { BN } from "@coral-xyz/anchor"; import { AccountMeta, PublicKey, TransactionInstruction, TransactionSignature, VersionedTransaction } from "@solana/web3.js"; import { BaseClient, BaseTxBuilder, type ProtocolPolicyClient, type ProtocolPolicyTxBuilder, type TxOptions } from "../base"; import { VaultClient } from "../vault"; import { JupiterBorrowPolicy } from "../../deser/integrationPolicies"; import { JupiterPosition, JupiterTransferType, JupiterVault } from "./shared"; export type JupiterBorrowInitPositionAccounts = { vaultAdmin: PublicKey; vaultState: PublicKey; position: PublicKey; positionMint: PublicKey; positionTokenAccount: PublicKey; metadataAccount?: PublicKey; tokenProgram?: PublicKey; associatedTokenProgram?: PublicKey; sysvarInstruction?: PublicKey; metadataProgram?: PublicKey; }; export type JupiterBorrowOperateAccounts = { signerSupplyTokenAccount?: PublicKey; signerBorrowTokenAccount?: PublicKey; recipient?: PublicKey | null; recipientBorrowTokenAccount?: PublicKey | null; recipientSupplyTokenAccount?: PublicKey | null; vaultConfig: PublicKey; vaultState: PublicKey; supplyToken: PublicKey; borrowToken: PublicKey; oracle: PublicKey; position: PublicKey; positionTokenAccount: PublicKey; currentPositionTick: PublicKey; finalPositionTick: PublicKey; currentPositionTickId: PublicKey; finalPositionTickId: PublicKey; newBranch: PublicKey; supplyTokenReservesLiquidity: PublicKey; borrowTokenReservesLiquidity: PublicKey; vaultSupplyPositionOnLiquidity: PublicKey; vaultBorrowPositionOnLiquidity: PublicKey; supplyRateModel: PublicKey; borrowRateModel: PublicKey; vaultSupplyTokenAccount: PublicKey; vaultBorrowTokenAccount: PublicKey; supplyTokenClaimAccount?: PublicKey | null; borrowTokenClaimAccount?: PublicKey | null; liquidity: PublicKey; liquidityProgram?: PublicKey; oracleProgram?: PublicKey; supplyTokenProgram?: PublicKey; borrowTokenProgram?: PublicKey; associatedTokenProgram?: PublicKey; remainingAccounts?: AccountMeta[]; }; export type JupiterBorrowPosition = JupiterPosition & { positionTokenAccount: PublicKey; tokenAmount: string; tokenProgram: PublicKey; }; declare class TxBuilder extends BaseTxBuilder implements ProtocolPolicyTxBuilder { initPositionIx(vaultId: number, nextPositionId: number, accounts: JupiterBorrowInitPositionAccounts, signer?: PublicKey): Promise; initPositionTx(vaultId: number, nextPositionId: number, accounts: JupiterBorrowInitPositionAccounts, txOptions?: TxOptions): Promise; operateIx(newCol: BN | bigint | number, newDebt: BN | bigint | number, transferType: JupiterTransferType | null, remainingAccountsIndices: Buffer | Uint8Array | number[], accounts: JupiterBorrowOperateAccounts, signer?: PublicKey): Promise; operateTx(newCol: BN | bigint | number, newDebt: BN | bigint | number, transferType: JupiterTransferType | null, remainingAccountsIndices: Buffer | Uint8Array | number[], accounts: JupiterBorrowOperateAccounts, txOptions?: TxOptions): Promise; setPolicyIx(policy: JupiterBorrowPolicy, signer?: PublicKey): Promise; setPolicyTx(policy: JupiterBorrowPolicy, txOptions?: TxOptions): Promise; clearPolicyIx(signer?: PublicKey): Promise; clearPolicyTx(txOptions?: TxOptions): Promise; } export declare class JupiterBorrowClient implements ProtocolPolicyClient { readonly base: BaseClient; readonly vault: VaultClient; readonly txBuilder: TxBuilder; constructor(base: BaseClient, vault: VaultClient); getIntegrationAuthorityPda(): PublicKey; getPosition(position: PublicKey): Promise; listPositions(vaultId?: number): Promise; getVault(vaultId: number): Promise; listVaults(): Promise; initPosition(vaultId: number, txOptions?: TxOptions): Promise; deposit(position: PublicKey, amount: BN | bigint | number, txOptions?: TxOptions): Promise; withdraw(position: PublicKey, amount: BN | bigint | number, txOptions?: TxOptions): Promise; borrow(position: PublicKey, amount: BN | bigint | number, txOptions?: TxOptions): Promise; repay(position: PublicKey, amount: BN | bigint | number, txOptions?: TxOptions): Promise; operate(newCol: BN | bigint | number, newDebt: BN | bigint | number, transferType: JupiterTransferType | null, remainingAccountsIndices: Buffer | Uint8Array | number[], accounts: JupiterBorrowOperateAccounts, txOptions?: TxOptions): Promise; fetchPolicy(): Promise; setPolicy(policy: JupiterBorrowPolicy, txOptions?: TxOptions): Promise; clearPolicy(txOptions?: TxOptions): Promise; private simulateExpectedFinalTick; private runBorrowOperate; } export {};