{"version":3,"file":"respondToRfq.mjs","sources":["../../../../../src/plugins/rfqModule/operations/respondToRfq.ts"],"sourcesContent":["import { createRespondToRfqInstruction } from '@convergence-rfq/rfq';\nimport { PublicKey, AccountMeta } from '@solana/web3.js';\n\nimport BN from 'bn.js';\nimport { SendAndConfirmTransactionResponse } from '../../rpcModule';\nimport { assertResponse, Response } from '../models/Response';\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 { Quote, Rfq } from '../models';\nimport { toSolitaQuote } from '../models/Quote';\nimport { rfqProgram } from '../program';\nimport { convertTimestampToSeconds } from '@/utils';\nimport {\n  AdditionalResponseData,\n  prependWithProviderProgram,\n} from '@/plugins/printTradeModule';\nimport { addComputeBudgetIxsIfNeeded } from '@/utils/helpers';\n\nconst getNextResponsePdaAndDistinguisher = async (\n  cvg: Convergence,\n  rfq: PublicKey,\n  maker: PublicKey,\n  bid: Quote | null,\n  ask: Quote | null,\n  rfqModel: Rfq\n): Promise<{\n  pdaDistinguisher: number;\n  response: PublicKey;\n}> => {\n  let response: PublicKey;\n  let pdaDistinguisher = 0;\n  while (true) {\n    response = cvg\n      .rfqs()\n      .pdas()\n      .response({\n        rfq,\n        maker,\n        bid: bid && toSolitaQuote(bid, rfqModel.quoteAsset.getDecimals()),\n        ask: ask && toSolitaQuote(ask, rfqModel.quoteAsset.getDecimals()),\n        pdaDistinguisher,\n      });\n\n    const account = await cvg.rpc().getAccount(response);\n    if (!account.exists) {\n      return { response, pdaDistinguisher };\n    }\n\n    pdaDistinguisher++;\n  }\n};\n\nconst Key = 'RespondToRfqOperation' as const;\n\n/**\n * Responds to an Rfq.\n *\n * ```ts\n * const { rfqResponse } = await convergence\n *   .rfqs()\n *   .respond({\n *     rfq: rfq.address,\n *     bid: {\n *       __kind: 'FixedSize',\n *       priceQuote: { __kind: 'AbsolutePrice', amountBps: 1_000 },\n *     },\n *   });\n * ```\n *\n * @group Operations\n * @category Constructors\n */\nexport const respondToRfqOperation = useOperation<RespondToRfqOperation>(Key);\n\n/**\n * @group Operations\n * @category Types\n */\nexport type RespondToRfqOperation = Operation<\n  typeof Key,\n  RespondToRfqInput,\n  RespondToRfqOutput\n>;\n\n/**\n * @group Operations\n * @category Inputs\n */\nexport type RespondToRfqInput = {\n  /**\n   * The optional bid side of the response.\n   */\n  bid?: Quote;\n\n  /**\n   * The optional ask side of the response.\n   */\n  ask?: Quote;\n\n  /**\n   * The optional response expirationTimestamp in seconds.\n   */\n  expirationTimestamp?: number;\n\n  /**\n   * The address of the RFQ account.\n   */\n  rfq: PublicKey;\n\n  /**\n   * Is sometimes required to pass for print trades\n   */\n  additionalData?: AdditionalResponseData;\n};\n\n/**\n * @group Operations\n * @category Outputs\n */\nexport type RespondToRfqOutput = {\n  /**\n   * The blockchain response from sending and confirming the transaction.\n   */\n  response: SendAndConfirmTransactionResponse;\n\n  /**\n   * The newly created response.\n   */\n  rfqResponse: Response;\n};\n\n/**\n * @group Operations\n * @category Handlers\n */\nexport const respondToRfqOperationHandler: OperationHandler<RespondToRfqOperation> =\n  {\n    handle: async (\n      operation: RespondToRfqOperation,\n      convergence: Convergence,\n      scope: OperationScope\n    ): Promise<RespondToRfqOutput> => {\n      const builder = await respondToRfqBuilder(\n        convergence,\n        {\n          ...operation.input,\n        },\n        scope\n      );\n      scope.throwIfCanceled();\n\n      const output = await builder.sendAndConfirm(\n        convergence,\n        scope.confirmOptions\n      );\n\n      const rfqResponse = await convergence\n        .rfqs()\n        .findResponseByAddress({ address: builder.getContext().response });\n      assertResponse(rfqResponse);\n\n      return { ...output, rfqResponse };\n    },\n  };\n\n/**\n * @group Transaction Builders\n * @category Inputs\n */\nexport type RespondToRfqBuilderParams = RespondToRfqInput;\n\n/**\n * @group Transaction Builders\n * @category Contexts\n */\nexport type RespondToRfqBuilderContext = {\n  /** The computed address of the response PDA. */\n  response: PublicKey;\n};\n\n/**\n * Responds to an RFQ.\n *\n * ```ts\n * const transactionBuilder = convergence\n *   .rfqs()\n *   .builders()\n *   .respond({ address });\n * ```\n *\n * @group Transaction Builders\n * @category Constructors\n */\nexport const respondToRfqBuilder = async (\n  convergence: Convergence,\n  params: RespondToRfqBuilderParams,\n  options: TransactionBuilderOptions = {}\n): Promise<TransactionBuilder<RespondToRfqBuilderContext>> => {\n  const { programs } = options;\n  const {\n    rfq,\n    bid = null,\n    ask = null,\n    expirationTimestamp,\n    additionalData,\n  } = params;\n  const maker = convergence.identity();\n  const protocol = convergence.protocol().pdas().protocol();\n  const riskEngine = convergence.programs().getRiskEngine(programs).address;\n  const collateralInfo = convergence.collateral().pdas().collateralInfo({\n    user: maker.publicKey,\n    programs,\n  });\n  const collateralToken = convergence.collateral().pdas().collateralToken({\n    user: maker.publicKey,\n    programs,\n  });\n\n  if (!bid && !ask) {\n    throw new Error('Must provide either a bid and/or ask');\n  }\n\n  const rfqModel = await convergence.rfqs().findRfqByAddress({ address: rfq });\n\n  let validateResponseAccounts: AccountMeta[] = [];\n  if (rfqModel.model === 'escrowRfq' && additionalData !== undefined) {\n    throw new Error(\n      'Escrow rfqs does not allow passing additional response data'\n    );\n  }\n  if (rfqModel.model === 'printTradeRfq') {\n    validateResponseAccounts = prependWithProviderProgram(\n      rfqModel.printTrade,\n      await rfqModel.printTrade.getValidateResponseAccounts(additionalData)\n    );\n  }\n\n  const rfqExpirationTimestampSeconds =\n    convertTimestampToSeconds(rfqModel.creationTimestamp) +\n    rfqModel.activeWindow;\n\n  const currentTimestampSeconds = convertTimestampToSeconds(Date.now());\n\n  let expirationTimestampBn: BN;\n\n  if (!expirationTimestamp) {\n    expirationTimestampBn = new BN(rfqExpirationTimestampSeconds);\n  } else {\n    if (expirationTimestamp < currentTimestampSeconds) {\n      throw new Error('Expiration timestamp must be in the future');\n    }\n    if (expirationTimestamp > rfqExpirationTimestampSeconds) {\n      throw new Error('Response expiration must be less than RFQ expiration');\n    }\n\n    expirationTimestampBn = new BN(expirationTimestamp);\n  }\n\n  const { response, pdaDistinguisher } =\n    await getNextResponsePdaAndDistinguisher(\n      convergence,\n      rfq,\n      maker.publicKey,\n      bid,\n      ask,\n      rfqModel\n    );\n\n  const defaultPubkey = PublicKey.default;\n  const whitelist =\n    rfqModel.whitelist.toBase58() !== defaultPubkey.toBase58()\n      ? rfqModel.whitelist\n      : rfqProgram.address;\n\n  if (!rfqModel.whitelist.equals(defaultPubkey)) {\n    const addressAlreadyExists = await convergence\n      .whitelist()\n      .checkAddressExistsOnWhitelist({\n        whitelistAddress: whitelist,\n        addressToSearch: maker.publicKey,\n      });\n\n    if (!addressAlreadyExists) {\n      throw new Error('MakerAddressNotWhitelisted');\n    }\n  }\n\n  const txBuilder = TransactionBuilder.make<RespondToRfqBuilderContext>()\n    .setFeePayer(maker)\n    .setContext({\n      response,\n    })\n    .add({\n      instruction: createRespondToRfqInstruction(\n        {\n          rfq,\n          response,\n          collateralInfo,\n          collateralToken,\n          protocol,\n          riskEngine,\n          whitelist,\n          maker: maker.publicKey,\n          anchorRemainingAccounts: validateResponseAccounts,\n        },\n        {\n          bid: bid && toSolitaQuote(bid, rfqModel.quoteAsset.getDecimals()),\n          ask: ask && toSolitaQuote(ask, rfqModel.quoteAsset.getDecimals()),\n          pdaDistinguisher,\n          expirationTimestamp: expirationTimestampBn,\n          additionalData: additionalData?.serialize() ?? Buffer.from([]),\n        }\n      ),\n      signers: [maker],\n      key: 'respondToRfq',\n    });\n\n  await addComputeBudgetIxsIfNeeded(txBuilder, convergence);\n  return txBuilder;\n};\n"],"names":["getNextResponsePdaAndDistinguisher","_ref","_asyncToGenerator","_regeneratorRuntime","mark","_callee","cvg","rfq","maker","bid","ask","rfqModel","response","pdaDistinguisher","account","wrap","_callee$","_context","prev","next","rfqs","pdas","toSolitaQuote","quoteAsset","getDecimals","rpc","getAccount","sent","exists","abrupt","stop","_x","_x2","_x3","_x4","_x5","_x6","apply","arguments","Key","respondToRfqOperation","useOperation","respondToRfqOperationHandler","handle","_handle","_callee2","operation","convergence","scope","builder","output","rfqResponse","_callee2$","_context2","respondToRfqBuilder","_objectSpread","input","throwIfCanceled","sendAndConfirm","confirmOptions","findResponseByAddress","address","getContext","assertResponse","_x7","_x8","_x9","_ref2","_callee3","params","_additionalData$seria","options","programs","_params$bid","_params$ask","expirationTimestamp","additionalData","protocol","riskEngine","collateralInfo","collateralToken","validateResponseAccounts","rfqExpirationTimestampSeconds","currentTimestampSeconds","expirationTimestampBn","_yield$getNextRespons","defaultPubkey","whitelist","addressAlreadyExists","txBuilder","_args3","_callee3$","_context3","length","undefined","identity","getRiskEngine","collateral","user","publicKey","Error","findRfqByAddress","model","t0","prependWithProviderProgram","t1","printTrade","getValidateResponseAccounts","t2","convertTimestampToSeconds","creationTimestamp","activeWindow","Date","now","BN","PublicKey","toBase58","rfqProgram","equals","checkAddressExistsOnWhitelist","whitelistAddress","addressToSearch","TransactionBuilder","make","setFeePayer","setContext","add","instruction","createRespondToRfqInstruction","anchorRemainingAccounts","serialize","Buffer","from","signers","key","addComputeBudgetIxsIfNeeded","_x10","_x11"],"mappings":"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"}