{
  "version": 3,
  "sources": ["../../src/methods/trackTransactions/helpers/checkTransactionStatus/helpers/checkBatch/helpers/runTransactionStatusUpdate.ts"],
  "sourcesContent": ["import { updateSessionStatus } from 'store/actions/transactions/transactionsActions';\nimport { getIsTransactionFailed } from 'store/actions/transactions/transactionStateByStatus';\nimport { TransactionBatchStatusesEnum } from 'types/enums.types';\nimport {\n  TrackedTransactionResultType,\n  SignedTransactionType\n} from 'types/transactions.types';\nimport { runSessionCallbacks } from './runSessionCallbacks';\nimport { manageFailedTransactions } from './runTransactionFailure';\nimport { updateTransactionAndSessionStatus } from './updateTransactionAndSessionStatus';\n\nexport interface TransactionStatusTrackerPropsType {\n  sessionId: string;\n  transactionBatch: SignedTransactionType[];\n  isSequential?: boolean;\n}\n\ninterface RetriesType {\n  [hash: string]: number;\n}\n\nconst retries: RetriesType = {};\n\ninterface RunTransactionStatusUpdateType {\n  serverTransaction: TrackedTransactionResultType;\n  sessionId: string;\n  isSequential?: boolean;\n}\n\nexport async function runTransactionStatusUpdate({\n  serverTransaction: transaction,\n  sessionId,\n  isSequential\n}: RunTransactionStatusUpdateType) {\n  const { hash, status, invalidTransaction, hasStatusChanged } = transaction;\n\n  try {\n    const retriesForThisHash = retries[hash];\n    if (retriesForThisHash > 30) {\n      // consider transaction as stuck after 1 minute\n      updateSessionStatus({\n        sessionId,\n        status: TransactionBatchStatusesEnum.timedOut\n      });\n\n      await runSessionCallbacks({\n        sessionId,\n        status: TransactionBatchStatusesEnum.timedOut\n      });\n\n      return;\n    }\n\n    if (\n      (invalidTransaction && !isSequential) ||\n      status === TransactionBatchStatusesEnum.sent\n    ) {\n      retries[hash] = retries[hash] ? retries[hash] + 1 : 1;\n      return;\n    }\n\n    // The tx is from a sequential batch.\n    // If the transactions before this are not successful then it means that no other tx will be processed\n    if (isSequential && !status) {\n      const newStatus = updateTransactionAndSessionStatus({\n        sessionId,\n        transaction\n      });\n      await runSessionCallbacks({\n        sessionId,\n        status: newStatus\n      });\n      return;\n    }\n\n    if (hasStatusChanged) {\n      const newStatus = updateTransactionAndSessionStatus({\n        sessionId,\n        transaction\n      });\n\n      await runSessionCallbacks({\n        sessionId,\n        status: newStatus\n      });\n    }\n\n    if (getIsTransactionFailed(status)) {\n      await manageFailedTransactions({ sessionId, transaction });\n    }\n  } catch (error) {\n    console.error(error);\n    updateSessionStatus({\n      sessionId,\n      status: TransactionBatchStatusesEnum.timedOut\n    });\n    await runSessionCallbacks({\n      sessionId,\n      status: TransactionBatchStatusesEnum.timedOut\n    });\n  }\n}\n"],
  "mappings": "wMAqBA,IAAMA,EAAuB,CAAC,EAQ9B,eAAsBC,EAA2B,CAC/C,kBAAmBC,EACnB,UAAAC,EACA,aAAAC,CACF,EAAmC,CACjC,GAAM,CAAE,KAAAC,EAAM,OAAAC,EAAQ,mBAAAC,EAAoB,iBAAAC,CAAiB,EAAIN,EAE/D,GAAI,CAEF,GAD2BF,EAAQK,CAAI,EACd,GAAI,CAE3BI,EAAoB,CAClB,UAAAN,EACA,iBACF,CAAC,EAED,MAAMO,EAAoB,CACxB,UAAAP,EACA,iBACF,CAAC,EAED,MACF,CAEA,GACGI,GAAsB,CAACH,GACxBE,WACA,CACAN,EAAQK,CAAI,EAAIL,EAAQK,CAAI,EAAIL,EAAQK,CAAI,EAAI,EAAI,EACpD,MACF,CAIA,GAAID,GAAgB,CAACE,EAAQ,CAC3B,IAAMK,EAAYC,EAAkC,CAClD,UAAAT,EACA,YAAAD,CACF,CAAC,EACD,MAAMQ,EAAoB,CACxB,UAAAP,EACA,OAAQQ,CACV,CAAC,EACD,MACF,CAEA,GAAIH,EAAkB,CACpB,IAAMG,EAAYC,EAAkC,CAClD,UAAAT,EACA,YAAAD,CACF,CAAC,EAED,MAAMQ,EAAoB,CACxB,UAAAP,EACA,OAAQQ,CACV,CAAC,CACH,CAEIE,EAAuBP,CAAM,GAC/B,MAAMQ,EAAyB,CAAE,UAAAX,EAAW,YAAAD,CAAY,CAAC,CAE7D,OAASa,EAAO,CACd,QAAQ,MAAMA,CAAK,EACnBN,EAAoB,CAClB,UAAAN,EACA,iBACF,CAAC,EACD,MAAMO,EAAoB,CACxB,UAAAP,EACA,iBACF,CAAC,CACH,CACF",
  "names": ["retries", "runTransactionStatusUpdate", "transaction", "sessionId", "isSequential", "hash", "status", "invalidTransaction", "hasStatusChanged", "updateSessionStatus", "runSessionCallbacks", "newStatus", "updateTransactionAndSessionStatus", "getIsTransactionFailed", "manageFailedTransactions", "error"]
}
