{"version":3,"file":"cleanUpResponse.mjs","sources":["../../../../../src/plugins/rfqModule/operations/cleanUpResponse.ts"],"sourcesContent":["import { createCleanUpResponseInstruction } from '@convergence-rfq/rfq';\nimport { PublicKey, AccountMeta } from '@solana/web3.js';\nimport { TOKEN_PROGRAM_ID } from '@solana/spl-token';\n\nimport { Convergence } from '../../../Convergence';\nimport {\n  Operation,\n  OperationHandler,\n  OperationScope,\n  useOperation,\n} from '../../../types';\nimport { TransactionBuilder, TransactionBuilderOptions } from '../../../utils';\nimport { InstrumentPdasClient } from '../../instrumentModule/InstrumentPdasClient';\nimport {\n  EscrowResponse,\n  EscrowRfq,\n  PrintTradeResponse,\n  PrintTradeRfq,\n} from '../models';\nimport { legToBaseAssetMint } from '@/plugins/instrumentModule';\nimport { SendAndConfirmTransactionResponse } from '@/plugins/rpcModule';\nimport { prependWithProviderProgram } from '@/plugins/printTradeModule';\nimport { addComputeBudgetIxsIfNeeded } from '@/utils/helpers';\n\nconst Key = 'cleanUpResponseOperation' as const;\n\n/**\n * Cleans up Rfq response.\n *\n * ```ts\n * await convergence\n *   .rfqs()\n *   .cleanUpResponse({\n *     rfq: <publicKey>,\n *     response: <publicKey>,\n *     firstToPrepare: <publicKey>\n *   });\n * ```\n *\n * @group Operations\n * @category Constructors\n */\nexport const cleanUpResponseOperation =\n  useOperation<CleanUpResponseOperation>(Key);\n\n/**\n * @group Operations\n * @category Types\n */\nexport type CleanUpResponseOperation = Operation<\n  typeof Key,\n  CleanUpResponseInput,\n  CleanUpResponseOutput\n>;\n\n/**\n * @group Operations\n * @category Inputs\n */\nexport type CleanUpResponseInput = {\n  /**\n   * The address of the reponse accounts.\n   */\n  response: PublicKey;\n};\n\n/**\n * @group Operations\n * @category Outputs\n */\nexport type CleanUpResponseOutput = {\n  response: SendAndConfirmTransactionResponse;\n};\n\n/**\n * @group Operations\n * @category Handlers\n */\nexport const cleanUpResponseOperationHandler: OperationHandler<CleanUpResponseOperation> =\n  {\n    handle: async (\n      operation: CleanUpResponseOperation,\n      convergence: Convergence,\n      scope: OperationScope\n    ) => {\n      const builder = await cleanUpResponseBuilder(\n        convergence,\n        {\n          ...operation.input,\n        },\n        scope\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 CleanUpResponseBuilderParams = CleanUpResponseInput;\n\n/**\n * Cleans up an existing Response.\n *\n * ```ts\n * const transactionBuilder = convergence\n *   .rfqs()\n *   .builders()\n *   .cleanUpResponses({ responses: [<address>, <address>] });\n * ```\n *\n * @group Transaction Builders\n * @category Constructors\n */\nexport const cleanUpResponseBuilder = async (\n  convergence: Convergence,\n  params: CleanUpResponseBuilderParams,\n  options: TransactionBuilderOptions = {}\n): Promise<TransactionBuilder> => {\n  const responseModel = await convergence\n    .rfqs()\n    .findResponseByAddress({ address: params.response });\n  const rfqModel = await convergence\n    .rfqs()\n    .findRfqByAddress({ address: responseModel.rfq });\n\n  if (\n    responseModel.model === 'escrowResponse' &&\n    rfqModel.model === 'escrowRfq'\n  ) {\n    return cleanUpEscrowResponseBuilder(\n      convergence,\n      {\n        response: responseModel,\n        rfq: rfqModel,\n      },\n      options\n    );\n  } else if (\n    responseModel.model === 'printTradeResponse' &&\n    rfqModel.model === 'printTradeRfq'\n  ) {\n    return cleanUpPrintTradeResponseBuilder(\n      convergence,\n      {\n        response: responseModel,\n        rfq: rfqModel,\n      },\n      options\n    );\n  }\n\n  throw new Error('Rfq type does not match with response type!');\n};\n\nexport type CleanUpEscrowResponseBuilderParams = {\n  response: PublicKey | EscrowResponse;\n  rfq?: EscrowRfq;\n};\n\nexport const cleanUpEscrowResponseBuilder = async (\n  convergence: Convergence,\n  params: CleanUpEscrowResponseBuilderParams,\n  options: TransactionBuilderOptions = {}\n) => {\n  const { programs, payer = convergence.rpc().getDefaultFeePayer() } = options;\n  const { response, rfq } = params;\n\n  const responseModel =\n    response instanceof PublicKey\n      ? await convergence.rfqs().findResponseByAddress({ address: response })\n      : response;\n  const rfqModel =\n    rfq ??\n    (await convergence.rfqs().findRfqByAddress({ address: responseModel.rfq }));\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 dao = convergence.identity().publicKey;\n  const rfqProgram = convergence.programs().getRfq(programs);\n  const anchorRemainingAccounts: AccountMeta[] = [];\n\n  for (let i = 0; i < responseModel.legPreparationsInitializedBy.length; i++) {\n    const leg = rfqModel.legs[i];\n    const firstToPrepare =\n      responseModel.legPreparationsInitializedBy[0] === 'maker'\n        ? responseModel.maker\n        : rfqModel.taker;\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      rfqModel,\n      response: responseModel.address,\n      index: i,\n    });\n\n    const baseAssetMint = await legToBaseAssetMint(convergence, leg);\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: convergence.tokens().pdas().associatedTokenAccount({\n          mint: baseAssetMint!.address,\n          owner: dao,\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 spotInstrumentProgram = convergence.programs().getSpotInstrument();\n  const spotInstrumentProgramAccount: AccountMeta = {\n    pubkey: spotInstrumentProgram.address,\n    isSigner: false,\n    isWritable: false,\n  };\n  const quoteEscrowPda = new InstrumentPdasClient(convergence).quoteEscrow({\n    response: responseModel.address,\n    program: spotInstrumentProgram.address,\n  });\n  const firstToPrepare =\n    responseModel.legPreparationsInitializedBy[0] === 'maker'\n      ? responseModel.maker\n      : rfqModel.taker;\n\n  anchorRemainingAccounts.push(\n    spotInstrumentProgramAccount,\n    {\n      pubkey: firstToPrepare,\n      isSigner: false,\n      isWritable: true,\n    },\n    // Escrow\n    {\n      pubkey: quoteEscrowPda,\n      isSigner: false,\n      isWritable: true,\n    },\n    // Receiver\n    {\n      pubkey: convergence.tokens().pdas().associatedTokenAccount({\n        mint: rfqModel.quoteMint,\n        owner: dao,\n        programs,\n      }),\n      isSigner: false,\n      isWritable: true,\n    },\n    { pubkey: TOKEN_PROGRAM_ID, isSigner: false, isWritable: false }\n  );\n\n  const txBuilder = TransactionBuilder.make()\n    .setFeePayer(payer)\n    .add({\n      instruction: createCleanUpResponseInstruction(\n        {\n          maker: responseModel.maker,\n          protocol: convergence.protocol().pdas().protocol(),\n          rfq: responseModel.rfq,\n          response: responseModel.address,\n          anchorRemainingAccounts,\n        },\n        rfqProgram.address\n      ),\n      signers: [],\n      key: 'cleanUpResponses',\n    });\n\n  await addComputeBudgetIxsIfNeeded(txBuilder, convergence);\n  return txBuilder;\n};\n\nexport type CleanUpPrintTradeResponseBuilderParams = {\n  response: PublicKey | PrintTradeResponse;\n  rfq?: PrintTradeRfq;\n};\n\nexport const cleanUpPrintTradeResponseBuilder = async (\n  convergence: Convergence,\n  params: CleanUpPrintTradeResponseBuilderParams,\n  options: TransactionBuilderOptions = {}\n) => {\n  const { programs, payer = convergence.rpc().getDefaultFeePayer() } = options;\n  const { response, rfq } = params;\n\n  const responseModel =\n    response instanceof PublicKey\n      ? await convergence.rfqs().findResponseByAddress({ address: response })\n      : response;\n  const rfqModel =\n    rfq ??\n    (await convergence.rfqs().findRfqByAddress({ address: responseModel.rfq }));\n\n  if (\n    responseModel.model !== 'printTradeResponse' ||\n    rfqModel.model !== 'printTradeRfq'\n  ) {\n    throw new Error('Response is not settled as a print trade!');\n  }\n\n  const rfqProgram = convergence.programs().getRfq(programs);\n  const remainingAccounts = prependWithProviderProgram(\n    rfqModel.printTrade,\n    await rfqModel.printTrade.getCleanUpAccounts(rfqModel, responseModel)\n  );\n\n  return TransactionBuilder.make()\n    .setFeePayer(payer)\n    .add({\n      instruction: createCleanUpResponseInstruction(\n        {\n          maker: responseModel.maker,\n          protocol: convergence.protocol().pdas().protocol(),\n          rfq: responseModel.rfq,\n          response: responseModel.address,\n          anchorRemainingAccounts: remainingAccounts,\n        },\n        rfqProgram.address\n      ),\n      signers: [],\n      key: 'cleanUpResponses',\n    });\n};\n"],"names":["Key","cleanUpResponseOperation","useOperation","cleanUpResponseOperationHandler","handle","_handle","_asyncToGenerator","_regeneratorRuntime","mark","_callee","operation","convergence","scope","builder","output","wrap","_callee$","_context","prev","next","cleanUpResponseBuilder","_objectSpread","input","sent","sendAndConfirm","confirmOptions","throwIfCanceled","abrupt","stop","_x","_x2","_x3","apply","arguments","_ref","_callee2","params","options","responseModel","rfqModel","_args2","_callee2$","_context2","length","undefined","rfqs","findResponseByAddress","address","response","findRfqByAddress","rfq","model","cleanUpEscrowResponseBuilder","cleanUpPrintTradeResponseBuilder","Error","_x4","_x5","_ref2","_callee3","programs","_options$payer","payer","dao","rfqProgram","anchorRemainingAccounts","i","leg","_firstToPrepare","instrumentProgramAccount","instrumentEscrowPda","baseAssetMint","legAccounts","spotInstrumentProgram","spotInstrumentProgramAccount","quoteEscrowPda","firstToPrepare","txBuilder","_args3","_callee3$","_context3","rpc","getDefaultFeePayer","PublicKey","t0","t1","identity","publicKey","getRfq","legPreparationsInitializedBy","legs","maker","taker","pubkey","getProgramId","isSigner","isWritable","InstrumentPdasClient","instrumentEscrow","index","legToBaseAssetMint","tokens","pdas","associatedTokenAccount","mint","owner","TOKEN_PROGRAM_ID","push","concat","getSpotInstrument","quoteEscrow","program","quoteMint","TransactionBuilder","make","setFeePayer","add","instruction","createCleanUpResponseInstruction","protocol","signers","key","addComputeBudgetIxsIfNeeded","_x6","_x7","_ref3","_callee4","_options$payer2","remainingAccounts","_args4","_callee4$","_context4","t2","prependWithProviderProgram","t3","printTrade","getCleanUpAccounts","t4","_x8","_x9"],"mappings":"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"}