{
  "version": 3,
  "sources": ["../../../../src/managers/internal/LedgerIdleStateManager/LedgerIdleStateManager.ts"],
  "sourcesContent": ["import { DappProvider } from 'providers/DappProvider';\nimport {\n  getAccountProvider,\n  setAccountProvider\n} from 'providers/helpers/accountProvider';\nimport { LedgerProviderStrategy } from 'providers/strategies/LedgerProviderStrategy/LedgerProviderStrategy';\nimport { ProviderTypeEnum } from 'providers/types/providerFactory.types';\nimport { isLoggedInSelector } from 'store/selectors/accountSelectors';\nimport { loginInfoSelector } from 'store/selectors/loginInfoSelectors';\nimport { isSidePanelOpenSelector } from 'store/selectors/uiSelectors';\nimport { getState, getStore } from 'store/store';\nimport { IconNamesEnum } from 'types/enums.types';\nimport { ToastManager } from '../../ToastManager';\n\nconst LEDGER_IDLE_STATE_CHECK_INTERVAL = 30_000;\nconst LEDGER_IDLE_STATE_RECONNECT_INTERVAL = 5_000;\nconst RECONNECT_SUCCESS_DURATION = 3000;\n\nexport class LedgerIdleStateManager {\n  private static instance: LedgerIdleStateManager;\n  private store = getStore();\n  private connectionCheckInterval: ReturnType<typeof setInterval> | null = null;\n  private recreateProviderInterval: ReturnType<typeof setInterval> | null =\n    null;\n\n  public static getInstance(): LedgerIdleStateManager {\n    if (!LedgerIdleStateManager.instance) {\n      LedgerIdleStateManager.instance = new LedgerIdleStateManager();\n    }\n    return LedgerIdleStateManager.instance;\n  }\n\n  private constructor() {}\n\n  public init = async () => {\n    this.startCheckConnectionLoop();\n  };\n\n  private readonly shouldCheckConnection = (): boolean => {\n    const state = this.store.getState();\n    const { providerType } = loginInfoSelector(state);\n    const isLoggedIn = isLoggedInSelector(state);\n    return Boolean(providerType === ProviderTypeEnum.ledger && isLoggedIn);\n  };\n\n  private readonly startCheckConnectionLoop = () => {\n    if (this.connectionCheckInterval) {\n      return;\n    }\n\n    this.connectionCheckInterval = setInterval(async () => {\n      const isSigningProcess = isSidePanelOpenSelector(getState());\n\n      if (!this.shouldCheckConnection() || isSigningProcess) {\n        return;\n      }\n\n      try {\n        const ledgerProvider = getAccountProvider().getProvider();\n        await ledgerProvider.getAddress();\n      } catch (_error) {\n        ToastManager.getInstance().createCustomToast({\n          toastId: 'ledger-provider-idle-warning',\n          icon: IconNamesEnum.close,\n          iconClassName: 'warning',\n          message: 'Unlock your device to continue signing transactions',\n          title: 'Ledger disconnected'\n        });\n        this.reset();\n        if (this.recreateProviderInterval) {\n          return;\n        }\n        this.recreateProviderInterval = setInterval(\n          this.reconnectProvider,\n          LEDGER_IDLE_STATE_RECONNECT_INTERVAL\n        );\n      }\n    }, LEDGER_IDLE_STATE_CHECK_INTERVAL);\n  };\n\n  private readonly reconnectProvider = async () => {\n    if (!this.shouldCheckConnection()) {\n      return;\n    }\n\n    try {\n      const createdProvider = new LedgerProviderStrategy({\n        shouldInitProvider: true\n      });\n\n      await createdProvider.init();\n\n      const dappProvider = new DappProvider(createdProvider);\n      createdProvider.getType = () => ProviderTypeEnum.ledger;\n      setAccountProvider(dappProvider);\n\n      this.reset();\n      clearInterval(this.recreateProviderInterval ?? 0);\n      this.recreateProviderInterval = null;\n\n      ToastManager.getInstance().createCustomToast({\n        toastId: 'ledger-provider-idle-warning',\n        duration: RECONNECT_SUCCESS_DURATION,\n        icon: IconNamesEnum.check,\n        iconClassName: 'success',\n        message: 'Your device is ready to sign transactions',\n        title: 'Ledger reconnected'\n      });\n      this.startCheckConnectionLoop();\n    } catch (_err) {\n      console.log('Unable to reconnect to Ledger');\n    }\n  };\n\n  public reset = () => {\n    clearInterval(this.connectionCheckInterval ?? 0);\n    this.connectionCheckInterval = null;\n  };\n}\n"],
  "mappings": "yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,4BAAAE,IAAA,eAAAC,EAAAH,GAAA,IAAAI,EAA6B,kCAC7BC,EAGO,6CACPC,EAAuC,8EACvCC,EAAiC,iDACjCC,EAAmC,4CACnCC,EAAkC,8CAClCC,EAAwC,uCACxCC,EAAmC,uBACnCC,EAA8B,6BAC9BC,EAA6B,8BAE7B,MAAMC,EAAmC,IACnCC,EAAuC,IACvCC,EAA6B,IAE5B,MAAMd,CAAuB,CAc1B,aAAc,CAZtB,KAAQ,SAAQ,YAAS,EACzB,KAAQ,wBAAiE,KACzE,KAAQ,yBACN,KAWF,KAAO,KAAO,SAAY,CACxB,KAAK,yBAAyB,CAChC,EAEA,KAAiB,sBAAwB,IAAe,CACtD,MAAMe,EAAQ,KAAK,MAAM,SAAS,EAC5B,CAAE,aAAAC,CAAa,KAAI,qBAAkBD,CAAK,EAC1CE,KAAa,sBAAmBF,CAAK,EAC3C,MAAO,GAAQC,IAAiB,mBAAiB,QAAUC,EAC7D,EAEA,KAAiB,yBAA2B,IAAM,CAC5C,KAAK,0BAIT,KAAK,wBAA0B,YAAY,SAAY,CACrD,MAAMC,KAAmB,8BAAwB,YAAS,CAAC,EAE3D,GAAI,GAAC,KAAK,sBAAsB,GAAKA,GAIrC,GAAI,CAEF,QADuB,sBAAmB,EAAE,YAAY,EACnC,WAAW,CAClC,MAAiB,CASf,GARA,eAAa,YAAY,EAAE,kBAAkB,CAC3C,QAAS,+BACT,KAAM,gBAAc,MACpB,cAAe,UACf,QAAS,sDACT,MAAO,qBACT,CAAC,EACD,KAAK,MAAM,EACP,KAAK,yBACP,OAEF,KAAK,yBAA2B,YAC9B,KAAK,kBACLL,CACF,CACF,CACF,EAAGD,CAAgC,EACrC,EAEA,KAAiB,kBAAoB,SAAY,CAC/C,GAAK,KAAK,sBAAsB,EAIhC,GAAI,CACF,MAAMO,EAAkB,IAAI,yBAAuB,CACjD,mBAAoB,EACtB,CAAC,EAED,MAAMA,EAAgB,KAAK,EAE3B,MAAMC,EAAe,IAAI,eAAaD,CAAe,EACrDA,EAAgB,QAAU,IAAM,mBAAiB,UACjD,sBAAmBC,CAAY,EAE/B,KAAK,MAAM,EACX,cAAc,KAAK,0BAA4B,CAAC,EAChD,KAAK,yBAA2B,KAEhC,eAAa,YAAY,EAAE,kBAAkB,CAC3C,QAAS,+BACT,SAAUN,EACV,KAAM,gBAAc,MACpB,cAAe,UACf,QAAS,4CACT,MAAO,oBACT,CAAC,EACD,KAAK,yBAAyB,CAChC,MAAe,CACb,QAAQ,IAAI,+BAA+B,CAC7C,CACF,EAEA,KAAO,MAAQ,IAAM,CACnB,cAAc,KAAK,yBAA2B,CAAC,EAC/C,KAAK,wBAA0B,IACjC,CArFuB,CAPvB,OAAc,aAAsC,CAClD,OAAKd,EAAuB,WAC1BA,EAAuB,SAAW,IAAIA,GAEjCA,EAAuB,QAChC,CAwFF",
  "names": ["LedgerIdleStateManager_exports", "__export", "LedgerIdleStateManager", "__toCommonJS", "import_DappProvider", "import_accountProvider", "import_LedgerProviderStrategy", "import_providerFactory", "import_accountSelectors", "import_loginInfoSelectors", "import_uiSelectors", "import_store", "import_enums", "import_ToastManager", "LEDGER_IDLE_STATE_CHECK_INTERVAL", "LEDGER_IDLE_STATE_RECONNECT_INTERVAL", "RECONNECT_SUCCESS_DURATION", "state", "providerType", "isLoggedIn", "isSigningProcess", "createdProvider", "dappProvider"]
}
