{"version":3,"file":"addInstrument.mjs","sources":["../../../../../src/plugins/protocolModule/operations/addInstrument.ts"],"sourcesContent":["import { createAddInstrumentInstruction } 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 { protocolCache } from '../cache';\n\nconst Key = 'AddInstrumentOperation' as const;\n\n/**\n * Add an Instrument\n *\n * ```ts\n * await convergence\n *   .rfqs()\n *   .addInstrument({ address };\n * ```\n *\n * @group Operations\n * @category Constructors\n */\nexport const addInstrumentOperation = useOperation<AddInstrumentOperation>(Key);\n\n/**\n * @group Operations\n * @category Types\n */\nexport type AddInstrumentOperation = Operation<\n  typeof Key,\n  AddInstrumentInput,\n  AddInstrumentOutput\n>;\n\n/**\n * @group Operations\n * @category Inputs\n */\nexport type AddInstrumentInput = {\n  /**\n   * The owner of the protocol.\n   */\n  authority: Signer;\n\n  /**\n   * The protocol address.\n   *\n   * @defaultValue `convergence.protocol().pdas().protocol()`\n   */\n  protocol?: PublicKey;\n\n  /**\n   * The instrument program to add to the protocol.\n   */\n  instrumentProgram: PublicKey;\n\n  /** Flag to indicate if the instrument can be used as a quote. */\n  canBeUsedAsQuote: boolean;\n\n  /*\n   * The amount of lamports to allocate for the validate data account.\n   */\n  validateDataAccountAmount: number;\n\n  prepareToSettleAccountAmount: number;\n\n  settleAccountAmount: number;\n\n  revertPreparationAccountAmount: number;\n\n  cleanUpAccountAmount: number;\n};\n\n/**\n * @group Operations\n * @category Outputs\n */\nexport type AddInstrumentOutput = {\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 addInstrumentOperationHandler: OperationHandler<AddInstrumentOperation> =\n  {\n    handle: async (\n      operation: AddInstrumentOperation,\n      convergence: Convergence,\n      scope: OperationScope\n    ): Promise<AddInstrumentOutput> => {\n      scope.throwIfCanceled();\n\n      protocolCache.clear();\n\n      return addInstrumentBuilder(\n        convergence,\n        operation.input,\n        scope\n      ).sendAndConfirm(convergence, scope.confirmOptions);\n    },\n  };\n\n/**\n * @group Transaction Builders\n * @category Inputs\n */\nexport type AddInstrumentBuilderParams = AddInstrumentInput;\n\n/**\n * Adds an instrument\n *\n * ```ts\n * const transactionBuilder = convergences\n *   .rfqs()\n *   .builders()\n *   .addInstrument({ address });\n * ```\n *\n * @group Transaction Builders\n * @category Constructors\n */\nexport const addInstrumentBuilder = (\n  convergence: Convergence,\n  params: AddInstrumentBuilderParams,\n  options: TransactionBuilderOptions = {}\n): TransactionBuilder => {\n  const { programs, payer = convergence.rpc().getDefaultFeePayer() } = options;\n  const rfqProgram = convergence.programs().getRfq(programs);\n  const protocolPda = convergence.protocol().pdas().protocol();\n  const {\n    protocol = protocolPda,\n    authority,\n    instrumentProgram,\n    canBeUsedAsQuote,\n    validateDataAccountAmount,\n    prepareToSettleAccountAmount,\n    settleAccountAmount,\n    revertPreparationAccountAmount,\n    cleanUpAccountAmount,\n  } = params;\n\n  // Clear the protocol cache so that the protocol is reloaded\n  protocolCache.clear();\n\n  return TransactionBuilder.make()\n    .setFeePayer(payer)\n    .add({\n      instruction: createAddInstrumentInstruction(\n        {\n          authority: authority.publicKey,\n          protocol,\n          instrumentProgram,\n        },\n        {\n          canBeUsedAsQuote,\n          validateDataAccountAmount,\n          prepareToSettleAccountAmount,\n          settleAccountAmount,\n          revertPreparationAccountAmount,\n          cleanUpAccountAmount,\n        },\n        rfqProgram.address\n      ),\n      signers: [authority],\n      key: 'addInstrument',\n    });\n};\n"],"names":["Key","addInstrumentOperation","useOperation","addInstrumentOperationHandler","handle","_handle","_asyncToGenerator","_regeneratorRuntime","mark","_callee","operation","convergence","scope","wrap","_callee$","_context","prev","next","throwIfCanceled","protocolCache","clear","abrupt","addInstrumentBuilder","input","sendAndConfirm","confirmOptions","stop","_x","_x2","_x3","apply","arguments","params","options","length","undefined","programs","_options$payer","payer","rpc","getDefaultFeePayer","rfqProgram","getRfq","protocolPda","protocol","pdas","_params$protocol","authority","instrumentProgram","canBeUsedAsQuote","validateDataAccountAmount","prepareToSettleAccountAmount","settleAccountAmount","revertPreparationAccountAmount","cleanUpAccountAmount","TransactionBuilder","make","setFeePayer","add","instruction","createAddInstrumentInstruction","publicKey","address","signers","key"],"mappings":"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"}