{"version":3,"sources":["../src/provider/orderlyAppProvider.tsx","../src/hooks/useBootstrap.ts","../src/provider/appContext.tsx","../src/hooks/useWalletStateHandle.ts","../src/hooks/useLinkDevice.ts","../src/hooks/useWalletEvent.ts","../src/hooks/useSettleEvent.ts","../src/hooks/useWalletConnectError.ts","../src/hooks/useCurrentChainId.ts","../src/provider/configContext.tsx","../src/hooks/useExecutionReport.tsx","../src/hooks/getOrderExecutionReportMsg.ts","../src/hooks/useDataTap.ts"],"names":["ModalProvider","OrderlyThemeProvider","Toaster","TooltipProvider","useEffect","useBootstrap","refCode","OrderlyConfigProvider","OrderlyTrackerProvider","createContext","useContext","useMemo","useRef","useState","useConfig","useAccount","useChains","useKeyStore","useWalletConnector","parseChainIdToNumber","praseChainIdToNumber","windowGuard","AccountStatusEnum","SDKError","ChainNamespace","parseJSON","useLocalStorage","useScreen","WALLET_KEY","useLinkDevice","connectedChain","disconnect","_","setLinkDeviceStorage","account","isMobile","configStore","onDisconnect","label","linkData","getLinkDeviceData","walletInfo","linkDevice","address","secretKey","chainId","chainNamespace","url","decodedUrl","autoLinkDevice","getLinkDeviceStorage","orderlyKey","accountId","linkDeviceStorage","link","decodeBase64","base64","data","currentTime","expiredTime","useWalletStateHandle","options","connectedWallet","connect","namespace","isManualConnect","accountState","keyStore","networkId","chains","checkChainSupport","unsupported","setUnsupported","currentWalletAddress","currentChain","id","isSupported","localAddress","res","error","walletState","wallet","status","toast","capitalizeString","useEventEmitter","useSessionStorage","useWalletSubscription","useWalletEvent","ee","recordRef","record","setRecord","side","transStatus","showToast","isPushOnce","msg","useSettleSubscription","useSettleEvent","modal","useStorageLedgerAddress","useWalletConnectError","setLedgerAddress","useRestrictedInfo","useCurrentChainId","defaultChain","currentChainId","setCurrentChainId","fallbackChain","firstChain","jsx","AppContext","useAppContext","AppStateProvider","props","connectWallet","wrongNetwork","restrictedInfo","disabledConnect","AppConfigContext","useAppConfig","AppConfigProvider","transSymbolformString","AlgoOrderRootType","parseNumber","getOrderExecutionReportMsg","symbolsInfo","symbol","quantity","total_executed_quantity","getSymbolInfo","base_dp","displaySide","displaySymbol","displayQuantity","title","displayTotalExecutedQuantity","useSymbolsInfo","useDebouncedCallback","jsxs","useExecutionReport","symbolsInfoRef","handler","OrderlyAppProvider","components","appIcons","onChainChanged","configProps","useDataTap","state"],"mappings":"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","sourcesContent":["import { PropsWithChildren } from \"react\";\nimport { OrderlyAppConfig } from \"../types\";\nimport {\n  ModalProvider,\n  OrderlyThemeProvider,\n  Toaster,\n  TooltipProvider,\n} from \"@orderly.network/ui\";\nimport { useBootstrap } from \"../hooks/useBootstrap\";\nimport {\n  ConfigProviderProps,\n  OrderlyConfigProvider,\n  OrderlyTrackerProvider,\n} from \"@orderly.network/hooks\";\nimport { AppStateProvider, AppStateProviderProps } from \"./appContext\";\nimport { AppConfigProvider } from \"./configContext\";\nimport { useExecutionReport } from \"../hooks/useExecutionReport\";\nimport { OrderlyThemeProviderProps } from \"@orderly.network/ui/src/provider/orderlyThemeProvider\";\n\nexport type OrderlyAppProviderProps = PropsWithChildren<\n  OrderlyAppConfig & AppStateProviderProps & OrderlyThemeProviderProps\n>;\n\nconst OrderlyAppProvider = (props: OrderlyAppProviderProps) => {\n  const {\n    // dateFormatting,\n    components,\n    appIcons,\n    onChainChanged,\n    defaultChain,\n    ...configProps\n  } = props;\n\n  useBootstrap();\n  useExecutionReport();\n\n  return (\n    <AppConfigProvider appIcons={appIcons} brokerName={props.brokerName!}>\n      <OrderlyThemeProvider\n        // dateFormatting={dateFormatting}\n        components={components}\n        overrides={props.overrides}\n      >\n        <OrderlyConfigProvider {...(configProps as ConfigProviderProps)}>\n          <AppStateProvider\n            onChainChanged={onChainChanged}\n            defaultChain={defaultChain}\n            restrictedInfo={props.restrictedInfo}\n          >\n            <OrderlyTrackerProvider>\n              <TooltipProvider delayDuration={300}>\n                <ModalProvider>{props.children}</ModalProvider>\n              </TooltipProvider>\n            </OrderlyTrackerProvider>\n          </AppStateProvider>\n          <Toaster />\n        </OrderlyConfigProvider>\n      </OrderlyThemeProvider>\n    </AppConfigProvider>\n  );\n};\n\nOrderlyAppProvider.displayName = \"OrderlyAppProvider\";\n\nexport { OrderlyAppProvider };\n","import { useEffect } from \"react\";\nimport { useAccount, useWalletConnector } from \"@orderly.network/hooks\";\n\nexport const useBootstrap = () => {\n  useEffect(() => {\n    const searchParams = new URLSearchParams(window.location.search);\n    const refCode = searchParams.get(\"ref\");\n    if (refCode) {\n      localStorage.setItem(\"referral_code\", refCode);\n    }\n  }, []);\n};\n","import { FC, createContext, PropsWithChildren, useContext } from \"react\";\nimport { useWalletStateHandle } from \"../hooks/useWalletStateHandle\";\nimport { useWalletEvent } from \"../hooks/useWalletEvent\";\nimport { useSettleEvent } from \"../hooks/useSettleEvent\";\nimport { useWalletConnectError } from \"../hooks/useWalletConnectError\";\nimport {\n  RestrictedInfoOptions,\n  useRestrictedInfo,\n  RestrictedInfoReturns,\n} from \"@orderly.network/hooks\";\nimport { useLinkDevice } from \"../hooks/useLinkDevice\";\nimport { DefaultChain, useCurrentChainId } from \"../hooks/useCurrentChainId\";\n\ntype AppContextState = {\n  connectWallet: ReturnType<typeof useWalletStateHandle>[\"connectWallet\"];\n  /**\n   * Whether the current network is not supported\n   */\n  wrongNetwork: boolean;\n  disabledConnect: boolean;\n  currentChainId: number | undefined;\n  setCurrentChainId: (chainId: number | undefined) => void;\n  onChainChanged?: (\n    chainId: number,\n    state: { isTestnet: boolean; isWalletConnected: boolean }\n  ) => void;\n  // networkStatus: ReturnType<typeof useAppState>[\"networkStatus\"];\n  restrictedInfo: RestrictedInfoReturns;\n};\n\nconst AppContext = createContext<AppContextState>({} as AppContextState);\n\nexport const useAppContext = () => {\n  return useContext(AppContext);\n};\n\nexport type AppStateProviderProps = {\n  defaultChain?: DefaultChain;\n  restrictedInfo?: RestrictedInfoOptions;\n} & Pick<AppContextState, \"onChainChanged\">;\n\nexport const AppStateProvider: FC<PropsWithChildren<AppStateProviderProps>> = (\n  props\n) => {\n  const [currentChainId, setCurrentChainId] = useCurrentChainId(\n    props.defaultChain\n  );\n  useLinkDevice();\n\n  const { connectWallet, wrongNetwork } = useWalletStateHandle({\n    // onChainChanged: props.onChainChanged,\n    currentChainId,\n  });\n\n  useWalletEvent();\n  useSettleEvent();\n  useWalletConnectError();\n\n  // const { networkStatus } = useAppState();\n  const restrictedInfo = useRestrictedInfo(props.restrictedInfo);\n\n  const disabledConnect = restrictedInfo.restrictedOpen;\n\n  return (\n    <AppContext.Provider\n      value={{\n        connectWallet,\n        wrongNetwork,\n        currentChainId,\n        setCurrentChainId,\n        onChainChanged: props.onChainChanged,\n        disabledConnect,\n        restrictedInfo,\n      }}\n    >\n      {props.children}\n    </AppContext.Provider>\n  );\n};\n","import { useEffect, useMemo, useRef, useState } from \"react\";\nimport { useConfig, WalletState } from \"@orderly.network/hooks\";\nimport {\n  useAccount,\n  useChains,\n  useKeyStore,\n  useWalletConnector,\n} from \"@orderly.network/hooks\";\nimport {\n  parseChainIdToNumber,\n  praseChainIdToNumber,\n  windowGuard,\n} from \"@orderly.network/utils\";\nimport {\n  AccountStatusEnum,\n  SDKError,\n  ChainNamespace,\n  NetworkId,\n} from \"@orderly.network/types\";\nimport { getLinkDeviceData } from \"./useLinkDevice\";\n\nconst WALLET_KEY = \"orderly:wallet-info\";\nconst CHAIN_NAMESPACE = \"orderly:chain-namespace\";\n\nexport const useWalletStateHandle = (options: {\n  // onChainChanged?: (chainId: number, isTestnet: boolean) => void;\n  currentChainId?: number;\n}) => {\n  const {\n    wallet: connectedWallet,\n    connect,\n    connectedChain,\n    disconnect,\n    namespace,\n  } = useWalletConnector();\n  //\n  // console.log(\"🔗 wallet state handle\", {\n  //   connectedWallet,\n  //   connectedChain,\n  //   namespace,\n  // });\n\n  if (typeof connect !== \"function\") {\n    throw new SDKError(\"Please provide a wallet connector provider\");\n  }\n\n  const isManualConnect = useRef<boolean>(false);\n\n  const { account, state: accountState } = useAccount();\n  const keyStore = useKeyStore();\n  const networkId = useConfig(\"networkId\") as NetworkId;\n  const [chains, { checkChainSupport }] = useChains();\n\n  const [unsupported, setUnsupported] = useState(false);\n\n  // current connected wallet address\n  const currentWalletAddress = useMemo<string | undefined>(() => {\n    return connectedWallet?.accounts?.[0]?.address;\n  }, [connectedWallet]);\n\n  // current connected chain id\n  const currentChain = useMemo<\n    { id: number; namespace: string } | undefined\n  >(() => {\n    const id = connectedWallet?.chains?.[0]?.id;\n    const namespace = connectedWallet?.chains?.[0]?.namespace;\n    if (typeof id === \"undefined\") return undefined;\n    return {\n      id: parseChainIdToNumber(id),\n      namespace,\n    };\n  }, [connectedWallet]);\n\n  useEffect(() => {\n    if (!connectedChain) {\n      setUnsupported(false);\n      return;\n    }\n\n    let isSupported = checkChainSupport(\n      connectedChain.id,\n      networkId\n      // networkId === \"testnet\" ? chains.testnet : chains.mainnet\n    );\n\n    setUnsupported(!isSupported);\n  }, [connectedChain, chains, checkChainSupport, networkId]);\n\n  useEffect(() => {\n    // if (unsupported) return;\n\n    windowGuard(() => {\n      const localAddress = keyStore.getAddress();\n      const walletInfo = JSON.parse(localStorage.getItem(WALLET_KEY) ?? \"{}\");\n\n      /**\n       * if locale address is exist, restore account state\n       */\n      if (connectedChain?.namespace === ChainNamespace.solana) {\n        return;\n      }\n      if (\n        localAddress &&\n        account.address !== localAddress &&\n        walletInfo.label\n      ) {\n        connect({\n          autoSelect: {\n            label: walletInfo.label,\n            disableModals: true,\n          },\n        }).then(\n          (res) => {\n            console.log(\"silent connect wallet successes\", res);\n          },\n          (error) => console.log(\"connect error\", error)\n        );\n      }\n    });\n  }, [connectedWallet, account.address]);\n\n  /**\n   * handle wallet connection\n   */\n  useEffect(() => {\n    if (\n      connectedWallet === null &&\n      accountState.status > AccountStatusEnum.NotConnected &&\n      !accountState.validating\n    ) {\n      account.disconnect();\n      return;\n    }\n\n    if (unsupported || !connectedChain) return;\n    if (isManualConnect.current) return;\n\n    const linkData = getLinkDeviceData();\n\n    // updateAccount(currentWalletAddress!, connectedWallet!, currentChainId!);\n    /**\n     * switch account\n     */\n    if (\n      !!currentWalletAddress &&\n      currentWalletAddress !== account.address &&\n      !linkData\n    ) {\n      account.setAddress(currentWalletAddress, {\n        provider: connectedWallet?.provider,\n        chain: {\n          id: praseChainIdToNumber(currentChain!.id),\n          namespace: currentChain!.namespace.toUpperCase() as ChainNamespace,\n        },\n        wallet: {\n          name: connectedWallet.label,\n        },\n      });\n\n      // save wallet connector info to local storage\n      windowGuard(() => {\n        localStorage.setItem(\n          WALLET_KEY,\n          JSON.stringify({\n            label: connectedWallet.label,\n          })\n        );\n      });\n    }\n\n    /**\n     * switch chainId\n     */\n    if (currentChain?.id !== account.chainId) {\n      account.switchChainId(currentChain?.id!);\n\n      // emit chain changed event\n      // options.onChainChanged?.(currentChainId!, isTestnet(networkId));\n    }\n  }, [\n    connectedWallet,\n    connectedChain,\n    currentWalletAddress,\n    currentChain,\n    account.address,\n    accountState,\n    account.chainId,\n    unsupported,\n  ]);\n\n  /**\n   * User manually connects to wallet\n   */\n  const connectWallet = async (): Promise<{\n    wallet?: WalletState;\n    status?: AccountStatusEnum;\n    wrongNetwork?: boolean;\n  } | null> => {\n    isManualConnect.current = true;\n    // const walletState = await connect();\n\n    return connect({ chainId: options.currentChainId })\n      .then(async (walletState) => {\n        if (\n          Array.isArray(walletState) &&\n          walletState.length > 0 &&\n          walletState[0] &&\n          walletState[0].accounts.length > 0\n        ) {\n          const wallet = walletState[0];\n          const chainId = praseChainIdToNumber(wallet.chains[0].id);\n\n          if (!checkChainSupport(chainId, networkId)) {\n            return {\n              wrongNetwork: true,\n            };\n          }\n\n          //\n          if (!account) {\n            throw new Error(\"account is not initialized\");\n          }\n          console.log(\"-- aaaaa wallet\", wallet);\n          // clear link device data when connect wallt\n          if (\n            accountState.status ===\n            AccountStatusEnum.EnableTradingWithoutConnected\n          ) {\n            localStorage.removeItem(\"orderly_link_device\");\n            await account.disconnect();\n          }\n          const status = await account.setAddress(wallet.accounts[0].address, {\n            provider: wallet.provider,\n            chain: {\n              id: praseChainIdToNumber(wallet.chains[0].id),\n              namespace:\n                wallet.chains[0].namespace.toUpperCase() as ChainNamespace,\n            },\n            wallet: {\n              name: wallet.label,\n            },\n            // label: ,\n          });\n          console.log(\"-- xxxxxx status\", status);\n\n          return { wallet, status, wrongNetwork: false };\n        }\n\n        return null;\n      })\n      .finally(() => {\n        isManualConnect.current = false;\n      });\n  };\n\n  return {\n    connectWallet,\n    wrongNetwork: unsupported,\n  };\n};\n","import { useCallback, useEffect } from \"react\";\nimport {\n  parseJSON,\n  useAccount,\n  useConfig,\n  useLocalStorage,\n  useWalletConnector,\n} from \"@orderly.network/hooks\";\nimport { useScreen } from \"@orderly.network/ui\";\nimport { ChainNamespace } from \"@orderly.network/types\";\n\ntype DecodedData = {\n  /** secret key */\n  k: string;\n  /* timestamp */\n  t: number;\n  /** address */\n  a: string;\n  /** chain id */\n  i: number;\n  /** chain namespace */\n  n: ChainNamespace;\n};\n\ntype LinkDeviceStorage = { chainId: number; chainNamespace: ChainNamespace };\n\nconst WALLET_KEY = \"orderly:wallet-info\";\n\nexport function useLinkDevice() {\n  const { connectedChain, disconnect } = useWalletConnector();\n  const [_, setLinkDeviceStorage] = useLocalStorage(\n    \"orderly_link_device\",\n    {} as LinkDeviceStorage\n  );\n\n  const { account } = useAccount();\n  const { isMobile } = useScreen();\n  const configStore = useConfig();\n\n  const onDisconnect = async (label: string) => {\n    // The cache must be cleared first, otherwise it will be auto connect wallet\n    localStorage.removeItem(WALLET_KEY);\n    await account.disconnect();\n    await disconnect({ label });\n  };\n\n  useEffect(() => {\n    const linkData = getLinkDeviceData();\n    const walletInfo = JSON.parse(localStorage.getItem(WALLET_KEY) ?? \"{}\");\n    if (linkData && walletInfo) {\n      // clear connect data when link device\n      onDisconnect(walletInfo.label);\n    }\n  }, []);\n\n  const linkDevice = async () => {\n    const linkData = getLinkDeviceData();\n    if (!linkData) return;\n\n    const { address, secretKey, chainId, chainNamespace } = linkData;\n    const isSuccess = await account.importOrderlyKey({\n      address,\n      secretKey,\n      chainNamespace,\n    });\n    if (!isSuccess) return;\n    setLinkDeviceStorage({\n      chainId,\n      chainNamespace,\n    });\n\n    const url = new URL(window.location.href);\n    url.searchParams.delete(\"link\");\n    const decodedUrl = decodeURIComponent(url.toString());\n    history.replaceState(null, \"\", decodedUrl);\n  };\n\n  useEffect(() => {\n    if (isMobile && !connectedChain) {\n      linkDevice();\n    }\n  }, [account, connectedChain, isMobile]);\n\n  const autoLinkDevice = async () => {\n    // this can't use the value returned by useLocalStorage here, because it will trigger extra state change\n    const { chainId, chainNamespace } = getLinkDeviceStorage() || {};\n    if (isMobile && !connectedChain && chainId && chainNamespace) {\n      const address = account.keyStore.getAddress();\n      const orderlyKey = account.keyStore.getOrderlyKey();\n      const accountId = account.keyStore.getAccountId(address!);\n      const res = await account.checkOrderlyKey(\n        address!,\n        orderlyKey!,\n        accountId!\n      );\n      if (res) {\n        configStore.set(\"chainNamespace\", chainNamespace);\n      }\n    }\n  };\n\n  // persist status when refresh page\n  useEffect(() => {\n    autoLinkDevice();\n  }, [account, isMobile, connectedChain]);\n\n  return { linkDevice };\n}\n\nfunction getLinkDeviceStorage() {\n  try {\n    const linkDeviceStorage = localStorage.getItem(\"orderly_link_device\");\n    const json = linkDeviceStorage ? parseJSON(linkDeviceStorage) : null;\n    return json as LinkDeviceStorage;\n  } catch (err) {\n    console.error(\"getLinkDeviceStorage\", err);\n  }\n}\n\nexport function getLinkDeviceData() {\n  const url = new URL(window.location.href);\n  const link = url.searchParams.get(\"link\");\n\n  if (!link) return;\n\n  const {\n    a: address,\n    k: secretKey,\n    i: chainId,\n    n: chainNamespace,\n  } = decodeBase64(link) || {};\n\n  if (address && secretKey && chainId && chainNamespace) {\n    return {\n      address,\n      secretKey,\n      chainId,\n      chainNamespace,\n    };\n  }\n}\n\nfunction decodeBase64(base64: string) {\n  try {\n    const data = JSON.parse(window.atob(base64)) as DecodedData;\n    console.log(\"decodeBase64\", data);\n    const currentTime = Math.floor(Date.now() / 1000);\n    const expiredTime = data.t;\n\n    if (!expiredTime || currentTime > expiredTime) {\n      console.error(\"Orderly key has expired.\");\n      return;\n    }\n\n    return data;\n  } catch (error) {\n    console.error(\"Invalid or expired orderly key.\");\n  }\n}\n","import { useRef } from \"react\";\nimport { toast } from \"@orderly.network/ui\";\nimport { capitalizeString } from \"@orderly.network/utils\";\nimport {\n  useEventEmitter,\n  useSessionStorage,\n  useWalletSubscription,\n} from \"@orderly.network/hooks\";\n\nexport function useWalletEvent() {\n  const ee = useEventEmitter();\n\n  const recordRef = useRef<Record<number, boolean>>({});\n\n  const [record, setRecord] = useSessionStorage(\n    \"orderly_wallet_change_id\",\n    {} as Record<number, boolean>\n  );\n\n  recordRef.current = record;\n\n  useWalletSubscription({\n    onMessage: (data: any) => {\n      console.log(\"wallet:changed\", data);\n      const { id, side, transStatus } = data;\n      let showToast = true;\n\n      // DEPOSIT and WITHDRAW will push twice COMPLETED and FAILED event\n      if (\n        [\"DEPOSIT\", \"WITHDRAW\"].includes(side) &&\n        [\"COMPLETED\", \"FAILED\"].includes(transStatus)\n      ) {\n        const isPushOnce = recordRef.current[id];\n        setRecord({\n          ...record,\n          [id]: isPushOnce ? undefined : true,\n        });\n\n        showToast = !isPushOnce;\n      }\n\n      if (transStatus === \"COMPLETED\" && showToast) {\n        let msg = `${capitalizeString(side)} completed`;\n        toast.success(msg);\n      } else if (transStatus === \"FAILED\" && showToast) {\n        let msg = `${capitalizeString(side)} failed`;\n        toast.error(msg);\n      }\n\n      ee.emit(\"wallet:changed\", data);\n    },\n  });\n}\n","import { useSettleSubscription } from \"@orderly.network/hooks\";\nimport { toast } from \"@orderly.network/ui\";\n\nexport function useSettleEvent() {\n  useSettleSubscription({\n    onMessage: (data: any) => {\n      const { status } = data;\n\n      // console.log(\"settle ws: \", data);\n\n      switch (status) {\n        case \"COMPLETED\":\n          toast.success(\"Settlement completed\");\n          break;\n        case \"FAILED\":\n          toast.error(\"Settlement failed\");\n          break;\n        default:\n          break;\n      }\n    },\n  });\n}\n","import { useEventEmitter } from \"@orderly.network/hooks\";\nimport { useEffect } from \"react\";\nimport { modal, toast } from \"@orderly.network/ui\";\nimport { LedgerWalletKey } from \"@orderly.network/types\";\nimport { useStorageLedgerAddress } from \"@orderly.network/hooks\"; \n\n\nexport function useWalletConnectError() {\n  const ee = useEventEmitter();\n  const {setLedgerAddress} = useStorageLedgerAddress();  \n\n\n  useEffect(() => {\n    ee.on('wallet:connect-error', (data) => {\n      toast.error(data.message);\n\n    })\n    ee.on('wallet:sign-message-with-ledger-error', (data: { userAddress: string; message: string }) => {\n      window.setTimeout(() => {\n\n        modal.confirm({\n          title: 'Sign Message Failed',\n          content: \"Are you using Ledger Wallet?\",\n          size: 'sm',\n          onOk: async () => {\n            console.log('-- use ledger', true);\n            setLedgerAddress(data.userAddress);\n    \n            return Promise.resolve();\n          },\n          okLabel: 'OK',\n          onCancel: async () => {\n            toast.error(data.message);\n            return Promise.resolve();\n          },\n          cancelLabel: 'No',\n\n        }).then(res => {\n          console.log('-- dialog res', res);\n        });\n\n      });\n\n    })\n\n  }, [ee])\n\n  return {}\n}","import { useEffect, useState } from \"react\";\nimport {\n  Chains,\n  useChains,\n  useConfig,\n  useWalletConnector,\n} from \"@orderly.network/hooks\";\nimport { Chain, NetworkId } from \"@orderly.network/types\";\ntype ReturnChain = Pick<Chain, \"id\"> & Partial<Omit<Chain, \"id\">>;\n\nexport type DefaultChain =\n  | {\n      mainnet?: ReturnChain;\n      testnet?: ReturnChain;\n    }\n  | ((networkId: NetworkId, chains: Chains) => ReturnChain)\n  | undefined;\n\nexport function useCurrentChainId(defaultChain?: DefaultChain) {\n  const [currentChainId, setCurrentChainId] = useState<number | undefined>();\n\n  const [chains] = useChains();\n  const networkId = useConfig(\"networkId\") as NetworkId;\n\n  const { connectedChain } = useWalletConnector();\n\n  useEffect(() => {\n    if (connectedChain) {\n      setCurrentChainId?.(\n        typeof connectedChain.id === \"number\"\n          ? connectedChain.id\n          : parseInt(connectedChain.id)\n      );\n    } else {\n      if (!!currentChainId) return;\n      let fallbackChain: Partial<Chain> | undefined;\n\n      const firstChain =\n        networkId === \"mainnet\" ? chains.mainnet?.[0] : chains.testnet?.[0];\n\n      if (typeof defaultChain === \"function\") {\n        fallbackChain = defaultChain(networkId, chains);\n      } else if (typeof defaultChain === \"object\") {\n        fallbackChain =\n          networkId === \"mainnet\"\n            ? defaultChain?.mainnet\n            : defaultChain?.testnet;\n      }\n\n      const chainId = fallbackChain?.id || firstChain?.network_infos?.chain_id;\n      if (!chainId) return;\n\n      setCurrentChainId?.(chainId);\n    }\n  }, [\n    connectedChain,\n    chains,\n    currentChainId,\n    networkId,\n    setCurrentChainId,\n    defaultChain,\n  ]);\n\n  return [currentChainId, setCurrentChainId] as const;\n}\n","import { createContext, PropsWithChildren, useContext } from \"react\";\nimport { AppLogos } from \"../types\";\n\nexport type ThemeContextState = {\n  appIcons?: AppLogos;\n  brokerName: string;\n};\n\nconst AppConfigContext = createContext<ThemeContextState>(\n  {} as ThemeContextState\n);\n\nexport const useAppConfig = () => {\n  return useContext(AppConfigContext);\n};\n\nexport const AppConfigProvider = (\n  props: PropsWithChildren<{\n    appIcons?: AppLogos;\n    brokerName: string;\n  }>\n) => {\n  return (\n    <AppConfigContext.Provider value={props}>\n      {props.children}\n    </AppConfigContext.Provider>\n  );\n};\n","import { useEffect, useRef } from \"react\";\nimport { getOrderExecutionReportMsg } from \"./getOrderExecutionReportMsg\";\nimport {\n  useSymbolsInfo,\n  useWS,\n  useEventEmitter,\n  useDebouncedCallback,\n} from \"@orderly.network/hooks\";\nimport { toast } from \"@orderly.network/ui\";\n\nexport function useExecutionReport() {\n  const ee = useEventEmitter();\n\n  const symbolsInfo = useSymbolsInfo();\n  const symbolsInfoRef = useRef({});\n\n  useEffect(() => {\n    symbolsInfoRef.current = symbolsInfo;\n  }, [symbolsInfo]);\n\n  const handler = useDebouncedCallback((data: any) => {\n    const showToast = (data: any) => {\n      const { title, msg } = getOrderExecutionReportMsg(\n        data,\n        symbolsInfoRef.current\n      );\n\n      if (title && msg) {\n        toast.success(\n          <div>\n            {title}\n            <br />\n            <div className=\"orderly-text-white/[0.54] orderly-text-xs\">\n              {msg}\n            </div>\n          </div>\n        );\n      }\n    };\n\n    showToast(data);\n  }, 100);\n\n  useEffect(() => {\n    ee.on(\"orders:changed\", handler);\n\n    return () => {\n      ee.off(\"orders:changed\", handler);\n    };\n  }, []);\n}\n","import {\n  capitalizeString,\n  transSymbolformString,\n} from \"@orderly.network/utils\";\nimport { API } from \"@orderly.network/types\";\nimport { AlgoOrderRootType } from \"@orderly.network/types\";\nimport { parseNumber } from \"@orderly.network/ui\";\n\nexport function getOrderExecutionReportMsg(\n  data: API.AlgoOrder | API.Order,\n  symbolsInfo: any\n) {\n  const { symbol, side, quantity } = data;\n  const total_executed_quantity =\n    \"total_executed_quantity\" in data ? data.total_executed_quantity : 0;\n  const status = \"status\" in data ? data.status : data.algo_status;\n  const getSymbolInfo = symbolsInfo[symbol];\n  const base_dp = getSymbolInfo(\"base_dp\");\n  const displaySide = capitalizeString(side);\n  const displaySymbol = transSymbolformString(symbol);\n  const displayQuantity =\n    \"algo_type\" in data && data.algo_type === AlgoOrderRootType.POSITIONAL_TP_SL\n      ? \"Entire position\"\n      : base_dp === undefined\n      ? quantity\n      : parseNumber(quantity, { dp: base_dp });\n\n  let title = \"\";\n  let msg = \"\";\n  switch (status) {\n    case \"NEW\":\n      title = \"Order opened\";\n      msg = `${displaySide} ${displaySymbol} ${displayQuantity}`;\n      break;\n    case \"FILLED\":\n    case \"PARTIAL_FILLED\":\n      const displayTotalExecutedQuantity =\n        base_dp === undefined\n          ? total_executed_quantity\n          : parseNumber(total_executed_quantity, { dp: base_dp });\n      title = \"Order filled\";\n      msg = `${displaySide} ${displaySymbol} ${displayTotalExecutedQuantity} / ${displayQuantity}`;\n      break;\n    case \"CANCELLED\":\n      title = \"Order cancelled\";\n      msg = `${displaySide} ${displaySymbol} ${displayQuantity}`;\n      break;\n    case \"REJECTED\":\n      title = \"Order rejected\";\n      msg = `${displaySide} ${displaySymbol} ${displayQuantity}`;\n      break;\n    case \"REPLACED\":\n      title = \"Order edited\";\n      msg = `${side} ${displaySymbol} ${total_executed_quantity} / ${displayQuantity}`;\n      break;\n    default:\n      break;\n  }\n\n  return {\n    title,\n    msg,\n  };\n}\n","import { AccountStatusEnum } from \"@orderly.network/types\";\nimport { useAppContext } from \"../provider/appContext\";\nimport { useAccount } from \"@orderly.network/hooks\";\n\nexport const useDataTap = <T = any>(\n  data: T,\n  options?: {\n    skip?: false;\n    fallbackData?: T;\n    accountStatus?: AccountStatusEnum;\n  }\n): T | null => {\n  const { wrongNetwork, disabledConnect } = useAppContext();\n  const { state } = useAccount();\n  /**\n   * ignore\n   */\n  if (options?.skip) return data;\n\n  if (wrongNetwork || disabledConnect) {\n    return typeof options?.fallbackData !== \"undefined\"\n      ? options.fallbackData\n      : null;\n  }\n\n  if (typeof options?.accountStatus !== \"undefined\") {\n    if (state.status < options.accountStatus) {\n      return typeof options?.fallbackData !== \"undefined\"\n        ? options.fallbackData\n        : null;\n    }\n  }\n\n  // return wrongNetwork\n  //   ? typeof options?.fallbackData !== \"undefined\"\n  //     ? options.fallbackData\n  //     : null\n  //   : data;\n  //\n  return data;\n};\n"]}