@matchain/matchid-sdk-react 0.1.56-alpha.8 → 0.1.56-alpha.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (104) hide show
  1. package/dist/api.d.mts +6 -0
  2. package/dist/api.d.ts +6 -0
  3. package/dist/api.js +1728 -0
  4. package/dist/api.js.map +1 -0
  5. package/dist/api.mjs +23 -0
  6. package/dist/api.mjs.map +1 -0
  7. package/dist/assets/lottie.d.mts +1 -0
  8. package/dist/assets/lottie.d.ts +1 -0
  9. package/dist/assets/lottie.js +68 -0
  10. package/dist/assets/lottie.js.map +1 -0
  11. package/dist/assets/lottie.mjs +22 -0
  12. package/dist/assets/lottie.mjs.map +1 -0
  13. package/dist/chains.d.mts +2 -0
  14. package/dist/chains.d.ts +2 -0
  15. package/dist/chains.js +94 -0
  16. package/dist/chains.js.map +1 -0
  17. package/dist/chains.mjs +11 -0
  18. package/dist/chains.mjs.map +1 -0
  19. package/dist/chunk-3CR66BEX.mjs +19 -0
  20. package/dist/chunk-3CR66BEX.mjs.map +1 -0
  21. package/dist/chunk-FQ6PYZPD.mjs +1439 -0
  22. package/dist/chunk-FQ6PYZPD.mjs.map +1 -0
  23. package/dist/chunk-HBOS3RBL.mjs +19 -0
  24. package/dist/chunk-HBOS3RBL.mjs.map +1 -0
  25. package/dist/chunk-IZOOVZAD.mjs +145 -0
  26. package/dist/chunk-IZOOVZAD.mjs.map +1 -0
  27. package/dist/chunk-J5LGTIGS.mjs +10 -0
  28. package/dist/chunk-J5LGTIGS.mjs.map +1 -0
  29. package/dist/chunk-JCMQBWWW.mjs +97 -0
  30. package/dist/chunk-JCMQBWWW.mjs.map +1 -0
  31. package/dist/chunk-JX73EY6V.mjs +67 -0
  32. package/dist/chunk-JX73EY6V.mjs.map +1 -0
  33. package/dist/chunk-LOZCAT7A.mjs +7732 -0
  34. package/dist/chunk-LOZCAT7A.mjs.map +1 -0
  35. package/dist/chunk-UA6XHZHX.mjs +17 -0
  36. package/dist/chunk-UA6XHZHX.mjs.map +1 -0
  37. package/dist/chunk-XM6CYEXN.mjs +53 -0
  38. package/dist/chunk-XM6CYEXN.mjs.map +1 -0
  39. package/dist/components.d.mts +6 -0
  40. package/dist/components.d.ts +6 -0
  41. package/dist/components.js +6576 -0
  42. package/dist/components.js.map +1 -0
  43. package/dist/components.mjs +57 -0
  44. package/dist/components.mjs.map +1 -0
  45. package/dist/hooks.d.mts +12 -0
  46. package/dist/hooks.d.ts +12 -0
  47. package/dist/hooks.js +3619 -0
  48. package/dist/hooks.js.map +1 -0
  49. package/dist/hooks.mjs +41 -0
  50. package/dist/hooks.mjs.map +1 -0
  51. package/dist/icon.d.mts +5 -0
  52. package/dist/icon.d.ts +5 -0
  53. package/dist/icon.js +1454 -0
  54. package/dist/icon.js.map +1 -0
  55. package/dist/icon.mjs +116 -0
  56. package/dist/icon.mjs.map +1 -0
  57. package/dist/index-84CqVi2I.d.mts +66 -0
  58. package/dist/index-BNqdFiOo.d.ts +66 -0
  59. package/dist/index-BctnHnJp.d.ts +221 -0
  60. package/dist/index-BqI0PEIi.d.mts +38 -0
  61. package/dist/index-CHgaOUiW.d.mts +52590 -0
  62. package/dist/index-CHgaOUiW.d.ts +52590 -0
  63. package/dist/index-Car1jFyN.d.mts +132 -0
  64. package/dist/index-CboftuIp.d.mts +85 -0
  65. package/dist/index-CboftuIp.d.ts +85 -0
  66. package/dist/index-CcVHENNv.d.ts +132 -0
  67. package/dist/index-Cqdz_5bE.d.ts +92 -0
  68. package/dist/index-CvzpMw3N.d.ts +38 -0
  69. package/dist/index-D2E53ZMV.d.mts +7134 -0
  70. package/dist/index-DVlulZhE.d.mts +111 -0
  71. package/dist/index-DkijpM5Q.d.mts +221 -0
  72. package/dist/index-DwmrgZa2.d.ts +7134 -0
  73. package/dist/index-DxHhOW24.d.mts +92 -0
  74. package/dist/index-qmC4zt6V.d.ts +111 -0
  75. package/dist/index.css +2294 -0
  76. package/dist/index.d.mts +867 -0
  77. package/dist/index.d.ts +867 -0
  78. package/dist/index.js +9308 -0
  79. package/dist/index.js.map +1 -0
  80. package/dist/index.mjs +45 -0
  81. package/dist/index.mjs.map +1 -0
  82. package/dist/request-B0CyrGFT.d.mts +15 -0
  83. package/dist/request-B0CyrGFT.d.ts +15 -0
  84. package/dist/types-BrVeC0c8.d.mts +428 -0
  85. package/dist/types-BrVeC0c8.d.ts +428 -0
  86. package/dist/types.d.mts +3 -0
  87. package/dist/types.d.ts +3 -0
  88. package/dist/types.js +44 -0
  89. package/dist/types.js.map +1 -0
  90. package/dist/types.mjs +11 -0
  91. package/dist/types.mjs.map +1 -0
  92. package/dist/ui.d.mts +7 -0
  93. package/dist/ui.d.ts +7 -0
  94. package/dist/ui.js +1688 -0
  95. package/dist/ui.js.map +1 -0
  96. package/dist/ui.mjs +47 -0
  97. package/dist/ui.mjs.map +1 -0
  98. package/dist/utils.d.mts +28 -0
  99. package/dist/utils.d.ts +28 -0
  100. package/dist/utils.js +192 -0
  101. package/dist/utils.js.map +1 -0
  102. package/dist/utils.mjs +34 -0
  103. package/dist/utils.mjs.map +1 -0
  104. package/package.json +1 -1
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/index.tsx","../src/components/EmailModal/index.tsx","../src/ui/Modal/index.tsx","../src/hooks/useLayout.tsx","../src/ui/Overlay/index.tsx","../src/components/EmailModal/StepEmail.tsx","../src/ui/Button/index.tsx","../src/ui/Input/index.tsx","../src/ui/Field/index.tsx","../src/store/useLocalStore.ts","../src/api/request.ts","../src/config/env/index.ts","../src/store/index.ts","../src/utils/matchlog.ts","../src/api/index.ts","../src/hooks/useUserInfo.tsx","../src/MatchContext.tsx","../src/hooks/index.tsx","../src/hooks/useMatchEvents.ts","../src/hooks/eventManager.ts","../src/hooks/useWallet.tsx","../src/store/useStore.ts","../src/context/ModalContext.tsx","../src/ui/index.ts","../src/ui/Drawer/index.tsx","../src/ui/HashPanel/index.tsx","../src/ui/ModalDrawer/index.tsx","../src/hooks/useHash.ts","../src/ui/Popover/index.tsx","../src/ui/Switch/index.tsx","../src/ui/AlphaAvatar/index.tsx","../src/ui/Radio/index.tsx","../src/ui/Skeleton/index.tsx","../src/ui/Tabs/index.tsx","../src/ui/Lottie/index.tsx","../src/ui/Checkbox/index.tsx","../src/store/useTransactionStore.ts","../src/hooks/useCopyClipboard.ts","../src/context/ToastContext.tsx","../src/hooks/api/wallet.ts","../src/hooks/useMatchChain.tsx","../src/hooks/useMatchWallet.tsx","../src/config/index.tsx","../src/store/useContractStore.ts","../src/components/ImportToken/index.tsx","../src/hooks/useIsContract.ts","../src/hooks/useReceipt.tsx","../src/hooks/useTransaction.tsx","../src/store/useModalStore.ts","../src/hooks/useConfig.tsx","../src/components/CEXBindModal/index.tsx","../src/context/BusinessProvider.tsx","../src/context/index.tsx","../src/hooks/useWalletInit.ts","../src/utils/wallet.ts","../src/hooks/useInit.tsx","../src/i18n/en.json","../src/i18n/zh.json","../src/i18n/tw.json","../src/i18n/fr.json","../src/i18n/ja.json","../src/i18n/ko.json","../src/i18n/vi.json","../src/i18n/es.json","../src/i18n/pt.json","../src/i18n/index.ts","../src/components/EmailModal/StepVerify.tsx","../src/components/LoginBox/index.tsx","../src/hooks/useAppConfig.ts","../src/components/LoginButton/index.tsx","../src/components/LoginPanel/index.tsx","../src/components/LoginModal/index.tsx","../src/components/UserPopover/index.tsx","../src/assets/icon/ProfileIcon.tsx","../src/components/UsernameModal/index.tsx","../src/components/EVMModal/index.tsx","../src/components/WalletModalContent/index.tsx","../src/assets/wallet.ts","../src/hooks/useWalletBox.ts","../src/hooks/useEthersSigner.ts","../node_modules/@wagmi/core/src/version.ts","../node_modules/@wagmi/core/src/utils/getVersion.ts","../node_modules/@wagmi/core/src/errors/base.ts","../node_modules/@wagmi/core/src/errors/config.ts","../node_modules/@wagmi/core/src/actions/getConnectorClient.ts","../node_modules/@wagmi/core/src/exports/index.ts","../src/components/TRONModal/index.tsx","../src/lib/tron/TronLinkAdapter.ts","../src/hooks/useTRONWallet.ts","../src/lib/tron/BitgetAdapter.ts","../src/lib/tron/OKXAdapter.ts","../src/components/TONModal/index.tsx","../src/components/BTCModal/index.tsx","../src/lib/btc/UnisatAdapter.ts","../src/lib/btc/XverseAdapter.ts","../src/lib/btc/LeatherAdapter.ts","../src/hooks/useBTCWallet.ts","../src/lib/btc/PhantomAdapter.ts","../src/components/WalletModal/index.tsx","../src/components/AlphaAvatar/index.tsx","../src/components/WalletAsset/index.tsx","../src/components/TokenSend/index.tsx","../src/components/TokenDetail/index.tsx","../src/components/TokenSendList/index.tsx","../src/components/TransactionList/index.tsx"],"sourcesContent":["export {default as EmailModal} from './EmailModal'\nexport {default as Field} from '../ui/Field'\nexport {default as Input} from '../ui/Input'\nexport {default as Button} from '../ui/Button'\nexport {default as Modal, ModalWithHeader} from '../ui/Modal'\nexport {default as Popover} from \"../ui/Popover\"\n\nexport {default as LoginBox} from './LoginBox'\nexport {default as LoginButton} from './LoginButton'\nexport {default as LoginPanel} from './LoginPanel'\nexport {default as LoginModal} from './LoginModal'\nexport {default as UsernameModal} from './UsernameModal'\nexport {default as EVMModal} from \"./EVMModal\"\nexport {default as TRONModal} from \"./TRONModal\"\nexport {default as TONModal} from \"./TONModal\"\nexport {default as BTCModal} from \"./BTCModal\"\nexport {default as Overlay} from \"../ui/Overlay\"\nexport {default as WalletModal} from \"./WalletModal\"\nexport {default as WalletAsset} from \"./WalletAsset\"\nexport {default as TokenDetail} from \"./TokenDetail\"\nexport {default as TokenSend} from \"./TokenSend\"\nexport {default as TokenSendList} from \"./TokenSendList\"\nexport {default as TransactionList} from \"./TransactionList\"\n","import {useEffect, useState} from \"react\";\nimport {ModalWithHeader} from \"../../ui/Modal\";\nimport StepEmail from \"./StepEmail\";\nimport StepVerify from \"./StepVerify\";\nimport {EmailModalProps} from \"../../types/types\";\nimport {useIntl} from \"react-intl\";\n\nexport default function EmailModal({\n isOpen = false,\n width = 480,\n onClose,\n onBack,\n onLogin\n }: EmailModalProps) {\n const [step, setStep] = useState<\"input\" | \"verify\">(\"input\")\n const [emailVal, setEmailVal] = useState('')\n const intl = useIntl()\n\n useEffect(() => {\n if (!isOpen) {\n setStep('input')\n setEmailVal('')\n }\n }, [isOpen])\n\n return <ModalWithHeader\n isOpen={isOpen}\n width={width}\n onClose={onClose}\n title={intl.formatMessage({\n id:\"email\"\n })}\n onBack={step == 'verify' ? () => setStep(\"input\") : onBack}\n >\n {\n step === \"input\" ? <StepEmail email={emailVal} onContinue={(email) => {\n setEmailVal(email)\n setStep(\"verify\")\n }}/> : <StepVerify email={emailVal} onSuccess={onLogin}/>}\n </ModalWithHeader>\n}","import React, {PropsWithChildren, useEffect, useState} from \"react\";\nimport {ModalProps, ModalWithHeaderProps} from \"../../types\";\nimport ArrowLeftIcon from \"../../assets/icon/ArrowLeftIcon\";\nimport {CloseRoundIcon} from \"../../assets/icon\";\nimport {useDownMd} from \"../../hooks/useLayout\";\nimport Overlay from \"../Overlay\";\nimport { Button } from \"components\";\nimport { useIntl } from \"react-intl\";\n\nexport default function Modal({\n children,\n isOpen,\n width = 480,\n zIndex = 100,\n className = ''\n }: ModalProps) {\n\n return <Overlay isOpen={isOpen} zIndex={zIndex}>\n <div className={`matchid-modal ${className}`} style={{\n width\n }}>\n <div className=\"matchid-modal-mobile-header\"></div>\n {children}\n </div>\n </Overlay>\n}\n\nexport function ModalWithHeader({\n children,\n onBack,\n onClose,\n title,\n showBorder = true,\n showClose = true,\n ...props\n\n }: ModalWithHeaderProps) {\n const isDownMd = useDownMd()\n return <Modal {...props}>\n <div className={`matchid-modal-header ${showBorder ? 'matchid-modal-header-border' : ''}`}>\n <div className=\"matchid-modal-header-content\">\n {\n onBack &&\n <ArrowLeftIcon height={isDownMd ? 20 : 25} width={isDownMd ? 20 : 24} className=\"matchid-modal-header-back\" onClick={onBack}/>\n }\n <span className=\"matchid-modal-header-title\">{title}</span>\n </div>\n {onClose &&\n <CloseRoundIcon size={isDownMd ? 24 : 30} className=\"matchid-modal-header-close\" onClick={onClose}/>}\n </div>\n {children}\n </Modal>\n\n}\n\nexport function ConfirmModal({\n title,\n children,\n onClose,\n onConfirm,\n isOpen,\n confirmText,\n zIndex=100\n }: {\n title?: string\n onClose: () => void,\n onConfirm: () => Promise<void>,\n isOpen: boolean,\n confirmText?: React.ReactNode,\n zIndex?:number\n} & PropsWithChildren) {\n const intl = useIntl()\n const [loading, setLoading] = useState(false)\n const [error, setError] = useState('')\n useEffect(() => {\n if (isOpen) {\n setError('')\n setLoading(false)\n }\n }, [isOpen]);\n const onSubmit = async () => {\n setError('')\n setLoading(true)\n try {\n await onConfirm()\n } catch (e: any) {\n setError(e.message)\n console.error(e)\n } finally {\n setLoading(false)\n }\n }\n\n return <ModalWithHeader isOpen={isOpen} onClose={onClose} title={title} zIndex={zIndex}>\n <div className=\"matchid-confirm-modal\">\n <div className=\"matchid-w-full\">{children}</div>\n {error && <div className={`matchid-error`}>{error}</div>}\n <Button size={\"lg\"} onClick={onSubmit} loading={loading} block highlight>{confirmText ?? intl.formatMessage({\n id:\"Confirm\"\n })}</Button>\n </div>\n </ModalWithHeader>\n}","import { useState ,useEffect} from \"react\";\n\nexport function useDownMd(): boolean {\n const [isBelowMd, setIsBelowMd] = useState(window.matchMedia('(max-width: 767px)').matches);\n\n useEffect(() => {\n const handleResize = () => {\n setIsBelowMd(window.matchMedia('(max-width: 767px)').matches);\n };\n\n window.addEventListener('resize', handleResize);\n return () => {\n window.removeEventListener('resize', handleResize);\n };\n }, []);\n\n return isBelowMd;\n}","import React, {PropsWithChildren, useEffect} from \"react\";\n\nexport default function Overlay({\n isOpen = false,\n children,\n zIndex = 100,\n }: {\n isOpen?: boolean\n zIndex?: number\n} & PropsWithChildren) {\n useEffect(() => {\n if (isOpen) {\n document.body.style.overflow = \"hidden\";\n } else {\n document.body.style.overflow = \"\";\n }\n\n return () => {\n document.body.style.overflow = \"\";\n };\n }, [isOpen]);\n return isOpen ? <div\n className=\"matchid-overlay\"\n style={{\n zIndex\n }}\n >\n {children}\n </div> : <></>\n}","import {useEffect, useMemo, useState} from \"react\";\nimport {isValidEmail} from \"utils\";\nimport Button from \"../../ui/Button\";\nimport Input from \"../../ui/Input\";\nimport Field from \"../../ui/Field\";\nimport {FormattedMessage, useIntl} from \"react-intl\";\n\nexport default function StepEmail(props: {\n email: string\n onContinue: (email: string) => void\n}) {\n const intl = useIntl()\n const [emailVal, setEmailVal] = useState('')\n useEffect(() => {\n if (props.email) {\n setEmailVal(props.email)\n }\n }, []);\n\n const canContinue = useMemo(() => {\n return isValidEmail(emailVal)\n }, [emailVal])\n\n const onContinue = async () => {\n props.onContinue(emailVal)\n }\n\n return <div className=\"matchid-email-email-box\">\n <Field label={intl.formatMessage({\n id:\"emailAddress\"\n })}>\n <Input\n placeholder={intl.formatMessage({\n id:\"emailAddressPlaceholder\"\n })}\n onChange={e => setEmailVal(e.target.value)}\n value={emailVal}\n />\n </Field>\n\n <Button disabled={!canContinue} style={{\n marginTop:\"64px\"\n }} onClick={onContinue} size={\"lg\"} block highlight><FormattedMessage id={\"continue\"}/></Button>\n\n </div>\n}\n","import {LoadingIcon} from \"assets/icon\";\nimport {ButtonProps} from \"../../types/types\";\n\nexport default function Button({\n size = \"df\",\n disabled = false,\n loading = false,\n children,\n onClick,\n highlight = false,\n block = false,\n type = \"button\",\n rounded = true,\n className = '',\n style = {},\n dataset = {}\n }: ButtonProps & { dataset?: { [key: string]: string } }) {\n\n const onAction = () => {\n if (!disabled && !loading) {\n onClick && onClick()\n }\n }\n return <button\n type={type}\n className={`${className} matchid-btn ${'matchid-btn-' + size} ${highlight ? \"matchid-btn-highlight\" : ''} ${loading ? \"matchid-btn-loading\" : ''} ${block ? \"matchid-btn-block\" : ''} ${rounded ? \"matchid-btn-rounded\" : ''}`}\n disabled={disabled || loading}\n style={{\n ...style\n }}\n onClick={onAction}\n {...dataset}\n >\n {\n loading ?\n <LoadingIcon className=\"matchid-btn-loading-icon\" color=\"var(--matchid-btn-loading-color)\"/> :\n children\n }\n </button>\n}","import {InputProps} from \"types/types\";\nimport {DeleteRoundIcon, CloseEyeIcon, OpenEyeIcon, InputLengthIcon} from \"assets/icon\";\nimport {PropsWithChildren, useEffect, useRef, useState} from \"react\";\nimport {useDownMd} from \"../../hooks/useLayout\";\n\nexport default function Input({\n onChange,\n type,\n after,\n showLength = false,\n showClear = true,\n className = '',\n rows = 1,\n maxRows = 4,\n children,\n ...props\n }: InputProps & PropsWithChildren) {\n const [inputType, setInputType] = useState(type)\n const isDownMd = useDownMd()\n const textareaRef = useRef<HTMLTextAreaElement>(null);\n useEffect(() => {\n const textarea = textareaRef.current;\n if (textarea) {\n textarea.style.height = 'auto';\n const lineHeight = 24;\n const maxHeight = lineHeight * 4;\n textarea.style.height = Math.min(textarea.scrollHeight, maxHeight) + 'px';\n }\n }, [props.value]);\n return <div\n className={`matchid-input-box matchid-input-${type} ${props.value && props.value.length > 0 ? 'matchid-input-has-content' : ''} ${className}`}\n style={{\n // @ts-ignore\n '--max-rows': maxRows\n }}\n >\n {children ?? (type == \"textarea\" ?\n <textarea rows={1} onChange={onChange} {...props} className=\"matchid-input-field\" ref={textareaRef} style={{\n maxHeight: maxRows * 24 + 'px'\n }}/> :\n <input type={inputType} onChange={onChange} {...props} className=\"matchid-input-field\"/>)}\n {\n type != \"textarea\" && showClear && props.value && props.value.length > 0\n && <div className=\"matchid-input-delete-icon\" onClick={(e) => {\n if (onChange) {\n onChange({target: {value: ''}});\n }\n }}>\n <DeleteRoundIcon height={isDownMd ? 16 : 21} width={isDownMd ? 16 : 20}\n color=\"var(--matchid-input-delete-icon-color)\"/>\n </div>\n }\n {\n type === 'password' && <div className=\"matchid-input-eye-icon\" onClick={() => {\n setInputType(inputType === 'password' ? 'text' : 'password')\n }}>\n {\n inputType === 'password' ? <CloseEyeIcon size={isDownMd ? 16 : 20}/> :\n <OpenEyeIcon size={isDownMd ? 16 : 20}/>\n }\n </div>\n }\n {\n showLength && props.maxLength && <div className={`matchid-input-length`}>\n <span>{props.value?.length || 0}/{props.maxLength}</span>\n <InputLengthIcon color={'var(--icon-color)'}/>\n </div>\n }\n {\n after\n }\n </div>\n\n}","import {PropsWithChildren, ReactNode} from \"react\";\n\nexport default function Field({\n label,\n children,\n error,\n required,\n className=''\n }:{\n label: ReactNode,\n error?: ReactNode,\n required?: boolean\n className?: string\n\n}&PropsWithChildren){\n return <div className={`matchid-field-box ${className}`}>\n <div className=\"matchid-field-label\">{required&&<span className={\"matchid-field-required\"}>*</span>}{label}</div>\n {children}\n {error && <div className=\"matchid-field-error\">{error}</div>}\n </div>\n\n}","import {create} from 'zustand';\nimport { devtools, persist } from 'zustand/middleware';\nimport {\n type IEnvConfigType,\n LocaleType,\n OverviewInfo,\n ThemeType,\n WalletAssetMergeType,\n WalletConfigType\n} from \"../types/types\";\nimport {getOverviewInfoApi} from \"../api\";\n\ninterface StoreState {\n appid:string\n token:string\n did:string\n mid:string\n theme:\"dark\"|\"light\"\n endpoints:IEnvConfigType['endpoints']\n\n setAppid: (appid: string) => void;\n setToken: (token: string) => void;\n setDid: (did: string) => void;\n setMid: (mid: string) => void;\n setEndpoints:(endpoints:IEnvConfigType['endpoints'])=>void\n\n logout: () => void;\n overview:OverviewInfo|null\n setOverview:(overview:OverviewInfo)=>void\n refreshOverview:()=>Promise<void>\n setTheme:(theme:\"dark\"|\"light\")=>void\n\n address:string\n setAddress:(address:string)=>void\n\n locale:LocaleType,\n setLocale:(locale:LocaleType)=>void\n\n wallet:WalletConfigType\n setWallet:(wallet:WalletConfigType)=>void\n\n chainId:number\n setChainId:(chainId:number)=>void\n\n assets:WalletAssetMergeType[]\n setAssets:(assets:WalletAssetMergeType[])=>void\n}\n\nconst persistedState = persist<StoreState>(\n set => ({\n appid: '',\n token:'',\n did:'',\n mid:'',\n overview:null,\n theme:'light',\n setOverview:(overview:OverviewInfo)=>set({\n overview,\n address:overview.address,\n did:overview.did,\n mid:overview.mid\n }),\n refreshOverview:async()=>{\n const res = await getOverviewInfoApi()\n if (res.data) {\n set({overview:res.data})\n set({address:res.data.address})\n set({did:res.data.did})\n set({mid:res.data.mid})\n }\n },\n endpoints:{\n back: \"https://api.matchid.ai/\",\n auth:\"https://auth.matchid.ai/\"\n },\n setDid: (did: string) => set({ did: did }),\n setToken: (token: string) => set({ token: token }),\n setAppid: (appid: string) => set({ appid: appid }),\n setMid: (mid: string) => set({ mid: mid }),\n logout: () => set({ token: '',did:'',mid:'',address:'',overview:null ,assets:[]}),\n setTheme:(theme:\"dark\"|\"light\")=>set({theme}),\n setEndpoints:(endpoints:IEnvConfigType['endpoints'])=>set({endpoints}),\n\n address:'',\n setAddress:(address:string)=>set({address}),\n\n locale:'en',\n setLocale:(locale:LocaleType)=>set({locale}),\n\n wallet:{\n type: \"UserPasscode\"\n },\n setWallet:(wallet:WalletConfigType)=>set({wallet}),\n\n chainId:698,\n setChainId:(chainId:number)=>set({chainId}),\n assets:[],\n setAssets:(assets:WalletAssetMergeType[])=>set({assets})\n\n\n }),\n { name: 'match-local' }\n);\n\nconst useLocalStore = create(devtools(persistedState));\n\nexport const localStore = useLocalStore;\n\nexport default useLocalStore;\n","import axios, {AxiosRequestConfig} from 'axios';\nimport {getAppid, getEndpoints, getLocale, getToken} from '../store';\nimport { localStore } from '../store/useLocalStore';\nimport matchlog from \"../utils/matchlog\";\nimport axiosRetry from \"axios-retry\";\n\nexport const SUCCESS_CODE = 0;\n\nexport const isSuccess = (res: { code: number; message: string; data?: any }) => {\n return res.code === SUCCESS_CODE;\n};\n\nexport interface MyResponseType<T> {\n code: number;\n data: T;\n message: string;\n success: boolean;\n fail: boolean;\n result: T;\n}\n\nconst instance = axios.create({\n timeout: 60000,\n validateStatus(status) {\n return status >= 200 && status <= 500;\n },\n});\n\n\n\nconst request = async <T = any>(config: AxiosRequestConfig): Promise<MyResponseType<T>> => {\n try {\n const endpoints = getEndpoints();\n const token = getToken()\n instance.defaults.baseURL = `${endpoints.back}`;\n\n instance.defaults.headers.common['Appid'] = getAppid()\n if(token){\n instance.defaults.headers.common['Authorization'] = token;\n }\n instance.defaults.headers.common['Accept-Language'] = getLocale()\n\n\n const {data} = await instance.request<MyResponseType<T>>(config);\n matchlog.log('api',data)\n if(data.code == 401001){\n localStore.getState().logout()\n throw new Error(\"Your session has expired, please log in again\")\n }\n // if (data.code !== 0) {\n // throw new Error(data.message);\n // }\n return data;\n } catch (err) {\n console.error('qwe-err', err);\n const message = 'Request Error';\n console.error(message);\n return {\n code: -1,\n data: null as any,\n message,\n success: false,\n fail: true,\n result: null as any,\n };\n }\n};\n\nconst retryInstance = axios.create({\n timeout: 60000,\n validateStatus(status) {\n return status >= 200 && status <= 500;\n },\n});\naxiosRetry(retryInstance, {\n retries: 3,\n retryDelay: (retryCount) => retryCount * 1000,\n shouldResetTimeout: true,\n retryCondition: (error) => {\n return (error!.response!.status >= 500 && error!.response!.status<600) || error.code === 'ECONNABORTED';\n },\n});\nexport const retryRequest = async <T = any>(config: AxiosRequestConfig): Promise<MyResponseType<T>> => {\n try {\n const endpoints = getEndpoints();\n const token = getToken()\n retryInstance.defaults.baseURL = `${endpoints.back}`;\n\n retryInstance.defaults.headers.common['Appid'] = getAppid()\n if(token){\n retryInstance.defaults.headers.common['Authorization'] = token;\n }\n retryInstance.defaults.headers.common['Accept-Language'] = getLocale()\n\n\n const {data} = await retryInstance.request<MyResponseType<T>>(config);\n matchlog.log('api',data)\n if(data.code == 401001){\n localStore.getState().logout()\n throw new Error(\"Your session has expired, please log in again\")\n }\n // if (data.code !== 0) {\n // throw new Error(data.message);\n // }\n return data;\n } catch (err) {\n console.error('qwe-err', err);\n const message = 'Request Error';\n console.error(message);\n return {\n code: -1,\n data: null as any,\n message,\n success: false,\n fail: true,\n result: null as any,\n };\n }\n};\n\nexport default request;","import type {IEnvConfigType} from \"../../types/types\";\n\nexport default {\n endpoints:{\n back: \"https://api.matchid.ai/\",\n auth:\"https://auth.matchid.ai/\"\n }\n} as IEnvConfigType","import { localStore } from './useLocalStore';\nimport DefaultEnv from '../config/env';\nexport const getEndpoints = ()=>{\n try {\n const store = localStore.getState();\n\n const env = store?.endpoints;\n\n if (env) {\n return env;\n } else {\n return DefaultEnv.endpoints\n }\n } catch (e) {\n return DefaultEnv.endpoints\n }\n}\n\nexport const getAppid = () => {\n try {\n const store = localStore.getState();\n const appid = store?.appid;\n if (appid) {\n return appid;\n } else {\n return '';\n }\n } catch (e) {\n return '';\n }\n}\n\nexport const getLocale = () => {\n try {\n const store = localStore.getState();\n const locale = store?.locale;\n if (locale) {\n return locale;\n } else {\n return 'en';\n }\n } catch (e) {\n return 'en';\n }\n}\nexport const getToken = () => {\n try {\n const store = localStore.getState();\n const token = store?.token;\n if (token) {\n return token;\n } else {\n return '';\n }\n } catch (e) {\n return '';\n }\n}","// src/utils/logger.ts\nconst matchDevExists = () => localStorage.getItem('matchid-sdk-react-debug') !== null;\n\nconst handler = {\n get(target: any, prop: string) {\n if (matchDevExists() && typeof target[prop] === 'function') {\n return target[prop].bind(console);\n }\n return () => {};\n }\n};\n\nconst matchlog = new Proxy(console, handler);\n\nexport default matchlog;","import request, {retryRequest} from \"./request\";\nimport {\n AppConfigType,\n BindInfoType,\n BindItemType,\n BindWalletParam,\n MetaPageType,\n OverviewInfo,\n PohItemType,\n PohZkpassParams,\n UserAssetToken,\n UserChainType,\n UserImportTokenType,\n UserTransactionNextPageParams,\n UserTransactionType,\n WalletAssetType,\n WalletChainType, WalletNFTType\n} from \"../types/types\";\n\nexport const getEmailCodeApi = (email: string) => {\n return request<any>({\n url: `/api/v1/email/code`,\n method: \"POST\",\n data: {email}\n });\n}\n\nexport const verifyEmailCodeApi = ({email, verification_key, verification_code}: {\n email: string,\n verification_key: string,\n verification_code: string\n}) => {\n return request<any>({\n url: `/api/v1/user/email/login`,\n method: \"POST\",\n data: {email, verification_key, verification_code}\n });\n}\n\n\nexport const getOverviewInfoApi = () => {\n return retryRequest<OverviewInfo>({\n url: `/api/v1/user/overview`,\n method: \"GET\",\n });\n}\nexport const toLogoutApi = () => {\n return retryRequest<any>({\n url: `/api/v1/user/logout`,\n method: \"POST\",\n });\n}\n\nexport const setUserNameApi = (data: any) => {\n return request({\n url: `/api/v1/user/name`,\n method: \"POSt\",\n data\n });\n}\n\nexport const getBindListApi = () => {\n return retryRequest<BindItemType[]>({\n url: `/api/v1/bind/list`,\n method: \"GET\",\n });\n}\n\nexport const getPohListApi = () => {\n return retryRequest<PohItemType[]>({\n url: `/api/v1/poh/list`,\n method: \"GET\",\n });\n}\n\nexport const getBindInfoApi = () => {\n return retryRequest<BindInfoType>({\n url: `/api/v1/bind`,\n method: \"GET\",\n });\n}\n\n\nexport const bindCexApi = (data: {\n cex: string,\n api_key: string,\n api_secret: string,\n api_passphrase?: string\n}) => {\n return request<any>({\n url: `/api/v1/cex/subscribe`,\n method: \"POST\",\n data\n });\n}\n\n\nexport const unBindApi = ({type}: { type: string }) => {\n return request<any>({\n url: `/api/v1/unbind`,\n method: \"POST\",\n data: {type}\n });\n}\n\nexport const unBindWalletApi = ({address}: { address: string }) => {\n return request<any>({\n url: `/api/v1/wallet/unbind`,\n method: \"POST\",\n data: {address}\n });\n}\n\nexport const verifyPohApi = ({\n taskId,\n schemaId,\n publicFields,\n allocatorAddress,\n publicFieldsHash,\n allocatorSignature,\n uHash,\n validatorAddress,\n validatorSignature\n }: PohZkpassParams) => {\n return request<any>({\n url: `/api/v1/poh/zkpass`,\n method: \"POST\",\n data: {\n taskId,\n schemaId,\n publicFields,\n allocatorAddress,\n publicFieldsHash,\n allocatorSignature,\n uHash,\n validatorAddress,\n validatorSignature\n }\n });\n}\n\nexport const chooseIdentityApi = ({identity}: { identity: string }) => {\n return request<any>({\n url: `/api/v1/user/choose/identity`,\n method: \"POST\",\n data: {identity}\n });\n}\n\nexport const mintPassportNftApi = () => {\n return request<any>({\n url: `/api/v1/mint/passport/nft`,\n method: \"POST\",\n });\n}\n\nexport const getAuthInfoApi = () => {\n return retryRequest<any>({\n url: `/api/v1/user/auth`,\n method: \"GET\",\n });\n}\n\nexport const getWalletNonceApi = (data: { address: string, type: string }) => {\n return retryRequest<any>({\n url: `/api/v1/login/wallet/init`,\n method: \"POST\",\n data: data\n });\n}\n\nexport const loginByWalletApi = ({\n type,\n address,\n signature,\n message,\n connector_type,\n wallet_client_type\n }: BindWalletParam) => {\n return request<any>({\n url: `/api/v1/login/wallet`,\n method: \"POST\",\n data: {type, address, signature, message, connector_type, wallet_client_type}\n });\n}\n\n\nexport const getWalletInitApi = (data: { address: string, type: string }) => {\n return retryRequest<any>({\n url: `/api/v1/wallet/init`,\n method: \"POST\",\n data,\n });\n}\n\nexport const toBindWalletApi = ({\n type,\n address,\n signature,\n message,\n connector_type,\n wallet_client_type\n }: BindWalletParam) => {\n return request<any>({\n url: `/api/v1/wallet/bind`,\n method: \"POST\",\n data: {type, address, signature, message, connector_type, wallet_client_type}\n });\n}\n\nexport const getAppConfigApi = () => {\n return retryRequest<AppConfigType>({\n url: `/api/v1/app/config`,\n method: \"GET\",\n });\n}\n\nexport const getUserChainListApi = () => {\n return request<UserChainType[]>({\n url: `/api/v1/user/chain/list`,\n method: \"GET\",\n });\n}\n\nexport const userImportTokenApi = (data: {\n chain_id: string,\n symbol: string,\n address: string,\n decimals: string,\n}) => {\n return request<any>({\n url: `/api/v1/user/import/token`,\n method: \"POST\",\n data\n });\n}\nexport const getUserImportTokenListApi = (data: {\n chain_id: string\n}) => {\n return request<UserImportTokenType[]>({\n url: `/api/v1/user/import/token/list`,\n method: \"POST\",\n data\n });\n}\n\nexport const getUserWalletAssetApi = (data: {\n chain_id: string\n}) => {\n return request<UserAssetToken[]>({\n url: `/api/v1/user/wallet/asset`,\n method: \"POST\",\n data\n });\n}\n\nexport const getUserWalletTransactionsApi = (data: {\n address?: string\n chain_id: string\n page?: string\n block_number?:number\n index?:number\n items_count?:number\n}) => {\n return request<{\n transactions: UserTransactionType[]\n next_page_params:UserTransactionNextPageParams\n }>({\n url: `/api/v1/user/wallet/transactions`,\n method: \"POST\",\n data\n });\n}\n\nexport const getWalletAssetListApi = (data: {\n chain_id: string\n address: string\n}) => {\n return request<{\n asset_list:WalletAssetType[]\n asset_total_balance:string\n }>({\n url: `/api/v1/wallet/asset`,\n method: \"POST\",\n data\n });\n}\n\nexport const getWalletListApi = (data: {\n page: number\n page_size: number\n}) => {\n return request<MetaPageType<{\n wallet_list:{\n address:string\n chain_network:string\n }[]\n mpc_address:string\n }>>({\n url: `/api/v1/wallet/list`,\n method: \"POST\",\n data\n });\n}\n\nexport const getWalletChainListApi = () => {\n return request<WalletChainType[]>({\n url: `/api/v1/wallet/chain`,\n method: \"POST\",\n });\n}\n\nexport const getWalletNftListApi = (data:{\n chain_id:string\n address:string\n})=>{\n return request<WalletNFTType[]>({\n url: `/api/v1/wallet/nfts`,\n method: \"POST\",\n data\n });\n}\n\nexport const tgAppLoginInitApi = ()=>{\n return retryRequest<{\n code:string\n login_url:string\n }>({\n url: `/api/v1/tgapp/login/init`,\n method: \"GET\",\n });\n}\n\nexport const getTgAppLoginStatus = (data:{\n code:string\n})=>{\n return retryRequest<{\n access_token:string\n token_type:string\n }>({\n url: `/api/v1/tgapp/login/status`,\n method: \"POST\",\n data\n });\n}\n\nexport const userInviteApi = (data:{\n invite_code:string\n})=>{\n return request<any>({\n url: `/api/v1/user/invite`,\n method: \"POST\",\n data\n });\n}\n","import useLocalStore from \"../store/useLocalStore\";\nimport { useMemo } from \"react\";\nimport { CEXType, ISocialLoginMethod, LoginMethodType } from \"../types/types\";\nimport {\n getAuthInfoApi,\n getEmailCodeApi,\n getOverviewInfoApi,\n tgAppLoginInitApi,\n toLogoutApi, userInviteApi,\n verifyEmailCodeApi\n} from \"../api\";\nimport { isSuccess } from \"../api/request\";\nimport { useMatch } from \"../MatchContext\";\nimport eventManager from \"./eventManager\";\nimport { encodeBase64, isInTgApp } from \"../utils\";\nimport matchlog from \"../utils/matchlog\";\nimport {\n useBTCModalStore,\n useCEXBindModalStore,\n useEVMModalStore,\n useTONModalStore,\n useTRONModalStore, useWalletModalStore\n} from \"../store/useModalStore\";\nimport { LOGIN_METHOD_MAP } from \"../config\";\nimport useStore from \"../store/useStore\";\nimport { useDownMd } from \"./useLayout\";\n\nexport default function useUserInfo() {\n const {\n appid,\n token,\n mid,\n did,\n logout: logoutStore,\n setOverview,\n overview,\n address,\n endpoints,\n locale,\n refreshOverview,\n } = useLocalStore();\n const { setTgAppAuthCode, emailLoginKey, setEmailLoginKey } = useStore()\n const isDownMd = useDownMd()\n const { events, login } = useMatch()\n const { open: EVMOpen } = useEVMModalStore()\n const { open: TRONOpen } = useTRONModalStore()\n const { open: TONOpen } = useTONModalStore()\n const { open: BTCOpen } = useBTCModalStore()\n const { open: CEXBindOpen } = useCEXBindModalStore()\n const walletModalStore = useWalletModalStore()\n\n const getRedirectUri = () => {\n return encodeURIComponent(window.location.href)\n }\n\n\n const isLogin = useMemo(() => !!token && !!overview, [token, overview])\n\n const logout = async () => {\n try {\n await toLogoutApi()\n } catch (err: any) {\n console.error('logout', err)\n }\n\n logoutStore()\n events && events!.onLogout && events!.onLogout()\n eventManager.emit('onLogout');\n }\n\n const loginByMethod = async (method: ISocialLoginMethod) => {\n const link = `${endpoints.back}api/v1/auth/${method == 'youtube' ? 'google' : method}?appid=${appid}&provider=${method == 'youtube' ? 'google' : method}&redirect=${encodeURIComponent(endpoints.auth + 'login/' + method)}&authorization=${new Date().getTime()}${method == \"youtube\" ? '&auth_type=youtube' : ''}`;\n matchlog.log('link', link)\n return window.open(\n link, // Replace with the actual authorization URL\n 'authWindow',\n 'width=800,height=600'\n );\n }\n\n const loginByTwitter = () => {\n return loginByMethod('twitter')\n }\n const loginByGoogle = () => {\n return loginByMethod('google')\n }\n\n const loginByWallet = async () => {\n // return EVMOpen('login')\n return window.open(`${endpoints.auth}login/wallet?appid=${appid}&locale=${locale}`)\n\n }\n const loginByTelegram = async () => {\n if (isInTgApp()) {\n //get auth code\n try {\n const res = await tgAppLoginInitApi()\n if (!isSuccess(res)) {\n throw new Error(res.message)\n }\n setTgAppAuthCode(res.data.code)\n const link = res.data.login_url + `?startapp=${res.data.code}_${appid}_${locale}`\n console.log('tgAppLoginInitLink', link)\n if (window.TelegramWebviewProxy) {\n console.log('in telegram webview')\n if (!window.Telegram) {\n throw new Error('Please import telegram-web-app.js first')\n }\n window.Telegram.WebApp.openTelegramLink(link)\n return\n }\n console.log('not in telegram webview')\n window.open(link)\n return\n\n\n } catch (e: any) {\n console.error('tgAppLoginInitApi', e)\n throw e\n }\n }\n\n return window.open(\n `${endpoints.auth}login/telegram?appid=${appid}&locale=${locale}`, // Replace with the actual authorization URL\n 'authWindow',\n 'width=800,height=600'\n );\n }\n\n const loginMethod = async (method: LoginMethodType | 'wallet', extra?: {\n [key: string]: any\n }) => {\n switch (method) {\n case \"wallet\":\n return walletModalStore.open(\"login\", extra?.methods)\n case \"evm\":\n return EVMOpen('login')\n // return window.open(`${endpoints.auth}login/wallet?appid=${appid}&locale=${locale}`)\n case \"sol\":\n if (isDownMd) {\n return window.location.href = `${endpoints.auth}login/sol?appid=${appid}&locale=${locale}&redirect_uri=${getRedirectUri()}`\n }\n return window.open(`${endpoints.auth}login/sol?appid=${appid}&locale=${locale}`)\n case \"tron\":\n return TRONOpen('login')\n case \"ton\":\n return TONOpen('login')\n case \"btc\":\n return BTCOpen('login')\n case \"telegram\":\n return await loginByTelegram()\n case \"youtube\":\n case \"twitter\":\n case \"google\":\n case \"discord\":\n case \"github\":\n case \"linkedin\":\n case \"kakao\":\n case \"facebook\":\n return await loginByMethod(method)\n default:\n throw new Error('unsupported method')\n\n }\n }\n\n\n const getLoginEmailCode = async (email: string) => {\n const res = await getEmailCodeApi(email);\n if (isSuccess(res)) {\n setEmailLoginKey(res.data.key)\n // window.sessionStorage.setItem('loginkey', res.data.key as string)\n return res.data.key as string\n }\n throw new Error(res.message)\n }\n\n const loginByEmail = async ({\n email,\n code\n }: { email: string, code: string }) => {\n try {\n const obj = {\n email: email,\n verification_key: emailLoginKey,\n verification_code: code,\n }\n const res = await verifyEmailCodeApi(obj);\n if (res && res.data && isSuccess(res)) {\n await login({\n // mid: res.data.mid,\n token: `${res.data.token_type} ${res.data.access_token}`\n })\n return true;\n\n } else {\n throw new Error(res.message)\n }\n } catch (error) {\n console.error('loginByEmail', error);\n throw error\n }\n return false\n };\n\n\n const bindWallet = async () => {\n if (!token) {\n throw new Error('You must login first')\n }\n return window.open(`${endpoints.auth}bind/wallet?appid=${appid}&locale=${locale}&st=` + encodeURIComponent(encodeBase64(token)))\n }\n\n const bindTelegram = async () => {\n if (!token) {\n throw new Error('You must login first')\n }\n const authWindow = window.open(\n `${endpoints.auth}bind/telegram?appid=${appid}&locale=${locale}&st=` + encodeURIComponent(encodeBase64(token)), // Replace with the actual authorization URL\n 'authWindow',\n 'width=800,height=600'\n );\n }\n\n const auth = async () => {\n const res = await getAuthInfoApi()\n if (isSuccess(res)) {\n return res.data\n }\n throw new Error(res.message)\n }\n\n const bind = async (method: LoginMethodType | 'wallet', extra?: {\n [key: string]: any\n }) => {\n if (!token) {\n throw new Error('You must login first')\n }\n switch (method) {\n case \"wallet\":\n return walletModalStore.open(\"bind\", extra?.methods)\n case \"evm\":\n return EVMOpen('bind')\n // return window.open(`${endpoints.auth}bind/wallet?appid=${appid}&locale=${locale}&st=` + encodeURIComponent(encodeBase64(token)))\n case \"sol\":\n if (isDownMd) {\n return window.location.href = `${endpoints.auth}bind/sol?appid=${appid}&locale=${locale}&st=${encodeURIComponent(encodeBase64(token))}&redirect_uri=${getRedirectUri()}`\n }\n return window.open(`${endpoints.auth}bind/sol?appid=${appid}&locale=${locale}&st=${encodeURIComponent(encodeBase64(token))}`)\n case \"tron\":\n return TRONOpen('bind')\n case \"ton\":\n return TONOpen('bind')\n case \"btc\":\n return BTCOpen('bind')\n case \"telegram\":\n return await bindTelegram()\n case \"twitter\":\n case \"google\":\n case \"discord\":\n case \"github\":\n case \"linkedin\":\n case \"facebook\":\n case \"youtube\":\n const link = `${endpoints.back}api/v1/auth/${method == 'youtube' ? 'google' : method}?appid=${appid}&provider=${method == 'youtube' ? 'google' : method}&redirect=${encodeURIComponent(endpoints.auth + 'bind/' + method)}&authorization=${token.includes(\"Bearer \") ? token.split(' ')[1] : token}${method == \"youtube\" ? '&auth_type=youtube' : ''}`;\n matchlog.log('link', link)\n return window.open(\n link,\n 'authWindow',\n 'width=800,height=600'\n );\n default:\n throw new Error('unsupported method')\n\n }\n }\n\n const bindCex = (type: CEXType) => {\n return CEXBindOpen(type)\n }\n\n const getAuthInfo = async (method: keyof typeof LOGIN_METHOD_MAP) => {\n // create a full screen iframe to get the auth info\n const element_id = 'auth_iframe'\n //if the iframe already exists, remove it\n if (document.getElementById(element_id)) {\n document.getElementById(element_id)!.remove()\n }\n const iframe = document.createElement('iframe')\n iframe.id = element_id\n iframe.src = `${endpoints.auth}auth?appid=${appid}&method=${method}&locale=${locale}&token=${encodeURIComponent(encodeBase64(token))}`\n iframe.style.width = '100vw'\n iframe.style.height = '100vh'\n iframe.style.position = 'fixed'\n iframe.style.top = '0'\n iframe.style.left = '0'\n iframe.style.zIndex = '9999'\n iframe.style.border = 'none'\n //@ts-ignore\n iframe.allowTransparency = 'true'\n document.body.appendChild(iframe)\n return new Promise((resolve, reject) => {\n const authMessageHandle = (event: MessageEvent) => {\n if (endpoints.auth.includes(event.origin)) {\n const res = event.data\n if (res.source == 'match-auth') {\n window.removeEventListener('message', authMessageHandle)\n if (res.status == 'success') {\n resolve({\n ...res.data,\n method: res.method,\n appid: res.appid,\n did\n })\n } else {\n reject(new Error(res.message))\n }\n\n iframe.remove()\n }\n }\n }\n window.addEventListener('message', authMessageHandle)\n })\n }\n\n const invite = async (invite_code: string) => {\n return await userInviteApi({\n invite_code\n })\n }\n\n\n return {\n loginByMethod,\n loginByTelegram,\n loginByTwitter,\n loginByGoogle,\n loginByWallet,\n loginByEmail,\n\n bindWallet,\n bindTelegram,\n\n\n token,\n mid,\n did,\n address,\n isLogin,\n logout,\n getLoginEmailCode,\n refreshOverview,\n overview,\n bindCex,\n username: overview?.username || '',\n auth,\n\n login: loginMethod,\n bind,\n\n getAuthInfo,\n invite\n }\n}","// src/MatchContext.tsx\nimport React, {createContext, useContext, ReactNode, useEffect} from 'react';\nimport Providers from './context';\nimport {IEnvConfigType, IMatchEvents, LocaleType, WalletConfigType} from \"./types/types\";\nimport useWalletInit from \"hooks/useWalletInit\"\nimport useInit from \"./hooks/useInit\";\nimport {QueryClient, QueryClientProvider} from '@tanstack/react-query';\nimport {IntlProvider} from 'react-intl';\nimport {messages} from \"./i18n\"\nimport {getDefaultConfig, RainbowKitProvider} from \"@rainbow-me/rainbowkit\";\nimport {\n bitgetWallet,\n injectedWallet,\n metaMaskWallet,\n okxWallet,\n walletConnectWallet\n} from \"@rainbow-me/rainbowkit/wallets\";\nimport {arbitrum, base, bsc, mainnet, optimism, polygon} from \"wagmi/chains\";\nimport {matchMain} from \"./config/chains/MatchMain\";\nimport {matchTest} from \"./config/chains/MatchTest\";\nimport {WagmiProvider} from \"wagmi\";\n\nconst queryClient = new QueryClient();\nexport const wagmiConfig = getDefaultConfig({\n appName: \"MatchID\",\n projectId: \"9ac6ea7e07860f04616fb311b447dee9\",\n wallets: [\n {\n groupName: \"Recommended\",\n wallets: [\n metaMaskWallet,\n walletConnectWallet,\n okxWallet,\n bitgetWallet,\n injectedWallet,\n ],\n },\n ],\n chains: [mainnet, polygon, optimism, arbitrum, base, matchMain, matchTest, bsc],\n});\ntype MatchContextType = {\n appid: string;\n events?: IMatchEvents;\n login: (data: { token: string }) => Promise<void>;\n theme: \"light\" | \"dark\";\n locale?: LocaleType\n} & Partial<IEnvConfigType>\n\nexport const MatchContext = createContext<MatchContextType | undefined>(undefined);\n\nexport const MatchProvider: React.FC<{\n children: ReactNode;\n appid: string;\n events?: IMatchEvents;\n theme?: \"light\" | \"dark\",\n endpoints?: IEnvConfigType['endpoints']\n locale?: LocaleType\n wallet: WalletConfigType\n}> = ({\n children,\n appid,\n events,\n theme = \"light\",\n endpoints,\n locale,\n wallet\n }) => {\n\n const {login, endpoints: realEndPoints, locale: realLocale} = useInit({\n theme,\n appid,\n events,\n endpoints,\n locale\n })\n\n // matchlog.log('config', {\n // appid,\n // events,\n // theme,\n // endpoints,\n // locale,\n // wallet\n // })\n //\n\n useWalletInit({\n config: wallet,\n })\n\n return (\n <IntlProvider locale={realLocale} messages={messages[realLocale]}>\n <WagmiProvider config={wagmiConfig}>\n <QueryClientProvider client={queryClient}>\n <MatchContext.Provider\n value={{\n appid,\n endpoints: realEndPoints,\n events,\n login,\n theme,\n locale: realLocale\n }}\n >\n <Providers>{children}</Providers>\n </MatchContext.Provider>\n </QueryClientProvider>\n </WagmiProvider>\n </IntlProvider>\n\n );\n};\n\nexport const useMatch = () => {\n const context = useContext(MatchContext);\n\n if (context === undefined) {\n throw new Error('useMatch must be used within a MatchProvider');\n }\n return context;\n};","export {default as useUserInfo} from \"./useUserInfo\";\nexport {default as useMatchEvents} from \"./useMatchEvents\";\nexport {default as useWallet} from \"./useWallet\";\nexport {default as useCopyClipboard} from \"./useCopyClipboard\"\nexport {useModal} from \"../context/ModalContext\";\nexport {useToast} from \"../context/ToastContext\";\nexport {default as useMatchChain} from \"./useMatchChain\";\nexport {\n default as useMatchWallet, useMatchWalletRecords, useMatchWalletAssets, useMatchWalletAssetList\n} from \"./useMatchWallet\";\nexport {default as useReceipt} from \"./useReceipt\";\nexport {default as useTransaction} from \"./useTransaction\";\nexport {default as useHash} from \"./useHash\";\nexport * as useLayout from \"./useLayout\";\n// export * as api from \"./api\";","// src/hooks/useMatchEvents.ts\nimport { useEffect } from \"react\";\nimport eventManager from \"./eventManager\";\nimport {IMatchEvents} from \"../types/types\";\n\n\nexport default function useMatchEvents(handlers: IMatchEvents) {\n useEffect(() => {\n Object.entries(handlers).forEach(([event, handler]) => {\n if (handler) {\n eventManager.on(event, handler);\n }\n });\n\n return () => {\n Object.entries(handlers).forEach(([event, handler]) => {\n if (handler) {\n eventManager.off(event, handler);\n }\n });\n };\n }, [handlers]);\n}\n","// src/hooks/eventManager.ts\ntype EventCallback = (...args: any[]) => void;\n\nclass EventManager {\n private listeners: Record<string, Set<EventCallback>> = {};\n\n on(event: string, callback: EventCallback) {\n if (!this.listeners[event]) {\n this.listeners[event] = new Set();\n }\n this.listeners[event].add(callback);\n }\n\n off(event: string, callback: EventCallback) {\n if (this.listeners[event]) {\n this.listeners[event].delete(callback);\n if (this.listeners[event].size === 0) {\n delete this.listeners[event];\n }\n }\n }\n\n emit(event: string, ...args: any[]) {\n if (this.listeners[event]) {\n this.listeners[event].forEach(callback => callback(...args));\n }\n }\n}\n\nconst eventManager = new EventManager();\n\nexport default eventManager;\n","import useLocalStore from \"../store/useLocalStore\";\nimport {getVersion} from \"../utils\";\nimport {\n Account, Chain, createPublicClient,\n encodeFunctionData,\n EncodeFunctionDataParameters,\n Hex, http,\n SignableMessage,\n TransactionSerializable,\n WalletClientConfig\n} from 'viem';\nimport useStore from \"../store/useStore\";\nimport {ChainType, RecoveryType} from \"../types/mpc\";\nimport {toAccount} from \"viem/accounts\";\nimport {createWalletClient} from \"viem\";\nimport {useEffect, useMemo, useState} from \"react\";\nimport {retryMessage} from \"../utils/wallet\";\nimport {Hash} from \"viem/types/misc\";\nimport {SendTransactionParameters, encodeDeployData, DeployContractParameters, WriteContractParameters} from \"viem\";\nimport type {Abi, Address} from \"abitype\";\nimport matchlog from \"../utils/matchlog\";\nimport {useModal} from \"../context/ModalContext\";\nimport {HashPanel} from \"../ui\";\nimport useTransactionStore from \"../store/useTransactionStore\";\n\ntype isRecoveredType = () => Promise<boolean>;\ntype signMessageType = (params: { message: SignableMessage, chainType?: ChainType }) => Promise<Hex>;\ntype signTransactionType = (params: {\n transaction: TransactionSerializable,\n chainType?: ChainType\n chain: {\n id: number,\n name: string,\n nativeCurrency: {\n name: string\n symbol: string\n decimals: number\n },\n rpcUrls: {\n [key: string]: any\n }\n }\n}) => Promise<`0x02${string}` | `0x01${string}` | `0x03${string}` | `0x04${string}` | import(\"viem\").TransactionSerializedLegacy>;\ntype SendTransactionReturnType = Hash\ntype SendTransactionParametersType = Omit<SendTransactionParameters, 'account'>\ntype SendTransactionType = (\n transaction: SendTransactionParametersType\n // chainType?: ChainType\n // chainId?: number\n) => Promise<SendTransactionReturnType>\ntype DeployContractReturnType = SendTransactionReturnType\ntype DeployContractType = <const abi extends Abi | readonly unknown[]>(\n parameters: DeployContractParameters<abi>\n) => Promise<DeployContractReturnType>;\ntype WriteContractParametersType = Omit<WriteContractParameters, 'account' | 'chain'> & {\n chain?: Chain\n}\ntype WriteContractReturnType = SendTransactionReturnType\ntype WriteContractType = (params: WriteContractParametersType) => Promise<WriteContractReturnType>\n\ninterface UseWalletReturnType {\n walletReady: boolean\n isRecovered: isRecoveredType\n signMessage: signMessageType\n signTransaction: signTransactionType\n address: string;\n evmAccount: Account | undefined;\n createWalletClient: (parameters: Omit<WalletClientConfig, 'account'>) => Omit<\n ReturnType<typeof createWalletClient>, 'sendTransaction' | 'deployContract' | 'writeContract'> &\n {\n sendTransaction: SendTransactionType,\n deployContract: DeployContractType\n writeContract: WriteContractType\n } | undefined\n // exportWallet:()=>Promise<void>\n}\n\nconst AppClientId = \"react-sdk-\" + getVersion()\n\nexport default function useWallet(): UseWalletReturnType {\n const {address, wallet: walletConfig} = useLocalStore();\n const {walletReady} = useStore()\n const modal = useModal()\n const {addTransaction} = useTransactionStore()\n\n const isRecovered: isRecoveredType = async () => {\n const res = await window.matchProvider.waitUntilWalletMessage({\n method: 'isRecovered'\n })\n return res.isRecovered\n }\n\n const signMessage: signMessageType = async ({\n message,\n chainType = ChainType.Ethereum\n }) => {\n try {\n const res = await window.matchProvider.waitUntilWalletMessage({\n method: 'signMessage',\n data: {\n message,\n chainType\n }\n })\n\n return res.message\n } catch (error: any) {\n console.error('sdk.wallet.message', error)\n throw error\n }\n\n }\n\n const signTransaction: signTransactionType = async ({\n transaction,\n chainType = ChainType.Ethereum,\n chain\n }) => {\n try {\n const res = await window.matchProvider.waitUntilWalletMessage({\n method: 'signTransaction',\n data: {\n transaction,\n chainType,\n chain\n }\n })\n return res.message\n } catch (error: any) {\n console.error('sdk.wallet.transaction', error)\n throw error\n }\n }\n\n const evmAccount = useMemo(() => {\n try{\n return address ? toAccount({\n address: address as `0x${string}`,\n async signMessage({message}) {\n return await signMessage({\n message,\n chainType: ChainType.Ethereum\n })\n },\n async signTransaction(transaction, options) {\n //@ts-ignore\n const {account, chain, ...restTransaction} = transaction;\n console.log('qwe-sign-transaction', restTransaction, options)\n return await signTransaction({\n transaction: {\n ...restTransaction as TransactionSerializable,\n },\n chainType: ChainType.Ethereum,\n chain: {\n id: chain?.id || restTransaction.chainId,\n name: chain?.name,\n nativeCurrency: {\n name: chain?.nativeCurrency?.name || 'ETH',\n symbol: chain?.nativeCurrency?.symbol || 'ETH',\n decimals: chain?.nativeCurrency?.decimals || 18,\n },\n rpcUrls: chain?.rpcUrls\n }\n })\n },\n async signTypedData(typedData) {\n return '0x'\n },\n }) : undefined\n }catch(error){\n console.error(`qwe-evm-account-error ${address}`,error)\n return undefined\n }\n\n }, [address])\n\n\n useEffect(() => {\n matchlog.log('qwe-evmAccount', evmAccount)\n }, [evmAccount]);\n\n\n // const exportWallet = async ()=>{\n // await window.matchProvider.waitUntilWalletMessage({\n // method: 'exportWallet',\n // data: {\n // address\n // }\n // })\n // }\n\n const realCreateWalletClient = (parameters: Omit<WalletClientConfig, 'account'>) => {\n if (!evmAccount) {\n return\n }\n // if ('chain' in parameters) {\n // retryMessage({\n // method: 'addChain',\n // data: {\n // chain: parameters.chain,\n // create: true\n // }\n // })\n // }\n\n const obj = createWalletClient({\n ...parameters,\n account: evmAccount as Account\n })\n const sendTransaction: SendTransactionType = async (transaction) => {\n\n\n const {chain, ...restTransaction} = transaction\n const chainId = chain ? chain.id : await obj.getChainId()\n const _chain = chain || obj.chain\n const transactionId = Date.now().toString() + Math.random().toString().slice(6)\n //prepare transaction\n window.matchProvider.transactionMessageIntervalMap[transactionId] = {\n transaction,\n func: async () => {\n try {\n const {\n chain,\n account,\n ...prepareTransactionRequest\n // @ts-ignore\n } = await obj.prepareTransactionRequest(window.matchProvider.transactionMessageIntervalMap[transactionId].transaction)\n\n window.matchProvider.sendWalletMessage({\n method: 'prepareTransactionRequest',\n data: {\n prepareTransactionRequest,\n transactionId,\n }\n })\n } catch (error) {\n console.error(error)\n }\n\n },\n interval: setInterval(() => {\n window.matchProvider.transactionMessageIntervalMap[transactionId].func()\n }, 10000)\n }\n\n try {\n\n const {\n chain,\n account,\n ...prepareTransactionRequest\n // @ts-ignore\n } = await obj.prepareTransactionRequest(transaction)\n const {serializedTransaction} = await window.matchProvider.waitUntilWalletMessage({\n method: 'sendTransaction',\n data: {\n transactionId,\n transaction: {\n ...restTransaction\n },\n chainType: ChainType.Ethereum,\n chain: {\n id: chainId,\n name: _chain?.name,\n nativeCurrency: _chain?.nativeCurrency,\n rpcUrls: _chain?.rpcUrls\n },\n prepareTransactionRequest\n }\n })\n //send transaction\n try{\n const txHash = await obj.sendRawTransaction({\n serializedTransaction\n })\n addTransaction({\n chainId:chainId,\n hash:txHash,\n info:{\n from:evmAccount.address,\n to:restTransaction.to as Address,\n value:(restTransaction.value||0).toString(),\n input:restTransaction.data as Hash,\n timestamp:Math.floor(Date.now()/1000).toString(),\n hash:txHash,\n source:'local',\n },\n address:evmAccount.address\n\n })\n\n modal.show((props)=>{\n return <HashPanel isOpen onClose={props.close} zIndex={props.zIndex} hash={txHash} chain={_chain}/>\n })\n\n return txHash\n }catch(error:any){\n modal.show((props)=>{\n return <HashPanel isOpen onClose={props.close} zIndex={props.zIndex} error={typeof error=='string'?error :(error.details||error.message)} chain={_chain}/>\n })\n throw error\n }\n\n\n } catch (error: any) {\n console.error('matchid-send-error', error)\n\n throw error\n }finally {\n clearInterval(window.matchProvider.transactionMessageIntervalMap[transactionId].interval)\n delete window.matchProvider.transactionMessageIntervalMap[transactionId]\n }\n\n }\n\n const deployContract: DeployContractType = async <const abi extends Abi | readonly unknown[]>(parameters: DeployContractParameters<abi>) => {\n const {abi, args, bytecode, ...request} =\n parameters as DeployContractParameters\n const calldata = encodeDeployData({abi, args, bytecode});\n return await sendTransaction({\n\n ...request,\n data: calldata,\n\n } as SendTransactionParametersType);\n\n };\n\n const writeContract: WriteContractType = async (parameters) => {\n const {abi, address, args, dataSuffix, functionName, ...request} =\n parameters as WriteContractParameters\n const data = encodeFunctionData({\n abi,\n args,\n functionName,\n } as EncodeFunctionDataParameters)\n return await sendTransaction({\n data: `${data}${dataSuffix ? dataSuffix.replace('0x', '') : ''}`,\n to: address,\n ...request,\n } as SendTransactionParametersType)\n }\n\n return {\n ...obj,\n sendTransaction,\n deployContract,\n writeContract,\n }\n }\n return {\n walletReady,\n evmAccount,\n address,\n signMessage,\n signTransaction,\n isRecovered,\n createWalletClient: realCreateWalletClient,\n // exportWallet\n };\n}\n","import {create} from 'zustand';\n\ninterface StoreState {\n walletReady: boolean\n setWalletReady: (inited: boolean) => void,\n tgAppAuthCode: string\n setTgAppAuthCode: (code: string) => void,\n emailLoginKey: string\n setEmailLoginKey: (key: string) => void,\n\n}\n\nconst useStore = create<StoreState>(set => ({\n walletReady: false,\n setWalletReady: (inited) => set({walletReady: inited}),\n tgAppAuthCode: '',\n setTgAppAuthCode: (code) => set({tgAppAuthCode: code}),\n emailLoginKey: '',\n setEmailLoginKey: (key) => set({emailLoginKey: key}),\n}));\n\nexport default useStore;\n","import React, {useState, useCallback, createContext, useContext, ReactNode, useEffect, useRef} from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { ModalDrawer } from \"ui\";\n\ninterface ModalProps {\n close: () => void;\n zIndex: number;\n}\n\ninterface ModalContextType {\n show: (content: React.FC<ModalProps>, index?: number) => void;\n open: (props: {\n title: ReactNode,\n content: React.ComponentType<{ close: () => void, zIndex: number }>,\n index?: number\n }) => void;\n}\n\ninterface ModalState {\n modals: Array<{\n visible: boolean;\n index: number;\n zIndex: number;\n content: React.FC<ModalProps>;\n close: () => void;\n }>;\n highestZIndex: number;\n}\n\nconst ModalContext = createContext<ModalContextType | null>(null);\n\nexport function ModalProvider({ children }: { children: ReactNode }) {\n const [modalState, setModalState] = useState<ModalState>({\n modals: [],\n highestZIndex: 100,\n });\n const highestIndexRef = useRef(100); // 记录当前的最高 index\n\n const getNextIndex = useCallback(() => {\n highestIndexRef.current += 1;\n return highestIndexRef.current;\n }, []);\n\n\n const closeModal = useCallback((index: number) => {\n // console.log(\"closeModal\", index);\n setModalState(prevState => ({\n modals: prevState.modals.filter(modal => modal.index !== index),\n highestZIndex: prevState.highestZIndex,\n }));\n }, []);\n\n // useEffect(() => {\n // console.log(\"modalState\", modalState);\n // }, [modalState]);\n\n const show = useCallback((content: React.FC<ModalProps>, index?: number) => {\n setModalState(prevState => {\n const modalIndex = index ?? getNextIndex();\n const newZIndex = prevState.highestZIndex + 1;\n return {\n modals: [...prevState.modals, {\n visible: true,\n index: modalIndex,\n zIndex: newZIndex,\n content: content,\n close: () => closeModal(modalIndex),\n }],\n highestZIndex: newZIndex,\n };\n });\n }, [getNextIndex, closeModal]);\n\n const open = useCallback((props: {\n title: ReactNode;\n content: React.ComponentType<{ close: () => void, zIndex: number }>;\n index?: number;\n onBack?: () => void;\n }) => {\n setModalState(prevState => {\n const modalIndex = props.index ?? getNextIndex();\n const newZIndex = prevState.highestZIndex + 1;\n return {\n modals: [...prevState.modals, {\n visible: true,\n index: modalIndex,\n zIndex: newZIndex,\n close: () => closeModal(modalIndex),\n content: ({ close, zIndex }) => <ModalDrawer showClose isOpen onClose={close} title={props.title} zIndex={zIndex} onBack={props.onBack}>\n <props.content close={close} zIndex={zIndex} />\n </ModalDrawer>,\n }],\n highestZIndex: newZIndex,\n };\n });\n }, [getNextIndex, closeModal]);\n\n const modalElements = modalState.modals.map(modal =>\n modal.visible ? (\n createPortal(\n <modal.content key={modal.index} zIndex={modal.zIndex} close={modal.close} />,\n document.body\n )\n ) : null\n )\n\n\n return (\n <ModalContext.Provider value={{ show, open }}>\n {children}\n {modalElements}\n </ModalContext.Provider>\n );\n}\n\nexport function useModal(): ModalContextType {\n const context = useContext(ModalContext);\n if (!context) {\n throw new Error(\"useModal must be used within a ModalProvider\");\n }\n return context;\n}\n","export {default as Button} from './Button';\nexport {default as Drawer} from './Drawer';\nexport {default as Field} from './Field';\nexport {default as HashPanel} from './HashPanel';\nexport {default as Input} from './Input';\nexport {default as Modal, ModalWithHeader,ConfirmModal} from './Modal';\nexport {default as ModalDrawer} from './ModalDrawer';\nexport {default as Overlay} from './Overlay';\nexport {default as Popover} from './Popover';\nexport {default as Switch} from './Switch';\nexport {default as AlphaAvatar} from './AlphaAvatar';\nexport {default as Radio} from './Radio';\nexport {default as Skeleton} from \"./Skeleton\"\nexport {default as Tabs} from \"./Tabs\"\nexport {default as Lottie} from \"./Lottie\"\nexport {default as Checkbox} from \"./Checkbox\"","import React, {PropsWithChildren} from \"react\";\nimport Overlay from \"../Overlay\";\nimport {CloseRoundIcon} from \"assets/icon\";\nimport {DrawerProps} from \"../../types\";\nimport ArrowLeftIcon from \"../../assets/icon/ArrowLeftIcon\";\n\nexport default function Drawer({\n children,\n showClose = true,\n onClose,\n isOpen = false,\n title,\n zIndex = 100,\n onBack\n }: DrawerProps) {\n\n if (!isOpen) {\n return <></>\n }\n\n\n return <Overlay isOpen={isOpen} zIndex={zIndex}>\n <div className={\"matchid-drawer\"}>\n <div className={`matchid-drawer-header matchid-flex`}>\n <div className={`matchid-drawer-header-content matchid-flex`}>\n {onBack && <ArrowLeftIcon height={25} width={24} className=\"matchid-drawer-header-back\" onClick={onBack}/>}\n {title}\n </div>\n {\n showClose && <CloseRoundIcon className={\"matchid-drawer-header-close\"} onClick={onClose}/>\n }\n </div>\n\n {children}\n </div>\n </Overlay>\n}","import {\n Hash,\n Chain,\n} from \"viem\";\nimport {useEffect, useState} from \"react\";\nimport ModalDrawer from \"../ModalDrawer\";\nimport Button from \"../Button\";\nimport {Lottie} from \"../../ui\";\nimport {successImg, failImg, confirmImg,pendingImg} from \"assets/lottie\";\nimport useHash from \"../../hooks/useHash\";\n\ntype statusType = 'pending' | 'success' | 'fail' | 'confirm'\ntype HashPanelProps = {\n hash?: Hash | null,\n chain?: Chain | null,\n isOpen: boolean,\n onClose: () => void\n zIndex?: number,\n error?: string\n}\n\nfunction HashPanel({\n hash,\n chain,\n isOpen,\n onClose,\n zIndex,\n error\n }: HashPanelProps) {\n const [status, setStatus] = useState<statusType>('confirm')\n\n const statusMaps: Record<statusType, {\n text: string;\n color: string\n lottie?: any\n }> = {\n 'confirm': {\n text: 'Confirming...',\n color: '#FC802D',\n lottie: confirmImg\n },\n 'pending': {\n lottie: pendingImg,\n text: 'Pending...',\n color: '#FC802D'\n },\n 'success': {\n text: 'Successful!',\n color: '#2CBF68',\n lottie: successImg\n },\n 'fail': {\n text: 'Failed!',\n color: '#F14141',\n lottie: failImg\n }\n }\n\n const statusValue = error ? statusMaps.fail : statusMaps[status]\n const [shouldRefetch, setShouldRefetch] = useState(true)\n\n useEffect(() => {\n if (hash) {\n setShouldRefetch(true)\n setStatus('pending')\n } else {\n setStatus('confirm')\n }\n }, [hash])\n const hashQuery = useHash({\n hash,\n chain,\n refetchInterval: shouldRefetch ? 3000 : false\n })\n useEffect(() => {\n if (hashQuery.data == 1 || hashQuery.data == -1) {\n setShouldRefetch(false)\n }\n if (hashQuery.data == 1) {\n setStatus('success')\n } else if (hashQuery.data == -1) {\n setStatus('fail')\n } else if (hashQuery.data == 0) {\n setStatus('pending')\n }\n }, [hashQuery.data]);\n\n const link = chain ? `${chain?.blockExplorers?.default.url}/tx/${hash}` : '';\n\n return <ModalDrawer isOpen={isOpen}\n showClose\n onClose={onClose}\n zIndex={zIndex}\n title={\n <div className={\"matchid-hashpanel-header\"}\n style={{\n color: statusValue.color\n }}>{statusValue.text}</div>\n }\n >\n <div className=\"matchid-hashpanel-box\">\n <div className=\"matchid-hashpanel-content\">\n <div className={`matchid-hashpanel-status`} style={{\n color: statusValue.color\n }}>{statusValue.text}</div>\n {\n statusValue.lottie && <Lottie animationData={statusValue.lottie} style={{\n width: \"96px\",\n height: \"96px\",\n }}/>\n }\n\n {hash && <div className=\"matchid-hashpanel-hash\">\n Hash:<a href={link} target=\"_blank\">{hash}</a>\n </div>}\n {error && <div className=\"matchid-hashpanel-text\">\n {error}\n </div>}\n </div>\n <Button onClick={onClose} size=\"lg\" block>Back</Button>\n </div>\n </ModalDrawer>\n}\n\nexport default function (props: HashPanelProps) {\n return props.isOpen && <HashPanel {...props}/>\n\n}","import {useDownMd} from \"hooks/useLayout\";\nimport {ModalWithHeader} from \"../Modal\";\nimport Drawer from \"../Drawer\";\nimport {WalletPanelProps} from \"../../types\";\n\nexport default function ModalDrawer({\n title,\n drawerTitleVisible=true,\n ...props}:WalletPanelProps){\n\n const isDownMd = useDownMd()\n if(isDownMd){\n return <ModalWithHeader {...props} title={title}/>\n }\n return <Drawer {...props} title={drawerTitleVisible ? title : null}/>\n}","import {useQuery} from \"@tanstack/react-query\";\nimport {Chain, createPublicClient, http} from \"viem\";\nimport matchlog from \"../utils/matchlog\";\n\nexport default function useHash({\n hash,\n chain,\n refetchInterval,\n enabled=true\n }:{\n hash?: `0x${string}` | null,\n chain?: Chain | null,\n refetchInterval?:false|number\n enabled?:boolean\n}){\n return useQuery(\n {\n queryKey: ['txhash', hash, chain],\n queryFn: async () => {\n if (!chain || !hash) return false\n const publicClient = createPublicClient({\n chain,\n transport: http(),\n });\n try {\n const receipt = await publicClient.getTransactionReceipt({hash});\n\n if (!receipt) {\n return 0\n }\n matchlog.log('getTransactionReceipt', receipt)\n if (receipt.status === 'success') {\n return 1\n }\n return -1\n\n } catch (error) {\n console.error('getTransactionReceiptError', error)\n }\n return -99\n },\n enabled: !!chain && !!hash && enabled,\n refetchInterval,\n // refetchIntervalInBackground: false\n }\n );\n}","import {useState} from \"react\";\nimport {PopoverProps} from \"../../types/types\";\n\nexport default function Popover({\n children,\n content,\n position = \"right\",\n type = \"hover\",\n className = \"\",\n gap = '20px'\n }: PopoverProps) {\n const [active, setActive] = useState(false)\n return children && <div\n onClick={() => {\n if (type == 'click') {\n setActive(!active)\n }\n }}\n className={`matchid-popover-box matchid-popover-${position} matchid-popover-${type} ${className} ${type == 'click' && active ? 'matchid-popover-click-active' : ''}`}>\n {children}\n <div style={{\n paddingTop: gap\n }} className={`matchid-popover-area`}>\n <div className={`matchid-popover-content`}>\n {content}\n </div>\n </div>\n </div>\n\n}","import {UIProps} from \"../../types\";\nimport {LoadingIcon} from \"../../assets/icon\";\n\nexport default function Switch({\n size=\"default\",\n checked=false,\n loading=false,\n onChange,\n className,\n disabled=false,\n ...props\n }:{\n size?:\"default\"|\"sm\",\n checked?:boolean,\n loading?:boolean,\n disabled?:boolean,\n onChange?:(checked:boolean)=>void,\n}&UIProps){\n const onClick = ()=>{\n if(!disabled && !loading){\n onChange && onChange(!checked)\n }\n }\n return <div onClick={onClick} className={`matchid-switch matchid-switch-${size} ${checked ? \"matchid-switch-checked\":\"\"} ${disabled ? \"matchid-switch-disabled\":\"\"} ${loading ? \"matchid-switch-loading\":\"\"}`} {...props}>\n\n {\n loading ?\n <LoadingIcon className=\"matchid-switch-loading-icon\" size={size==\"default\"?24:18} color=\"var(--matchid-swicth-loading-color)\"/> :\n <div className={\"matchid-switch-ball\"}></div>\n }\n </div>\n}","import { useMemo} from \"react\";\nimport {UIProps} from \"../../types\";\n\nexport default function AlphaAvatar({\n name,\n size = \"default\", className = '',style}: {\n name: string,\n size?: number|\"sm\"|\"default\"|\"lg\",\n}&UIProps) {\n\n const avatar = useMemo(()=>{\n if (name) {\n const char = name[0].toUpperCase()\n if (char.match(/[a-zA-Z0-9]/)) {\n return char\n }\n }\n return ''\n },[name])\n\n const numberSize = typeof size === 'number' ? size : size === 'sm' ? 24 : size === 'default' ? 40 : 64\n return <div className={`matchid-alpha-avatar ${className}`} style={{\n width: numberSize,\n height: numberSize,\n fontSize: Math.ceil(numberSize / 2),\n ...style\n }}>\n {avatar}\n </div>\n}","import {CSSProperties} from \"react\";\n\nexport default function Radio({\n checked = false,\n onChange,\n size = 24,\n color = \"#FC802D\",\n className = \"\",\n style = {}\n }: {\n checked?: boolean,\n onChange?: () => void\n size?: number,\n color?: string,\n className?: string,\n style?: CSSProperties\n}) {\n return <div onClick={onChange} className={`matchid-radio ${className} ${checked ? 'matchid-radio-checked' :''}`} style={{\n width: size,\n height: size,\n ...style,\n // @ts-ignore\n '--matchid-radio-checked': color\n }}>\n {checked && <div className={`matchid-radio-content`} style={{\n width:Math.floor(size*0.7),\n height:Math.floor(size*0.7),\n }}></div>}\n </div>\n}","import React from \"react\";\n\ninterface SkeletonProps {\n style?: React.CSSProperties;\n className?: string;\n width?: string | number;\n height?: string | number;\n radius?: string | number;\n loading?: boolean;\n children?: React.ReactNode;\n}\n\nconst Skeleton: React.FC<SkeletonProps> = ({\n style={},\n className=\"\",\n width = 40,\n height = 40,\n radius = 5,\n loading = true,\n children,\n }) => {\n if (!loading) {\n return <>{children}</>;\n }\n\n const skeletonStyle: React.CSSProperties = {\n width,\n height,\n borderRadius: radius,\n ...style,\n };\n\n return (\n <div\n className={\"matchid-skeleton \"+className}\n style={skeletonStyle}\n ></div>\n );\n};\n\nexport default Skeleton;","type TabsProps = {\n tabs: string[]\n activeTab: number\n setActiveTab: (tab: number) => void\n}\nexport default function Tabs(props:TabsProps){\n\n return <div className={`matchid-tabs`}>\n {props.tabs.map((tab, index) => {\n return <div key={index} onClick={() => props.setActiveTab(index)} className={`matchid-tab ${props.activeTab === index ? \"matchid-tab-active\" : \"\"}`}>\n {tab}\n </div>\n })}\n\n </div>\n}","import { useEffect, useState } from \"react\";\nimport {LottieComponentProps, useLottie} from \"lottie-react\";\n\nconst LazyLottie = (props: {\n animationData: any;\n style?: React.CSSProperties;\n}) => {\n const options = {\n animationData: props.animationData,\n loop: true,\n autoplay: true,\n };\n\n const { View } = useLottie(options, props.style);\n\n return View;\n};\n\nexport default LazyLottie;","import {CheckboxCheckedIcon,CheckboxIcon} from \"../../assets/icon\";\n\nexport default function Checkbox({\n checked=false,\n onChange\n }:{\n checked?:boolean,\n onChange?:(checked:boolean)=>void\n}){\n return checked ? <CheckboxCheckedIcon onClick={()=>onChange?.(false)}/> : <CheckboxIcon onClick={()=>onChange?.(true)}/>\n}","import {create} from 'zustand';\nimport {devtools, persist} from 'zustand/middleware';\nimport {Address, AnyObject, Hash} from \"../types\";\n\nexport interface TransactionInfo {\n from: Address;\n hash: Hash;\n input: Hash;\n timestamp: string;\n to: Address;\n value: string;\n source:\"local\"\n extra?:AnyObject\n}\n\ninterface TransactionStore {\n transactions: Record<string, TransactionInfo[]>;\n\n\n addTransaction: (data: { chainId: number;address:Address; hash: string; info: TransactionInfo }) => void;\n\n removeTransaction: (data: { chainId: number;address:Address; hash: string }) => void;\n}\n\nconst persistedState = persist<TransactionStore>(\n (set, get) => ({\n transactions: {},\n\n addTransaction: (data) => {\n set((state) => {\n const updatedTransactions = {\n ...state.transactions,\n [`${data.chainId}-${data.address}`]: [data.info,...(state.transactions[`${data.chainId}-${data.address}`] || [])],\n };\n return {transactions: updatedTransactions};\n });\n },\n removeTransaction: (data) => {\n set((state) => {\n const updatedTransactions = {\n ...state.transactions,\n [`${data.chainId}-${data.address}`]: (state.transactions[`${data.chainId}-${data.address}`] || [])\n .filter((tx) => tx.hash !== data.hash)\n };\n return {transactions: updatedTransactions};\n });\n },\n }),\n {name: 'match-transactions-local'}\n);\n\nconst useTransactionStore = create(devtools(persistedState));\n\nexport default useTransactionStore;\n","import copy from 'copy-to-clipboard'\nimport { useCallback, useEffect, useState } from 'react'\n\nexport default function useCopyClipboard(timeout = 500): [boolean, (toCopy: string) => void] {\n const [isCopied, setIsCopied] = useState(false)\n\n const staticCopy = useCallback((text: string) => {\n const didCopy = copy(text)\n setIsCopied(didCopy)\n }, [])\n\n useEffect(() => {\n if (isCopied) {\n const hide = setTimeout(() => {\n setIsCopied(false)\n }, timeout)\n\n return () => {\n clearTimeout(hide)\n }\n }\n return undefined\n }, [isCopied, setIsCopied, timeout])\n\n return [isCopied, staticCopy]\n}\n","import { useState, useCallback, createContext, useContext, ReactNode, useEffect } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport {CheckRoundIcon, ErrorRoundIcon} from \"assets/icon\";\n\ninterface ToastContextType {\n show: (options: { icon?: ReactNode; timeout?: number; text: ReactNode }) => void;\n success: (text: ReactNode, timeout?: number) => void;\n error: (text: ReactNode, timeout?: number) => void;\n}\n\nconst ToastContext = createContext<ToastContextType | null>(null);\n\nexport function ToastProvider({ children,zIndex=299 }: { children: ReactNode,zIndex?:number }) {\n const [toasts, setToasts] = useState<{ id: number; icon?: ReactNode; text: ReactNode }[]>([]);\n\n const removeToast = useCallback((id: number) => {\n setToasts((prev) => prev.filter((toast) => toast.id !== id));\n }, []);\n\n const show = useCallback(({ icon, timeout = 3000, text }: { icon?: ReactNode; timeout?: number; text: ReactNode }) => {\n const id = Date.now()+Math.random();\n setToasts((prev) => [...prev, { id, icon, text }]);\n setTimeout(() => removeToast(id), timeout);\n }, [removeToast]);\n\n const success = useCallback((text: ReactNode, timeout?: number) => {\n show({ icon: <CheckRoundIcon color={\"#2FCC00\"} size={24}/>, text, timeout });\n }, [show]);\n\n const error = useCallback((text: ReactNode, timeout?: number) => {\n show({ icon: <ErrorRoundIcon size={24}/>, text, timeout });\n }, [show]);\n\n const ToastComponent = createPortal(\n <div className=\"matchid-toast-box\" style={{\n zIndex\n }}>\n {toasts.reverse().map(({ id, icon, text }) => (\n <div\n key={id}\n className=\"matchid-toast\"\n >\n {icon && <span>{icon}</span>}\n <span>{text}</span>\n </div>\n ))}\n </div>,\n document.body\n );\n\n return (\n <ToastContext.Provider value={{ show, success, error }}>\n {children}\n {ToastComponent}\n </ToastContext.Provider>\n );\n}\n\nexport function useToast(): ToastContextType {\n const context = useContext(ToastContext);\n if (!context) {\n throw new Error(\"useToast must be used within a ToastProvider\");\n }\n return context;\n}\n","import {useQuery} from \"@tanstack/react-query\";\nimport {\n getUserChainListApi,\n getUserImportTokenListApi,\n getUserWalletAssetApi, getWalletAssetListApi, getWalletChainListApi, getWalletNftListApi,\n} from \"../../api\";\nimport {isSuccess} from \"../../api/request\";\nimport type {UseQueryOptions} from \"@tanstack/react-query/src/types\";\nimport {\n UserAssetToken,\n UserChainType,\n UserImportTokenType,\n UserTransactionType, WalletAssetType,\n WalletChainType,\n WalletNFTType\n} from \"../../types\";\nimport useUserInfo from \"../useUserInfo\";\n\nexport {userImportTokenApi, getUserWalletTransactionsApi, getWalletAssetListApi, getWalletListApi} from \"../../api\"\n\nexport function useChainListQuery(options?: Partial<Omit<UseQueryOptions<UserChainType[]>, 'queryKey' | 'queryFn'>>) {\n const {isLogin, token} = useUserInfo()\n return useQuery({\n queryKey: [\"match-user-chain-list\", token],\n queryFn: async () => {\n const res = await getUserChainListApi()\n if (!isSuccess(res)) {\n return []\n }\n return res.data\n },\n enabled: isLogin,\n ...options\n })\n\n}\n\n\nexport function useAssetListQuery({\n chainId,\n ...options\n }: {\n chainId: number\n} & Partial<Omit<UseQueryOptions<UserAssetToken[]>, 'queryKey' | 'queryFn'>>) {\n const {isLogin, token} = useUserInfo()\n return useQuery({\n queryKey: [\"match-user-asset-list\", token, chainId],\n queryFn: async () => {\n const res = await getUserWalletAssetApi({chain_id: chainId.toString()})\n if (!isSuccess(res)) {\n return []\n }\n return res.data || []\n },\n enabled: isLogin,\n ...options\n })\n}\nexport const USER_IMPORT_TOKEN_LIST_KEY = \"match-user-import-token-list\"\nexport function useImportTokenListQuery({\n chainId,\n ...options\n }: {\n chainId: number\n} & Partial<Omit<UseQueryOptions<UserImportTokenType[]>, 'queryKey' | 'queryFn'>>) {\n const {isLogin, token} = useUserInfo()\n return useQuery({\n queryKey: [USER_IMPORT_TOKEN_LIST_KEY, token, chainId],\n queryFn: async () => {\n const res = await getUserImportTokenListApi({chain_id: chainId.toString()})\n if (!isSuccess(res)) {\n return []\n }\n return res.data || []\n },\n enabled: isLogin,\n ...options\n })\n}\n\nexport function useWalletChainListQuery(options?: Partial<Omit<UseQueryOptions<WalletChainType[]>, 'queryKey' | 'queryFn'>>) {\n const {isLogin, token} = useUserInfo()\n return useQuery({\n queryKey: [\"match-wallet-chain-list\", token],\n queryFn: async () => {\n const res = await getWalletChainListApi()\n if (!isSuccess(res)) {\n return []\n }\n return res.data\n },\n enabled: isLogin,\n ...options\n })\n\n}\n\nexport function useWalletNftListQuery({\n chainId,\n address,\n ...options\n }: {\n chainId: string,\n address: string\n} & Partial<Omit<UseQueryOptions<WalletNFTType[]>, 'queryKey' | 'queryFn'>>) {\n const {isLogin, token} = useUserInfo()\n return useQuery({\n queryKey: [\"match-wallet-nft-list\", token, chainId, address],\n queryFn: async () => {\n const res = await getWalletNftListApi({\n chain_id: chainId.toString(),\n address\n })\n if (!isSuccess(res)) {\n return []\n }\n return res.data\n },\n enabled: isLogin,\n ...options\n })\n\n}\n\nexport function useWalletAssetListQuery({\n chainId,\n address,\n ...options\n }: {\n chainId: string,\n address: string\n} & Partial<Omit<UseQueryOptions<{\n asset_list:WalletAssetType[]\n asset_total_balance:string\n}|null>, 'queryKey' | 'queryFn'>>) {\n const {isLogin, token} = useUserInfo()\n return useQuery({\n queryKey: [\"match-wallet-asset-list\", token, chainId, address],\n queryFn: async () => {\n const res = await getWalletAssetListApi({\n chain_id: chainId,\n address\n })\n if (!isSuccess(res)) {\n return null\n }\n return res.data\n },\n enabled: isLogin,\n ...options\n })\n\n}","import {useChainListQuery} from \"./api/wallet\";\nimport useLocalStore from \"../store/useLocalStore\";\nimport {useMemo, useState} from \"react\";\nimport {useModal} from \"../context/ModalContext\";\nimport {Button, Radio} from \"../ui\";\nimport {createPublicClient, formatUnits, http, parseUnits} from \"viem\";\nimport {useDownMd} from \"./useLayout\";\nimport {FormattedMessage, useIntl} from \"react-intl\";\n\nexport default function useMatchChain() {\n const chainListQuery = useChainListQuery()\n const modal = useModal()\n const intl = useIntl()\n const {chainId: storeChainId, setChainId} = useLocalStore()\n const chainId = useMemo(() => {\n if (!chainListQuery.data || !chainListQuery.data.length) {\n return null\n }\n if (chainListQuery.data.find((item) => item.id === storeChainId)) {\n return storeChainId\n }\n return chainListQuery.data[0].id\n }, [storeChainId, chainListQuery.data])\n\n const chain = useMemo(() => {\n if (!chainListQuery.data || !chainListQuery.data.length) {\n return null\n }\n return chainListQuery.data.find((item) => item.id === chainId)\n }, [chainId, chainListQuery.data])\n\n const explorerLink = (url: string) => {\n const explorer = chain?.blockExplorers.default.url as string\n return explorer.lastIndexOf('/') === explorer.length - 1 ? explorer + url : explorer + '/' + url\n }\n\n function ChangeNetwork({\n close,\n }: {\n close: () => void\n }) {\n const {chainId: storeChainId, setChainId} = useLocalStore()\n const [selectedChainId, setSelectedChainId] = useState(storeChainId)\n const isDownMd = useDownMd()\n return <div className={`matchid-change-network-box`}>\n <div className={`matchid-change-network-list`}>\n {\n chainListQuery.data?.map((item, index) => {\n return <div key={index} onClick={() => setSelectedChainId(item.id)}\n className={`matchid-change-network-item ${selectedChainId == item.id ? 'matchid-change-network-selected' : ''}`}>\n <div className={`matchid-change-network-item-content`}>\n <img src={item.iconUrl} className={`matchid-change-network-item-icon`}/>\n <span className={\"matchid-change-network-item-name\"}>{item.name}</span>\n </div>\n <Radio checked={selectedChainId === item.id} size={isDownMd ? 18 :24}/>\n </div>\n })\n }\n </div>\n <Button size={\"lg\"} highlight onClick={() => {\n setChainId(selectedChainId || 0)\n close()\n }} block><FormattedMessage id={\"confirm\"}/></Button>\n </div>\n }\n\n const showChangeNetwork = () => {\n modal.open({\n title: intl.formatMessage({id: 'changeNetwork'}),\n content: ChangeNetwork\n })\n }\n\n const publicClient = useMemo(() => {\n if (!chain) {\n return null\n }\n return createPublicClient({\n chain,\n transport:http()\n })\n }, [chain])\n\n return {\n list: chainListQuery.data,\n chainId,\n setChainId,\n chain,\n explorerLink,\n showChangeNetwork,\n publicClient,\n formatUnits: (value: bigint) => {\n return formatUnits(value, chain?.nativeCurrency.decimals || 18)\n },\n parseUnits: (value: string) => {\n return parseUnits(value, chain?.nativeCurrency.decimals || 18)\n }\n }\n}","import {useModal} from \"../context/ModalContext\";\nimport {useCopyClipboard, useMatchChain, useToast, useUserInfo, useWallet} from \"./index\";\nimport {Button, TokenSendList} from \"components\";\nimport {QRCode} from \"react-qrcode\";\nimport {useEffect, useMemo, useRef, useState} from \"react\";\nimport {\n Address,\n useMatchWalletAssetsProps,\n UserAssetToken,\n UserImportTokenType, UserTransactionNextPageParams, UserTransactionRecordType,\n UserTransactionType,\n WalletAssetMergeType\n} from \"../types\";\nimport {getUserWalletTransactionsApi, userImportTokenApi} from \"../api\";\nimport {isSuccess} from \"../api/request\";\nimport {Field, Input} from \"../ui\";\nimport {Abi} from \"abitype\";\nimport {useAssetListQuery, useImportTokenListQuery, USER_IMPORT_TOKEN_LIST_KEY} from \"./api/wallet\";\nimport {useQuery, useQueryClient} from \"@tanstack/react-query\";\nimport {NATIVE_TOKEN_ADDRESS} from \"../config\";\nimport {erc20Abi, formatUnits} from \"viem\";\nimport useLocalStore from \"../store/useLocalStore\";\nimport useContractStore, {ContractInfo} from \"../store/useContractStore\";\nimport useTransactionStore from \"../store/useTransactionStore\";\nimport {FormattedMessage, useIntl} from \"react-intl\";\nimport ImportToken from \"../components/ImportToken\";\n\nconst ReceiveModal = () => {\n const chain = useMatchChain()\n const {address} = useWallet();\n const [copied, setCopied] = useCopyClipboard();\n const toast = useToast()\n const intl = useIntl()\n\n const onCopy = () => {\n setCopied(address)\n toast.success(intl.formatMessage({\n id: \"copied\"\n }))\n }\n\n const chainLink = chain.explorerLink(\"address/\" + address)\n return <div className={`matchid-receive-modal`}>\n <div className={\"matchid-receive-container\"}>\n <div className={`matchid-receive-text`}><FormattedMessage id={\"receiveQrcode\"}/></div>\n <div className={`matchid-qr-container`}>\n <QRCode margin=\"0\"\n className={`matchid-qr-code`}\n value={address}/>\n </div>\n <a href={chainLink} target=\"_blank\"\n className={`matchid-receive-link`}>\n {address}\n </a>\n </div>\n <Button size={\"lg\"} onClick={onCopy} block highlight disabled={copied}><FormattedMessage\n id={\"copyAddress\"}/></Button>\n </div>\n\n}\nexport default function useMatchWallet() {\n const modal = useModal()\n const intl = useIntl()\n const showReceiveModal = () => {\n modal.open({\n title: intl.formatMessage({\n id: \"receive\"\n }),\n content: ReceiveModal\n })\n }\n\n const showImportTokenModal = () => {\n modal.open({\n title: intl.formatMessage({\n id: \"customizedToken\"\n }),\n content: ImportToken\n })\n }\n\n const showSendListModal = () => {\n modal.open({\n title: intl.formatMessage({\n id: \"send\"\n }),\n content: TokenSendList\n })\n }\n\n return {\n showReceiveModal,\n showImportTokenModal,\n showSendListModal\n }\n}\n\nexport function useMatchWalletRecords() {\n const [hasMore, setHasMore] = useState(true);\n const [items, setItems] = useState<UserTransactionType[]>([])\n const {chainId, publicClient} = useMatchChain()\n const {address} = useWallet()\n const hasMoreRef = useRef(hasMore)\n const nextPageParamsRef = useRef<UserTransactionNextPageParams | undefined>(undefined)\n const {contracts, setContracts} = useContractStore()\n\n const fetchMoreData = async () => {\n const chainIdStr = chainId ? chainId.toString() : \"\"\n\n if (!hasMoreRef.current || !chainIdStr) {\n return\n }\n const res = await getUserWalletTransactionsApi({\n chain_id: chainIdStr,\n ...nextPageParamsRef.current,\n })\n if (isSuccess(res)) {\n if (res.data && res.data.transactions && res.data.transactions.length > 0) {\n setItems(items.concat(res.data.transactions || []));\n }\n hasMoreRef.current = res.data && res.data.transactions && res.data.transactions.length >= 50\n setHasMore(hasMoreRef.current)\n nextPageParamsRef.current = res.data?.next_page_params\n }\n };\n const onInit = async () => {\n nextPageParamsRef.current = undefined\n setItems([])\n setHasMore(true)\n hasMoreRef.current = true\n fetchMoreData()\n }\n useEffect(() => {\n if (chainId && address) {\n onInit()\n }\n }, [chainId, address]);\n\n const {transactions, removeTransaction} = useTransactionStore()\n const getContractInfoList = async(contractList:string[])=>{\n const contractUnique = Array.from(new Set(contractList)).filter(item => {\n const contract = contracts[`${chainId}-${item.toLowerCase()}`]\n if (!contract) {\n return true\n }\n if (!contract.symbol && !contract.name) {\n return true\n }\n if (!contract.decimals) {\n return true\n }\n return false\n })\n const calls = []\n for (const contract of contractUnique) {\n calls.push({\n address: contract as `0x${string}`,\n abi: erc20Abi,\n functionName: \"symbol\",\n args: []\n })\n calls.push({\n address: contract as `0x${string}`,\n abi: erc20Abi,\n functionName: \"decimals\",\n args: []\n })\n }\n const results = await publicClient?.multicall({contracts: calls});\n if (results) {\n console.log('contract results', calls, results)\n const contractMap = []\n for (let i = 0; i < contractUnique.length; i++) {\n const info: ContractInfo = {}\n if (results[i * 2].status == 'success') {\n info.symbol = results[i * 2].result as string\n }\n if (results[i * 2 + 1].status == 'success') {\n info.decimals = results[i * 2 + 1].result as number\n }\n // if(results[i * 3 + 2].status == 'success'){\n // info.name = results[i * 3 + 2].result as string\n // }\n\n contractMap.push({\n chainId: chainId || 0,\n contractAddress: contractUnique[i],\n info\n })\n }\n setContracts(contractMap)\n }\n }\n const list = useMemo(() => {\n const localTransactions = transactions[`${chainId}-${address}`] || []\n const removeList = localTransactions.filter(n => items.findIndex(m => m.hash == n.hash) >= 0);\n removeList.forEach(item => {\n removeTransaction({\n chainId: chainId || 0,\n hash: item.hash,\n address: address as Address\n })\n })\n const saveList = localTransactions.filter(n => items.findIndex(m => m.hash == n.hash) < 0);\n const list = [\n ...saveList,\n ...items\n ].sort((a, b) => {\n const btimestamp = typeof b.timestamp === 'string' ? parseInt(b.timestamp) : b.timestamp\n const atimestamp = typeof a.timestamp === 'string' ? parseInt(a.timestamp) : a.timestamp\n return btimestamp - atimestamp\n })\n const contractList = list.filter(item => item.input.toLowerCase().substring(0, 10) == '0xa9059cbb')\n .map(item => item.to)\n getContractInfoList(contractList)\n return list\n }, [transactions, chainId, items, address])\n\n\n return {\n items: list,\n fetchMoreData,\n hasMore\n }\n}\n\n\nexport function useMatchWalletAssets({\n importTokenOptions,\n assetListOptions\n }: useMatchWalletAssetsProps = {}) {\n const {chainId, chain} = useMatchChain();\n\n\n const importTokenQuery = useImportTokenListQuery({\n chainId: chainId || 0,\n ...importTokenOptions\n });\n\n const assetListQuery = useAssetListQuery({\n chainId: chainId || 0,\n ...assetListOptions\n });\n\n const mergedAssets = useMemo(() => {\n if (!assetListQuery.data && !importTokenQuery.data) return [];\n\n const assetList = (assetListQuery.data || []).map(asset => ({\n ...asset,\n isAuto: true\n }));\n\n const importTokens = (importTokenQuery.data || []).map(token => ({\n ...token,\n isCustom: true\n }));\n\n const assetMap = new Map();\n assetList.forEach(asset => {\n const key = `${asset.chain_id}-${asset.address.toLowerCase()}`;\n assetMap.set(key, asset);\n });\n\n importTokens.forEach(token => {\n const key = `${token.chain_id}-${token.address.toLowerCase()}`;\n if (assetMap.has(key)) {\n const existing = assetMap.get(key);\n assetMap.set(key, {\n ...existing,\n symbol: token.symbol,\n decimals: token.decimals,\n isCustom: true,\n isAuto: existing.isAuto ?? false\n });\n } else {\n assetMap.set(key, token);\n }\n });\n\n const list = Array.from(assetMap.values()).sort((a, b) => {\n return (b.isAuto ? 1 : 0) - (a.isAuto ? 1 : 0);\n });\n //check native token exist\n const nativeToken = list.find(asset => asset.address.toLowerCase() === NATIVE_TOKEN_ADDRESS.toLowerCase());\n if (!nativeToken) {\n list.unshift({\n chain_id: chain?.id.toString() || '',\n address: NATIVE_TOKEN_ADDRESS,\n decimals: chain?.nativeCurrency.decimals||18,\n symbol: chain?.nativeCurrency.symbol,\n name: chain?.nativeCurrency.name,\n balance: 0,\n icon: chain?.nativeCurrency.icon\n });\n }\n return list\n }, [assetListQuery.data, importTokenQuery.data]);\n\n return {\n importTokenQuery,\n assetListQuery,\n mergedAssets\n };\n}\n\n\nconst MULTICALL_LIMIT = 100;\n\nexport function useMatchWalletAssetList({\n list\n }: {\n list: WalletAssetMergeType[]\n}) {\n const {publicClient, chain} = useMatchChain();\n const {address} = useWallet()\n const {assets, setAssets} = useLocalStore()\n\n // Filter out the native token\n const nativeToken = list.find(asset => asset.address.toLowerCase() === NATIVE_TOKEN_ADDRESS.toLowerCase()) || {\n chain_id: chain?.id || '',\n address: NATIVE_TOKEN_ADDRESS,\n decimals: 18,\n symbol: chain?.nativeCurrency.symbol,\n name: chain?.nativeCurrency.name,\n balance: 0,\n }\n\n // 1. Query the native token balance\n const nativeBalanceQuery = useQuery({\n queryKey: ['nativeBalance', nativeToken?.chain_id],\n queryFn: async () => {\n if (!nativeToken || !publicClient) return null;\n try {\n return await publicClient.getBalance({\n address: address as `0x${string}`,\n });\n } catch (error) {\n console.error('Native Token Balance Error:', error);\n return null;\n }\n },\n enabled: !!nativeToken && !!publicClient,\n refetchInterval: 15000, // Refresh every 15 seconds\n retry: 3 // Retry up to 3 times if failed\n });\n\n // 2. Filter out ERC20 tokens that require multiCall queries\n const erc20Tokens = useMemo(() => list.filter(asset => asset.address !== NATIVE_TOKEN_ADDRESS), [list]);\n\n // 3. Execute multiCall to query ERC20 balances\n const erc20BalanceQuery = useQuery({\n queryKey: ['erc20Balances', erc20Tokens.map(token => token.address)],\n queryFn: async () => {\n if (!erc20Tokens.length || !publicClient) return [];\n\n const calls = erc20Tokens.map(token => (\n {\n address: token.address as `0x${string}`,\n abi: erc20Abi as Abi,\n functionName: \"balanceOf\",\n args: [address as `0x${string}`]\n }\n ));\n\n let balances = [];\n for (let i = 0; i < calls.length; i += MULTICALL_LIMIT) {\n const batchCalls = calls.slice(i, i + MULTICALL_LIMIT);\n try {\n const results = await publicClient.multicall({contracts: batchCalls});\n balances.push(...results);\n } catch (error) {\n console.error('MultiCall Error:', error);\n }\n }\n\n return balances;\n },\n enabled: !!publicClient,\n refetchInterval: 15000, // Refresh every 15 seconds\n retry: 3\n });\n\n\n // 4. Compute the holding value for isAuto=true tokens\n const enrichedAssets = useMemo(() => {\n if (!list) return [];\n\n const erc20Balances = erc20BalanceQuery.data || [];\n return list.map(asset => {\n let balanceValue = \"0\";\n\n let balance = 0;\n const decimals = typeof asset.decimals === 'string' ? parseInt(asset.decimals) : asset.decimals;\n const assetAddress = asset.address.toLowerCase();\n // Native token balance\n if (assetAddress === NATIVE_TOKEN_ADDRESS) {\n balanceValue = nativeBalanceQuery.data?.toString() || \"0\";\n balance = nativeBalanceQuery.data ? Number(formatUnits(nativeBalanceQuery.data, decimals)) : 0;\n }\n // ERC20 balance\n else {\n const index = erc20Tokens.findIndex(t => t.address.toLowerCase() === assetAddress);\n if (index !== -1 && erc20Balances[index] && erc20Balances[index].status === 'success') {\n balance = Number(formatUnits(erc20Balances[index].result as bigint, decimals));\n balanceValue = (erc20Balances[index].result as bigint)?.toString() || \"0\";\n }\n }\n\n // Calculate the holding value\n const value = asset.isAuto ? (balance * (asset.price || 0)) : 0;\n\n return {...asset, balance, value, balanceValue};\n });\n }, [list, nativeBalanceQuery.data, erc20BalanceQuery.data]);\n\n // 5. Sorting rules:\n useEffect(() => {\n const list = enrichedAssets.sort((a, b) => {\n // ① Native token is always at the top\n if (a.address === NATIVE_TOKEN_ADDRESS) return -1;\n if (b.address === NATIVE_TOKEN_ADDRESS) return 1;\n\n // ② Tokens with isAuto=true and non-zero balance are sorted by holding value in descending order\n if (a.isAuto && b.isAuto) return b.value - a.value;\n if (a.isAuto) return -1;\n if (b.isAuto) return 1;\n\n // ③ Tokens with isCustom=true and non-zero balance retain their original order\n if (a.isCustom && !a.isAuto && a.balance > 0) return -1;\n if (b.isCustom && !b.isAuto && b.balance > 0) return 1;\n\n // ④ Other tokens retain their original order\n return 0;\n });\n setAssets(list)\n }, [enrichedAssets]);\n\n return {\n list: assets,\n isLoading: nativeBalanceQuery.isLoading || erc20BalanceQuery.isLoading,\n isFetched: nativeBalanceQuery.isFetched && erc20BalanceQuery.isFetched,\n nativeBalanceQuery,\n erc20BalanceQuery,\n nativeBalance: nativeBalanceQuery.data,\n erc20Balances: erc20BalanceQuery.data\n };\n}\n","export const EMAIL_INTERVAL = 60\nexport const EMAIL_CODE_LENGTH = 6\nexport const LOGIN_METHOD_MAP = {\n email: 'Email',\n evm: \"EVM\",\n sol: \"SOL\",\n btc: \"BTC\",\n ton: \"TON\",\n tron: \"TRON\",\n google: \"Google\",\n facebook: \"Facebook\",\n x: \"X\",\n telegram: \"Telegram\",\n github: \"Github\",\n discord: \"Discord\",\n linkedin: \"LinkedIn\",\n youtube: \"Youtube\",\n}\n\nexport const NATIVE_TOKEN_ADDRESS = '0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee';\n\nexport const TERMS_OF_SERVICE_URL = 'https://docs.google.com/document/d/1QbagOOBhi50niC2mn4pJAd9pyNlvm1MSwcKWuP9YB80/edit?usp=sharing';\nexport const PRIVACY_POLICY_URL = 'https://docs.google.com/document/d/1YOUUOmNXbA7qy79YckxhPMLWBj_WDiUp6mkJPNq_XCk/edit?usp=sharing';\n","import { create } from 'zustand';\nimport { devtools, persist } from 'zustand/middleware';\nexport interface ContractInfo {\n symbol?: string;\n decimals?: number;\n name?:string\n}\n\ninterface ContractStore {\n contracts: Record<string, ContractInfo>;\n\n getContract: (chainId: number, contractAddress: string) => ContractInfo | undefined;\n\n setContractSymbol: (chainId: number, contractAddress: string, symbol: string) => void;\n\n setContractDecimals: (chainId: number, contractAddress: string, decimals: number) => void;\n\n setContractName: (chainId: number, contractAddress: string, name: string) => void;\n\n setContracts: (data: { chainId: number; contractAddress: string; info: ContractInfo }[]) => void;\n}\n\nconst persistedState = persist<ContractStore>(\n (set, get) => ({\n contracts: {},\n\n getContract: (chainId, contractAddress) => {\n const key = `${chainId}-${contractAddress.toLowerCase()}`;\n return get().contracts[key];\n },\n\n setContractName: (chainId, contractAddress, name) => {\n const key = `${chainId}-${contractAddress.toLowerCase()}`;\n set((state) => {\n const updatedContracts = {\n ...state.contracts,\n [key]: { ...state.contracts[key], name },\n };\n return { contracts: updatedContracts };\n });\n },\n\n setContractSymbol: (chainId, contractAddress, symbol) => {\n const key = `${chainId}-${contractAddress.toLowerCase()}`;\n set((state) => {\n const updatedContracts = {\n ...state.contracts,\n [key]: { ...state.contracts[key], symbol },\n };\n return { contracts: updatedContracts };\n });\n },\n\n setContractDecimals: (chainId, contractAddress, decimals) => {\n const key = `${chainId}-${contractAddress.toLowerCase()}`;\n set((state) => {\n const updatedContracts = {\n ...state.contracts,\n [key]: { ...state.contracts[key], decimals },\n };\n return { contracts: updatedContracts };\n });\n },\n\n setContracts: (data) => {\n set((state) => {\n const newContracts = { ...state.contracts };\n data.forEach(({ chainId, contractAddress, info }) => {\n const key = `${chainId}-${contractAddress.toLowerCase()}`;\n newContracts[key] = { ...newContracts[key], ...info };\n });\n return { contracts: newContracts };\n });\n },\n }),\n { name: 'match-contract-local' }\n);\n\nconst useContractStore = create(devtools(persistedState));\n\nexport default useContractStore;\n","import {useMatchChain, useToast, useUserInfo} from \"../../hooks\";\nimport {useEffect, useMemo, useState} from \"react\";\nimport {Abi} from \"abitype\";\nimport {FormattedMessage, useIntl} from \"react-intl\";\nimport {useQueryClient} from \"@tanstack/react-query\";\nimport {userImportTokenApi} from \"../../api\";\nimport {isSuccess} from \"../../api/request\";\nimport {USER_IMPORT_TOKEN_LIST_KEY} from \"../../hooks/api/wallet\";\nimport {Field, Input} from \"../../ui\";\nimport {Button} from \"../index\";\nimport {defineChain, erc20Abi} from \"viem\";\nimport useIsContract from \"../../hooks/useIsContract\";\nimport {Lottie} from \"../../ui\";\nimport {successImg, failImg} from \"assets/lottie\";\n\nexport default function ImportToken ({close}: {\n close: () => void\n}) {\n const [status,setStatus] = useState<''|'success'|'fail'>('')\n const {token} = useUserInfo()\n const [address, setAddress] = useState(\"\")\n const [symbol, setSymbol] = useState(\"\")\n const [decimals, setDecimals] = useState(\"\")\n const [error, setError] = useState<{\n address?: string,\n symbol?: string,\n decimals?: string\n }>({})\n const {publicClient, chainId,chain} = useMatchChain()\n const getContractInfo = async () => {\n if (!publicClient) return;\n\n const calls = [\n {\n address: address as `0x${string}`,\n abi: erc20Abi as Abi,\n functionName: \"symbol\",\n args: []\n },\n {\n address: address as `0x${string}`,\n abi: erc20Abi as Abi,\n functionName: \"decimals\",\n args: []\n },\n\n ];\n try {\n const results = await publicClient.multicall({contracts: calls});\n console.log('results', results)\n\n if (!symbol && results[0]?.status == 'success') {\n setSymbol(results[0]?.result as string)\n }\n if (!decimals && results[1]?.status == 'success') {\n setDecimals((results[1]?.result as number).toString())\n }\n } catch (error: any) {\n setError({\n address: error.message\n })\n }\n\n }\n const intl = useIntl()\n useEffect(() => {\n if (address.length === 42) {\n const reg = /^0x[0-9a-fA-F]{40}$/;\n if (!reg.test(address)) {\n setError({\n ...error,\n address: intl.formatMessage({\n id: \"tokenAddressError\"\n })\n })\n } else {\n setError({\n ...error,\n address: \"\"\n })\n publicClient && getContractInfo()\n }\n }\n }, [address, publicClient]);\n const [loading, setLoading] = useState(false)\n const toast = useToast()\n const queryClient = useQueryClient();\n\n const onImport = async () => {\n setLoading(true)\n try {\n const res = await userImportTokenApi({\n chain_id: chainId?.toString() || '',\n symbol,\n address,\n decimals\n })\n if (isSuccess(res)) {\n // toast.success(intl.formatMessage({\n // id: \"importSuccess\"\n // }))\n setStatus('success')\n queryClient.invalidateQueries({\n queryKey: [USER_IMPORT_TOKEN_LIST_KEY, token, chainId]\n })\n // close()\n } else {\n setStatus('fail')\n toast.error(res.message)\n }\n } catch (error: any) {\n setStatus('fail')\n toast.error(error.message)\n } finally {\n setLoading(false)\n }\n\n }\n\n const canImport = useMemo(() => {\n if (!address) {\n return false\n }\n if (!symbol) {\n return false\n }\n if (decimals.length === 0) {\n return false\n }\n const reg = /^0x[0-9a-fA-F]{40}$/;\n if (!reg.test(address)) {\n return false\n }\n return true;\n }, [error, address, symbol, decimals])\n\n const isContractQuery = useIsContract({\n //@ts-ignore\n chain:defineChain(chain),\n address,\n enabled:canImport\n })\n\n if(status=='success'||status=='fail'){\n return <div className={`matchid-import-token-result matchid-flex`}>\n <div className={`matchid-import-token-result-box matchid-flex`}>\n <div className={`matchid-import-token-result-img`}>\n <Lottie animationData={status=='success'?successImg:failImg} style={{\n width: \"96px\",\n height: \"96px\",\n }} />\n </div>\n <div className={`matchid-import-token-result-text matchid-import-token-result-text-${status}`}>\n {status=='success'?<FormattedMessage id={\"importSuccess\"}/>:<FormattedMessage id={\"importFail\"}/>}\n </div>\n </div>\n {status=='success' ? <Button size={\"lg\"} onClick={close} block highlight><FormattedMessage id={\"close\"}/></Button>\n : <Button size={\"lg\"} onClick={()=>setStatus('')} block highlight><FormattedMessage id=\"back\"/></Button>}\n </div>\n }\n\n return <div className={`matchid-import-token`}>\n <div className={\"matchid-import-token-form\"}>\n <Field label={intl.formatMessage({\n id: \"tokenSmartContract\"\n })} error={error.address ? error.address : (\n isContractQuery.isFetched&&!isContractQuery.isLoading&&!isContractQuery.data&&canImport?\"Address isn't a contract address\":''\n )}>\n <Input placeholder={intl.formatMessage({\n id: \"tokenSmartContractPlaceholder\"\n })} value={address}\n onChange={(e) => setAddress(e.target.value)} maxLength={42}/>\n </Field>\n <Field label={intl.formatMessage({\n id: \"tokenSymbol\"\n })} error={error.symbol}>\n <Input placeholder={intl.formatMessage({\n id: \"tokenSymbolPlaceholder\"\n })} value={symbol} onChange={(e) => setSymbol(e.target.value)}\n maxLength={16}/>\n </Field>\n <Field label={intl.formatMessage({\n id: \"tokenDecimals\"\n })} error={error.decimals}>\n <Input placeholder={intl.formatMessage({\n id: \"tokenDecimalsPlaceholder\"\n })} type={\"number\"} value={decimals}\n onChange={(e) => setDecimals(e.target.value)}/>\n </Field>\n </div>\n <Button size={\"lg\"} onClick={onImport} block loading={loading||isContractQuery.isLoading}\n disabled={!canImport||!isContractQuery.data} highlight><FormattedMessage id={\"import\"}/></Button>\n </div>\n}","import {Chain, createPublicClient, http} from \"viem\";\nimport {useQuery} from \"@tanstack/react-query\";\n\nexport default function useIsContract({\n address,\n chain,\n enabled,\n }: {\n address: string,\n chain: Chain,\n enabled?: boolean\n}) {\n return useQuery<boolean>({\n queryKey: [\"is_contract\", chain?.id, address],\n queryFn: async () => {\n if (!chain) return false;\n if (!address) return false;\n const publicClient = createPublicClient({\n chain,\n transport: http()\n })\n const res = await publicClient.getCode({address: address as `0x${string}`})\n return res !== null && res !== undefined;\n },\n enabled\n });\n}","import { useState, useCallback, useEffect } from \"react\";\nimport {useMatchChain} from \"./index\";\nimport {useQuery} from \"@tanstack/react-query\";\nimport {createPublicClient, defineChain, http} from \"viem\";\nconst CACHE_TTL = 86400 * 30 * 1000;\nconst MAX_CACHE_SIZE = 500;\nconst STORAGE_KEY = \"match_receipt_logs\";\n\ntype CacheEntry<V> = {\n value: V;\n timestamp: number;\n};\n\nexport function useReceiptCache<K extends string, V>() {\n const [cache, setCache] = useState<Map<K, CacheEntry<V>>>(new Map());\n\n const isLocalStorageAvailable = (() => {\n try {\n const testKey = \"__test__\";\n localStorage.setItem(testKey, \"1\");\n localStorage.removeItem(testKey);\n return true;\n } catch (e) {\n return false;\n }\n })();\n\n useEffect(() => {\n if (isLocalStorageAvailable) {\n try {\n const storedData = localStorage.getItem(STORAGE_KEY);\n if (storedData) {\n try {\n const parsed = JSON.parse(storedData) as Record<K, CacheEntry<V>>;\n const now = Date.now();\n\n const validEntries: [K, CacheEntry<V>][] = Object.entries(parsed)\n .filter(([_, entry]) => typeof entry === \"object\" && entry !== null && \"timestamp\" in entry && now - (entry as CacheEntry<V>).timestamp <= CACHE_TTL)\n .map(([key, entry]) => [key as K, entry as CacheEntry<V>]);\n\n setCache(new Map(validEntries));\n\n } catch (e) {\n console.error(\"Failed to parse cache from localStorage:\", e);\n }\n }\n\n } catch (e) {\n console.error(\"Failed to load cache from localStorage:\", e);\n }\n }\n }, []);\n\n const updateLocalStorage = useCallback((updatedCache: Map<K, CacheEntry<V>>) => {\n if (isLocalStorageAvailable) {\n try {\n const storedData = localStorage.getItem(STORAGE_KEY);\n let parsed: Record<K, CacheEntry<V>> = {} as Record<K, CacheEntry<V>>;\n if (storedData) {\n parsed = JSON.parse(storedData) as Record<K, CacheEntry<V>>;\n }\n\n updatedCache.forEach((entry, key) => {\n parsed[key] = entry;\n });\n\n localStorage.setItem(STORAGE_KEY, JSON.stringify(parsed));\n } catch (e) {\n console.error(\"Failed to update localStorage:\", e);\n }\n }\n }, []);\n\n // set cache\n const set = useCallback((key: K, value: V) => {\n const now = Date.now();\n const newCache = new Map(cache);\n\n // clear expired\n newCache.forEach((entry, k) => {\n if (now - entry.timestamp > CACHE_TTL) {\n newCache.delete(k);\n }\n });\n\n // max cache size\n if (newCache.size >= MAX_CACHE_SIZE) {\n const firstKey = newCache.keys().next().value as K | undefined;\n if (firstKey !== undefined) {\n newCache.delete(firstKey);\n }\n }\n\n // set new value\n newCache.set(key, { value, timestamp: now });\n setCache(newCache);\n updateLocalStorage(newCache);\n }, [cache, updateLocalStorage]);\n\n // get cache\n const get = useCallback((key: K): V | undefined => {\n const entry = cache.get(key);\n if (entry) {\n // check if expired\n if (Date.now() - entry.timestamp > CACHE_TTL) {\n const newCache = new Map(cache);\n newCache.delete(key);\n setCache(newCache);\n updateLocalStorage(newCache);\n return undefined;\n }\n return entry.value;\n }\n return undefined;\n }, [cache, updateLocalStorage]);\n\n // del cache\n const del = useCallback((key: K) => {\n if (cache.has(key)) {\n const newCache = new Map(cache);\n newCache.delete(key);\n setCache(newCache);\n updateLocalStorage(newCache);\n }\n }, [cache, updateLocalStorage]);\n\n // clear cache\n const clear = useCallback(() => {\n setCache(new Map());\n if (isLocalStorageAvailable) {\n localStorage.removeItem(STORAGE_KEY);\n }\n }, [isLocalStorageAvailable]);\n\n return { set, get, del, clear };\n}\n\n\nexport default function useReceipt({\n chainId,\n hash\n }:{\n chainId: number,\n hash: string\n}){\n const {list} = useMatchChain()\n const cache = useReceiptCache<string, any>()\n const chain = list?.find((item) => item.id === chainId)\n const [shouldRefetch, setShouldRefetch] = useState(true)\n\n const query = useQuery({\n queryKey: ['match-tx-receipt', hash, chain],\n queryFn: async () => {\n if (!chain || !hash) return false\n const cacheKey = `${chain.id}-${hash}`\n if (cache.get(cacheKey)) {\n return cache.get(cacheKey)\n }\n try {\n const publicClient = createPublicClient({\n chain: defineChain(chain),\n transport: http(),\n });\n const receipt = await publicClient.getTransactionReceipt({hash: hash as `0x${string}`});\n if (!receipt) {\n return false\n }\n cache.set(cacheKey, receipt)\n return receipt\n } catch (e) {\n return false\n }\n },\n refetchInterval: shouldRefetch ? 10000 : false,\n })\n\n useEffect(() => {\n if (query.data) {\n setShouldRefetch(false)\n }\n }, [query.data]);\n\n return query\n}","import { useState, useCallback, useEffect } from \"react\";\nimport {useMatchChain} from \"./index\";\nimport {useQuery} from \"@tanstack/react-query\";\nimport {createPublicClient, defineChain, http} from \"viem\";\nconst CACHE_TTL = 86400 * 30 * 1000;\nconst MAX_CACHE_SIZE = 500;\nconst STORAGE_KEY = \"match_transaction_logs\";\n\ntype CacheEntry<V> = {\n value: V;\n timestamp: number;\n};\n\nexport function useTransactionCache<K extends string, V>() {\n const [cache, setCache] = useState<Map<K, CacheEntry<V>>>(new Map());\n\n const isLocalStorageAvailable = (() => {\n try {\n const testKey = \"__test__\";\n localStorage.setItem(testKey, \"1\");\n localStorage.removeItem(testKey);\n return true;\n } catch (e) {\n return false;\n }\n })();\n\n useEffect(() => {\n if (isLocalStorageAvailable) {\n try {\n const storedData = localStorage.getItem(STORAGE_KEY);\n if (storedData) {\n try {\n const parsed = JSON.parse(storedData) as Record<K, CacheEntry<V>>;\n const now = Date.now();\n\n const validEntries: [K, CacheEntry<V>][] = Object.entries(parsed)\n .filter(([_, entry]) => typeof entry === \"object\" && entry !== null && \"timestamp\" in entry && now - (entry as CacheEntry<V>).timestamp <= CACHE_TTL)\n .map(([key, entry]) => [key as K, entry as CacheEntry<V>]);\n\n setCache(new Map(validEntries));\n\n } catch (e) {\n console.error(\"Failed to parse cache from localStorage:\", e);\n }\n }\n\n } catch (e) {\n console.error(\"Failed to load cache from localStorage:\", e);\n }\n }\n }, []);\n\n const updateLocalStorage = useCallback((updatedCache: Map<K, CacheEntry<V>>) => {\n if (isLocalStorageAvailable) {\n try {\n const storedData = localStorage.getItem(STORAGE_KEY);\n let parsed: Record<K, CacheEntry<V>> = {} as Record<K, CacheEntry<V>>;\n if (storedData) {\n parsed = JSON.parse(storedData) as Record<K, CacheEntry<V>>;\n }\n\n updatedCache.forEach((entry, key) => {\n parsed[key] = entry;\n });\n\n localStorage.setItem(STORAGE_KEY, JSON.stringify(parsed));\n } catch (e) {\n console.error(\"Failed to update localStorage:\", e);\n }\n }\n }, []);\n\n // set cache\n const set = useCallback((key: K, value: V) => {\n const now = Date.now();\n const newCache = new Map(cache);\n\n // clear expired\n newCache.forEach((entry, k) => {\n if (now - entry.timestamp > CACHE_TTL) {\n newCache.delete(k);\n }\n });\n\n // max cache size\n if (newCache.size >= MAX_CACHE_SIZE) {\n const firstKey = newCache.keys().next().value as K | undefined;\n if (firstKey !== undefined) {\n newCache.delete(firstKey);\n }\n }\n\n // set new value\n newCache.set(key, { value, timestamp: now });\n setCache(newCache);\n updateLocalStorage(newCache);\n }, [cache, updateLocalStorage]);\n\n // get cache\n const get = useCallback((key: K): V | undefined => {\n const entry = cache.get(key);\n if (entry) {\n // check if expired\n if (Date.now() - entry.timestamp > CACHE_TTL) {\n const newCache = new Map(cache);\n newCache.delete(key);\n setCache(newCache);\n updateLocalStorage(newCache);\n return undefined;\n }\n return entry.value;\n }\n return undefined;\n }, [cache, updateLocalStorage]);\n\n // del cache\n const del = useCallback((key: K) => {\n if (cache.has(key)) {\n const newCache = new Map(cache);\n newCache.delete(key);\n setCache(newCache);\n updateLocalStorage(newCache);\n }\n }, [cache, updateLocalStorage]);\n\n // clear cache\n const clear = useCallback(() => {\n setCache(new Map());\n if (isLocalStorageAvailable) {\n localStorage.removeItem(STORAGE_KEY);\n }\n }, [isLocalStorageAvailable]);\n\n return { set, get, del, clear };\n}\n\n\nexport default function useTransaction({\n chainId,\n hash\n }:{\n chainId: number,\n hash: string\n}){\n const {list} = useMatchChain()\n const cache = useTransactionCache<string, any>()\n const chain = list?.find((item) => item.id === chainId)\n const [shouldRefetch, setShouldRefetch] = useState(true)\n\n const query = useQuery({\n queryKey: ['match-tx-transaction', hash, chain],\n queryFn: async () => {\n if (!chain || !hash) return false\n const cacheKey = `${chain.id}-${hash}`\n if (cache.get(cacheKey)) {\n return cache.get(cacheKey)\n }\n try {\n const publicClient = createPublicClient({\n chain: defineChain(chain),\n transport: http(),\n });\n const transaction = await publicClient.getTransaction({hash: hash as `0x${string}`});\n if (!transaction) {\n return false\n }\n cache.set(cacheKey, transaction)\n return transaction\n } catch (e) {\n return false\n }\n },\n refetchInterval: shouldRefetch ? 10000 : false,\n })\n\n useEffect(() => {\n if (query.data) {\n setShouldRefetch(false)\n }\n }, [query.data]);\n\n return query\n}","import {create} from 'zustand';\nimport {CEXType, WalletType} from \"../types/types\";\nimport {Chain} from \"viem\";\nimport {DEFAULT_WALLET_METHODS} from \"../hooks/useConfig\";\n\n// export const useEVMModalStore = create<{\n// isOpen: boolean,\n// type: 'bind' | 'login' | ''\n// open: (type: 'bind' | 'login') => void,\n// close: () => void\n// }>(set => ({\n// isOpen: false,\n// type: '',\n// open: (type: 'bind' | 'login') => set({isOpen: true, type}),\n// close: () => set({isOpen: false})\n// }));\n\ntype WalletModalType = {\n isOpen: boolean,\n type: 'bind' | 'login' | ''\n open: (type: 'bind' | 'login') => void,\n close: () => void\n}\n\nexport const useTRONModalStore = create<WalletModalType>(set => ({\n isOpen: false,\n type: '',\n open: (type: 'bind' | 'login') => set({isOpen: true, type}),\n close: () => set({isOpen: false})\n}));\n\nexport const useTONModalStore = create<WalletModalType>(set => ({\n isOpen: false,\n type: '',\n open: (type: 'bind' | 'login') => set({isOpen: true, type}),\n close: () => set({isOpen: false})\n}));\n\nexport const useBTCModalStore = create<WalletModalType>(set => ({\n isOpen: false,\n type: '',\n open: (type: 'bind' | 'login') => set({isOpen: true, type}),\n close: () => set({isOpen: false})\n}));\nexport const useEVMModalStore = create<WalletModalType>(set => ({\n isOpen: false,\n type: '',\n open: (type: 'bind' | 'login') => set({isOpen: true, type}),\n close: () => set({isOpen: false})\n}));\n\nexport const useCEXBindModalStore = create<{\n type: CEXType | ''\n isOpen: boolean,\n open: (type: CEXType) => void,\n close: () => void\n}>(set => ({\n type: '',\n isOpen: false,\n open: (type: CEXType) => set({isOpen: true, type}),\n close: () => set({isOpen: false})\n}));\n\n\nexport const useWalletModalStore = create<{\n isOpen: boolean,\n type: 'bind' | 'login' | ''\n methods?: WalletType[]\n open: (type: 'bind' | 'login', methods?: WalletType[]) => void,\n close: () => void\n}>(set => ({\n isOpen: false,\n type: '',\n methods: [],\n open: (type: 'bind' | 'login', methods = DEFAULT_WALLET_METHODS) => set({isOpen: true, type, methods}),\n close: () => set({isOpen: false})\n}))","import React from \"react\";\nimport {\n BTCDarkIcon,\n BTCLightIcon,\n EVMDarkIcon,\n EVMLightIcon,\n SOLDarkIcon,\n SOLLightIcon, TonDarkIcon, TonLightIcon,\n TRXDarkIcon, TRXLightIcon\n} from \"../assets/icon\";\nimport {useDownMd} from \"./useLayout\";\nimport {WalletType} from \"../types\";\nexport const DEFAULT_WALLET_METHODS:WalletType[] = [\"evm\", 'sol', 'btc', 'tron', 'ton']\nexport const WALLET_METHODS:WalletType[] = [\"evm\", 'sol', 'btc', 'tron', 'ton']\nexport function useWalletConfig(){\n const isDownMd = useDownMd()\n const walletMap: {\n [key: string]: {\n icon: React.ReactNode,\n activeIcon: React.ReactNode,\n name: string,\n method: WalletType,\n }\n } = {\n evm: {\n icon: <EVMDarkIcon size={isDownMd ? 36 : 40}/>,\n activeIcon: <EVMLightIcon size={isDownMd ? 36 : 40}/>,\n name: \"EVM\",\n method: 'evm'\n },\n sol: {\n icon: <SOLDarkIcon size={isDownMd ? 36 : 40}/>,\n activeIcon: <SOLLightIcon size={isDownMd ? 36 : 40}/>,\n name: \"SOL\",\n method: 'sol'\n },\n btc: {\n icon: <BTCDarkIcon size={isDownMd ? 36 : 40}/>,\n activeIcon: <BTCLightIcon size={isDownMd ? 36 : 40}/>,\n name: \"BTC\",\n method: 'btc'\n },\n tron: {\n icon: <TRXDarkIcon size={isDownMd ? 36 : 40}/>,\n activeIcon: <TRXLightIcon size={isDownMd ? 36 : 40}/>,\n name: \"TRON\",\n method: 'tron'\n },\n ton: {\n icon: <TonDarkIcon size={isDownMd ? 36 : 40}/>,\n activeIcon: <TonLightIcon size={isDownMd ? 36 : 40}/>,\n name: \"TON\",\n method: 'ton'\n }\n }\n\n return {\n walletMap\n }\n}","import React, {useEffect, useMemo, useState} from \"react\";\nimport {isSuccess} from \"api/request\";\nimport {Button, ModalWithHeader, Field, Input} from \"components\"\nimport {bindCexApi} from \"../../api\";\nimport {CEXType, ModalWithHeaderProps} from \"../../types/types\";\nimport {FormattedMessage, useIntl} from \"react-intl\";\nimport {useUserInfo} from \"../../hooks\";\nimport eventManager from \"../../hooks/eventManager\";\nimport {useMatch} from \"../../MatchContext\";\n\nexport default function CEXBindModal({\n onClose,\n type,\n isOpen = false,\n ...props\n }: {\n type: CEXType | '',\n onClose: () => void,\n} & ModalWithHeaderProps) {\n const intl = useIntl()\n const {events} = useMatch()\n\n const [APIPassphrase, setAPIPassphrase] = useState<string>('')\n const {refreshOverview} = useUserInfo()\n const [loading, setLoading] = useState<boolean>(false)\n const [key, setKey] = useState<string>('')\n const [secret, setSecret] = useState<string>('')\n const [error, setError] = useState<string>('')\n const needPassphrase = useMemo(()=>{\n return ['bitget','okx'].includes(type.toLowerCase())\n },[type])\n useEffect(() => {\n if (isOpen) {\n setSecret('')\n setKey('')\n setAPIPassphrase('')\n setError('')\n setLoading(false)\n\n }\n }, [isOpen]);\n\n const SubmitApi = async () => {\n try {\n setLoading(true)\n const res = await bindCexApi({\n cex: type,\n api_key: key,\n api_secret: secret,\n ...(needPassphrase ? {api_passphrase: APIPassphrase} : {})\n });\n if (isSuccess(res)) {\n\n await refreshOverview()\n events!.onBind && events!.onBind({\n type: 'cex_' + type\n })\n eventManager.emit('onBind', {\n type: 'cex_' + type\n })\n onClose()\n }else{\n throw new Error(res.message)\n }\n\n\n } catch (error: any) {\n console.error(error)\n setError(error.message)\n }finally {\n setLoading(false)\n }\n }\n return <ModalWithHeader showClose isOpen={isOpen} onClose={onClose} title={intl.formatMessage({\n id: \"CEXBindTitle\"\n }, {\n type\n })} {...props}>\n <div className={\"matchid-cex-modal\"}>\n <div>\n <p><FormattedMessage id=\"CEXBindAttention\"/></p>\n <p><FormattedMessage id=\"CEXBindTips1\"/></p>\n <p><FormattedMessage id=\"CEXBindTips2\"/></p>\n <p><FormattedMessage id=\"CEXBindTips3\"/></p>\n </div>\n <Field label={intl.formatMessage({\n id: \"CEXBindApiKey\"\n })}>\n <Input value={key}\n onChange={(e) => setKey(e.target.value)}\n placeholder='**** **** ****'\n />\n </Field>\n <Field label={intl.formatMessage({\n id: \"CEXBindApiSecretKey\"\n })} error={!needPassphrase && error}>\n <Input value={secret}\n onChange={(e) => setSecret(e.target.value)}\n placeholder='**** **** ****'\n />\n </Field>\n {\n needPassphrase && <Field error={error} label={intl.formatMessage({\n id: \"CEXBindApiPassphrase\"\n })}>\n <Input value={APIPassphrase}\n onChange={(e) => setAPIPassphrase(e.target.value)}\n placeholder='**** **** ****'\n />\n </Field>\n }\n <Button onClick={SubmitApi} size=\"lg\" block loading={loading}\n disabled={!key || !secret}><FormattedMessage id={\"continue\"}/></Button>\n\n </div>\n\n </ModalWithHeader>\n}","import React, {PropsWithChildren, useEffect} from \"react\";\nimport {useUserInfo} from \"../hooks\";\nimport {\n useBTCModalStore,\n useCEXBindModalStore,\n useEVMModalStore,\n useTONModalStore,\n useTRONModalStore,\n useWalletModalStore,\n} from \"../store/useModalStore\";\nimport {BTCModal, TRONModal, TONModal, WalletModal, EVMModal} from \"../components\";\nimport CEXBindModal from \"../components/CEXBindModal\";\nimport {useQuery} from \"@tanstack/react-query\";\nimport {getTgAppLoginStatus} from \"../api\";\nimport {isSuccess} from \"../api/request\";\nimport useStore from \"../store/useStore\";\nimport {useMatch} from \"../MatchContext\";\n\nexport default function BusinessProvider({children}: PropsWithChildren) {\n const {overview, token} = useUserInfo()\n const {type: EVMType, isOpen: EVMIsOpen, close: EVMClose} = useEVMModalStore()\n const {type: TONType, isOpen: TONIsOpen, close: TONClose} = useTONModalStore()\n const {type: TRONType, isOpen: TRONIsOpen, close: TRONClose} = useTRONModalStore()\n const {type: BTCType, isOpen: BTCIsOpen, close: BTCClose} = useBTCModalStore()\n const {type: CEXType, isOpen: CEXIsOpen, close: CEXClose} = useCEXBindModalStore()\n const WalletModalStore = useWalletModalStore()\n const {tgAppAuthCode,setTgAppAuthCode} = useStore();\n const {login} = useMatch()\n\n const walletModalClose = (func:()=>void)=>{\n WalletModalStore.close()\n func()\n }\n\n useQuery({\n queryKey: ['matchid-tgapp-login',tgAppAuthCode],\n queryFn: async()=>{\n const res = await getTgAppLoginStatus({\n code:tgAppAuthCode\n })\n if(isSuccess(res)){\n setTgAppAuthCode('')\n await login({\n // mid:'',\n token: `${res.data.token_type} ${res.data.access_token}`\n })\n return true\n }\n return false\n },\n enabled: !!tgAppAuthCode,\n refetchInterval: 1000 * 5,\n })\n\n return (\n <>\n <EVMModal\n isOpen={EVMIsOpen && ((EVMType == 'login' && !overview && !token) || (EVMType == 'bind' && !!token && !!overview))}\n onClose={EVMClose} type={EVMType} onSuccess={()=>walletModalClose(EVMClose)} zIndex={199}/>\n <TRONModal\n isOpen={TRONIsOpen && ((TRONType == 'login' && !overview && !token) || (TRONType == 'bind' && !!token && !!overview))}\n onClose={TRONClose} type={TRONType} onSuccess={()=>walletModalClose(TRONClose)} zIndex={199}/>\n <TONModal\n isOpen={TONIsOpen && ((TONType == 'login' && !overview && !token) || (TONType == 'bind' && !!token && !!overview))}\n onClose={TONClose} type={TONType} onSuccess={()=>walletModalClose(TONClose)} zIndex={199}/>\n <BTCModal\n isOpen={BTCIsOpen && ((BTCType == 'login' && !overview && !token) || (BTCType == 'bind' && !!token && !!overview))}\n onClose={BTCClose} type={BTCType} onSuccess={()=>walletModalClose(BTCClose)} zIndex={199}/>\n <CEXBindModal isOpen={CEXIsOpen && (!!token && !!overview)}\n onClose={CEXClose} type={CEXType} zIndex={199}/>\n <WalletModal\n isOpen={WalletModalStore.isOpen && ((WalletModalStore.type == 'login' && !overview && !token) || (WalletModalStore.type == 'bind' && !!token && !!overview))}\n onClose={WalletModalStore.close} type={WalletModalStore.type} methods={WalletModalStore.methods} zIndex={150}/>\n {children}\n </>\n );\n\n}","import React, {PropsWithChildren} from 'react';\nimport BusinessProvider from \"./BusinessProvider\";\nimport {ModalProvider} from \"./ModalContext\";\nimport {ToastProvider} from \"./ToastContext\";\n\nconst Providers = ({children}: PropsWithChildren) => {\n return (\n <ToastProvider>\n <ModalProvider>\n <BusinessProvider>\n {children}\n </BusinessProvider>\n </ModalProvider>\n </ToastProvider>\n );\n};\n\nexport default Providers;\n","import useLocalStore from \"../store/useLocalStore\";\nimport {useEffect, useRef, useState} from \"react\";\nimport matchlog from \"../utils/matchlog\";\nimport useWallet from \"./useWallet\";\nimport {WalletReceiveMessageType} from \"../types\";\nimport {sendMessage} from \"../utils/wallet\";\nimport useStore from \"../store/useStore\";\nimport {encodeBase64, getAppClientId} from \"../utils\";\nimport {WalletConfigType} from \"../types/types\";\nimport useUserInfo from \"./useUserInfo\";\nimport {getLocale} from \"../store\";\n\nconst getWalletIframe = () => {\n return document.getElementById('match-wallet') as HTMLIFrameElement\n}\nconst AppClientId = getAppClientId()\n\nexport default function useWalletInit({\n config\n }: {\n config: WalletConfigType\n}) {\n const {endpoints, token, setWallet, appid,refreshOverview} = useLocalStore();\n const {setWalletReady, walletReady} = useStore()\n const iframeReadyRef = useRef(walletReady)\n useEffect(() => {\n setWallet(config)\n }, [config]);\n useEffect(() => {\n matchlog.log('sdk.mpc.status', walletReady, iframeReadyRef.current)\n iframeReadyRef.current = walletReady\n if (iframeReadyRef.current) {\n const onReady = async () => {\n if (window.matchProvider.walletMessageStack.length > 0) {\n const stack = window.matchProvider.walletMessageStack\n window.matchProvider.walletMessageStack = []\n for (let i = 0; i < stack.length; i++) {\n const item = stack[i]\n sendMessage(item)\n }\n }\n }\n onReady()\n }\n }, [walletReady]);\n //create an iframe in page body\n useEffect(() => {\n if (!endpoints.auth || !appid || !token || !config) {\n const existingIframe = getWalletIframe();\n if (existingIframe) {\n //remove iframe\n existingIframe.remove()\n }\n return\n }\n if (endpoints.auth) {\n const existingIframe = getWalletIframe();\n const query = {\n appid,\n appClientId: AppClientId,\n initParams:encodeBase64(JSON.stringify({\n access_token: token,\n type:config.type\n }))\n }\n const url = endpoints.auth + 'wallet/2?' + new URLSearchParams(query).toString()\n if (!existingIframe) {\n const createIframe = () => {\n const iframe = document.createElement('iframe');\n iframe.id = 'match-wallet';\n iframe.src = url\n iframe.style.display = 'none';\n iframe.style.width = '0';\n iframe.style.height = '0';\n iframe.style.position = 'fixed';\n iframe.style.zIndex = '200'\n // iframe.style.background = \"rgba(45, 60, 82, 0.50)\"\n // iframe.style.backdropFilter = \"blur(4px)\"\n //@ts-ignore\n //add on error console\n iframe.onerror = (e) => {\n console.error('sdk.mpc.error', e)\n }\n document.body.insertBefore(iframe, document.body.firstChild);\n }\n createIframe();\n if (!window.matchProvider) {\n window.matchProvider = {\n transactionMessageIntervalMap: {},\n walletMessageMap: {},\n walletMessageStack: [],\n sendWalletMessage: ({\n method,\n data = {},\n }) => {\n\n const messageId = Date.now().toString() + Math.random().toString().slice(6)\n const message = {\n method,\n data,\n messageId,\n source: \"matchid\",\n version: 1,\n locale:getLocale()\n }\n\n try {\n matchlog.log('sdk.mpc.send', message, endpoints.auth)\n getWalletIframe()?.contentWindow?.postMessage(message, endpoints.auth);\n } catch (error) {\n console.error('sdk.mpc.sendError', error)\n }\n return messageId\n },\n waitUntilWalletMessage: async ({\n method,\n data = {},\n timeout = 30000\n }) => {\n return new Promise((resolve, reject) => {\n try {\n if (iframeReadyRef.current && window.matchProvider.walletMessageStack.length == 0) {\n sendMessage({\n method,\n data,\n resolve,\n reject,\n timeout\n })\n return\n }\n //if iframe not ready or stack has data need to send, push to stack\n window.matchProvider.walletMessageStack.push({\n method,\n data,\n timeout,\n resolve,\n reject\n })\n } catch (error: any) {\n reject(error)\n }\n })\n }\n }\n }\n\n } else {\n if (existingIframe.src !== url) {\n setWalletReady(false);\n existingIframe.src = url\n }\n }\n }\n\n }, [endpoints.auth, appid, token, config]);\n useEffect(() => {\n const messageHandle = async (e: MessageEvent) => {\n //origin\n if (e.origin !== endpoints.auth.substring(0, endpoints.auth.length - 1)) {\n return\n }\n const res = e.data as WalletReceiveMessageType\n if (res.source != 'match-wallet') {\n return\n }\n matchlog.log('sdk.mpc.receive', e)\n\n const messageId = res.messageId\n if (messageId == 'ready') {\n matchlog.log('sdk.mpc.ready')\n setWalletReady(true)\n window.matchProvider.sendWalletMessage({\n method: 'readied'\n })\n //send readied message\n return\n }\n if (messageId == 'openIframe') {\n const iframe = getWalletIframe()\n if (iframe) {\n iframe.style.display = 'block'\n iframe.style.width = '100vw'\n iframe.style.height = '100vh'\n iframe.style.right = '0'\n iframe.style.top = '0'\n }\n return\n }\n if (messageId == 'closeIframe') {\n const iframe = getWalletIframe()\n if (iframe) {\n iframe.style.display = 'none'\n iframe.style.width = '0'\n iframe.style.height = '0'\n iframe.style.right = '0'\n iframe.style.top = '0'\n }\n return\n }\n if (messageId == 'refreshOverview') {\n refreshOverview()\n return\n }\n if (messageId == 'updateTransactionData') {\n const {data, rootData, transactionId} = res.data\n if (window.matchProvider.transactionMessageIntervalMap[transactionId] && window.matchProvider.transactionMessageIntervalMap[transactionId].transaction.data == rootData) {\n window.matchProvider.transactionMessageIntervalMap[transactionId].transaction.data = data\n const {func} = window.matchProvider.transactionMessageIntervalMap[transactionId]\n func()\n }\n return\n }\n if (messageId && window.matchProvider.walletMessageMap[messageId]) {\n const {resolve, reject, timeout} = window.matchProvider.walletMessageMap[messageId]\n clearTimeout(timeout!)\n if (res.method == 'ping') {\n delete window.matchProvider.walletMessageMap[messageId].timeout\n return\n }\n delete window.matchProvider.walletMessageMap[messageId]\n if (res.status == 'success') {\n resolve(res.data)\n } else {\n console.error('sdk.mpc.fail', res)\n reject(new Error(res.data.message))\n }\n }\n }\n window.addEventListener('message', messageHandle)\n return () => {\n window.removeEventListener('message', messageHandle)\n }\n\n }, []);\n\n return {\n walletReady\n }\n}","export const sendMessage = ({method, data, resolve, reject, timeout}: {\n method: string,\n data?: any,\n resolve: (data: any) => void,\n reject: (error: any) => void,\n timeout: number\n}) => {\n const messageId = window.matchProvider.sendWalletMessage({\n method,\n data\n })\n window.matchProvider.walletMessageMap[messageId] = {\n resolve,\n reject,\n }\n window.matchProvider.walletMessageMap[messageId].timeout = setTimeout(() => {\n console.error('Get wallet result timeout', {\n messageId,\n method,\n data\n })\n delete window.matchProvider.walletMessageMap[messageId]\n reject(new Error('Get wallet result timeout'))\n }, timeout)\n}\n\nexport const retryMessage = (params: { method: string, data?: any, timeout?: number }, options?: {\n retryCount: number,\n retryInterval: number,\n}): Promise<any> => {\n return new Promise((resolve, reject) => {\n let times = 0\n const getRes = async () => {\n times++\n if (times > (options?.retryCount || 10)) {\n reject(new Error('retryMessage timeout'))\n return\n }\n if (!window.matchProvider) {\n setTimeout(() => {\n getRes()\n }, (options?.retryInterval || 600))\n return\n }\n const res = await window.matchProvider.waitUntilWalletMessage(params)\n resolve(res)\n }\n getRes()\n })\n}\n","import {IEnvConfigType, IEnvName, IMatchEvents, LocaleType} from \"../types/types\";\nimport React, {useEffect, useRef} from \"react\";\nimport useLocalStore from \"../store/useLocalStore\";\nimport eventManager from \"./eventManager\";\nimport {getOverviewInfoApi, getTgAppLoginStatus} from \"../api\";\nimport env from \"../config/env\";\nimport matchlog from \"../utils/matchlog\";\nimport {useWalletModalStore} from \"../store/useModalStore\";\nimport useStore from \"../store/useStore\";\nimport {useQuery} from \"@tanstack/react-query\";\nimport {isSuccess} from \"../api/request\";\nimport {decodeBase64} from \"../utils\";\n\nexport default function useInit({\n theme,\n appid,\n events,\n endpoints,\n locale\n }: {\n theme: \"light\" | \"dark\";\n appid: string;\n endpoints?: IEnvConfigType['endpoints']\n events?: IMatchEvents\n locale?: LocaleType\n}) {\n\n const {\n setAppid,\n setEndpoints,\n setToken,\n setMid,\n token,\n setOverview,\n setTheme,\n setLocale,\n locale:realLocale\n } = useLocalStore();\n const walletModalStore = useWalletModalStore();\n const overviewLoadingRef = useRef(false);\n\n const searchParams = new URLSearchParams(window.location.search);\n const matchToken = searchParams.get('matchToken');\n const matchidt = searchParams.get('matchidt');\n\n const realEndpoints = endpoints || env.endpoints;\n\n useEffect(() => {\n setTheme(theme)\n }, [theme])\n\n useEffect(() => {\n setAppid(appid);\n }, [appid]);\n\n useEffect(() => {\n setEndpoints(realEndpoints);\n }, [realEndpoints]);\n\n useEffect(()=>{\n setLocale(locale||'en')\n },[locale])\n\n useEffect(() => {\n if (matchToken) {\n const tokenData = JSON.parse(atob(matchToken));\n if (tokenData && tokenData.mid && tokenData.token) {\n login({\n // mid: tokenData.mid,\n token: \"Bearer \" + tokenData.token,\n });\n }\n }\n }, [matchToken]);\n\n useEffect(() => {\n if (matchidt) {\n const tokenData = decodeURIComponent(matchidt);\n const data = JSON.parse(decodeBase64(tokenData))\n if(data){\n matchlog.log('matchidt',data)\n if(data.action=='login'){\n const newtoken = data.token || `${data.token_type} ${data.access_token}`\n login({\n // mid: tokenData.mid,\n token:newtoken\n });\n }else if(data.action=='bind') {\n eventManager.emit('onBind', {\n type:data.type\n })\n if (events && events.onBind) {\n events.onBind({\n type:data.type\n })\n }\n }\n const url = window.location.href;\n const urlObj = new URL(url);\n urlObj.searchParams.delete('matchidt');\n window.history.replaceState({}, '', urlObj.toString());\n return;\n }\n }\n }, [matchidt]);\n\n useEffect(() => {\n const onLoginMessage = (event: MessageEvent) => {\n const res = event.data;\n if (res.event === 'login' && res.data && (res.data.token || (res.data.token_type && res.data.access_token))) {\n login({\n // mid: res.data.mid,\n token: res.data.token || `${res.data.token_type} ${res.data.access_token}`,\n });\n } else if (res.event == 'bind') {\n walletModalStore.close()\n eventManager.emit('onBind', res.data)\n if (events && events.onBind) {\n events.onBind(res.data)\n }\n }\n }\n window.addEventListener('message', onLoginMessage);\n return () => {\n window.removeEventListener('message', onLoginMessage);\n };\n }, []);\n\n const loadOverview = async () => {\n matchlog.log('loadOverview')\n if (overviewLoadingRef.current) {\n return;\n }\n overviewLoadingRef.current = true;\n try {\n const res = await getOverviewInfoApi();\n\n setOverview(res.data)\n\n return res.data;\n } catch (err) {\n console.error('overview error', err);\n } finally {\n overviewLoadingRef.current = false;\n }\n };\n\n useEffect(() => {\n if (token) {\n loadOverview();\n }\n }, [token]);\n\n const login = async ({ token}: { token: string }) => {\n // setMid(mid);\n setToken(token);\n const overview = await loadOverview();\n\n eventManager.emit('onLogin', {\n // mid,\n token,\n did: overview?.did as string,\n });\n if (events && events?.onLogin) {\n events.onLogin({\n // mid,\n token,\n did: overview?.did as string,\n });\n }\n };\n\n\n\n return {\n loadOverview,\n login,\n endpoints:realEndpoints,\n locale:realLocale\n }\n\n}","{\n \"email\": \"Email\",\n \"emailAddress\": \"Email Address\",\n \"emailAddressPlaceholder\": \"Enter Your Email Address\",\n \"continue\": \"Continue\",\n \"send\": \"Send\",\n \"resend\": \"Resend\",\n \"sendCodeErrorTip\": \"Failed to send code: {error}\",\n \"sendEmailTips\": \"We have sent a verification code to your email\",\n \"verificationCode\": \"Verification Code\",\n \"codePlaceholder\": \"Enter the code\",\n \"wallet\": \"Wallet\",\n \"otherLoginMethods\": \"Other login methods\",\n \"login\": \"Login\",\n \"user\": \"User\",\n \"loginTitle\": \"Log in / Sign up\",\n \"loginTips\": \"You can use the following methods\",\n \"passwordMinError\": \"Password must be at least {length} characters\",\n \"passwordMatchError\": \"The password you entered twice do not match\",\n \"passwordTitle\": \"Set Password\",\n \"passwordTips\": \"Please set the wallet password that will be used to recover the wallet\",\n \"password\": \"Password\",\n \"passwordPlaceholder\": \"Enter Your Password\",\n \"rePassword\": \"Re Password\",\n \"rePasswordPlaceholder\": \"Re Enter the Password\",\n \"recoverTitle\": \"Recover Wallet\",\n \"recoverTips\": \"Please enter your password to recover your wallet\",\n \"bindWith\": \"Bind with {name} Wallet\",\n \"loginWith\": \"Login with {name} Wallet\",\n \"editUsernameTitle\": \"Edit User Name\",\n \"setUsernameTitle\": \"Set User Name\",\n \"username\": \"User Name\",\n \"usernamePlaceholder\": \"Enter Your User Name\",\n \"usernameValidError\": \"Name can be composed of numbers and letters as well as characters\",\n \"usernameLengthError\": \"No less than 2 characters\",\n \"confirm\": \"Confirm\",\n \"nextTime\": \"Next time\",\n \"setUsername\": \"Set a User Name\",\n \"disconnect\": \"Disconnect\",\n \"CEXBindTitle\": \"Bind {type} API\",\n \"CEXBindAttention\": \"Attention:\",\n \"CEXBindTips1\": \"1. Please bind the API for read-only permissions.\",\n \"CEXBindTips2\": \"2. Your API may be out of date, it is better to use a long term API.\",\n \"CEXBindTips3\": \"3. Only one API can be bound to the same exchange at the same time.\",\n \"CEXBindApiKey\": \"API Key\",\n \"CEXBindApiSecretKey\": \"API Secret Key\",\n \"CEXBindApiPassphrase\": \"API Passphrase\",\n \"cancel\": \"Cancel\",\n \"walletLoading\": \"Wallet service is loading\",\n \"tokenDetails\": \"Token Details\",\n \"tokenAmountMin\": \"Amount must be greater than 0.\",\n \"tokenAmountMax\": \"Insufficient balance.\",\n \"tokenAddressError\": \"Invalid address.\",\n \"amount\": \"Amount\",\n \"amountPlaceholder\": \"Enter the Amount.\",\n \"balance\": \"Balance\",\n \"receiveTitle\": \"Received wallet address\",\n \"receivePlaceholder\": \"Enter the Receiving wallet address.\",\n \"next\": \"Next\",\n \"copied\": \"Copied\",\n \"receiveQrcode\": \"Receive by scanning the QR code\",\n \"copyAddress\": \"Copy Address\",\n \"tokenSmartContract\": \"Token Smart Contract\",\n \"tokenSmartContractPlaceholder\": \"Enter the Token Smart Contract.\",\n \"tokenSymbol\": \"Token Symbol\",\n \"tokenSymbolPlaceholder\": \"Enter the Token Symbol.\",\n \"tokenDecimals\": \"Decimals\",\n \"tokenDecimalsPlaceholder\": \"Enter the Decimals.\",\n \"import\": \"Import\",\n \"receive\": \"Receive\",\n \"customizedToken\": \"Customized Token\",\n \"noMoreRecords\": \"There is no more Records here!\",\n \"noRecords\": \"No Records here!\",\n \"close\": \"Close\",\n \"back\": \"Back\",\n \"importSuccess\": \"Import Token Successfully\",\n \"importFail\": \"Failed to import Token\",\n \"changeNetwork\": \"Change Network\",\n \"approveSuccess\": \"Approve Successfully\",\n \"Approve\": \"Approve\",\n \"noFriends\": \"No Friends yet\",\n \"noRequests\": \"No Requests yet\",\n \"noMore\": \"No more\",\n \"Remove\": \"Remove\",\n \"removeSuccess\": \"Remove Successfully\",\n \"loginAgreement\": \"By logging in, you agree to our <termsLink>Terms of Service</termsLink> and <privacyLink>Privacy Policy</privacyLink>\",\n \"poweredBy\": \"Powered by\"\n}","{\n \"email\": \"邮箱\",\n \"emailAddress\": \"邮箱地址\",\n \"emailAddressPlaceholder\": \"请输入您的邮箱地址\",\n \"continue\": \"继续\",\n \"send\": \"发送\",\n \"resend\": \"重新发送\",\n \"sendCodeErrorTip\": \"发送验证码失败:{error}\",\n \"sendEmailTips\": \"我们已向您的邮箱发送验证码\",\n \"verificationCode\": \"验证码\",\n \"codePlaceholder\": \"请输入验证码\",\n \"wallet\": \"钱包\",\n \"otherLoginMethods\": \"其他登录方式\",\n \"login\": \"登录\",\n \"user\": \"用户\",\n \"loginTitle\": \"登录 / 注册\",\n \"loginTips\": \"您可以使用以下方式登录\",\n \"passwordMinError\": \"密码必须至少包含 {length} 个字符\",\n \"passwordMatchError\": \"两次输入的密码不一致\",\n \"passwordTitle\": \"设置密码\",\n \"passwordTips\": \"请设置用于恢复钱包的钱包密码\",\n \"password\": \"密码\",\n \"passwordPlaceholder\": \"请输入您的密码\",\n \"rePassword\": \"确认密码\",\n \"rePasswordPlaceholder\": \"请再次输入密码\",\n \"recoverTitle\": \"恢复钱包\",\n \"recoverTips\": \"请输入您的密码以恢复钱包\",\n \"bindWith\": \"绑定 {name} 钱包\",\n \"loginWith\": \"使用 {name} 钱包登录\",\n \"editUsernameTitle\": \"修改用户名\",\n \"setUsernameTitle\": \"设置用户名\",\n \"username\": \"用户名\",\n \"usernamePlaceholder\": \"请输入您的用户名\",\n \"usernameValidError\": \"用户名可以由数字、字母和字符组成\",\n \"usernameLengthError\": \"用户名不得少于 2 个字符\",\n \"confirm\": \"确认\",\n \"nextTime\": \"下次再说\",\n \"setUsername\": \"设置用户名\",\n \"disconnect\": \"断开连接\",\n \"CEXBindTitle\": \"绑定 {type} API\",\n \"CEXBindAttention\": \"注意:\",\n \"CEXBindTips1\": \"1. 请绑定具有只读权限的 API。\",\n \"CEXBindTips2\": \"2. 您的 API 可能已过期,建议使用长期有效的 API。\",\n \"CEXBindTips3\": \"3. 同一时间只能绑定一个 API 到相同的交易所。\",\n \"CEXBindApiKey\": \"API 密钥\",\n \"CEXBindApiSecretKey\": \"API 秘钥\",\n \"CEXBindApiPassphrase\": \"API 密码短语\",\n \"cancel\": \"取消\",\n \"walletLoading\": \"钱包服务正在加载\",\n \"tokenDetails\": \"代币详情\",\n \"tokenAmountMin\": \"金额必须大于 0。\",\n \"tokenAmountMax\": \"余额不足。\",\n \"tokenAddressError\": \"无效的地址。\",\n \"amount\": \"金额\",\n \"amountPlaceholder\": \"请输入金额。\",\n \"balance\": \"余额\",\n \"receiveTitle\": \"接收钱包地址\",\n \"receivePlaceholder\": \"请输入接收钱包地址。\",\n \"next\": \"下一步\",\n \"copied\": \"已复制\",\n \"receiveQrcode\": \"扫描 QR 码接收\",\n \"copyAddress\": \"复制地址\",\n \"tokenSmartContract\": \"代币智能合约\",\n \"tokenSmartContractPlaceholder\": \"请输入代币智能合约。\",\n \"tokenSymbol\": \"代币符号\",\n \"tokenSymbolPlaceholder\": \"请输入代币符号。\",\n \"tokenDecimals\": \"小数位数\",\n \"tokenDecimalsPlaceholder\": \"请输入小数位数。\",\n \"import\": \"导入\",\n \"receive\": \"接收\",\n \"customizedToken\": \"自定义代币\",\n \"noMoreRecords\": \"没有更多交易记录了!\",\n \"noRecords\": \"暂无交易记录!\",\n \"close\": \"关闭\",\n \"back\": \"返回\",\n \"importSuccess\": \"成功导入代币\",\n \"importFail\": \"导入代币失败\",\n \"changeNetwork\": \"切换网络\",\n \"approveSuccess\": \"授权成功\",\n \"Approve\": \"授权\",\n \"noFriends\": \"暂无好友\",\n \"noRequests\": \"暂无请求\",\n \"noMore\": \"没有更多\",\n \"Remove\": \"移除\",\n \"removeSuccess\": \"移除成功\",\n \"loginAgreement\": \"登录即表示您同意我们的<termsLink>服务条款</termsLink>和<privacyLink>隐私政策</privacyLink>\",\n \"poweredBy\": \"由\"\n}","{\n \"email\": \"郵箱\",\n \"emailAddress\": \"郵箱地址\",\n \"emailAddressPlaceholder\": \"請輸入您的郵箱地址\",\n \"continue\": \"繼續\",\n \"send\": \"發送\",\n \"resend\": \"重新發送\",\n \"sendCodeErrorTip\": \"發送驗證碼失敗:{error}\",\n \"sendEmailTips\": \"我們已向您的郵箱發送驗證碼\",\n \"verificationCode\": \"驗證碼\",\n \"codePlaceholder\": \"請輸入驗證碼\",\n \"wallet\": \"錢包\",\n \"otherLoginMethods\": \"其他登入方式\",\n \"login\": \"登入\",\n \"user\": \"用戶\",\n \"loginTitle\": \"登入 / 註冊\",\n \"loginTips\": \"您可以使用以下方式登入\",\n \"passwordMinError\": \"密碼必須至少包含 {length} 個字符\",\n \"passwordMatchError\": \"兩次輸入的密碼不一致\",\n \"passwordTitle\": \"設置密碼\",\n \"passwordTips\": \"請設置用於恢復錢包的密碼\",\n \"password\": \"密碼\",\n \"passwordPlaceholder\": \"請輸入您的密碼\",\n \"rePassword\": \"確認密碼\",\n \"rePasswordPlaceholder\": \"請再次輸入密碼\",\n \"recoverTitle\": \"恢復錢包\",\n \"recoverTips\": \"請輸入您的密碼以恢復錢包\",\n \"bindWith\": \"綁定 {name} 錢包\",\n \"loginWith\": \"使用 {name} 錢包登入\",\n \"editUsernameTitle\": \"修改用戶名\",\n \"setUsernameTitle\": \"設置用戶名\",\n \"username\": \"用戶名\",\n \"usernamePlaceholder\": \"請輸入您的用戶名\",\n \"usernameValidError\": \"用戶名可以由數字、字母和字符組成\",\n \"usernameLengthError\": \"用戶名不得少於 2 個字符\",\n \"confirm\": \"確認\",\n \"nextTime\": \"下次再說\",\n \"setUsername\": \"設置用戶名\",\n \"disconnect\": \"斷開連接\",\n \"CEXBindTitle\": \"綁定 {type} API\",\n \"CEXBindAttention\": \"注意:\",\n \"CEXBindTips1\": \"1. 請綁定具有只讀權限的 API。\",\n \"CEXBindTips2\": \"2. 您的 API 可能已過期,建議使用長期有效的 API。\",\n \"CEXBindTips3\": \"3. 同一時間只能綁定一個 API 到相同的交易所。\",\n \"CEXBindApiKey\": \"API 金鑰\",\n \"CEXBindApiSecretKey\": \"API 密鑰\",\n \"CEXBindApiPassphrase\": \"API 密碼短語\",\n \"cancel\": \"取消\",\n \"walletLoading\": \"錢包服務正在加載\",\n \"tokenDetails\": \"代幣詳情\",\n \"tokenAmountMin\": \"金額必須大於 0。\",\n \"tokenAmountMax\": \"餘額不足。\",\n \"tokenAddressError\": \"無效的地址。\",\n \"amount\": \"金額\",\n \"amountPlaceholder\": \"請輸入金額。\",\n \"balance\": \"餘額\",\n \"receiveTitle\": \"接收錢包地址\",\n \"receivePlaceholder\": \"請輸入接收錢包地址。\",\n \"next\": \"下一步\",\n \"copied\": \"已複製\",\n \"receiveQrcode\": \"掃描 QR 碼接收\",\n \"copyAddress\": \"複製地址\",\n \"tokenSmartContract\": \"代幣智能合約\",\n \"tokenSmartContractPlaceholder\": \"請輸入代幣智能合約。\",\n \"tokenSymbol\": \"代幣符號\",\n \"tokenSymbolPlaceholder\": \"請輸入代幣符號。\",\n \"tokenDecimals\": \"小數位數\",\n \"tokenDecimalsPlaceholder\": \"請輸入小數位數。\",\n \"import\": \"導入\",\n \"receive\": \"接收\",\n \"customizedToken\": \"自定義代幣\",\n \"noMoreRecords\": \"沒有更多交易記錄了!\",\n \"noRecords\": \"暫無交易記錄!\",\n \"close\": \"關閉\",\n \"back\": \"返回\",\n \"importSuccess\": \"成功匯入代幣\",\n \"importFail\": \"匯入代幣失敗\",\n \"changeNetwork\": \"切換網絡\",\n \"approveSuccess\": \"授權成功\",\n \"Approve\": \"授權\",\n \"noFriends\": \"暫無好友\",\n \"noRequests\": \"暫無請求\",\n \"noMore\": \"沒有更多\",\n \"Remove\": \"移除\",\n \"removeSuccess\": \"移除成功\",\n \"loginAgreement\": \"登入即表示您同意我們的<termsLink>服務條款</termsLink>和<privacyLink>隱私權政策</privacyLink>\",\n \"poweredBy\": \"由\"\n}","{\n \"email\": \"Email\",\n \"emailAddress\": \"Adresse Email\",\n \"emailAddressPlaceholder\": \"Entrez votre adresse email\",\n \"continue\": \"Continuer\",\n \"send\": \"Envoyer\",\n \"resend\": \"Renvoyer\",\n \"sendCodeErrorTip\": \"Échec de l'envoi du code : {error}\",\n \"sendEmailTips\": \"Un code de vérification a été envoyé à votre email\",\n \"verificationCode\": \"Code de vérification\",\n \"codePlaceholder\": \"Entrez le code\",\n \"wallet\": \"Portefeuille\",\n \"otherLoginMethods\": \"Autres méthodes de connexion\",\n \"login\": \"Connexion\",\n \"user\": \"Utilisateur\",\n \"loginTitle\": \"Connexion / Inscription\",\n \"loginTips\": \"Vous pouvez utiliser les méthodes suivantes\",\n \"passwordMinError\": \"Le mot de passe doit contenir au moins {length} caractères\",\n \"passwordMatchError\": \"Les mots de passe ne correspondent pas\",\n \"passwordTitle\": \"Définir un mot de passe\",\n \"passwordTips\": \"Veuillez définir le mot de passe pour restaurer le portefeuille\",\n \"password\": \"Mot de passe\",\n \"passwordPlaceholder\": \"Entrez votre mot de passe\",\n \"rePassword\": \"Confirmer le mot de passe\",\n \"rePasswordPlaceholder\": \"Ressaisissez le mot de passe\",\n \"recoverTitle\": \"Restaurer le portefeuille\",\n \"recoverTips\": \"Entrez votre mot de passe pour restaurer le portefeuille\",\n \"bindWith\": \"Lier avec le portefeuille {name}\",\n \"loginWith\": \"Connexion avec le portefeuille {name}\",\n \"editUsernameTitle\": \"Modifier le nom d'utilisateur\",\n \"setUsernameTitle\": \"Définir un nom d'utilisateur\",\n \"username\": \"Nom d'utilisateur\",\n \"usernamePlaceholder\": \"Entrez votre nom d'utilisateur\",\n \"usernameValidError\": \"Le nom peut contenir des lettres, chiffres et caractères\",\n \"usernameLengthError\": \"Le nom doit comporter au moins 2 caractères\",\n \"confirm\": \"Confirmer\",\n \"nextTime\": \"La prochaine fois\",\n \"setUsername\": \"Définir un nom d'utilisateur\",\n \"disconnect\": \"Déconnecter\",\n \"CEXBindTitle\": \"Lier l'API {type}\",\n \"CEXBindAttention\": \"Attention :\",\n \"CEXBindTips1\": \"1. Veuillez lier l'API avec des permissions en lecture seule.\",\n \"CEXBindTips2\": \"2. Votre API peut être obsolète, il est préférable d'utiliser une API à long terme.\",\n \"CEXBindTips3\": \"3. Une seule API peut être liée au même échange à la fois.\",\n \"CEXBindApiKey\": \"Clé API\",\n \"CEXBindApiSecretKey\": \"Clé Secrète API\",\n \"CEXBindApiPassphrase\": \"Phrase secrète API\",\n \"cancel\": \"Annuler\",\n \"walletLoading\": \"Le service de portefeuille est en cours de chargement\",\n \"tokenDetails\": \"Détails du Token\",\n \"tokenAmountMin\": \"Le montant doit être supérieur à 0.\",\n \"tokenAmountMax\": \"Solde insuffisant.\",\n \"tokenAddressError\": \"Adresse invalide.\",\n \"amount\": \"Montant\",\n \"amountPlaceholder\": \"Entrez le montant.\",\n \"balance\": \"Solde\",\n \"receiveTitle\": \"Adresse du portefeuille reçu\",\n \"receivePlaceholder\": \"Entrez l'adresse du portefeuille reçu.\",\n \"next\": \"Suivant\",\n \"copied\": \"Copié\",\n \"receiveQrcode\": \"Recevoir en scannant le code QR\",\n \"copyAddress\": \"Copier l'adresse\",\n \"tokenSmartContract\": \"Contrat intelligent du Token\",\n \"tokenSmartContractPlaceholder\": \"Entrez le contrat intelligent du Token.\",\n \"tokenSymbol\": \"Symbole du Token\",\n \"tokenSymbolPlaceholder\": \"Entrez le symbole du Token.\",\n \"tokenDecimals\": \"Décimales\",\n \"tokenDecimalsPlaceholder\": \"Entrez les décimales.\",\n \"import\": \"Importer\",\n \"receive\": \"Recevoir\",\n \"customizedToken\": \"Token personnalisé\",\n \"noMoreRecords\": \"Il n'y a plus d'enregistrements ici !\",\n \"noRecords\": \"Il n'y a aucun enregistrement ici !\",\n \"close\": \"Fermer\",\n \"back\": \"Retour\",\n \"importSuccess\": \"Importation du jeton réussie\",\n \"importFail\": \"Échec de l'importation du jeton\",\n \"changeNetwork\": \"Changer de réseau\",\n \"approveSuccess\": \"Approbation réussie\",\n \"Approve\": \"Approuver\",\n \"noFriends\": \"Pas encore d'amis\",\n \"noRequests\": \"Pas encore de demandes\",\n \"noMore\": \"Plus rien\",\n \"Remove\": \"Supprimer\",\n \"removeSuccess\": \"Suppression réussie\",\n \"loginAgreement\": \"En vous connectant, vous acceptez nos <termsLink>Conditions Générales d'Utilisation</termsLink> et notre <privacyLink>Politique de Confidentialité</privacyLink>\",\n \"poweredBy\": \"Par\"\n}","{\n \"email\": \"メール\",\n \"emailAddress\": \"メールアドレス\",\n \"emailAddressPlaceholder\": \"メールアドレスを入力してください\",\n \"continue\": \"続ける\",\n \"send\": \"送信\",\n \"resend\": \"再送信\",\n \"sendCodeErrorTip\": \"コード送信に失敗しました: {error}\",\n \"sendEmailTips\": \"確認コードをメールに送信しました\",\n \"verificationCode\": \"確認コード\",\n \"codePlaceholder\": \"コードを入力してください\",\n \"wallet\": \"ウォレット\",\n \"otherLoginMethods\": \"その他のログイン方法\",\n \"login\": \"ログイン\",\n \"user\": \"ユーザー\",\n \"loginTitle\": \"ログイン / 登録\",\n \"loginTips\": \"以下の方法でログインできます\",\n \"passwordMinError\": \"パスワードは最低 {length} 文字必要です\",\n \"passwordMatchError\": \"入力されたパスワードが一致しません\",\n \"passwordTitle\": \"パスワードを設定\",\n \"passwordTips\": \"ウォレット復元用のパスワードを設定してください\",\n \"password\": \"パスワード\",\n \"passwordPlaceholder\": \"パスワードを入力してください\",\n \"rePassword\": \"パスワード確認\",\n \"rePasswordPlaceholder\": \"再度パスワードを入力してください\",\n \"recoverTitle\": \"ウォレットを復元\",\n \"recoverTips\": \"パスワードを入力してウォレットを復元してください\",\n \"bindWith\": \"{name}ウォレットと連携\",\n \"loginWith\": \"{name}ウォレットでログイン\",\n \"editUsernameTitle\": \"ユーザー名を編集\",\n \"setUsernameTitle\": \"ユーザー名を設定\",\n \"username\": \"ユーザー名\",\n \"usernamePlaceholder\": \"ユーザー名を入力してください\",\n \"usernameValidError\": \"名前は文字、数字、記号で構成できます\",\n \"usernameLengthError\": \"2文字以上で入力してください\",\n \"confirm\": \"確認\",\n \"nextTime\": \"次回\",\n \"setUsername\": \"ユーザー名を設定\",\n \"disconnect\": \"切断\",\n \"CEXBindTitle\": \"{type} API をバインド\",\n \"CEXBindAttention\": \"注意:\",\n \"CEXBindTips1\": \"1. 読み取り専用の権限で API をバインドしてください。\",\n \"CEXBindTips2\": \"2. API が古い可能性があります。長期間使用可能な API を使用することをお勧めします。\",\n \"CEXBindTips3\": \"3. 同じ取引所に同時にバインドできる API は1つだけです。\",\n \"CEXBindApiKey\": \"API キー\",\n \"CEXBindApiSecretKey\": \"API シークレットキー\",\n \"CEXBindApiPassphrase\": \"API パスフレーズ\",\n \"cancel\": \"キャンセル\",\n \"walletLoading\": \"ウォレットサービスを読み込んでいます\",\n \"tokenDetails\": \"トークンの詳細\",\n \"tokenAmountMin\": \"金額は0より大きくなければなりません。\",\n \"tokenAmountMax\": \"残高が不足しています。\",\n \"tokenAddressError\": \"無効なアドレスです。\",\n \"amount\": \"金額\",\n \"amountPlaceholder\": \"金額を入力してください。\",\n \"balance\": \"残高\",\n \"receiveTitle\": \"受取ウォレットアドレス\",\n \"receivePlaceholder\": \"受取ウォレットアドレスを入力してください。\",\n \"next\": \"次へ\",\n \"copied\": \"コピーしました\",\n \"receiveQrcode\": \"QRコードをスキャンして受け取る\",\n \"copyAddress\": \"アドレスをコピー\",\n \"tokenSmartContract\": \"トークンのスマートコントラクト\",\n \"tokenSmartContractPlaceholder\": \"トークンのスマートコントラクトを入力してください。\",\n \"tokenSymbol\": \"トークンシンボル\",\n \"tokenSymbolPlaceholder\": \"トークンシンボルを入力してください。\",\n \"tokenDecimals\": \"小数点\",\n \"tokenDecimalsPlaceholder\": \"小数点を入力してください。\",\n \"import\": \"インポート\",\n \"receive\": \"受け取る\",\n \"customizedToken\": \"カスタマイズトークン\",\n \"noMoreRecords\": \"これ以上の記録はありません!\",\n \"noRecords\": \"記録がありません!\",\n \"close\": \"閉じる\",\n \"back\": \"戻る\",\n \"importSuccess\": \"トークンのインポートに成功しました\",\n \"importFail\": \"トークンのインポートに失敗しました\",\n \"changeNetwork\": \"ネットワークを変更\",\n \"approveSuccess\": \"承認に成功しました\",\n \"Approve\": \"承認\",\n \"noFriends\": \"まだ友達がいません\",\n \"noRequests\": \"まだリクエストがありません\",\n \"noMore\": \"これ以上ありません\",\n \"Remove\": \"削除\",\n \"removeSuccess\": \"削除に成功しました\",\n \"loginAgreement\": \"ログインすることにより、当社の<termsLink>利用規約</termsLink>および<privacyLink>プライバシーポリシー</termsLink>に同意したものとみなされます\",\n \"poweredBy\": \"製造元\"\n}","{\n \"email\": \"이메일\",\n \"emailAddress\": \"이메일 주소\",\n \"emailAddressPlaceholder\": \"이메일 주소를 입력하세요\",\n \"continue\": \"계속하기\",\n \"send\": \"보내기\",\n \"resend\": \"재전송\",\n \"sendCodeErrorTip\": \"코드 전송 실패: {error}\",\n \"sendEmailTips\": \"인증 코드를 이메일로 보냈습니다\",\n \"verificationCode\": \"인증 코드\",\n \"codePlaceholder\": \"코드를 입력하세요\",\n \"wallet\": \"지갑\",\n \"otherLoginMethods\": \"다른 로그인 방법\",\n \"login\": \"로그인\",\n \"user\": \"사용자\",\n \"loginTitle\": \"로그인 / 회원가입\",\n \"loginTips\": \"다음 방법으로 로그인할 수 있습니다\",\n \"passwordMinError\": \"비밀번호는 최소 {length}자 이상이어야 합니다\",\n \"passwordMatchError\": \"두 비밀번호가 일치하지 않습니다\",\n \"passwordTitle\": \"비밀번호 설정\",\n \"passwordTips\": \"지갑 복구에 사용할 비밀번호를 설정하세요\",\n \"password\": \"비밀번호\",\n \"passwordPlaceholder\": \"비밀번호를 입력하세요\",\n \"rePassword\": \"비밀번호 확인\",\n \"rePasswordPlaceholder\": \"비밀번호를 다시 입력하세요\",\n \"recoverTitle\": \"지갑 복구\",\n \"recoverTips\": \"비밀번호를 입력해 지갑을 복구하세요\",\n \"bindWith\": \"{name} 지갑과 연결\",\n \"loginWith\": \"{name} 지갑으로 로그인\",\n \"editUsernameTitle\": \"사용자 이름 수정\",\n \"setUsernameTitle\": \"사용자 이름 설정\",\n \"username\": \"사용자 이름\",\n \"usernamePlaceholder\": \"사용자 이름을 입력하세요\",\n \"usernameValidError\": \"이름은 문자, 숫자 및 특수문자로 구성될 수 있습니다\",\n \"usernameLengthError\": \"이름은 최소 2자 이상이어야 합니다\",\n \"confirm\": \"확인\",\n \"nextTime\": \"다음에\",\n \"setUsername\": \"사용자 이름 설정\",\n \"disconnect\": \"연결 끊기\",\n \"CEXBindTitle\": \"{type} API 연결\",\n \"CEXBindAttention\": \"주의:\",\n \"CEXBindTips1\": \"1. 읽기 전용 권한으로 API를 연결해주세요.\",\n \"CEXBindTips2\": \"2. API가 오래되었을 수 있습니다. 장기적인 API를 사용하는 것이 좋습니다.\",\n \"CEXBindTips3\": \"3. 동일한 거래소에 동시에 연결할 수 있는 API는 하나뿐입니다.\",\n \"CEXBindApiKey\": \"API 키\",\n \"CEXBindApiSecretKey\": \"API 비밀 키\",\n \"CEXBindApiPassphrase\": \"API 암호 구문\",\n \"cancel\": \"취소\",\n \"walletLoading\": \"지갑 서비스를 불러오는 중\",\n \"tokenDetails\": \"토큰 상세정보\",\n \"tokenAmountMin\": \"금액은 0보다 커야 합니다.\",\n \"tokenAmountMax\": \"잔액이 부족합니다.\",\n \"tokenAddressError\": \"유효하지 않은 주소입니다.\",\n \"amount\": \"금액\",\n \"amountPlaceholder\": \"금액을 입력하세요.\",\n \"balance\": \"잔액\",\n \"receiveTitle\": \"수신 지갑 주소\",\n \"receivePlaceholder\": \"수신 지갑 주소를 입력하세요.\",\n \"next\": \"다음\",\n \"copied\": \"복사됨\",\n \"receiveQrcode\": \"QR 코드를 스캔하여 받기\",\n \"copyAddress\": \"주소 복사\",\n \"tokenSmartContract\": \"토큰 스마트 컨트랙트\",\n \"tokenSmartContractPlaceholder\": \"토큰 스마트 컨트랙트를 입력하세요.\",\n \"tokenSymbol\": \"토큰 심볼\",\n \"tokenSymbolPlaceholder\": \"토큰 심볼을 입력하세요.\",\n \"tokenDecimals\": \"소수점 자리수\",\n \"tokenDecimalsPlaceholder\": \"소수점 자리수를 입력하세요.\",\n \"import\": \"가져오기\",\n \"receive\": \"받기\",\n \"customizedToken\": \"맞춤형 토큰\",\n \"noMoreRecords\": \"여기에 더 이상 기록이 없습니다!\",\n \"noRecords\": \"여기에 기록이 없습니다!\",\n \"close\": \"닫기\",\n \"back\": \"뒤로\",\n \"importSuccess\": \"토큰을 성공적으로 가져왔습니다\",\n \"importFail\": \"토큰 가져오기에 실패했습니다\",\n \"changeNetwork\": \"네트워크 변경\",\n \"approveSuccess\": \"승인 성공\",\n \"Approve\": \"승인\",\n \"noFriends\": \"아직 친구가 없습니다\",\n \"noRequests\": \"아직 요청이 없습니다\",\n \"noMore\": \"더 이상 없음\",\n \"Remove\": \"삭제\",\n \"removeSuccess\": \"삭제 성공\",\n \"loginAgreement\": \"로그인함으로써 당사의 <termsLink>서비스 약관</termsLink> 및 <privacyLink>개인정보 처리방침</privacyLink>에 동의하는 것으로 간주됩니다\",\n \"poweredBy\": \"제작\"\n}","{\n \"email\": \"Email\",\n \"emailAddress\": \"Địa chỉ Email\",\n \"emailAddressPlaceholder\": \"Nhập địa chỉ Email của bạn\",\n \"continue\": \"Tiếp tục\",\n \"send\": \"Gửi\",\n \"resend\": \"Gửi lại\",\n \"sendCodeErrorTip\": \"Gửi mã thất bại: {error}\",\n \"sendEmailTips\": \"Chúng tôi đã gửi mã xác minh đến email của bạn\",\n \"verificationCode\": \"Mã xác minh\",\n \"codePlaceholder\": \"Nhập mã\",\n \"wallet\": \"Ví\",\n \"otherLoginMethods\": \"Phương thức đăng nhập khác\",\n \"login\": \"Đăng nhập\",\n \"user\": \"Người dùng\",\n \"loginTitle\": \"Đăng nhập / Đăng ký\",\n \"loginTips\": \"Bạn có thể sử dụng các phương thức sau\",\n \"passwordMinError\": \"Mật khẩu phải có ít nhất {length} ký tự\",\n \"passwordMatchError\": \"Hai mật khẩu không khớp\",\n \"passwordTitle\": \"Tạo mật khẩu\",\n \"passwordTips\": \"Vui lòng đặt mật khẩu để khôi phục ví\",\n \"password\": \"Mật khẩu\",\n \"passwordPlaceholder\": \"Nhập mật khẩu của bạn\",\n \"rePassword\": \"Xác nhận mật khẩu\",\n \"rePasswordPlaceholder\": \"Nhập lại mật khẩu\",\n \"recoverTitle\": \"Khôi phục ví\",\n \"recoverTips\": \"Nhập mật khẩu để khôi phục ví\",\n \"bindWith\": \"Liên kết với ví {name}\",\n \"loginWith\": \"Đăng nhập bằng ví {name}\",\n \"editUsernameTitle\": \"Chỉnh sửa tên người dùng\",\n \"setUsernameTitle\": \"Đặt tên người dùng\",\n \"username\": \"Tên người dùng\",\n \"usernamePlaceholder\": \"Nhập tên người dùng của bạn\",\n \"usernameValidError\": \"Tên chỉ được chứa chữ, số và ký tự\",\n \"usernameLengthError\": \"Tên phải dài ít nhất 2 ký tự\",\n \"confirm\": \"Xác nhận\",\n \"nextTime\": \"Lần sau\",\n \"setUsername\": \"Đặt tên người dùng\",\n \"disconnect\": \"Ngắt kết nối\",\n \"CEXBindTitle\": \"Liên kết API {type}\",\n \"CEXBindAttention\": \"Lưu ý:\",\n \"CEXBindTips1\": \"1. Vui lòng liên kết API với quyền chỉ đọc.\",\n \"CEXBindTips2\": \"2. API của bạn có thể đã lỗi thời. Tốt hơn là sử dụng API dài hạn.\",\n \"CEXBindTips3\": \"3. Chỉ có thể liên kết một API với cùng một sàn giao dịch tại một thời điểm.\",\n \"CEXBindApiKey\": \"Khóa API\",\n \"CEXBindApiSecretKey\": \"Khóa bí mật API\",\n \"CEXBindApiPassphrase\": \"Cụm mật khẩu API\",\n \"cancel\": \"Hủy\",\n \"walletLoading\": \"Dịch vụ ví đang tải\",\n \"tokenDetails\": \"Chi tiết Token\",\n \"tokenAmountMin\": \"Số tiền phải lớn hơn 0.\",\n \"tokenAmountMax\": \"Số dư không đủ.\",\n \"tokenAddressError\": \"Địa chỉ không hợp lệ.\",\n \"amount\": \"Số lượng\",\n \"amountPlaceholder\": \"Nhập số lượng.\",\n \"balance\": \"Số dư\",\n \"receiveTitle\": \"Địa chỉ ví nhận\",\n \"receivePlaceholder\": \"Nhập địa chỉ ví nhận.\",\n \"next\": \"Tiếp theo\",\n \"copied\": \"Đã sao chép\",\n \"receiveQrcode\": \"Nhận bằng cách quét mã QR\",\n \"copyAddress\": \"Sao chép địa chỉ\",\n \"tokenSmartContract\": \"Hợp đồng thông minh Token\",\n \"tokenSmartContractPlaceholder\": \"Nhập hợp đồng thông minh Token.\",\n \"tokenSymbol\": \"Ký hiệu Token\",\n \"tokenSymbolPlaceholder\": \"Nhập ký hiệu Token.\",\n \"tokenDecimals\": \"Số thập phân\",\n \"tokenDecimalsPlaceholder\": \"Nhập số thập phân.\",\n \"import\": \"Nhập\",\n \"receive\": \"Nhận\",\n \"customizedToken\": \"Token tùy chỉnh\",\n \"noMoreRecords\": \"Không còn bản ghi nào ở đây!\",\n \"noRecords\": \"Không có bản ghi nào ở đây!\",\n \"close\": \"Đóng\",\n \"back\": \"Quay lại\",\n \"importSuccess\": \"Nhập Token thành công\",\n \"importFail\": \"Không thể nhập Token\",\n \"changeNetwork\": \"Thay đổi mạng\",\n \"approveSuccess\": \"Phê duyệt thành công\",\n \"Approve\": \"Phê duyệt\",\n \"noFriends\": \"Chưa có bạn bè\",\n \"noRequests\": \"Chưa có yêu cầu nào\",\n \"noMore\": \"Không còn nữa\",\n \"Remove\": \"Xóa\",\n \"removeSuccess\": \"Xóa thành công\",\n \"loginAgreement\": \"Bằng cách đăng nhập, bạn đồng ý với <termsLink>Điều khoản dịch vụ</termsLink> và <privacyLink>Chính sách quyền riêng tư</privacyLink> của chúng tôi\",\n \"poweredBy\": \"Bởi\"\n}","{\n \"email\": \"Correo\",\n \"emailAddress\": \"Dirección de correo\",\n \"emailAddressPlaceholder\": \"Introduce tu dirección de correo\",\n \"continue\": \"Continuar\",\n \"send\": \"Enviar\",\n \"resend\": \"Reenviar\",\n \"sendCodeErrorTip\": \"Error al enviar el código: {error}\",\n \"sendEmailTips\": \"Hemos enviado un código de verificación a tu correo\",\n \"verificationCode\": \"Código de verificación\",\n \"codePlaceholder\": \"Introduce el código\",\n \"wallet\": \"Cartera\",\n \"otherLoginMethods\": \"Otros métodos de inicio de sesión\",\n \"login\": \"Iniciar sesión\",\n \"user\": \"Usuario\",\n \"loginTitle\": \"Iniciar sesión / Registrarse\",\n \"loginTips\": \"Puedes usar los siguientes métodos\",\n \"passwordMinError\": \"La contraseña debe tener al menos {length} caracteres\",\n \"passwordMatchError\": \"Las contraseñas no coinciden\",\n \"passwordTitle\": \"Establecer contraseña\",\n \"passwordTips\": \"Configura la contraseña para recuperar tu cartera\",\n \"password\": \"Contraseña\",\n \"passwordPlaceholder\": \"Introduce tu contraseña\",\n \"rePassword\": \"Confirmar contraseña\",\n \"rePasswordPlaceholder\": \"Repite la contraseña\",\n \"recoverTitle\": \"Recuperar cartera\",\n \"recoverTips\": \"Introduce tu contraseña para recuperar la cartera\",\n \"bindWith\": \"Vincular con la cartera {name}\",\n \"loginWith\": \"Iniciar sesión con la cartera {name}\",\n \"editUsernameTitle\": \"Editar nombre de usuario\",\n \"setUsernameTitle\": \"Establecer nombre de usuario\",\n \"username\": \"Nombre de usuario\",\n \"usernamePlaceholder\": \"Introduce tu nombre de usuario\",\n \"usernameValidError\": \"El nombre puede contener letras, números y caracteres\",\n \"usernameLengthError\": \"El nombre debe tener al menos 2 caracteres\",\n \"confirm\": \"Confirmar\",\n \"nextTime\": \"La próxima vez\",\n \"setUsername\": \"Establecer nombre de usuario\",\n \"disconnect\": \"Desconectar\",\n \"CEXBindTitle\": \"Vincular API de {type}\",\n \"CEXBindAttention\": \"Atención:\",\n \"CEXBindTips1\": \"1. Por favor, vincula la API con permisos de solo lectura.\",\n \"CEXBindTips2\": \"2. Tu API puede estar desactualizada, es mejor usar una API a largo plazo.\",\n \"CEXBindTips3\": \"3. Solo se puede vincular una API al mismo intercambio a la vez.\",\n \"CEXBindApiKey\": \"Clave API\",\n \"CEXBindApiSecretKey\": \"Clave Secreta API\",\n \"CEXBindApiPassphrase\": \"Frase de contraseña API\",\n \"cancel\": \"Cancelar\",\n \"walletLoading\": \"El servicio de cartera se está cargando\",\n \"tokenDetails\": \"Detalles del Token\",\n \"tokenAmountMin\": \"La cantidad debe ser mayor que 0.\",\n \"tokenAmountMax\": \"Saldo insuficiente.\",\n \"tokenAddressError\": \"Dirección no válida.\",\n \"amount\": \"Cantidad\",\n \"amountPlaceholder\": \"Ingrese la cantidad.\",\n \"balance\": \"Saldo\",\n \"receiveTitle\": \"Dirección de billetera recibida\",\n \"receivePlaceholder\": \"Ingrese la dirección de la billetera recibida.\",\n \"next\": \"Siguiente\",\n \"copied\": \"Copiado\",\n \"receiveQrcode\": \"Recibir escaneando el código QR\",\n \"copyAddress\": \"Copiar dirección\",\n \"tokenSmartContract\": \"Contrato inteligente del Token\",\n \"tokenSmartContractPlaceholder\": \"Ingrese el contrato inteligente del Token.\",\n \"tokenSymbol\": \"Símbolo del Token\",\n \"tokenSymbolPlaceholder\": \"Ingrese el símbolo del Token.\",\n \"tokenDecimals\": \"Decimales\",\n \"tokenDecimalsPlaceholder\": \"Ingrese los decimales.\",\n \"import\": \"Importar\",\n \"receive\": \"Recibir\",\n \"customizedToken\": \"Token personalizado\",\n \"noMoreRecords\": \"¡No hay más registros aquí!\",\n \"noRecords\": \"¡No hay registros aquí!\",\n \"close\": \"Cerrar\",\n \"back\": \"Atrás\",\n \"importSuccess\": \"Token importado con éxito\",\n \"importFail\": \"Error al importar el token\",\n \"changeNetwork\": \"Cambiar red\",\n \"approveSuccess\": \"Autorizado con éxito\",\n \"Approve\": \"Autorizar\",\n \"noFriends\": \"Aún no hay amigos\",\n \"noRequests\": \"Aún no hay solicitudes\",\n \"noMore\": \"No hay más\",\n \"Remove\": \"Eliminar\",\n \"removeSuccess\": \"Eliminado con éxito\",\n \"loginAgreement\": \"Al iniciar sesión, aceptas nuestros <termsLink>Términos de servicio</termsLink> y nuestra <privacyLink>Política de privacidad</privacyLink>\",\n \"poweredBy\": \"Por\"\n}","{\n \"email\": \"Email\",\n \"emailAddress\": \"Endereço de Email\",\n \"emailAddressPlaceholder\": \"Digite seu endereço de email\",\n \"continue\": \"Continuar\",\n \"send\": \"Enviar\",\n \"resend\": \"Reenviar\",\n \"sendCodeErrorTip\": \"Falha ao enviar código: {error}\",\n \"sendEmailTips\": \"Enviamos um código de verificação para seu email\",\n \"verificationCode\": \"Código de Verificação\",\n \"codePlaceholder\": \"Digite o código\",\n \"wallet\": \"Carteira\",\n \"otherLoginMethods\": \"Outros métodos de login\",\n \"login\": \"Entrar\",\n \"user\": \"Usuário\",\n \"loginTitle\": \"Entrar / Registrar\",\n \"loginTips\": \"Você pode usar os métodos abaixo\",\n \"passwordMinError\": \"A senha deve ter pelo menos {length} caracteres\",\n \"passwordMatchError\": \"As senhas digitadas não coincidem\",\n \"passwordTitle\": \"Definir Senha\",\n \"passwordTips\": \"Configure uma senha para recuperar sua carteira\",\n \"password\": \"Senha\",\n \"passwordPlaceholder\": \"Digite sua senha\",\n \"rePassword\": \"Confirmar Senha\",\n \"rePasswordPlaceholder\": \"Digite a senha novamente\",\n \"recoverTitle\": \"Recuperar Carteira\",\n \"recoverTips\": \"Digite sua senha para recuperar a carteira\",\n \"bindWith\": \"Vincular com Carteira {name}\",\n \"loginWith\": \"Entrar com Carteira {name}\",\n \"editUsernameTitle\": \"Editar Nome de Usuário\",\n \"setUsernameTitle\": \"Definir Nome de Usuário\",\n \"username\": \"Nome de Usuário\",\n \"usernamePlaceholder\": \"Digite seu nome de usuário\",\n \"usernameValidError\": \"O nome pode conter letras, números e caracteres\",\n \"usernameLengthError\": \"Deve ter no mínimo 2 caracteres\",\n \"confirm\": \"Confirmar\",\n \"nextTime\": \"Próxima vez\",\n \"setUsername\": \"Definir Nome de Usuário\",\n \"disconnect\": \"Desconectar\",\n \"CEXBindTitle\": \"Vincular API {type}\",\n \"CEXBindAttention\": \"Atenção:\",\n \"CEXBindTips1\": \"1. Por favor, vincule a API com permissões de leitura apenas.\",\n \"CEXBindTips2\": \"2. Sua API pode estar desatualizada. É melhor usar uma API de longo prazo.\",\n \"CEXBindTips3\": \"3. Apenas uma API pode ser vinculada ao mesmo câmbio ao mesmo tempo.\",\n \"CEXBindApiKey\": \"Chave API\",\n \"CEXBindApiSecretKey\": \"Chave Secreta API\",\n \"CEXBindApiPassphrase\": \"Senha de API\",\n \"cancel\": \"Cancelar\",\n \"walletLoading\": \"O serviço de carteira está carregando\",\n \"tokenDetails\": \"Detalhes do Token\",\n \"tokenAmountMin\": \"O valor deve ser maior que 0.\",\n \"tokenAmountMax\": \"Saldo insuficiente.\",\n \"tokenAddressError\": \"Endereço inválido.\",\n \"amount\": \"Quantidade\",\n \"amountPlaceholder\": \"Digite a quantidade.\",\n \"balance\": \"Saldo\",\n \"receiveTitle\": \"Endereço da carteira recebida\",\n \"receivePlaceholder\": \"Digite o endereço da carteira recebida.\",\n \"next\": \"Próximo\",\n \"copied\": \"Copiado\",\n \"receiveQrcode\": \"Receber escaneando o código QR\",\n \"copyAddress\": \"Copiar endereço\",\n \"tokenSmartContract\": \"Contrato inteligente do Token\",\n \"tokenSmartContractPlaceholder\": \"Digite o contrato inteligente do Token.\",\n \"tokenSymbol\": \"Símbolo do Token\",\n \"tokenSymbolPlaceholder\": \"Digite o símbolo do Token.\",\n \"tokenDecimals\": \"Decimais\",\n \"tokenDecimalsPlaceholder\": \"Digite os decimais.\",\n \"import\": \"Importar\",\n \"receive\": \"Receber\",\n \"customizedToken\": \"Token personalizado\",\n \"noMoreRecords\": \"Não há mais registros aqui!\",\n \"noRecords\": \"Não há registros aqui!\",\n \"close\": \"Fechar\",\n \"back\": \"Voltar\",\n \"importSuccess\": \"Token importado com sucesso\",\n \"importFail\": \"Falha ao importar o token\",\n \"changeNetwork\": \"Alterar rede\",\n \"approveSuccess\": \"Aprovação bem-sucedida\",\n \"Approve\": \"Aprovar\",\n \"noFriends\": \"Ainda sem amigos\",\n \"noRequests\": \"Ainda sem solicitações\",\n \"noMore\": \"Não há mais\",\n \"Remove\": \"Remover\",\n \"removeSuccess\": \"Removido com sucesso\",\n \"loginAgreement\": \"Ao fazer login, você concorda com nossos <termsLink>Termos de Serviço</termsLink> e nossa <privacyLink>Política de Privacidade</privacyLink>\",\n \"poweredBy\": \"Por\"\n}","import messagesEn from \"./en.json\";\nimport messagesZh from \"./zh.json\";\nimport messagesTw from \"./tw.json\";\nimport messagesFr from \"./fr.json\";\nimport messagesJa from \"./ja.json\";\nimport messagesKo from \"./ko.json\";\nimport messagesVi from \"./vi.json\";\nimport messagesEs from \"./es.json\";\nimport messagesPt from \"./pt.json\";\n\n\nexport const messages: Record<string, Record<string, string>> = {\n en: messagesEn,\n zh: messagesZh,\n tw: messagesTw,\n fr: messagesFr,\n ja: messagesJa,\n ko: messagesKo,\n vi: messagesVi,\n es: messagesEs,\n pt: messagesPt,\n};","import useUserInfo from \"../../hooks/useUserInfo\";\nimport {useEffect, useMemo, useRef, useState} from \"react\";\nimport Button from \"../../ui/Button\";\nimport {EmailLineIcon} from \"assets/icon\";\nimport Input from \"../../ui/Input\";\nimport Field from \"../../ui/Field\";\nimport {EMAIL_CODE_LENGTH, EMAIL_INTERVAL} from \"../../config\";\nimport {FormattedMessage, useIntl} from \"react-intl\";\nimport {useDownMd} from \"../../hooks/useLayout\";\n\nexport default function StepVerify(props: {\n email: string\n onSuccess?: () => void\n}) {\n const intl = useIntl()\n const {getLoginEmailCode, loginByEmail} = useUserInfo()\n const [error, setError] = useState('')\n const [code, setCode] = useState('')\n const [sending, setSending] = useState(false)\n const [submitting, setSubmitting] = useState(false)\n const sendTimeRef = useRef(0)\n const [sendBtnText, setSendBtnText] = useState(intl.formatMessage({\n id: \"send\"\n }))\n const intervalTime = EMAIL_INTERVAL\n const codeLength = EMAIL_CODE_LENGTH\n const intervalRef = useRef<NodeJS.Timeout | null>(null);\n const isDownMd = useDownMd()\n\n const onSend = async () => {\n if (sendTimeRef.current > 0) {\n return\n }\n try {\n setError(\"\")\n setSending(true)\n await getLoginEmailCode(props.email)\n sendTimeRef.current = intervalTime\n setSendBtnText(`${sendTimeRef.current}s`)\n intervalRef.current = setInterval(() => {\n sendTimeRef.current--;\n setSendBtnText(`${sendTimeRef.current}s`)\n if (sendTimeRef.current <= 0) {\n setSendBtnText(intl.formatMessage({\n id: \"resend\"\n }))\n clearInterval(intervalRef.current!);\n setSending(false);\n }\n }, 1000);\n } catch (err: any) {\n console.error(\"Send email error\", err)\n setError(intl.formatMessage({\n id: \"sendCodeErrorTip\",\n }, {error: err.message}))\n setSending(false)\n }\n\n }\n useEffect(() => {\n onSend()\n return () => {\n if (intervalRef.current) {\n clearInterval(intervalRef.current)\n }\n }\n }, []);\n const canContinue = useMemo(() => {\n return code.length === codeLength\n }, [code])\n\n const onContinue = async () => {\n if (submitting) {\n return\n }\n try {\n setError(\"\")\n setSubmitting(true)\n const res = await loginByEmail({\n email: props.email,\n code\n })\n if (res) {\n props.onSuccess && props.onSuccess()\n }\n setSubmitting(false)\n\n } catch (err: any) {\n console.error(\"Verify email code error\", err)\n setError(err.message)\n setSubmitting(false)\n }\n }\n\n return <div className=\"matchid-email-verify-box\">\n <div className=\"matchid-email-verify-header\">\n <div className=\"matchid-email-verify-header-icon\"><EmailLineIcon size={isDownMd ? 19:24}/></div>\n <div className=\"matchid-email-verify-header-content\">\n <div className=\"matchid-email-verify-header-value\">{props.email}</div>\n <div className=\"matchid-email-verify-header-tips\"><FormattedMessage id=\"sendEmailTips\"/></div>\n </div>\n </div>\n <Field label={intl.formatMessage({\n id:\"verificationCode\"\n })} error={error}>\n <Input\n placeholder={intl.formatMessage({\n id:\"codePlaceholder\"\n })}\n className={\"matchid-email-verify-field\"}\n maxLength={codeLength}\n onChange={e => setCode(e.target.value)}\n value={code}\n after={<Button\n highlight\n disabled={sending}\n style={{\n height: '100%',\n borderTopLeftRadius: 0,\n borderBottomLeftRadius: 0,\n borderTopRightRadius: 'inherit',\n borderBottomRightRadius: 'inherit',\n width: \"80px\"\n }}\n onClick={onSend}>{sendBtnText}</Button>}\n >\n\n </Input>\n </Field>\n\n <Button disabled={!canContinue} loading={submitting} highlight block size=\"lg\" onClick={onContinue}><FormattedMessage id={\"continue\"}/></Button>\n </div>\n}","import useUserInfo from \"hooks/useUserInfo\";\nimport { LoginBoxProps } from \"types/types\";\nimport React, { PropsWithChildren, useMemo, useState } from \"react\";\nimport {\n EmailIcon,\n GoogleIcon,\n TelegramIcon,\n WalletIcon,\n XIcon,\n ArrowRightIcon,\n GithubIcon,\n DiscordIcon,\n LinkedinIcon,\n FacebookIcon,\n ArrowDownIcon,\n YoutubeIcon,\n KakaoIcon,\n MatchIdIcon\n} from \"assets/icon\";\nimport EmailModal from \"../EmailModal\";\nimport { FormattedMessage, useIntl } from \"react-intl\";\nimport { useDownMd } from \"../../hooks/useLayout\";\nimport { useWalletConfig, WALLET_METHODS } from \"../../hooks/useConfig\";\nimport useAppConfig from \"../../hooks/useAppConfig\";\nimport { PRIVACY_POLICY_URL, TERMS_OF_SERVICE_URL } from \"config\";\n\nexport const RecommendItem = ({\n icon,\n name,\n onClick,\n showChildren = false,\n children,\n footer\n}: {\n icon: React.ReactNode,\n name: string,\n onClick: () => void,\n showChildren?: boolean\n footer?: React.ReactNode\n} & PropsWithChildren) => {\n return <div className=\"matchid-login-recommend-method\">\n <div className=\"matchid-login-recommend-method-item\" onClick={onClick}>\n <div className=\"matchid-login-recommend-method-content\">\n <div className=\"matchid-login-recommend-method-icon\">\n {icon}\n </div>\n <span className=\"matchid-login-recommend-method-name\">{name}</span>\n </div>\n {\n footer ? footer : children ? <ArrowDownIcon\n className={`matchid-login-recommend-method-arrow ${showChildren ? 'matchid-login-recommend-method-arrow-active' : ''}`}\n size={20}\n color={\"var(--matchid-arrow-color)\"} /> :\n <ArrowRightIcon className=\"matchid-login-recommend-method-arrow\" size={20}\n color={\"var(--matchid-arrow-color)\"} />\n }\n\n </div>\n {children && <div\n className={`matchid-login-recommend-method-popover ${showChildren ? 'matchid-login-recommend-method-popover-active' : ''}`}>\n {children}\n </div>}\n </div>\n}\nexport default function LoginBox({\n recommendMethods,\n methods,\n walletMethods,\n inModal = false\n}: LoginBoxProps) {\n\n const config = useAppConfig()\n const methodConfig = useMemo(() => {\n if (recommendMethods || methods || walletMethods) {\n return {\n recommendMethods: recommendMethods ? recommendMethods : (walletMethods ? ['wallet'] : []),\n methods: methods || [],\n walletMethods: walletMethods || []\n }\n }\n if (!config.platform) {\n return {\n recommendMethods: [],\n methods: [],\n walletMethods: []\n }\n }\n const platform = config.platform.map(p => {\n // @ts-ignore\n if (p == 'x' || p == 'X') {\n return 'twitter'\n }\n return p.toLowerCase()\n })\n console.log('platform2', platform)\n const walletMethodList = WALLET_METHODS.filter(m => platform.includes(m))\n let recommendMethodList = walletMethodList.length > 0 ? ['wallet'] : []\n let methodList: any[] = []\n const otherMethodList = platform.filter(m => !walletMethodList.includes(m as any))\n if (otherMethodList.length > 0) {\n const recommendMethodListLength = recommendMethodList.length\n const maxRecommendMethodListLength = 3\n if (recommendMethodListLength < maxRecommendMethodListLength) {\n recommendMethodList = recommendMethodList.concat(otherMethodList.slice(0, Math.min(maxRecommendMethodListLength - recommendMethodListLength, otherMethodList.length)))\n methodList = otherMethodList.slice(maxRecommendMethodListLength - recommendMethodListLength)\n } else {\n methodList = otherMethodList\n }\n }\n return {\n recommendMethods: recommendMethodList,\n methods: methodList,\n walletMethods: walletMethodList\n }\n }, [config.platform, recommendMethods, methods, walletMethods])\n\n const [emailOpen, setEmailOpen] = useState(false)\n const { login } = useUserInfo()\n const [showWallet, setShowWallet] = useState(false)\n const intl = useIntl()\n const isDownMd = useDownMd()\n const methodMap: {\n [key: string]: {\n icon: React.ReactNode,\n name: string,\n onClick: () => void,\n type?: \"wallet\"\n }\n } = {\n wallet: {\n icon: <WalletIcon size={isDownMd ? 36 : 40} />,\n name: intl.formatMessage({ id: \"wallet\" }),\n onClick: () => setShowWallet(!showWallet),\n type: \"wallet\"\n },\n email: {\n icon: <EmailIcon size={isDownMd ? 36 : 40} />,\n name: intl.formatMessage({ id: \"email\" }),\n onClick: () => {\n setEmailOpen(true)\n }\n },\n google: {\n icon: <GoogleIcon size={isDownMd ? 36 : 40} />,\n name: \"Google\",\n onClick: () => login('google')\n },\n twitter: {\n icon: <XIcon size={isDownMd ? 36 : 40} />,\n name: \"X\",\n onClick: () => login('twitter')\n },\n telegram: {\n icon: <TelegramIcon size={isDownMd ? 36 : 40} />,\n name: \"Telegram\",\n onClick: () => login('telegram')\n },\n github: {\n icon: <GithubIcon size={isDownMd ? 36 : 40} />,\n name: \"Github\",\n onClick: () => login('github')\n },\n discord: {\n icon: <DiscordIcon size={isDownMd ? 36 : 40} />,\n name: \"Discord\",\n onClick: () => login('discord')\n },\n linkedin: {\n icon: <LinkedinIcon size={isDownMd ? 36 : 40} />,\n name: \"LinkedIn\",\n onClick: () => login('linkedin')\n },\n facebook: {\n icon: <FacebookIcon size={isDownMd ? 36 : 40} />,\n name: \"Facebook\",\n onClick: () => login('facebook')\n },\n youtube: {\n icon: <YoutubeIcon size={isDownMd ? 36 : 40} />,\n name: \"Youtube\",\n onClick: () => login('youtube')\n },\n kakao: {\n icon: <KakaoIcon size={isDownMd ? 36 : 40} />,\n name: \"Kakao\",\n onClick: () => login('kakao')\n }\n\n }\n\n const { walletMap } = useWalletConfig()\n\n\n return <>\n {(!inModal || !emailOpen) && <div className=\"matchid-login-box\">\n <div className=\"matchid-login-recommend-list\">\n {\n methodConfig.recommendMethods.map((m) => {\n return <RecommendItem\n icon={methodMap[m]?.icon}\n name={methodMap[m]?.name}\n onClick={methodMap[m]?.onClick}\n key={m}\n showChildren={m == 'wallet' && showWallet}\n >\n {\n m == 'wallet' && <>\n <div className={\"matchid-login-recommend-wallet-divider\"}></div>\n <div className={\"matchid-login-recommend-wallet-list\"}>\n {\n methodConfig.walletMethods.map((n) => {\n const m = walletMap[n]\n return <div className={\"matchid-login-recommend-wallet-item\"}\n key={m.name}\n onClick={() => {\n login(m.method)\n }}>\n <div className={\"matchid-login-recommend-wallet-item-content\"}>\n <div className={\"matchid-login-recommend-wallet-item-icon\"}>\n {m.icon}\n </div>\n <div\n className={\"matchid-login-recommend-wallet-item-hover-icon\"}>\n {m.activeIcon}\n </div>\n\n <span\n className={\"matchid-login-recommend-wallet-item-name\"}>{m.name}</span>\n </div>\n <ArrowRightIcon\n className=\"matchid-login-recommend-wallet-item-arrow\"\n size={20}\n color={\"var(--matchid-arrow-color)\"} />\n </div>\n })\n }\n </div>\n </>\n }\n </RecommendItem>\n })\n }\n </div>\n <div className=\"matchid-privacy-policy\">\n <div className=\"matchid-privacy-policy-content\">\n <FormattedMessage\n id=\"loginAgreement\"\n values={{\n termsLink: (chunks) => (\n <a\n href={TERMS_OF_SERVICE_URL}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"matchid-privacy-policy-content-link\"\n >\n {chunks}\n </a>\n ),\n privacyLink: (chunks) => (\n <a\n href={PRIVACY_POLICY_URL}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"matchid-privacy-policy-content-link\"\n >\n {chunks}\n </a>\n ),\n }}\n />\n </div>\n <div className=\"matchid-privacy-policy-powered-by\">\n <FormattedMessage id={\"poweredBy\"} />\n <MatchIdIcon />\n </div>\n </div>\n {methodConfig.methods.length > 0 &&\n <div className=\"matchid-login-other\">\n <div className=\"matchid-login-other-line-box\">\n <div className=\"matchid-login-other-line\"></div>\n <div className=\"matchid-login-other-text\"><FormattedMessage id={\"otherLoginMethods\"} /></div>\n <div className=\"matchid-login-other-line\"></div>\n </div>\n <div className=\"matchid-login-method-box\">\n {\n methodConfig.methods.map((m) => {\n return <div className=\"matchid-login-method-item\" key={m}\n onClick={methodMap[m]?.onClick} title={methodMap[m]?.name}>\n {methodMap[m]?.icon}\n </div>\n })\n }\n </div>\n </div>\n }\n </div>\n }\n <EmailModal\n isOpen={emailOpen}\n onClose={() => {\n setEmailOpen(false)\n }}\n onBack={inModal ? () => {\n setEmailOpen(false)\n } : undefined}\n />\n </>\n\n}\n","import {useQuery} from \"@tanstack/react-query\";\nimport {getAppConfigApi} from \"../api\";\nimport {isSuccess} from \"../api/request\";\n\nexport default function useAppConfig(){\n const query = useQuery({\n queryKey: ['appConfig'],\n queryFn: async () => {\n const res = await getAppConfigApi()\n if(!isSuccess(res)){\n return null\n }\n return res.data\n },\n })\n\n return {\n isFetched: query.isFetched,\n isLoading: query.isLoading,\n ...query.data\n }\n}","import useUserInfo from \"../../hooks/useUserInfo\";\nimport { ReactNode, useState } from \"react\";\nimport {\n ButtonProps,\n OtherLoginMethodType,\n PopoverPositionType,\n PopoverTypeType,\n RecommendLoginMethodType, WalletType,\n} from \"../../types/types\";\nimport { truncateAddress } from \"../../utils\";\nimport Button from \"../../ui/Button\";\nimport { LoginIcon, UnLoginIcon } from \"../../assets/icon\";\nimport LoginModal from \"../LoginModal\";\nimport UserPopover from \"../UserPopover\";\nimport { FormattedMessage, useIntl } from \"react-intl\";\n\nexport default function LoginButton({\n loginRender,\n methods,\n recommendMethods,\n onLoginClick,\n popoverPosition = \"right\",\n popoverType = \"hover\",\n popoverGap = 20,\n walletMethods,\n ...props\n}: Omit<ButtonProps, 'onClick' | 'highlight'> & {\n loginRender?: ReactNode\n methods?: OtherLoginMethodType[],\n recommendMethods?: RecommendLoginMethodType[]\n walletMethods?: WalletType[]\n onLoginClick?: () => void\n popoverPosition?: PopoverPositionType\n popoverType?: PopoverTypeType,\n popoverGap?: number | string\n}) {\n const intl = useIntl()\n const { isLogin, username } = useUserInfo()\n const [loginOpen, setLoginOpen] = useState(false)\n if (!isLogin) {\n return <>\n <LoginModal methods={methods} walletMethods={walletMethods} recommendMethods={recommendMethods} isOpen={loginOpen}\n onClose={() => setLoginOpen(false)} />\n <Button className={'matchid-unlogin-btn'} {...props} highlight onClick={() => setLoginOpen(true)}>\n <UnLoginIcon />\n <span><FormattedMessage id=\"login\" /></span>\n </Button>\n </>\n }\n return loginRender ? <>{loginRender}</> :\n <UserPopover position={popoverPosition} type={popoverType} gap={popoverGap}>\n <Button onClick={onLoginClick} className={'matchid-login-btn'} {...props}>\n <LoginIcon />\n <span>{username ? truncateAddress(username) : ('MatchID ' + intl.formatMessage({\n id: 'user'\n }))}</span>\n </Button>\n </UserPopover>\n\n}","import { LoginPanelProps } from \"types/types\";\nimport LoginBox from \"../LoginBox\";\nimport { CloseRoundIcon } from \"assets/icon\";\nimport { FormattedMessage } from \"react-intl\";\nimport { useDownMd } from \"../../hooks/useLayout\";\n\nexport default function LoginPanel({\n\n header,\n onClose,\n ...props\n}: LoginPanelProps) {\n\n const isDownMd = useDownMd()\n return <div className=\"matchid-login-panel\">\n {header ? header : <div className=\"matchid-login-panel-header\">\n <div className=\"matchid-login-panel-header-content\">\n <div className=\"matchid-login-panel-header-title\"><FormattedMessage id=\"loginTitle\" /></div>\n <div className=\"matchid-login-panel-header-subtilte\"><FormattedMessage id=\"loginTips\" /></div>\n </div>\n {\n onClose && <div className={\"matchid-login-panel-header-close\"} onClick={onClose}><CloseRoundIcon size={isDownMd ? 24 : 30} /></div>\n }\n\n </div>}\n <div className=\"matchid-login-panel-divide\" />\n <div className={\"matchid-login-panel-box\"}>\n <LoginBox {...props} />\n </div>\n </div>\n\n}\n","import Modal from \"ui/Modal\";\nimport LoginPanel from \"../LoginPanel\";\nimport { LoginModalProps } from \"../../types/types\";\nimport { useUserInfo } from \"../../hooks\";\n\nexport default function LoginModal({\n isOpen = false,\n width = 480,\n ...props\n}: LoginModalProps) {\n const { isLogin } = useUserInfo()\n return <Modal\n isOpen={isOpen && !isLogin}\n width={width}\n >\n <LoginPanel {...props} inModal />\n </Modal>\n}","import {PopoverProps, UserPopoverProps} from \"../../types/types\";\nimport Popover from \"../../ui/Popover\";\nimport Button from \"../../ui/Button\";\nimport {useCopyClipboard, useUserInfo} from \"../../hooks\";\nimport {PropsWithChildren, useState} from \"react\";\nimport ProfileIcon from \"../../assets/icon/ProfileIcon\";\nimport {ArrowRightIcon, CheckIcon, CopyIcon} from \"../../assets/icon\";\nimport {truncateAddress} from \"../../utils\";\nimport {UsernameModal} from \"../index\";\nimport {FormattedMessage, useIntl} from \"react-intl\";\n\nfunction UserContent() {\n const {logout,address,username} = useUserInfo()\n const [logouting, setLogouting] = useState(false)\n\n const onLogout = async () => {\n if (logouting) return\n try {\n setLogouting(true)\n await logout()\n } catch (error) {\n console.error(error)\n } finally {\n setLogouting(false)\n }\n }\n const UserItem = ({\n children,\n icon,\n rightIcon,\n onClick\n }:PropsWithChildren&{\n icon?:React.ReactNode,\n rightIcon?:React.ReactNode,\n onClick?:()=>void\n })=>{\n return <div className={\"matchid-user-popover-item\"} onClick={onClick}>\n <div className={`matchid-user-popover-item-content`}>\n {icon}\n <div className={\"matchid-user-popover-item-text\"}>\n {children}\n </div>\n </div>\n {rightIcon}\n </div>\n\n }\n const UserDivider = ()=>{\n return <div className={`matchid-user-popover-divider`}></div>\n }\n\n const [usernameOpen,setUsernameOpen] = useState(false)\n const [copied, setCopied] = useCopyClipboard();\n const intl = useIntl()\n return <div className={\"matchid-user-popover-content\"}>\n <div className={\"matchid-user-popover-list\"}>\n <UserItem onClick={()=>{\n setCopied(address)\n }} icon={copied ?<CheckIcon size={20} color=\"#0ecb81\"/> : <CopyIcon size={20} color=\"var(--icon-color)\"/>} rightIcon={<CheckIcon size={20} color=\"var(--icon-color)\"/>}>\n {truncateAddress(address)}\n </UserItem>\n <UserDivider/>\n <UserItem onClick={()=>{\n setUsernameOpen(true)\n }} icon={<ProfileIcon size={20} color=\"var(--icon-color)\"/>} rightIcon={<ArrowRightIcon size={20} color=\"var(--icon-color)\"/>}>\n {username || intl.formatMessage({\n id:\"setUsername\"\n })}\n </UserItem>\n </div>\n <Button onClick={onLogout} loading={logouting}><FormattedMessage id=\"disconnect\"/></Button>\n <UsernameModal isOpen={usernameOpen} onClose={()=>{\n setUsernameOpen(false)\n }} onSuccess={()=>{\n setUsernameOpen(false)\n }}/>\n </div>\n}\n\nexport default function UserPopover({\n children,\n ...props\n }: UserPopoverProps) {\n return <Popover {...props} content={<UserContent/>}>\n {children}\n </Popover>\n\n}","import { IconSizeColorProps} from \"./types\";\n\nexport default function ProfileIcon({size=24,color='black',...props}:IconSizeColorProps) {\n return <svg width={size} height={size} viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path fillRule=\"evenodd\" clipRule=\"evenodd\"\n d=\"M7.5 6.75C7.5 4.95507 8.95507 3.5 10.75 3.5C12.5449 3.5 14 4.95507 14 6.75C14 8.54493 12.5449 10 10.75 10C8.95507 10 7.5 8.54493 7.5 6.75ZM10.75 2C8.12665 2 6 4.12665 6 6.75C6 9.37335 8.12665 11.5 10.75 11.5C13.3734 11.5 15.5 9.37335 15.5 6.75C15.5 4.12665 13.3734 2 10.75 2ZM8.75 13C5.57436 13 3 15.5744 3 18.75V19.75C3 20.7165 3.7835 21.5 4.75 21.5H13.6646L13.0292 20.8646C12.7764 20.6118 12.5733 20.3185 12.4263 20H4.75C4.61193 20 4.5 19.8881 4.5 19.75V18.75C4.5 16.4028 6.40279 14.5 8.75 14.5H12.6452C13.0508 13.8858 13.676 13.4295 14.4091 13.243C13.8838 13.0849 13.3268 13 12.75 13H8.75Z\"\n fill={color}/>\n <path fillRule=\"evenodd\" clipRule=\"evenodd\"\n d=\"M19.0677 22.4771L21.4771 20.0677C21.841 19.7038 21.841 19.1139 21.4771 18.75L17.75 15.0229C17.5753 14.8482 17.3383 14.75 17.0911 14.75H14.6818C14.1672 14.75 13.75 15.1672 13.75 15.6818V18.0911C13.75 18.3383 13.8482 18.5753 14.0229 18.75L17.75 22.4771C18.1139 22.841 18.7038 22.841 19.0677 22.4771ZM15.6135 17.3124C15.9995 17.3124 16.3124 16.9995 16.3124 16.6135C16.3124 16.2276 15.9995 15.9147 15.6135 15.9147C15.2276 15.9147 14.9147 16.2276 14.9147 16.6135C14.9147 16.9995 15.2276 17.3124 15.6135 17.3124Z\"\n fill={color}/>\n </svg>\n\n}","import {ModalWithHeaderProps} from \"types/types\";\nimport {ModalWithHeader} from \"../../ui/Modal\";\nimport {useEffect, useMemo, useState} from \"react\";\nimport {isValidUsername} from \"../../utils\";\nimport Input from \"../../ui/Input\";\nimport Field from \"../../ui/Field\";\nimport Button from \"../../ui/Button\";\nimport InfoLineIcon from \"../../assets/icon/InfoLineIcon\";\nimport {useUserInfo} from \"../../hooks\";\nimport CheckRoundIcon from \"../../assets/icon/CheckRoundIcon\";\nimport {setUserNameApi} from \"../../api\";\nimport {isSuccess} from \"../../api/request\";\nimport {FormattedMessage, useIntl} from \"react-intl\";\nimport {useDownMd} from \"../../hooks/useLayout\";\n\nconst ValidItem = ({\n success = false,\n text\n }: {\n success?: boolean,\n text: string\n}) => {\n const isDownMd = useDownMd()\n return <div className={`matchid-valid-status-item matchid-valid-status-${success ? 'success' : 'error'}`}>\n\n {success ? <CheckRoundIcon size={isDownMd ? 12 : 16}/> : <InfoLineIcon size={isDownMd ? 12 : 16}/>}\n <span>\n {text}\n </span>\n </div>\n}\n\nexport default function UsernameModal({\n title,\n isOpen,\n onSuccess,\n ...props\n }: ModalWithHeaderProps & {\n onSuccess?: () => void\n}) {\n const {username, refreshOverview} = useUserInfo()\n const {isLogin} = useUserInfo()\n const [val, setVal] = useState(username)\n const [error, setError] = useState('')//error from api\n const isDownMd = useDownMd()\n\n useEffect(() => {\n if (isOpen) {\n setVal(username)\n setError('')\n }\n }, [isOpen]);\n\n const isValid = useMemo(() => {\n return isValidUsername(val)\n }, [val])\n\n const isLength = useMemo(() => {\n return val.length >= 2 && val.length <= 32\n }, [val])\n\n const isSafe = isValid && isLength\n\n const [isSubmitting, setIsSubmitting] = useState(false)\n\n const onSubmit = async () => {\n if (isSubmitting) return\n try {\n setIsSubmitting(true)\n const res = await setUserNameApi({\n username: val\n })\n\n if (isSuccess(res)) {\n await refreshOverview()\n onSuccess && onSuccess()\n } else {\n setError(res.message)\n }\n\n } catch (error: any) {\n setError(error.message)\n } finally {\n setIsSubmitting(false)\n }\n }\n const intl = useIntl()\n\n return <ModalWithHeader isOpen={isOpen && isLogin} {...props} title={title || intl.formatMessage({\n id: username ? \"editUsernameTitle\" : \"setUsernameTitle\"\n })}>\n <div className=\"matchid-username-box\">\n <Field label={intl.formatMessage({\n id: \"username\"\n })} error={error}>\n <Input\n placeholder={intl.formatMessage({\n id: \"usernamePlaceholder\"\n })}\n onChange={e => {\n setVal(e.target.value)\n setError('')\n }}\n value={val}\n />\n </Field>\n <div className=\"matchid-valid\">\n <ValidItem success={isValid}\n text={intl.formatMessage({\n id: \"usernameValidError\"\n })}/>\n <ValidItem success={isLength} text={intl.formatMessage({\n id: \"usernameLengthError\"\n })}/>\n {/*<ValidItem success={isSafe} text={\"Cannot contain sensitive words\"}/>*/}\n </div>\n\n <Button disabled={!isSafe} loading={isSubmitting} style={{\n marginTop: isDownMd ? \"36px\" : \"64px\"\n }} onClick={onSubmit} size={\"lg\"} block highlight><FormattedMessage id=\"confirm\"/></Button>\n <Button style={{\n marginTop: isDownMd ? \"12px\" : \"24px\"\n }} onClick={props.onClose} size={\"lg\"} block><FormattedMessage id=\"cancel\"/></Button>\n </div>\n </ModalWithHeader>\n}","import {BindWalletParam, ILoginWalletReq, ModalWithHeaderProps} from \"types/types\";\nimport {ModalWithHeader} from \"ui\";\nimport React, {useCallback, useEffect, useState} from \"react\";\nimport {getWalletInitApi, getWalletNonceApi, loginByWalletApi, toBindWalletApi} from \"../../api\";\nimport {isSuccess} from \"../../api/request\";\nimport matchlog from \"../../utils/matchlog\";\nimport {useMatch} from \"../../MatchContext\";\nimport eventManager from \"../../hooks/eventManager\";\nimport {useIntl} from \"react-intl\";\nimport {WalletModalContentV2} from \"../WalletModalContent\";\n\nimport {RainbowKitProvider, useConnectModal} from \"@rainbow-me/rainbowkit\";\nimport {useAccount, useChainId, useConfig, useDisconnect} from \"wagmi\";\nimport useWalletBox from \"../../hooks/useWalletBox\";\nimport {getEthersSigner} from \"hooks/useEthersSigner\";\nimport {SiweMessage} from \"siwe\";\nimport \"@rainbow-me/rainbowkit/styles.css\";\n\n\nfunction WalletContent({\n onSuccess,\n type,\n }: {\n onSuccess?: () => void\n type: 'login' | 'bind' | ''\n}) {\n const config = useConfig();\n const {openConnectModal, connectModalOpen} = useConnectModal();\n const {address, connector, isConnected} = useAccount();\n const {disconnectAsync} = useDisconnect({config});\n const chainId = useChainId()\n const {events, login} = useMatch()\n const [inited, setInited] = useState(false)\n\n\n const {status, setStatus, error, setError, statusRef, nonce, setNonce, init} = useWalletBox({\n onInit: async ({setStatus}) => {\n setStatus('start')\n }\n })\n\n useEffect(() => {\n matchlog.log(`status=${status}`, `connectModalOpen=${connectModalOpen}`, `address=${address}`, `isConnected=${isConnected}`)\n }, [status, connectModalOpen, isConnected, address]);\n useEffect(() => {\n if (connectModalOpen) {\n setStatus(\"connecting\")\n return\n }\n if (!connectModalOpen && address) {\n toLoginInWallet(address)\n return\n }\n if (!connectModalOpen && !address) {\n setStatus('start')\n }\n }, [connectModalOpen, address]);\n useEffect(() => {\n if (openConnectModal && !isConnected && !inited) {\n openConnectModal && openConnectModal()\n setInited(true)\n }\n }, [openConnectModal, inited]);\n // useAccountEffect({\n // onDisconnect() {\n // matchlog.log('onDisconnect')\n // setStatus('start')\n // },\n // onConnect(data) {\n // matchlog.log('onConnect',data)\n // setStatus('connecting')\n // toLoginInWallet(data.address)\n // },\n // });\n\n\n // useEffect(() => {\n // if ( status != 'start') {\n // visible && setVisible(false)\n // } else if(status=='start'){\n // !visible && setVisible(true)\n // }\n // }, [ status])\n\n\n const toLoginInWallet = async (address: string) => {\n if (statusRef.current != 'start' && statusRef.current != 'connecting') return\n\n try {\n if (!address) {\n throw new Error('Wallet address is empty')\n }\n setStatus('nonce')\n const res = type == 'bind' ? await getWalletInitApi({\n address,\n type: \"EVM\"\n }) : await getWalletNonceApi({address, type: \"EVM\"});\n\n if (!isSuccess(res)) {\n throw new Error(res.message)\n }\n setNonce(res.data.nonce)\n } catch (error: any) {\n console.error('toLoginInWallet', error)\n setStatus('error')\n setError(error.message)\n }\n }\n\n const signature = useCallback(async () => {\n if (!nonce || status != 'nonce') {\n return\n }\n try {\n const signer = await getEthersSigner(config);\n if (!signer) return;\n matchlog.log('signature', nonce, status)\n if (!address) {\n throw new Error('Wallet address is empty')\n }\n setStatus('signer')\n const params: ILoginWalletReq = {\n domain: window.location.host,\n address,\n statement: 'By signing, you are proving you own this wallet and logging in. This does not initiate a transaction or cost any fees.',\n uri: window.location.origin,\n nonce,\n version: \"1\",\n chainId,\n };\n const message = new SiweMessage({...params});\n const signature = await signer.signMessage(message.prepareMessage());\n const obj: BindWalletParam = {\n type: 'EVM',\n address: address,\n signature: signature,\n message: `${message.prepareMessage()}`,\n connector_type: connector?.type || '',\n wallet_client_type: connector?.name || '',\n }\n const res = type == 'bind' ? await toBindWalletApi(obj) : await loginByWalletApi(obj)\n if (!isSuccess(res)) {\n throw new Error(res.message)\n }\n\n matchlog.log(res)\n setStatus('success')\n if (type == 'bind') {\n events!.onBind && events!.onBind({\n type: 'evm'\n })\n eventManager.emit('onBind', {\n type: 'evm'\n })\n } else {\n await login({\n token: `${res.data.token_type} ${res.data.access_token}`\n })\n }\n onSuccess && onSuccess()\n\n\n } catch (error: any) {\n console.error('signature', error)\n setStatus('error')\n setError(error.reason || error.message)\n }\n\n\n }, [nonce, status, address])\n useEffect(() => {\n if (signature) {\n signature()\n }\n }, [signature])\n\n const onError = async () => {\n if (isConnected) {\n try {\n await disconnectAsync()\n } catch (error: any) {\n console.error('disconnectAsync', error)\n }\n }\n\n setError('')\n setNonce(undefined)\n setStatus('start')\n openConnectModal?.()\n }\n const onConnect = async () => {\n // console.log('onConnect')\n if (isConnected) {\n try {\n await disconnectAsync()\n } catch (error: any) {\n console.error('disconnectAsync', error)\n }\n }\n setError('')\n setNonce(undefined)\n openConnectModal?.()\n }\n const onDisconnect = async () => {\n if (isConnected) {\n try {\n await disconnectAsync()\n } catch (error: any) {\n console.error('disconnectAsync', error)\n }\n }\n\n setError('')\n setNonce(undefined)\n setStatus('start')\n }\n\n return <WalletModalContentV2\n status={status}\n onSuccess={async () => onSuccess?.()}\n error={error}\n onError={onError}\n onConnect={onConnect}\n onDisconnect={onDisconnect}\n />\n}\n\ntype EVMModalProps = ModalWithHeaderProps & {\n type?: 'login' | 'bind' | ''\n onSuccess?: () => void\n}\n\nfunction EVMConnectModal({\n type = 'login',\n onSuccess,\n ...props\n }: EVMModalProps) {\n const intl = useIntl()\n return <ModalWithHeader {...props} title={props.title || (intl.formatMessage({\n id: type == \"bind\" ? \"bindWith\" : \"loginWith\"\n }, {\n name: \"EVM\"\n }))}>\n <WalletContent onSuccess={onSuccess} type={type}/>\n </ModalWithHeader>\n}\n\nexport default function EVMModal(props: EVMModalProps) {\n return props.isOpen && <RainbowKitProvider><EVMConnectModal {...props}/></RainbowKitProvider>\n}","import {Button} from \"../index\";\nimport React, {useMemo, useState} from \"react\";\nimport {\n walletConnectedImage,\n walletConnectImage,\n walletConnectingImage,\n walletErrorImage,\n walletSigningImage\n} from \"../../assets/wallet\";\nimport {Lottie} from \"../../ui\";\n\nexport default function WalletModalContent({\n status,\n error,\n disconnect,\n setError,\n setVisible,\n visible,\n address,\n connected\n }: {\n status: string,\n error: string,\n disconnect: () => Promise<void>,\n setError: (error: string) => void,\n setVisible: (visible: boolean) => void,\n visible: boolean,\n address?: string,\n connected: boolean\n\n}) {\n const pageData: {\n btnText?: string,\n btnLoading?: boolean,\n btnDisabled?: boolean,\n btnClick?: () => void\n statusImage: any\n text: string,\n isError?: boolean\n } = useMemo(() => {\n\n if (status == 'success') {\n return {\n btnText: 'Disconnect Wallet',\n btnClick: async () => {\n await disconnect()\n },\n text: 'Wallet connection successful!',\n statusImage: walletConnectedImage\n }\n }\n if (status == 'error') {\n return {\n text: error,\n btnText: \"Reconnect Wallet\",\n btnClick: async () => {\n console.log('click error')\n setError('')\n try {\n await disconnect()\n } catch (error: any) {\n console.error(error)\n }\n setVisible(true)\n },\n statusImage: walletErrorImage,\n isError: true\n }\n }\n if (status == 'nonce') {\n return {\n btnLoading: true,\n text: 'Connecting',\n statusImage: walletConnectingImage\n }\n }\n if (status == 'signer') {\n return {\n btnLoading: true,\n text: 'Signing',\n statusImage: walletSigningImage\n }\n }\n if (visible) {\n return {\n btnLoading: true,\n text: 'Connecting',\n statusImage: walletConnectingImage,\n }\n }\n\n return {\n btnText: 'Connect Wallet',\n btnClick: () => {\n setVisible(true)\n },\n text: 'Please Connect your wallet',\n statusImage: walletConnectImage\n }\n }, [visible, connected, status, error, address])\n return <div className=\"matchid-wallet-container\">\n <div className={`matchid-wallet-box`}>\n <div className={`matchid-wallet-content`}>\n <Lottie animationData={pageData.statusImage} style={{\n width: 128,\n height: 128\n }}/>\n <div className={pageData.isError ? 'matchid-error' : ''}>{pageData.text}</div>\n </div>\n <Button block size=\"lg\" onClick={pageData.btnClick} loading={pageData.btnLoading}\n disabled={pageData.btnDisabled}>\n {pageData.btnText}\n </Button>\n </div>\n </div>\n}\n\nexport function WalletModalContentV2(props: {\n status: string,\n error?: string,\n onError?: () => Promise<void>,\n onConnect?: () => Promise<void>,\n onSuccess?: () => Promise<void>,\n onDisconnect?: () => Promise<void>,\n\n}) {\n const [submitting, setSubmitting] = useState(false)\n const pageData: {\n btnText?: string,\n btnLoading?: boolean,\n btnDisabled?: boolean,\n btnClick?: () => Promise<void>\n statusImage: any\n text: string,\n } = useMemo(() => {\n const {status} = props\n if (status == 'success') {\n return {\n btnText: 'Disconnect Wallet',\n btnClick: async () => {\n setSubmitting(true)\n await props.onDisconnect?.()\n setSubmitting(false)\n },\n text: 'Wallet connection successful!',\n statusImage: walletConnectedImage,\n btnLoading: submitting\n }\n }\n if (status == 'error') {\n return {\n text: props.error || 'Unknown Error',\n btnText: \"Reconnect Wallet\",\n btnClick: async () => {\n setSubmitting(true)\n await props.onError?.()\n setSubmitting(false)\n },\n statusImage: walletErrorImage,\n isError: true,\n btnLoading: submitting\n }\n }\n if (status == 'nonce') {\n return {\n btnLoading: true,\n text: 'Connecting',\n statusImage: walletConnectingImage\n }\n }\n if (status == 'signer') {\n return {\n btnLoading: true,\n text: 'Signing',\n statusImage: walletSigningImage\n }\n }\n if (status == 'connecting') {\n return {\n btnLoading: true,\n text: 'Connecting',\n statusImage: walletConnectingImage,\n }\n }\n\n return {\n btnText: 'Connect Wallet',\n btnClick: async () => {\n setSubmitting(true)\n await props.onConnect?.()\n setSubmitting(false)\n },\n text: 'Please Connect your wallet',\n statusImage: walletConnectImage\n }\n }, [props, submitting])\n return <div className=\"matchid-wallet-container\">\n <div className={`matchid-wallet-box`}>\n <div className={`matchid-wallet-content`}>\n <Lottie animationData={pageData.statusImage} style={{\n width: 128,\n height: 128\n }}/>\n <div className={props.status=='error' ? 'matchid-error' : ''}>{pageData.text}</div>\n </div>\n <Button block size=\"lg\" onClick={pageData.btnClick} loading={pageData.btnLoading}\n disabled={pageData.btnDisabled}>\n {pageData.btnText}\n </Button>\n </div>\n </div>\n}","import {errorImg,successImg,signingImg,walletImg,connectingImg} from \"assets/lottie\"\nexport const walletErrorImage = errorImg\nexport const walletConnectedImage = successImg\nexport const walletConnectingImage = connectingImg\nexport const walletConnectImage = walletImg\nexport const walletSigningImage = signingImg","import { WalletStatusType } from \"types/types\"\nimport { useEffect, useRef, useState } from \"react\"\n\nexport default function useWalletBox({\n onInit\n }:{\n onInit:(data:{\n setStatus:(status:WalletStatusType)=>void,\n })=>void\n}) {\n const [status, setStateStatus] = useState<WalletStatusType>('start')\n const [error, setError] = useState('')\n const statusRef = useRef(status)\n const [nonce,setNonce] = useState<any>()\n\n const setStatus = (status: WalletStatusType) => {\n statusRef.current = status\n setStateStatus(status)\n }\n const init = ()=>{\n setError('')\n setNonce(null)\n }\n useEffect(()=>{\n init()\n\n onInit({\n setStatus\n })\n return ()=>{\n setStatus('start')\n setNonce(null)\n setError('')\n }\n },[])\n return {\n status,\n statusRef,\n setStatus,\n error,\n setError,\n nonce,\n setNonce,\n init\n }\n}","import * as React from 'react'\nimport { useWalletClient } from 'wagmi'\nimport { providers } from 'ethers'\nimport { Config, getConnectorClient } from '@wagmi/core'\nimport type { Account, Chain, Client, Transport } from 'viem'\n\nexport function walletClientToSigner(walletClient: any) {\n const { account, chain, transport } = walletClient\n const network = {\n chainId: chain?.id || 1,\n name: chain?.name,\n ensAddress: chain?.contracts?.ensRegistry?.address,\n }\n const provider = new providers.Web3Provider(transport, network)\n const signer = provider.getSigner(account.address)\n return signer\n}\n\n/** Hook to convert a viem Wallet Client to an ethers.js Signer. */\nexport function useEthersSigner({ chainId }: { chainId?: number } = {}) {\n const { data: walletClient } = useWalletClient({ chainId })\n return React.useMemo(\n () => (walletClient ? walletClientToSigner(walletClient) : undefined),\n [walletClient],\n )\n}\n\n\nexport function clientToSigner(client: Client<Transport, Chain, Account>) {\n const { account, chain, transport } = client\n const network = {\n chainId: chain.id,\n name: chain.name,\n ensAddress: chain.contracts?.ensRegistry?.address,\n }\n const provider = new providers.Web3Provider(transport, network)\n const signer = provider.getSigner(account.address)\n return signer\n}\n\n/** Action to convert a Viem Client to an ethers.js Signer. */\nexport async function getEthersSigner(\n config: any,\n { chainId }: { chainId?: number } = {},\n) {\n const client: any = await getConnectorClient(config, { chainId })\n return clientToSigner(client)\n}","export const version = '2.17.1'\n","import { version } from '../version.js'\n\nexport const getVersion = () => `@wagmi/core@${version}`\n","import type { Compute, OneOf } from '../types/utils.js'\nimport { getVersion } from '../utils/getVersion.js'\n\nexport type ErrorType<name extends string = 'Error'> = Error & { name: name }\n\ntype BaseErrorOptions = Compute<\n OneOf<{ details?: string | undefined } | { cause: BaseError | Error }> & {\n docsPath?: string | undefined\n docsSlug?: string | undefined\n metaMessages?: string[] | undefined\n }\n>\n\nexport type BaseErrorType = BaseError & { name: 'WagmiCoreError' }\nexport class BaseError extends Error {\n details: string\n docsPath?: string | undefined\n metaMessages?: string[] | undefined\n shortMessage: string\n\n override name = 'WagmiCoreError'\n get docsBaseUrl() {\n return 'https://wagmi.sh/core'\n }\n get version() {\n return getVersion()\n }\n\n constructor(shortMessage: string, options: BaseErrorOptions = {}) {\n super()\n\n const details =\n options.cause instanceof BaseError\n ? options.cause.details\n : options.cause?.message\n ? options.cause.message\n : options.details!\n const docsPath =\n options.cause instanceof BaseError\n ? options.cause.docsPath || options.docsPath\n : options.docsPath\n\n this.message = [\n shortMessage || 'An error occurred.',\n '',\n ...(options.metaMessages ? [...options.metaMessages, ''] : []),\n ...(docsPath\n ? [\n `Docs: ${this.docsBaseUrl}${docsPath}.html${\n options.docsSlug ? `#${options.docsSlug}` : ''\n }`,\n ]\n : []),\n ...(details ? [`Details: ${details}`] : []),\n `Version: ${this.version}`,\n ].join('\\n')\n\n if (options.cause) this.cause = options.cause\n this.details = details\n this.docsPath = docsPath\n this.metaMessages = options.metaMessages\n this.shortMessage = shortMessage\n }\n\n walk(fn?: (err: unknown) => boolean) {\n return this.#walk(this, fn)\n }\n\n #walk(err: unknown, fn?: (err: unknown) => boolean): unknown {\n if (fn?.(err)) return err\n if ((err as Error).cause) return this.#walk((err as Error).cause, fn)\n return err\n }\n}\n","import type { Address } from 'viem'\n\nimport type { Connector } from '../createConfig.js'\nimport { BaseError } from './base.js'\n\nexport type ChainNotConfiguredErrorType = ChainNotConfiguredError & {\n name: 'ChainNotConfiguredError'\n}\nexport class ChainNotConfiguredError extends BaseError {\n override name = 'ChainNotConfiguredError'\n constructor() {\n super('Chain not configured.')\n }\n}\n\nexport type ConnectorAlreadyConnectedErrorType =\n ConnectorAlreadyConnectedError & {\n name: 'ConnectorAlreadyConnectedError'\n }\nexport class ConnectorAlreadyConnectedError extends BaseError {\n override name = 'ConnectorAlreadyConnectedError'\n constructor() {\n super('Connector already connected.')\n }\n}\n\nexport type ConnectorNotConnectedErrorType = ConnectorNotConnectedError & {\n name: 'ConnectorNotConnectedError'\n}\nexport class ConnectorNotConnectedError extends BaseError {\n override name = 'ConnectorNotConnectedError'\n constructor() {\n super('Connector not connected.')\n }\n}\n\nexport type ConnectorNotFoundErrorType = ConnectorNotFoundError & {\n name: 'ConnectorNotFoundError'\n}\nexport class ConnectorNotFoundError extends BaseError {\n override name = 'ConnectorNotFoundError'\n constructor() {\n super('Connector not found.')\n }\n}\n\nexport type ConnectorAccountNotFoundErrorType =\n ConnectorAccountNotFoundError & {\n name: 'ConnectorAccountNotFoundError'\n }\nexport class ConnectorAccountNotFoundError extends BaseError {\n override name = 'ConnectorAccountNotFoundError'\n constructor({\n address,\n connector,\n }: {\n address: Address\n connector: Connector\n }) {\n super(`Account \"${address}\" not found for connector \"${connector.name}\".`)\n }\n}\n\nexport type ConnectorChainMismatchErrorType = ConnectorAccountNotFoundError & {\n name: 'ConnectorChainMismatchError'\n}\nexport class ConnectorChainMismatchError extends BaseError {\n override name = 'ConnectorChainMismatchError'\n constructor({\n connectionChainId,\n connectorChainId,\n }: {\n connectionChainId: number\n connectorChainId: number\n }) {\n super(\n `The current chain of the connector (id: ${connectorChainId}) does not match the connection's chain (id: ${connectionChainId}).`,\n {\n metaMessages: [\n `Current Chain ID: ${connectorChainId}`,\n `Expected Chain ID: ${connectionChainId}`,\n ],\n },\n )\n }\n}\n\nexport type ConnectorUnavailableReconnectingErrorType =\n ConnectorUnavailableReconnectingError & {\n name: 'ConnectorUnavailableReconnectingError'\n }\nexport class ConnectorUnavailableReconnectingError extends BaseError {\n override name = 'ConnectorUnavailableReconnectingError'\n constructor({ connector }: { connector: { name: string } }) {\n super(`Connector \"${connector.name}\" unavailable while reconnecting.`, {\n details: [\n 'During the reconnection step, the only connector methods guaranteed to be available are: `id`, `name`, `type`, `uid`.',\n 'All other methods are not guaranteed to be available until reconnection completes and connectors are fully restored.',\n 'This error commonly occurs for connectors that asynchronously inject after reconnection has already started.',\n ].join(' '),\n })\n }\n}\n","import {\n type Account,\n type Address,\n type BaseErrorType,\n type Client,\n createClient,\n custom,\n} from 'viem'\nimport { getAddress, parseAccount } from 'viem/utils'\n\nimport type { Config, Connection } from '../createConfig.js'\nimport type { ErrorType } from '../errors/base.js'\nimport {\n ConnectorAccountNotFoundError,\n type ConnectorAccountNotFoundErrorType,\n ConnectorChainMismatchError,\n type ConnectorChainMismatchErrorType,\n ConnectorNotConnectedError,\n type ConnectorNotConnectedErrorType,\n ConnectorUnavailableReconnectingError,\n type ConnectorUnavailableReconnectingErrorType,\n} from '../errors/config.js'\nimport type {\n ChainIdParameter,\n ConnectorParameter,\n} from '../types/properties.js'\nimport type { Compute } from '../types/utils.js'\n\nexport type GetConnectorClientParameters<\n config extends Config = Config,\n chainId extends\n config['chains'][number]['id'] = config['chains'][number]['id'],\n> = Compute<\n ChainIdParameter<config, chainId> &\n ConnectorParameter & {\n /**\n * Account to use for the client.\n *\n * - `Account | Address`: An Account MUST exist on the connector.\n * - `null`: Account MAY NOT exist on the connector. This is useful for\n * actions that can infer the account from the connector (e.g. sending a\n * call without a connected account – the user will be prompted to select\n * an account within the wallet).\n */\n account?: Address | Account | null | undefined\n }\n>\n\nexport type GetConnectorClientReturnType<\n config extends Config = Config,\n chainId extends\n config['chains'][number]['id'] = config['chains'][number]['id'],\n> = Compute<\n Client<\n config['_internal']['transports'][chainId],\n Extract<config['chains'][number], { id: chainId }>,\n Account\n >\n>\n\nexport type GetConnectorClientErrorType =\n | ConnectorAccountNotFoundErrorType\n | ConnectorChainMismatchErrorType\n | ConnectorNotConnectedErrorType\n | ConnectorUnavailableReconnectingErrorType\n // base\n | BaseErrorType\n | ErrorType\n\n/** https://wagmi.sh/core/api/actions/getConnectorClient */\nexport async function getConnectorClient<\n config extends Config,\n chainId extends config['chains'][number]['id'],\n>(\n config: config,\n parameters: GetConnectorClientParameters<config, chainId> = {},\n): Promise<GetConnectorClientReturnType<config, chainId>> {\n // Get connection\n let connection: Connection | undefined\n if (parameters.connector) {\n const { connector } = parameters\n if (\n config.state.status === 'reconnecting' &&\n !connector.getAccounts &&\n !connector.getChainId\n )\n throw new ConnectorUnavailableReconnectingError({ connector })\n\n const [accounts, chainId] = await Promise.all([\n connector.getAccounts().catch((e) => {\n if (parameters.account === null) return []\n throw e\n }),\n connector.getChainId(),\n ])\n connection = {\n accounts: accounts as readonly [Address, ...Address[]],\n chainId,\n connector,\n }\n } else connection = config.state.connections.get(config.state.current!)\n if (!connection) throw new ConnectorNotConnectedError()\n\n const chainId = parameters.chainId ?? connection.chainId\n\n // Check connector using same chainId as connection\n const connectorChainId = await connection.connector.getChainId()\n if (connectorChainId !== connection.chainId)\n throw new ConnectorChainMismatchError({\n connectionChainId: connection.chainId,\n connectorChainId,\n })\n\n // If connector has custom `getClient` implementation\n type Return = GetConnectorClientReturnType<config, chainId>\n const connector = connection.connector\n if (connector.getClient)\n return connector.getClient({ chainId }) as unknown as Return\n\n // Default using `custom` transport\n const account = parseAccount(parameters.account ?? connection.accounts[0]!)\n if (account) account.address = getAddress(account.address) // TODO: Checksum address as part of `parseAccount`?\n\n // If account was provided, check that it exists on the connector\n if (\n parameters.account &&\n !connection.accounts.some(\n (x) => x.toLowerCase() === account.address.toLowerCase(),\n )\n )\n throw new ConnectorAccountNotFoundError({\n address: account.address,\n connector,\n })\n\n const chain = config.chains.find((chain) => chain.id === chainId)\n const provider = (await connection.connector.getProvider({ chainId })) as {\n request(...args: any): Promise<any>\n }\n\n return createClient({\n account,\n chain,\n name: 'Connector Client',\n transport: (opts) => custom(provider)({ ...opts, retryCount: 0 }),\n }) as Return\n}\n","////////////////////////////////////////////////////////////////////////////////\n// Actions\n////////////////////////////////////////////////////////////////////////////////\n\n// biome-ignore lint/performance/noBarrelFile: entrypoint module\nexport {\n type CallErrorType,\n type CallParameters,\n type CallReturnType,\n call,\n} from '../actions/call.js'\n\nexport {\n type ConnectErrorType,\n type ConnectParameters,\n type ConnectReturnType,\n connect,\n} from '../actions/connect.js'\n\nexport {\n type DeployContractErrorType,\n type DeployContractParameters,\n type DeployContractReturnType,\n deployContract,\n} from '../actions/deployContract.js'\n\nexport {\n type DisconnectErrorType,\n type DisconnectParameters,\n type DisconnectReturnType,\n disconnect,\n} from '../actions/disconnect.js'\n\nexport {\n type EstimateGasErrorType,\n type EstimateGasParameters,\n type EstimateGasReturnType,\n estimateGas,\n} from '../actions/estimateGas.js'\n\nexport {\n type EstimateFeesPerGasErrorType,\n type EstimateFeesPerGasParameters,\n type EstimateFeesPerGasReturnType,\n estimateFeesPerGas,\n} from '../actions/estimateFeesPerGas.js'\n\nexport {\n type EstimateMaxPriorityFeePerGasErrorType,\n type EstimateMaxPriorityFeePerGasParameters,\n type EstimateMaxPriorityFeePerGasReturnType,\n estimateMaxPriorityFeePerGas,\n} from '../actions/estimateMaxPriorityFeePerGas.js'\n\nexport {\n type GetAccountReturnType,\n getAccount,\n} from '../actions/getAccount.js'\n\nexport {\n type GetBalanceParameters,\n type GetBalanceReturnType,\n type GetBalanceErrorType,\n getBalance,\n /** @deprecated use `getBalance` instead */\n getBalance as fetchBalance,\n} from '../actions/getBalance.js'\n\nexport {\n type GetBlockErrorType,\n type GetBlockParameters,\n type GetBlockReturnType,\n getBlock,\n} from '../actions/getBlock.js'\n\nexport {\n type GetBlockNumberErrorType,\n type GetBlockNumberParameters,\n type GetBlockNumberReturnType,\n getBlockNumber,\n /** @deprecated use `getBlockNumber` instead */\n getBlockNumber as fetchBlockNumber,\n} from '../actions/getBlockNumber.js'\n\nexport {\n type GetBlockTransactionCountErrorType,\n type GetBlockTransactionCountParameters,\n type GetBlockTransactionCountReturnType,\n getBlockTransactionCount,\n} from '../actions/getBlockTransactionCount.js'\n\nexport {\n type GetBytecodeErrorType,\n type GetBytecodeParameters,\n type GetBytecodeReturnType,\n getBytecode,\n} from '../actions/getBytecode.js'\n\nexport {\n type GetCallsStatusErrorType,\n type GetCallsStatusParameters,\n type GetCallsStatusReturnType,\n getCallsStatus,\n} from '../actions/getCallsStatus.js'\n\nexport {\n type GetCapabilitiesErrorType,\n type GetCapabilitiesParameters,\n type GetCapabilitiesReturnType,\n getCapabilities,\n} from '../actions/getCapabilities.js'\n\nexport {\n type GetChainIdReturnType,\n getChainId,\n} from '../actions/getChainId.js'\n\nexport {\n type GetChainsReturnType,\n getChains,\n} from '../actions/getChains.js'\n\nexport {\n type GetClientParameters,\n type GetClientReturnType,\n getClient,\n} from '../actions/getClient.js'\n\nexport {\n type GetConnectionsReturnType,\n getConnections,\n} from '../actions/getConnections.js'\n\nexport {\n type GetConnectorsReturnType,\n getConnectors,\n} from '../actions/getConnectors.js'\n\nexport {\n type GetConnectorClientErrorType,\n type GetConnectorClientParameters,\n type GetConnectorClientReturnType,\n getConnectorClient,\n} from '../actions/getConnectorClient.js'\n\nexport {\n type GetEnsAddressErrorType,\n type GetEnsAddressParameters,\n type GetEnsAddressReturnType,\n getEnsAddress,\n /** @deprecated use `getEnsAddress` instead */\n getEnsAddress as fetchEnsAddress,\n} from '../actions/getEnsAddress.js'\n\nexport {\n type GetEnsAvatarErrorType,\n type GetEnsAvatarParameters,\n type GetEnsAvatarReturnType,\n getEnsAvatar,\n /** @deprecated use `getEnsAvatar` instead */\n getEnsAvatar as fetchEnsAvatar,\n} from '../actions/getEnsAvatar.js'\n\nexport {\n type GetEnsNameErrorType,\n type GetEnsNameParameters,\n type GetEnsNameReturnType,\n getEnsName,\n /** @deprecated */\n getEnsName as fetchEnsName,\n} from '../actions/getEnsName.js'\n\nexport {\n type GetEnsResolverErrorType,\n type GetEnsResolverParameters,\n type GetEnsResolverReturnType,\n getEnsResolver,\n /** @deprecated use `getEnsResolver` instead */\n getEnsResolver as fetchEnsResolver,\n} from '../actions/getEnsResolver.js'\n\nexport {\n type GetEnsTextErrorType,\n type GetEnsTextParameters,\n type GetEnsTextReturnType,\n getEnsText,\n} from '../actions/getEnsText.js'\n\nexport {\n type GetFeeHistoryErrorType,\n type GetFeeHistoryParameters,\n type GetFeeHistoryReturnType,\n getFeeHistory,\n} from '../actions/getFeeHistory.js'\n\nexport {\n type GetGasPriceErrorType,\n type GetGasPriceParameters,\n type GetGasPriceReturnType,\n getGasPrice,\n} from '../actions/getGasPrice.js'\n\nexport {\n type GetProofErrorType,\n type GetProofParameters,\n type GetProofReturnType,\n getProof,\n} from '../actions/getProof.js'\n\nexport {\n type GetPublicClientParameters,\n type GetPublicClientReturnType,\n getPublicClient,\n} from '../actions/getPublicClient.js'\n\nexport {\n type GetStorageAtErrorType,\n type GetStorageAtParameters,\n type GetStorageAtReturnType,\n getStorageAt,\n} from '../actions/getStorageAt.js'\n\nexport {\n type GetTokenErrorType,\n type GetTokenParameters,\n type GetTokenReturnType,\n getToken,\n /** @deprecated use `getToken` instead */\n getToken as fetchToken,\n} from '../actions/getToken.js'\n\nexport {\n type GetTransactionErrorType,\n type GetTransactionParameters,\n type GetTransactionReturnType,\n getTransaction,\n /** @deprecated use `getTransaction` instead */\n getTransaction as fetchTransaction,\n} from '../actions/getTransaction.js'\n\nexport {\n type GetTransactionConfirmationsErrorType,\n type GetTransactionConfirmationsParameters,\n type GetTransactionConfirmationsReturnType,\n getTransactionConfirmations,\n} from '../actions/getTransactionConfirmations.js'\n\nexport {\n type GetTransactionCountErrorType,\n type GetTransactionCountParameters,\n type GetTransactionCountReturnType,\n getTransactionCount,\n} from '../actions/getTransactionCount.js'\n\nexport {\n type GetTransactionReceiptErrorType,\n type GetTransactionReceiptParameters,\n type GetTransactionReceiptReturnType,\n getTransactionReceipt,\n} from '../actions/getTransactionReceipt.js'\n\nexport {\n type GetWalletClientErrorType,\n type GetWalletClientParameters,\n type GetWalletClientReturnType,\n getWalletClient,\n} from '../actions/getWalletClient.js'\n\nexport {\n type MulticallParameters,\n type MulticallReturnType,\n multicall,\n} from '../actions/multicall.js'\n\nexport {\n type PrepareTransactionRequestErrorType,\n type PrepareTransactionRequestParameters,\n type PrepareTransactionRequestReturnType,\n prepareTransactionRequest,\n} from '../actions/prepareTransactionRequest.js'\n\nexport {\n type ReadContractParameters,\n type ReadContractReturnType,\n type ReadContractErrorType,\n readContract,\n} from '../actions/readContract.js'\n\nexport {\n type ReadContractsParameters,\n type ReadContractsReturnType,\n type ReadContractsErrorType,\n readContracts,\n} from '../actions/readContracts.js'\n\nexport {\n type ReconnectErrorType,\n type ReconnectParameters,\n type ReconnectReturnType,\n reconnect,\n} from '../actions/reconnect.js'\n\nexport {\n type SendCallsErrorType,\n type SendCallsParameters,\n type SendCallsReturnType,\n sendCalls,\n} from '../actions/sendCalls.js'\n\nexport {\n type SendTransactionErrorType,\n type SendTransactionParameters,\n type SendTransactionReturnType,\n sendTransaction,\n} from '../actions/sendTransaction.js'\n\nexport {\n type ShowCallsStatusErrorType,\n type ShowCallsStatusParameters,\n type ShowCallsStatusReturnType,\n showCallsStatus,\n} from '../actions/showCallsStatus.js'\n\nexport {\n type SignMessageErrorType,\n type SignMessageParameters,\n type SignMessageReturnType,\n signMessage,\n} from '../actions/signMessage.js'\n\nexport {\n type SignTypedDataErrorType,\n type SignTypedDataParameters,\n type SignTypedDataReturnType,\n signTypedData,\n} from '../actions/signTypedData.js'\n\nexport {\n type SimulateContractErrorType,\n type SimulateContractParameters,\n type SimulateContractReturnType,\n simulateContract,\n} from '../actions/simulateContract.js'\n\nexport {\n type SwitchAccountErrorType,\n type SwitchAccountParameters,\n type SwitchAccountReturnType,\n switchAccount,\n} from '../actions/switchAccount.js'\n\nexport {\n type SwitchChainErrorType,\n type SwitchChainParameters,\n type SwitchChainReturnType,\n switchChain,\n /** @deprecated use `switchChain` instead */\n switchChain as switchNetwork,\n} from '../actions/switchChain.js'\n\nexport {\n type VerifyMessageErrorType,\n type VerifyMessageParameters,\n type VerifyMessageReturnType,\n verifyMessage,\n} from '../actions/verifyMessage.js'\n\nexport {\n type VerifyTypedDataErrorType,\n type VerifyTypedDataParameters,\n type VerifyTypedDataReturnType,\n verifyTypedData,\n} from '../actions/verifyTypedData.js'\n\nexport {\n type WaitForCallsStatusErrorType,\n type WaitForCallsStatusParameters,\n type WaitForCallsStatusReturnType,\n waitForCallsStatus,\n} from '../actions/waitForCallsStatus.js'\n\nexport {\n type WatchAccountParameters,\n type WatchAccountReturnType,\n watchAccount,\n} from '../actions/watchAccount.js'\n\nexport {\n type WatchAssetParameters,\n type WatchAssetErrorType,\n type WatchAssetReturnType,\n watchAsset,\n} from '../actions/watchAsset.js'\n\nexport {\n type WatchBlocksParameters,\n type WatchBlocksReturnType,\n watchBlocks,\n} from '../actions/watchBlocks.js'\n\nexport {\n type WatchBlockNumberParameters,\n type WatchBlockNumberReturnType,\n watchBlockNumber,\n} from '../actions/watchBlockNumber.js'\n\nexport {\n type WatchChainIdParameters,\n type WatchChainIdReturnType,\n watchChainId,\n} from '../actions/watchChainId.js'\n\nexport {\n type WatchClientParameters,\n type WatchClientReturnType,\n watchClient,\n} from '../actions/watchClient.js'\n\nexport {\n type WatchConnectionsParameters,\n type WatchConnectionsReturnType,\n watchConnections,\n} from '../actions/watchConnections.js'\n\nexport {\n type WatchConnectorsParameters,\n type WatchConnectorsReturnType,\n watchConnectors,\n} from '../actions/watchConnectors.js'\n\nexport {\n type WatchContractEventParameters,\n type WatchContractEventReturnType,\n watchContractEvent,\n} from '../actions/watchContractEvent.js'\n\nexport {\n type WatchPendingTransactionsParameters,\n type WatchPendingTransactionsReturnType,\n watchPendingTransactions,\n} from '../actions/watchPendingTransactions.js'\n\nexport {\n type WatchPublicClientParameters,\n type WatchPublicClientReturnType,\n watchPublicClient,\n} from '../actions/watchPublicClient.js'\n\nexport {\n type WaitForTransactionReceiptErrorType,\n type WaitForTransactionReceiptParameters,\n type WaitForTransactionReceiptReturnType,\n waitForTransactionReceipt,\n /** @deprecated use `waitForTransactionReceipt` instead */\n waitForTransactionReceipt as waitForTransaction,\n} from '../actions/waitForTransactionReceipt.js'\n\nexport {\n type WriteContractErrorType,\n type WriteContractParameters,\n type WriteContractReturnType,\n writeContract,\n} from '../actions/writeContract.js'\n\n////////////////////////////////////////////////////////////////////////////////\n// Connectors\n////////////////////////////////////////////////////////////////////////////////\n\nexport {\n type ConnectorEventMap,\n type CreateConnectorFn,\n createConnector,\n} from '../connectors/createConnector.js'\n\nexport {\n type InjectedParameters,\n injected,\n} from '../connectors/injected.js'\n\nexport {\n type MockParameters,\n mock,\n} from '../connectors/mock.js'\n\n////////////////////////////////////////////////////////////////////////////////\n// createConfig\n////////////////////////////////////////////////////////////////////////////////\n\nexport {\n type Connection,\n type Connector,\n type Config,\n type CreateConfigParameters,\n type PartializedState,\n type State,\n type Transport,\n createConfig,\n} from '../createConfig.js'\n\n////////////////////////////////////////////////////////////////////////////////\n// createStorage\n////////////////////////////////////////////////////////////////////////////////\n\nexport {\n type CreateStorageParameters,\n type Storage,\n type StorageItemMap,\n createStorage,\n noopStorage,\n} from '../createStorage.js'\n\n////////////////////////////////////////////////////////////////////////////////\n// Hydrate\n////////////////////////////////////////////////////////////////////////////////\n\nexport { hydrate } from '../hydrate.js'\n\n////////////////////////////////////////////////////////////////////////////////\n// Errors\n////////////////////////////////////////////////////////////////////////////////\n\nexport { BaseError } from '../errors/base.js'\n\nexport {\n type ChainNotConfiguredErrorType,\n ChainNotConfiguredError,\n type ConnectorNotConnectedErrorType,\n ConnectorNotConnectedError,\n type ConnectorAlreadyConnectedErrorType,\n ConnectorAlreadyConnectedError,\n type ConnectorNotFoundErrorType,\n ConnectorNotFoundError,\n type ConnectorAccountNotFoundErrorType,\n ConnectorAccountNotFoundError,\n type ConnectorChainMismatchErrorType,\n ConnectorChainMismatchError,\n type ConnectorUnavailableReconnectingErrorType,\n ConnectorUnavailableReconnectingError,\n} from '../errors/config.js'\n\nexport {\n type ProviderNotFoundErrorType,\n ProviderNotFoundError,\n type SwitchChainNotSupportedErrorType,\n SwitchChainNotSupportedError,\n} from '../errors/connector.js'\n\n////////////////////////////////////////////////////////////////////////////////\n// Transports\n////////////////////////////////////////////////////////////////////////////////\n\nexport { custom, http, webSocket } from 'viem'\n\nexport {\n type ConnectorTransportConfig,\n type ConnectorTransport,\n unstable_connector,\n} from '../transports/connector.js'\n\nexport { fallback } from '../transports/fallback.js'\n\n////////////////////////////////////////////////////////////////////////////////\n// Types\n////////////////////////////////////////////////////////////////////////////////\n\nexport type { SelectChains } from '../types/chain.js'\n\nexport type { Register, ResolvedRegister } from '../types/register.js'\n\n////////////////////////////////////////////////////////////////////////////////\n// Utilities\n////////////////////////////////////////////////////////////////////////////////\n\nexport {\n cookieStorage,\n cookieToInitialState,\n parseCookie,\n} from '../utils/cookie.js'\n\nexport { deepEqual } from '../utils/deepEqual.js'\n\nexport { deserialize } from '../utils/deserialize.js'\n\nexport { extractRpcUrls } from '../utils/extractRpcUrls.js'\n\nexport { normalizeChainId } from '../utils/normalizeChainId.js'\n\nexport { serialize } from '../utils/serialize.js'\n\n////////////////////////////////////////////////////////////////////////////////\n// Version\n////////////////////////////////////////////////////////////////////////////////\n\nexport { version } from '../version.js'\n","import {BindWalletParam, ModalWithHeaderProps} from \"../../types/types\";\nimport {ModalWithHeader} from \"../../ui/Modal\";\nimport React, {useEffect, useMemo, useState} from \"react\";\nimport {getWalletInitApi, getWalletNonceApi, loginByWalletApi, toBindWalletApi} from \"../../api\";\nimport {isSuccess} from \"../../api/request\";\nimport matchlog from \"../../utils/matchlog\";\nimport {useMatch} from \"../../MatchContext\";\nimport eventManager from \"../../hooks/eventManager\";\nimport {useIntl} from \"react-intl\";\nimport WalletModalContent from \"../WalletModalContent\";\nimport {useTRONWallet} from \"../../hooks/useTRONWallet\";\nimport {RecommendItem} from \"../LoginBox\";\nimport {BitgetIcon, OKXIcon, TronLinkIcon} from \"../../assets/icon\";\nimport {useDownMd} from \"../../hooks/useLayout\";\nimport {Button} from \"../index\";\ntype TRONConnectModalProps = ModalWithHeaderProps & {\n type?: 'login' | 'bind' | ''\n onSuccess?: () => void\n}\nfunction TRONConnectModal({\n type = 'login',\n onSuccess,\n ...props\n }:TRONConnectModalProps) {\n const isDownMd = useDownMd()\n const intl = useIntl()\n const {wallets, installedWallets, chooseWallet, wallet, address, onConnect} = useTRONWallet()\n const iconMaps = {\n tronlink: <TronLinkIcon size={isDownMd ? 36 : 40}/>,\n bitget: <BitgetIcon size={isDownMd ? 36 : 40}/>,\n okx:<OKXIcon size={isDownMd ? 36 : 40}/>\n }\n\n const {events, login} = useMatch()\n const [status, setStatus] = useState<'' | 'nonce' | 'signer' | 'success' | 'error'>('')\n const statusRef = React.useRef(status)\n const [error, setError] = useState('')\n const connected = useMemo(() => {\n return !!address\n }, [address])\n const disconnect = async () => {\n setStatus('')\n chooseWallet(null)\n statusRef.current = ''\n setError('')\n }\n\n const onBack = ()=>{\n setStatus('')\n chooseWallet(null)\n statusRef.current = ''\n setError('')\n }\n\n const toLoginInWallet = async () => {\n if (statusRef.current || !address || !wallet) return\n try {\n setStatus('nonce')\n statusRef.current = 'nonce'\n const res = type == 'bind' ? await getWalletInitApi({address,type:\"TRON\"}) : await getWalletNonceApi({address,type:\"TRON\"});\n if (!isSuccess(res)) {\n throw new Error(res.message)\n }\n const nonce = res.code >= 0 ? res.data.nonce : null;\n if (nonce) {\n setStatus('signer')\n statusRef.current = 'signer'\n const message = \"By signing, you are proving you own this wallet and logging in. This does not initiate a transaction or cost any fees.Nonce:\" + res.data.nonce;\n const signedMessage = await wallet.signMessage(message);\n let obj: BindWalletParam = {\n type: 'TRON',\n address: address,\n signature: signedMessage,\n message: message,\n connector_type: 'TRON',\n wallet_client_type: wallet.walletKey\n }\n const res1 = type == 'bind' ? await toBindWalletApi(obj) : await loginByWalletApi(obj)\n if (res1) {\n if (!isSuccess(res1)) {\n throw new Error(res1.message)\n }\n matchlog.log(res1)\n setStatus('success')\n statusRef.current = 'success'\n if (type == 'bind') {\n events!.onBind && events!.onBind({\n type: 'tron'\n })\n eventManager.emit('onBind', {\n type: 'tron'\n })\n } else {\n await login({\n // mid: res1.data.mid,\n token: `${res1.data.token_type} ${res1.data.access_token}`\n })\n }\n onSuccess && onSuccess()\n }\n }\n } catch (error: any) {\n // toast.error(error.message)\n // disconnect()\n setStatus('error')\n setError(error.message)\n statusRef.current = ''\n }\n }\n\n useEffect(() => {\n if (wallet) {\n console.log('onConnect')\n onConnect()\n } else {\n setStatus('')\n }\n }, [wallet]);\n\n useEffect(() => {\n if (address) {\n toLoginInWallet()\n }\n }, [address]);\n\n useEffect(() => {\n if (!props.isOpen) {\n disconnect()\n }\n }, [props.isOpen]);\n\n return <ModalWithHeader {...props} title={props.title || (intl.formatMessage({\n id: type == \"bind\" ? \"bindWith\" : \"loginWith\"\n }, {\n name: \"TRON\"\n }))} onBack={wallet ? onBack : undefined}>\n {\n wallet ? <WalletModalContent error={error} setError={setError} status={status} disconnect={disconnect}\n address={address || ''} connected={connected} visible setVisible={() => {\n }}/> : <div className=\"matchid-login-box\">\n <div className=\"matchid-login-recommend-list\">\n {\n installedWallets.map(wallet => {\n return <RecommendItem\n key={wallet.walletKey}\n icon={iconMaps[wallet.walletKey as keyof typeof iconMaps]}\n name={wallet.name} onClick={() => {\n chooseWallet(wallet)\n }}/>\n })\n }\n {\n wallets.filter(wallet => !installedWallets.find(installedWallet => installedWallet.walletKey == wallet.walletKey)).map(wallet => {\n return <RecommendItem key={wallet.walletKey}\n icon={iconMaps[wallet.walletKey as keyof typeof iconMaps]}\n name={wallet.name} onClick={() => {\n }}\n footer={<Button size=\"sm\" onClick={() => {\n window.open(wallet.website)\n }}>Install</Button>}/>\n })\n }\n\n\n </div>\n </div>\n }\n </ModalWithHeader>\n}\n\nexport default function TRONModal(props: TRONConnectModalProps) {\n return props.isOpen&&<TRONConnectModal {...props} type={props.type}/>\n}","import {TRONWalletAdapter} from \"../WalletAdapter\";\n\nexport class TronLinkAdapter implements TRONWalletAdapter {\n name = \"TronLink Wallet\";\n website = \"https://www.tronlink.org/\"\n walletKey = \"tronlink\"\n\n async isInstalled() {\n return typeof window.tronWeb !== \"undefined\" && typeof window.tronLink !== \"undefined\"\n }\n\n async connect(): Promise<string> {\n if (!await this.isInstalled()) throw new Error(\"TronLink Wallet is not installed\");\n if (!window.tronWeb.defaultAddress.base58) {\n await window.tronWeb.request(\n {\n method: 'tron_requestAccounts',\n params: window.tronLink.tronlinkParams,\n }\n )\n }\n if (!window.tronWeb.defaultAddress.base58) {\n throw new Error(\"Your should unlink your wallet and try again\")\n }\n return window.tronWeb.defaultAddress.base58\n }\n\n async signMessage(message: string): Promise<string> {\n return await window.tronWeb.trx.signMessageV2(message)\n }\n}\n","import {TRONWalletAdapter} from \"../lib/WalletAdapter\";\nimport {TronLinkAdapter} from \"../lib/tron/TronLinkAdapter\";\nimport {useEffect, useState} from \"react\";\nimport {BitgetAdapter} from \"../lib/tron/BitgetAdapter\";\nimport {OKXAdapter} from \"../lib/tron/OKXAdapter\";\n\nexport const useTRONWallet = () => {\n\n const wallets: TRONWalletAdapter[] = [new TronLinkAdapter(), new BitgetAdapter(),new OKXAdapter()];\n const [installedWallets, setInstalledWallets] = useState<TRONWalletAdapter[]>([]);\n const [address, setAddress] = useState<string | null>(null);\n useEffect(() => {\n const getInstalled = async () => {\n const installed = await Promise.all(wallets.map(wallet => wallet.isInstalled().then(isInstalled => ({\n wallet,\n isInstalled\n }))));\n setInstalledWallets(installed.filter(({isInstalled}) => isInstalled).map(({wallet}) => wallet));\n };\n // console.log('getInstalled');\n getInstalled();\n }, []);\n\n const [wallet, chooseWallet] = useState<TRONWalletAdapter | null>(null);\n\n const onConnect = async () => {\n setAddress(await wallet!.connect());\n }\n useEffect(() => {\n\n if (!wallet) {\n setAddress(null)\n }\n }, [wallet]);\n\n return {\n installedWallets,\n wallets,\n chooseWallet,\n wallet,\n address,\n onConnect\n\n }\n\n}","import {TRONWalletAdapter} from \"../WalletAdapter\";\n\nexport class BitgetAdapter implements TRONWalletAdapter {\n name = \"Bitget Wallet\";\n website = \"https://web3.bitget.com/zh-CN/wallet-download\"\n walletKey = \"bitget\"\n\n async isInstalled() {\n return typeof window.bitkeep !== \"undefined\" && typeof window.bitkeep.tronWeb !== \"undefined\" && typeof window.bitkeep.tronLink !== \"undefined\"\n }\n\n async connect(): Promise<string> {\n if (!await this.isInstalled()) throw new Error(\"Bitkeep Wallet is not installed\");\n await window.bitkeep.tronLink.request({method: \"tron_requestAccounts\"});\n return window.bitkeep.tronWeb.defaultAddress.base58\n }\n\n async signMessage(message: string): Promise<string> {\n return await window.bitkeep.tronWeb.trx.signMessageV2(message)\n }\n}\n","import {TRONWalletAdapter} from \"../WalletAdapter\";\n\nexport class OKXAdapter implements TRONWalletAdapter {\n name = \"OKX Wallet\";\n website = \"https://www.okx.com/zh-hans/download\"\n walletKey = \"okx\"\n\n async isInstalled() {\n return typeof window.okxwallet !== \"undefined\" && typeof window.okxwallet.tronWeb !== \"undefined\" && typeof window.okxwallet.tronLink !== \"undefined\"\n }\n\n async connect(): Promise<string> {\n if (!await this.isInstalled()) throw new Error(\"OKX Wallet is not installed\");\n await window.okxwallet.tronLink.request({method: \"tron_requestAccounts\"});\n return window.okxwallet.tronWeb.defaultAddress.base58\n }\n\n async signMessage(message: string): Promise<string> {\n return await window.okxwallet.tronWeb.trx.signMessageV2(message)\n }\n}\n","import {BindWalletParam, ModalWithHeaderProps} from \"../../types/types\";\nimport {ModalWithHeader} from \"../../ui/Modal\";\nimport React, {useEffect, useState} from \"react\";\nimport {getWalletInitApi, getWalletNonceApi, loginByWalletApi, toBindWalletApi} from \"../../api\";\nimport {isSuccess} from \"../../api/request\";\nimport matchlog from \"../../utils/matchlog\";\nimport {useMatch} from \"../../MatchContext\";\nimport eventManager from \"../../hooks/eventManager\";\nimport {useIntl} from \"react-intl\";\nimport WalletModalContent from \"../WalletModalContent\";\nimport {\n TonConnectUIProvider,\n useTonAddress,\n useTonConnectModal,\n useTonConnectUI,\n useTonWallet,\n} from '@tonconnect/ui-react';\nimport useLocalStore from \"../../store/useLocalStore\";\n\nfunction WalletContent({\n onSuccess,\n type,\n }: {\n onSuccess?: () => void\n type: 'login' | 'bind' | ''\n}) {\n const {events, login} = useMatch()\n const [connected, setConnected] = useState(false);\n const wallet = useTonWallet();\n const userFriendlyAddress = useTonAddress();\n const [tonConnectUI] = useTonConnectUI();\n const {state, open, close} = useTonConnectModal();\n const [status, setStatus] = useState<'' | 'nonce' | 'signer' | 'success' | 'error'>('')\n const statusRef = React.useRef(status)\n const [error, setError] = useState('')\n\n\n useEffect(() => {\n const init = async () => {\n if (tonConnectUI.connected) {\n await tonConnectUI.disconnect();\n }\n open()\n };\n init();\n tonConnectUI.onStatusChange(wallet => {\n matchlog.log('onStatusChange:', wallet, wallet?.connectItems?.tonProof, JSON.stringify(wallet?.connectItems?.tonProof));\n if (wallet?.connectItems?.tonProof && 'proof' in wallet!.connectItems.tonProof) {\n matchlog.log(wallet?.connectItems.tonProof.proof, wallet?.account);\n const toLoginInWallet = async () => {\n if (statusRef.current || !wallet) return\n setStatus('signer')\n statusRef.current = 'signer'\n try {\n const signature = {\n \"address\": wallet?.account?.address,\n \"network\": wallet?.account?.chain,\n \"public_key\": wallet?.account?.publicKey,\n \"proof\": {\n //@ts-ignore\n ...wallet?.connectItems?.tonProof?.proof,\n \"state_init\": wallet?.account?.walletStateInit\n }\n }\n let obj: BindWalletParam = {\n type: 'TON',\n address: wallet?.account?.publicKey as string,\n signature: JSON.stringify(signature),\n //@ts-ignore\n message:wallet?.connectItems?.tonProof?.proof.payload,\n connector_type: \"TON\",\n wallet_client_type: wallet?.name\n }\n console.log('signature', {\n signature,\n obj\n })\n\n const res1 = type == 'bind' ? await toBindWalletApi(obj) : await loginByWalletApi(obj)\n if (res1) {\n if (!isSuccess(res1)) {\n throw new Error(res1.message)\n }\n matchlog.log(res1)\n setStatus('success')\n statusRef.current = 'success'\n if (type == 'bind') {\n events!.onBind && events!.onBind({\n type: 'ton'\n })\n eventManager.emit('onBind', {\n type: 'ton'\n })\n } else {\n await login({\n // mid: res1.data.mid,\n token: `${res1.data.token_type} ${res1.data.access_token}`\n })\n }\n onSuccess && onSuccess()\n }\n\n } catch (error: any) {\n // toast.error(error.message)\n // disconnect()\n setStatus('error')\n setError(error.message)\n statusRef.current = ''\n }\n }\n toLoginInWallet()\n }\n })\n }, []);\n useEffect(() => {\n if (wallet) {\n setConnected(true);\n console.log('Wallet connected:', wallet);\n } else {\n setConnected(false);\n open()\n statusRef.current = ''\n setStatus('')\n }\n }, [wallet]);\n\n useEffect(() => {\n console.log({\n state,\n wallet\n })\n if (state.status=='opened') {\n const init = async () => {\n tonConnectUI.setConnectRequestParameters({state: 'loading'});\n const res = type == 'bind' ? await getWalletInitApi({\n address: \"tonconnect\",\n type: \"TON\"\n }) : await getWalletNonceApi({address: \"tonconnect\", type: \"TON\"});\n if (!isSuccess(res)) {\n tonConnectUI.setConnectRequestParameters(null);\n throw new Error(res.message)\n }\n tonConnectUI.setConnectRequestParameters({\n state: \"ready\",\n value: {tonProof: res.data.nonce}\n });\n };\n init();\n }else{\n if(!wallet){\n setStatus('')\n statusRef.current = ''\n }\n }\n }, [state]);\n\n\n return <WalletModalContent\n connected={connected}\n disconnect={tonConnectUI.disconnect}\n address={userFriendlyAddress}\n visible={state.status=='opened'}\n setVisible={async(v)=>{\n console.log('setVisible',v)\n\n if(v){\n if (tonConnectUI.connected) {\n await tonConnectUI.disconnect();\n }\n setStatus('')\n statusRef.current = ''\n open()\n }else{\n close()\n }\n }}\n error={error}\n setError={setError}\n status={status}\n />\n}\ntype TonModalProps = ModalWithHeaderProps & {\n type?: 'login' | 'bind' | ''\n onSuccess?: () => void\n}\nfunction TONConnectModal({\n type = 'login',\n onSuccess,\n ...props\n }: TonModalProps) {\n const intl = useIntl()\n const {endpoints, appid} = useLocalStore()\n const manifestUrl = `${endpoints.back}api/v1/wallet/ton?appid=${appid}&url=` + encodeURIComponent(window.location.origin)\n return <ModalWithHeader {...props} title={props.title || (intl.formatMessage({\n id: type == \"bind\" ? \"bindWith\" : \"loginWith\"\n }, {\n name: \"TON\"\n }))}>\n\n <TonConnectUIProvider\n manifestUrl={manifestUrl}>\n <WalletContent onSuccess={onSuccess} type={type}/>\n </TonConnectUIProvider>\n </ModalWithHeader>\n}\nexport default function TONModal(props: TonModalProps) {\n return props.isOpen && <TONConnectModal {...props}/>\n}","import {BindWalletParam, ModalWithHeaderProps} from \"../../types/types\";\nimport {ModalWithHeader} from \"../../ui/Modal\";\nimport React, {useEffect, useMemo, useState} from \"react\";\nimport {getWalletInitApi, getWalletNonceApi, loginByWalletApi, toBindWalletApi} from \"../../api\";\nimport {isSuccess} from \"../../api/request\";\nimport matchlog from \"../../utils/matchlog\";\nimport {useMatch} from \"../../MatchContext\";\nimport eventManager from \"../../hooks/eventManager\";\nimport {useIntl} from \"react-intl\";\nimport WalletModalContent from \"../WalletModalContent\";\nimport {useBTCWallet} from \"../../hooks/useBTCWallet\";\nimport {RecommendItem} from \"../LoginBox\";\nimport {LeatherIcon, PhantomIcon, UnisatIcon, XverseIcon} from \"../../assets/icon\";\nimport {useDownMd} from \"../../hooks/useLayout\";\nimport {Button} from \"../index\";\ntype BTCConnectModalProps = ModalWithHeaderProps & {\n type?: 'login' | 'bind' | ''\n onSuccess?: () => void\n}\nfunction BTCConnectModal({\n type = 'login',\n onSuccess,\n ...props\n }: BTCConnectModalProps) {\n const isDownMd = useDownMd()\n const intl = useIntl()\n const {wallets, installedWallets, chooseWallet, wallet, address, onConnect} = useBTCWallet()\n const iconMaps = {\n leather: <LeatherIcon size={isDownMd ? 36 : 40}/>,\n unisat: <UnisatIcon size={isDownMd ? 36 : 40}/>,\n xverse: <XverseIcon size={isDownMd ? 36 : 40}/>,\n phantom:<PhantomIcon size={isDownMd ? 36 : 40}/>,\n }\n\n const {events, login} = useMatch()\n const [status, setStatus] = useState<'' | 'nonce' | 'signer' | 'success' | 'error'>('')\n const statusRef = React.useRef(status)\n const [error, setError] = useState('')\n const connected = useMemo(() => {\n return !!address\n }, [address])\n const disconnect = async () => {\n wallet&& wallet.disconnet &&wallet!.disconnet!()\n setStatus('')\n chooseWallet(null)\n statusRef.current = ''\n setError('')\n }\n\n const toLoginInWallet = async () => {\n if (statusRef.current || !address || !wallet) return\n try {\n setStatus('nonce')\n statusRef.current = 'nonce'\n const res = type == 'bind' ? await getWalletInitApi({address,type:\"BTC\"}) : await getWalletNonceApi({address,type:\"BTC\"});\n if (!isSuccess(res)) {\n throw new Error(res.message)\n }\n const nonce = res.code >= 0 ? res.data.nonce : null;\n if (nonce) {\n setStatus('signer')\n statusRef.current = 'signer'\n const message = \"By signing, you are proving you own this wallet and logging in. This does not initiate a transaction or cost any fees.Nonce:\" + res.data.nonce;\n const signedMessage = await wallet.signMessage(message);\n let obj: BindWalletParam = {\n type: 'BTC',\n address: address,\n signature: signedMessage,\n message: message,\n connector_type: 'BTC',\n wallet_client_type: wallet.walletKey\n }\n const res1 = type == 'bind' ? await toBindWalletApi(obj) : await loginByWalletApi(obj)\n if (res1) {\n if (!isSuccess(res1)) {\n throw new Error(res1.message)\n }\n matchlog.log(res1)\n setStatus('success')\n statusRef.current = 'success'\n if (type == 'bind') {\n events!.onBind && events!.onBind({\n type: 'btc'\n })\n eventManager.emit('onBind', {\n type: 'btc'\n })\n } else {\n await login({\n // mid: res1.data.mid,\n token: `${res1.data.token_type} ${res1.data.access_token}`\n })\n }\n onSuccess && onSuccess()\n }\n }\n } catch (error: any) {\n // toast.error(error.message)\n // disconnect()\n console.error('btc error',error)\n setStatus('error')\n setError(error.message)\n statusRef.current = ''\n }\n }\n\n useEffect(() => {\n if (wallet) {\n console.log('onConnect')\n try{\n onConnect()\n }catch(err:any){\n setStatus('error')\n setError(err.message)\n }\n } else {\n setStatus('')\n }\n }, [wallet]);\n\n useEffect(() => {\n if (address) {\n toLoginInWallet()\n }\n }, [address]);\n\n useEffect(() => {\n if (!props.isOpen) {\n disconnect()\n }\n }, [props.isOpen]);\n\n const onBack = ()=>{\n wallet&& wallet.disconnet &&wallet!.disconnet!()\n setStatus('')\n chooseWallet(null)\n statusRef.current = ''\n setError('')\n }\n\n return <ModalWithHeader {...props} title={props.title || (intl.formatMessage({\n id: type == \"bind\" ? \"bindWith\" : \"loginWith\"\n }, {\n name: \"BTC\"\n }))} onBack={wallet ? onBack: undefined}>\n {\n wallet ? <WalletModalContent error={error} setError={setError} status={status} disconnect={disconnect}\n address={address || ''} connected={connected} visible setVisible={() => {\n }}/> : <div className=\"matchid-login-box\">\n <div className=\"matchid-login-recommend-list\">\n {\n installedWallets.map(wallet => {\n return <RecommendItem\n key={wallet.walletKey}\n icon={iconMaps[wallet.walletKey as keyof typeof iconMaps]}\n name={wallet.name} onClick={() => {\n chooseWallet(wallet)\n }}/>\n })\n }\n {\n wallets.filter(wallet => !installedWallets.find(installedWallet => installedWallet.walletKey == wallet.walletKey)).map(wallet => {\n return <RecommendItem key={wallet.walletKey}\n icon={iconMaps[wallet.walletKey as keyof typeof iconMaps]}\n name={wallet.name} onClick={() => {\n }}\n footer={<Button size=\"sm\" onClick={() => {\n window.open(wallet.website)\n }}>Install</Button>}/>\n })\n }\n\n\n </div>\n </div>\n }\n </ModalWithHeader>\n}\n\nexport default function BTCModal(props: BTCConnectModalProps) {\n return props.isOpen && <BTCConnectModal {...props}/>\n}","import {BTCWalletAdapter} from \"../WalletAdapter\";\nimport matchlog from \"../../utils/matchlog\";\n\nexport class UnisatAdapter implements BTCWalletAdapter {\n name = \"Unisat Wallet\";\n website=\"https://unisat.io/\"\n walletKey=\"unisat\"\n\n\n async isInstalled() {\n return typeof window.unisat !== \"undefined\";\n }\n\n async checkChain(){\n const chain =await window.unisat.getChain()\n\n if(chain.enum!=\"BITCOIN_MAINNET\"){\n await window.unisat.switchChain(\"BITCOIN_MAINNET\")\n }\n }\n\n async connect(): Promise<string> {\n if (!await this.isInstalled()) throw new Error(\"Unisat Wallet is not installed\");\n window.unisat.disconnect()\n await this.checkChain()\n const accounts = await window.unisat.getAccounts();\n matchlog.log(\"accounts\",accounts)\n if (accounts.length === 0) {\n const accounts = await window.unisat.requestAccounts();\n matchlog.log(\"accounts\",accounts)\n if (!accounts || accounts.length === 0) throw new Error(\"No accounts found in Unisat Wallet\");\n\n return accounts[0];\n }\n // await this.checkChain()\n return accounts[0];\n }\n\n async signMessage(message: string): Promise<string> {\n if (!await this.isInstalled()) throw new Error(\"Unisat Wallet is not installed\");\n return window.unisat.signMessage(message,\"bip322-simple\");\n }\n\n async disconnet(): Promise<void> {\n if (!await this.isInstalled()) throw new Error(\"Unisat Wallet is not installed\");\n return window.unisat.disconnect()\n }\n}\n","import {BTCWalletAdapter} from \"../WalletAdapter\";\nimport {\n AddressPurpose,\n BitcoinNetworkType, Capability,\n getCapabilities,\n signMessage,\n request,\n} from \"sats-connect\";\nimport matchlog from \"../../utils/matchlog\";\n\nexport class XverseAdapter implements BTCWalletAdapter {\n name = \"Xverse Wallet\";\n website = \"https://www.xverse.app/\"\n capabilities: Set<Capability> | null = null;\n address = '';\n network = BitcoinNetworkType.Mainnet;\n walletKey = \"xverse\"\n\n async isInstalled() {\n return new Promise<boolean>(async (resolve) => {\n try {\n await getCapabilities({\n onFinish: (response: any) => {\n matchlog.log(response)\n this.capabilities = (new Set(response));\n resolve(true);\n },\n onCancel() {\n },\n payload: {\n network: {\n type: this.network\n },\n },\n });\n } catch (err) {\n matchlog.error(err)\n resolve(false);\n }\n\n\n });\n }\n\n async connect(): Promise<string> {\n if (!await this.isInstalled()) throw new Error(\"Xverse Wallet is not installed\");\n const response = await request('getAccounts', {\n purposes: [AddressPurpose.Ordinals],\n message: 'SATS Connect Demo',\n });\n matchlog.log(\"getAccounts ~ response:\", response)\n if (response.status === 'success') {\n const ordinalsAddressItem = response.result.find(\n (address) => address.purpose === AddressPurpose.Ordinals\n );\n this.address = ordinalsAddressItem?.address || '';\n return ordinalsAddressItem?.address || '';\n\n } else {\n if (response.error) {\n console.error(response.error)\n throw new Error(\"Error getting accounts. Check console for error logs\");\n }\n throw new Error(\"Error getting accounts\");\n }\n }\n\n async signMessage(message: string): Promise<string> {\n if (!await this.isInstalled()) throw new Error(\"Xverse Wallet is not installed\");\n return new Promise<string>(async (resolve, reject) => {\n await signMessage({\n payload: {\n network: {\n type: this.network,\n },\n address: this.address,\n message,\n },\n onFinish: (response) => {\n resolve(response);\n },\n onCancel: () => {\n reject(\"User cancelled\")\n }\n });\n\n });\n }\n\n async disconnet(): Promise<void> {\n if (!await this.isInstalled()) throw new Error(\"Xverse Wallet is not installed\");\n await request('wallet_disconnect', null);\n }\n}\n","import {BTCWalletAdapter} from \"../WalletAdapter\";\nimport matchlog from \"../../utils/matchlog\";\n\nexport class LeatherAdapter implements BTCWalletAdapter {\n name = \"Leather Wallet\";\n website=\"https://leather.io/\"\n walletKey=\"leather\"\n\n async isInstalled() {\n return typeof window.LeatherProvider !== \"undefined\";\n }\n\n async connect(): Promise<string> {\n if (!await this.isInstalled()) throw new Error(\"Leather Wallet is not installed\");\n const response = await window.LeatherProvider?.request(\"getAddresses\");\n\n matchlog.log(\"Addresses:\", response.result.addresses);\n\n return response.result.addresses[0].address\n }\n\n async signMessage(message: string): Promise<string> {\n if (!await this.isInstalled()) throw new Error(\"Leather Wallet is not installed\");\n const response = await window.LeatherProvider?.request(\"signMessage\", {message})\n matchlog.log(\"response\", response)\n return response.result.signature\n }\n}\n","import {BTCWalletAdapter} from \"../lib/WalletAdapter\";\nimport {UnisatAdapter} from \"../lib/btc/UnisatAdapter\";\nimport {XverseAdapter} from \"../lib/btc/XverseAdapter\";\nimport {LeatherAdapter} from \"../lib/btc/LeatherAdapter\";\nimport {useEffect, useState} from \"react\";\nimport {PhantomAdapter} from \"../lib/btc/PhantomAdapter\";\n\nexport const useBTCWallet = () => {\n\n const wallets: BTCWalletAdapter[] = [new UnisatAdapter(), new XverseAdapter(), new LeatherAdapter(),new PhantomAdapter()];\n const [installedWallets, setInstalledWallets] = useState<BTCWalletAdapter[]>([]);\n const [address, setAddress] = useState<string | null>(null);\n useEffect(() => {\n const getInstalled = async () => {\n const installed = await Promise.all(wallets.map(wallet => wallet.isInstalled().then(isInstalled => ({\n wallet,\n isInstalled\n }))));\n setInstalledWallets(installed.filter(({isInstalled}) => isInstalled).map(({wallet}) => wallet));\n };\n // console.log('getInstalled');\n getInstalled();\n }, []);\n\n const [wallet, chooseWallet] = useState<BTCWalletAdapter | null>(null);\n\n const onConnect = async () => {\n setAddress(await wallet!.connect());\n }\n useEffect(() => {\n\n if (!wallet) {\n setAddress(null)\n }\n }, [wallet]);\n\n return {\n installedWallets,\n wallets,\n chooseWallet,\n wallet,\n address,\n onConnect\n\n }\n\n}","import {BTCWalletAdapter} from \"../WalletAdapter\";\nimport matchlog from \"../../utils/matchlog\";\nimport {bytesToBase64} from \"../../utils\";\n\nexport class PhantomAdapter implements BTCWalletAdapter {\n name = \"Phantom Wallet\";\n website=\"https://www.phantom.com/\"\n walletKey=\"phantom\"\n\n async isInstalled() {\n return typeof window.phantom !== \"undefined\" && typeof window.phantom.bitcoin !== \"undefined\";\n }\n\n async connect(): Promise<string> {\n if (!await this.isInstalled()) throw new Error(\"Phantom Wallet is not installed\");\n const response = await window.phantom.bitcoin.requestAccounts()\n const ordinalAddress = response.find((n: any) => n.purpose == 'ordinals')\n\n matchlog.log(\"Addresses:\", ordinalAddress);\n if (!ordinalAddress) {\n throw new Error(\"No addresses found in Phantom Wallet\")\n }\n\n return ordinalAddress.address\n }\n\n async signMessage(message: string): Promise<string> {\n if (!await this.isInstalled()) throw new Error(\"Phantom Wallet is not installed\");\n const address = await this.connect()\n try {\n const {signature} = await window.phantom.bitcoin.signMessage(address, new TextEncoder().encode(message))\n return bytesToBase64(signature)\n } catch (error) {\n console.error(error)\n throw error\n }\n }\n}\n","import {ModalWithHeader} from \"../../ui/Modal\";\nimport React, {useMemo} from \"react\";\nimport {ModalWithHeaderProps, WalletType} from \"../../types\";\nimport {useIntl} from \"react-intl\";\nimport {DEFAULT_WALLET_METHODS, useWalletConfig, WALLET_METHODS} from \"../../hooks/useConfig\";\nimport {RecommendItem} from \"../LoginBox\";\nimport {useUserInfo} from \"../../hooks\";\nimport useAppConfig from \"../../hooks/useAppConfig\";\n\ntype WalletModalProps = ModalWithHeaderProps & {\n type?: 'login' | 'bind' | ''\n methods?: WalletType[]\n}\n\nfunction WalletConnectModal({\n type,\n methods: _methods,\n ...props\n }: WalletModalProps) {\n const intl = useIntl()\n const {walletMap} = useWalletConfig()\n const {bind, login} = useUserInfo()\n const config = useAppConfig()\n const methods = useMemo(() => {\n if (_methods) return _methods\n if (!config.platform) {\n return []\n }\n const platform = config.platform.map(p => p.toLowerCase())\n return WALLET_METHODS.filter(m => platform.includes(m))\n }, [config.platform, _methods])\n return <ModalWithHeader {...props} title={props.title || (intl.formatMessage({\n id: type == \"bind\" ? \"bindWith\" : \"loginWith\"\n }, {\n name: \"\"\n }))}>\n <div className=\"matchid-login-box\">\n <div className=\"matchid-login-recommend-list\">\n {\n methods.map((method, index) => {\n const m = walletMap[method]\n return <RecommendItem\n icon={m?.icon}\n name={m?.name}\n onClick={() => {\n type == 'bind' ? bind(method) : login(method)\n }\n }\n key={method}\n />\n })\n }\n </div>\n </div>\n </ModalWithHeader>\n}\n\nexport default function WalletModal(props: WalletModalProps) {\n return props.isOpen && <WalletConnectModal {...props}/>\n}","import {useEffect, useState} from \"react\";\n\nexport default function AlphaAvatar({name, size = 40, className = ''}: {\n name: string,\n size?: number,\n className?: string\n}) {\n const [avatar, setAvatar] = useState<string | undefined>(undefined)\n useEffect(() => {\n if (name) {\n const char = name[0].toUpperCase()\n // if (char.match(/[a-zA-Z]/)) {\n setAvatar(char)\n // }\n }\n }, [name])\n return <div className={`matchid-alpha-avatar ${className}`} style={{\n width: size,\n height: size,\n fontSize: Math.ceil(size / 2)\n }}>\n {avatar}\n </div>\n}","import {useMatchChain, useMatchWalletAssetList, useMatchWalletAssets} from \"hooks\";\nimport AlphaAvatar from \"../AlphaAvatar\";\nimport {NumberFormatter} from \"../../utils\";\nimport {useMatchWalletAssetsProps, WalletAssetMergeType} from \"../../types\";\n\nexport default function WalletAsset({\n onAssetClick,\n matchWalletAssetsOptions\n }: {\n onAssetClick?: (asset: WalletAssetMergeType) => () => void\n matchWalletAssetsOptions?: useMatchWalletAssetsProps\n}) {\n const walletAssets = useMatchWalletAssets(matchWalletAssetsOptions)\n const matchWalletAssetList = useMatchWalletAssetList({\n list: walletAssets.mergedAssets\n })\n const {list} = useMatchChain()\n return (\n <div className={\"matchid-wallet-asset-list\"}>\n {\n matchWalletAssetList.list.map((n, index) => {\n const clickFunc = onAssetClick && onAssetClick(n)\n const chain = list?.find((m) => m.id.toString() === n.chain_id)\n const getFooterColor = () => {\n if (!n.price_change_24h) {\n return ''\n }\n if (n.price_change_24h > 0) {\n return 'matchid-wallet-asset-up'\n }\n if (n.price_change_24h < 0) {\n return 'matchid-wallet-asset-down'\n }\n return ''\n }\n return <div className={`matchid-wallet-asset-item`} onClick={clickFunc} style={{\n cursor: clickFunc ? 'pointer' : 'default'\n }} key={index}>\n <div className={\"matchid-wallet-asset-logo\"} title={n.symbol || n.name || ''}>\n {n.icon ? <img src={n.icon} alt={n.symbol} className={`matchid-wallet-asset-icon`}/> :\n <AlphaAvatar className={`matchid-wallet-asset-icon`} size={40}\n name={n.symbol || n.name || ''}/>}\n {chain?.iconUrl &&\n <img src={chain.iconUrl} alt={chain.name} className={`matchid-wallet-asset-chain`}/>}\n </div>\n <div className={`matchid-wallet-asset-info`}>\n <div className={`matchid-wallet-asset-name`}>{n.symbol}</div>\n {\n ('price' in n) && <div className={`matchid-wallet-asset-content`}>\n <div className={\"matchid-wallet-asset-price\"}><NumberFormatter value={n.price}\n prefix={\"$ \"}\n tFixNum={2}/></div>\n\n <div className={\"matchid-wallet-asset-value\"}><NumberFormatter value={n.value}\n prefix={\"$ \"}\n tFixNum={2}/></div>\n </div>\n }\n\n <div className={`matchid-wallet-asset-footer`}>\n <div className={`matchid-wallet-asset-balance`}><NumberFormatter value={n.balance}\n tFixNum={3}/></div>\n {'price_change_24h' in n &&\n <div className={`matchid-wallet-asset-change ${getFooterColor()}`}><NumberFormatter\n prefix={`${(n?.price_change_24h || 0) < 0 ? '-' : '+'} `}\n value={Math.abs(n.price_change_24h || 0)} suffix={\"%\"} tFixNum={3}/></div>}\n\n </div>\n </div>\n </div>\n })\n }\n </div>\n )\n}","import {Address, WalletAssetMergeType} from \"types/types\";\nimport {AlphaAvatar, Button, ModalDrawer} from \"../../ui\";\nimport {useMatchChain, useWallet} from \"hooks\";\nimport {useEffect, useMemo, useState} from \"react\";\nimport {NumberFormatter} from \"../../utils\";\nimport {TransferIcon} from \"../../assets/icon\";\nimport {defineChain, encodeFunctionData, erc20Abi, http, parseUnits} from \"viem\";\nimport {NATIVE_TOKEN_ADDRESS} from \"../../config\";\nimport {FormattedMessage, useIntl} from \"react-intl\";\n\nfunction Input({\n onChange,\n placeholder,\n value,\n maxLength,\n type,\n error,\n size = \"df\"\n }: {\n onChange: (e: any) => void\n placeholder: string\n value: string\n maxLength: number\n type: string\n error: string\n size?: \"sm\" | \"df\"\n}) {\n return <div className={`matchid-token-input-box ${\"matchid-token-input-\" + size}`}>\n <input placeholder={placeholder} onChange={onChange} maxLength={maxLength} type={type} value={value}\n className={`matchid-token-input ${error ? 'matchid-token-input-error' : ''}`}/>\n {error && <div className={\"matchid-token-input-error-text\"}>{error}</div>}\n </div>\n}\n\nexport default function TokenSend({\n onClose,\n zIndex,\n token,\n onBack\n }: {\n onBack: () => void\n onClose: () => void\n zIndex: number\n token: WalletAssetMergeType\n}) {\n const {list: chainList} = useMatchChain()\n const intl = useIntl()\n const {createWalletClient} = useWallet()\n const isNative = token.address.toLowerCase() == NATIVE_TOKEN_ADDRESS\n const chain = useMemo(() => {\n return chainList?.find((m) => m.id.toString() === token.chain_id)\n }, [chainList, token.chain_id])\n const walletClient = useMemo(() => {\n return createWalletClient({\n // @ts-ignore\n chain: defineChain(chain),\n transport: http()\n })\n }, [chain])\n\n const [amount, setAmount] = useState('')\n const [address, setAddress] = useState('')\n const [loading, setLoading] = useState(false)\n const [sending, setSending] = useState(false)\n\n const [txError, setTxError] = useState('')\n const transaction = useMemo(() => {\n const reg = /^0x[a-fA-F0-9]{40}$/\n if(!amount || !address || !reg.test(address)){\n return\n }\n //@ts-ignore\n const viemChain = defineChain(chain)\n const to = isNative ? address as `0x${string}` : token.address\n const value = isNative ? parseUnits(amount, parseInt(token?.decimals || \"18\")) : BigInt(0)\n const data = isNative ? \"0x\" : encodeFunctionData({\n abi:erc20Abi,\n functionName: 'transfer',\n args: [address as Address, parseUnits(amount, parseInt(token?.decimals || \"18\"))]\n })\n return {\n to:to as `0x${string}`,\n value,\n data,\n chain: viemChain\n }\n }, [amount, address])\n const onCal = async () => {\n try {\n setLoading(true)\n // @ts-ignore\n await walletClient?.prepareTransactionRequest(transaction)\n } catch (error: any) {\n console.error(error)\n setTxError(error.details || error.message)\n } finally {\n setLoading(false)\n }\n }\n\n const error = useMemo(() => {\n setTxError('')\n let amountError = ''\n let addressError = ''\n\n if (amount) {\n if (parseFloat(amount) <= 0) {\n amountError = intl.formatMessage({\n id:\"tokenAmountMin\"\n })\n } else if ('balance' in token && parseFloat(amount) > (token.balance || 0)) {\n amountError = intl.formatMessage({\n id:\"tokenAmountMax\"\n })\n }\n }\n\n if (address) {\n if (address.length < 42) {\n addressError = intl.formatMessage({\n id:\"tokenAddressError\"\n })\n } else {\n const reg = /^0x[a-fA-F0-9]{40}$/\n if (!reg.test(address)) {\n addressError = intl.formatMessage({\n id:\"tokenAddressError\"\n })\n }\n }\n }\n if (amount && address && !amountError && !addressError && walletClient) {\n onCal()\n }\n\n return {\n amount: amountError,\n address: addressError,\n }\n }, [amount, token, chain, address,walletClient])\n\n const onChangeAmount = (e: any) => {\n const value = e.target.value\n if (value.match(/^\\d*\\.?\\d*$/)) {\n setAmount(value)\n }\n }\n\n const canSend = useMemo(() => {\n return !error.amount && !error.address && amount && address\n }, [error])\n\n const onNext = async () => {\n setSending(true)\n if(transaction){\n await walletClient?.sendTransaction(transaction)\n }\n onClose()\n\n }\n\n useEffect(() => {\n const receiveMessage = (event: any) => {\n if(event.data){\n if(event.data.source==\"match-wallet\"){\n if(event.data.method==\"sendTransaction\" && event.data.messageId==\"openIframe\"){\n onBack()\n setSending(false)\n }\n }\n }\n }\n window.addEventListener('message', receiveMessage)\n return () => {\n window.removeEventListener('message', receiveMessage)\n }\n }, []);\n return <ModalDrawer isOpen onClose={onClose} zIndex={zIndex} title={<FormattedMessage id={\"send\"}/>} onBack={onBack}>\n <div className={`matchid-token-send-box`}>\n <div className={\"matchid-token-send-content\"}>\n <div className={`matchid-token-amount-content`}>\n <div className={`matchid-token-amount-header`}>\n <div className={`matchid-token-amount-title`}><FormattedMessage id={\"amount\"}/></div>\n <div className={`matchid-token-amount-chain`}>\n {token.icon ? <img src={token?.icon} alt={token?.symbol}\n className={`matchid-token-amount-chain-icon`}/> :\n <AlphaAvatar name={token.symbol||token.name||''} size={16}/>}\n <span>{token?.symbol}</span>\n </div>\n </div>\n <Input\n type={\"text\"}\n onChange={onChangeAmount}\n placeholder={intl.formatMessage({\n id:\"amountPlaceholder\"\n })}\n value={amount}\n maxLength={40}\n error={error.amount || txError}\n />\n <div className={`matchid-token-amount-footer`}>\n <div className={`matchid-token-amount-title`}><FormattedMessage id={\"balance\"}/>:</div>\n <div className={`matchid-token-amount-value`}>\n <NumberFormatter value={token.balance} tFixNum={10} suffix={\" \" + token.symbol}/>\n </div>\n </div>\n <TransferIcon className={\"matchid-token-amount-transfer\"}/>\n </div>\n\n <div className={`matchid-token-address-content`}>\n <div className={`matchid-token-address-header`}>\n <div className={`matchid-token-address-title`}><FormattedMessage id={\"receiveTitle\"}/></div>\n </div>\n <Input\n type={\"text\"}\n size={\"sm\"}\n onChange={(e) => setAddress(e.target.value)}\n placeholder={intl.formatMessage({\n id:\"receivePlaceholder\"\n })}\n value={address}\n maxLength={42}\n error={error.address}\n />\n </div>\n </div>\n <Button size={\"lg\"} block highlight disabled={!canSend || !!txError} onClick={onNext}\n loading={loading||sending}><FormattedMessage id={\"next\"}/></Button>\n </div>\n </ModalDrawer>\n}","import {ModalDrawer} from \"../../ui\";\nimport {WalletAssetMergeType} from \"../../types\";\nimport {useMatchChain, useModal} from \"../../hooks\";\nimport {AlphaAvatar} from \"ui\";\nimport {Button} from \"../index\";\nimport TokenSend from \"../TokenSend\";\nimport {NATIVE_TOKEN_ADDRESS} from \"../../config\";\nimport {FormattedMessage, useIntl} from \"react-intl\";\nimport {NumberFormatter} from \"../../utils\";\n\nexport default function TokenDetail({\n onClose,\n token\n }:{\n onClose:()=>void\n token:WalletAssetMergeType\n}){\n const {list:chainList} = useMatchChain()\n const modal = useModal()\n const chain = chainList?.find((m)=>m.id.toString() === token.chain_id)\n const onSend = ()=>{\n modal.show((props)=>{\n return <TokenSend onClose={()=>{\n props.close()\n onClose()\n }} onBack={props.close} zIndex={props.zIndex} token={token}/>\n })\n }\n const intl = useIntl()\n return <ModalDrawer isOpen title={intl.formatMessage({\n id: \"tokenDetails\"\n })} onClose={onClose}>\n <div className={`matchid-token-detail`}>\n <div className={`matchid-token-main`}>\n <div className={`matchid-token-info`}>\n <div className={`matchid-token-logo`}>\n {token.icon ? <img src={token.icon} alt={token.symbol} className={`matchid-token-icon`}/> :\n <AlphaAvatar className={`matchid-token-icon`} size={48} name={token.symbol||token.name||''}/>}\n {chain?.iconUrl &&\n <img src={chain.iconUrl} alt={chain.name} className={`matchid-token-chain`}/>}\n </div>\n <div className={`matchid-token-name`}><NumberFormatter value={token.balance} tFixNum={10}/> {token.symbol}</div>\n </div>\n {token.address.toLowerCase()!=NATIVE_TOKEN_ADDRESS && <div className={`matchid-token-contract`}>\n <div className={\"matchid-token-contract-title\"}>Contract address</div>\n <div className={\"matchid-token-contract-address\"}>{token.address}</div>\n </div>}\n </div>\n <Button size={\"lg\"} block highlight onClick={onSend}><FormattedMessage id={\"send\"}/></Button>\n </div>\n </ModalDrawer>\n}","import {useMatchChain, useMatchWalletAssetList, useMatchWalletAssets, useModal} from \"hooks\";\nimport AlphaAvatar from \"../AlphaAvatar\";\nimport {NumberFormatter} from \"../../utils\";\nimport {WalletAssetMergeType} from \"../../types\";\nimport {Radio} from \"../../ui\";\nimport {useState} from \"react\";\nimport {Button} from \"../index\";\nimport TokenSend from \"../TokenSend\";\nimport {FormattedMessage} from \"react-intl\";\nimport {useDownMd} from \"../../hooks/useLayout\";\n\nexport default function TokenSendList({close}: {\n close: () => void\n}) {\n const isDownMd = useDownMd();\n const walletAssets = useMatchWalletAssets()\n const matchWalletAssetList = useMatchWalletAssetList({\n list: walletAssets.mergedAssets\n })\n const {list} = useMatchChain()\n const [checked, setChecked] = useState<WalletAssetMergeType | null>()\n const modal = useModal()\n const onNext = () => {\n checked && modal.show((props) => {\n return <TokenSend onClose={() => {\n props.close()\n close()\n }} onBack={props.close} zIndex={props.zIndex} token={checked}/>\n })\n }\n return (\n <div className={\"matchid-token-send-list-box\"}>\n <div className={\"matchid-token-send-list\"}>\n {\n matchWalletAssetList.list.map((n, index) => {\n const chain = list?.find((m) => m.id.toString() === n.chain_id)\n return <div\n className={`matchid-token-send-item ${checked?.address == n.address ? \"matchid-token-send-chekced\" : \"\"}`}\n onClick={() => {\n setChecked(n)\n }} key={index}>\n <Radio checked={checked?.address == n.address} size={isDownMd ? 18 : 24}/>\n <div className={\"matchid-token-send-content\"}>\n <div className={\"matchid-token-send-logo\"}>\n {n.icon ? <img src={n.icon} alt={n.symbol} className={`matchid-token-send-icon`}/> :\n <AlphaAvatar className={`matchid-token-send-icon`} size={isDownMd ? 28 :40}\n name={n.symbol || n.name || ''}/>}\n {chain?.iconUrl &&\n <img src={chain.iconUrl} alt={chain.name}\n className={`matchid-token-send-chain`}/>}\n </div>\n <div className={`matchid-token-send-info`}>\n <div className={`matchid-token-send-name`}>{n.symbol}</div>\n\n <div className={`matchid-token-send-balance`}>\n <NumberFormatter value={n.balance} tFixNum={3}/>\n </div>\n\n </div>\n </div>\n </div>\n })\n }\n </div>\n <Button size={\"lg\"} highlight block disabled={!checked} onClick={onNext}><FormattedMessage id={\"next\"}/></Button>\n </div>\n )\n}","import InfiniteScroll from \"react-infinite-scroll-component\";\nimport {useMatchWalletRecords, useWallet, useMatchChain, useReceipt} from \"../../hooks\";\nimport {Address, UserTransactionType} from \"../../types\";\nimport {ReactNode, useEffect, useMemo, useState} from \"react\";\nimport {ArrowSendIcon, CheckRoundIcon, InfoRoundIcon, LoadingIcon} from \"../../assets/icon\";\nimport {formatAddress, formatDate, NumberFormatter,} from \"../../utils\";\nimport {decodeFunctionData, defineChain, formatUnits} from \"viem\";\nimport {erc20Abi} from \"viem\";\nimport useContractStore from \"../../store/useContractStore\";\nimport {TransactionInfo} from \"../../store/useTransactionStore\";\nimport useHash from \"../../hooks/useHash\";\nimport {FormattedMessage} from \"react-intl\";\n\nconst Item = ({data}: { data: UserTransactionType | TransactionInfo }) => {\n const {address} = useWallet()\n const isOut = data.from.toLowerCase() == address.toLowerCase()\n\n const {chain, chainId, explorerLink, formatUnits: chainFormatUnits} = useMatchChain()\n const {contracts} = useContractStore()\n const [shouldRefetch,setShouldRefetch] = useState(true)\n\n // const receiptQuery = useReceipt({\n // chainId: chain?.id || 698,\n // hash: data.hash\n // })\n const transferType = useMemo(() => {\n const methodId = data.input.substring(2, 10)\n if (methodId == \"095ea7b3\") {\n return \"erc20_approve\"\n }\n if (methodId == \"a9059cbb\") {\n return \"erc20_transfer\"\n }\n return \"unknown\"\n }, [data.input])\n\n const to = useMemo(() => {\n if(!isOut){\n return data.from\n }\n if (transferType == \"erc20_transfer\") {\n const decodeData = decodeFunctionData({\n abi: erc20Abi,\n data: data.input,\n })\n return decodeData.args[0] as Address\n }\n return data.to\n }, [data.input, transferType, data.to,isOut])\n\n const amount = useMemo(() => {\n if (transferType == \"erc20_transfer\") {\n const decodeData = decodeFunctionData({\n abi: erc20Abi,\n data: data.input,\n })\n const value = decodeData.args[1] as bigint\n return formatUnits(value, contracts[`${chainId}-${data.to.toLowerCase()}`]?.decimals || 18)\n // return value.toString();\n }\n return chainFormatUnits(BigInt(data.value))\n }, [data.input, transferType, data.value, contracts, chainId, data.to])\n\n const hashQuery = useHash({\n hash:data.hash,\n //@ts-ignore\n chain:defineChain(chain),\n refetchInterval: shouldRefetch ? 3000 : false,\n enabled:shouldRefetch && data.source == 'local'\n })\n const status = useMemo(() => {\n if (data.source == 'matchain') {\n switch (data.extra.status) {\n case \"ok\":\n return \"success\"\n case \"error\":\n return \"error\"\n }\n\n } else if(data.source=='auto') {\n if (data.extra.receipt_status == 1) {\n return \"success\"\n } else {\n return \"error\"\n }\n }else {\n if(hashQuery.data==1){\n return 'success'\n }\n if(hashQuery.data==-1){\n return 'error'\n }\n if(Date.now()/1000-parseInt(data.timestamp)>3600){\n return 'error'\n }\n }\n\n return 'loading'\n }, [data.extra?.status, data.source,hashQuery.data])\n\n useEffect(() => {\n if(data.hash){\n setShouldRefetch(status=='loading')\n }\n }, [status,data.hash]);\n\n const symbol = useMemo(() => {\n if (transferType == \"erc20_transfer\") {\n const contract = contracts[`${chainId}-${data.to.toLowerCase()}`]\n return contract?.symbol || contract?.name || \"unknown\"\n }\n return chain?.nativeCurrency.symbol || chain?.nativeCurrency.name\n }, [transferType, chain, contracts, chainId, data.to])\n\n\n return <a\n href={explorerLink(`tx/${data.hash}`)}\n target=\"_blank\"\n className={`matchid-transaction-item`}\n >\n <div className={`matchid-transacton-item-container`}>\n <div className={\"matchid-transaction-item-icon\"}>\n <ArrowSendIcon className={!isOut ? \"rotate-180\" : \"\"}/>\n </div>\n <div className={`matchid-transaction-item-details`}>\n <div className={`matchid-transaction-item-address`}>\n {formatAddress(to, 6, 4)}\n </div>\n <div\n className={`matchid-transaction-item-timestamp`}>{formatDate(data.timestamp, 'MM/DD HH:mm:ss')}</div>\n </div>\n </div>\n <div className={`matchid-transaction-item-amount ${'matchid-transaction-item-' + status}`}>\n <NumberFormatter value={amount} tFixNum={6} prefix={isOut ? '-' : '+'} suffix={\" \" + symbol}/>\n\n {status == 'loading' && <LoadingIcon color=\"#000000\" size={16} rotate/>}\n {status == 'success' && <CheckRoundIcon size={16}/>}\n {status == 'error' && <InfoRoundIcon size={16}/>}\n\n </div>\n </a>\n}\n\nexport default function TransactionList({\n scrollableTarget\n }: {\n scrollableTarget?: ReactNode;\n}) {\n const {fetchMoreData, hasMore, items} = useMatchWalletRecords()\n\n return (\n <InfiniteScroll\n scrollableTarget={scrollableTarget}\n dataLength={items.length}\n next={fetchMoreData}\n hasMore={hasMore}\n loader={<div className={\"matchid-list-nomore\"}><LoadingIcon rotate size={16} color={\"black\"}/>Loading...\n </div>}\n endMessage={\n items.length > 0 ?\n <div className={`matchid-list-nomore`}><FormattedMessage id={\"noMoreRecords\"}/></div> :\n <div className={`matchid-list-nomore`}><FormattedMessage id={\"noRecords\"}/></div>\n }\n >\n {\n items.length == 0 && !hasMore ?\n <div className={\"mt-[150px]\"}/> :\n <div className={`matchid-transaction-list`}>\n {\n items.map((item, index) => <Item data={item} key={index}/>)\n }\n </div>\n }\n </InfiniteScroll>\n )\n}"],"mappings":"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","names":["useEffect","useState","useEffect","useState","useEffect","jsx","useState","useEffect","useEffect","useState","jsx","useEffect","useState","jsx","jsxs","useState","useEffect","jsx","jsxs","useIntl","jsx","jsxs","useState","useEffect","useMemo","createContext","useContext","useEffect","useEffect","handler","create","useEffect","useMemo","useState","useRef","Fragment","jsx","jsxs","useEffect","useState","jsx","jsx","jsxs","useState","useEffect","useState","jsx","jsxs","jsx","useMemo","jsx","jsx","Fragment","jsx","jsx","jsx","jsx","jsxs","useState","useRef","create","devtools","persist","persistedState","jsx","signMessage","useMemo","useEffect","chain","parameters","request","address","useCallback","useEffect","useState","useState","useCallback","createContext","useContext","createPortal","jsx","jsxs","createContext","useState","useCallback","createPortal","useContext","useQuery","useQuery","useMemo","useState","createPublicClient","http","FormattedMessage","useIntl","jsx","jsxs","useMemo","storeChainId","setChainId","useState","createPublicClient","http","useEffect","useMemo","useRef","useState","useQuery","erc20Abi","formatUnits","create","devtools","persist","persistedState","FormattedMessage","useIntl","useEffect","useMemo","useState","FormattedMessage","useIntl","createPublicClient","http","useQuery","jsx","jsxs","useState","error","useIntl","useEffect","queryClient","useMemo","FormattedMessage","jsx","jsxs","useIntl","FormattedMessage","useState","useRef","useEffect","erc20Abi","useMemo","list","useQuery","formatUnits","useState","useCallback","useEffect","useQuery","createPublicClient","defineChain","http","useState","useEffect","useCallback","useState","useCallback","useEffect","useQuery","createPublicClient","defineChain","http","CACHE_TTL","MAX_CACHE_SIZE","STORAGE_KEY","useState","useEffect","useCallback","create","jsx","TonLightIcon","create","useEffect","useMemo","useState","FormattedMessage","useIntl","jsx","jsxs","useIntl","useState","useMemo","useEffect","error","FormattedMessage","useQuery","Fragment","jsx","jsxs","useQuery","jsx","useEffect","useRef","AppClientId","useRef","useEffect","useEffect","useRef","useRef","useEffect","token","jsx","createContext","useContext","useMemo","useEffect","useMemo","useRef","useState","FormattedMessage","useIntl","jsx","jsxs","useIntl","useState","useRef","useEffect","useMemo","FormattedMessage","useIntl","jsx","useState","useEffect","useMemo","useState","FormattedMessage","useIntl","useQuery","useQuery","Fragment","jsx","jsxs","useMemo","useState","useIntl","m","FormattedMessage","useState","FormattedMessage","jsx","jsxs","FormattedMessage","jsx","useState","jsx","jsxs","FormattedMessage","useIntl","jsx","jsxs","useState","FormattedMessage","useIntl","Fragment","jsx","jsxs","useState","useEffect","useMemo","useState","FormattedMessage","useIntl","jsx","jsxs","useState","useEffect","useMemo","error","useIntl","FormattedMessage","useCallback","useEffect","useState","useIntl","useMemo","useState","jsx","jsxs","useMemo","error","useState","RainbowKitProvider","useEffect","useRef","useState","status","React","getVersion","getVersion","_BaseError_walk","connector","chainId","chain","custom","http","jsx","useState","setStatus","useEffect","address","error","useCallback","signature","useIntl","RainbowKitProvider","React","useEffect","useMemo","useState","useIntl","useEffect","useState","useState","useEffect","wallet","jsx","jsxs","useIntl","useState","React","useMemo","error","useEffect","wallet","React","useEffect","useState","useIntl","jsx","WalletContent","useState","React","useEffect","wallet","error","useIntl","React","useEffect","useMemo","useState","useIntl","accounts","request","request","useEffect","useState","useState","useEffect","wallet","jsx","jsxs","useIntl","useState","React","useMemo","error","useEffect","wallet","useMemo","useIntl","jsx","useIntl","useMemo","useEffect","useState","jsx","AlphaAvatar","jsx","jsxs","AlphaAvatar","useEffect","useMemo","useState","defineChain","encodeFunctionData","erc20Abi","http","parseUnits","FormattedMessage","useIntl","jsx","jsxs","Input","createWalletClient","useMemo","defineChain","http","useState","parseUnits","encodeFunctionData","erc20Abi","error","useEffect","FormattedMessage","useIntl","jsx","jsxs","useIntl","FormattedMessage","useState","FormattedMessage","jsx","jsxs","useState","AlphaAvatar","FormattedMessage","useEffect","useMemo","useState","defineChain","formatUnits","erc20Abi","FormattedMessage","jsx","jsxs","useState","useMemo","erc20Abi","formatUnits","defineChain","useEffect"]}