{
  "version": 3,
  "sources": ["../../src/providers/ProviderFactory.ts"],
  "sourcesContent": ["import { PROVIDER_SEARCH_PARAM } from 'constants/providerFactory.constants';\nimport { CrossWindowProvider } from 'lib/sdkWebWalletCrossWindowProvider';\nimport { LedgerIdleStateManager } from 'managers/internal/LedgerIdleStateManager/LedgerIdleStateManager';\nimport { getAddress } from 'methods/account/getAddress';\nimport { CrossWindowProviderStrategy } from 'providers/strategies/CrossWindowProviderStrategy';\nimport { ExtensionProviderStrategy } from 'providers/strategies/ExtensionProviderStrategy';\nimport { IframeProviderStrategy } from 'providers/strategies/IframeProviderStrategy';\nimport { LedgerProviderStrategy } from 'providers/strategies/LedgerProviderStrategy';\nimport {\n  WalletConnectProviderStrategy,\n  WalletConnectV2Error\n} from 'providers/strategies/WalletConnectProviderStrategy';\nimport { setProviderType } from 'store/actions/loginInfo/loginInfoActions';\nimport { walletConnectConfigSelector } from 'store/selectors/configSelectors';\nimport { networkSelector } from 'store/selectors/networkSelectors';\nimport { getState } from 'store/store';\nimport { DappProvider } from './DappProvider/DappProvider';\nimport {\n  getAccountProvider,\n  setAccountProvider\n} from './helpers/accountProvider';\nimport { clearInitiatedLogins } from './helpers/clearInitiatedLogins';\nimport { WebviewProviderStrategy } from './strategies/WebviewProviderStrategy';\nimport {\n  ICustomProvider,\n  IProvider,\n  IProviderFactory,\n  ProviderTypeEnum\n} from './types/providerFactory.types';\n\nexport class ProviderFactory {\n  private static _customProviders: ICustomProvider[] = [];\n\n  public static set customProviders(providers: ICustomProvider[]) {\n    this._customProviders = providers;\n  }\n\n  public static get customProviders() {\n    return this._customProviders;\n  }\n\n  public static async create({\n    type,\n    anchor\n  }: IProviderFactory): Promise<DappProvider> {\n    let createdProvider: IProvider | null = null;\n\n    switch (type) {\n      case ProviderTypeEnum.extension: {\n        createdProvider = new ExtensionProviderStrategy();\n\n        break;\n      }\n\n      case ProviderTypeEnum.crossWindow: {\n        createdProvider = new CrossWindowProviderStrategy();\n\n        break;\n      }\n\n      case ProviderTypeEnum.ledger: {\n        createdProvider = new LedgerProviderStrategy({ anchor });\n\n        const ledgerIdleStateManager = LedgerIdleStateManager.getInstance();\n        await ledgerIdleStateManager.init();\n\n        break;\n      }\n\n      case ProviderTypeEnum.metamask: {\n        createdProvider = new IframeProviderStrategy();\n\n        break;\n      }\n\n      case ProviderTypeEnum.passkey: {\n        const network = networkSelector(getState());\n\n        createdProvider = new CrossWindowProviderStrategy({\n          walletAddress: `${network.walletAddress}?${PROVIDER_SEARCH_PARAM}=${ProviderTypeEnum.passkey}`\n        });\n\n        break;\n      }\n\n      case ProviderTypeEnum.walletConnect: {\n        const walletConnectConfig = walletConnectConfigSelector(getState());\n\n        if (!walletConnectConfig?.walletConnectV2ProjectId) {\n          throw new Error(WalletConnectV2Error.invalidConfig);\n        }\n\n        createdProvider = new WalletConnectProviderStrategy({\n          anchor,\n          ...walletConnectConfig\n        });\n\n        break;\n      }\n      case ProviderTypeEnum.webview: {\n        createdProvider = new WebviewProviderStrategy();\n        break;\n      }\n\n      default: {\n        const address = getAddress();\n\n        for (const customProvider of this._customProviders) {\n          if (customProvider.type === type) {\n            createdProvider = await customProvider.constructor({\n              address,\n              anchor\n            });\n          }\n        }\n        break;\n      }\n    }\n\n    if (!createdProvider) {\n      throw new Error('Unable to create provider');\n    }\n\n    await createdProvider.init();\n\n    const dappProvider = new DappProvider(createdProvider);\n    setAccountProvider(dappProvider);\n\n    const shouldClearInitiatedLogins =\n      'provider' in createdProvider &&\n      createdProvider.provider instanceof CrossWindowProvider;\n\n    // Clear initiated logins and skip the login method if it's crossWindow or metamask\n    clearInitiatedLogins(\n      shouldClearInitiatedLogins\n        ? { skipLoginMethod: ProviderTypeEnum.crossWindow }\n        : null\n    );\n\n    return dappProvider;\n  }\n\n  public static async destroy() {\n    const provider = getAccountProvider();\n    provider.cancelLogin();\n    setAccountProvider(null);\n    setProviderType(ProviderTypeEnum.none);\n  }\n}\n"],
  "mappings": "yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,qBAAAE,IAAA,eAAAC,EAAAH,GAAA,IAAAI,EAAsC,+CACtCC,EAAoC,+CACpCC,EAAuC,2EACvCC,EAA2B,sCAC3BC,EAA4C,4DAC5CC,EAA0C,0DAC1CC,EAAuC,uDACvCC,EAAuC,uDACvCC,EAGO,8DACPC,EAAgC,oDAChCC,EAA4C,2CAC5CC,EAAgC,4CAChCC,EAAyB,uBACzBC,EAA6B,uCAC7BC,EAGO,qCACPC,EAAqC,0CACrCC,EAAwC,gDACxChB,EAKO,yCAEA,MAAMF,CAAgB,CAG3B,WAAkB,gBAAgBmB,EAA8B,CAC9D,KAAK,iBAAmBA,CAC1B,CAEA,WAAkB,iBAAkB,CAClC,OAAO,KAAK,gBACd,CAEA,aAAoB,OAAO,CACzB,KAAAC,EACA,OAAAC,CACF,EAA4C,CAC1C,IAAIC,EAAoC,KAExC,OAAQF,EAAM,CACZ,KAAK,mBAAiB,UAAW,CAC/BE,EAAkB,IAAI,4BAEtB,KACF,CAEA,KAAK,mBAAiB,YAAa,CACjCA,EAAkB,IAAI,8BAEtB,KACF,CAEA,KAAK,mBAAiB,OAAQ,CAC5BA,EAAkB,IAAI,yBAAuB,CAAE,OAAAD,CAAO,CAAC,EAGvD,MAD+B,yBAAuB,YAAY,EACrC,KAAK,EAElC,KACF,CAEA,KAAK,mBAAiB,SAAU,CAC9BC,EAAkB,IAAI,yBAEtB,KACF,CAEA,KAAK,mBAAiB,QAAS,CAC7B,MAAMC,KAAU,sBAAgB,YAAS,CAAC,EAE1CD,EAAkB,IAAI,8BAA4B,CAChD,cAAe,GAAGC,EAAQ,aAAa,IAAI,uBAAqB,IAAI,mBAAiB,OAAO,EAC9F,CAAC,EAED,KACF,CAEA,KAAK,mBAAiB,cAAe,CACnC,MAAMC,KAAsB,kCAA4B,YAAS,CAAC,EAElE,GAAI,CAACA,GAAqB,yBACxB,MAAM,IAAI,MAAM,uBAAqB,aAAa,EAGpDF,EAAkB,IAAI,gCAA8B,CAClD,OAAAD,EACA,GAAGG,CACL,CAAC,EAED,KACF,CACA,KAAK,mBAAiB,QAAS,CAC7BF,EAAkB,IAAI,0BACtB,KACF,CAEA,QAAS,CACP,MAAMG,KAAU,cAAW,EAE3B,UAAWC,KAAkB,KAAK,iBAC5BA,EAAe,OAASN,IAC1BE,EAAkB,MAAMI,EAAe,YAAY,CACjD,QAAAD,EACA,OAAAJ,CACF,CAAC,GAGL,KACF,CACF,CAEA,GAAI,CAACC,EACH,MAAM,IAAI,MAAM,2BAA2B,EAG7C,MAAMA,EAAgB,KAAK,EAE3B,MAAMK,EAAe,IAAI,eAAaL,CAAe,KACrD,sBAAmBK,CAAY,EAE/B,MAAMC,EACJ,aAAcN,GACdA,EAAgB,oBAAoB,sBAGtC,iCACEM,EACI,CAAE,gBAAiB,mBAAiB,WAAY,EAChD,IACN,EAEOD,CACT,CAEA,aAAoB,SAAU,IACX,sBAAmB,EAC3B,YAAY,KACrB,sBAAmB,IAAI,KACvB,mBAAgB,mBAAiB,IAAI,CACvC,CACF,CAtHa3B,EACI,iBAAsC,CAAC",
  "names": ["ProviderFactory_exports", "__export", "ProviderFactory", "__toCommonJS", "import_providerFactory", "import_sdkWebWalletCrossWindowProvider", "import_LedgerIdleStateManager", "import_getAddress", "import_CrossWindowProviderStrategy", "import_ExtensionProviderStrategy", "import_IframeProviderStrategy", "import_LedgerProviderStrategy", "import_WalletConnectProviderStrategy", "import_loginInfoActions", "import_configSelectors", "import_networkSelectors", "import_store", "import_DappProvider", "import_accountProvider", "import_clearInitiatedLogins", "import_WebviewProviderStrategy", "providers", "type", "anchor", "createdProvider", "network", "walletConnectConfig", "address", "customProvider", "dappProvider", "shouldClearInitiatedLogins"]
}
