{
  "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_exports", "__export", "signTransactions", "__toCommonJS", "import_getEconomics", "import_mvx", "import_sdkCore", "import_sdkDappUtils", "import_SignTransactionsStateManager", "import_types", "import_getAccount", "import_getEgldLabel", "import_cancelCrossWindowAction", "import_uiActions", "import_configSelectors", "import_networkSelectors", "import_store", "import_getCommonData", "import_getFeeData", "import_getMultiEsdtTransferData", "import_guardTransactions", "transactions", "handleSign", "guardTransactions", "getGuardedTransactions", "options", "address", "shard", "username", "network", "providerConfig", "egldLabel", "allTransactions", "parsedTransactionsByDataField", "signedIndexes", "signedTransactions", "item", "signedTxs", "manager", "handleCancel", "resolve", "reject", "economics", "tx", "price", "currentScreenIndex", "updateScreen", "transaction", "currentNonce", "commonData", "tokenTransaction", "fungibleTransaction", "error", "onBack", "onSetGasPriceOption", "gasPriceOption", "plainTransaction", "newTransaction", "feeData", "formattedGasPrice", "onCancel", "onNext", "onSign", "txNonce", "transactionToSign", "isLastScreen", "allSignableTransactions", "areAllTransactionsSigned", "finalizedTransactions", "optionallyGuardedTransactions", "eventHandlersMap", "setupEventListeners", "event", "handler"]
}
