{"version":3,"file":"cleanUpResponseLegs.cjs","sources":["../../../../../src/plugins/rfqModule/operations/cleanUpResponseLegs.ts"],"sourcesContent":["import { createCleanUpResponseEscrowLegsInstruction } from '@convergence-rfq/rfq';\nimport { PublicKey, AccountMeta } from '@solana/web3.js';\nimport { TOKEN_PROGRAM_ID } from '@solana/spl-token';\n\nimport { SendAndConfirmTransactionResponse } from '../../rpcModule';\nimport { Convergence } from '../../../Convergence';\nimport {\n  Operation,\n  OperationHandler,\n  OperationScope,\n  useOperation,\n} from '../../../types';\nimport {\n  TransactionBuilder,\n  TransactionBuilderOptions,\n} from '../../../utils/TransactionBuilder';\nimport { getOrCreateATA } from '../../../utils/ata';\nimport { InstrumentPdasClient } from '../../instrumentModule/InstrumentPdasClient';\nimport { protocolCache } from '../../protocolModule/cache';\nimport { legToBaseAssetMint } from '@/plugins/instrumentModule';\nimport { addComputeBudgetIxsIfNeeded } from '@/utils/helpers';\n\nconst Key = 'CleanUpResponseLegsOperation' as const;\n\n/**\n * Cleans up legs for a response.\n \n * ```ts\n * await convergence\n *   .rfqs()\n *   .cleanUpResponseLegs({\n *     rfq: rfq.address,\n *     response: rfqResponse.address,\n *     firstToPrepare: maker.publicKey,\n *     legAmountToClear: 5\n *   });\n * ```\n *\n * @group Operations\n * @category Constructors\n */\nexport const cleanUpResponseLegsOperation =\n  useOperation<CleanUpResponseLegsOperation>(Key);\n\n/**\n * @group Operations\n * @category Types\n */\nexport type CleanUpResponseLegsOperation = Operation<\n  typeof Key,\n  CleanUpResponseLegsInput,\n  CleanUpResponseLegsOutput\n>;\n\n/**\n * @group Operations\n * @category Inputs\n */\nexport type CleanUpResponseLegsInput = {\n  /**\n   * The address of the RFQ account.\n   */\n  rfq: PublicKey;\n\n  /**\n   * The address of the Reponse account.\n   */\n  response: PublicKey;\n\n  /**\n   * The first maker or taker to begin settlement preparation.\n   */\n  firstToPrepare: PublicKey;\n\n  /**\n   * The number of legs to clear.\n   */\n  legAmountToClear: number;\n\n  /**\n   * The protocol address.\n   *\n   * @defaultValue `convergence.protocol().pdas().protocol()`\n   */\n  protocol?: PublicKey;\n};\n\n/**\n * @group Operations\n * @category Outputs\n */\nexport type CleanUpResponseLegsOutput = {\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 cleanUpResponseLegsOperationHandler: OperationHandler<CleanUpResponseLegsOperation> =\n  {\n    handle: async (\n      operation: CleanUpResponseLegsOperation,\n      convergence: Convergence,\n      scope: OperationScope\n    ): Promise<CleanUpResponseLegsOutput> => {\n      scope.throwIfCanceled();\n\n      const builder = await cleanUpResponseLegsBuilder(\n        convergence,\n        {\n          ...operation.input,\n        },\n        scope\n      );\n\n      const output = await builder.sendAndConfirm(\n        convergence,\n        scope.confirmOptions\n      );\n      scope.throwIfCanceled();\n\n      return { ...output };\n    },\n  };\n\n/**\n * @group Transaction Builders\n * @category Inputs\n */\nexport type CleanUpResponseLegsBuilderParams = CleanUpResponseLegsInput;\n\n/**\n * Cleans up Legs for a Response.\n *\n * ```ts\n * const transactionBuilder = convergence\n *   .rfqs()\n *   .builders()\n *   .cleanUpResponseLegs({ address });\n * ```\n *\n * @group Transaction Builders\n * @category Constructors\n */\nexport const cleanUpResponseLegsBuilder = async (\n  convergence: Convergence,\n  params: CleanUpResponseLegsBuilderParams,\n  options: TransactionBuilderOptions = {}\n): Promise<TransactionBuilder> => {\n  const { programs, payer = convergence.rpc().getDefaultFeePayer() } = options;\n  const { rfq, response, firstToPrepare, legAmountToClear } = params;\n\n  const protocol = await protocolCache.get(convergence);\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 initializedLegs = responseModel.legPreparationsInitializedBy.length;\n  const anchorRemainingAccounts: AccountMeta[] = [];\n  for (let i = initializedLegs - legAmountToClear; i < initializedLegs; i++) {\n    const instrumentProgramAccount: AccountMeta = {\n      pubkey: rfqModel.legs[i].getProgramId(),\n      isSigner: false,\n      isWritable: false,\n    };\n\n    const instrumentEscrowPda = new InstrumentPdasClient(\n      convergence\n    ).instrumentEscrow({\n      response,\n      index: i,\n      rfqModel,\n    });\n\n    const leg = rfqModel.legs[i];\n    const baseAssetMint = await legToBaseAssetMint(convergence, leg);\n\n    const legAccounts: AccountMeta[] = [\n      {\n        pubkey: firstToPrepare,\n        isSigner: false,\n        isWritable: true,\n      },\n      {\n        pubkey: instrumentEscrowPda,\n        isSigner: false,\n        isWritable: true,\n      },\n      {\n        pubkey: await getOrCreateATA(\n          convergence,\n          baseAssetMint!.address,\n          protocol.authority\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: createCleanUpResponseEscrowLegsInstruction(\n        {\n          protocol: protocol.address,\n          rfq,\n          response,\n          anchorRemainingAccounts,\n        },\n        {\n          legAmountToClear,\n        },\n        convergence.programs().getRfq(programs).address\n      ),\n      signers: [],\n      key: 'cleanUpResponseLegs',\n    });\n\n  await addComputeBudgetIxsIfNeeded(txBuilder, convergence);\n  return txBuilder;\n};\n"],"names":["Key","cleanUpResponseLegsOperation","useOperation","cleanUpResponseLegsOperationHandler","handle","_handle","_asyncToGenerator","_regeneratorRuntime","mark","_callee","operation","convergence","scope","builder","output","wrap","_callee$","_context","prev","next","throwIfCanceled","cleanUpResponseLegsBuilder","_objectSpread","input","sent","sendAndConfirm","confirmOptions","abrupt","stop","_x","_x2","_x3","apply","arguments","_ref","_callee2","params","options","programs","_options$payer","payer","rfq","response","firstToPrepare","legAmountToClear","protocol","rfqModel","responseModel","initializedLegs","anchorRemainingAccounts","i","instrumentProgramAccount","instrumentEscrowPda","leg","baseAssetMint","legAccounts","txBuilder","_args2","_callee2$","_context2","length","undefined","rpc","getDefaultFeePayer","protocolCache","get","rfqs","findRfqByAddress","address","findResponseByAddress","model","Error","legPreparationsInitializedBy","pubkey","legs","getProgramId","isSigner","isWritable","InstrumentPdasClient","instrumentEscrow","index","legToBaseAssetMint","t0","t1","getOrCreateATA","authority","t2","t3","t4","TOKEN_PROGRAM_ID","push","concat","TransactionBuilder","make","setFeePayer","add","instruction","createCleanUpResponseEscrowLegsInstruction","getRfq","signers","key","addComputeBudgetIxsIfNeeded","_x4","_x5"],"mappings":"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"}