{"version":3,"file":"confirmResponse.mjs","sources":["../../../../../src/plugins/rfqModule/operations/confirmResponse.ts"],"sourcesContent":["import { createConfirmResponseInstruction } 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  Signer,\n} from '../../../types';\nimport {\n  TransactionBuilder,\n  TransactionBuilderOptions,\n} from '../../../utils/TransactionBuilder';\nimport { Response } from '../models';\nimport { ResponseSide, toSolitaQuoteSide } from '../models/ResponseSide';\nimport { toSolitaOverrideLegMultiplierBps } from '../models/Confirmation';\n\nconst Key = 'ConfirmResponseOperation' as const;\n\n/**\n * Confirms a response.\n *\n * ```ts\n * await convergence\n *   .rfqs()\n *   .confirmResponse({\n *     rfq: <publicKey>,\n *     response: <publicKey>,\n *     side: 'bid' | 'ask'\n *   });\n * ```\n *\n * @group Operations\n * @category Constructors\n */\nexport const confirmResponseOperation =\n  useOperation<ConfirmResponseOperation>(Key);\n\n/**\n * @group Operations\n * @category Types\n */\nexport type ConfirmResponseOperation = Operation<\n  typeof Key,\n  ConfirmResponseInput,\n  ConfirmResponseOutput\n>;\n\n/**\n * @group Operations\n * @category Inputs\n */\nexport type ConfirmResponseInput = {\n  /** The address of the RFQ account. */\n  rfq: PublicKey;\n\n  /** The address of the response account. */\n  response: PublicKey;\n\n  /**\n   * The taker of the Rfq as a Signer.\n   *\n   * @defaultValue `convergence.identity()`\n   */\n  taker?: Signer;\n\n  /**\n   * Optional address of the taker collateral info account.\n   *\n   * @defaultValue `convergence.collateral().pdas().collateralInfo({ user: taker.publicKey })`\n   */\n  collateralInfo?: PublicKey;\n\n  /**\n   * Optional address of the maker collateral info account.\n   *\n   * @defaultValue `convergence.collateral().pdas().collateralInfo({ user: response.maker })`\n   */\n  makerCollateralInfo?: PublicKey;\n\n  /** The address of the collateral token. */\n  collateralToken?: PublicKey;\n\n  /**\n   * The protocol address.\n   *\n   * @defaultValue `convergence.protocol().pdas().protocol()`\n   */\n  protocol?: PublicKey;\n\n  /** The address of the risk engine program. */\n  riskEngine?: PublicKey;\n\n  /** The Side of the Response to confirm. */\n  side: ResponseSide;\n\n  /**\n   * Optional basis points multiplier to override the legsMultiplierBps of the\n   * Rfq's fixedSize property.\n   */\n  overrideLegMultiplier?: number;\n};\n\n/**\n * @group Operations\n * @category Outputs\n */\nexport type ConfirmResponseOutput = {\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 confirmResponseOperationHandler: OperationHandler<ConfirmResponseOperation> =\n  {\n    handle: async (\n      operation: ConfirmResponseOperation,\n      convergence: Convergence,\n      scope: OperationScope\n    ): Promise<ConfirmResponseOutput> => {\n      const builder = await confirmResponseBuilder(\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 ConfirmResponseBuilderParams = ConfirmResponseInput;\n\n/**\n * Confirms a response\n *\n * ```ts\n * const transactionBuilder = convergence\n *   .rfqs()\n *   .builders()\n *   .confirmResponse({ address });\n * ```\n *\n * @group Transaction Builders\n * @category Constructors\n */\nexport const confirmResponseBuilder = async (\n  convergence: Convergence,\n  params: ConfirmResponseBuilderParams,\n  options: TransactionBuilderOptions = {}\n): Promise<TransactionBuilder> => {\n  const { programs, payer = convergence.rpc().getDefaultFeePayer() } = options;\n  const {\n    rfq,\n    response,\n    side,\n    taker = convergence.identity(),\n    collateralInfo = convergence.collateral().pdas().collateralInfo({\n      user: taker.publicKey,\n      programs,\n    }),\n    collateralToken = convergence.collateral().pdas().collateralToken({\n      user: taker.publicKey,\n      programs,\n    }),\n  } = params;\n\n  const responseModel = await convergence\n    .rfqs()\n    .findResponseByAddress({ address: response });\n\n  if (isResponseExpired(responseModel)) {\n    throw new Error('Response is expired');\n  }\n\n  const { overrideLegMultiplier = null } = params;\n  const overrideLegMultiplierBps =\n    overrideLegMultiplier &&\n    toSolitaOverrideLegMultiplierBps(overrideLegMultiplier);\n\n  const makerCollateralInfo = convergence.collateral().pdas().collateralInfo({\n    user: responseModel.maker,\n    programs,\n  });\n\n  return TransactionBuilder.make()\n    .setFeePayer(payer)\n    .add({\n      instruction: createConfirmResponseInstruction(\n        {\n          rfq,\n          response,\n          collateralInfo,\n          makerCollateralInfo,\n          collateralToken,\n          taker: taker.publicKey,\n          protocol: convergence.protocol().pdas().protocol(),\n          riskEngine: convergence.programs().getRiskEngine(programs).address,\n        },\n        {\n          side: toSolitaQuoteSide(side),\n          overrideLegMultiplierBps,\n        },\n        convergence.programs().getRfq(programs).address\n      ),\n      signers: [taker],\n      key: 'confirmResponse',\n    });\n};\n\nconst isResponseExpired = (response: Response): boolean => {\n  return Date.now() > response.expirationTimestamp;\n};\n"],"names":["Key","confirmResponseOperation","useOperation","confirmResponseOperationHandler","handle","_handle","_asyncToGenerator","_regeneratorRuntime","mark","_callee","operation","convergence","scope","builder","output","wrap","_callee$","_context","prev","next","confirmResponseBuilder","_objectSpread","input","sent","sendAndConfirm","confirmOptions","throwIfCanceled","abrupt","stop","_x","_x2","_x3","apply","arguments","_ref","_callee2","params","options","programs","_options$payer","payer","rfq","response","side","_params$taker","taker","_params$collateralInf","collateralInfo","_params$collateralTok","collateralToken","responseModel","_params$overrideLegMu","overrideLegMultiplier","overrideLegMultiplierBps","makerCollateralInfo","_args2","_callee2$","_context2","length","undefined","rpc","getDefaultFeePayer","identity","collateral","pdas","user","publicKey","rfqs","findResponseByAddress","address","isResponseExpired","Error","toSolitaOverrideLegMultiplierBps","maker","TransactionBuilder","make","setFeePayer","add","instruction","createConfirmResponseInstruction","protocol","riskEngine","getRiskEngine","toSolitaQuoteSide","getRfq","signers","key","_x4","_x5","Date","now","expirationTimestamp"],"mappings":"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"}