{"version":3,"file":"helpers.mjs","sources":["../../../../src/plugins/psyoptionsAmericanInstrumentModule/helpers.ts"],"sourcesContent":["import * as psyoptionsAmerican from '@mithraic-labs/psy-american';\nimport { BN } from 'bn.js';\nimport { PublicKey } from '@solana/web3.js';\nimport { Convergence } from '../../Convergence';\n\nimport { getOrCreateATAtxBuilder } from '../../utils/ata';\nimport { NoopWallet } from '../../utils/Wallets';\nimport { InstructionUniquenessTracker } from '../../utils/classes';\nimport {\n  PsyoptionsAmericanInstrument,\n  createAmericanProgram,\n} from './instrument';\nimport { TransactionBuilder } from '@/utils/TransactionBuilder';\nimport { addComputeBudgetIxsIfNeeded } from '@/utils/helpers';\n\nexport type PrepareAmericanOptionsResult = {\n  ataTxBuilders: TransactionBuilder[];\n  mintTxBuilders: TransactionBuilder[];\n};\n//create American Options ATAs and mint Options\nexport const prepareAmericanOptions = async (\n  convergence: Convergence,\n  responseAddress: PublicKey,\n  caller: PublicKey\n): Promise<PrepareAmericanOptionsResult> => {\n  const ixTracker = new InstructionUniquenessTracker([]);\n  const cvgWallet = new NoopWallet(caller);\n  const americanProgram = createAmericanProgram(convergence, cvgWallet);\n  const response = await convergence\n    .rfqs()\n    .findResponseByAddress({ address: responseAddress });\n  const rfq = await convergence\n    .rfqs()\n    .findRfqByAddress({ address: response.rfq });\n\n  const callerSide = caller.equals(rfq.taker) ? 'taker' : 'maker';\n\n  const { legs: legExchangeResult } = convergence.rfqs().getSettlementResult({\n    response,\n    rfq,\n  });\n\n  const ataTxBuilderArray: TransactionBuilder[] = [];\n  const mintTxBuilderArray: TransactionBuilder[] = [];\n  for (const [index, leg] of rfq.legs.entries()) {\n    const { receiver, amount } = legExchangeResult[index];\n    if (\n      !(leg instanceof PsyoptionsAmericanInstrument) ||\n      receiver === callerSide\n    ) {\n      continue;\n    }\n\n    const optionMarket = await leg.getOptionMeta(caller);\n    const optionToken = await getOrCreateATAtxBuilder(\n      convergence,\n      optionMarket.optionMint,\n      caller\n    );\n    if (\n      optionToken.txBuilder &&\n      ixTracker.checkedAdd(optionToken.txBuilder, 'TransactionBuilder')\n    ) {\n      ataTxBuilderArray.push(optionToken.txBuilder);\n    }\n    const writerToken = await getOrCreateATAtxBuilder(\n      convergence,\n      optionMarket!.writerTokenMint,\n      caller\n    );\n    if (\n      writerToken.txBuilder &&\n      ixTracker.checkedAdd(writerToken.txBuilder, 'TransactionBuilder')\n    ) {\n      ataTxBuilderArray.push(writerToken.txBuilder);\n    }\n    const underlyingToken = await getOrCreateATAtxBuilder(\n      convergence,\n      optionMarket!.underlyingAssetMint,\n      caller\n    );\n    if (\n      underlyingToken.txBuilder &&\n      ixTracker.checkedAdd(underlyingToken.txBuilder, 'TransactionBuilder')\n    ) {\n      ataTxBuilderArray.push(underlyingToken.txBuilder);\n    }\n    const { tokenBalance } = await convergence.tokens().getTokenBalance({\n      mintAddress: optionMarket.optionMint,\n      owner: caller,\n      mintDecimals: PsyoptionsAmericanInstrument.decimals,\n    });\n\n    const tokensToMint = amount - tokenBalance;\n    if (tokensToMint <= 0) continue;\n    const ixWithSigners =\n      await psyoptionsAmerican.instructions.mintOptionV2Instruction(\n        americanProgram,\n        optionToken.ataPubKey,\n        writerToken.ataPubKey,\n        underlyingToken.ataPubKey,\n        new BN(tokensToMint),\n        optionMarket as psyoptionsAmerican.OptionMarketWithKey\n      );\n    ixWithSigners.ix.keys[0] = {\n      pubkey: caller,\n      isSigner: true,\n      isWritable: false,\n    };\n    const mintTxBuilder = TransactionBuilder.make()\n      .setFeePayer(convergence.rpc().getDefaultFeePayer())\n      .add({\n        instruction: ixWithSigners.ix,\n        signers: [convergence.identity()],\n      });\n    await addComputeBudgetIxsIfNeeded(mintTxBuilder, convergence, true);\n\n    mintTxBuilderArray.push(mintTxBuilder);\n  }\n  return {\n    ataTxBuilders: ataTxBuilderArray,\n    mintTxBuilders: mintTxBuilderArray,\n  };\n};\n"],"names":["prepareAmericanOptions","_ref","_asyncToGenerator","_regeneratorRuntime","mark","_callee","convergence","responseAddress","caller","ixTracker","cvgWallet","americanProgram","response","rfq","callerSide","_convergence$rfqs$get","legExchangeResult","ataTxBuilderArray","mintTxBuilderArray","_iterator","_step","_step$value","index","leg","_legExchangeResult$in","receiver","amount","optionMarket","optionToken","writerToken","underlyingToken","_yield$convergence$to","tokenBalance","tokensToMint","ixWithSigners","mintTxBuilder","wrap","_callee$","_context","prev","next","InstructionUniquenessTracker","NoopWallet","createAmericanProgram","rfqs","findResponseByAddress","address","sent","findRfqByAddress","equals","taker","getSettlementResult","legs","_createForOfIteratorHelper","entries","s","n","done","_slicedToArray","value","PsyoptionsAmericanInstrument","abrupt","getOptionMeta","getOrCreateATAtxBuilder","optionMint","txBuilder","checkedAdd","push","writerTokenMint","underlyingAssetMint","tokens","getTokenBalance","mintAddress","owner","mintDecimals","decimals","psyoptionsAmerican","instructions","mintOptionV2Instruction","ataPubKey","BN","ix","keys","pubkey","isSigner","isWritable","TransactionBuilder","make","setFeePayer","rpc","getDefaultFeePayer","add","instruction","signers","identity","addComputeBudgetIxsIfNeeded","t0","e","f","finish","ataTxBuilders","mintTxBuilders","stop","_x","_x2","_x3","apply","arguments"],"mappings":"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"}