{"version":3,"file":"finalizeRfqConstruction.mjs","sources":["../../../../../src/plugins/rfqModule/operations/finalizeRfqConstruction.ts"],"sourcesContent":["import { createFinalizeRfqConstructionInstruction } from '@convergence-rfq/rfq';\nimport { ComputeBudgetProgram, PublicKey } from '@solana/web3.js';\n\nimport { SendAndConfirmTransactionResponse } from '../../rpcModule';\nimport { assertRfq, Rfq } from '../models';\nimport {\n  TransactionBuilder,\n  TransactionBuilderOptions,\n} from '../../../utils/TransactionBuilder';\nimport {\n  makeConfirmOptionsFinalizedOnMainnet,\n  Operation,\n  OperationHandler,\n  OperationScope,\n  useOperation,\n  Signer,\n} from '../../../types';\nimport { Convergence } from '../../../Convergence';\nimport { LegInstrument } from '@/plugins/instrumentModule';\nimport { PrintTradeLeg } from '@/plugins/printTradeModule';\nimport { addComputeBudgetIxsIfNeeded } from '@/utils/helpers';\n\nconst Key = 'FinalizeRfqConstructionOperation' as const;\n\n/**\n * Finalizes construction of an Rfq.\n *\n * ```ts\n * const { rfq } = await convergence.rfqs.create(...);\n *\n * const { rfq } = await convergence\n *   .rfqs()\n *   .finalize({\n *     rfq: rfq.address\n *   });\n * ```\n *\n * @group Operations\n * @category Constructors\n */\nexport const finalizeRfqConstructionOperation =\n  useOperation<FinalizeRfqConstructionOperation>(Key);\n\n/**\n * @group Operations\n * @category Types\n */\nexport type FinalizeRfqConstructionOperation = Operation<\n  typeof Key,\n  FinalizeRfqConstructionInput,\n  FinalizeRfqConstructionOutput\n>;\n\n/**\n * @group Operations\n * @category Inputs\n */\nexport type FinalizeRfqConstructionInput = {\n  /**\n   * The taker of the Rfq to create.\n   *\n   * @defaultValue `convergence.identity().publicKey`\n   */\n  taker?: Signer;\n\n  /** The address of the Rfq account. */\n  rfq: PublicKey;\n\n  /** Optional address of the Taker's collateral info account.\n   * @defaultValue `convergence.collateral().pdas().collateralInfo({ user: rfq.taker })`\n   *\n   */\n  collateralInfo?: PublicKey;\n\n  /** Optional address of the Taker's collateral tokens account.\n   *\n   * @defaultValue `convergence.collateral().pdas().\n   *   collateralTokens({\n   *     user: convergence.identity().publicKey\n   *   })`\n   */\n  collateralToken?: PublicKey;\n\n  /** Optional address of the risk engine program. */\n  riskEngine?: PublicKey;\n\n  /** Optional legs of the rfq, should not be passed manually.\n   * Is passed automatically when `createAndFinalize`\n   * is called. Else the legs are extracted from the rfq account.\n   */\n  legs?: LegInstrument[] | PrintTradeLeg[];\n};\n\n/**\n * @group Operations\n * @category Outputs\n */\nexport type FinalizeRfqConstructionOutput = {\n  /** The blockchain response from sending and confirming the transaction. */\n  response: SendAndConfirmTransactionResponse;\n\n  rfq: Rfq;\n};\n\n/**\n * @group Operations\n * @category Handlers\n */\nexport const finalizeRfqConstructionOperationHandler: OperationHandler<FinalizeRfqConstructionOperation> =\n  {\n    handle: async (\n      operation: FinalizeRfqConstructionOperation,\n      convergence: Convergence,\n      scope: OperationScope\n    ): Promise<FinalizeRfqConstructionOutput> => {\n      const { rfq: inputRfq } = operation.input;\n\n      const builder = await finalizeRfqConstructionBuilder(\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      const output = await builder.sendAndConfirm(convergence, confirmOptions);\n      scope.throwIfCanceled();\n\n      const rfq = await convergence\n        .rfqs()\n        .findRfqByAddress({ address: inputRfq });\n      assertRfq(rfq);\n\n      return { ...output, rfq };\n    },\n  };\n\n/**\n * @group Transaction Builders\n * @category Inputs\n */\nexport type FinalizeRfqConstructionBuilderParams = FinalizeRfqConstructionInput;\n\n/**\n * @group Transaction Builders\n * @category Contexts\n */\nexport type FinalizeRfqConstructionBuilderContext =\n  SendAndConfirmTransactionResponse;\n\n/**\n * Finalizes an Rfq.\n *\n * ```ts\n * const transactionBuilder = await convergence\n *   .rfqs()\n *   .builders()\n *   .create();\n * ```\n *\n * @group Transaction Builders\n * @category Constructors\n */\nexport const finalizeRfqConstructionBuilder = async (\n  convergence: Convergence,\n  params: FinalizeRfqConstructionBuilderParams,\n  options: TransactionBuilderOptions = {}\n): Promise<TransactionBuilder> => {\n  const { programs, payer = convergence.rpc().getDefaultFeePayer() } = options;\n\n  const riskEngineProgram = convergence.programs().getRiskEngine(programs);\n  const rfqProgram = convergence.programs().getRfq(programs);\n\n  const {\n    taker = convergence.identity(),\n    riskEngine = riskEngineProgram.address,\n    rfq,\n  } = params;\n  let { legs, collateralInfo, collateralToken } = params;\n\n  const collateralInfoPda = convergence.collateral().pdas().collateralInfo({\n    user: taker.publicKey,\n    programs,\n  });\n  const collateralTokenPda = convergence.collateral().pdas().collateralToken({\n    user: taker.publicKey,\n    programs,\n  });\n\n  legs =\n    legs ?? (await convergence.rfqs().findRfqByAddress({ address: rfq })).legs;\n\n  collateralInfo = collateralInfo ?? collateralInfoPda;\n  collateralToken = collateralToken ?? collateralTokenPda;\n\n  const protocol = convergence.protocol().pdas().protocol();\n\n  const txBuilder = TransactionBuilder.make()\n    .setFeePayer(payer)\n    .setContext({\n      rfq,\n    })\n    .add({\n      instruction: ComputeBudgetProgram.setComputeUnitLimit({\n        units: 300000,\n      }),\n      signers: [],\n    })\n    .add({\n      instruction: createFinalizeRfqConstructionInstruction(\n        {\n          taker: taker.publicKey,\n          protocol,\n          rfq,\n          collateralInfo,\n          collateralToken,\n          riskEngine,\n        },\n        rfqProgram.address\n      ),\n      signers: [taker],\n      key: 'finalizeRfqConstruction',\n    });\n\n  await addComputeBudgetIxsIfNeeded(txBuilder, convergence, true);\n  return txBuilder;\n};\n"],"names":["Key","finalizeRfqConstructionOperation","useOperation","finalizeRfqConstructionOperationHandler","handle","_handle","_asyncToGenerator","_regeneratorRuntime","mark","_callee","operation","convergence","scope","inputRfq","builder","confirmOptions","output","rfq","wrap","_callee$","_context","prev","next","input","finalizeRfqConstructionBuilder","_objectSpread","sent","throwIfCanceled","makeConfirmOptionsFinalizedOnMainnet","sendAndConfirm","rfqs","findRfqByAddress","address","assertRfq","abrupt","stop","_x","_x2","_x3","apply","arguments","_ref","_callee2","params","_legs","_collateralInfo","_collateralToken","options","programs","_options$payer","payer","riskEngineProgram","rfqProgram","_params$taker","taker","_params$riskEngine","riskEngine","legs","collateralInfo","collateralToken","collateralInfoPda","collateralTokenPda","protocol","txBuilder","_args2","_callee2$","_context2","length","undefined","rpc","getDefaultFeePayer","getRiskEngine","getRfq","identity","collateral","pdas","user","publicKey","t0","TransactionBuilder","make","setFeePayer","setContext","add","instruction","ComputeBudgetProgram","setComputeUnitLimit","units","signers","createFinalizeRfqConstructionInstruction","key","addComputeBudgetIxsIfNeeded","_x4","_x5"],"mappings":"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"}