{"version":3,"file":"fundCollateral.mjs","sources":["../../../../../src/plugins/collateralModule/operations/fundCollateral.ts"],"sourcesContent":["import { createFundCollateralInstruction } from '@convergence-rfq/rfq';\nimport { PublicKey } from '@solana/web3.js';\n\nimport { SendAndConfirmTransactionResponse } from '../../rpcModule';\nimport {\n  Operation,\n  OperationHandler,\n  OperationScope,\n  useOperation,\n  Signer,\n  makeConfirmOptionsFinalizedOnMainnet,\n} from '../../../types';\nimport {\n  TransactionBuilder,\n  TransactionBuilderOptions,\n} from '../../../utils/TransactionBuilder';\nimport { addDecimals } from '../../../utils/conversions';\nimport { Convergence } from '../../../Convergence';\nimport { protocolCache } from '../../protocolModule/cache';\nimport { collateralMintCache } from '../cache';\nimport { addComputeBudgetIxsIfNeeded } from '@/utils/helpers';\nconst Key = 'FundCollateralOperation' as const;\n\n/**\n * Funds a collateral account.\n *\n * ```ts\n * const rfq = await convergence.collateral().fundCollateral({ amount: 100 };\n * ```\n *\n * @group Operations\n * @category Constructors\n */\nexport const fundCollateralOperation =\n  useOperation<FundCollateralOperation>(Key);\n\n/**\n * @group Operations\n * @category Types\n */\nexport type FundCollateralOperation = Operation<\n  typeof Key,\n  FundCollateralInput,\n  FundCollateralOutput\n>;\n\n/**\n * @group Operations\n * @category Inputs\n */\nexport type FundCollateralInput = {\n  /**\n   * The user for whom collateral is funded.\n   *\n   * @defaultValue `convergence.identity()`\n   */\n  user?: Signer;\n\n  /**\n   * The address of the protocol.\n   *\n   * @defaultValue `convergence.protocol().pdas().protocol()`\n   */\n  protocol?: PublicKey;\n\n  /** User token account. */\n  userTokens?: PublicKey;\n\n  /** The amount to fund. */\n  amount: number;\n};\n\n/**\n * @group Operations\n * @category Outputs\n */\nexport type FundCollateralOutput = {\n  response: SendAndConfirmTransactionResponse;\n};\n\n/**\n * @group Operations\n * @category Handlers\n */\nexport const fundCollateralOperationHandler: OperationHandler<FundCollateralOperation> =\n  {\n    handle: async (\n      operation: FundCollateralOperation,\n      convergence: Convergence,\n      scope: OperationScope\n    ) => {\n      scope.throwIfCanceled();\n\n      const builder = await fundCollateralBuilder(\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\n      const output = await builder.sendAndConfirm(convergence, confirmOptions);\n      scope.throwIfCanceled();\n\n      return output;\n    },\n  };\n\nexport type FundCollateralBuilderParams = FundCollateralInput;\n\n/**\n * Funds a collateral account.\n *\n * ```ts\n * const transactionBuilder = await convergence\n *   .rfqs()\n *   .builders()\n *   .fundCollateral();\n * ```\n *\n * @group Transaction Builders\n * @category Constructors\n */\nexport const fundCollateralBuilder = async (\n  convergence: Convergence,\n  params: FundCollateralBuilderParams,\n  options: TransactionBuilderOptions = {}\n): Promise<TransactionBuilder> => {\n  const { programs, payer = convergence.rpc().getDefaultFeePayer() } = options;\n  const { user = convergence.identity() } = params;\n\n  const protocolModel = await protocolCache.get(convergence);\n\n  const {\n    protocol = convergence.protocol().pdas().protocol(),\n    userTokens = convergence.tokens().pdas().associatedTokenAccount({\n      mint: protocolModel.collateralMint,\n      owner: user.publicKey,\n      programs,\n    }),\n  } = params;\n  const { amount } = params;\n\n  const collateralToken = convergence\n    .collateral()\n    .pdas()\n    .collateralToken({ user: user.publicKey });\n  const collateralInfo = convergence\n    .collateral()\n    .pdas()\n    .collateralInfo({ user: user.publicKey });\n\n  const collateralMint = await collateralMintCache.get(convergence);\n  const collateralDecimals = collateralMint.decimals;\n\n  const txBuilder = TransactionBuilder.make()\n    .setFeePayer(payer)\n    .add({\n      instruction: createFundCollateralInstruction(\n        {\n          user: user.publicKey,\n          userTokens,\n          protocol,\n          collateralInfo,\n          collateralToken,\n        },\n        {\n          amount: addDecimals(amount, collateralDecimals),\n        },\n        convergence.programs().getRfq(programs).address\n      ),\n      signers: [user],\n      key: 'fundCollateral',\n    });\n  await addComputeBudgetIxsIfNeeded(txBuilder, convergence);\n  return txBuilder;\n};\n"],"names":["Key","fundCollateralOperation","useOperation","fundCollateralOperationHandler","handle","_handle","_asyncToGenerator","_regeneratorRuntime","mark","_callee","operation","convergence","scope","builder","confirmOptions","output","wrap","_callee$","_context","prev","next","throwIfCanceled","fundCollateralBuilder","_objectSpread","input","sent","makeConfirmOptionsFinalizedOnMainnet","sendAndConfirm","abrupt","stop","_x","_x2","_x3","apply","arguments","_ref","_callee2","params","options","programs","_options$payer","payer","_params$user","user","protocolModel","_params$protocol","protocol","_params$userTokens","userTokens","amount","collateralToken","collateralInfo","collateralMint","collateralDecimals","txBuilder","_args2","_callee2$","_context2","length","undefined","rpc","getDefaultFeePayer","identity","protocolCache","get","pdas","tokens","associatedTokenAccount","mint","owner","publicKey","collateral","collateralMintCache","decimals","TransactionBuilder","make","setFeePayer","add","instruction","createFundCollateralInstruction","addDecimals","getRfq","address","signers","key","addComputeBudgetIxsIfNeeded","_x4","_x5"],"mappings":";;;;;;;;;AAqBA,IAAMA,GAAG,GAAG,yBAAkC,CAAA;;AAE9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACaC,uBAAuB,GAClCC,YAAY,CAA0BF,GAAG,EAAC;;AAE5C;AACA;AACA;AACA;;AAOA;AACA;AACA;AACA;;AAuBA;AACA;AACA;AACA;;AAKA;AACA;AACA;AACA;AACO,IAAMG,8BAAyE,GACpF;EACEC,MAAM,EAAA,YAAA;AAAA,IAAA,IAAAC,OAAA,GAAAC,iBAAA,eAAAC,mBAAA,EAAAC,CAAAA,IAAA,CAAE,SAAAC,OACNC,CAAAA,SAAkC,EAClCC,WAAwB,EACxBC,KAAqB,EAAA;AAAA,MAAA,IAAAC,OAAA,EAAAC,cAAA,EAAAC,MAAA,CAAA;AAAA,MAAA,OAAAR,mBAAA,EAAA,CAAAS,IAAA,CAAA,SAAAC,SAAAC,QAAA,EAAA;AAAA,QAAA,OAAA,CAAA,EAAA,QAAAA,QAAA,CAAAC,IAAA,GAAAD,QAAA,CAAAE,IAAA;AAAA,UAAA,KAAA,CAAA;YAErBR,KAAK,CAACS,eAAe,EAAE,CAAA;AAACH,YAAAA,QAAA,CAAAE,IAAA,GAAA,CAAA,CAAA;YAAA,OAEFE,qBAAqB,CACzCX,WAAW,EAAAY,cAAA,CAENb,EAAAA,EAAAA,SAAS,CAACc,KAAK,CAEpBZ,EAAAA,KACF,CAAC,CAAA;AAAA,UAAA,KAAA,CAAA;YANKC,OAAO,GAAAK,QAAA,CAAAO,IAAA,CAAA;YAObb,KAAK,CAACS,eAAe,EAAE,CAAA;YAEjBP,cAAc,GAAGY,oCAAoC,CACzDf,WAAW,EACXC,KAAK,CAACE,cACR,CAAC,CAAA;AAAAI,YAAAA,QAAA,CAAAE,IAAA,GAAA,CAAA,CAAA;AAAA,YAAA,OAEoBP,OAAO,CAACc,cAAc,CAAChB,WAAW,EAAEG,cAAc,CAAC,CAAA;AAAA,UAAA,KAAA,CAAA;YAAlEC,MAAM,GAAAG,QAAA,CAAAO,IAAA,CAAA;YACZb,KAAK,CAACS,eAAe,EAAE,CAAA;AAAC,YAAA,OAAAH,QAAA,CAAAU,MAAA,CAAA,QAAA,EAEjBb,MAAM,CAAA,CAAA;AAAA,UAAA,KAAA,EAAA,CAAA;AAAA,UAAA,KAAA,KAAA;YAAA,OAAAG,QAAA,CAAAW,IAAA,EAAA,CAAA;AAAA,SAAA;AAAA,OAAA,EAAApB,OAAA,CAAA,CAAA;KACd,CAAA,CAAA,CAAA;AAAA,IAAA,SAAAL,MAAA0B,CAAAA,EAAA,EAAAC,GAAA,EAAAC,GAAA,EAAA;AAAA,MAAA,OAAA3B,OAAA,CAAA4B,KAAA,CAAA,IAAA,EAAAC,SAAA,CAAA,CAAA;AAAA,KAAA;AAAA,IAAA,OAAA9B,MAAA,CAAA;AAAA,GAAA,EAAA;AACH,EAAC;AAIH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACakB,qBAAqB,gBAAA,YAAA;AAAA,EAAA,IAAAa,IAAA,GAAA7B,iBAAA,eAAAC,mBAAA,EAAA,CAAAC,IAAA,CAAG,SAAA4B,QAAAA,CACnCzB,WAAwB,EACxB0B,MAAmC,EAAA;AAAA,IAAA,IAAAC,OAAA;MAAAC,QAAA;MAAAC,cAAA;MAAAC,KAAA;MAAAC,YAAA;MAAAC,IAAA;MAAAC,aAAA;MAAAC,gBAAA;MAAAC,QAAA;MAAAC,kBAAA;MAAAC,UAAA;MAAAC,MAAA;MAAAC,eAAA;MAAAC,cAAA;MAAAC,cAAA;MAAAC,kBAAA;MAAAC,SAAA;AAAAC,MAAAA,MAAA,GAAArB,SAAA,CAAA;AAAA,IAAA,OAAA3B,mBAAA,EAAA,CAAAS,IAAA,CAAA,SAAAwC,UAAAC,SAAA,EAAA;AAAA,MAAA,OAAA,CAAA,EAAA,QAAAA,SAAA,CAAAtC,IAAA,GAAAsC,SAAA,CAAArC,IAAA;AAAA,QAAA,KAAA,CAAA;AACnCkB,UAAAA,OAAkC,GAAAiB,MAAA,CAAAG,MAAA,GAAAH,CAAAA,IAAAA,MAAA,CAAAI,CAAAA,CAAAA,KAAAA,SAAA,GAAAJ,MAAA,CAAG,CAAA,CAAA,GAAA,EAAE,CAAA;UAE/BhB,QAAQ,GAAqDD,OAAO,CAApEC,QAAQ,EAAAC,cAAA,GAAqDF,OAAO,CAA1DG,KAAK,EAALA,KAAK,GAAAD,cAAA,KAAA,KAAA,CAAA,GAAG7B,WAAW,CAACiD,GAAG,EAAE,CAACC,kBAAkB,EAAE,GAAArB,cAAA,CAAA;AAAAE,UAAAA,YAAA,GACtBL,MAAM,CAAxCM,IAAI,EAAJA,IAAI,GAAAD,YAAA,KAAA,KAAA,CAAA,GAAG/B,WAAW,CAACmD,QAAQ,EAAE,GAAApB,YAAA,CAAA;AAAAe,UAAAA,SAAA,CAAArC,IAAA,GAAA,CAAA,CAAA;AAAA,UAAA,OAET2C,aAAa,CAACC,GAAG,CAACrD,WAAW,CAAC,CAAA;AAAA,QAAA,KAAA,CAAA;UAApDiC,aAAa,GAAAa,SAAA,CAAAhC,IAAA,CAAA;UAAAoB,gBAAA,GASfR,MAAM,CANRS,QAAQ,EAARA,QAAQ,GAAAD,gBAAA,KAAGlC,KAAAA,CAAAA,GAAAA,WAAW,CAACmC,QAAQ,EAAE,CAACmB,IAAI,EAAE,CAACnB,QAAQ,EAAE,GAAAD,gBAAA,EAAAE,kBAAA,GAMjDV,MAAM,CALRW,UAAU,EAAVA,UAAU,GAAAD,kBAAA,KAAA,KAAA,CAAA,GAAGpC,WAAW,CAACuD,MAAM,EAAE,CAACD,IAAI,EAAE,CAACE,sBAAsB,CAAC;YAC9DC,IAAI,EAAExB,aAAa,CAACQ,cAAc;YAClCiB,KAAK,EAAE1B,IAAI,CAAC2B,SAAS;AACrB/B,YAAAA,QAAQ,EAARA,QAAAA;WACD,CAAC,GAAAQ,kBAAA,CAAA;UAEIE,MAAM,GAAKZ,MAAM,CAAjBY,MAAM,CAAA;AAERC,UAAAA,eAAe,GAAGvC,WAAW,CAChC4D,UAAU,EAAE,CACZN,IAAI,EAAE,CACNf,eAAe,CAAC;YAAEP,IAAI,EAAEA,IAAI,CAAC2B,SAAAA;AAAU,WAAC,CAAC,CAAA;AACtCnB,UAAAA,cAAc,GAAGxC,WAAW,CAC/B4D,UAAU,EAAE,CACZN,IAAI,EAAE,CACNd,cAAc,CAAC;YAAER,IAAI,EAAEA,IAAI,CAAC2B,SAAAA;AAAU,WAAC,CAAC,CAAA;AAAAb,UAAAA,SAAA,CAAArC,IAAA,GAAA,EAAA,CAAA;AAAA,UAAA,OAEdoD,mBAAmB,CAACR,GAAG,CAACrD,WAAW,CAAC,CAAA;AAAA,QAAA,KAAA,EAAA;UAA3DyC,cAAc,GAAAK,SAAA,CAAAhC,IAAA,CAAA;UACd4B,kBAAkB,GAAGD,cAAc,CAACqB,QAAQ,CAAA;AAE5CnB,UAAAA,SAAS,GAAGoB,kBAAkB,CAACC,IAAI,EAAE,CACxCC,WAAW,CAACnC,KAAK,CAAC,CAClBoC,GAAG,CAAC;YACHC,WAAW,EAAEC,+BAA+B,CAC1C;cACEpC,IAAI,EAAEA,IAAI,CAAC2B,SAAS;AACpBtB,cAAAA,UAAU,EAAVA,UAAU;AACVF,cAAAA,QAAQ,EAARA,QAAQ;AACRK,cAAAA,cAAc,EAAdA,cAAc;AACdD,cAAAA,eAAe,EAAfA,eAAAA;AACF,aAAC,EACD;AACED,cAAAA,MAAM,EAAE+B,WAAW,CAAC/B,MAAM,EAAEI,kBAAkB,CAAA;AAChD,aAAC,EACD1C,WAAW,CAAC4B,QAAQ,EAAE,CAAC0C,MAAM,CAAC1C,QAAQ,CAAC,CAAC2C,OAC1C,CAAC;YACDC,OAAO,EAAE,CAACxC,IAAI,CAAC;AACfyC,YAAAA,GAAG,EAAE,gBAAA;AACP,WAAC,CAAC,CAAA;AAAA3B,UAAAA,SAAA,CAAArC,IAAA,GAAA,EAAA,CAAA;AAAA,UAAA,OACEiE,2BAA2B,CAAC/B,SAAS,EAAE3C,WAAW,CAAC,CAAA;AAAA,QAAA,KAAA,EAAA;AAAA,UAAA,OAAA8C,SAAA,CAAA7B,MAAA,CAAA,QAAA,EAClD0B,SAAS,CAAA,CAAA;AAAA,QAAA,KAAA,EAAA,CAAA;AAAA,QAAA,KAAA,KAAA;UAAA,OAAAG,SAAA,CAAA5B,IAAA,EAAA,CAAA;AAAA,OAAA;AAAA,KAAA,EAAAO,QAAA,CAAA,CAAA;GACjB,CAAA,CAAA,CAAA;AAAA,EAAA,OAAA,SArDYd,qBAAqBA,CAAAgE,GAAA,EAAAC,GAAA,EAAA;AAAA,IAAA,OAAApD,IAAA,CAAAF,KAAA,CAAA,IAAA,EAAAC,SAAA,CAAA,CAAA;AAAA,GAAA,CAAA;AAAA,CAqDjC;;;;"}