{"version":3,"file":"initializeCollateral.mjs","sources":["../../../../../src/plugins/collateralModule/operations/initializeCollateral.ts"],"sourcesContent":["import { PublicKey } from '@solana/web3.js';\nimport { createInitializeCollateralInstruction } from '@convergence-rfq/rfq';\n\nimport { SendAndConfirmTransactionResponse } from '../../rpcModule';\nimport { assertCollateral, Collateral, toCollateral } from '../models';\nimport { toCollateralAccount } from '../accounts';\nimport {\n  Operation,\n  OperationHandler,\n  OperationScope,\n  useOperation,\n  Signer,\n  makeConfirmOptionsFinalizedOnMainnet,\n} from '../../../types';\nimport { Convergence } from '../../../Convergence';\nimport {\n  TransactionBuilder,\n  TransactionBuilderOptions,\n} from '../../../utils/TransactionBuilder';\nimport { protocolCache } from '../../protocolModule/cache';\nimport { addComputeBudgetIxsIfNeeded } from '@/utils/helpers';\n\nconst Key = 'InitializeCollateralOperation' as const;\n\n/**\n * Initializes a collateral account.\n *\n * ```ts\n * const rfq = await convergence\n *   .collateral()\n *   .initializeCollateral({});\n * ```\n *\n * @group Operations\n * @category Constructors\n */\nexport const initializeCollateralOperation =\n  useOperation<InitializeCollateralOperation>(Key);\n\n/**\n * @group Operations\n * @category Types\n */\nexport type InitializeCollateralOperation = Operation<\n  typeof Key,\n  InitializeCollateralInput,\n  InitializeCollateralOutput\n>;\n\n/**\n * @group Operations\n * @category Inputs\n */\nexport type InitializeCollateralInput = {\n  /**\n   * The user for whom collateral is initialized.\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  /**\n   * The address of the collateral mint.\n   *\n   * @defaultValue `protocol.collateralMint`\n   */\n  collateralMint?: PublicKey;\n\n  /** Optional address of the User's collateral tokens account.\n   *\n   * @defaultValue `convergence.collateral().pdas().\n   *   collateralTokens({\n   *     user: user.publicKey,\n   *   })`\n   */\n  collateralToken?: PublicKey;\n\n  /** Optional address of the User's collateral info account.\n   * @defaultValue `convergence.collateral().pdas().collateralInfo({ user: user.publicKey })`\n   *\n   */\n  collateralInfo?: PublicKey;\n};\n\n/**\n * @group Operations\n * @category Outputs\n */\nexport type InitializeCollateralOutput = {\n  /** The blockchain response from sending and confirming the transaction. */\n  response: SendAndConfirmTransactionResponse;\n\n  /** The newly created Collateral account */\n  collateral: Collateral;\n};\n\n/**\n * @group Operations\n * @category Handlers\n */\nexport const initializeCollateralOperationHandler: OperationHandler<InitializeCollateralOperation> =\n  {\n    handle: async (\n      operation: InitializeCollateralOperation,\n      convergence: Convergence,\n      scope: OperationScope\n    ) => {\n      const { commitment } = scope;\n      const { user = convergence.identity() } = operation.input;\n      scope.throwIfCanceled();\n\n      const builder = await initializeCollateralBuilder(\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 account = await convergence\n        .rpc()\n        .getAccount(\n          convergence\n            .collateral()\n            .pdas()\n            .collateralInfo({ user: user.publicKey }),\n          commitment\n        );\n      scope.throwIfCanceled();\n\n      const collateral = toCollateral(toCollateralAccount(account));\n      assertCollateral(collateral);\n\n      return { ...output, collateral };\n    },\n  };\n\nexport type InitializeCollateralBuilderParams = InitializeCollateralInput;\n\n/**\n * @group Transaction Builders\n * @category Contexts\n */\nexport type InitializeCollateralBuilderContext = Omit<\n  InitializeCollateralOutput,\n  'collateral'\n>;\n\n/**\n * Initializes a collateral account.\n *\n * ```ts\n * const transactionBuilder = await convergence\n *   .rfqs()\n *   .builders()\n *   .initializeCollateral();\n * ```\n *\n * @group Transaction Builders\n * @category Constructors\n */\nexport const initializeCollateralBuilder = async (\n  convergence: Convergence,\n  params: InitializeCollateralBuilderParams,\n  options: TransactionBuilderOptions = {}\n): Promise<TransactionBuilder<InitializeCollateralBuilderContext>> => {\n  const protocolModel = await protocolCache.get(convergence);\n  const { programs } = options;\n  const {\n    user = convergence.identity(),\n    protocol = convergence.protocol().pdas().protocol(),\n    collateralMint = protocolModel.collateralMint,\n    collateralToken = convergence\n      .collateral()\n      .pdas()\n      .collateralToken({ user: user.publicKey }),\n    collateralInfo = convergence\n      .collateral()\n      .pdas()\n      .collateralInfo({ user: user.publicKey }),\n  } = params;\n\n  const rfqProgram = convergence.programs().getRfq(programs);\n\n  const txBuilder =\n    TransactionBuilder.make<InitializeCollateralBuilderContext>()\n      .setFeePayer(user)\n      .add({\n        instruction: createInitializeCollateralInstruction(\n          {\n            user: user.publicKey,\n            protocol,\n            collateralMint,\n            collateralToken,\n            collateralInfo,\n          },\n          rfqProgram.address\n        ),\n        signers: [user],\n        key: 'initializeCollateral',\n      });\n  await addComputeBudgetIxsIfNeeded(txBuilder, convergence);\n\n  return txBuilder;\n};\n"],"names":["Key","initializeCollateralOperation","useOperation","initializeCollateralOperationHandler","handle","_handle","_asyncToGenerator","_regeneratorRuntime","mark","_callee","operation","convergence","scope","commitment","_operation$input$user","user","builder","confirmOptions","output","account","collateral","wrap","_callee$","_context","prev","next","input","identity","throwIfCanceled","initializeCollateralBuilder","_objectSpread","sent","makeConfirmOptionsFinalizedOnMainnet","sendAndConfirm","rpc","getAccount","pdas","collateralInfo","publicKey","toCollateral","toCollateralAccount","assertCollateral","abrupt","stop","_x","_x2","_x3","apply","arguments","_ref","_callee2","params","options","protocolModel","programs","_params$user","_params$protocol","protocol","_params$collateralMin","collateralMint","_params$collateralTok","collateralToken","_params$collateralInf","rfqProgram","txBuilder","_args2","_callee2$","_context2","length","undefined","protocolCache","get","getRfq","TransactionBuilder","make","setFeePayer","add","instruction","createInitializeCollateralInstruction","address","signers","key","addComputeBudgetIxsIfNeeded","_x4","_x5"],"mappings":"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"}