{
  "version": 3,
  "sources": ["../../src/providers/strategies/helpers/signTransactions/signTransactions.ts"],
  "sourcesContent": ["import { getEconomics } from 'apiCalls/economics/getEconomics';\nimport { GAS_PRICE } from 'constants/mvx.constants';\nimport { Transaction } from 'lib/sdkCore';\nimport { DECIMALS, DIGITS, formatAmount } from 'lib/sdkDappUtils';\nimport { SignTransactionsStateManager } from 'managers/internal/SignTransactionsStateManager/SignTransactionsStateManager';\nimport { SignEventsEnum } from 'managers/internal/SignTransactionsStateManager/types';\nimport { getAccount } from 'methods/account/getAccount';\nimport { getEgldLabel } from 'methods/network/getEgldLabel';\nimport { SignTransactionsOptionsType } from 'providers/DappProvider/helpers/signTransactions/signTransactionsWithProvider';\nimport { cancelCrossWindowAction } from 'providers/helpers/cancelCrossWindowAction';\nimport { IProvider } from 'providers/types/providerFactory.types';\nimport { setIsSidePanelOpen } from 'store/actions/ui/uiActions';\nimport { providerSettingsSelector } from 'store/selectors/configSelectors';\nimport { networkSelector } from 'store/selectors/networkSelectors';\nimport { getState } from 'store/store';\nimport { getCommonData } from './helpers/getCommonData/getCommonData';\nimport { getFeeData } from './helpers/getFeeData';\nimport { getMultiEsdtTransferData } from './helpers/getMultiEsdtTransferData/getMultiEsdtTransferData';\nimport { guardTransactions as getGuardedTransactions } from './helpers/guardTransactions/guardTransactions';\n\ntype SignTransactionsParamsType = {\n  transactions?: Transaction[];\n  handleSign: IProvider['signTransactions'];\n  guardTransactions?: typeof getGuardedTransactions;\n  options?: SignTransactionsOptionsType;\n};\n\nexport async function signTransactions({\n  transactions = [],\n  handleSign,\n  guardTransactions = getGuardedTransactions,\n  options\n}: SignTransactionsParamsType): Promise<Transaction[]> {\n  const { address, shard, username } = getAccount();\n  const network = networkSelector(getState());\n  const providerConfig = providerSettingsSelector(getState());\n\n  const egldLabel = getEgldLabel();\n\n  const { allTransactions, parsedTransactionsByDataField } =\n    getMultiEsdtTransferData(transactions);\n\n  const signedIndexes: number[] = [];\n\n  if (providerConfig?.isSigningUiEnabled === false) {\n    // Mark signing as in progress so idle state manager doesn't interfere\n    setIsSidePanelOpen(true);\n\n    try {\n      const signedTransactions: Transaction[] = [];\n\n      for (const item of allTransactions) {\n        const signedTxs = await handleSign([item.transaction]);\n        if (signedTxs && signedTxs.length > 0) {\n          signedTransactions.push(signedTxs[0]);\n        }\n      }\n\n      const optionallyGuardedTransactions = options?.skipGuardian\n        ? signedTransactions\n        : await guardTransactions(signedTransactions);\n\n      return optionallyGuardedTransactions;\n    } finally {\n      setIsSidePanelOpen(false);\n    }\n  }\n\n  const manager = SignTransactionsStateManager.getInstance();\n  await manager.openUI();\n\n  if (!manager) {\n    throw new Error('Unable to establish connection with sign screens');\n  }\n\n  const handleCancel = async () => {\n    await cancelCrossWindowAction();\n    manager.closeUI();\n  };\n\n  manager.subscribeToEventBus(SignEventsEnum.CLOSE, handleCancel);\n\n  return new Promise<Transaction[]>(async (resolve, reject) => {\n    const signedTransactions: Transaction[] = [];\n    const economics = await getEconomics({ baseURL: network.apiAddress });\n\n    manager.notifyDataUpdate();\n\n    manager.initializeGasPriceMap(allTransactions.map((tx) => tx.transaction));\n    const price = economics?.price;\n\n    let currentScreenIndex = 0;\n\n    const updateScreen = async () => {\n      const currentTransaction = allTransactions[currentScreenIndex];\n      const transaction = currentTransaction?.transaction;\n\n      const currentNonce = Number(transaction.nonce);\n\n      try {\n        manager.updateIsLoading(true);\n\n        const { commonData, tokenTransaction, fungibleTransaction } =\n          await getCommonData({\n            allTransactions,\n            currentScreenIndex,\n            egldLabel,\n            network,\n            gasPriceData: manager.getGasPriceOptionMap[currentNonce],\n            price,\n            address,\n            username,\n            shard,\n            signedIndexes,\n            parsedTransactionsByDataField\n          });\n\n        if (tokenTransaction) {\n          manager.updateTokenTransaction(tokenTransaction);\n        }\n\n        if (fungibleTransaction) {\n          manager.updateNonFungibleTransaction(\n            fungibleTransaction.type,\n            fungibleTransaction\n          );\n        }\n\n        manager.updateCommonData(commonData);\n      } catch (error) {\n        console.error(\n          `Error fetching common data for transaction at index ${currentScreenIndex}:`,\n          error\n        );\n\n        throw error;\n      } finally {\n        manager.updateIsLoading(false);\n      }\n    };\n\n    const onBack = () => {\n      if (currentScreenIndex > 0) {\n        currentScreenIndex--;\n        updateScreen();\n      }\n    };\n\n    const onSetGasPriceOption = (gasPriceOption: number = GAS_PRICE) => {\n      const currentTransaction = allTransactions[currentScreenIndex];\n      const transaction = currentTransaction.transaction;\n      const currentNonce = Number(transaction.nonce);\n\n      manager.updateGasPriceMap({\n        nonce: currentNonce,\n        gasPriceOption\n      });\n\n      const plainTransaction = transaction.toPlainObject();\n\n      const newTransaction = Transaction.newFromPlainObject({\n        ...plainTransaction,\n        gasPrice: gasPriceOption\n      });\n\n      const feeData = getFeeData({\n        transaction: newTransaction,\n        price\n      });\n\n      const formattedGasPrice = formatAmount({\n        input: gasPriceOption.toString(),\n        decimals: DECIMALS,\n        addCommas: true,\n        digits: DIGITS\n      });\n\n      manager.updateCommonData({\n        feeLimit: feeData.feeLimitFormatted,\n        feeInFiatLimit: feeData.feeInFiatLimit,\n        gasPrice: formattedGasPrice,\n        gasPriceOption\n      });\n    };\n\n    const onCancel = async () => {\n      reject(new Error('Transaction signing cancelled by user'));\n      await cancelCrossWindowAction();\n      manager.closeUI();\n    };\n\n    const onNext = () => {\n      if (currentScreenIndex < manager.transactionsCount - 1) {\n        currentScreenIndex++;\n        updateScreen();\n      }\n    };\n\n    const onSign = async () => {\n      const currentTransaction = allTransactions[currentScreenIndex];\n      const transaction = currentTransaction.transaction;\n      const currentNonce = Number(transaction.nonce);\n\n      const { commonData } = await getCommonData({\n        allTransactions,\n        currentScreenIndex,\n        egldLabel,\n        network,\n        gasPriceData: manager.getGasPriceOptionMap[currentNonce],\n        price,\n        address,\n        username,\n        shard,\n        signedIndexes,\n        parsedTransactionsByDataField\n      });\n\n      if (!commonData.needsSigning) {\n        signedIndexes.push(currentScreenIndex);\n        return onNext();\n      }\n\n      const plainTransaction = transaction.toPlainObject();\n      const txNonce = plainTransaction.nonce;\n\n      const { gasPriceOption } = manager.getGasPriceOptionMap[txNonce];\n\n      const transactionToSign = Transaction.newFromPlainObject({\n        ...plainTransaction,\n        gasPrice: gasPriceOption\n      });\n\n      try {\n        const signedTxs = await handleSign([transactionToSign]);\n        if (signedTxs) {\n          signedIndexes.push(currentScreenIndex);\n          signedTransactions.push(signedTxs[0]);\n        }\n\n        const isLastScreen = currentScreenIndex === allTransactions.length - 1;\n        const allSignableTransactions = allTransactions.filter(\n          (tx) => tx.needsSigning\n        );\n\n        const areAllTransactionsSigned =\n          signedTransactions.length === allSignableTransactions.length;\n\n        if (isLastScreen && areAllTransactionsSigned) {\n          const finalizedTransactions =\n            (await options?.callback?.(signedTransactions)) ||\n            signedTransactions;\n\n          const optionallyGuardedTransactions = options?.skipGuardian\n            ? finalizedTransactions\n            : await guardTransactions(finalizedTransactions);\n          manager.closeUI();\n          return resolve(optionallyGuardedTransactions);\n        }\n\n        onNext();\n      } catch (error) {\n        manager.closeUI();\n        reject(error);\n      }\n    };\n\n    const eventHandlersMap = new Map([\n      [SignEventsEnum.NEXT, onNext],\n      [SignEventsEnum.CONFIRM, onSign],\n      [SignEventsEnum.CLOSE, onCancel],\n      [SignEventsEnum.BACK, onBack],\n      [SignEventsEnum.SET_GAS_PRICE_OPTION, onSetGasPriceOption]\n    ]);\n\n    function setupEventListeners() {\n      for (const [event, handler] of eventHandlersMap) {\n        manager.subscribeToEventBus(event, handler);\n      }\n    }\n\n    manager.clearEventHandlers([\n      SignEventsEnum.NEXT,\n      SignEventsEnum.CONFIRM,\n      SignEventsEnum.CLOSE,\n      SignEventsEnum.BACK,\n      SignEventsEnum.SET_GAS_PRICE_OPTION\n    ]);\n\n    setupEventListeners();\n    await updateScreen();\n  });\n}\n"],
  "mappings": "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",
  "names": ["signTransactions", "transactions", "handleSign", "guardTransactions", "options", "address", "shard", "username", "getAccount", "network", "networkSelector", "getState", "providerConfig", "providerSettingsSelector", "egldLabel", "getEgldLabel", "allTransactions", "parsedTransactionsByDataField", "getMultiEsdtTransferData", "signedIndexes", "setIsSidePanelOpen", "signedTransactions", "item", "signedTxs", "manager", "SignTransactionsStateManager", "handleCancel", "cancelCrossWindowAction", "resolve", "reject", "economics", "getEconomics", "tx", "price", "currentScreenIndex", "updateScreen", "transaction", "currentNonce", "commonData", "tokenTransaction", "fungibleTransaction", "getCommonData", "error", "onBack", "onSetGasPriceOption", "gasPriceOption", "plainTransaction", "newTransaction", "Transaction", "feeData", "getFeeData", "formattedGasPrice", "formatAmount", "DECIMALS", "DIGITS", "onCancel", "onNext", "onSign", "txNonce", "transactionToSign", "isLastScreen", "allSignableTransactions", "areAllTransactionsSigned", "finalizedTransactions", "optionallyGuardedTransactions", "eventHandlersMap", "setupEventListeners", "event", "handler"]
}
