{"version":3,"file":"confirmAndPrepareVault.mjs","sources":["../../../../../src/plugins/vaultOperatorModule/operations/confirmAndPrepareVault.ts"],"sourcesContent":["import {\n  createConfirmResponseInstruction,\n  createPrepareSettlementInstruction,\n} from '@convergence-rfq/vault-operator';\nimport { PublicKey } from '@solana/web3.js';\nimport { SendAndConfirmTransactionResponse } from '../../rpcModule';\n\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 { VaultParameters } from '../models';\nimport {\n  EscrowResponse,\n  EscrowRfq,\n  getEscrowPrepareSettlementRemainingAccounts,\n} from '@/plugins/rfqModule';\nimport { addComputeBudgetIxsIfNeeded } from '@/utils/helpers';\n\nconst Key = 'ConfirmAndPrepareVaultOperation' as const;\n\nexport const confirmAndPrepareVaultOperation =\n  useOperation<ConfirmAndPrepareVaultOperation>(Key);\n\nexport type ConfirmAndPrepareVaultOperation = Operation<\n  typeof Key,\n  ConfirmAndPrepareVaultInput,\n  ConfirmAndPrepareVaultOutput\n>;\n\nexport type ConfirmAndPrepareVaultInput = {\n  vault: VaultParameters;\n  rfq: EscrowRfq;\n  response: EscrowResponse;\n};\n\nexport type ConfirmAndPrepareVaultOutput = {\n  response: SendAndConfirmTransactionResponse;\n  vault: VaultParameters;\n};\n\nexport const confirmAndPrepareVaultOperationHandler: OperationHandler<ConfirmAndPrepareVaultOperation> =\n  {\n    handle: async (\n      operation: ConfirmAndPrepareVaultOperation,\n      cvg: Convergence,\n      scope: OperationScope\n    ) => {\n      const { builder, vault } = await confirmAndPrepareVaultBuilder(\n        cvg,\n        operation.input,\n        scope\n      );\n\n      const output = await builder.sendAndConfirm(cvg, scope.confirmOptions);\n\n      scope.throwIfCanceled();\n\n      return { ...output, vault };\n    },\n  };\n\nexport type ConfirmAndPrepareVaultBuilderParams = ConfirmAndPrepareVaultInput;\n\nexport type ConfirmAndPrepareVaultResult = {\n  builder: TransactionBuilder;\n  vault: VaultParameters;\n};\n\nexport const confirmAndPrepareVaultBuilder = async (\n  cvg: Convergence,\n  params: ConfirmAndPrepareVaultBuilderParams,\n  options: TransactionBuilderOptions = {}\n): Promise<ConfirmAndPrepareVaultResult> => {\n  const { programs, payer = cvg.rpc().getDefaultFeePayer() } = options;\n  const { vault, rfq, response } = params;\n\n  if (!vault.rfq.equals(rfq.address)) {\n    throw new Error('RFQ does not match the provided vault');\n  }\n  if (!response.rfq.equals(rfq.address)) {\n    throw new Error('RFQ does not match the provided response');\n  }\n  if (!vault.confirmedResponse.equals(PublicKey.default)) {\n    throw new Error('Another response is already confirmed for this vault');\n  }\n\n  const vaultProgram = cvg.programs().getVaultOperator(programs).address;\n  const operator = cvg.vaultOperator().pdas().operator(vault.address);\n\n  const confirmIx = {\n    instruction: createConfirmResponseInstruction(\n      {\n        vaultParams: vault.address,\n        operator,\n        protocol: cvg.protocol().pdas().protocol(),\n        rfq: rfq.address,\n        response: response.address,\n        collateralInfo: cvg.collateral().pdas().collateralInfo({\n          user: operator,\n        }),\n        makerCollateralInfo: cvg.collateral().pdas().collateralInfo({\n          user: response.maker,\n        }),\n        collateralToken: cvg.collateral().pdas().collateralToken({\n          user: operator,\n        }),\n        riskEngine: cvg.programs().getRiskEngine(programs).address,\n        rfqProgram: cvg.programs().getRfq(programs).address,\n      },\n      vaultProgram\n    ),\n    signers: [],\n    key: 'confirmVault',\n  };\n\n  const {\n    anchorRemainingAccounts: prepareRemainingAccounts,\n    ataTxBuilderArray,\n  } = await getEscrowPrepareSettlementRemainingAccounts(\n    cvg,\n    operator,\n    rfq,\n    response,\n    1\n  );\n  if (ataTxBuilderArray.length > 0) {\n    throw new Error(\n      'Vault ata accounts for the settlement should be pre-created!'\n    );\n  }\n\n  const prepareIx = {\n    instruction: createPrepareSettlementInstruction(\n      {\n        vaultParams: vault.address,\n        operator,\n        protocol: cvg.protocol().pdas().protocol(),\n        rfq: rfq.address,\n        response: response.address,\n        rfqProgram: cvg.programs().getRfq(programs).address,\n        anchorRemainingAccounts: prepareRemainingAccounts,\n      },\n      vaultProgram\n    ),\n    signers: [],\n    key: 'prepareVaultSettlement',\n  };\n\n  const builder = TransactionBuilder.make()\n    .setFeePayer(payer)\n    .add(confirmIx, prepareIx);\n\n  await addComputeBudgetIxsIfNeeded(builder, cvg);\n\n  return {\n    builder,\n    vault: {\n      ...vault,\n      confirmedResponse: response.address,\n    },\n  };\n};\n"],"names":["Key","confirmAndPrepareVaultOperation","useOperation","confirmAndPrepareVaultOperationHandler","handle","_handle","_asyncToGenerator","_regeneratorRuntime","mark","_callee","operation","cvg","scope","_yield$confirmAndPrep","builder","vault","output","wrap","_callee$","_context","prev","next","confirmAndPrepareVaultBuilder","input","sent","sendAndConfirm","confirmOptions","throwIfCanceled","abrupt","_objectSpread","stop","_x","_x2","_x3","apply","arguments","_ref","_callee2","params","options","programs","_options$payer","payer","rfq","response","vaultProgram","operator","confirmIx","_yield$getEscrowPrepa","prepareRemainingAccounts","ataTxBuilderArray","prepareIx","_args2","_callee2$","_context2","length","undefined","rpc","getDefaultFeePayer","equals","address","Error","confirmedResponse","PublicKey","getVaultOperator","vaultOperator","pdas","instruction","createConfirmResponseInstruction","vaultParams","protocol","collateralInfo","collateral","user","makerCollateralInfo","maker","collateralToken","riskEngine","getRiskEngine","rfqProgram","getRfq","signers","key","getEscrowPrepareSettlementRemainingAccounts","anchorRemainingAccounts","createPrepareSettlementInstruction","TransactionBuilder","make","setFeePayer","add","addComputeBudgetIxsIfNeeded","_x4","_x5"],"mappings":";;;;;;;;AA0BA,IAAMA,GAAG,GAAG,iCAA0C,CAAA;IAEzCC,+BAA+B,GAC1CC,YAAY,CAAkCF,GAAG,EAAC;AAmB7C,IAAMG,sCAAyF,GACpG;EACEC,MAAM,EAAA,YAAA;AAAA,IAAA,IAAAC,OAAA,GAAAC,iBAAA,eAAAC,mBAAA,EAAAC,CAAAA,IAAA,CAAE,SAAAC,OACNC,CAAAA,SAA0C,EAC1CC,GAAgB,EAChBC,KAAqB,EAAA;AAAA,MAAA,IAAAC,qBAAA,EAAAC,OAAA,EAAAC,KAAA,EAAAC,MAAA,CAAA;AAAA,MAAA,OAAAT,mBAAA,EAAA,CAAAU,IAAA,CAAA,SAAAC,SAAAC,QAAA,EAAA;AAAA,QAAA,OAAA,CAAA,EAAA,QAAAA,QAAA,CAAAC,IAAA,GAAAD,QAAA,CAAAE,IAAA;AAAA,UAAA,KAAA,CAAA;AAAAF,YAAAA,QAAA,CAAAE,IAAA,GAAA,CAAA,CAAA;YAAA,OAEYC,6BAA6B,CAC5DX,GAAG,EACHD,SAAS,CAACa,KAAK,EACfX,KACF,CAAC,CAAA;AAAA,UAAA,KAAA,CAAA;YAAAC,qBAAA,GAAAM,QAAA,CAAAK,IAAA,CAAA;YAJOV,OAAO,GAAAD,qBAAA,CAAPC,OAAO,CAAA;YAAEC,KAAK,GAAAF,qBAAA,CAALE,KAAK,CAAA;AAAAI,YAAAA,QAAA,CAAAE,IAAA,GAAA,CAAA,CAAA;YAAA,OAMDP,OAAO,CAACW,cAAc,CAACd,GAAG,EAAEC,KAAK,CAACc,cAAc,CAAC,CAAA;AAAA,UAAA,KAAA,CAAA;YAAhEV,MAAM,GAAAG,QAAA,CAAAK,IAAA,CAAA;YAEZZ,KAAK,CAACe,eAAe,EAAE,CAAA;YAAC,OAAAR,QAAA,CAAAS,MAAA,CAAA,QAAA,EAAAC,cAAA,CAAAA,cAAA,KAEZb,MAAM,CAAA,EAAA,EAAA,EAAA;AAAED,cAAAA,KAAK,EAALA,KAAAA;AAAK,aAAA,CAAA,CAAA,CAAA;AAAA,UAAA,KAAA,EAAA,CAAA;AAAA,UAAA,KAAA,KAAA;YAAA,OAAAI,QAAA,CAAAW,IAAA,EAAA,CAAA;AAAA,SAAA;AAAA,OAAA,EAAArB,OAAA,CAAA,CAAA;KAC1B,CAAA,CAAA,CAAA;AAAA,IAAA,SAAAL,MAAA2B,CAAAA,EAAA,EAAAC,GAAA,EAAAC,GAAA,EAAA;AAAA,MAAA,OAAA5B,OAAA,CAAA6B,KAAA,CAAA,IAAA,EAAAC,SAAA,CAAA,CAAA;AAAA,KAAA;AAAA,IAAA,OAAA/B,MAAA,CAAA;AAAA,GAAA,EAAA;AACH,EAAC;IASUkB,6BAA6B,gBAAA,YAAA;AAAA,EAAA,IAAAc,IAAA,GAAA9B,iBAAA,eAAAC,mBAAA,EAAA,CAAAC,IAAA,CAAG,SAAA6B,QAAAA,CAC3C1B,GAAgB,EAChB2B,MAA2C,EAAA;AAAA,IAAA,IAAAC,OAAA;MAAAC,QAAA;MAAAC,cAAA;MAAAC,KAAA;MAAA3B,KAAA;MAAA4B,GAAA;MAAAC,QAAA;MAAAC,YAAA;MAAAC,QAAA;MAAAC,SAAA;MAAAC,qBAAA;MAAAC,wBAAA;MAAAC,iBAAA;MAAAC,SAAA;MAAArC,OAAA;AAAAsC,MAAAA,MAAA,GAAAjB,SAAA,CAAA;AAAA,IAAA,OAAA5B,mBAAA,EAAA,CAAAU,IAAA,CAAA,SAAAoC,UAAAC,SAAA,EAAA;AAAA,MAAA,OAAA,CAAA,EAAA,QAAAA,SAAA,CAAAlC,IAAA,GAAAkC,SAAA,CAAAjC,IAAA;AAAA,QAAA,KAAA,CAAA;AAC3CkB,UAAAA,OAAkC,GAAAa,MAAA,CAAAG,MAAA,GAAAH,CAAAA,IAAAA,MAAA,CAAAI,CAAAA,CAAAA,KAAAA,SAAA,GAAAJ,MAAA,CAAG,CAAA,CAAA,GAAA,EAAE,CAAA;UAE/BZ,QAAQ,GAA6CD,OAAO,CAA5DC,QAAQ,EAAAC,cAAA,GAA6CF,OAAO,CAAlDG,KAAK,EAALA,KAAK,GAAAD,cAAA,KAAA,KAAA,CAAA,GAAG9B,GAAG,CAAC8C,GAAG,EAAE,CAACC,kBAAkB,EAAE,GAAAjB,cAAA,CAAA;AAChD1B,UAAAA,KAAK,GAAoBuB,MAAM,CAA/BvB,KAAK,EAAE4B,GAAG,GAAeL,MAAM,CAAxBK,GAAG,EAAEC,QAAQ,GAAKN,MAAM,CAAnBM,QAAQ,CAAA;UAAA,IAEvB7B,KAAK,CAAC4B,GAAG,CAACgB,MAAM,CAAChB,GAAG,CAACiB,OAAO,CAAC,EAAA;AAAAN,YAAAA,SAAA,CAAAjC,IAAA,GAAA,CAAA,CAAA;AAAA,YAAA,MAAA;AAAA,WAAA;AAAA,UAAA,MAC1B,IAAIwC,KAAK,CAAC,uCAAuC,CAAC,CAAA;AAAA,QAAA,KAAA,CAAA;UAAA,IAErDjB,QAAQ,CAACD,GAAG,CAACgB,MAAM,CAAChB,GAAG,CAACiB,OAAO,CAAC,EAAA;AAAAN,YAAAA,SAAA,CAAAjC,IAAA,GAAA,CAAA,CAAA;AAAA,YAAA,MAAA;AAAA,WAAA;AAAA,UAAA,MAC7B,IAAIwC,KAAK,CAAC,0CAA0C,CAAC,CAAA;AAAA,QAAA,KAAA,CAAA;UAAA,IAExD9C,KAAK,CAAC+C,iBAAiB,CAACH,MAAM,CAACI,SAAS,WAAQ,CAAC,EAAA;AAAAT,YAAAA,SAAA,CAAAjC,IAAA,GAAA,CAAA,CAAA;AAAA,YAAA,MAAA;AAAA,WAAA;AAAA,UAAA,MAC9C,IAAIwC,KAAK,CAAC,sDAAsD,CAAC,CAAA;AAAA,QAAA,KAAA,CAAA;AAGnEhB,UAAAA,YAAY,GAAGlC,GAAG,CAAC6B,QAAQ,EAAE,CAACwB,gBAAgB,CAACxB,QAAQ,CAAC,CAACoB,OAAO,CAAA;AAChEd,UAAAA,QAAQ,GAAGnC,GAAG,CAACsD,aAAa,EAAE,CAACC,IAAI,EAAE,CAACpB,QAAQ,CAAC/B,KAAK,CAAC6C,OAAO,CAAC,CAAA;AAE7Db,UAAAA,SAAS,GAAG;YAChBoB,WAAW,EAAEC,gCAAgC,CAC3C;cACEC,WAAW,EAAEtD,KAAK,CAAC6C,OAAO;AAC1Bd,cAAAA,QAAQ,EAARA,QAAQ;AACRwB,cAAAA,QAAQ,EAAE3D,GAAG,CAAC2D,QAAQ,EAAE,CAACJ,IAAI,EAAE,CAACI,QAAQ,EAAE;cAC1C3B,GAAG,EAAEA,GAAG,CAACiB,OAAO;cAChBhB,QAAQ,EAAEA,QAAQ,CAACgB,OAAO;AAC1BW,cAAAA,cAAc,EAAE5D,GAAG,CAAC6D,UAAU,EAAE,CAACN,IAAI,EAAE,CAACK,cAAc,CAAC;AACrDE,gBAAAA,IAAI,EAAE3B,QAAAA;AACR,eAAC,CAAC;AACF4B,cAAAA,mBAAmB,EAAE/D,GAAG,CAAC6D,UAAU,EAAE,CAACN,IAAI,EAAE,CAACK,cAAc,CAAC;gBAC1DE,IAAI,EAAE7B,QAAQ,CAAC+B,KAAAA;AACjB,eAAC,CAAC;AACFC,cAAAA,eAAe,EAAEjE,GAAG,CAAC6D,UAAU,EAAE,CAACN,IAAI,EAAE,CAACU,eAAe,CAAC;AACvDH,gBAAAA,IAAI,EAAE3B,QAAAA;AACR,eAAC,CAAC;AACF+B,cAAAA,UAAU,EAAElE,GAAG,CAAC6B,QAAQ,EAAE,CAACsC,aAAa,CAACtC,QAAQ,CAAC,CAACoB,OAAO;cAC1DmB,UAAU,EAAEpE,GAAG,CAAC6B,QAAQ,EAAE,CAACwC,MAAM,CAACxC,QAAQ,CAAC,CAACoB,OAAAA;aAC7C,EACDf,YACF,CAAC;AACDoC,YAAAA,OAAO,EAAE,EAAE;AACXC,YAAAA,GAAG,EAAE,cAAA;WACN,CAAA;AAAA5B,UAAAA,SAAA,CAAAjC,IAAA,GAAA,EAAA,CAAA;UAAA,OAKS8D,2CAA2C,CACnDxE,GAAG,EACHmC,QAAQ,EACRH,GAAG,EACHC,QAAQ,EACR,CACF,CAAC,CAAA;AAAA,QAAA,KAAA,EAAA;UAAAI,qBAAA,GAAAM,SAAA,CAAA9B,IAAA,CAAA;UAR0ByB,wBAAwB,GAAAD,qBAAA,CAAjDoC,uBAAuB,CAAA;UACvBlC,iBAAiB,GAAAF,qBAAA,CAAjBE,iBAAiB,CAAA;AAAA,UAAA,IAAA,EAQfA,iBAAiB,CAACK,MAAM,GAAG,CAAC,CAAA,EAAA;AAAAD,YAAAA,SAAA,CAAAjC,IAAA,GAAA,EAAA,CAAA;AAAA,YAAA,MAAA;AAAA,WAAA;AAAA,UAAA,MACxB,IAAIwC,KAAK,CACb,8DACF,CAAC,CAAA;AAAA,QAAA,KAAA,EAAA;AAGGV,UAAAA,SAAS,GAAG;YAChBgB,WAAW,EAAEkB,kCAAkC,CAC7C;cACEhB,WAAW,EAAEtD,KAAK,CAAC6C,OAAO;AAC1Bd,cAAAA,QAAQ,EAARA,QAAQ;AACRwB,cAAAA,QAAQ,EAAE3D,GAAG,CAAC2D,QAAQ,EAAE,CAACJ,IAAI,EAAE,CAACI,QAAQ,EAAE;cAC1C3B,GAAG,EAAEA,GAAG,CAACiB,OAAO;cAChBhB,QAAQ,EAAEA,QAAQ,CAACgB,OAAO;AAC1BmB,cAAAA,UAAU,EAAEpE,GAAG,CAAC6B,QAAQ,EAAE,CAACwC,MAAM,CAACxC,QAAQ,CAAC,CAACoB,OAAO;AACnDwB,cAAAA,uBAAuB,EAAEnC,wBAAAA;aAC1B,EACDJ,YACF,CAAC;AACDoC,YAAAA,OAAO,EAAE,EAAE;AACXC,YAAAA,GAAG,EAAE,wBAAA;WACN,CAAA;AAEKpE,UAAAA,OAAO,GAAGwE,kBAAkB,CAACC,IAAI,EAAE,CACtCC,WAAW,CAAC9C,KAAK,CAAC,CAClB+C,GAAG,CAAC1C,SAAS,EAAEI,SAAS,CAAC,CAAA;AAAAG,UAAAA,SAAA,CAAAjC,IAAA,GAAA,EAAA,CAAA;AAAA,UAAA,OAEtBqE,2BAA2B,CAAC5E,OAAO,EAAEH,GAAG,CAAC,CAAA;AAAA,QAAA,KAAA,EAAA;UAAA,OAAA2C,SAAA,CAAA1B,MAAA,CAExC,QAAA,EAAA;AACLd,YAAAA,OAAO,EAAPA,OAAO;AACPC,YAAAA,KAAK,EAAAc,cAAA,CAAAA,cAAA,KACAd,KAAK,CAAA,EAAA,EAAA,EAAA;cACR+C,iBAAiB,EAAElB,QAAQ,CAACgB,OAAAA;AAAO,aAAA,CAAA;WAEtC,CAAA,CAAA;AAAA,QAAA,KAAA,EAAA,CAAA;AAAA,QAAA,KAAA,KAAA;UAAA,OAAAN,SAAA,CAAAxB,IAAA,EAAA,CAAA;AAAA,OAAA;AAAA,KAAA,EAAAO,QAAA,CAAA,CAAA;GACF,CAAA,CAAA,CAAA;AAAA,EAAA,OAAA,SA7FYf,6BAA6BA,CAAAqE,GAAA,EAAAC,GAAA,EAAA;AAAA,IAAA,OAAAxD,IAAA,CAAAF,KAAA,CAAA,IAAA,EAAAC,SAAA,CAAA,CAAA;AAAA,GAAA,CAAA;AAAA,CA6FzC;;;;"}