@matchain/matchid-sdk-react 0.1.53-alpha.3 → 0.1.53-alpha.5

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 (58) hide show
  1. package/dist/assets/icon/index.d.mts +1 -1
  2. package/dist/assets/icon/index.d.ts +1 -1
  3. package/dist/chunk-3CR66BEX.mjs +19 -0
  4. package/dist/chunk-3CR66BEX.mjs.map +1 -0
  5. package/dist/{chunk-HYQ3T6WW.mjs → chunk-JX73EY6V.mjs} +2 -14
  6. package/dist/chunk-JX73EY6V.mjs.map +1 -0
  7. package/dist/{chunk-3YF3P77J.mjs → chunk-LEHYGXVJ.mjs} +780 -188
  8. package/dist/chunk-LEHYGXVJ.mjs.map +1 -0
  9. package/dist/{chunk-4EVF2PXX.mjs → chunk-RT42O3OC.mjs} +2 -2
  10. package/dist/components/index.d.mts +3 -3
  11. package/dist/components/index.d.ts +3 -3
  12. package/dist/components/index.js +843 -217
  13. package/dist/components/index.js.map +1 -1
  14. package/dist/components/index.mjs +6 -3
  15. package/dist/config/chains/index.mjs +2 -1
  16. package/dist/hooks/api/index.d.mts +2 -2
  17. package/dist/hooks/api/index.d.ts +2 -2
  18. package/dist/hooks/api/index.js +169 -58
  19. package/dist/hooks/api/index.js.map +1 -1
  20. package/dist/hooks/api/index.mjs +5 -4
  21. package/dist/hooks/index.d.mts +2 -2
  22. package/dist/hooks/index.d.ts +2 -2
  23. package/dist/hooks/index.js +457 -346
  24. package/dist/hooks/index.js.map +1 -1
  25. package/dist/hooks/index.mjs +4 -3
  26. package/dist/{index-CcN5ls1U.d.ts → index-BaYTgL99.d.mts} +3 -2
  27. package/dist/{index-lKJjj0w4.d.ts → index-BhU3hF7y.d.ts} +2 -2
  28. package/dist/{index-DrEKzXYX.d.mts → index-Bpd2gBNh.d.mts} +1 -1
  29. package/dist/{index-BSUoL5Jo.d.mts → index-C5StsjWY.d.ts} +11 -4
  30. package/dist/{index-DgwlV4ve.d.ts → index-CFqk8eNo.d.ts} +12 -12
  31. package/dist/{index-DXRsJY9h.d.mts → index-D1QeVZyN.d.ts} +3 -2
  32. package/dist/{index-BVO4Bt59.d.ts → index-D_UNctDI.d.mts} +11 -4
  33. package/dist/{index-Cul4qlZl.d.ts → index-DaXXoRxr.d.ts} +1 -1
  34. package/dist/{index-BKHtf1Tu.d.ts → index-Dt92N6yZ.d.ts} +1 -1
  35. package/dist/{index-ba3VTkaV.d.mts → index-W6yjuOKT.d.mts} +1 -1
  36. package/dist/{index-EPwrSSOz.d.mts → index-mxbJ8CFx.d.mts} +12 -12
  37. package/dist/{index-CvVl_Xw1.d.mts → index-wqqEUufi.d.mts} +2 -2
  38. package/dist/index.css +3 -0
  39. package/dist/index.d.mts +7 -7
  40. package/dist/index.d.ts +7 -7
  41. package/dist/index.js +1082 -508
  42. package/dist/index.js.map +1 -1
  43. package/dist/index.mjs +11 -10
  44. package/dist/types/index.d.mts +1 -1
  45. package/dist/types/index.d.ts +1 -1
  46. package/dist/{types-Bgd3Ac92.d.mts → types-Bx_FJ11s.d.mts} +2 -1
  47. package/dist/{types-Bgd3Ac92.d.ts → types-Bx_FJ11s.d.ts} +2 -1
  48. package/dist/ui/index.d.mts +3 -3
  49. package/dist/ui/index.d.ts +3 -3
  50. package/example/src/pages/User/index.tsx +7 -1
  51. package/package.json +2 -1
  52. package/dist/chunk-3YF3P77J.mjs.map +0 -1
  53. package/dist/chunk-HYQ3T6WW.mjs.map +0 -1
  54. package/example/dist/assets/ccip-nxE3Zma4.js +0 -1
  55. package/example/dist/assets/index-BFAv3rdU.css +0 -1
  56. package/example/dist/assets/index-DMWWRDPI.js +0 -1658
  57. package/example/dist/index.html +0 -14
  58. /package/dist/{chunk-4EVF2PXX.mjs.map → chunk-RT42O3OC.mjs.map} +0 -0
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/index.tsx","../src/components/EmailModal/index.tsx","../src/components/EmailModal/StepEmail.tsx","../src/store/useLocalStore.ts","../src/api/request.ts","../src/config/env/index.ts","../src/store/index.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/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/TRONModal/index.tsx","../src/components/WalletModalContent/index.tsx","../src/assets/wallet.ts","../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'\n// export {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\"","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 {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 {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}","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, 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}","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,\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 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 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 \"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 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\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 }\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\"\n\nconst queryClient = new QueryClient();\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 <QueryClientProvider client={queryClient}>\n\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 </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 * 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}\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 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 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 clearInterval(window.matchProvider.transactionMessageIntervalMap[transactionId].interval)\n delete window.matchProvider.transactionMessageIntervalMap[transactionId]\n return txHash\n } catch (error: any) {\n console.error('qwe-sign-error', error)\n clearInterval(window.matchProvider.transactionMessageIntervalMap[transactionId].interval)\n delete window.matchProvider.transactionMessageIntervalMap[transactionId]\n throw error\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 };\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 } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { ModalDrawer } from \"ui\";\n\ninterface ModalContextType {\n show: (content: (props: { close: () => void, zIndex: number }) => ReactNode, 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: ReactNode;\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\n const getNextIndex = useCallback(() => {\n return Math.max(...modalState.modals.map(modal => modal.index), 0) + 1 || 100;\n }, [modalState]);\n\n const closeModal = useCallback((index: number) => {\n setModalState(prevState => ({\n modals: prevState.modals.filter(modal => modal.index !== index),\n highestZIndex: prevState.highestZIndex,\n }));\n }, []);\n\n const show = useCallback((content: (props: { close: () => void, zIndex: number }) => ReactNode, index?: number) => {\n setModalState(prevState => {\n const modalIndex = index !== undefined ? 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({ close: () => closeModal(modalIndex), zIndex: newZIndex }),\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 !== undefined ? 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 content: (\n <ModalDrawer showClose isOpen onClose={() => closeModal(modalIndex)} title={props.title} zIndex={newZIndex} onBack={props.onBack}>\n <props.content close={() => closeModal(modalIndex)} zIndex={newZIndex} />\n </ModalDrawer>\n ),\n }],\n highestZIndex: newZIndex,\n };\n });\n }, [getNextIndex, closeModal]);\n\n const modalElements = modalState.modals\n .sort((a, b) => b.zIndex - a.zIndex)\n .map(modal =>\n modal.visible ? (\n createPortal(\n modal.content,\n document.body\n )\n ) : null\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","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","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 SuccessImg from \"assets/img/success.gif\"\nimport FailImg from \"assets/img/fail.gif\"\nimport useIsContract from \"../../hooks/useIsContract\";\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 <img src={status=='success'?SuccessImg:FailImg} alt={status=='success'?'success':'fail'} className={`matchid-import-token-result-img`}/>\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}));\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 useTONModalStore,\n useTRONModalStore,\n useWalletModalStore,\n} from \"../store/useModalStore\";\nimport {BTCModal, TRONModal, TONModal, WalletModal} 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: 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={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}","{\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}","{\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}","{\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}\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}\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}\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}","{\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}\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}\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} highlight block size=\"lg\" onClick={onContinue}><FormattedMessage id={\"continue\"}/></Button>\n </div>\n}","import useUserInfo from \"hooks/useUserInfo\";\nimport {LoginBoxProps, OtherLoginMethodType} 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 EVMDarkIcon,\n EVMLightIcon,\n SOLDarkIcon,\n SOLLightIcon,\n YoutubeIcon,\n BTCDarkIcon,\n BTCLightIcon,\n TRXDarkIcon, TRXLightIcon, TonDarkIcon, TonLightIcon\n} from \"assets/icon\";\nimport EmailModal from \"../EmailModal\";\nimport {FormattedMessage, useIntl} from \"react-intl\";\nimport {useDownMd} from \"../../hooks/useLayout\";\nimport {DEFAULT_WALLET_METHODS, useWalletConfig, WALLET_METHODS} from \"../../hooks/useConfig\";\nimport useAppConfig from \"../../hooks/useAppConfig\";\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('platform',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\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 {methodConfig.methods.length > 0 &&\n <div className=\"matchid-login-other\">\n <div className=\"matchid-login-other-text\"><FormattedMessage id={\"otherLoginMethods\"}/></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, 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 {Button} from \"../index\";\nimport React, {useMemo} from \"react\";\nimport {\n walletConnectedImage,\n walletConnectImage,\n walletConnectingImage,\n walletErrorImage,\n walletSigningImage\n} from \"../../assets/wallet\";\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: string\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 <img src={pageData.statusImage}/>\n <div className={pageData.isError ? 'text-[#F7585E]' : ''}>{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}","export const walletErrorImage = \"data:image/png;base64,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\"\nexport const walletConnectedImage = \"data:image/png;base64,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\"\nexport const walletConnectingImage = \"data:image/png;base64,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\"\nexport const walletConnectImage = \"data:image/png;base64,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\"\nexport const walletSigningImage = \"data:image/png;base64,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\"","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","useMemo","createContext","useContext","useEffect","useEffect","create","useEffect","useMemo","useState","jsx","jsxs","useState","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","useMemo","useState","createPublicClient","http","FormattedMessage","useIntl","jsx","jsxs","useMemo","storeChainId","setChainId","useState","createPublicClient","http","useEffect","useMemo","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","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","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","React","useEffect","useMemo","useState","useIntl","useMemo","jsx","jsxs","useMemo","error","useEffect","useState","useState","useEffect","wallet","jsx","jsxs","useIntl","useState","React","useMemo","error","useEffect","wallet","React","useEffect","useState","useIntl","jsx","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"]}