{"version":3,"file":"preparePrintTradeSettlement.cjs","sources":["../../../../../src/plugins/rfqModule/operations/preparePrintTradeSettlement.ts"],"sourcesContent":["import { createPreparePrintTradeSettlementInstruction } from '@convergence-rfq/rfq';\nimport { PublicKey } from '@solana/web3.js';\n\nimport { SendAndConfirmTransactionResponse } from '../../rpcModule';\nimport { Convergence } from '../../../Convergence';\nimport {\n  Operation,\n  OperationHandler,\n  OperationScope,\n  useOperation,\n  makeConfirmOptionsFinalizedOnMainnet,\n} from '../../../types';\nimport {\n  TransactionBuilder,\n  TransactionBuilderOptions,\n} from '../../../utils/TransactionBuilder';\nimport { getAuthoritySide } from '../helpers';\nimport { toSolitaAuthoritySide } from '../models';\nimport { prependWithProviderProgram } from '@/plugins/printTradeModule';\n\nconst Key = 'PreparePrintTradeSettlementOperation' as const;\n\n/**\n * @group Operations\n * @category Constructors\n */\nexport const preparePrintTradeSettlementOperation =\n  useOperation<PreparePrintTradeSettlementOperation>(Key);\n\n/**\n * @group Operations\n * @category Types\n */\nexport type PreparePrintTradeSettlementOperation = Operation<\n  typeof Key,\n  PreparePrintTradeSettlementInput,\n  PreparePrintTradeSettlementOutput\n>;\n\n/**\n * @group Operations\n * @category Inputs\n */\nexport type PreparePrintTradeSettlementInput = {\n  /** The address of the Rfq account. */\n  rfq: PublicKey;\n\n  /** The address of the Response account. */\n  response: PublicKey;\n};\n\n/**\n * @group Operations\n * @category Outputs\n */\nexport type PreparePrintTradeSettlementOutput = {\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 preparePrintTradeSettlementOperationHandler: OperationHandler<PreparePrintTradeSettlementOperation> =\n  {\n    handle: async (\n      operation: PreparePrintTradeSettlementOperation,\n      convergence: Convergence,\n      scope: OperationScope\n    ): Promise<PreparePrintTradeSettlementOutput> => {\n      const builders = await preparePrintTradeSettlementBuilders(\n        convergence,\n        {\n          ...operation.input,\n        },\n        scope\n      );\n\n      const confirmOptions = makeConfirmOptionsFinalizedOnMainnet(\n        convergence,\n        scope.confirmOptions\n      );\n\n      const lastValidBlockHeight = await convergence.rpc().getLatestBlockhash();\n      const txs = builders.map((x) => x.toTransaction(lastValidBlockHeight));\n      const signedTxs = await convergence.identity().signAllTransactions(txs);\n      const outputs = [];\n      for (const signedTx of signedTxs) {\n        const output = await convergence\n          .rpc()\n          .serializeAndSendTransaction(\n            signedTx,\n            lastValidBlockHeight,\n            confirmOptions\n          );\n        outputs.push(output);\n      }\n\n      scope.throwIfCanceled();\n\n      return { response: outputs[outputs.length - 1] };\n    },\n  };\n\n/**\n * @group Transaction Builders\n * @category Inputs\n */\nexport type PreparePrintTradeSettlementBuilderParams =\n  PreparePrintTradeSettlementInput;\n\n/**\n * Prepares for settlement\n *\n * ```ts\n * const transactionBuilder = convergence\n *   .rfqs()\n *   .builders()\n *   .preparePrintTradeSettlement({ address });\n * ```\n *\n * @group Transaction Builders\n * @category Constructors\n */\nexport const preparePrintTradeSettlementBuilders = async (\n  cvg: Convergence,\n  params: PreparePrintTradeSettlementBuilderParams,\n  options: TransactionBuilderOptions = {}\n): Promise<TransactionBuilder[]> => {\n  const { programs, payer = cvg.rpc().getDefaultFeePayer() } = options;\n  const { rfq, response } = params;\n\n  const caller = cvg.identity();\n  const rfqProgram = cvg.programs().getRfq(programs);\n\n  const rfqModel = await cvg.rfqs().findRfqByAddress({ address: rfq });\n  const responseModel = await cvg\n    .rfqs()\n    .findResponseByAddress({ address: response });\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 side = getAuthoritySide(caller.publicKey, rfqModel, responseModel);\n  if (side === null) {\n    throw Error('Passed caller is neither a taker nor a maker');\n  }\n\n  const { printTrade } = rfqModel;\n\n  const { accounts: printTradeAccounts, builders } =\n    await printTrade.getSettlementPreparations(\n      rfqModel,\n      responseModel,\n      side,\n      options\n    );\n\n  const remainingAccounts = prependWithProviderProgram(\n    printTrade,\n    printTradeAccounts\n  );\n\n  const preparePrintTradeIx = {\n    instruction: createPreparePrintTradeSettlementInstruction(\n      {\n        caller: caller.publicKey,\n        protocol: cvg.protocol().pdas().protocol(),\n        rfq,\n        response,\n        anchorRemainingAccounts: remainingAccounts,\n      },\n      {\n        side: toSolitaAuthoritySide(side),\n      },\n      rfqProgram.address\n    ),\n    signers: [caller],\n    key: 'preparePrintTradeSettlement',\n  };\n\n  return TransactionBuilder.make()\n    .setFeePayer(payer)\n    .add(...builders, preparePrintTradeIx)\n    .divideToMultipleBuildersThatFit();\n};\n"],"names":["Key","preparePrintTradeSettlementOperation","useOperation","preparePrintTradeSettlementOperationHandler","handle","_handle","_asyncToGenerator","_regeneratorRuntime","mark","_callee","operation","convergence","scope","builders","confirmOptions","lastValidBlockHeight","txs","signedTxs","outputs","_iterator","_step","signedTx","output","wrap","_callee$","_context","prev","next","preparePrintTradeSettlementBuilders","_objectSpread","input","sent","makeConfirmOptionsFinalizedOnMainnet","rpc","getLatestBlockhash","map","x","toTransaction","identity","signAllTransactions","_createForOfIteratorHelper","s","n","done","value","serializeAndSendTransaction","push","t0","e","f","finish","throwIfCanceled","abrupt","response","length","stop","_x","_x2","_x3","apply","arguments","_ref","_callee2","cvg","params","_TransactionBuilder$m","options","programs","_options$payer","payer","rfq","caller","rfqProgram","rfqModel","responseModel","side","printTrade","_yield$printTrade$get","printTradeAccounts","remainingAccounts","preparePrintTradeIx","_args2","_callee2$","_context2","undefined","getDefaultFeePayer","getRfq","rfqs","findRfqByAddress","address","findResponseByAddress","model","Error","getAuthoritySide","publicKey","getSettlementPreparations","accounts","prependWithProviderProgram","instruction","createPreparePrintTradeSettlementInstruction","protocol","pdas","anchorRemainingAccounts","toSolitaAuthoritySide","signers","key","TransactionBuilder","make","setFeePayer","add","_toConsumableArray","concat","divideToMultipleBuildersThatFit","_x4","_x5"],"mappings":"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"}