{"version":3,"file":"partlyRevertSettlementPreparation.cjs","sources":["../../../../../src/plugins/rfqModule/operations/partlyRevertSettlementPreparation.ts"],"sourcesContent":["import { PublicKey, AccountMeta } from '@solana/web3.js';\nimport { createPartlyRevertEscrowSettlementPreparationInstruction } from '@convergence-rfq/rfq';\nimport { TOKEN_PROGRAM_ID } from '@solana/spl-token';\n\nimport { SendAndConfirmTransactionResponse } from '../../rpcModule';\nimport {\n  Operation,\n  OperationHandler,\n  OperationScope,\n  useOperation,\n  makeConfirmOptionsFinalizedOnMainnet,\n} from '../../../types';\nimport { Convergence } from '../../../Convergence';\nimport {\n  TransactionBuilder,\n  TransactionBuilderOptions,\n} from '../../../utils/TransactionBuilder';\nimport { InstrumentPdasClient } from '../../instrumentModule';\nimport { AuthoritySide, toSolitaAuthoritySide } from '../models/AuthoritySide';\nimport { legToBaseAssetMint } from '@/plugins/instrumentModule';\nimport { addComputeBudgetIxsIfNeeded } from '@/utils/helpers';\n\nconst Key = 'PartlyRevertSettlementPreparationOperation' as const;\n\n/**\n * Partially reverts settlement preparations.\n *\n * ```ts\n * const rfq = await convergence\n *   .rfqs()\n *   .partlyRevertSettlementPreparation({\n *     rfq: rfq.address,\n *     response: rfqResponse.address,\n *     side: AuthoritySide.Maker,\n *     legAmountToRevert: 3\n *   });\n * ```\n *\n * @group Operations\n * @category Constructors\n */\nexport const partlyRevertSettlementPreparationOperation =\n  useOperation<PartlyRevertSettlementPreparationOperation>(Key);\n\n/**\n * @group Operations\n * @category Types\n */\nexport type PartlyRevertSettlementPreparationOperation = Operation<\n  typeof Key,\n  PartlyRevertSettlementPreparationInput,\n  PartlyRevertSettlementPreparationOutput\n>;\n\n/**\n * @group Operations\n * @category Inputs\n */\nexport type PartlyRevertSettlementPreparationInput = {\n  /**\n   * The protocol address.\n   * @defaultValue `convergence.protocol().pdas().protocol()`\n   */\n  protocol?: PublicKey;\n\n  /** The Rfq address. */\n  rfq: PublicKey;\n\n  /** The response address. */\n  response: PublicKey;\n\n  /*\n   * Args\n   */\n\n  /**\n   * The side (Maker or Taker) that is partly reverting\n   * settlement preparation.\n   */\n  side: AuthoritySide;\n\n  /** The number of legs to revert settlement preparation for. */\n  legAmountToRevert: number;\n};\n\n/**\n * @group Operations\n * @category Outputs\n */\nexport type PartlyRevertSettlementPreparationOutput = {\n  /** The blockchain response from sending and confirming the transaction. */\n  response: SendAndConfirmTransactionResponse;\n};\n\n/**\n * @group Operations\n * @category Handlers\n */\nexport const partlyRevertSettlementPreparationOperationHandler: OperationHandler<PartlyRevertSettlementPreparationOperation> =\n  {\n    handle: async (\n      operation: PartlyRevertSettlementPreparationOperation,\n      convergence: Convergence,\n      scope: OperationScope\n    ): Promise<PartlyRevertSettlementPreparationOutput> => {\n      const builder = await partlyRevertSettlementPreparationBuilder(\n        convergence,\n        {\n          ...operation.input,\n        },\n        scope\n      );\n      scope.throwIfCanceled();\n\n      const confirmOptions = makeConfirmOptionsFinalizedOnMainnet(\n        convergence,\n        scope.confirmOptions\n      );\n\n      const output = await builder.sendAndConfirm(convergence, confirmOptions);\n      scope.throwIfCanceled();\n\n      return output;\n    },\n  };\n\nexport type PartlyRevertSettlementPreparationBuilderParams =\n  PartlyRevertSettlementPreparationInput;\n\n/**\n * Partially reverts settlement preparations\n *\n * ```ts\n * const transactionBuilder = await convergence\n *   .rfqs()\n *   .builders()\n *   .partlyRevertSettlementPreparation();\n * ```\n *\n * @group Transaction Builders\n * @category Constructors\n */\nexport const partlyRevertSettlementPreparationBuilder = async (\n  convergence: Convergence,\n  params: PartlyRevertSettlementPreparationBuilderParams,\n  options: TransactionBuilderOptions = {}\n): Promise<TransactionBuilder> => {\n  const { programs, payer = convergence.rpc().getDefaultFeePayer() } = options;\n  const rfqProgram = convergence.programs().getRfq(programs);\n\n  const { rfq, response, side, legAmountToRevert } = params;\n\n  const anchorRemainingAccounts: AccountMeta[] = [];\n\n  const rfqModel = await convergence.rfqs().findRfqByAddress({ address: rfq });\n  const responseModel = await convergence\n    .rfqs()\n    .findResponseByAddress({ address: response });\n\n  if (\n    responseModel.model !== 'escrowResponse' ||\n    rfqModel.model !== 'escrowRfq'\n  ) {\n    throw new Error('Response is not settled as an escrow!');\n  }\n\n  const sidePreparedLegs: number =\n    side === 'taker'\n      ? parseInt(responseModel.takerPreparedLegs.toString())\n      : parseInt(responseModel.makerPreparedLegs.toString());\n\n  const startIndex = sidePreparedLegs - legAmountToRevert;\n\n  for (let i = startIndex; i < sidePreparedLegs; i++) {\n    const instrumentEscrowPda = new InstrumentPdasClient(\n      convergence\n    ).instrumentEscrow({\n      response,\n      index: i,\n      rfqModel,\n    });\n\n    const instrumentProgramAccount: AccountMeta = {\n      pubkey: rfqModel.legs[i].getProgramId(),\n      isSigner: false,\n      isWritable: false,\n    };\n\n    const leg = rfqModel.legs[i];\n    const baseAssetMint = await legToBaseAssetMint(convergence, leg);\n\n    const legAccounts: AccountMeta[] = [\n      //`escrow`\n      {\n        pubkey: instrumentEscrowPda,\n        isSigner: false,\n        isWritable: true,\n      },\n      // `receiver_tokens`\n      {\n        pubkey: convergence\n          .tokens()\n          .pdas()\n          .associatedTokenAccount({\n            mint: baseAssetMint!.address,\n            owner: side === 'maker' ? responseModel.maker : rfqModel.taker,\n            programs,\n          }),\n        isSigner: false,\n        isWritable: true,\n      },\n      { pubkey: TOKEN_PROGRAM_ID, isSigner: false, isWritable: false },\n    ];\n\n    anchorRemainingAccounts.push(instrumentProgramAccount, ...legAccounts);\n  }\n\n  const txBuilder = TransactionBuilder.make()\n    .setFeePayer(payer)\n    .add({\n      instruction: createPartlyRevertEscrowSettlementPreparationInstruction(\n        {\n          protocol: convergence.protocol().pdas().protocol(),\n          rfq,\n          response,\n          anchorRemainingAccounts,\n        },\n        {\n          side: toSolitaAuthoritySide(side),\n          legAmountToRevert,\n        },\n        rfqProgram.address\n      ),\n      signers: [],\n      key: 'partlyRevertSettlementPreparation',\n    });\n\n  await addComputeBudgetIxsIfNeeded(txBuilder, convergence);\n  return txBuilder;\n};\n"],"names":["Key","partlyRevertSettlementPreparationOperation","useOperation","partlyRevertSettlementPreparationOperationHandler","handle","_handle","_asyncToGenerator","_regeneratorRuntime","mark","_callee","operation","convergence","scope","builder","confirmOptions","output","wrap","_callee$","_context","prev","next","partlyRevertSettlementPreparationBuilder","_objectSpread","input","sent","throwIfCanceled","makeConfirmOptionsFinalizedOnMainnet","sendAndConfirm","abrupt","stop","_x","_x2","_x3","apply","arguments","_ref","_callee2","params","options","programs","_options$payer","payer","rfqProgram","rfq","response","side","legAmountToRevert","anchorRemainingAccounts","rfqModel","responseModel","sidePreparedLegs","startIndex","i","instrumentEscrowPda","instrumentProgramAccount","leg","baseAssetMint","legAccounts","txBuilder","_args2","_callee2$","_context2","length","undefined","rpc","getDefaultFeePayer","getRfq","rfqs","findRfqByAddress","address","findResponseByAddress","model","Error","parseInt","takerPreparedLegs","toString","makerPreparedLegs","InstrumentPdasClient","instrumentEscrow","index","pubkey","legs","getProgramId","isSigner","isWritable","legToBaseAssetMint","tokens","pdas","associatedTokenAccount","mint","owner","maker","taker","TOKEN_PROGRAM_ID","push","concat","TransactionBuilder","make","setFeePayer","add","instruction","createPartlyRevertEscrowSettlementPreparationInstruction","protocol","toSolitaAuthoritySide","signers","key","addComputeBudgetIxsIfNeeded","_x4","_x5"],"mappings":"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"}