{"version":3,"sources":["../src/helpers/formatNetworkType.ts","../src/hooks/useNetworkType.tsx"],"names":["wallet","ctx"],"mappings":";;;;;;AAMO,IAAM,iBAAA,GAAoB,CAAC,WAAgC,KAAA;AAChE,EAAI,IAAA,WAAA,CAAY,UAAW,CAAA,MAAM,CAAG,EAAA;AAClC,IAAO,OAAA,WAAA,CAAY,UAAU,CAAC,CAAA;AAAA;AAEhC,EAAO,OAAA,WAAA;AACT,CAAA;;;ACHA,IAAM,wBAA2B,GAAA,GAAA;AAqDjC,IAAM,iBAAiB,CAAC;AAAA,EACtB,QAAA;AAAA,EACA;AACF,CAAA,GAA2B,EAAgC,KAAA;AACzD,EAAA,MAAM,SAAS,gBAAiB,EAAA;AAChC,EAAA,MAAM,MAAM,mBAAoB,EAAA;AAChC,EAAA,MAAM,CAAC,WAAA,EAAa,cAAc,CAAA,GAAI,SAEpC,MAAS,CAAA;AAIX,EAAM,MAAA,sBAAA,GAAyB,CAC7BA,OAAAA,EACAC,IACG,KAAA;AA5EP,IAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA;AA6EI,IAAI,IAAA,CAACD,QAAO,WAAa,EAAA;AACvB,MAAA,cAAA,CAAe,MAAS,CAAA;AACxB,MAAA;AAAA;AAGF,IAAA,MAAM,UAAa,GAAA,iBAAA;AAAA,MACjB,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,CAAA,EAAA,GAAAA,QAAO,aAAP,KAAA,IAAA,GAAA,MAAA,GAAA,EAAA,CAAsB,aAAtB,IAAiC,GAAA,MAAA,GAAA,EAAA,CAAA,CAAA,CAAA,CAAG,WAApC,IAA6C,GAAA,MAAA,GAAA,EAAA,CAAA,CAAA;AAAA,KAC/C;AAGA,IAAA,cAAA,CAAe,UAAU,CAAA;AAGzB,IAAA,IAAI,cAAc,IAAM,EAAA;AACtB,MAAAC,IAAAA,CAAI,cAAc,UAAU,CAAA;AAAA;AAC9B,GACF;AAEA,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,sBAAA,CAAuB,QAAQ,GAAG,CAAA;AAElC,IAAI,IAAA,QAAA,IAAY,IAAQ,IAAA,QAAA,KAAa,KAAO,EAAA;AAC1C,MAAA;AAAA;AAGF,IAAA,MAAM,QAAW,GAAA,WAAA;AAAA,MACf,MAAM;AACJ,QAAA,IAAI,CAAC,MAAA,CAAO,WAAe,IAAA,CAAC,QAAU,EAAA;AACpC,UAAA,cAAA,CAAe,MAAS,CAAA;AACxB,UAAA,aAAA,CAAc,QAAQ,CAAA;AACtB,UAAA;AAAA;AAGF,QAAA,sBAAA,CAAuB,QAAQ,GAAG,CAAA;AAAA,OACpC;AAAA,MACA,QAAA,IAAY,gBAAoB,IAAA,IAAA,GAC5B,gBACA,GAAA;AAAA,KACN;AACA,IAAA,OAAO,MAAM;AACX,MAAA,YAAA,CAAa,QAAQ,CAAA;AAAA,KACvB;AAAA,KACC,CAAC,QAAA,EAAU,gBAAkB,EAAA,MAAA,EAAQ,GAAG,CAAC,CAAA;AAE5C,EAAO,OAAA;AAAA,IACL,WAAA;AAAA,IACA,WAAa,EAAA,MAAM,sBAAuB,CAAA,MAAA,EAAQ,GAAG;AAAA,GACvD;AACF,CAAA;AAEA,IAAO,sBAAQ,GAAA","file":"chunk-XIMYSCDZ.mjs","sourcesContent":["/**\n * Format network type to a human readable format.\n *\n * @param machineName\n * @returns\n */\nexport const formatNetworkType = (machineName: string): string => {\n  if (machineName.startsWith('sui:')) {\n    return machineName.substring(4)\n  }\n  return machineName\n}\n","import {\n  SuiClientProviderContext,\n  useCurrentWallet,\n  useSuiClientContext,\n} from '@mysten/dapp-kit'\nimport { useEffect, useState } from 'react'\nimport { formatNetworkType } from '~~/helpers/formatNetworkType'\n\nconst DEFAULT_REFETCH_INTERVAL = 3000\n\nexport interface IUseNetworkTypeParams {\n  /**\n   * (Optional) The flag determines whether the app network needs to be synchronized with the wallet network regularly or just once.\n   */\n  autoSync?: boolean\n  /**\n   * (Optional) Auto sync interval in milliseconds.\n   */\n  autoSyncInterval?: number\n}\nexport interface IUseNetworkTypeResponse {\n  /**\n   * Network type or undefined if wallet is not connected.\n   */\n  networkType?: 'mainnet' | 'testnet' | 'devnet' | 'localnet'\n  /**\n   * Synchronize app network with wallet network on demand.\n   */\n  synchronize: () => void\n}\n\n/**\n * The useNetworkType() hook lets you determine which network is currently active in the user wallet.\n *\n * It's possible to request the network type once or on a regular basis.\n * If a wallet is not connected, the network type will be undefined.\n * Please note the user wallet is the single point of truth and the only way to switch the network now is through wallet settings.\n *\n * Usage:\n * - One-time request\n * ```ts\n * const { networkType } = useNetworkType({\n *  autoSync: false\n * })\n * ```\n * - On demand\n * ```ts\n * const { networkType, synchronize } = useNetworkType()\n * synchronize()\n * ```\n * - Regular update\n * ```ts\n * const { networkType } = useNetworkType({\n *  autoSync: true,\n *  autoSyncInterval: 3000\n * })\n * ```\n *\n * @param {IUseNetworkTypeParams} params The parameter object.\n * @returns {IUseNetworkTypeResponse} An object with the network type and synchronize function.\n */\nconst useNetworkType = ({\n  autoSync,\n  autoSyncInterval,\n}: IUseNetworkTypeParams = {}): IUseNetworkTypeResponse => {\n  const wallet = useCurrentWallet()\n  const ctx = useSuiClientContext()\n  const [networkType, setNetworkType] = useState<\n    'mainnet' | 'testnet' | 'devnet' | 'localnet' | undefined\n  >(undefined)\n\n  // @todo Find a better type for the wallet.\n  /* eslint-disable  @typescript-eslint/no-explicit-any */\n  const synchronizeNetworkType = (\n    wallet: any,\n    ctx: SuiClientProviderContext\n  ) => {\n    if (!wallet.isConnected) {\n      setNetworkType(undefined)\n      return\n    }\n\n    const newNetwork = formatNetworkType(\n      wallet.currentWallet?.accounts?.[0].chains?.[0]\n    ) as 'mainnet' | 'testnet' | 'devnet' | 'localnet' | undefined\n\n    // Save currently selected wallet network.\n    setNetworkType(newNetwork)\n\n    // If network is defined, set the app network to it.\n    if (newNetwork != null) {\n      ctx.selectNetwork(newNetwork)\n    }\n  }\n\n  useEffect(() => {\n    synchronizeNetworkType(wallet, ctx)\n\n    if (autoSync == null || autoSync === false) {\n      return\n    }\n\n    const interval = setInterval(\n      () => {\n        if (!wallet.isConnected || !autoSync) {\n          setNetworkType(undefined)\n          clearInterval(interval)\n          return\n        }\n\n        synchronizeNetworkType(wallet, ctx)\n      },\n      autoSync && autoSyncInterval != null\n        ? autoSyncInterval\n        : DEFAULT_REFETCH_INTERVAL\n    )\n    return () => {\n      clearTimeout(interval)\n    }\n  }, [autoSync, autoSyncInterval, wallet, ctx])\n\n  return {\n    networkType,\n    synchronize: () => synchronizeNetworkType(wallet, ctx),\n  }\n}\n\nexport default useNetworkType\n"]}