@rash2x/bridge-widget 0.3.10 → 0.4.3
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.
- package/dist/evaa-bridge.cjs +5194 -375
- package/dist/evaa-bridge.cjs.map +1 -1
- package/dist/evaa-bridge.mjs +5196 -356
- package/dist/evaa-bridge.mjs.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/styles.css +1 -1
- package/package.json +1 -6
package/dist/evaa-bridge.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"evaa-bridge.cjs","sources":["../src/registry/default/evaa-bridge/i18n/bridge-i18n.ts","../src/registry/default/evaa-bridge/i18n/BridgeI18nProvider.tsx","../node_modules/.pnpm/zustand@5.0.8_@types+react@19.2.2_react@19.2.0_use-sync-external-store@1.4.0_react@19.2.0_/node_modules/zustand/esm/middleware.mjs","../src/registry/default/evaa-bridge/store/use-chains-store.ts","../src/registry/default/evaa-bridge/lib/token-normalization.ts","../src/registry/default/evaa-bridge/lib/assets.ts","../src/registry/default/evaa-bridge/store/use-token-store.ts","../src/registry/default/evaa-bridge/lib/amount.ts","../src/registry/default/evaa-bridge/hooks/use-addresses.ts","../src/registry/default/evaa-bridge/store/use-bridge-quote-store.ts","../src/registry/default/evaa-bridge/types.ts","../src/registry/default/evaa-bridge/store/use-settings-store.ts","../src/registry/default/evaa-bridge/api/quotes.ts","../src/registry/default/evaa-bridge/lib/quote.ts","../src/registry/default/evaa-bridge/lib/address-validation.ts","../src/registry/default/evaa-bridge/chains/chain-strategy-context.tsx","../src/registry/default/evaa-bridge/hooks/use-chain-strategies.ts","../src/registry/default/evaa-bridge/utils/formatters.ts","../src/registry/default/evaa-bridge/chains/config.ts","../src/registry/default/evaa-bridge/utils/quote-helpers.ts","../src/registry/default/evaa-bridge/hooks/bridge/use-bridge-quote.ts","../src/registry/default/evaa-bridge/api/api.ts","../src/registry/default/evaa-bridge/hooks/use-chain-derivations.ts","../src/registry/default/evaa-bridge/hooks/api/use-balances.ts","../src/registry/default/evaa-bridge/hooks/bridge/use-swap-model.ts","../src/registry/default/evaa-bridge/assets/icons/ArrowDownIcon.tsx","../src/registry/default/evaa-bridge/assets/icons/BoltIcon.tsx","../src/registry/default/evaa-bridge/assets/icons/ReloadIcon.tsx","../src/registry/default/evaa-bridge/assets/icons/WalletIcon.tsx","../src/registry/default/evaa-bridge/assets/icons/ArrowSwapIcon.tsx","../src/registry/default/evaa-bridge/assets/icons/SearchIcon.tsx","../src/registry/default/evaa-bridge/assets/icons/StargateIcon.tsx","../src/registry/default/evaa-bridge/assets/icons/MetaMaskIcon.tsx","../src/registry/default/evaa-bridge/assets/icons/WalletConnectIcon.tsx","../src/registry/default/evaa-bridge/assets/icons/TonConnectIcon.tsx","../src/registry/default/evaa-bridge/assets/icons/TronLinkIcon.tsx","../src/registry/default/evaa-bridge/assets/icons/ExitIcon.tsx","../src/registry/default/evaa-bridge/components/ui/swap-button.tsx","../src/registry/default/evaa-bridge/components/ui/wallet-balance.tsx","../src/registry/default/evaa-bridge/components/ui/network-symbol.tsx","../src/registry/default/evaa-bridge/components/ui/select-network-button.tsx","../src/registry/default/evaa-bridge/components/ui/token-input.tsx","../src/registry/default/evaa-bridge/hooks/ui/use-modal.ts","../src/registry/default/evaa-bridge/components/ui/search-input.tsx","../src/registry/default/evaa-bridge/components/modals/chain-select-modal.tsx","../src/registry/default/evaa-bridge/hooks/ui/use-wallet-select-modal.ts","../src/registry/default/evaa-bridge/components/icons/edit-icon.tsx","../src/registry/default/evaa-bridge/components/ui/wallet-inline-button.tsx","../src/registry/default/evaa-bridge/components/layout/swap-section.tsx","../src/registry/default/evaa-bridge/store/use-custom-address-store.ts","../src/registry/default/evaa-bridge/hooks/use-is-address-valid.ts","../src/registry/default/evaa-bridge/components/layout/another-address.tsx","../src/registry/default/evaa-bridge/assets/icons/InfoIcon.tsx","../src/registry/default/evaa-bridge/components/ui/tip.tsx","../src/registry/default/evaa-bridge/components/ui/token-symbol.tsx","../src/registry/default/evaa-bridge/hooks/use-gas-estimate.ts","../src/registry/default/evaa-bridge/components/layout/details.tsx","../src/registry/default/evaa-bridge/store/use-transaction-store.ts","../src/registry/default/evaa-bridge/chains/errors.ts","../src/registry/default/evaa-bridge/hooks/use-transaction.ts","../src/registry/default/evaa-bridge/hooks/use-balance-check.ts","../src/registry/default/evaa-bridge/hooks/bridge/use-amount-limits.ts","../src/registry/default/evaa-bridge/hooks/bridge/use-silent-validations.ts","../src/registry/default/evaa-bridge/components/ui/submit-button.tsx","../src/registry/default/evaa-bridge/components/ui/wallet-button.tsx","../src/registry/default/evaa-bridge/components/modals/wallet-select-modal.tsx","../src/registry/default/evaa-bridge/components/status-dialog/progress-step.tsx","../src/registry/default/evaa-bridge/components/status-dialog/failed-step.tsx","../src/registry/default/evaa-bridge/utils/explorer.ts","../src/registry/default/evaa-bridge/components/status-dialog/success-step.tsx","../src/registry/default/evaa-bridge/hooks/ui/use-countdown.tsx","../src/registry/default/evaa-bridge/components/status-dialog/confirm-step.tsx","../src/registry/default/evaa-bridge/components/status-dialog/status-dialog.tsx","../src/registry/default/evaa-bridge/hooks/api/use-tokens.ts","../src/registry/default/evaa-bridge/hooks/api/use-chains.ts","../src/registry/default/evaa-bridge/chains/chain-strategy-registry.ts","../src/registry/default/evaa-bridge/api/balances.ts","../src/registry/default/evaa-bridge/chains/evm-chain-strategy.ts","../src/registry/default/evaa-bridge/chains/ton-chain-strategy.ts","../src/registry/default/evaa-bridge/chains/tron-chain-strategy.ts","../src/registry/default/evaa-bridge/chains/chain-strategy-provider.tsx","../src/registry/default/evaa-bridge/store/use-connected-wallets-store.ts","../src/registry/default/evaa-bridge/components/modals/settings-modal.tsx","../src/registry/default/evaa-bridge/components/modals/token-select-modal.tsx","../src/registry/default/evaa-bridge/hooks/bridge/use-bridge-refresh.ts","../src/registry/default/evaa-bridge/components/ui/refresh-button.tsx","../src/registry/default/evaa-bridge/components/ui/select-token-button.tsx","../src/registry/default/evaa-bridge/components/layout/toolbar.tsx","../src/registry/default/evaa-bridge/hooks/use-auto-select-network.ts","../src/registry/default/evaa-bridge/evaa-bridge.tsx","../src/registry/default/evaa-bridge/api/tx.ts"],"sourcesContent":["import i18n from 'i18next';\nimport { initReactI18next } from 'react-i18next';\n\nimport en from './locales/en.json';\nimport ru from './locales/ru.json';\n\n// Create an isolated i18n instance for the bridge widget\n// This prevents conflicts with the consuming application's i18n\nconst bridgeI18n = i18n.createInstance();\n\nconst resources = {\n en: {\n 'evaa-bridge': en\n },\n ru: {\n 'evaa-bridge': ru\n }\n};\n\nbridgeI18n\n .use(initReactI18next)\n .init({\n resources,\n lng: 'en', // Will be overridden by defaultLanguage prop\n fallbackLng: 'en',\n debug: false,\n\n // Use a dedicated namespace to avoid conflicts\n defaultNS: 'evaa-bridge',\n ns: ['evaa-bridge'],\n\n interpolation: {\n escapeValue: false, // react already does escaping\n },\n });\n\nexport default bridgeI18n;\n","import { useEffect } from 'react';\nimport { I18nextProvider, useTranslation } from 'react-i18next';\nimport bridgeI18n from './bridge-i18n';\n\ninterface BridgeI18nProviderProps {\n children: React.ReactNode;\n defaultLanguage?: string;\n}\n\nexport function BridgeI18nProvider({\n children,\n defaultLanguage = 'en',\n}: BridgeI18nProviderProps) {\n useEffect(() => {\n // Set the language when the component mounts or when defaultLanguage changes\n if (bridgeI18n.language !== defaultLanguage) {\n bridgeI18n.changeLanguage(defaultLanguage);\n }\n }, [defaultLanguage]);\n\n return <I18nextProvider i18n={bridgeI18n}>{children}</I18nextProvider>;\n}\n\n/**\n * Custom hook for using translations within the bridge widget.\n * This ensures that translations are isolated from the parent application's i18n.\n *\n * @example\n * const { t } = useBridgeTranslation();\n * return <div>{t('common.loading')}</div>;\n */\nexport function useBridgeTranslation() {\n return useTranslation('evaa-bridge', { i18n: bridgeI18n });\n}\n","const reduxImpl = (reducer, initial) => (set, _get, api) => {\n api.dispatch = (action) => {\n set((state) => reducer(state, action), false, action);\n return action;\n };\n api.dispatchFromDevtools = true;\n return { dispatch: (...args) => api.dispatch(...args), ...initial };\n};\nconst redux = reduxImpl;\n\nconst trackedConnections = /* @__PURE__ */ new Map();\nconst getTrackedConnectionState = (name) => {\n const api = trackedConnections.get(name);\n if (!api) return {};\n return Object.fromEntries(\n Object.entries(api.stores).map(([key, api2]) => [key, api2.getState()])\n );\n};\nconst extractConnectionInformation = (store, extensionConnector, options) => {\n if (store === void 0) {\n return {\n type: \"untracked\",\n connection: extensionConnector.connect(options)\n };\n }\n const existingConnection = trackedConnections.get(options.name);\n if (existingConnection) {\n return { type: \"tracked\", store, ...existingConnection };\n }\n const newConnection = {\n connection: extensionConnector.connect(options),\n stores: {}\n };\n trackedConnections.set(options.name, newConnection);\n return { type: \"tracked\", store, ...newConnection };\n};\nconst removeStoreFromTrackedConnections = (name, store) => {\n if (store === void 0) return;\n const connectionInfo = trackedConnections.get(name);\n if (!connectionInfo) return;\n delete connectionInfo.stores[store];\n if (Object.keys(connectionInfo.stores).length === 0) {\n trackedConnections.delete(name);\n }\n};\nconst findCallerName = (stack) => {\n var _a, _b;\n if (!stack) return void 0;\n const traceLines = stack.split(\"\\n\");\n const apiSetStateLineIndex = traceLines.findIndex(\n (traceLine) => traceLine.includes(\"api.setState\")\n );\n if (apiSetStateLineIndex < 0) return void 0;\n const callerLine = ((_a = traceLines[apiSetStateLineIndex + 1]) == null ? void 0 : _a.trim()) || \"\";\n return (_b = /.+ (.+) .+/.exec(callerLine)) == null ? void 0 : _b[1];\n};\nconst devtoolsImpl = (fn, devtoolsOptions = {}) => (set, get, api) => {\n const { enabled, anonymousActionType, store, ...options } = devtoolsOptions;\n let extensionConnector;\n try {\n extensionConnector = (enabled != null ? enabled : (import.meta.env ? import.meta.env.MODE : void 0) !== \"production\") && window.__REDUX_DEVTOOLS_EXTENSION__;\n } catch (e) {\n }\n if (!extensionConnector) {\n return fn(set, get, api);\n }\n const { connection, ...connectionInformation } = extractConnectionInformation(store, extensionConnector, options);\n let isRecording = true;\n api.setState = ((state, replace, nameOrAction) => {\n const r = set(state, replace);\n if (!isRecording) return r;\n const action = nameOrAction === void 0 ? {\n type: anonymousActionType || findCallerName(new Error().stack) || \"anonymous\"\n } : typeof nameOrAction === \"string\" ? { type: nameOrAction } : nameOrAction;\n if (store === void 0) {\n connection == null ? void 0 : connection.send(action, get());\n return r;\n }\n connection == null ? void 0 : connection.send(\n {\n ...action,\n type: `${store}/${action.type}`\n },\n {\n ...getTrackedConnectionState(options.name),\n [store]: api.getState()\n }\n );\n return r;\n });\n api.devtools = {\n cleanup: () => {\n if (connection && typeof connection.unsubscribe === \"function\") {\n connection.unsubscribe();\n }\n removeStoreFromTrackedConnections(options.name, store);\n }\n };\n const setStateFromDevtools = (...a) => {\n const originalIsRecording = isRecording;\n isRecording = false;\n set(...a);\n isRecording = originalIsRecording;\n };\n const initialState = fn(api.setState, get, api);\n if (connectionInformation.type === \"untracked\") {\n connection == null ? void 0 : connection.init(initialState);\n } else {\n connectionInformation.stores[connectionInformation.store] = api;\n connection == null ? void 0 : connection.init(\n Object.fromEntries(\n Object.entries(connectionInformation.stores).map(([key, store2]) => [\n key,\n key === connectionInformation.store ? initialState : store2.getState()\n ])\n )\n );\n }\n if (api.dispatchFromDevtools && typeof api.dispatch === \"function\") {\n let didWarnAboutReservedActionType = false;\n const originalDispatch = api.dispatch;\n api.dispatch = (...args) => {\n if ((import.meta.env ? import.meta.env.MODE : void 0) !== \"production\" && args[0].type === \"__setState\" && !didWarnAboutReservedActionType) {\n console.warn(\n '[zustand devtools middleware] \"__setState\" action type is reserved to set state from the devtools. Avoid using it.'\n );\n didWarnAboutReservedActionType = true;\n }\n originalDispatch(...args);\n };\n }\n connection.subscribe((message) => {\n var _a;\n switch (message.type) {\n case \"ACTION\":\n if (typeof message.payload !== \"string\") {\n console.error(\n \"[zustand devtools middleware] Unsupported action format\"\n );\n return;\n }\n return parseJsonThen(\n message.payload,\n (action) => {\n if (action.type === \"__setState\") {\n if (store === void 0) {\n setStateFromDevtools(action.state);\n return;\n }\n if (Object.keys(action.state).length !== 1) {\n console.error(\n `\n [zustand devtools middleware] Unsupported __setState action format.\n When using 'store' option in devtools(), the 'state' should have only one key, which is a value of 'store' that was passed in devtools(),\n and value of this only key should be a state object. Example: { \"type\": \"__setState\", \"state\": { \"abc123Store\": { \"foo\": \"bar\" } } }\n `\n );\n }\n const stateFromDevtools = action.state[store];\n if (stateFromDevtools === void 0 || stateFromDevtools === null) {\n return;\n }\n if (JSON.stringify(api.getState()) !== JSON.stringify(stateFromDevtools)) {\n setStateFromDevtools(stateFromDevtools);\n }\n return;\n }\n if (!api.dispatchFromDevtools) return;\n if (typeof api.dispatch !== \"function\") return;\n api.dispatch(action);\n }\n );\n case \"DISPATCH\":\n switch (message.payload.type) {\n case \"RESET\":\n setStateFromDevtools(initialState);\n if (store === void 0) {\n return connection == null ? void 0 : connection.init(api.getState());\n }\n return connection == null ? void 0 : connection.init(getTrackedConnectionState(options.name));\n case \"COMMIT\":\n if (store === void 0) {\n connection == null ? void 0 : connection.init(api.getState());\n return;\n }\n return connection == null ? void 0 : connection.init(getTrackedConnectionState(options.name));\n case \"ROLLBACK\":\n return parseJsonThen(message.state, (state) => {\n if (store === void 0) {\n setStateFromDevtools(state);\n connection == null ? void 0 : connection.init(api.getState());\n return;\n }\n setStateFromDevtools(state[store]);\n connection == null ? void 0 : connection.init(getTrackedConnectionState(options.name));\n });\n case \"JUMP_TO_STATE\":\n case \"JUMP_TO_ACTION\":\n return parseJsonThen(message.state, (state) => {\n if (store === void 0) {\n setStateFromDevtools(state);\n return;\n }\n if (JSON.stringify(api.getState()) !== JSON.stringify(state[store])) {\n setStateFromDevtools(state[store]);\n }\n });\n case \"IMPORT_STATE\": {\n const { nextLiftedState } = message.payload;\n const lastComputedState = (_a = nextLiftedState.computedStates.slice(-1)[0]) == null ? void 0 : _a.state;\n if (!lastComputedState) return;\n if (store === void 0) {\n setStateFromDevtools(lastComputedState);\n } else {\n setStateFromDevtools(lastComputedState[store]);\n }\n connection == null ? void 0 : connection.send(\n null,\n // FIXME no-any\n nextLiftedState\n );\n return;\n }\n case \"PAUSE_RECORDING\":\n return isRecording = !isRecording;\n }\n return;\n }\n });\n return initialState;\n};\nconst devtools = devtoolsImpl;\nconst parseJsonThen = (stringified, fn) => {\n let parsed;\n try {\n parsed = JSON.parse(stringified);\n } catch (e) {\n console.error(\n \"[zustand devtools middleware] Could not parse the received json\",\n e\n );\n }\n if (parsed !== void 0) fn(parsed);\n};\n\nconst subscribeWithSelectorImpl = (fn) => (set, get, api) => {\n const origSubscribe = api.subscribe;\n api.subscribe = ((selector, optListener, options) => {\n let listener = selector;\n if (optListener) {\n const equalityFn = (options == null ? void 0 : options.equalityFn) || Object.is;\n let currentSlice = selector(api.getState());\n listener = (state) => {\n const nextSlice = selector(state);\n if (!equalityFn(currentSlice, nextSlice)) {\n const previousSlice = currentSlice;\n optListener(currentSlice = nextSlice, previousSlice);\n }\n };\n if (options == null ? void 0 : options.fireImmediately) {\n optListener(currentSlice, currentSlice);\n }\n }\n return origSubscribe(listener);\n });\n const initialState = fn(set, get, api);\n return initialState;\n};\nconst subscribeWithSelector = subscribeWithSelectorImpl;\n\nfunction combine(initialState, create) {\n return (...args) => Object.assign({}, initialState, create(...args));\n}\n\nfunction createJSONStorage(getStorage, options) {\n let storage;\n try {\n storage = getStorage();\n } catch (e) {\n return;\n }\n const persistStorage = {\n getItem: (name) => {\n var _a;\n const parse = (str2) => {\n if (str2 === null) {\n return null;\n }\n return JSON.parse(str2, options == null ? void 0 : options.reviver);\n };\n const str = (_a = storage.getItem(name)) != null ? _a : null;\n if (str instanceof Promise) {\n return str.then(parse);\n }\n return parse(str);\n },\n setItem: (name, newValue) => storage.setItem(name, JSON.stringify(newValue, options == null ? void 0 : options.replacer)),\n removeItem: (name) => storage.removeItem(name)\n };\n return persistStorage;\n}\nconst toThenable = (fn) => (input) => {\n try {\n const result = fn(input);\n if (result instanceof Promise) {\n return result;\n }\n return {\n then(onFulfilled) {\n return toThenable(onFulfilled)(result);\n },\n catch(_onRejected) {\n return this;\n }\n };\n } catch (e) {\n return {\n then(_onFulfilled) {\n return this;\n },\n catch(onRejected) {\n return toThenable(onRejected)(e);\n }\n };\n }\n};\nconst persistImpl = (config, baseOptions) => (set, get, api) => {\n let options = {\n storage: createJSONStorage(() => localStorage),\n partialize: (state) => state,\n version: 0,\n merge: (persistedState, currentState) => ({\n ...currentState,\n ...persistedState\n }),\n ...baseOptions\n };\n let hasHydrated = false;\n const hydrationListeners = /* @__PURE__ */ new Set();\n const finishHydrationListeners = /* @__PURE__ */ new Set();\n let storage = options.storage;\n if (!storage) {\n return config(\n (...args) => {\n console.warn(\n `[zustand persist middleware] Unable to update item '${options.name}', the given storage is currently unavailable.`\n );\n set(...args);\n },\n get,\n api\n );\n }\n const setItem = () => {\n const state = options.partialize({ ...get() });\n return storage.setItem(options.name, {\n state,\n version: options.version\n });\n };\n const savedSetState = api.setState;\n api.setState = (state, replace) => {\n savedSetState(state, replace);\n return setItem();\n };\n const configResult = config(\n (...args) => {\n set(...args);\n return setItem();\n },\n get,\n api\n );\n api.getInitialState = () => configResult;\n let stateFromStorage;\n const hydrate = () => {\n var _a, _b;\n if (!storage) return;\n hasHydrated = false;\n hydrationListeners.forEach((cb) => {\n var _a2;\n return cb((_a2 = get()) != null ? _a2 : configResult);\n });\n const postRehydrationCallback = ((_b = options.onRehydrateStorage) == null ? void 0 : _b.call(options, (_a = get()) != null ? _a : configResult)) || void 0;\n return toThenable(storage.getItem.bind(storage))(options.name).then((deserializedStorageValue) => {\n if (deserializedStorageValue) {\n if (typeof deserializedStorageValue.version === \"number\" && deserializedStorageValue.version !== options.version) {\n if (options.migrate) {\n const migration = options.migrate(\n deserializedStorageValue.state,\n deserializedStorageValue.version\n );\n if (migration instanceof Promise) {\n return migration.then((result) => [true, result]);\n }\n return [true, migration];\n }\n console.error(\n `State loaded from storage couldn't be migrated since no migrate function was provided`\n );\n } else {\n return [false, deserializedStorageValue.state];\n }\n }\n return [false, void 0];\n }).then((migrationResult) => {\n var _a2;\n const [migrated, migratedState] = migrationResult;\n stateFromStorage = options.merge(\n migratedState,\n (_a2 = get()) != null ? _a2 : configResult\n );\n set(stateFromStorage, true);\n if (migrated) {\n return setItem();\n }\n }).then(() => {\n postRehydrationCallback == null ? void 0 : postRehydrationCallback(stateFromStorage, void 0);\n stateFromStorage = get();\n hasHydrated = true;\n finishHydrationListeners.forEach((cb) => cb(stateFromStorage));\n }).catch((e) => {\n postRehydrationCallback == null ? void 0 : postRehydrationCallback(void 0, e);\n });\n };\n api.persist = {\n setOptions: (newOptions) => {\n options = {\n ...options,\n ...newOptions\n };\n if (newOptions.storage) {\n storage = newOptions.storage;\n }\n },\n clearStorage: () => {\n storage == null ? void 0 : storage.removeItem(options.name);\n },\n getOptions: () => options,\n rehydrate: () => hydrate(),\n hasHydrated: () => hasHydrated,\n onHydrate: (cb) => {\n hydrationListeners.add(cb);\n return () => {\n hydrationListeners.delete(cb);\n };\n },\n onFinishHydration: (cb) => {\n finishHydrationListeners.add(cb);\n return () => {\n finishHydrationListeners.delete(cb);\n };\n }\n };\n if (!options.skipHydration) {\n hydrate();\n }\n return stateFromStorage || configResult;\n};\nconst persist = persistImpl;\n\nexport { combine, createJSONStorage, devtools, persist, redux, subscribeWithSelector };\n","import { create } from \"zustand\";\nimport { persist, createJSONStorage } from \"zustand/middleware\";\nimport type { Chain } from \"../types\";\n\ninterface chainState {\n chains?: Chain[];\n fromChain?: Chain;\n toChain?: Chain;\n\n allowedFromChains?: Chain[];\n allowedToChains?: Chain[];\n isLoadingToChains: boolean;\n}\n\ninterface ChainActions {\n setChains: (data?: Chain[]) => Promise<void>;\n setFromChain: (data?: Chain) => void;\n setToChain: (data?: Chain) => void;\n\n setAllowedFromChains: (data?: Chain[]) => void;\n setAllowedToChains: (data?: Chain[]) => void;\n setIsLoadingToChains: (v: boolean) => void;\n\n swapChains: () => void;\n}\n\ntype ChainStoreType = chainState & ChainActions;\n\nexport const useChainsStore = create<ChainStoreType>()(\n persist(\n (set, get) => ({\n chains: undefined,\n fromChain: undefined,\n toChain: undefined,\n\n allowedFromChains: undefined,\n allowedToChains: undefined,\n isLoadingToChains: false,\n\n setChains: async (data) => {\n const prev = get().chains;\n const same = (() => {\n if (!prev && !data) return true;\n if (!prev || !data) return false;\n if (prev.length !== data.length) return false;\n for (let i = 0; i < prev.length; i++) {\n if (prev[i]?.chainKey !== data[i]?.chainKey) return false;\n }\n return true;\n })();\n if (same) return;\n set({ chains: data });\n },\n setFromChain: (data) => {\n const prev = get().fromChain;\n if ((prev?.chainKey ?? null) === (data?.chainKey ?? null)) return;\n set({ fromChain: data });\n },\n setToChain: (data) => {\n const prev = get().toChain;\n if ((prev?.chainKey ?? null) === (data?.chainKey ?? null)) return;\n set({ toChain: data });\n },\n\n setAllowedFromChains: (data) => {\n const prev = get().allowedFromChains;\n const same = (() => {\n if (!prev && !data) return true;\n if (!prev || !data) return false;\n if (prev.length !== data.length) return false;\n for (let i = 0; i < prev.length; i++) {\n if (prev[i]?.chainKey !== data[i]?.chainKey) return false;\n }\n return true;\n })();\n if (same) return;\n set({ allowedFromChains: data });\n },\n setAllowedToChains: (data) => {\n const prev = get().allowedToChains;\n const same = (() => {\n if (!prev && !data) return true;\n if (!prev || !data) return false;\n if (prev.length !== data.length) return false;\n for (let i = 0; i < prev.length; i++) {\n if (prev[i]?.chainKey !== data[i]?.chainKey) return false;\n }\n return true;\n })();\n if (same) return;\n set({ allowedToChains: data });\n },\n setIsLoadingToChains: (v) => set({ isLoadingToChains: v }),\n\n swapChains: () =>\n set((state) => ({\n fromChain: state.toChain,\n toChain: state.fromChain,\n })),\n }),\n {\n name: 'evaa-bridge-chains',\n storage: createJSONStorage(() => sessionStorage),\n partialize: (state) => ({\n fromChain: state.fromChain,\n toChain: state.toChain,\n }),\n }\n )\n);\n","import type { Token } from \"../types\";\n\n/**\n * Нормализует строку символа токена\n * - USD₮ → USDT\n * - Приводит к верхнему регистру\n * - Убирает все символы кроме букв и цифр\n */\nexport function normalizeTickerSymbol(s: string): string {\n return s\n .toUpperCase()\n .replace(/₮/g, \"T\")\n .replace(/[^A-Z0-9]/g, \"\");\n}\n\n/**\n * Нормализует символ токена, убирая вариативные суффиксы и префиксы\n *\n * Примеры трансформаций:\n * - USD₮0 → USDT\n * - USD₮0.s → USDT\n * - USDT0 → USDT\n * - USDC.e → USDC\n * - S*USDC.e → USDC\n * - USDC.n → USDC\n */\nexport function normalizeTokenSymbol(token: Token): Token {\n // Нормализация символа:\n // 1. USD₮ → USDT\n // 2. Убираем суффиксы \"0\", \".s\", \".S\" и их комбинации для USDT\n // 3. Убираем суффиксы \".e\", \".n\" для USDC, и префикс \"S*\" для USDC\n let normalizedSymbol = token.symbol\n .toUpperCase()\n .replace(/₮/g, \"T\");\n\n // Убираем префикс S* для USDC: S*USDC.e → USDC.e\n normalizedSymbol = normalizedSymbol.replace(/^S\\*/, \"\");\n\n // Убираем суффиксы для USDT: USDT0.S → USDT, USDT0 → USDT, USDT.S → USDT\n normalizedSymbol = normalizedSymbol\n .replace(/0\\.S$/i, \"\") // USDT0.s → USDT\n .replace(/0$/, \"\") // USDT0 → USDT\n .replace(/\\.S$/i, \"\"); // USDT.s → USDT\n\n // Убираем суффиксы для USDC: USDC.e → USDC, USDC.n → USDC\n normalizedSymbol = normalizedSymbol\n .replace(/\\.E$/i, \"\") // USDC.e → USDC\n .replace(/\\.N$/i, \"\"); // USDC.n → USDC\n\n return {\n ...token,\n symbol: normalizedSymbol,\n };\n}\n","import type { Token } from \"../types\";\nimport { normalizeTickerSymbol } from \"./token-normalization\";\n\nexport type AssetMatrix = Record<string, Record<string, Token>>;\n\n// Закреплённые сверху (как у Stargate)\nconst POPULAR_ORDER = [\n \"USDT\",\n \"USDC\",\n \"ETH\",\n \"BTC\",\n \"WETH\",\n \"WBTC\",\n \"STG\",\n \"DAI\",\n \"TUSD\",\n \"FDUSD\",\n \"USDD\",\n \"USDE\",\n \"PYUSD\",\n \"FRAX\",\n];\n\nconst STABLES = new Set([\n \"USDT\",\n \"USDC\",\n \"DAI\",\n \"TUSD\",\n \"FDUSD\",\n \"USDD\",\n \"USDE\",\n \"PYUSD\",\n \"FRAX\",\n]);\n\nexport function buildAssetMatrix(tokens: Token[]): AssetMatrix {\n const m: AssetMatrix = {};\n for (const t of tokens) {\n if (!t.isBridgeable) continue;\n const symbol = (t.symbol ?? \"\").toUpperCase();\n if (!symbol) continue;\n (m[symbol] ||= {})[t.chainKey] = t; // один актив, много сетей\n }\n\n // Debug logging\n const chainStats: Record<string, number> = {};\n Object.values(m).forEach((byChain) => {\n Object.keys(byChain).forEach((chainKey) => {\n chainStats[chainKey] = (chainStats[chainKey] || 0) + 1;\n });\n });\n console.log(\n `[DEBUG] Asset matrix built: ${\n Object.keys(m).length\n } assets across chains:`,\n chainStats\n );\n\n return m;\n}\n\nexport function listAssetsForSelect(tokens: Token[]): Token[] {\n const m = buildAssetMatrix(tokens);\n\n // Канонический представитель ассета: Ethereum → Arbitrum → BSC → Polygon → любой\n const pickOrder = [\"ethereum\", \"arbitrum\", \"bsc\", \"polygon\"];\n\n // Базовые элементы (по одному на символ)\n const base = Object.values(m).map((byChain) => {\n const preferred =\n pickOrder.map((k) => byChain[k]).find(Boolean) ??\n Object.values(byChain)[0];\n\n return preferred;\n });\n\n // Быстрый доступ по нормализованному символу\n const byNorm = new Map(base.map((e) => [normalizeTickerSymbol(e.symbol), e]));\n\n // 1) popular — в фиксированном порядке, только присутствующие, без дублей\n const used = new Set<string>();\n const popular: Token[] = [];\n for (const s of POPULAR_ORDER) {\n const key = normalizeTickerSymbol(s);\n const item = byNorm.get(key);\n if (item && !used.has(key)) {\n popular.push(item);\n used.add(key);\n }\n }\n\n // 2) stable (если не попали в popular), по алфавиту\n const stable = base\n .filter((e) => {\n const k = normalizeTickerSymbol(e.symbol);\n return !used.has(k) && STABLES.has(k);\n })\n .sort((a, b) => a.symbol.localeCompare(b.symbol));\n\n for (const e of stable) used.add(normalizeTickerSymbol(e.symbol));\n\n // 3) остальные по алфавиту\n const other = base\n .filter((e) => !used.has(normalizeTickerSymbol(e.symbol)))\n .sort((a, b) => a.symbol.localeCompare(b.symbol));\n\n return [...popular, ...stable, ...other];\n}\n\nexport function resolveTokenOnChain(\n tokens: Token[],\n assetSymbol: string,\n chainKey: string\n): Token | undefined {\n const sym = assetSymbol.toUpperCase();\n return tokens.find(\n (t) =>\n t.isBridgeable &&\n (t.symbol ?? \"\").toUpperCase() === sym &&\n t.chainKey === chainKey\n );\n}\n","import { create } from \"zustand\";\nimport { buildAssetMatrix, type AssetMatrix } from \"../lib/assets\";\nimport type { Token } from \"../types\";\n\ninterface TokensState {\n tokens?: Token[];\n assetMatrix?: AssetMatrix;\n selectedToken?: Token;\n selectedAssetSymbol?: string;\n}\n\ninterface TokensStateActions {\n setTokens: (data: Token[]) => void;\n setSelectedToken: (data?: Token) => void;\n setSelectedAssetSymbol: (data: string) => void;\n}\n\ntype TokensStoreType = TokensState & TokensStateActions;\n\nconst initialState: TokensState = {\n tokens: undefined,\n selectedToken: undefined,\n selectedAssetSymbol: undefined,\n};\n\nconst useTokensStore = create<TokensStoreType>((set) => ({\n ...initialState,\n\n setTokens: (data) => {\n set({ tokens: data, assetMatrix: buildAssetMatrix(data) });\n },\n\n setSelectedToken: (data) => {\n set({ selectedToken: data });\n },\n\n setSelectedAssetSymbol: (data) => {\n const symbol = String(data);\n set({\n selectedAssetSymbol: symbol,\n selectedToken: undefined,\n });\n },\n}));\n\nexport type { Token, TokensState, TokensStateActions, TokensStoreType };\nexport { useTokensStore };\n","export function toLD(human: string, decimals: number): string {\n const [i = \"0\", f = \"\"] = human.replace(\",\", \".\").split(\".\");\n const frac = (f + \"0\".repeat(decimals)).slice(0, decimals);\n return BigInt(i + frac).toString();\n}\nexport function fromLD(ld: string, decimals: number): number {\n const bi = BigInt(ld || \"0\");\n if (decimals === 0) return Number(bi);\n const base = BigInt(10) ** BigInt(decimals);\n const int = bi / base;\n const frac = Number(bi % base) / Number(base);\n return Number(int) + frac;\n}\n","import { useMemo } from \"react\";\nimport { useAccount as useEvmAccount } from \"wagmi\";\nimport { useWallet } from \"@tronweb3/tronwallet-adapter-react-hooks\";\nimport { useTonAddress } from \"@tonconnect/ui-react\";\nimport { useChainsStore } from \"../store/use-chains-store\";\n\nexport function useAddresses() {\n const { fromChain, toChain } = useChainsStore();\n const { address: evmAddress } = useEvmAccount();\n const tonAddress = useTonAddress();\n const { address: tronAddress } = useWallet();\n\n const srcAddress = useMemo(() => {\n if (!fromChain?.chainKey) return undefined;\n\n const chainKey = fromChain.chainKey.toLowerCase();\n\n if (chainKey === \"ton\") {\n return tonAddress || undefined;\n }\n\n if (chainKey === \"tron\") {\n return tronAddress || undefined;\n }\n\n return evmAddress || undefined;\n }, [fromChain?.chainKey, evmAddress, tonAddress, tronAddress]);\n\n const dstAddress = useMemo(() => {\n if (!toChain?.chainKey) return undefined;\n\n const chainKey = toChain.chainKey.toLowerCase();\n\n if (chainKey === \"ton\") {\n return tonAddress || undefined;\n }\n\n if (chainKey === \"tron\") {\n return tronAddress || undefined;\n }\n\n return evmAddress || undefined;\n }, [toChain?.chainKey, evmAddress, tonAddress, tronAddress]);\n\n return {\n srcAddress,\n dstAddress,\n evmAddress,\n tonAddress,\n tronAddress,\n };\n}\n","import { create } from \"zustand\";\nimport type { Quote } from \"../types\";\n\nexport type BridgeQuoteStatus = \"idle\" | \"loading\" | \"success\" | \"error\";\n\ninterface BridgeQuoteState {\n inputAmount: string;\n status: BridgeQuoteStatus;\n quote?: Quote;\n error?: string;\n noRoute: boolean;\n refetchTrigger: number;\n}\n\ninterface BridgeQuoteActions {\n setInputAmount: (v: string) => void;\n setLoading: () => void;\n setQuote: (q?: Quote) => void;\n setError: (e?: string) => void;\n setNoRoute: (v: boolean) => void;\n triggerRefetch: () => void;\n reset: () => void;\n resetWithIdle: () => void;\n}\n\ntype BridgeQuoteStore = BridgeQuoteState & BridgeQuoteActions;\n\nexport const useBridgeQuoteStore = create<BridgeQuoteStore>((set) => ({\n inputAmount: \"\",\n status: \"idle\",\n quote: undefined,\n error: undefined,\n noRoute: false,\n refetchTrigger: 0,\n\n setInputAmount: (v) => set({ inputAmount: v }),\n setLoading: () => set({ status: \"loading\", error: undefined }),\n setQuote: (q) => set({ quote: q, status: q ? \"success\" : \"idle\", error: undefined }),\n setError: (e) => set({ error: e, status: \"error\" }),\n setNoRoute: (v) => set({ noRoute: v }),\n triggerRefetch: () => set((s) => ({ refetchTrigger: s.refetchTrigger + 1 })),\n reset: () =>\n set({\n inputAmount: \"\",\n status: \"idle\",\n quote: undefined,\n error: undefined,\n noRoute: false,\n refetchTrigger: 0,\n }),\n resetWithIdle: () =>\n set({\n status: \"idle\",\n quote: undefined,\n error: undefined,\n noRoute: false,\n }),\n}));\n","export interface Chain {\n chainId: number;\n chainKey: string;\n chainType: string;\n name: string;\n nativeCurrency: {\n address: string;\n chainKey: string;\n decimals: number;\n name: string;\n symbol: string;\n };\n shortName: string;\n}\n\nexport interface TokenPrice {\n usd: number;\n}\n\nexport interface Token {\n address: string;\n symbol: string;\n chainKey: string;\n name: string;\n decimals: number;\n isBridgeable: boolean;\n price?: TokenPrice;\n}\n\nexport interface Message {\n payload: string;\n amount: string;\n address: string;\n}\nexport interface Transaction {\n data?: string;\n to?: string;\n from?: string;\n value?: string;\n network?: string;\n messages?: Message[];\n}\nexport interface TransactionStep {\n type: string;\n sender: string;\n chainKey: string;\n transaction: Transaction;\n}\nexport interface Fees {\n token: string;\n chainKey: string;\n amount: string;\n type: string;\n}\n\nexport const RouteType = {\n STARGATE_V2_FAST: \"STARGATE_V2_FAST\",\n OFT: \"OFT\",\n STARGATE_V1: \"STARGATE_V1\",\n} as const;\n\nexport type RouteType = (typeof RouteType)[keyof typeof RouteType];\n\nexport const RoutePriority = {\n RECOMMENDED: \"recommended\",\n FASTEST: \"fastest\",\n CHEAPEST: \"cheapest\",\n} as const;\n\nexport type RoutePriority = (typeof RoutePriority)[keyof typeof RoutePriority];\n\nexport interface Quote {\n route: string;\n error: string | null;\n srcAmount: string;\n dstAmount: string;\n srcAmountMax: string;\n dstAmountMin: string;\n srcToken: string;\n dstToken: string;\n srcAddress: string;\n dstAddress: string;\n srcChainKey: string;\n dstChainKey: string;\n dstNativeAmount: string;\n duration: { estimated: number };\n fees: Fees[];\n steps: TransactionStep[];\n}\n\nexport type ChainKey = \"TON\" | \"EVM\" | \"TRON\" | string;\nexport type WalletKind = \"ton\" | \"evm\" | \"tron\" | null;\n\nexport interface TronLinkApi {\n ready?: boolean;\n tronWeb?: import(\"tronweb\").TronWeb;\n request?: (args: { method: string; params?: unknown[] }) => Promise<unknown>;\n on?: (event: string, handler: (...args: unknown[]) => void) => void;\n off?: (event: string, handler: (...args: unknown[]) => void) => void;\n}\n\nexport type TxStatus = \"success\" | \"failed\" | \"timeout\";\nexport interface MonitorResult {\n status: TxStatus;\n reason?: string | null; // текст причины или сообщение об ошибке\n receipt?: unknown; // chain-specific объект (receipt/tx info)\n confirmations?: number; // для EVM\n}\n","import { create } from \"zustand\";\nimport { RoutePriority } from \"../types\";\n\nexport type GasPreset = \"auto\" | \"none\" | \"medium\" | \"max\";\n\n// Тип для ключей конфигурации газа\ntype ChainGasConfig = keyof typeof SRC_RESERVE_HUMAN;\n\nconst GAS_MULTIPLIERS = {\n none: 0,\n auto: 0,\n medium: 0,\n max: 1, // Use base amount directly for max\n} as const;\n\nconst CHAIN_BASE_GAS = {\n tron: \"200000000\", // 200 TRX\n ethereum: \"10000000000000000\", // 0.01 ETH\n arbitrum: \"10000000000000000\", // 0.01 ETH\n optimism: \"10000000000000000\", // 0.01 ETH\n polygon: \"10000000000000000000\", // 10 MATIC\n avalanche: \"100000000000000000\", // 0.1 AVAX\n bsc: \"10000000000000000000\", // 0.01 BNB\n base: \"10000000000000000\", // 0.01 ETH\n ton: \"100000000\", // 0.1 TON\n default: \"10000000000000000\", // 0.01 ETH equivalent\n} as const;\n\nexport function gasPresetToDstNativeAmount(\n gasPreset: GasPreset,\n chainKey?: string\n): string {\n const multiplier = GAS_MULTIPLIERS[gasPreset];\n if (multiplier === 0) return \"0\";\n\n // Get base gas for chain\n const baseGas =\n chainKey && chainKey in CHAIN_BASE_GAS\n ? CHAIN_BASE_GAS[chainKey as keyof typeof CHAIN_BASE_GAS]\n : CHAIN_BASE_GAS.default;\n\n return (BigInt(baseGas) * BigInt(multiplier)).toString();\n}\n\nconst SRC_RESERVE_HUMAN = {\n ethereum: { none: 0.001, auto: 0.002, medium: 0.005, max: 0.01 },\n arbitrum: { none: 0.0002, auto: 0.0005, medium: 0.001, max: 0.003 },\n optimism: { none: 0.0002, auto: 0.0005, medium: 0.001, max: 0.003 },\n base: { none: 0.0002, auto: 0.0005, medium: 0.001, max: 0.003 },\n polygon: { none: 1, auto: 2, medium: 5, max: 10 },\n avalanche: { none: 0.02, auto: 0.05, medium: 0.1, max: 0.2 },\n bsc: { none: 0.002, auto: 0.005, medium: 0.01, max: 0.02 },\n ton: { none: 0.05, auto: 0.1, medium: 0.2, max: 0.5 },\n tron: { none: 10, auto: 25, medium: 50, max: 200 },\n default: { none: 0.001, auto: 0.002, medium: 0.005, max: 0.01 },\n} as const;\n\nexport function sourceGasReserveHuman(\n gasPreset: GasPreset,\n chainKey?: string\n): number {\n const isValidChain = chainKey && chainKey in SRC_RESERVE_HUMAN;\n const table = isValidChain\n ? SRC_RESERVE_HUMAN[chainKey as ChainGasConfig]\n : SRC_RESERVE_HUMAN.default;\n return table[gasPreset] ?? table.none;\n}\n\nexport function gasPresetToDisplayAmount(\n gasPreset: GasPreset,\n chainKey?: string,\n decimals: number = 18\n): number {\n const weiAmount = gasPresetToDstNativeAmount(gasPreset, chainKey);\n return Number(weiAmount) / Math.pow(10, decimals);\n}\n\nexport function gasPresetToUsdValue(\n gasPreset: GasPreset,\n priceUsd: number,\n chainKey?: string,\n decimals: number = 18\n): number {\n const amount = gasPresetToDisplayAmount(gasPreset, chainKey, decimals);\n return amount * priceUsd;\n}\n\ninterface SettingsState {\n slippageBps: number;\n routePriority: RoutePriority;\n gasPreset: GasPreset;\n setSlippageBps: (bps: number) => void;\n setRoutePriority: (priority: RoutePriority) => void;\n setGasPreset: (preset: GasPreset) => void;\n\n getDstNativeAmount: (chainKey?: string) => string;\n getSourceGasReserveHuman: (chainKey?: string) => number;\n getSlippageDecimal: () => number;\n}\n\nexport const useSettingsStore = create<SettingsState>((set, get) => ({\n slippageBps: 50, // 0.5%\n routePriority: RoutePriority.RECOMMENDED,\n gasPreset: \"none\",\n setSlippageBps: (bps) => set({ slippageBps: bps }),\n setRoutePriority: (priority) => set({ routePriority: priority }),\n setGasPreset: (preset) => set({ gasPreset: preset }),\n\n getDstNativeAmount: (chainKey) => {\n const { gasPreset } = get();\n return gasPresetToDstNativeAmount(gasPreset, chainKey);\n },\n getSourceGasReserveHuman: (chainKey?: string) => {\n const { gasPreset } = get();\n return sourceGasReserveHuman(gasPreset, chainKey);\n },\n getSlippageDecimal: () => {\n const { slippageBps } = get();\n return slippageBps / 10000;\n },\n}));\n","import { RoutePriority, type Quote } from \"../types\";\n\nexport type QuoteRequest = {\n srcChainKey: string;\n dstChainKey: string;\n srcToken: string;\n dstToken: string;\n srcAmountLD: string;\n dstAmountMinLD?: string;\n srcAddress?: string;\n dstAddress?: string;\n dstNativeAmount?: string;\n slippage?: number;\n routePriority?: RoutePriority;\n};\n\n/**\n * Fetch all available quotes from Stargate API\n * Does not filter by route priority - returns all available routes (taxi, bus, OFT)\n */\nasync function fetchQuotes(req: QuoteRequest): Promise<Quote[]> {\n const params: Record<string, string> = {\n srcChainKey: req.srcChainKey,\n dstChainKey: req.dstChainKey,\n srcToken: req.srcToken,\n dstToken: req.dstToken,\n srcAmount: req.srcAmountLD,\n dstAmountMin: req.dstAmountMinLD ?? \"0\",\n };\n\n if (req.srcAddress) params.srcAddress = req.srcAddress;\n if (req.dstAddress) params.dstAddress = req.dstAddress;\n if (req.dstNativeAmount && req.dstNativeAmount !== \"0\")\n params.dstNativeAmount = req.dstNativeAmount;\n if (req.slippage && req.slippage > 0) params.slippage = String(req.slippage);\n\n const url = `https://stargate.finance/api/v1/quotes?${new URLSearchParams(\n params\n ).toString()}`;\n const res = await fetch(url);\n const data = await res.json();\n\n return (data?.quotes as Quote[]) ?? [];\n}\n\n/**\n * Select best quote based on user's priority preference\n * - fastest: minimum duration, prefer \"taxi\" routes (immediate transfer)\n * - cheapest: minimum total fees by amount, prefer \"bus\" routes (batched, delayed)\n * - recommended: maximum destination amount (best output)\n */\nfunction selectQuoteByPriority(\n routes: Quote[],\n priority: RoutePriority\n): Quote {\n if (priority === RoutePriority.FASTEST) {\n return routes.reduce((fastest: Quote, cur: Quote) => {\n const fastestDuration = fastest.duration?.estimated ?? Number.MAX_VALUE;\n const curDuration = cur.duration?.estimated ?? Number.MAX_VALUE;\n\n // Prefer shorter duration\n if (curDuration < fastestDuration) return cur;\n\n // Prefer \"taxi\" route (immediate transfer)\n if ((cur.route || \"\").toLowerCase().includes(\"taxi\")) return cur;\n\n return fastest;\n });\n }\n\n if (priority === RoutePriority.CHEAPEST) {\n // Sum all fee amounts as BigInt (no USD conversion - API doesn't provide usd field)\n const sumFees = (quote: Quote): bigint => {\n let total = 0n;\n for (const fee of quote.fees ?? []) {\n total += BigInt(fee.amount ?? \"0\");\n }\n return total;\n };\n\n return routes.reduce((cheapest: Quote, cur: Quote) => {\n const cheapestFees = sumFees(cheapest);\n const curFees = sumFees(cur);\n\n // Prefer lower total fees\n if (curFees < cheapestFees) return cur;\n\n // Prefer \"bus\" route (batched, cheaper)\n if ((cur.route || \"\").toLowerCase().includes(\"bus\")) return cur;\n\n return cheapest;\n });\n }\n\n // \"recommended\" - return route with highest destination amount\n return routes.reduce((best: Quote, cur: Quote) =>\n BigInt(cur.dstAmount) > BigInt(best.dstAmount) ? cur : best\n );\n}\n\n/**\n * Get quote by priority preference\n * If API returns single route, use it directly\n * If multiple routes available, select based on user's priority\n */\nexport async function getQuotesByPriority(\n req: QuoteRequest\n): Promise<Quote | null> {\n const routes = await fetchQuotes(req);\n\n if (!routes.length) return null;\n if (routes.length === 1) return routes[0];\n\n const priority = req.routePriority || RoutePriority.RECOMMENDED;\n return selectQuoteByPriority(routes, priority);\n}\n\nexport type QuoteSendRequest = {\n srcChainKey: string;\n dstChainKey: string;\n srcToken: string;\n toAddressBytes32: string;\n amountLD: string;\n minAmountLD: string;\n payInLzToken?: boolean;\n};\n\nexport type QuoteSendResponse = {\n fee: { nativeFee: string; lzTokenFee: string };\n};\n","import { Address } from \"@ton/core\";\nimport { fromLD } from \"./amount\";\nimport type { Chain, Token } from \"../types\";\n\nexport function resolveTokenOnChainFromMatrix(\n assetMatrix: Record<string, Record<string, Token>> | undefined,\n assetSymbol: string | undefined,\n chainKey: string | undefined\n): Token | undefined {\n if (!assetMatrix || !assetSymbol || !chainKey) return undefined;\n const byChain = assetMatrix[assetSymbol.toUpperCase()];\n return byChain?.[chainKey];\n}\n\nexport const DEFAULT_SLIPPAGE_BPS = 50;\n\nconst lower = (s?: string) => (s ?? \"\").toLowerCase();\nconst normSym = (s?: string) =>\n (s ?? \"\")\n .toUpperCase()\n .replace(/₮/g, \"T\")\n .replace(/[^A-Z0-9]/g, \"\");\n\nexport function tonNorm(addr?: string): string | null {\n if (!addr) return null;\n try {\n if (addr.includes(\":\")) {\n return Address.parseRaw(addr).toString({\n bounceable: false,\n urlSafe: true,\n });\n }\n return Address.parse(addr).toString({ bounceable: false, urlSafe: true });\n } catch {\n return null;\n }\n}\n\nexport const isZeroAddr = (a?: string) =>\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (!!a && /^0x0{40}$/i.test(a)) || /^0x[eE]{4}e{36}$/i.test(a as any);\n\nexport function addrForApi(chainKey: string, addr: string): string {\n if (chainKey === \"ton\") return tonNorm(addr)!;\n // Tron и EVM адреса передаются как есть\n return addr;\n}\n\nexport function isNativeAddrEqual(\n chain: Chain | undefined,\n tokenAddr?: string\n) {\n if (!chain) return false;\n if (!tokenAddr) return false;\n\n if (isZeroAddr(tokenAddr)) return true;\n\n const nativeAddr = chain.nativeCurrency?.address;\n if (!nativeAddr) return false;\n\n if (chain.chainKey === \"ton\") {\n const a = tonNorm(tokenAddr);\n const b = tonNorm(nativeAddr);\n return !!a && !!b && a === b;\n }\n return lower(nativeAddr) === lower(tokenAddr);\n}\n\nexport function findNativeMeta(\n tokens: Token[] | undefined,\n chain: Chain | undefined\n): { decimals: number; priceUsd?: number } {\n if (!chain) return { decimals: 18, priceUsd: undefined };\n const sym = normSym(chain.nativeCurrency?.symbol);\n if (!sym) {\n return { decimals: chain.chainKey === \"ton\" ? 9 : 18, priceUsd: undefined };\n }\n const sameChain =\n tokens?.find(\n (t) => t.chainKey === chain.chainKey && normSym(t.symbol) === sym\n ) ?? undefined;\n if (sameChain)\n return { decimals: sameChain.decimals, priceUsd: sameChain.price?.usd };\n\n const anyChain = tokens?.find((t) => normSym(t.symbol) === sym);\n if (anyChain)\n return { decimals: anyChain.decimals, priceUsd: anyChain.price?.usd };\n\n return { decimals: chain.chainKey === \"ton\" ? 9 : 18, priceUsd: undefined };\n}\n\nexport function lookupTokenMeta(\n tokens: Token[] | undefined,\n chains: Chain[] | undefined,\n chainKey?: string,\n tokenAddr?: string\n): { decimals: number; priceUsd?: number } {\n if (!chainKey) return { decimals: 18, priceUsd: undefined };\n\n const chain = chains?.find((c) => c.chainKey === chainKey);\n\n const hit =\n tokens?.find((t) => {\n if (t.chainKey !== chainKey) return false;\n if (chainKey === \"ton\") {\n const a = tonNorm(t.address);\n const b = tonNorm(tokenAddr);\n return !!a && !!b && a === b;\n }\n return lower(t.address) === lower(tokenAddr);\n }) ?? undefined;\n\n if (hit) return { decimals: hit.decimals, priceUsd: hit.price?.usd };\n\n if (isNativeAddrEqual(chain, tokenAddr)) {\n return findNativeMeta(tokens, chain);\n }\n\n return { decimals: chainKey === \"ton\" ? 9 : 18, priceUsd: undefined };\n}\n\nexport function computeFeesUsdFromArray(\n fees:\n | Array<{\n amount?: string;\n token?: string;\n chainKey?: string;\n type?: string;\n usd?: number;\n }>\n | undefined,\n tokens: Token[] | undefined,\n chains: Chain[] | undefined\n): {\n totalUsd: number;\n protocolFeeUsd?: number;\n messageFeeUsd?: number;\n serviceUsd?: number;\n blockchainUsd?: number;\n} {\n if (!fees?.length) return { totalUsd: 0 };\n\n let total = 0;\n let protocolFeeUsd = 0;\n let messageFeeUsd = 0;\n const byType = new Map<string, number>();\n\n for (const f of fees) {\n let usd = Number(f.usd ?? 0);\n\n if (!usd) {\n const { decimals, priceUsd } = lookupTokenMeta(\n tokens,\n chains,\n f.chainKey,\n f.token\n );\n const human = fromLD(String(f.amount ?? \"0\"), decimals);\n usd = (priceUsd ?? 0) * human;\n }\n\n total += usd;\n const type = (f.type ?? \"other\").toLowerCase();\n byType.set(type, (byType.get(type) ?? 0) + usd);\n\n // Categorize fees by type\n if (type === \"protocol\" || type === \"service\") {\n protocolFeeUsd += usd;\n } else if (type === \"message\" || type === \"gas\" || type === \"network\") {\n messageFeeUsd += usd;\n }\n }\n\n const serviceUsd =\n byType.get(\"protocol\") ?? byType.get(\"service\") ?? undefined;\n const blockchainUsd =\n byType.get(\"gas\") ??\n byType.get(\"network\") ??\n byType.get(\"message\") ??\n undefined;\n\n return {\n totalUsd: total,\n protocolFeeUsd: protocolFeeUsd > 0 ? protocolFeeUsd : undefined,\n messageFeeUsd: messageFeeUsd > 0 ? messageFeeUsd : undefined,\n serviceUsd,\n blockchainUsd,\n };\n}\n\n\nexport function sumFeeByTokenLD(\n fees:\n | Array<{ amount?: string; token?: string; chainKey?: string }>\n | undefined,\n dstTokenAddr?: string,\n dstChainKey?: string\n): string {\n if (!fees?.length || !dstTokenAddr || !dstChainKey) return \"0\";\n let acc = 0n;\n for (const f of fees) {\n if (f.chainKey !== dstChainKey) continue;\n const same =\n dstChainKey === \"ton\"\n ? tonNorm(f.token) === tonNorm(dstTokenAddr)\n : lower(f.token) === lower(dstTokenAddr);\n if (!same) continue;\n acc += BigInt((f.amount ?? \"0\") as string);\n }\n return acc.toString();\n}\n","import { Address } from \"@ton/core\";\n\nexport const isEvmAddress = (addr?: string): boolean => {\n return /^0x[0-9a-fA-F]{40}$/.test(addr ?? \"\");\n};\n\nexport const isTronAddress = (addr?: string): boolean => {\n return /^T[1-9A-HJ-NP-Za-km-z]{33}$/.test(addr ?? \"\");\n};\n\nexport const isTonAddress = (addr?: string): boolean => {\n if (!addr) return false;\n try {\n if (addr.includes(\":\")) {\n Address.parseRaw(addr);\n return true;\n }\n Address.parse(addr);\n return true;\n } catch {\n return false;\n }\n};\n\nexport function isAddressValidForChain(\n chainKey?: string,\n addr?: string\n): boolean {\n if (!chainKey || !addr) return false;\n\n if (chainKey === \"ton\") return isTonAddress(addr);\n if (chainKey === \"tron\") return isTronAddress(addr);\n return isEvmAddress(addr);\n}\n","import { createContext } from \"react\";\nimport type { ChainStrategyContextValue } from \"./chain-strategy-provider\";\n\nexport const ChainStrategyContext = createContext<\n ChainStrategyContextValue | undefined\n>(undefined);\n","import { useContext } from \"react\";\nimport { ChainStrategyContext } from \"../chains/chain-strategy-context\";\n\nexport function useChainStrategies() {\n const context = useContext(ChainStrategyContext);\n\n if (!context) {\n throw new Error(\n \"useChainStrategies must be used within ChainStrategyProvider\"\n );\n }\n\n return context;\n}\n","/**\n * Обрезает число до указанного количества десятичных знаков без округления\n * Например: truncateToDecimals(3.389, 2) = \"3.38\" (не \"3.39\")\n */\nexport const truncateToDecimals = (num: number, decimals: number): string => {\n if (!isFinite(num) || isNaN(num)) return \"0.00\";\n\n const multiplier = Math.pow(10, decimals);\n const truncated = Math.floor(num * multiplier) / multiplier;\n return truncated.toFixed(decimals);\n};\n\n/**\n * Formats token amount with symbol-aware logic\n * Stablecoins show as integers when >= 1, other tokens use adaptive decimals\n */\nexport const formatTokenAmount = (\n amount: number,\n symbol?: string,\n options?: { decimals?: number }\n): string => {\n const normalizedSymbol = (symbol ?? \"\").toUpperCase();\n\n // For stablecoins, show as integer if >= 1\n if (\n [\"USDT\", \"USDC\", \"DAI\", \"BUSD\"].includes(normalizedSymbol) &&\n amount >= 1\n ) {\n return `${Math.floor(amount)} ${normalizedSymbol}`;\n }\n\n // Use custom decimals if provided\n if (options?.decimals !== undefined) {\n return `${amount.toFixed(options.decimals)} ${normalizedSymbol}`;\n }\n\n // For other tokens, use appropriate decimal places\n if (amount >= 1) {\n return `${amount.toFixed(0)} ${normalizedSymbol}`;\n } else if (amount >= 0.001) {\n return `${amount.toFixed(3)} ${normalizedSymbol}`;\n } else {\n return `${amount.toFixed(6)} ${normalizedSymbol}`;\n }\n};\n\n/**\n * Formats USD values with adaptive decimal precision\n */\nexport const formatUsd = (value?: number): string => {\n if (!value || !isFinite(value)) return \"$0\";\n if (value >= 1) return `$${value.toFixed(2)}`;\n return `$${value.toFixed(6).replace(/0+$/, \"\").replace(/\\.$/, \"\")}`;\n};\n\n/**\n * Formats percentage from basis points (bps)\n * @param bps - Basis points (e.g., 50 = 0.5%)\n * @param decimals - Number of decimal places (default: 2)\n */\nexport const formatPercentage = (bps: number, decimals: number = 2): string => {\n return `${(bps / 100).toFixed(decimals)}%`;\n};\n\n/**\n * Formats balance with specified decimal precision\n * Returns \"0.00\" for zero/invalid values\n */\nexport const formatBalance = (amount: number, decimals: number = 2): string => {\n if (!isFinite(amount) || isNaN(amount) || amount <= 0) {\n return \"0.00\";\n }\n return amount.toFixed(decimals);\n};\n\n/**\n * Formats transaction hash for display\n * Shows first 4 and last 4 characters with ellipsis\n * @param hash - Transaction hash\n * @param startChars - Number of characters to show at start (default: 4)\n * @param endChars - Number of characters to show at end (default: 4)\n */\nexport const formatHash = (\n hash: string | undefined,\n startChars: number = 4,\n endChars: number = 4\n): string => {\n if (!hash) return \"\";\n if (hash.length <= startChars + endChars) return hash;\n return `${hash.slice(0, startChars)}...${hash.slice(-endChars)}`;\n};\n\n/**\n * Alias for formatHash - formats wallet addresses for display\n * Shows first 4 and last 4 characters with ellipsis\n * @param address - Wallet address\n * @param startChars - Number of characters to show at start (default: 4)\n * @param endChars - Number of characters to show at end (default: 4)\n */\nexport const formatAddress = formatHash;","import { TonClient } from \"@ton/ton\";\n\nexport interface EvmChainConfig {\n usdtAddress: string;\n gasEstimates: {\n approve: bigint;\n bridge: bigint;\n };\n gasBuffer: number;\n timeout: number;\n requiredConfirmations: number;\n}\n\nexport interface TonChainConfig {\n apiUrl: string;\n timeout: number;\n validUntil: number;\n pollingInterval: number;\n estimatedNetworkFee: string; // in nanoton (LD format)\n}\n\nexport interface TronChainConfig {\n timeout: number;\n feeLimit: number;\n requiredConfirmations: number;\n pollingInterval: number;\n estimatedNetworkFee: string; // in SUN (LD format)\n}\n\nexport interface ChainConfigs {\n evm: EvmChainConfig;\n ton: TonChainConfig;\n tron: TronChainConfig;\n}\n\nexport const EVM_CONFIG: EvmChainConfig = {\n usdtAddress: \"0xdAC17F958D2ee523a2206206994597C13D831ec7\",\n gasEstimates: {\n approve: 65_000n,\n bridge: 300_000n,\n },\n gasBuffer: 1.2, // 20% buffer\n timeout: 300_000, // 5 minutes (increased for slower networks)\n requiredConfirmations: 3, // Wait for 3 confirmations for reorg protection\n};\n\nexport const TON_CONFIG: TonChainConfig = {\n apiUrl: \"https://toncenter.com/api/v2\",\n timeout: 360_000, // 6 minutes\n validUntil: 600, // 10 minutes\n pollingInterval: 5000, // 5 seconds between transaction status checks\n estimatedNetworkFee: \"100000000\", // 0.1 TON in nanoton (conservative estimate)\n};\n\nexport const TRON_CONFIG: TronChainConfig = {\n timeout: 120_000, // 2 minutes (for 19 confirmations)\n feeLimit: 100_000_000, // 100 TRX in sun\n requiredConfirmations: 19, // TRON standard: 19 blocks for confirmation\n pollingInterval: 3000, // 3 seconds between checks\n estimatedNetworkFee: \"10000000\", // 10 TRX in SUN (fallback estimate)\n};\n\nexport const CHAIN_CONFIGS: ChainConfigs = {\n evm: EVM_CONFIG,\n ton: TON_CONFIG,\n tron: TRON_CONFIG,\n};\n\n// Singleton TonClient instance to prevent race conditions\nlet tonClientInstance: TonClient | null = null;\n\nexport function getTonClient(\n customClient?: TonClient,\n apiKey?: string\n): TonClient {\n // If a custom client is provided, use it directly\n if (customClient) {\n return customClient;\n }\n\n // Otherwise, use or create the singleton instance\n if (!tonClientInstance) {\n tonClientInstance = new TonClient({\n endpoint: `${TON_CONFIG.apiUrl}/jsonRPC`,\n apiKey,\n });\n }\n return tonClientInstance;\n}\n","import { fromLD } from \"../lib/amount\";\nimport { truncateToDecimals } from \"./formatters\";\nimport { computeFeesUsdFromArray, sumFeeByTokenLD } from \"../lib/quote\";\nimport type { Quote, Token, Chain, Fees } from \"../types\";\nimport { TON_CONFIG, TRON_CONFIG, EVM_CONFIG } from \"../chains/config\";\nimport type { TronWeb } from \"tronweb\";\nimport type { PublicClient } from \"viem\";\n\n/**\n * Get human-readable amounts from quote\n */\nexport function getQuoteAmounts(\n quote: Quote | undefined,\n srcToken: Token | undefined,\n dstToken: Token | undefined\n) {\n if (!quote || !srcToken || !dstToken) {\n return {\n inputHuman: 0,\n outputHuman: 0,\n outputHumanRounded: \"0\",\n minReceivedHuman: 0,\n };\n }\n\n const inputHuman = fromLD(quote.srcAmount, srcToken.decimals);\n const outputHuman = fromLD(quote.dstAmount, dstToken.decimals);\n const outputHumanRounded = truncateToDecimals(outputHuman, 2);\n const minReceivedHuman = fromLD(\n quote.dstAmountMin || \"0\",\n dstToken.decimals\n );\n\n return {\n inputHuman,\n outputHuman,\n outputHumanRounded,\n minReceivedHuman,\n };\n}\n\n/**\n * Get aggregated fees from quote\n */\nexport function getQuoteFees(\n quote: Quote | undefined,\n tokens: Token[] | undefined,\n chains: Chain[] | undefined,\n srcToken: Token | undefined,\n dstToken: Token | undefined\n) {\n if (!quote || !tokens || !chains) {\n return {\n totalUsd: 0,\n protocolFeeUsd: undefined,\n messageFeeUsd: undefined,\n serviceUsd: undefined,\n blockchainUsd: undefined,\n inSrcToken: undefined,\n inDstToken: undefined,\n };\n }\n\n const feeData = computeFeesUsdFromArray(quote.fees, tokens, chains);\n\n // Calculate fees in source and destination tokens\n let inSrcToken: number | undefined = undefined;\n let inDstToken: number | undefined = undefined;\n\n if (srcToken && quote.srcChainKey) {\n const feeInSrcLD = sumFeeByTokenLD(\n quote.fees,\n srcToken.address,\n quote.srcChainKey\n );\n const feeInSrcHuman = fromLD(feeInSrcLD, srcToken.decimals);\n if (feeInSrcHuman > 0) {\n inSrcToken = Number(truncateToDecimals(feeInSrcHuman, 8));\n } else if (feeData.totalUsd > 0 && srcToken.price?.usd) {\n // Approximate from USD\n const feeInSrcApprox = feeData.totalUsd / srcToken.price.usd;\n inSrcToken = Number(truncateToDecimals(feeInSrcApprox, 8));\n }\n }\n\n if (dstToken && quote.dstChainKey) {\n const feeInDstLD = sumFeeByTokenLD(\n quote.fees,\n dstToken.address,\n quote.dstChainKey\n );\n const feeInDstHuman = fromLD(feeInDstLD, dstToken.decimals);\n if (feeInDstHuman > 0) {\n inDstToken = Number(truncateToDecimals(feeInDstHuman, 8));\n }\n }\n\n return {\n totalUsd: feeData.totalUsd,\n protocolFeeUsd: feeData.protocolFeeUsd,\n messageFeeUsd: feeData.messageFeeUsd,\n serviceUsd: feeData.serviceUsd,\n blockchainUsd: feeData.blockchainUsd,\n inSrcToken,\n inDstToken,\n };\n}\n\n/**\n * Calculate minimum received amount with custom slippage\n */\nexport function calculateMinReceived(\n quote: Quote | undefined,\n slippageBps: number,\n dstToken: Token | undefined\n): number {\n if (!quote || !dstToken) return 0;\n\n const dstAmountLD = BigInt(quote.dstAmount);\n const minAmountLD = (dstAmountLD * BigInt(10_000 - slippageBps)) / BigInt(10_000);\n\n return fromLD(minAmountLD.toString(), dstToken.decimals);\n}\n\n/**\n * Estimate TON network fee based on transaction messages\n * Returns fee in nanoton (LD format as string)\n *\n * TON fees are based on:\n * - Number of messages\n * - Message complexity (payload size)\n * - Storage fees\n */\nexport function estimateTonNetworkFee(quote: Quote): string {\n try {\n // Find TON transaction step\n const tonStep = quote.steps?.find(\n (s) => s.chainKey.toLowerCase() === \"ton\" && s.type === \"bridge\"\n );\n\n if (!tonStep?.transaction?.messages) {\n console.warn(\"No TON messages found in quote, using fallback\");\n return TON_CONFIG.estimatedNetworkFee;\n }\n\n const messages = tonStep.transaction.messages;\n const messageCount = messages.length;\n\n // Base fee per message (approximately 0.01 TON per message)\n const baseFeePerMessage = 10_000_000n; // 0.01 TON in nanoton\n\n // Calculate total based on message count and complexity\n let totalFee = 0n;\n\n for (const message of messages) {\n // Start with base fee\n let messageFee = baseFeePerMessage;\n\n // Add fee based on payload size (if available)\n if (message.payload) {\n const payloadSize = message.payload.length;\n // Rough estimate: 0.00001 TON per 100 bytes\n const sizeFee = BigInt(Math.floor(payloadSize / 100)) * 100_000n;\n messageFee += sizeFee;\n }\n\n // Add fee based on amount (larger amounts = more gas)\n if (message.amount) {\n const amount = BigInt(message.amount);\n // If sending tokens (not just TON), add complexity fee\n if (amount > 0n && message.payload) {\n messageFee += 5_000_000n; // 0.005 TON for jetton transfer\n }\n }\n\n totalFee += messageFee;\n }\n\n // Add minimum buffer (at least 0.05 TON for transaction processing)\n const minBuffer = 50_000_000n; // 0.05 TON\n totalFee = totalFee > minBuffer ? totalFee : minBuffer;\n\n // Add safety margin (20%)\n totalFee = (totalFee * 120n) / 100n;\n\n // Cap at reasonable maximum (1 TON for safety)\n const maxFee = 1_000_000_000n; // 1 TON\n if (totalFee > maxFee) {\n totalFee = maxFee;\n }\n\n console.log(\n `TON fee estimate: ${messageCount} messages = ${\n Number(totalFee) / 1_000_000_000\n } TON`\n );\n\n return totalFee.toString();\n } catch (error) {\n console.warn(\"Failed to estimate TON fee:\", error);\n return TON_CONFIG.estimatedNetworkFee;\n }\n}\n\n/**\n * Add TON network fee to quote fees (if source chain is TON)\n * This ensures the user sees the estimated network fee before transaction\n */\nexport function addTonNetworkFee(\n quote: Quote | undefined,\n chains: Chain[] | undefined,\n estimatedFee?: string\n): Quote | undefined {\n if (!quote || quote.srcChainKey.toLowerCase() !== \"ton\") {\n return quote;\n }\n\n // Find TON chain to get native currency address\n const tonChain = chains?.find(\n (c) => c.chainKey.toLowerCase() === \"ton\"\n );\n\n if (!tonChain?.nativeCurrency?.address) {\n console.warn(\"Could not find TON native currency address\");\n return quote;\n }\n\n // Create network fee entry\n const networkFee: Fees = {\n token: tonChain.nativeCurrency.address,\n chainKey: \"ton\",\n amount: estimatedFee || TON_CONFIG.estimatedNetworkFee,\n type: \"network\",\n };\n\n // Check if network fee already exists in quote.fees\n const hasNetworkFee = quote.fees?.some(\n (fee) => fee.type === \"network\" && fee.chainKey === \"ton\"\n );\n\n if (hasNetworkFee) {\n return quote;\n }\n\n // Return new quote with added network fee\n return {\n ...quote,\n fees: [...(quote.fees || []), networkFee],\n };\n}\n\n/**\n * Estimate TRON network fee based on user's Energy balance\n * Returns fee in SUN (LD format)\n */\nexport async function estimateTronNetworkFee(\n tronWeb: TronWeb,\n quote: Quote,\n userAddress: string\n): Promise<string> {\n try {\n // Get user's Energy balance\n const accountResources = await tronWeb.trx.getAccountResources(userAddress);\n const availableEnergy = accountResources.EnergyLimit || 0;\n\n // Find TRON transaction step\n const tronStep = quote.steps?.find(\n (s) => s.chainKey.toLowerCase() === \"tron\" && s.type === \"bridge\"\n );\n\n if (!tronStep?.transaction?.data || !tronStep.transaction.to) {\n console.warn(\"No TRON transaction data in quote, using fallback\");\n return TRON_CONFIG.estimatedNetworkFee;\n }\n\n // Simulate transaction to get required Energy\n // Use triggerConstantContract for simulation\n const contractAddress = tronWeb.address.fromHex(\n tronStep.transaction.to.startsWith(\"41\")\n ? tronStep.transaction.to\n : \"41\" + tronStep.transaction.to.slice(2)\n );\n\n const simulation = await tronWeb.transactionBuilder.triggerSmartContract(\n contractAddress,\n \"function signature doesn't matter for energy estimation\",\n {\n feeLimit: TRON_CONFIG.feeLimit,\n callValue: tronStep.transaction.value\n ? Number(tronStep.transaction.value)\n : 0,\n },\n [],\n userAddress\n );\n\n const requiredEnergy = simulation.energy_used || 0;\n\n // Calculate TRX cost\n const energyDeficit = Math.max(0, requiredEnergy - availableEnergy);\n\n if (energyDeficit === 0) {\n // User has enough Energy, transaction will be free\n return \"0\";\n }\n\n // Current TRON energy price (approximately 420 SUN per Energy unit)\n // This is an approximation and may vary\n const energyPriceInSun = 420;\n const feeSun = energyDeficit * energyPriceInSun;\n\n console.log(\n `TRON fee estimation: ${requiredEnergy} energy required, ${availableEnergy} available, ${feeSun / 1_000_000} TRX fee`\n );\n\n return feeSun.toString();\n } catch (error) {\n console.warn(\"Failed to estimate TRON network fee:\", error);\n return TRON_CONFIG.estimatedNetworkFee;\n }\n}\n\n/**\n * Add TRON network fee to quote fees (if source chain is TRON)\n * This ensures the user sees the estimated network fee before transaction\n */\nexport function addTronNetworkFee(\n quote: Quote | undefined,\n chains: Chain[] | undefined,\n estimatedFee?: string\n): Quote | undefined {\n if (!quote || quote.srcChainKey.toLowerCase() !== \"tron\") {\n return quote;\n }\n\n // Find TRON chain to get native currency address\n const tronChain = chains?.find(\n (c) => c.chainKey.toLowerCase() === \"tron\"\n );\n\n if (!tronChain?.nativeCurrency?.address) {\n console.warn(\"Could not find TRON native currency address\");\n return quote;\n }\n\n // Create network fee entry\n const networkFee: Fees = {\n token: tronChain.nativeCurrency.address,\n chainKey: \"tron\",\n amount: estimatedFee || TRON_CONFIG.estimatedNetworkFee,\n type: \"network\",\n };\n\n // Check if network fee already exists in quote.fees\n const hasNetworkFee = quote.fees?.some(\n (fee) => fee.type === \"network\" && fee.chainKey === \"tron\"\n );\n\n if (hasNetworkFee) {\n return quote;\n }\n\n // Return new quote with added network fee\n return {\n ...quote,\n fees: [...(quote.fees || []), networkFee],\n };\n}\n\n/**\n * Estimate EVM network fee (gas cost) based on quote steps\n * Returns fee in Wei (LD format as string)\n */\nexport async function estimateEvmNetworkFee(\n publicClient: PublicClient,\n quote: Quote,\n chainKey: string\n): Promise<string> {\n try {\n // Count approve and bridge steps for this chain\n let totalGasLimit = 0n;\n\n for (const step of quote.steps || []) {\n if (step.chainKey.toLowerCase() !== chainKey.toLowerCase()) continue;\n\n if (step.type === \"approve\") {\n totalGasLimit += EVM_CONFIG.gasEstimates.approve;\n } else if (step.type === \"bridge\") {\n totalGasLimit += EVM_CONFIG.gasEstimates.bridge;\n }\n }\n\n if (totalGasLimit === 0n) {\n return \"0\";\n }\n\n // Add buffer (20%)\n totalGasLimit =\n (totalGasLimit * BigInt(Math.floor(EVM_CONFIG.gasBuffer * 100))) / 100n;\n\n // Get current gas price\n const gasPrice = await publicClient.getGasPrice();\n\n // Calculate total cost in Wei\n const totalCostWei = totalGasLimit * gasPrice;\n\n console.log(\n `EVM gas estimate: ${totalGasLimit} gas × ${gasPrice} Wei/gas = ${totalCostWei} Wei`\n );\n\n return totalCostWei.toString();\n } catch (error) {\n console.warn(\"Failed to estimate EVM gas fee:\", error);\n // Fallback: 0.01 ETH in Wei\n return \"10000000000000000\"; // 0.01 ETH\n }\n}\n\n/**\n * Add EVM network fee to quote fees\n */\nexport function addEvmNetworkFee(\n quote: Quote | undefined,\n chains: Chain[] | undefined,\n estimatedFee?: string\n): Quote | undefined {\n if (!quote) return quote;\n\n // Check if source chain is EVM (not TON or TRON)\n const srcChainKey = quote.srcChainKey.toLowerCase();\n if (srcChainKey === \"ton\" || srcChainKey === \"tron\") {\n return quote;\n }\n\n // Find source chain\n const srcChain = chains?.find(\n (c) => c.chainKey.toLowerCase() === srcChainKey\n );\n\n if (!srcChain?.nativeCurrency?.address) {\n return quote;\n }\n\n // Check if network fee already exists\n const hasNetworkFee = quote.fees?.some(\n (fee) =>\n fee.type === \"network\" &&\n fee.chainKey.toLowerCase() === srcChainKey\n );\n\n if (hasNetworkFee) {\n return quote;\n }\n\n // Create network fee entry\n const networkFee: Fees = {\n token: srcChain.nativeCurrency.address,\n chainKey: quote.srcChainKey,\n amount: estimatedFee || \"10000000000000000\", // 0.01 ETH fallback\n type: \"network\",\n };\n\n return {\n ...quote,\n fees: [...(quote.fees || []), networkFee],\n };\n}\n\n/**\n * Get complete quote details for UI display\n */\nexport function getQuoteDetails(\n quote: Quote | undefined,\n srcToken: Token | undefined,\n dstToken: Token | undefined,\n tokens: Token[] | undefined,\n chains: Chain[] | undefined,\n slippageBps: number\n) {\n const amounts = getQuoteAmounts(quote, srcToken, dstToken);\n const fees = getQuoteFees(quote, tokens, chains, srcToken, dstToken);\n const minimumReceived = calculateMinReceived(quote, slippageBps, dstToken);\n\n return {\n inputAmount: amounts.inputHuman,\n outputAmount: amounts.outputHuman,\n outputAmountRounded: amounts.outputHumanRounded,\n minimumReceived,\n etaSeconds: quote?.duration?.estimated,\n fees,\n };\n}\n","import { useEffect, useMemo, useState } from \"react\";\nimport { useTokensStore } from \"../../store/use-token-store\";\nimport { useChainsStore } from \"../../store/use-chains-store\";\nimport { toLD } from \"../../lib/amount\";\nimport { useAddresses } from \"../use-addresses\";\nimport { useBridgeQuoteStore } from \"../../store/use-bridge-quote-store\";\nimport { useSettingsStore } from \"../../store/use-settings-store\";\nimport { getQuotesByPriority } from \"../../api/quotes\";\nimport { addrForApi, resolveTokenOnChainFromMatrix } from \"../../lib/quote\";\nimport { isAddressValidForChain } from \"../../lib/address-validation\";\nimport { useChainStrategies } from \"../use-chain-strategies\";\nimport {\n addTonNetworkFee,\n estimateTonNetworkFee,\n addTronNetworkFee,\n estimateTronNetworkFee,\n addEvmNetworkFee,\n estimateEvmNetworkFee,\n} from \"../../utils/quote-helpers\";\nimport type { TronWeb } from \"tronweb\";\nimport { usePublicClient } from \"wagmi\";\nimport type { PublicClient } from \"viem\";\nimport type { Quote } from \"../../types\";\n\nexport function useBridgeQuote() {\n const { assetMatrix, selectedAssetSymbol } = useTokensStore();\n\n const { fromChain, toChain, chains } = useChainsStore();\n const { srcAddress, dstAddress } = useAddresses();\n const { slippageBps, routePriority, getDstNativeAmount, getSlippageDecimal } =\n useSettingsStore();\n\n const {\n inputAmount,\n refetchTrigger,\n setLoading: setQuoteLoading,\n setQuote,\n setError: setQError,\n setNoRoute,\n resetWithIdle,\n } = useBridgeQuoteStore();\n\n const { chainRegistry } = useChainStrategies();\n const publicClient = usePublicClient() as PublicClient | undefined;\n\n const input = inputAmount;\n\n const srcTokenOnFrom = useMemo(\n () =>\n resolveTokenOnChainFromMatrix(\n assetMatrix,\n selectedAssetSymbol,\n fromChain?.chainKey\n ),\n [assetMatrix, selectedAssetSymbol, fromChain?.chainKey]\n );\n\n const dstTokenOnTo = useMemo(\n () =>\n resolveTokenOnChainFromMatrix(\n assetMatrix,\n selectedAssetSymbol,\n toChain?.chainKey\n ),\n [assetMatrix, selectedAssetSymbol, toChain?.chainKey]\n );\n\n const [loading, setLoading] = useState(false);\n\n // Реакция на изменения input: сброс состояния при пустом значении\n useEffect(() => {\n if (!input || input === \"\") {\n setLoading(false);\n resetWithIdle();\n }\n }, [input, resetWithIdle]);\n\n useEffect(() => {\n const resetUi = (withError?: string) => {\n setLoading(false);\n if (withError) {\n setQError(withError);\n } else {\n resetWithIdle();\n }\n };\n\n if (\n !input ||\n Number(input) <= 0 ||\n !fromChain?.chainKey ||\n !toChain?.chainKey ||\n !srcTokenOnFrom ||\n !dstTokenOnTo ||\n !srcAddress ||\n !dstAddress\n ) {\n resetUi();\n return;\n }\n\n if (\n !isAddressValidForChain(fromChain.chainKey, srcAddress) ||\n !isAddressValidForChain(toChain.chainKey, dstAddress)\n ) {\n resetUi();\n return;\n }\n\n if (fromChain.chainKey === toChain.chainKey) {\n resetUi();\n return;\n }\n\n let cancelled = false;\n\n const run = async () => {\n try {\n setLoading(true);\n setQuoteLoading?.();\n\n // Проверяем совместимость через assetMatrix\n if (assetMatrix && selectedAssetSymbol) {\n const tokenMatrix = assetMatrix[selectedAssetSymbol.toUpperCase()];\n if (\n !tokenMatrix ||\n !tokenMatrix[fromChain.chainKey] ||\n !tokenMatrix[toChain.chainKey]\n ) {\n // Токен не поддерживается на одной из сетей - тихо сбрасываем\n if (!cancelled) {\n resetUi();\n }\n return;\n }\n }\n\n const srcAmountLD = toLD(input, srcTokenOnFrom.decimals);\n\n const srcAddrApi = addrForApi(fromChain.chainKey, srcAddress);\n const dstAddrApi = addrForApi(toChain.chainKey, dstAddress);\n const dstNativeAmount = getDstNativeAmount(toChain.chainKey);\n const slippageDecimal = getSlippageDecimal();\n\n // Approximate minAmountLD for the request (will be stored in quote.dstAmountMin)\n // Using a conservative 5% slippage for the API request\n const approximateMinLD =\n (BigInt(srcAmountLD) * BigInt(9500)) / BigInt(10_000);\n\n const quoteRoute = await getQuotesByPriority({\n srcChainKey: fromChain.chainKey,\n dstChainKey: toChain.chainKey,\n srcToken: srcTokenOnFrom.address,\n dstToken: dstTokenOnTo.address,\n srcAmountLD,\n dstAmountMinLD: approximateMinLD.toString(),\n srcAddress: srcAddrApi,\n dstAddress: dstAddrApi,\n dstNativeAmount,\n slippage: slippageDecimal,\n routePriority,\n });\n\n // Check if route exists\n if (quoteRoute?.route === null) {\n setNoRoute(true);\n if (!cancelled) resetUi();\n return;\n } else {\n setNoRoute(false);\n }\n\n // Check if quote is valid\n if (\n !quoteRoute ||\n !quoteRoute.dstAmount ||\n BigInt(quoteRoute.dstAmount) === BigInt(0)\n ) {\n if (!cancelled) resetUi();\n return;\n }\n\n // Quote loaded successfully\n if (cancelled) return;\n\n // Add network fees before setting quote\n let quoteWithFees: Quote | undefined = quoteRoute;\n\n // Add TON network fee with dynamic estimation\n if (quoteRoute.srcChainKey.toLowerCase() === \"ton\") {\n try {\n const estimatedFee = estimateTonNetworkFee(quoteRoute);\n quoteWithFees = addTonNetworkFee(quoteRoute, chains, estimatedFee);\n console.log(\"TON network fee estimated for quote:\", estimatedFee);\n } catch (error) {\n console.warn(\"Failed to estimate TON fee, using fallback:\", error);\n quoteWithFees = addTonNetworkFee(quoteRoute, chains);\n }\n }\n\n // Add TRON network fee if source chain is TRON\n if (quoteRoute.srcChainKey.toLowerCase() === \"tron\") {\n const tronStrategy = chainRegistry.getStrategy(\"tron\");\n\n if (tronStrategy?.isConnected()) {\n const tronWeb = tronStrategy.getClient() as TronWeb;\n const tronAddress = tronStrategy.getAccount();\n\n if (tronWeb && tronAddress) {\n try {\n const estimatedFee = await estimateTronNetworkFee(\n tronWeb,\n quoteRoute,\n tronAddress\n );\n quoteWithFees = addTronNetworkFee(\n quoteWithFees || quoteRoute,\n chains,\n estimatedFee\n );\n console.log(\"TRON network fee estimated for quote:\", estimatedFee);\n } catch (error) {\n console.warn(\"Failed to estimate TRON fee, using fallback:\", error);\n quoteWithFees = addTronNetworkFee(\n quoteWithFees || quoteRoute,\n chains\n );\n }\n } else {\n // Add fallback if TronWeb not available\n quoteWithFees = addTronNetworkFee(\n quoteWithFees || quoteRoute,\n chains\n );\n }\n } else {\n // Add fallback if strategy not connected\n quoteWithFees = addTronNetworkFee(\n quoteWithFees || quoteRoute,\n chains\n );\n }\n }\n\n // Add EVM network fee if source chain is EVM\n const srcChainKey = quoteRoute.srcChainKey.toLowerCase();\n if (srcChainKey !== \"ton\" && srcChainKey !== \"tron\") {\n if (publicClient) {\n try {\n const estimatedFee = await estimateEvmNetworkFee(\n publicClient,\n quoteRoute,\n quoteRoute.srcChainKey\n );\n quoteWithFees = addEvmNetworkFee(\n quoteWithFees || quoteRoute,\n chains,\n estimatedFee\n );\n console.log(\"EVM network fee estimated for quote:\", estimatedFee);\n } catch (error) {\n console.warn(\"Failed to estimate EVM fee, using fallback:\", error);\n quoteWithFees = addEvmNetworkFee(\n quoteWithFees || quoteRoute,\n chains\n );\n }\n } else {\n // Add fallback if publicClient not available\n quoteWithFees = addEvmNetworkFee(\n quoteWithFees || quoteRoute,\n chains\n );\n }\n }\n\n setQuote(quoteWithFees || quoteRoute);\n } catch {\n // Любая ошибка: считаем как no route в UI\n if (!cancelled) {\n resetUi();\n }\n } finally {\n if (!cancelled) setLoading(false);\n }\n };\n\n run();\n return () => {\n cancelled = true;\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [\n input,\n fromChain?.chainKey,\n toChain?.chainKey,\n srcTokenOnFrom,\n dstTokenOnTo,\n srcAddress,\n dstAddress,\n setQuoteLoading,\n setQuote,\n setQError,\n slippageBps,\n routePriority,\n refetchTrigger,\n chainRegistry,\n chains,\n publicClient,\n ]);\n\n return { loading };\n}\n","import type { Chain, Token } from \"../types\";\nimport {\n normalizeTokenSymbol,\n normalizeTickerSymbol,\n} from \"../lib/token-normalization\";\n\n// Реэкспорт для обратной совместимости\nexport { normalizeTickerSymbol };\n\ninterface TokenWithDestination extends Token {\n dstChainKey?: string;\n}\n\nexport async function getChains(): Promise<Chain[]> {\n const res = await fetch(\"https://stargate.finance/api/v1/chains\", {\n credentials: \"same-origin\",\n });\n if (!res.ok) {\n throw new Error(`Failed to load chains: ${res.status}`);\n }\n const data = await res.json();\n return Array.isArray(data) ? data : data.chains ?? [];\n}\n\nexport async function getTokens(): Promise<Token[]> {\n const res = await fetch(\"https://stargate.finance/api/v1/tokens\", {\n credentials: \"same-origin\",\n });\n if (!res.ok) {\n throw new Error(`Failed to load chains: ${res.status}`);\n }\n const data = await res.json();\n const tokens = Array.isArray(data) ? data : data.tokens ?? [];\n\n // Нормализуем символы токенов\n return tokens.map(normalizeTokenSymbol);\n}\n\nexport async function getDestTokens(\n srcChainKey: string,\n srcTokenAddr: string\n): Promise<TokenWithDestination[]> {\n const url = new URL(\"https://stargate.finance/api/v1/tokens\");\n url.searchParams.set(\"srcChainKey\", srcChainKey);\n url.searchParams.set(\"srcToken\", srcTokenAddr);\n\n const res = await fetch(url.toString(), { credentials: \"omit\" });\n if (!res.ok) throw new Error(`Failed to load dest tokens: ${res.status}`);\n\n const data = await res.json();\n const raw: TokenWithDestination[] = (data.tokens ??\n []) as TokenWithDestination[];\n\n const bridgeable = raw.filter((t) => t.isBridgeable === true);\n\n const seen = new Set<string>();\n const unique: TokenWithDestination[] = [];\n for (const t of bridgeable) {\n const chainKey = t.chainKey ?? t.dstChainKey ?? \"\";\n const addr = (t.address ?? \"\").toLowerCase();\n const k = `${chainKey}:${addr}`;\n if (seen.has(k)) continue;\n seen.add(k);\n unique.push(t);\n }\n\n unique.sort((a, b) => {\n const sa = (a.symbol ?? \"\").toLowerCase();\n const sb = (b.symbol ?? \"\").toLowerCase();\n if (sa === sb) return (a.name ?? \"\").localeCompare(b.name ?? \"\");\n return sa.localeCompare(sb);\n });\n\n // Нормализуем символы токенов\n return unique.map(normalizeTokenSymbol);\n}\n\nexport type BalancesMap = Record<string, { balance: number; address: string }>;\n","import { useEffect, useMemo } from \"react\";\nimport type { Token } from \"../types\";\nimport { useTokensStore } from \"../store/use-token-store\";\nimport { useChainsStore } from \"../store/use-chains-store\";\nimport { getDestTokens } from \"../api/api\";\n\nfunction resolveTokenOnChainFromMatrix(\n assetMatrix: Record<string, Record<string, Token>> | undefined,\n assetSymbol: string | undefined,\n chainKey: string | undefined\n): Token | undefined {\n if (!assetMatrix || !assetSymbol || !chainKey) return undefined;\n const byChain = assetMatrix[assetSymbol.toUpperCase()];\n return byChain?.[chainKey];\n}\n\nexport const useChainDerivations = () => {\n const { selectedAssetSymbol, assetMatrix } = useTokensStore();\n const {\n chains,\n fromChain,\n toChain,\n setFromChain,\n setToChain,\n allowedFromChains,\n setAllowedFromChains,\n allowedToChains,\n setAllowedToChains,\n isLoadingToChains,\n setIsLoadingToChains,\n } = useChainsStore();\n\n const supportedFrom = useMemo(() => {\n if (\n typeof selectedAssetSymbol !== \"string\" ||\n !assetMatrix ||\n !chains?.length\n )\n return [];\n const byChain = assetMatrix[selectedAssetSymbol.toUpperCase()];\n\n const keys = new Set(Object.keys(byChain ?? {}));\n const result = chains.filter((c) => keys.has(c.chainKey));\n\n console.log(\n `[DEBUG] supportedFrom for ${selectedAssetSymbol}:`,\n `${result.length} of ${chains.length} chains`,\n result.map((c) => c.chainKey),\n `| Has Arbitrum: ${result.some((c) => c.chainKey === \"arbitrum\")}`\n );\n\n return result;\n }, [selectedAssetSymbol, assetMatrix, chains]);\n\n useEffect(() => {\n setAllowedFromChains(supportedFrom);\n\n if (!supportedFrom.length) {\n if (fromChain) setFromChain(undefined);\n if (toChain) setToChain(undefined);\n setAllowedToChains([]);\n return;\n }\n\n if (!fromChain) {\n setFromChain(supportedFrom[0]);\n setToChain(undefined);\n setAllowedToChains([]);\n return;\n }\n\n if (!supportedFrom.some((c) => c.chainKey === fromChain.chainKey)) {\n setToChain(undefined);\n setAllowedToChains([]);\n }\n }, [\n supportedFrom,\n fromChain,\n toChain,\n setAllowedFromChains,\n setFromChain,\n setToChain,\n setAllowedToChains,\n ]);\n\n useEffect(() => {\n let ignore = false;\n\n const run = async () => {\n if (!selectedAssetSymbol || !fromChain?.chainKey || !chains?.length) {\n setAllowedToChains([]);\n return;\n }\n\n const srcToken = resolveTokenOnChainFromMatrix(\n assetMatrix,\n selectedAssetSymbol,\n fromChain.chainKey\n );\n const srcAddr = srcToken?.address;\n if (!srcAddr) {\n setAllowedToChains([]);\n return;\n }\n\n setIsLoadingToChains(true);\n try {\n if (ignore) return;\n const dest = await getDestTokens(fromChain.chainKey, srcAddr);\n\n const byChainSameSymbol =\n assetMatrix?.[selectedAssetSymbol.toUpperCase()] ?? {};\n const expectedAddrByChain = new Map(\n Object.entries(byChainSameSymbol).map(([ck, tok]) => [\n ck,\n (tok.address ?? \"\").toLowerCase(),\n ])\n );\n\n const filteredDest = dest.filter((t) => {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const ck = (t as Token).chainKey ?? (t as any).dstChainKey ?? \"\";\n const expected = expectedAddrByChain.get(ck);\n const got = (t.address ?? \"\").toLowerCase();\n return !!expected && expected === got;\n });\n\n const keys = new Set(filteredDest.map((t) => t.chainKey));\n let list = chains.filter((c) => keys.has(c.chainKey));\n\n if (fromChain?.chainKey) {\n list = list.filter((c) => c.chainKey !== fromChain.chainKey);\n }\n\n console.log(\n `[DEBUG] allowedToChains from ${fromChain?.chainKey}:`,\n `${list.length} destinations`,\n list.map((c) => c.chainKey),\n `| Has Arbitrum: ${list.some((c) => c.chainKey === \"arbitrum\")}`,\n `| API returned ${dest.length} tokens, filtered to ${filteredDest.length}`\n );\n\n setAllowedToChains(list);\n if (!toChain || !list.some((c) => c.chainKey === toChain.chainKey)) {\n setToChain(list[0]);\n }\n } catch (e) {\n if (!ignore) {\n console.error(\"Failed to load destination chains\", e);\n setAllowedToChains([]);\n setToChain(undefined);\n }\n } finally {\n if (!ignore) setIsLoadingToChains(false);\n }\n };\n\n run();\n return () => {\n ignore = true;\n };\n }, [\n selectedAssetSymbol,\n assetMatrix,\n fromChain?.chainKey,\n chains,\n toChain,\n setAllowedToChains,\n setToChain,\n setIsLoadingToChains,\n ]);\n\n return {\n allowedFromChains,\n allowedToChains,\n isLoadingToChains,\n };\n};\n","import { useMemo, useCallback } from \"react\";\nimport { useQuery } from \"@tanstack/react-query\";\nimport { useChainStrategies } from \"../use-chain-strategies\";\nimport { useTokensStore } from \"../../store/use-token-store\";\nimport type { Token } from \"../../types\";\nimport { isAddressValidForChain } from \"../../lib/address-validation\";\nimport { normalizeTickerSymbol } from \"../../api/api\";\n\nexport interface BalanceData {\n balance: number;\n isLoading: boolean;\n}\n\nexport function useBalances(\n chainKey?: string,\n address?: string,\n priorityTokenSymbol?: string\n) {\n const { chainRegistry } = useChainStrategies();\n const { assetMatrix } = useTokensStore();\n\n const tokensOnChain = useMemo(() => {\n if (!chainKey || !assetMatrix) return [] as Token[];\n\n const tokensList: Token[] = [];\n\n for (const [, byChain] of Object.entries(assetMatrix)) {\n const token = byChain[chainKey];\n // Фильтруем токены с невалидными адресами\n if (token && token.address && token.address.length > 2) {\n tokensList.push(token);\n }\n }\n\n return tokensList;\n }, [assetMatrix, chainKey]);\n\n const priorityToken = useMemo(() => {\n if (!priorityTokenSymbol || !chainKey || !assetMatrix) return undefined;\n\n const normalizedSymbol = normalizeTickerSymbol(priorityTokenSymbol);\n const token = assetMatrix[normalizedSymbol]?.[chainKey];\n\n // Валидируем что токен имеет корректный адрес\n if (token && token.address && token.address.length > 2) {\n return token;\n }\n\n return undefined;\n }, [priorityTokenSymbol, chainKey, assetMatrix]);\n\n const query = useQuery({\n queryKey: [\"balances\", chainKey, address, priorityTokenSymbol],\n queryFn: async () => {\n if (!address || !chainKey)\n return {} as Record<string, { balance: number; address: string }>;\n if (!isAddressValidForChain(chainKey, address)) return {};\n\n return await chainRegistry.getBalances(\n chainKey,\n address,\n tokensOnChain,\n priorityToken\n );\n },\n enabled:\n !!address &&\n !!chainKey &&\n !!assetMatrix &&\n tokensOnChain.length > 0 &&\n isAddressValidForChain(chainKey, address),\n staleTime: 60_000,\n gcTime: 5 * 60_000,\n refetchOnWindowFocus: false,\n refetchInterval: 60_000,\n refetchIntervalInBackground: false,\n });\n\n const balanceBySymbol = useMemo(() => {\n const map = new Map<string, number>();\n const data = query.data as Record<string, { balance: number }> | undefined;\n if (data) {\n for (const [sum, v] of Object.entries(data)) {\n map.set(normalizeTickerSymbol(sum), Number(v.balance ?? 0));\n }\n }\n return map;\n }, [query.data]);\n\n const getBalance = useCallback(\n (symbol: string) => balanceBySymbol.get(normalizeTickerSymbol(symbol)) ?? 0,\n [balanceBySymbol]\n );\n\n const isLoading = query.isLoading || query.isFetching;\n\n // Memoize balances to prevent creating new empty object on every render\n const balances = useMemo(() => query.data || {}, [query.data]);\n\n return {\n balances,\n getBalance,\n isLoading,\n query,\n };\n}\n","import { useCallback, useMemo } from \"react\";\nimport { useChainsStore } from \"../../store/use-chains-store\";\nimport { useTokensStore } from \"../../store/use-token-store\";\nimport { useBridgeQuote } from \"./use-bridge-quote\";\nimport { useBridgeQuoteStore } from \"../../store/use-bridge-quote-store\";\nimport { useChainDerivations } from \"../use-chain-derivations\";\nimport { useBalances, type BalanceData } from \"../api/use-balances\";\nimport { useAddresses } from \"../use-addresses\";\n\nexport function useSwapModel() {\n const chainsStore = useChainsStore();\n const tokensStore = useTokensStore();\n const { srcAddress, dstAddress } = useAddresses();\n const { allowedFromChains, allowedToChains, isLoadingToChains } =\n useChainDerivations();\n\n const srcBalances = useBalances(\n chainsStore.fromChain?.chainKey,\n srcAddress,\n tokensStore.selectedAssetSymbol\n );\n const dstBalances = useBalances(\n chainsStore.toChain?.chainKey,\n dstAddress,\n tokensStore.selectedAssetSymbol\n );\n\n const { loading } = useBridgeQuote();\n const { inputAmount, setInputAmount, resetWithIdle } = useBridgeQuoteStore();\n\n const fromBalance: BalanceData = useMemo(\n () => ({\n balance: srcBalances.getBalance(tokensStore.selectedAssetSymbol || \"\"),\n isLoading: srcBalances.isLoading,\n }),\n [srcBalances, tokensStore.selectedAssetSymbol]\n );\n\n const receiveBalance: BalanceData = useMemo(\n () => ({\n balance: dstBalances.getBalance(tokensStore.selectedAssetSymbol || \"\"),\n isLoading: dstBalances.isLoading,\n }),\n [dstBalances, tokensStore.selectedAssetSymbol]\n );\n\n const state = useMemo(\n () => ({\n fromChain: chainsStore.fromChain,\n toChain: chainsStore.toChain,\n selectedAssetSymbol: tokensStore.selectedAssetSymbol,\n }),\n [\n chainsStore.fromChain,\n chainsStore.toChain,\n tokensStore.selectedAssetSymbol,\n ]\n );\n\n const actions = {\n setFromChain: chainsStore.setFromChain,\n setToChain: chainsStore.setToChain,\n setAmount: setInputAmount,\n swapSides: useCallback(() => {\n const fromChain = chainsStore.fromChain;\n const toChain = chainsStore.toChain;\n const sym = (tokensStore.selectedAssetSymbol ?? \"\").toUpperCase();\n if (!fromChain || !toChain || !sym) return;\n\n // мгновенно скрыть старые направления\n chainsStore.setAllowedToChains([]);\n\n // 1) перекидываем цепочки\n chainsStore.setFromChain(toChain);\n\n // 2) проверяем доступность ассета на новой source\n const tokenOnNewFrom = tokensStore.assetMatrix?.[sym]?.[toChain.chainKey];\n if (tokenOnNewFrom) {\n chainsStore.setToChain(fromChain);\n } else {\n chainsStore.setToChain(undefined);\n }\n\n // 3) сбрасываем котировку (адреса пересчитаются автоматически)\n resetWithIdle();\n }, [chainsStore, tokensStore, resetWithIdle]),\n } as const;\n\n return {\n ...state,\n amount: inputAmount,\n loadingQuote: loading,\n fromBalance,\n receiveBalance,\n allowedFromChains,\n allowedToChains,\n isLoadingToChains,\n actions,\n };\n}\n","import type { SVGProps } from \"react\";\n\nexport const ArrowDownIcon = (props: SVGProps<SVGSVGElement>) => {\n return (\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <path\n d=\"M13.2788 5.96875L8.93208 10.3154C8.41875 10.8288 7.57875 10.8288 7.06542 10.3154L2.71875 5.96875\"\n stroke=\"currentColor\"\n strokeOpacity=\"0.7\"\n strokeWidth=\"1.5\"\n strokeMiterlimit=\"10\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n );\n};\n","import type { SVGProps } from \"react\";\n\nexport const BoltIcon = (props: SVGProps<SVGSVGElement>) => {\n return (\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <path\n d=\"M2 6.0651V9.91177C2 11.3251 2 11.3251 3.33333 12.2251L7 14.3451C7.55333 14.6651 8.45333 14.6651 9 14.3451L12.6667 12.2251C14 11.3251 14 11.3251 14 9.91844V6.0651C14 4.65844 14 4.65844 12.6667 3.75844L9 1.63844C8.45333 1.31844 7.55333 1.31844 7 1.63844L3.33333 3.75844C2 4.65844 2 4.65844 2 6.0651Z\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M8 9.99219C9.10457 9.99219 10 9.09676 10 7.99219C10 6.88762 9.10457 5.99219 8 5.99219C6.89543 5.99219 6 6.88762 6 7.99219C6 9.09676 6.89543 9.99219 8 9.99219Z\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n );\n};\n","import type { SVGProps } from \"react\";\n\nexport const ReloadIcon = (props: SVGProps<SVGSVGElement>) => {\n return (\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <path\n d=\"M14 8C14 11.312 11.312 14 8 14C4.688 14 2.666 10.664 2.666 10.664M2.666 10.664H5.378M2.666 10.664V13.664M2 8C2 4.688 4.664 2 8 2C12.002 2 14 5.336 14 5.336M14 5.336V2.336M14 5.336H11.336\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n );\n};\n","import type { SVGProps } from \"react\";\n\nexport const WalletIcon = (props: SVGProps<SVGSVGElement>) => {\n return (\n <svg\n width=\"18\"\n height=\"18\"\n viewBox=\"0 0 18 18\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <g opacity=\"0.6\">\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M11.5825 11.5075C10.45 11.5075 9.52752 10.585 9.52752 9.44498V8.55998C9.52752 7.41999 10.45 6.49749 11.5825 6.49749C12.4679 6.49749 14.2012 6.50243 14.8246 6.5043C14.9511 6.50467 15.0535 6.40062 15.0434 6.27461C14.8832 4.26772 13.2073 2.6875 11.1625 2.6875H6.02499C3.8725 2.6875 2.125 4.4425 2.125 6.59501V11.4175C2.125 13.57 3.8725 15.3175 6.02499 15.3175H11.1625C13.2077 15.3175 14.8907 13.7369 15.0442 11.7297C15.0538 11.6039 14.9515 11.5004 14.8254 11.5007C14.2026 11.5025 12.4683 11.5075 11.5825 11.5075Z\"\n fill=\"currentColor\"\n fillOpacity=\"0.5\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M12.1785 9.5375C11.8784 9.5375 11.6385 9.29749 11.6385 9.00499C11.6385 8.71249 11.8784 8.4725 12.1785 8.4725C12.471 8.4725 12.7109 8.71249 12.7109 9.00499C12.7109 9.29749 12.471 9.5375 12.1785 9.5375ZM14.9309 7.625H11.5784C11.0609 7.625 10.6484 8.045 10.6484 8.5625V9.4475C10.6484 9.965 11.0609 10.385 11.5784 10.385H14.9309C15.4484 10.385 15.8685 9.965 15.8685 9.4475V8.5625C15.8685 8.045 15.4484 7.625 14.9309 7.625Z\"\n fill=\"currentColor\"\n fillOpacity=\"0.5\"\n />\n </g>\n </svg>\n );\n};\n","import { type SVGProps } from \"react\";\n\nexport const ArrowSwapIcon = (props: SVGProps<SVGSVGElement>) => {\n return (\n <svg\n width=\"20\"\n height=\"20\"\n viewBox=\"0 0 20 20\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <path\n d=\"M4.17188 7.55482L7.76601 4.95312V15.0425M15.8385 12.4408L12.2443 15.0425V4.95312\"\n stroke=\"currentColor\"\n strokeWidth=\"1.4\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n );\n};\n","import type { SVGProps } from \"react\";\n\nexport const SearchIcon = (props: SVGProps<SVGSVGElement>) => {\n return (\n <svg\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <path\n d=\"M11.5 21C16.7467 21 21 16.7467 21 11.5C21 6.25329 16.7467 2 11.5 2C6.25329 2 2 6.25329 2 11.5C2 16.7467 6.25329 21 11.5 21Z\"\n stroke=\"currentColor\"\n strokeOpacity=\"0.65\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M22 22L20 20\"\n stroke=\"currentColor\"\n strokeOpacity=\"0.65\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n );\n};\n","import type { SVGProps } from \"react\";\n\nexport const StargateIcon = (props: SVGProps<SVGSVGElement>) => {\n return (\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <g clipPath=\"url(#clip0_13294_89003)\">\n <path\n d=\"M9.58707 0.636789L10.0135 1.63492C10.8488 3.59268 12.4067 5.15059 14.3644 5.98584L15.3626 6.41231C15.6232 6.52489 15.8365 6.68184 15.9994 6.87438C15.4988 3.31131 12.6851 0.494623 9.125 0C9.31455 0.1629 9.47449 0.376148 9.58707 0.636789Z\"\n fill=\"#999999\"\n />\n <path\n d=\"M0.636791 6.41231L1.63492 5.98584C3.59268 5.15059 5.15059 3.59268 5.98876 1.63492L6.41528 0.636789C6.52781 0.376148 6.68775 0.1629 6.8773 0C3.31131 0.494623 0.497584 3.31131 0 6.87139C0.1629 6.68184 0.37615 6.52189 0.636791 6.40937V6.41231Z\"\n fill=\"#999999\"\n />\n <path\n d=\"M15.3626 9.58017L14.3644 10.0067C12.4067 10.8419 10.8488 12.4028 10.0135 14.3606L9.58707 15.3557C9.47449 15.6164 9.31455 15.8296 9.125 15.9925C12.6851 15.4949 15.4988 12.6812 15.9964 9.12109C15.8335 9.31065 15.6203 9.47059 15.3596 9.58317L15.3626 9.58017Z\"\n fill=\"#999999\"\n />\n <path\n d=\"M6.4153 15.3587L5.98878 14.3635C5.15355 12.4057 3.59268 10.8478 1.63492 10.0096L0.636789 9.58311C0.37615 9.47059 0.1629 9.31359 0 9.12109C0.497584 12.6812 3.31131 15.4979 6.87139 15.9925C6.68184 15.8296 6.52189 15.6164 6.40937 15.3557L6.4153 15.3587Z\"\n fill=\"#999999\"\n />\n <path\n d=\"M4.37473 7.21715L4.86639 7.00685C5.83193 6.59514 6.59903 5.82804 7.01074 4.86248L7.22104 4.37082C7.51425 3.68368 8.49163 3.68368 8.78489 4.37082L8.99514 4.86248C9.40685 5.82804 10.1739 6.59514 11.1395 7.00685L11.6312 7.21715C12.3183 7.51036 12.3183 8.4848 11.6312 8.78095L11.1395 8.99125C10.1739 9.40296 9.40685 10.1701 8.99514 11.1356L8.78489 11.6273C8.49163 12.3144 7.51425 12.3144 7.22104 11.6273L7.01074 11.1356C6.59903 10.1701 5.83193 9.40296 4.86639 8.99125L4.37473 8.78095C3.68759 8.48774 3.68759 7.5133 4.37473 7.21715Z\"\n fill=\"currentColor\"\n />\n </g>\n <defs>\n <clipPath id=\"clip0_13294_89003\">\n <rect width=\"16\" height=\"16\" fill=\"white\" />\n </clipPath>\n </defs>\n </svg>\n );\n};\n","import type { SVGProps } from \"react\";\n\nexport const MetaMaskIcon = (props: SVGProps<SVGSVGElement>) => {\n return (\n <svg\n width=\"31\"\n height=\"31\"\n viewBox=\"0 0 31 31\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <mask\n id=\"mask0_13528_106779\"\n maskUnits=\"userSpaceOnUse\"\n x=\"0\"\n y=\"0\"\n width=\"31\"\n height=\"31\"\n >\n <circle cx=\"15.5\" cy=\"15.5\" r=\"15.5\" fill=\"#190066\" />\n </mask>\n <g mask=\"url(#mask0_13528_106779)\">\n <circle cx=\"15.5\" cy=\"15.5\" r=\"15.5\" fill=\"#190066\" />\n </g>\n <g clipPath=\"url(#clip0_13528_106779)\">\n <path\n d=\"M23.1854 23.0614L19.3864 21.9326L16.5214 23.6416L14.5224 23.6407L11.6556 21.9326L7.85821 23.0612L6.70312 19.1703L7.85821 14.8517L6.70312 11.2002L7.85821 6.6748L13.7921 10.2122H17.2517L23.1854 6.6748L24.3405 11.2002L23.1854 14.8515L24.3405 19.1701L23.1854 23.0614Z\"\n fill=\"#FF5C16\"\n />\n <path\n d=\"M7.85156 6.6748L13.7855 10.2149L13.5494 12.6443L7.85156 6.6748ZM11.6495 19.1716L14.2605 21.1561L11.6495 21.9323V19.1716ZM14.051 15.8903L13.5492 12.6456L10.3374 14.8519L10.3356 14.851V14.8528L10.3456 17.1237L11.6481 15.8903H14.051ZM23.1775 6.6748L17.2438 10.2149L17.4788 12.6443L23.1775 6.6748ZM19.3808 19.1716L16.7702 21.156L19.381 21.9321L19.3808 19.1716ZM20.693 14.8526V14.851L20.6922 14.8519L17.4801 12.6456L16.9784 15.8903H19.3806L20.6838 17.1237L20.693 14.8526Z\"\n fill=\"#FF5C16\"\n />\n <path\n d=\"M11.6558 21.9281L7.85821 23.0567L6.70312 19.1675H11.6558V21.9281ZM14.0577 15.8857L14.783 20.5764L13.7777 17.9685L10.3514 17.1201L11.6545 15.8859L14.0577 15.8857ZM19.388 21.9281L23.1856 23.0567L24.3407 19.1675H19.388V21.9281ZM16.9862 15.8857L16.2608 20.5764L17.2661 17.9685L20.6925 17.1201L19.3884 15.8859L16.9862 15.8857Z\"\n fill=\"#E34807\"\n />\n <path\n d=\"M6.70312 19.1685L7.85821 14.8496H10.3424L10.3515 17.1215L13.7779 17.9697L14.7832 20.5777L14.2664 21.1521L11.6558 19.1675H6.70312V19.1685ZM24.3409 19.1685L23.1858 14.8496H20.7016L20.6925 17.1215L17.2661 17.9697L16.2608 20.5777L16.7776 21.1521L19.3884 19.1675H24.3407L24.3409 19.1685ZM17.2519 10.21H13.7923L13.5571 12.6394L14.7834 20.5746H16.2608L17.488 12.6394L17.2519 10.21Z\"\n fill=\"#FF8D5D\"\n />\n <path\n d=\"M7.85821 6.6748L6.70312 11.2002L7.85821 14.8515H10.3424L13.556 12.6443L7.85821 6.6748ZM13.3407 16.8324H12.2154L11.6025 17.4318L13.7793 17.9705L13.3407 16.8317V16.8324ZM23.1856 6.6748L24.3407 11.2002L23.1856 14.8515H20.7014L17.4878 12.6443L23.1856 6.6748ZM17.705 16.8324H18.8317L19.4446 17.4327L17.2652 17.9721L17.705 16.8317V16.8324ZM16.5209 22.0935L16.7776 21.1554L16.261 20.5811H14.7828L14.2662 21.1554L14.523 22.0934\"\n fill=\"#661800\"\n />\n <path\n d=\"M16.5176 22.0928V23.6414H14.5195V22.0928H16.5176Z\"\n fill=\"#C0C4CD\"\n />\n <path\n d=\"M11.6602 21.9353L14.5277 23.6459V22.0971L14.2711 21.1592L11.6602 21.9353ZM19.3914 21.9353L16.5239 23.6459V22.0971L16.7805 21.1592L19.3914 21.9353Z\"\n fill=\"#E7EBF6\"\n />\n </g>\n <defs>\n <clipPath id=\"clip0_13528_106779\">\n <rect\n width=\"17.7143\"\n height=\"17.1664\"\n fill=\"white\"\n transform=\"translate(6.65234 6.64355)\"\n />\n </clipPath>\n </defs>\n </svg>\n );\n};\n","import type { SVGProps } from \"react\";\n\nexport const WalletConnectIcon = (props: SVGProps<SVGSVGElement>) => {\n return (\n <svg\n width=\"31\"\n height=\"31\"\n viewBox=\"0 0 31 31\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <g clipPath=\"url(#clip0_13528_106803)\">\n <path\n d=\"M15.5 31C6.93959 31 0 24.0604 0 15.5C0 6.93959 6.93959 0 15.5 0C24.0604 0 31 6.93959 31 15.5C31 24.0604 24.0604 31 15.5 31Z\"\n fill=\"#2A425C\"\n />\n <path\n d=\"M20.364 14.1881L22.1887 12.3747C18.0647 8.27614 12.9404 8.27614 8.81641 12.3747L10.6411 14.1881C13.7775 11.071 17.2297 11.071 20.3661 14.1881H20.364Z\"\n fill=\"#3A99FB\"\n />\n <path\n d=\"M19.7567 18.4127L15.5013 14.1836L11.2459 18.4127L6.9905 14.1836L5.16797 15.9949L11.2459 22.0374L15.5013 17.8083L19.7567 22.0374L25.8346 15.9949L24.0121 14.1836L19.7567 18.4127Z\"\n fill=\"#3A99FB\"\n />\n </g>\n <defs>\n <clipPath id=\"clip0_13528_106803\">\n <rect width=\"31\" height=\"31\" fill=\"white\" />\n </clipPath>\n </defs>\n </svg>\n );\n};\n","import type { SVGProps } from \"react\";\n\nexport const TonConnectIcon = (props: SVGProps<SVGSVGElement>) => {\n return (\n <svg\n width=\"30\"\n height=\"30\"\n viewBox=\"0 0 30 30\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <rect width=\"30\" height=\"30\" rx=\"7.74194\" fill=\"#0098EA\" />\n <path\n d=\"M20.4479 7.74219H10.2042C8.3207 7.74219 7.12693 9.77392 8.07447 11.4163L14.3966 22.3743C14.8091 23.0897 15.843 23.0897 16.2555 22.3743L22.5789 11.4163C23.5252 9.7765 22.3314 7.74219 20.4492 7.74219H20.4479ZM14.3914 19.0882L13.0146 16.4234L9.69238 10.4817C9.47322 10.1014 9.74394 9.61406 10.2029 9.61406H14.3901V19.0894L14.3914 19.0882ZM20.9571 10.4804L17.6362 16.4247L16.2594 19.0882V9.61277H20.4466C20.9056 9.61277 21.1763 10.1001 20.9571 10.4804Z\"\n fill=\"white\"\n />\n </svg>\n );\n};\n","import type { SVGProps } from \"react\";\n\nexport const TronLinkIcon = (props: SVGProps<SVGSVGElement>) => {\n return (\n <svg\n width=\"30\"\n height=\"30\"\n viewBox=\"0 0 30 30\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <g clipPath=\"url(#clip0_13294_90375)\">\n <rect width=\"30\" height=\"30\" rx=\"7.74194\" fill=\"#0C5CCE\" />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M22.843 19.2866L33.8876 17.2257L21.219 33.128L22.843 19.2866ZM21.4143 18.6579L19.7122 33.1286L10.5271 9.37849L21.4143 18.6579ZM22.1308 16.6062L11.7148 7.93224L28.7382 11.0777L22.1308 16.6062ZM30.4674 11.8559L34.0858 15.3861L24.1884 17.2254L30.4674 11.8559ZM31.3621 10.3519C31.0831 10.078 30.7291 9.89297 30.3451 9.82002L8.52615 5.67614C8.01797 5.57962 7.60141 6.07878 7.78729 6.56149L19.3533 36.5964C19.5367 37.0725 20.1679 37.1693 20.4855 36.7699L36.3132 16.867C36.7338 16.338 36.6869 15.5769 36.2046 15.1036L31.3621 10.3519Z\"\n fill=\"white\"\n />\n </g>\n <defs>\n <clipPath id=\"clip0_13294_90375\">\n <rect width=\"30\" height=\"30\" rx=\"7.74194\" fill=\"white\" />\n </clipPath>\n </defs>\n </svg>\n );\n};\n","import type { SVGProps } from \"react\";\n\nexport const ExitIcon = (props: SVGProps<SVGSVGElement>) => {\n return (\n <svg\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <path\n d=\"M8.89844 7.56219C9.20844 3.96219 11.0584 2.49219 15.1084 2.49219H15.2384C19.7084 2.49219 21.4984 4.28219 21.4984 8.75219V15.2722C21.4984 19.7422 19.7084 21.5322 15.2384 21.5322H15.1084C11.0884 21.5322 9.23844 20.0822 8.90844 16.5422\"\n stroke=\"#808080\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M2 12H14.88\"\n stroke=\"#808080\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M12.6484 8.64844L15.9984 11.9984L12.6484 15.3484\"\n stroke=\"#808080\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n );\n};\n","import React, { useCallback, useMemo, useState } from \"react\";\nimport { Button } from \"@/components/ui/button\";\nimport { useSwapModel } from \"../../hooks/bridge/use-swap-model\";\nimport { ArrowSwapIcon } from \"../../assets/icons\";\nimport { cn } from \"@/lib/utils\";\n\nexport const SwapButton: React.FC = () => {\n const swapModel = useSwapModel();\n const canSwap = useMemo(\n () =>\n !!(\n swapModel.fromChain &&\n swapModel.toChain &&\n swapModel.selectedAssetSymbol\n ),\n [swapModel.fromChain, swapModel.toChain, swapModel.selectedAssetSymbol]\n );\n const [turns, setTurns] = useState(0);\n const [isSwapping, setIsSwapping] = useState(false);\n\n const handleSwap = useCallback(() => {\n if (!canSwap || isSwapping) return;\n setIsSwapping(true);\n setTurns((t) => t + 1);\n swapModel.actions.swapSides();\n\n setTimeout(() => {\n setIsSwapping(false);\n }, 300);\n }, [canSwap, isSwapping, swapModel.actions]);\n\n return (\n <div className=\"relative\">\n <Button\n onClick={handleSwap}\n disabled={!canSwap || isSwapping}\n variant=\"secondary\"\n size=\"sm\"\n className={cn(\n \"bg-bridge-button text-bridge-button-foreground hover:text-bridge-button-foreground backdrop-blur-md h-9 w-9 p-0\",\n \"absolute top-1/2 -translate-y-1/2 left-1/2 -translate-x-1/2\",\n !canSwap || isSwapping\n ? \"opacity-50 cursor-not-allowed\"\n : \"hover:scale-110\"\n )}\n >\n <ArrowSwapIcon\n style={{\n transform: `rotate(${turns * 180}deg)`,\n transition: \"transform 300ms linear\",\n }}\n />\n </Button>\n </div>\n );\n};\n","import React from \"react\";\nimport { WalletIcon } from \"../../assets/icons\";\nimport { Skeleton } from \"@/components/ui/skeleton\";\nimport { Button } from \"@/components/ui/button\";\nimport { useBridgeTranslation } from \"../../i18n/BridgeI18nProvider\";\n\ninterface Props {\n value: string;\n isLoading?: boolean;\n showMax?: boolean;\n onMaxClick?: () => void;\n}\n\nexport const WalletBalance: React.FC<Props> = (props) => {\n const { value, isLoading = false, showMax = false, onMaxClick } = props;\n const { t } = useBridgeTranslation();\n\n const hasNoData =\n !value || value === \"0\" || value === \"0.00\" || value === \"0.0\";\n\n const shouldShowSkeleton = isLoading && hasNoData;\n const shouldShowMaxButton = showMax && !hasNoData && !isLoading;\n\n if (shouldShowSkeleton) {\n return (\n <div className=\"flex gap-2 items-center\">\n <WalletIcon className=\"text-muted-foreground\" />\n <Skeleton className=\"h-4 w-12 rounded-md\" />\n </div>\n );\n }\n\n return (\n <div className=\"flex gap-2 items-center\">\n <WalletIcon className=\"text-muted-foreground\" />\n <span className=\"text-sm leading-5 font-medium text-muted-foreground\">\n {value}\n </span>\n {shouldShowMaxButton && (\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={onMaxClick}\n className=\"h-auto p-0 px-0 text-xs text-bridge-link font-medium underline hover:opacity-70 hover:bg-transparent cursor-pointer rounded-none\"\n >\n {t(\"bridge.max\")}\n </Button>\n )}\n </div>\n );\n};\n","interface NetworkSymbolProps {\n chainKey: string;\n className?: string;\n alt?: string;\n}\n\nconst BASE_URL = \"https://icons-ckg.pages.dev/stargate-light/networks\";\nconst DEFAULT_URL =\n \"https://icons-ckg.pages.dev/stargate-light/tokens/default.svg\";\n\nexport const NetworkSymbol = ({\n chainKey,\n className = \"w-4 h-4\",\n alt,\n}: NetworkSymbolProps) => {\n const normalizedChainKey = chainKey.toLowerCase();\n const src =\n chainKey === \"default\"\n ? DEFAULT_URL\n : `${BASE_URL}/${normalizedChainKey}.svg`;\n\n return <img src={src} alt={alt ?? chainKey} className={className} />;\n};\n","import { useMemo } from \"react\";\nimport { useBridgeTranslation } from \"../../i18n/BridgeI18nProvider\";\nimport { ArrowDownIcon } from \"../../assets/icons\";\nimport { Button } from \"@/components/ui/button\";\nimport type { Chain } from \"../../types\";\nimport { NetworkSymbol } from \"./network-symbol\";\n\ntype SelectNetworkButtonProps = {\n onClick?: () => void;\n network?: Pick<Chain, \"chainKey\" | \"name\">;\n};\n\nexport const SelectNetworkButton = ({\n onClick,\n network,\n}: SelectNetworkButtonProps) => {\n const { t } = useBridgeTranslation();\n\n const label = useMemo(() => {\n return network?.name ?? t(\"bridge.selectNetwork\");\n }, [network, t]);\n\n return (\n <Button\n onClick={onClick}\n size=\"sm\"\n variant=\"secondary\"\n type=\"button\"\n className=\"shrink-0 gap-2 h-9 !pl-2 bg-bridge-button text-bridge-button-foreground hover:text-bridge-button-foreground\"\n aria-label={label}\n >\n <div className=\"flex gap-2 items-center\">\n <NetworkSymbol\n chainKey={network?.chainKey ?? \"default\"}\n className=\"w-6 h-6 rounded-full\"\n alt={label}\n />\n <span>{label}</span>\n </div>\n <ArrowDownIcon className=\"w-4 h-4\" />\n </Button>\n );\n};\n","import { Input } from \"@/components/ui/input\";\nimport { Skeleton } from \"@/components/ui/skeleton\";\nimport { cn } from \"@/lib/utils\";\nimport React, {\n forwardRef,\n useCallback,\n useEffect,\n useState,\n type ChangeEvent,\n} from \"react\";\n\nconst normalizeValue = (value: string, max?: number): string | undefined => {\n const targetValue = value.replace(/,/g, \".\");\n const decimalRegex = /^(\\d+([.]\\d*)?|[.]\\d+)?$/;\n\n if (decimalRegex.test(targetValue)) {\n const numberValue = parseFloat(targetValue);\n\n if (max && targetValue !== \".\" && numberValue > max) {\n return String(max);\n }\n return targetValue;\n }\n\n return undefined;\n};\n\ntype CurrencyInputProps = {\n value: string;\n max?: number;\n onAmountChange: (value: string) => void;\n showSkeleton?: boolean;\n} & Omit<\n React.InputHTMLAttributes<HTMLInputElement>,\n \"value\" | \"onChange\" | \"type\" | \"inputMode\" | \"pattern\"\n>;\n\nexport const TokenInput = forwardRef<HTMLInputElement, CurrencyInputProps>(\n (\n {\n value,\n onAmountChange,\n showSkeleton = false,\n className,\n max,\n readOnly,\n ...rest\n },\n ref\n ) => {\n const [inputVal, setInputVal] = useState<string>(value ?? \"\");\n\n useEffect(() => {\n setInputVal(value ?? \"\");\n }, [value]);\n\n const handleChange = useCallback(\n (event: ChangeEvent<HTMLInputElement>) => {\n const raw = event.target.value;\n const normalized = normalizeValue(raw, max);\n if (normalized === undefined) return;\n setInputVal(normalized);\n onAmountChange(normalized);\n },\n [max, onAmountChange]\n );\n\n if (showSkeleton && readOnly) {\n return <Skeleton className={cn(\"h-8 my-2 w-1/3 bg-secondary rounded-md\", className)} />;\n }\n\n return (\n <>\n <Input\n ref={ref}\n value={inputVal}\n onChange={handleChange}\n type=\"text\"\n placeholder=\"0.0\"\n inputMode=\"decimal\"\n pattern=\"[0-9]*[.,]?[0-9]*\"\n readOnly={readOnly}\n className={cn(\n \"text-4xl h-12 font-medium leading-9 rounded-none text-end bg-transparent dark:bg-transparent text-foreground shadow-none border-none outline-none ring-0 focus:outline-none focus-visible:ring-0 focus-visible:outline-0 focus-visible:ring-offset-0\",\n className\n )}\n max={max}\n {...rest}\n />\n </>\n );\n }\n);\n\nTokenInput.displayName = \"TokenInput\";\n","import { useCallback, useState } from \"react\";\n\nexport function useModal(initial = false) {\n const [isOpen, setOpen] = useState<boolean>(initial);\n\n const onOpen = useCallback(() => setOpen(true), []);\n const onClose = useCallback(() => setOpen(false), []);\n const toggle = useCallback(() => setOpen((v) => !v), []);\n\n return { isOpen, onOpen, onClose, toggle };\n}\n","import { SearchIcon } from \"../../assets/icons\";\nimport { Input } from \"@/components/ui/input\";\nimport { cn } from \"@/lib/utils\";\n\ninterface SearchInputProps {\n placeholder: string;\n value: string;\n onChange: (value: string) => void;\n className?: string;\n}\n\nexport const SearchInput = ({\n placeholder,\n value,\n onChange,\n className,\n}: SearchInputProps) => {\n return (\n <div className={cn(\"rounded-xs relative\")}>\n <SearchIcon className=\"w-6 h-6 absolute z-10 left-5 top-0 bottom-0 my-auto text-foreground\" />\n <Input\n placeholder={placeholder}\n className={cn(\n \"w-full outline-none px-5 py-4 relative pl-16 bg-input border transition-all border-transparent rounded-xs ring-0 leading-0 h-13 text-base focus-visible:border focus-visible:border-ring\",\n className\n )}\n value={value}\n onChange={(e) => onChange(e.target.value)}\n />\n </div>\n );\n};\n","import { useCallback, useMemo, useState } from \"react\";\nimport { useBridgeTranslation } from \"../../i18n/BridgeI18nProvider\";\nimport {\n Dialog,\n DialogContent,\n DialogHeader,\n DialogTitle,\n} from \"@/components/ui/dialog\";\nimport { useChainsStore } from \"../../store/use-chains-store\";\nimport { useTokensStore } from \"../../store/use-token-store\";\nimport { Button } from \"@/components/ui/button\";\nimport { NetworkSymbol } from \"../ui/network-symbol\";\nimport { SearchInput } from \"../ui/search-input\";\nimport type { Chain } from \"../../types\";\nimport { cn } from \"@/lib/utils\";\n\ninterface Props {\n isOpen: boolean;\n onClose: () => void;\n items: Chain[] | undefined;\n allowedItems?: Chain[] | undefined;\n onChangeChain: (v: Chain) => void;\n isSource?: boolean;\n}\n\ninterface GroupedChains {\n available: Chain[];\n willChangeSrc: Chain[];\n willChangeTokenAndSrc: Chain[];\n}\n\nexport const ChainSelectModal = ({\n isOpen,\n onClose,\n items,\n allowedItems,\n onChangeChain,\n isSource,\n}: Props) => {\n const { t } = useBridgeTranslation();\n const [query, setQuery] = useState(\"\");\n const { setFromChain, chains, fromChain, toChain } = useChainsStore();\n const { assetMatrix, selectedAssetSymbol, setSelectedAssetSymbol } =\n useTokensStore();\n\n const handleClose = useCallback(() => {\n setQuery(\"\");\n onClose();\n }, [onClose]);\n\n const findCompatibleSrcChain = useCallback(\n (dstChain: Chain): Chain | undefined => {\n if (!chains || !selectedAssetSymbol || !assetMatrix) return undefined;\n\n const PRIORITY_CHAINS = [\n \"ethereum\",\n \"arbitrum\",\n \"bsc\",\n \"polygon\",\n \"optimism\",\n \"base\",\n ];\n\n const assetByChain = assetMatrix[selectedAssetSymbol.toUpperCase()];\n if (!assetByChain) return undefined;\n\n const availableChains = chains.filter(\n (c) => assetByChain[c.chainKey] && assetByChain[dstChain.chainKey]\n );\n\n for (const chainKey of PRIORITY_CHAINS) {\n const chain = availableChains.find((c) => c.chainKey === chainKey);\n if (chain) return chain;\n }\n return availableChains[0];\n },\n [chains, selectedAssetSymbol, assetMatrix]\n );\n\n const findCompatibleTokenAndSrcChain = useCallback(\n (\n dstChain: Chain\n ): { tokenSymbol: string; sourceChain: Chain } | undefined => {\n if (!chains || !assetMatrix) return undefined;\n\n const PRIORITY_CHAINS = [\n \"ethereum\",\n \"arbitrum\",\n \"bsc\",\n \"polygon\",\n \"optimism\",\n \"base\",\n ];\n\n // Iterate through all tokens in the asset matrix\n for (const tokenSymbol of Object.keys(assetMatrix)) {\n const assetByChain = assetMatrix[tokenSymbol];\n\n // Check if this token is available on the destination chain\n if (!assetByChain[dstChain.chainKey]) continue;\n\n // Find source chains that support this token\n const availableChains = chains.filter(\n (c) => assetByChain[c.chainKey] && c.chainKey !== dstChain.chainKey\n );\n\n if (availableChains.length === 0) continue;\n\n // Pick the first priority chain, or fallback to first available\n let sourceChain: Chain | undefined;\n for (const chainKey of PRIORITY_CHAINS) {\n sourceChain = availableChains.find((c) => c.chainKey === chainKey);\n if (sourceChain) break;\n }\n if (!sourceChain) sourceChain = availableChains[0];\n\n // Return the first working combination\n return { tokenSymbol, sourceChain };\n }\n\n return undefined;\n },\n [chains, assetMatrix]\n );\n\n const groupedChains = useMemo((): GroupedChains => {\n const q = query.trim().toLowerCase();\n const filtered = q\n ? (items ?? []).filter(\n (c) =>\n c.name.toLowerCase().includes(q) ||\n c.chainKey.toLowerCase().includes(q)\n )\n : items ?? [];\n\n const groups: GroupedChains = {\n available: [],\n willChangeSrc: [],\n willChangeTokenAndSrc: [],\n };\n\n for (const chain of filtered) {\n const isAllowed =\n allowedItems?.some((c) => c.chainKey === chain.chainKey) || false;\n\n if (isAllowed) {\n groups.available.push(chain);\n } else {\n // Try to find a compatible source chain with the same token\n const compatibleSrc = findCompatibleSrcChain(chain);\n if (compatibleSrc) {\n groups.willChangeSrc.push(chain);\n } else {\n // Try to find a compatible token and source chain\n const compatibleTokenAndSrc = findCompatibleTokenAndSrcChain(chain);\n if (compatibleTokenAndSrc) {\n groups.willChangeTokenAndSrc.push(chain);\n }\n }\n }\n }\n\n groups.available.sort((a, b) => a.name.localeCompare(b.name));\n groups.willChangeSrc.sort((a, b) => a.name.localeCompare(b.name));\n groups.willChangeTokenAndSrc.sort((a, b) => a.name.localeCompare(b.name));\n return groups;\n }, [\n items,\n query,\n allowedItems,\n findCompatibleSrcChain,\n findCompatibleTokenAndSrcChain,\n ]);\n\n const onChainPick = (\n chain: Chain,\n willChangeSrc = false,\n willChangeTokenAndSrc = false\n ) => {\n if (willChangeTokenAndSrc) {\n const result = findCompatibleTokenAndSrcChain(chain);\n if (result) {\n setSelectedAssetSymbol(result.tokenSymbol);\n if (setFromChain) setFromChain(result.sourceChain);\n }\n } else if (willChangeSrc) {\n const newSrcChain = findCompatibleSrcChain(chain);\n if (newSrcChain && setFromChain) setFromChain(newSrcChain);\n }\n onChangeChain(chain);\n handleClose();\n };\n\n const renderChainItem = (\n chain: Chain,\n willChangeSrc: boolean,\n willChangeTokenAndSrc: boolean = false\n ) => {\n const isSelected = isSource\n ? fromChain?.chainKey === chain.chainKey\n : toChain?.chainKey === chain.chainKey;\n\n return (\n <Button\n key={chain.chainKey}\n onClick={() => onChainPick(chain, willChangeSrc, willChangeTokenAndSrc)}\n className={cn(\n \"w-full cursor-pointer flex shadow-none rounded-xs items-center justify-between gap-3 px-5 py-4 h-13 font-semibold capitalize bg-transparent hover:scale-100 hover:bg-accent\",\n isSelected ? \"border border-primary\" : \"\",\n willChangeSrc || willChangeTokenAndSrc ? \"opacity-50 hover:opacity-100\" : \"\"\n )}\n >\n <div className=\"flex items-center gap-3\">\n <NetworkSymbol\n chainKey={chain.chainKey}\n className=\"w-6 h-6 rounded-full\"\n alt={chain.name}\n />\n <div className=\"flex flex-col items-start\">\n <div className=\"flex items-center gap-1 \">\n <p className=\"text-foreground text-base font-semibold leading-[100%]\">\n {chain.name}\n </p>\n </div>\n </div>\n </div>\n </Button>\n );\n };\n\n return (\n <Dialog open={isOpen} onOpenChange={(open) => !open && handleClose()}>\n <DialogContent className=\"md:max-h-[90dvh] md:h-[90dvh] overflow-hidden flex flex-col p-10 pt-8 max-w-md\">\n <DialogHeader className=\"text-left pb-0\">\n <DialogTitle className=\"text-xl leading-8\">\n <div className=\"flex flex-col gap-0\">\n <div>{t(\"bridge.select\")}</div>\n <div>{t(isSource ? \"bridge.sourceNetwork\" : \"bridge.destinationNetwork\")}</div>\n </div>\n </DialogTitle>\n </DialogHeader>\n\n <SearchInput\n placeholder={t(\"bridge.search\")}\n value={query}\n onChange={setQuery}\n className=\"text-foreground placeholder:text-muted-foreground\"\n />\n\n <div className=\"flex-1 overflow-y-auto\">\n {groupedChains.available.length > 0 &&\n groupedChains.available.map((c) => renderChainItem(c, false))}\n\n {groupedChains.willChangeSrc.length > 0 && (\n <>\n <p\n className={`px-5 py-2 leading-4 text-base font-semibold text-muted-foreground uppercase ${\n groupedChains.available.length > 0 ? \"mt-10\" : \"\"\n }`}\n >\n {t(\"bridge.willChangeSourceChain\")}\n </p>\n {groupedChains.willChangeSrc.map((c) =>\n renderChainItem(c, true, false)\n )}\n </>\n )}\n\n {groupedChains.willChangeTokenAndSrc.length > 0 && (\n <>\n <p\n className={`px-5 py-2 leading-4 text-base font-semibold text-muted-foreground uppercase ${\n groupedChains.available.length > 0 ||\n groupedChains.willChangeSrc.length > 0\n ? \"mt-10\"\n : \"\"\n }`}\n >\n {t(\"bridge.willChangeSourceNetworkAndToken\")}\n </p>\n {groupedChains.willChangeTokenAndSrc.map((c) =>\n renderChainItem(c, false, true)\n )}\n </>\n )}\n\n {groupedChains.available.length === 0 &&\n groupedChains.willChangeSrc.length === 0 &&\n groupedChains.willChangeTokenAndSrc.length === 0 && (\n <div className=\"text-sm text-muted-foreground px-12 py-2 h-28 flex items-center justify-center text-center\">\n {t(\"bridge.chainNotFound\")}\n </div>\n )}\n </div>\n </DialogContent>\n </Dialog>\n );\n};\n","import { create } from \"zustand\";\n\nexport type WalletType = \"ton\" | \"metamask\" | \"walletconnect\" | \"coinbase\" | \"tronlink\";\n\ninterface WalletSelectModalState {\n isOpen: boolean;\n addressType?: \"src\" | \"dst\";\n onOpen: (addressType?: \"src\" | \"dst\") => void;\n onClose: () => void;\n}\n\nexport const useWalletSelectModal = create<WalletSelectModalState>((set) => ({\n isOpen: false,\n addressType: undefined,\n onOpen: (addressType) => set({ isOpen: true, addressType }),\n onClose: () => set({ isOpen: false, addressType: undefined }),\n}));","export const EditIcon = (props: React.SVGProps<SVGSVGElement>) => {\n return (\n <svg\n width=\"18\"\n height=\"18\"\n viewBox=\"0 0 18 18\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <g clip-path=\"url(#clip0_551_3851)\">\n <path\n d=\"M9.76159 5.01068L4.91742 9.85489C4.72585 10.0465 4.54793 10.4023 4.50687 10.6622L4.24687 12.5096C4.15108 13.1801 4.61636 13.6454 5.28688 13.5496L7.13425 13.2896C7.39425 13.2486 7.76372 13.0707 7.94161 12.8791L12.7858 8.03491C13.6206 7.20018 14.0174 6.2286 12.7858 4.99702C11.5679 3.77913 10.5963 4.17594 9.76159 5.01068Z\"\n stroke=\"currentColor\"\n stroke-miterlimit=\"10\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n <path\n d=\"M9.0625 5.70312C9.47303 7.18102 10.6225 8.33049 12.1004 8.74101\"\n stroke=\"currentColor\"\n stroke-miterlimit=\"10\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </g>\n <defs>\n <clipPath id=\"clip0_551_3851\">\n <rect\n width=\"12\"\n height=\"12\"\n fill=\"white\"\n transform=\"translate(3 3)\"\n />\n </clipPath>\n </defs>\n </svg>\n );\n};\n","import React, { useCallback, useMemo } from \"react\";\nimport { useBridgeTranslation } from \"../../i18n/BridgeI18nProvider\";\nimport { useChainStrategies } from \"../../hooks/use-chain-strategies\";\nimport { useWalletSelectModal } from \"../../hooks/ui/use-wallet-select-modal\";\nimport { Button } from \"@/components/ui/button\";\nimport { MetaMaskIcon, TonKeeperIcon, TronLinkIcon } from \"../../assets/icons\";\nimport type { NetworkType } from \"../../chains/chain-strategy-interface\";\nimport { formatAddress } from \"../../utils/formatters\";\nimport { EditIcon } from \"../icons/edit-icon\";\n\ninterface WalletButtonProps {\n wallet: \"ton\" | \"metamask\" | \"tronlink\";\n addressType?: \"src\" | \"dst\";\n}\n\nconst prefixIcons = {\n tronlink: <TronLinkIcon className=\"w-5 h-5\" />,\n metamask: <MetaMaskIcon className=\"w-5 h-5\" />,\n ton: <TonKeeperIcon className=\"w-5 h-5\" />,\n};\n\nconst mapWalletToType = (\n wallet: \"ton\" | \"metamask\" | \"tronlink\"\n): NetworkType => {\n switch (wallet) {\n case \"ton\":\n return \"ton\";\n case \"tronlink\":\n return \"tron\";\n case \"metamask\":\n return \"evm\";\n }\n};\n\nexport const WalletInlineButton: React.FC<WalletButtonProps> = ({\n wallet,\n addressType,\n}) => {\n const { t } = useBridgeTranslation();\n const { onOpen } = useWalletSelectModal();\n const { chainRegistry } = useChainStrategies();\n\n const walletType = mapWalletToType(wallet);\n const connection = chainRegistry.getStrategyByType(walletType);\n const account = connection?.getAccount();\n const isConnected = connection?.isConnected();\n const isConnecting = connection?.isConnecting();\n\n const isInitialized = connection?.isInitialized() ?? true;\n const error = connection?.getError();\n\n const handleClick = useCallback(() => {\n onOpen(addressType);\n }, [onOpen, addressType]);\n\n const buttonText = useMemo(() => {\n if ((wallet === \"metamask\" || wallet === \"tronlink\") && !isInitialized)\n return t(\"common.initializing\");\n if (isConnecting) return t(\"common.connecting\");\n if (isConnected && account) return formatAddress(account);\n if (wallet === \"ton\") return t(\"wallets.addTonWallet\");\n if (wallet === \"tronlink\") return t(\"wallets.addTronWallet\");\n return t(\"wallets.addEvmWallet\");\n }, [wallet, isInitialized, isConnecting, isConnected, account, t]);\n\n const isButtonDisabled =\n ((wallet === \"metamask\" || wallet === \"tronlink\") && !isInitialized) ||\n isConnecting;\n\n return (\n <div className=\"inline-flex flex-col items-start gap-1\">\n <Button\n type=\"button\"\n onClick={handleClick}\n onMouseDown={(e) => {\n e.preventDefault();\n }}\n disabled={isButtonDisabled}\n variant=\"ghost\"\n size=\"sm\"\n className=\"flex gap-1 cursor-pointer hover:opacity-60 hover:bg-transparent !px-0 pr-1 h-5\"\n >\n <span>{isConnected ? prefixIcons[wallet] : null}</span>\n <span className=\"leading-3 text-sm border-b border-dotted border-bridge-link text-bridge-link\">\n {buttonText}\n </span>\n {isConnected && <EditIcon className=\"text-bridge-link -ml-0.5\" />}\n </Button>\n\n {error && <div className=\"text-xs text-destructive\">{error}</div>}\n </div>\n );\n};\n","import React, { useCallback, useMemo, useState } from \"react\";\nimport { WalletBalance } from \"../ui/wallet-balance\";\nimport { SelectNetworkButton } from \"../ui/select-network-button\";\nimport { TokenInput } from \"../ui/token-input\";\nimport { useModal } from \"../../hooks/ui/use-modal\";\nimport { ChainSelectModal } from \"../modals/chain-select-modal\";\nimport { useTokensStore } from \"../../store/use-token-store\";\nimport { WalletInlineButton } from \"../ui/wallet-inline-button\";\nimport { Skeleton } from \"@/components/ui/skeleton\";\nimport { useBridgeQuoteStore } from \"../../store/use-bridge-quote-store\";\nimport type { Chain, Token } from \"../../types\";\nimport type { BalanceData } from \"../../hooks/api/use-balances\";\nimport { truncateToDecimals, formatUsd } from \"../../utils/formatters\";\nimport { cn } from \"@/lib/utils\";\n\ninterface SwapSectionProps {\n label: string;\n className?: string;\n balance: BalanceData;\n chain?: Chain;\n chains?: Chain[];\n allowedChains?: Chain[];\n amount?: string;\n readOnlyAmount?: boolean;\n onSelect?: (chain: Chain | undefined) => void;\n onAmountChange?: (v: string) => void;\n disableNetworkSelect?: boolean;\n isSource?: boolean;\n}\n\nfunction resolveTokenOnChainFromMatrix(\n assetMatrix: Record<string, Record<string, Token>> | undefined,\n assetSymbol: string | undefined,\n chainKey: string | undefined\n): Token | undefined {\n if (!assetMatrix || !assetSymbol || !chainKey) return undefined;\n const byChain = assetMatrix[assetSymbol.toUpperCase()];\n return byChain?.[chainKey];\n}\n\nfunction pickAnyPriceUsd(\n assetMatrix: Record<string, Record<string, Token>> | undefined,\n assetSymbol: string | undefined\n): number | undefined {\n if (!assetMatrix || !assetSymbol) return undefined;\n const byChain = assetMatrix[assetSymbol.toUpperCase()];\n if (!byChain) return undefined;\n for (const t of Object.values(byChain)) {\n const p = t?.price?.usd;\n if (typeof p === \"number\" && isFinite(p) && p > 0) return p;\n }\n return undefined;\n}\n\nexport const SwapSection: React.FC<SwapSectionProps> = ({\n label,\n className,\n balance,\n chain,\n chains,\n allowedChains,\n amount = \"\",\n readOnlyAmount,\n disableNetworkSelect,\n isSource,\n onSelect,\n onAmountChange,\n}) => {\n const { isOpen, onClose, onOpen } = useModal();\n const { assetMatrix, selectedAssetSymbol } = useTokensStore();\n const { status } = useBridgeQuoteStore();\n const [isFocused, setIsFocused] = useState(false);\n\n const tokenOnThisChain = useMemo(\n () =>\n resolveTokenOnChainFromMatrix(\n assetMatrix,\n selectedAssetSymbol,\n chain?.chainKey\n ),\n [assetMatrix, selectedAssetSymbol, chain?.chainKey]\n );\n\n const priceUsd =\n tokenOnThisChain?.price?.usd ??\n pickAnyPriceUsd(assetMatrix, selectedAssetSymbol);\n\n const computedFiat = useMemo(() => {\n const amt = parseFloat(amount || \"\");\n if (Number.isNaN(amt) || !priceUsd) return \"$0\";\n return formatUsd(amt * priceUsd);\n }, [amount, priceUsd]);\n\n const isUsdLoading = Boolean(amount && parseFloat(amount) > 0 && !priceUsd);\n\n const onChangeChain = useCallback(\n (c: Chain) => {\n onSelect?.(c);\n onClose();\n },\n [onSelect, onClose]\n );\n\n const handleMaxClick = useCallback(() => {\n if (balance.balance && onAmountChange) {\n onAmountChange(balance.balance.toString());\n }\n }, [balance.balance, onAmountChange]);\n\n return (\n <>\n <div\n className={cn(\n \"p-4 flex flex-col gap-4 transition-colors bg-muted\",\n isSource && isFocused ? \"bg-accent\" : \"\",\n className\n )}\n >\n <div className=\"flex justify-between items-center\">\n <span className=\"text-sm leading-5 font-medium text-muted-foreground\">\n {label}\n </span>\n <WalletBalance\n value={truncateToDecimals(balance.balance, 2)}\n isLoading={balance.isLoading}\n showMax={isSource}\n onMaxClick={handleMaxClick}\n />\n </div>\n\n <div className=\"flex gap-3 justify-between items-center\">\n <SelectNetworkButton\n network={chain}\n onClick={disableNetworkSelect ? undefined : onOpen}\n />\n <TokenInput\n value={amount}\n onAmountChange={useCallback(\n (v) => onAmountChange?.(v),\n [onAmountChange]\n )}\n readOnly={!!readOnlyAmount}\n showSkeleton={status === \"loading\"}\n className=\"p-0\"\n onFocus={() => setIsFocused(true)}\n onBlur={() => setIsFocused(false)}\n />\n </div>\n\n <div className=\"flex justify-between items-center\">\n <WalletInlineButton\n wallet={\n chain?.chainKey === \"ton\"\n ? \"ton\"\n : chain?.chainKey === \"tron\"\n ? \"tronlink\"\n : \"metamask\"\n }\n addressType={isSource ? \"src\" : \"dst\"}\n />\n {isUsdLoading ? (\n <Skeleton className=\"h-4 w-12 rounded-md\" />\n ) : (\n <span className=\"leading-5 text-sm font-medium text-muted-foreground\">\n {computedFiat}\n </span>\n )}\n </div>\n </div>\n\n <ChainSelectModal\n isOpen={isOpen}\n onClose={onClose}\n items={chains}\n allowedItems={allowedChains}\n onChangeChain={onChangeChain}\n isSource={isSource}\n />\n </>\n );\n};\n","import { create } from \"zustand\";\n\n/**\n * Stores custom destination address override when user enables \"Send to another address\"\n */\ninterface CustomAddressState {\n customDstAddress?: string;\n setCustomDstAddress: (address?: string) => void;\n clearCustomDstAddress: () => void;\n}\n\nexport const useCustomAddressStore = create<CustomAddressState>((set) => ({\n customDstAddress: undefined,\n setCustomDstAddress: (address) => set({ customDstAddress: address }),\n clearCustomDstAddress: () => set({ customDstAddress: undefined }),\n}));\n","import { useMemo } from \"react\";\nimport { isAddressValidForChain } from \"../lib/address-validation\";\n\nexport const useIsAddressValid = (\n address: string | undefined,\n chainKey: string | undefined\n) => {\n const isValid = useMemo(() => {\n return isAddressValidForChain(chainKey, address);\n }, [address, chainKey]);\n\n return { isValid };\n};\n","import { useState } from \"react\";\nimport { useBridgeTranslation } from \"../../i18n/BridgeI18nProvider\";\nimport { Switch } from \"@/components/ui/switch\";\nimport { useCustomAddressStore } from \"../../store/use-custom-address-store\";\nimport { useChainsStore } from \"../../store/use-chains-store\";\nimport { Button } from \"@/components/ui/button\";\nimport { X } from \"lucide-react\";\nimport { AnimatePresence, motion } from \"framer-motion\";\nimport { cn } from \"@/lib/utils\";\nimport { useIsAddressValid } from \"../../hooks/use-is-address-valid\";\n\nexport const AnotherAddress = () => {\n const [enabled, setEnabled] = useState(false);\n const [isFocused, setIsFocused] = useState(false);\n\n const { t } = useBridgeTranslation();\n const { toChain } = useChainsStore();\n const { setCustomDstAddress } = useCustomAddressStore();\n\n const [value, setValue] = useState<string>(\"\");\n const { isValid } = useIsAddressValid(value.trim(), toChain?.chainKey);\n const invalid = value.trim() && !isValid;\n\n const pushToStoreIfValid = (raw: string) => {\n if (!enabled) return;\n\n const v = raw.trim();\n if (!v) {\n setCustomDstAddress(undefined);\n return;\n }\n\n if (isValid) {\n setCustomDstAddress(v);\n }\n };\n\n const onChange = (text: string) => {\n setValue(text);\n pushToStoreIfValid(text);\n };\n\n const onPaste = async () => {\n try {\n const text = (await navigator.clipboard.readText?.()) ?? \"\";\n setValue(text);\n pushToStoreIfValid(text);\n } catch {\n // нет доступа к буферу — игнорируем\n }\n };\n\n return (\n <div className=\"p-4 flex flex-col rounded-b-sm bg-muted\">\n <div className=\"flex items-center justify-between\">\n <p className=\"text-sm leading-5 font-medium text-muted-foreground\">\n {t(\"bridge.sendToAnotherAddress\")}\n </p>\n <Switch\n aria-pressed={enabled}\n checked={enabled}\n onClick={() => setEnabled((v) => !v)}\n />\n </div>\n\n <AnimatePresence initial={false} mode=\"wait\">\n {enabled && (\n <motion.div\n key=\"custom-address-block\"\n initial={{ opacity: 0, height: 0, y: -6 }}\n animate={{ opacity: 1, height: \"auto\", y: 0 }}\n exit={{ opacity: 0, height: 0, y: -6 }}\n transition={{ duration: 0.25, ease: [0.22, 1, 0.36, 1] }}\n className=\"overflow-hidden\"\n >\n <div\n className={cn(\n \"bg-input px-4 py-2 pr-2 mt-4 w-full flex items-center gap-3 rounded-xs justify-between border border-transparent transition-all\",\n {\n \"py-4\": value,\n \"border border-ring\": isFocused,\n \"border-destructive\": invalid,\n }\n )}\n >\n <div className=\"flex flex-col gap-2 w-full\">\n <textarea\n className={cn(\n \"h-auto text-base leading-5 font-semibold w-full bg-transparent dark:bg-transparent placeholder:text-muted-foreground/50 border-none focus:outline-none focus:ring-0 resize-none transition-all\",\n )}\n placeholder={t(\"bridge.anotherAddressPlaceholder\")}\n rows={value.length >= 32 ? 2 : 1}\n value={value}\n onFocus={() => setIsFocused(true)}\n onBlur={() => setIsFocused(false)}\n onChange={(e) => onChange(e.target.value)}\n />\n {value && (\n <>\n {invalid ? (\n <p className=\"text-xs font-medium text-destructive\">\n {t(\"bridge.addressDoesntMatch\", {\n network: toChain?.name ?? \"selected\",\n })}\n </p>\n ) : (\n <p className=\"text-xs font-medium text-muted-foreground\">\n {t(\"bridge.checkBeforeTransfer\", {\n defaultValue: \"Check correctness before transfer\",\n })}\n </p>\n )}\n </>\n )}\n </div>\n {!value ? (\n <Button\n variant=\"secondary\"\n className=\"bg-bridge-button text-bridge-button-foreground hover:text-bridge-button-foreground uppercase text-xs\"\n size=\"sm\"\n onClick={onPaste}\n >\n {t(\"common.paste\")}\n </Button>\n ) : (\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className=\"rounded-full p-0 w-5 h-5 self-start\"\n onClick={() => setValue(\"\")}\n >\n <X className=\"w-4 h-4\" />\n </Button>\n )}\n </div>\n </motion.div>\n )}\n </AnimatePresence>\n </div>\n );\n};\n","import { type SVGProps } from \"react\";\n\nexport const InfoIcon = (props: SVGProps<SVGSVGElement>) => {\n return (\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <path\n d=\"M6.56836 5.8519C6.56836 5.06104 7.20948 4.41992 8.00034 4.41992C8.7912 4.41992 9.43232 5.06104 9.43232 5.8519C9.43232 6.13698 9.34902 6.40259 9.20543 6.62574C8.77748 7.29081 8.00034 7.92501 8.00034 8.71587V9.07386M8.00034 11.3159V11.5798\"\n stroke=\"currentColor\"\n stroke-width=\"1.68349\"\n stroke-linecap=\"round\"\n />\n </svg>\n );\n};\n","import {\n Tooltip,\n TooltipContent,\n TooltipTrigger,\n} from \"@/components/ui/tooltip\";\nimport type { ReactNode } from \"react\";\n\ninterface Props {\n children: ReactNode;\n text: string;\n}\n\nexport const Tip = (props: Props) => {\n const { children, text } = props;\n return (\n <Tooltip>\n <TooltipTrigger className=\"w-4 h-4 rounded-full bg-muted text-muted-foreground\">\n {children}\n </TooltipTrigger>\n <TooltipContent>\n <p>{text}</p>\n </TooltipContent>\n </Tooltip>\n );\n};\n","import { normalizeTickerSymbol } from \"../../api/api\";\n\ninterface TokenSymbolProps {\n symbol: string;\n className?: string;\n alt?: string;\n}\n\nconst BASE_URL = \"https://icons-ckg.pages.dev/stargate-light/tokens\";\n\nexport const TokenSymbol = ({\n symbol,\n className = \"w-4 h-4\",\n alt,\n}: TokenSymbolProps) => {\n const normalizedSymbol = normalizeTickerSymbol(symbol).toLowerCase();\n const src = `${BASE_URL}/${normalizedSymbol}.svg`;\n\n return <img src={src} alt={alt ?? symbol} className={className} />;\n};\n","import { useMemo } from \"react\";\nimport { useChainsStore } from \"../store/use-chains-store\";\nimport { useTokensStore } from \"../store/use-token-store\";\nimport { useBalances } from \"./api/use-balances\";\nimport { useAddresses } from \"./use-addresses\";\nimport { useBridgeQuoteStore } from \"../store/use-bridge-quote-store\";\n\nexport interface GasEstimate {\n nativeSym: string;\n nativeBalance: number;\n requiredNative: number;\n balancesKnown: boolean;\n isNativeSelected: boolean;\n hasEnoughGas: boolean;\n}\n\n/**\n * Get simple fallback gas reserve for pre-quote state\n */\nfunction getSimpleFallback(chainKey: string): number {\n const key = chainKey.toLowerCase();\n if (key === \"ton\") return 0.15; // Average of dynamic range (0.05-0.5 TON)\n if (key === \"tron\") return 10; // 10 TRX fallback (varies based on Energy)\n return 0.01; // EVM default\n}\n\nexport function useGasEstimate(amountNum?: number): GasEstimate {\n const { fromChain } = useChainsStore();\n const { selectedAssetSymbol } = useTokensStore();\n const { srcAddress } = useAddresses();\n const { balances, isLoading: balancesLoading } = useBalances(\n fromChain?.chainKey,\n srcAddress\n );\n const { quote } = useBridgeQuoteStore();\n\n const balancesKnown = !balancesLoading;\n\n // Extract stable primitive values to prevent infinite re-renders\n const chainKey = fromChain?.chainKey;\n const nativeCurrencySymbol = fromChain?.nativeCurrency?.symbol;\n const nativeCurrencyAddress = fromChain?.nativeCurrency?.address;\n const nativeCurrencyDecimals = fromChain?.nativeCurrency?.decimals;\n\n // Serialize quote fees to get stable reference\n const quoteFees = quote?.fees ? JSON.stringify(quote.fees) : null;\n const quoteSrcChainKey = quote?.srcChainKey;\n\n // Extract balance value as primitive to prevent infinite re-renders\n const nativeBalanceValue = nativeCurrencySymbol\n ? Number(balances[nativeCurrencySymbol.toUpperCase()]?.balance ?? 0)\n : 0;\n\n const result = useMemo(() => {\n if (!chainKey || !nativeCurrencySymbol) {\n return {\n nativeSym: \"\",\n nativeBalance: 0,\n requiredNative: 0,\n balancesKnown,\n isNativeSelected: false,\n hasEnoughGas: true,\n };\n }\n\n const nativeSym = nativeCurrencySymbol.toUpperCase();\n const nativeBalance = nativeBalanceValue;\n const isNativeSelected =\n nativeSym === (selectedAssetSymbol || \"\").toUpperCase();\n\n let requiredNative = 0;\n\n // Calculate from quote if available\n if (quoteFees && quoteSrcChainKey === chainKey) {\n const fees = JSON.parse(quoteFees);\n\n const feesInNative = fees\n .filter(\n (f: { chainKey: string; token: string; amount?: string }) =>\n f.chainKey === chainKey && f.token === nativeCurrencyAddress\n )\n .reduce(\n (sum: bigint, f: { amount?: string }) =>\n sum + BigInt(f.amount || \"0\"),\n 0n\n );\n\n const decimals = nativeCurrencyDecimals || 18;\n requiredNative = Number(feesInNative) / Math.pow(10, decimals);\n } else {\n // Fallback for pre-quote state\n requiredNative = getSimpleFallback(chainKey);\n }\n\n let hasEnoughGas = true;\n if (isNativeSelected) {\n hasEnoughGas = nativeBalance - (amountNum ?? 0) >= requiredNative;\n } else {\n hasEnoughGas = nativeBalance >= requiredNative;\n }\n\n return {\n nativeSym,\n nativeBalance,\n requiredNative,\n balancesKnown,\n isNativeSelected,\n hasEnoughGas: balancesKnown ? hasEnoughGas : true,\n };\n }, [\n chainKey,\n nativeCurrencySymbol,\n nativeCurrencyAddress,\n nativeCurrencyDecimals,\n selectedAssetSymbol,\n quoteFees,\n quoteSrcChainKey,\n amountNum,\n balancesKnown,\n nativeBalanceValue,\n ]);\n\n return result;\n}\n","import {\n Accordion,\n AccordionContent,\n AccordionItem,\n AccordionTrigger,\n} from \"@/components/ui/accordion\";\nimport { useBridgeTranslation } from \"../../i18n/BridgeI18nProvider\";\nimport { useTokensStore } from \"../../store/use-token-store\";\nimport { useChainsStore } from \"../../store/use-chains-store\";\nimport { useBridgeQuoteStore } from \"../../store/use-bridge-quote-store\";\nimport { useSettingsStore } from \"../../store/use-settings-store\";\nimport { InfoIcon } from \"../../assets/icons/InfoIcon\";\nimport { Skeleton } from \"@/components/ui/skeleton\";\nimport { Tip } from \"../ui/tip\";\nimport { StargateIcon } from \"../../assets/icons\";\nimport { TokenSymbol } from \"../ui/token-symbol\";\nimport { formatPercentage } from \"../../utils/formatters\";\nimport { resolveTokenOnChainFromMatrix } from \"../../lib/quote\";\nimport { getQuoteDetails } from \"../../utils/quote-helpers\";\nimport { useGasEstimate } from \"../../hooks/use-gas-estimate\";\n\n//TODO: get rid of this shit\nfunction getRouteDisplayName(route?: string): string {\n if (!route) return \"Stargate Bridge\";\n\n const routeLower = route.toLowerCase();\n\n if (routeLower.includes(\"taxi\")) return \"Stargate V2 Fast\";\n if (routeLower.includes(\"bus\")) return \"Stargate V2 Economy\";\n if (routeLower.includes(\"oft\")) return \"OFT Bridge\";\n if (routeLower.includes(\"v2\")) return \"Stargate V2\";\n\n return route\n .split(/[/\\-_]/)\n .map((part) => part.charAt(0).toUpperCase() + part.slice(1))\n .join(\" \");\n}\n\nexport const Details = () => {\n const { t } = useBridgeTranslation();\n const { selectedAssetSymbol, assetMatrix, tokens } = useTokensStore();\n const { toChain, fromChain, chains } = useChainsStore();\n const { quote, status } = useBridgeQuoteStore();\n const { slippageBps, routePriority } = useSettingsStore();\n const gas = useGasEstimate();\n\n const dstToken = resolveTokenOnChainFromMatrix(\n assetMatrix,\n selectedAssetSymbol,\n toChain?.chainKey\n );\n const srcToken = resolveTokenOnChainFromMatrix(\n assetMatrix,\n selectedAssetSymbol,\n fromChain?.chainKey\n );\n\n const quoteDetails = getQuoteDetails(\n quote,\n srcToken,\n dstToken,\n tokens,\n chains,\n slippageBps\n );\n\n const symbol = (selectedAssetSymbol ?? dstToken?.symbol ?? \"—\").toUpperCase();\n const isLoading = status === \"loading\";\n\n const receiveText =\n quoteDetails.outputAmount != null\n ? Number(quoteDetails.outputAmount).toFixed(quote ? 6 : 2)\n : \"0.00\";\n\n const etaText =\n quoteDetails.etaSeconds != null\n ? `≈ ${Math.max(1, Math.round(quoteDetails.etaSeconds / 60))}m`\n : \"—\";\n\n // Fee from gas estimate (always in native token of source chain)\n const totalFeeDisplay = !quote\n ? \"—\"\n : gas.requiredNative > 0\n ? `${gas.requiredNative.toFixed(6)} ${gas.nativeSym}`\n : \"—\";\n\n const currentSlippageText = !quote ? \"—\" : formatPercentage(slippageBps);\n\n const routeText = quote?.route\n ? getRouteDisplayName(quote.route)\n : t(`settings.routePresets.${routePriority}`);\n\n return (\n <Accordion type=\"single\" collapsible className=\"w-full border-none\">\n <AccordionItem value=\"item-1\" className=\"bg-muted rounded-sm\">\n <AccordionTrigger className=\"w-full gap-1 items-center py-6 px-5 rounded-b-sm data-[state=open]:pb-3\">\n <div className=\"w-full flex items-center justify-between\">\n <p className=\"text-sm font-normal text-priority leading-4\">\n {t(\"bridge.youWillReceive\", { defaultValue: \"You will receive\" })}\n </p>\n <div className=\"bg-transparent hover:bg-transparent shadow-none h-4 p-0 px-0 py-0 flex items-center gap-2\">\n <TokenSymbol symbol={symbol} className=\"w-4 h-4\" alt=\"token\" />\n {isLoading ? (\n <Skeleton className=\"h-4 w-24 rounded-md\" />\n ) : (\n <span className=\"text-sm font-semibold leading-4 text-foreground\">\n {receiveText} {symbol}\n </span>\n )}\n </div>\n </div>\n </AccordionTrigger>\n\n <AccordionContent className=\"px-5 flex flex-col gap-3\">\n <DetailsRow\n label={t(\"transaction.route\")}\n value={\n <span className=\"flex items-center gap-2\">\n <StargateIcon className=\"w-4 h-4\" />\n <p className=\"\">{routeText}</p>\n </span>\n }\n />\n <DetailsRow\n label={t(\"transaction.estTime\")}\n value={etaText}\n isLoading={isLoading}\n />\n <DetailsRow\n label={t(\"transaction.slippage\")}\n value={currentSlippageText}\n />\n <DetailsRow\n label={t(\"transaction.totalFee\")}\n value={\n <strong className=\"inline-flex items-center gap-1\">\n <span>{totalFeeDisplay}</span>\n <TokenSymbol\n symbol={gas.nativeSym}\n className=\"w-4 h-4\"\n alt=\"token\"\n />\n </strong>\n }\n isLoading={isLoading}\n />\n </AccordionContent>\n </AccordionItem>\n </Accordion>\n );\n};\n\nconst DetailsRow = ({\n label,\n value,\n isLoading = false,\n}: {\n label: string;\n value?: string | React.ReactNode;\n isLoading?: boolean;\n}) => (\n <div className=\"flex justify-between items-center\">\n <div className=\"flex items-center gap-2\">\n <p className=\"text-sm text-priority font-normal\">{label}</p>\n <Tip text={label}>\n <InfoIcon />\n </Tip>\n </div>\n {isLoading ? (\n <Skeleton className=\"h-4 w-16 rounded-md\" />\n ) : (\n <div className=\"text-foreground text-sm\">{value ?? \"—\"}</div>\n )}\n </div>\n);\n","import { create } from \"zustand\";\nimport type { Quote } from \"../types\";\n\nexport type TxStatus =\n | \"idle\"\n | \"pending\" // awaiting signature\n | \"executing\" // wallet confirmation in progress\n | \"processing\" // tx hash received, confirming/bridging\n | \"completed\" // delivered to destination\n | \"failed\"\n | \"expired\";\n\nexport interface EvmMonitorReceipt {\n status?: string | number | boolean;\n blockNumber?: string;\n logs?: Array<{\n address?: string;\n topics?: string[];\n data?: string;\n }>;\n}\n\nexport interface TronMonitorReceipt {\n receipt?: {\n result?: string;\n };\n}\n\nexport interface TonMonitorReceipt {\n aborted?: boolean;\n transaction?: {\n aborted?: boolean;\n compute_phase?: {\n exit_code?: number;\n };\n };\n compute_phase?: {\n exit_code?: number;\n };\n success?: boolean;\n ok?: boolean;\n status?: string;\n}\n\nexport type MonitorReceipt =\n | EvmMonitorReceipt\n | TronMonitorReceipt\n | TonMonitorReceipt;\n\nexport interface TransactionMetadata {\n srcChainName: string;\n dstChainName: string;\n srcTokenSymbol: string;\n dstTokenSymbol: string;\n srcAmountHuman: number;\n dstAmountHuman: number;\n actualFeeValue?: number;\n actualFeeSymbol?: string;\n}\n\nexport interface CurrentTransaction {\n quote: Quote;\n status: TxStatus;\n srcTxHash?: string;\n dstTxHash?: string;\n messageId?: string;\n createdAt: number;\n updatedAt: number;\n errorCode?: string;\n errorParams?: Record<string, any>;\n monitorReceipt?: MonitorReceipt;\n metadata?: TransactionMetadata;\n}\n\ninterface TransactionState {\n current?: CurrentTransaction;\n successModalOpen: boolean;\n history: CurrentTransaction[];\n}\n\ninterface TransactionActions {\n setTransaction: (\n quote: Quote,\n status?: TxStatus,\n metadata?: TransactionMetadata\n ) => void;\n updateStatus: (status: TxStatus) => void;\n setSrcHash: (hash?: string) => void;\n setDstHash: (hash?: string) => void;\n setError: (errorCode: string, errorParams?: Record<string, any>) => void;\n updateActualFee: (feeValue: number, feeSymbol: string) => void;\n reset: () => void;\n}\n\ntype Store = TransactionState & TransactionActions;\n\nexport const useTransactionStore = create<Store>((set, get) => ({\n current: undefined,\n successModalOpen: false,\n history: [],\n\n setTransaction: (quote, status = \"executing\", metadata) => {\n const now = Date.now();\n const current: CurrentTransaction = {\n quote,\n status,\n createdAt: now,\n updatedAt: now,\n metadata,\n };\n set({ current });\n },\n\n updateStatus: (status) => {\n const cur = get().current;\n if (!cur) return;\n const next = { ...cur, status, updatedAt: Date.now() };\n set({ current: next });\n },\n\n setSrcHash: (hash) => {\n const cur = get().current;\n if (!cur) return;\n const next = {\n ...cur,\n srcTxHash: hash,\n updatedAt: Date.now(),\n };\n set({ current: next });\n },\n\n setDstHash: (hash) => {\n const cur = get().current;\n if (!cur) return;\n const next = { ...cur, dstTxHash: hash, updatedAt: Date.now() };\n set({ current: next });\n },\n\n setError: (errorCode, errorParams) => {\n const cur = get().current;\n if (!cur) return;\n const next = {\n ...cur,\n status: \"failed\" as TxStatus,\n errorCode,\n errorParams,\n updatedAt: Date.now(),\n };\n set({ current: next });\n },\n\n updateActualFee: (feeValue, feeSymbol) => {\n const cur = get().current;\n if (!cur) return;\n const next = {\n ...cur,\n metadata: {\n ...cur.metadata!,\n actualFeeValue: feeValue,\n actualFeeSymbol: feeSymbol,\n },\n updatedAt: Date.now(),\n };\n set({ current: next });\n },\n\n reset: () => {\n set({ current: undefined });\n },\n}));\n","export class ChainStrategyError extends Error {\n public readonly code: string;\n public readonly chainKey?: string;\n public readonly originalError?: Error;\n\n constructor(\n message: string,\n code: string,\n chainKey?: string,\n originalError?: Error\n ) {\n super(message);\n this.name = \"ChainStrategyError\";\n this.code = code;\n this.chainKey = chainKey;\n this.originalError = originalError;\n\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, this.constructor);\n }\n }\n\n static isChainStrategyError(error: unknown): error is ChainStrategyError {\n return error instanceof ChainStrategyError;\n }\n\n toJSON() {\n return {\n name: this.name,\n message: this.message,\n code: this.code,\n chainKey: this.chainKey,\n originalError: this.originalError?.message,\n };\n }\n}\n\nexport class WalletNotConnectedError extends ChainStrategyError {\n constructor(chainKey: string) {\n super(\n `${chainKey.toUpperCase()} wallet not connected`,\n \"WALLET_NOT_CONNECTED\",\n chainKey\n );\n this.name = \"WalletNotConnectedError\";\n }\n}\n\nexport class WalletConnectionFailedError extends ChainStrategyError {\n constructor(chainKey: string, originalError?: Error) {\n super(\n `Failed to connect ${chainKey.toUpperCase()} wallet`,\n \"WALLET_CONNECTION_FAILED\",\n chainKey,\n originalError\n );\n this.name = \"WalletConnectionFailedError\";\n }\n}\n\nexport class WalletNotFoundError extends ChainStrategyError {\n constructor(chainKey: string, walletName?: string) {\n const message = walletName\n ? `${walletName} wallet not found. Please install the extension.`\n : `No ${chainKey.toUpperCase()} wallet found. Please install a wallet extension.`;\n\n super(message, \"WALLET_NOT_FOUND\", chainKey);\n this.name = \"WalletNotFoundError\";\n }\n}\n\nexport class InvalidAddressError extends ChainStrategyError {\n public readonly address: string;\n\n constructor(chainKey: string, address: string) {\n super(\n `Invalid ${chainKey.toUpperCase()} address format: ${address}`,\n \"INVALID_ADDRESS\",\n chainKey\n );\n this.name = \"InvalidAddressError\";\n this.address = address;\n }\n}\n\nexport class InvalidStepsError extends ChainStrategyError {\n constructor(chainKey: string, reason: string) {\n super(\n `Invalid transaction steps for ${chainKey.toUpperCase()}: ${reason}`,\n \"INVALID_STEPS\",\n chainKey\n );\n this.name = \"InvalidStepsError\";\n }\n}\n\nexport class InvalidTransactionDataError extends ChainStrategyError {\n constructor(chainKey: string, reason: string) {\n super(\n `Invalid transaction data for ${chainKey.toUpperCase()}: ${reason}`,\n \"INVALID_TRANSACTION_DATA\",\n chainKey\n );\n this.name = \"InvalidTransactionDataError\";\n }\n}\n\nexport class TransactionRejectedError extends ChainStrategyError {\n constructor(chainKey: string, transactionType?: string) {\n const type = transactionType ? ` ${transactionType}` : \"\";\n super(\n `${chainKey.toUpperCase()}${type} transaction rejected by user`,\n \"TRANSACTION_REJECTED\",\n chainKey\n );\n this.name = \"TransactionRejectedError\";\n }\n}\n\nexport class TransactionFailedError extends ChainStrategyError {\n public readonly txHash?: string;\n\n constructor(\n chainKey: string,\n reason: string,\n txHash?: string,\n originalError?: Error\n ) {\n super(\n `${chainKey.toUpperCase()} transaction failed: ${reason}`,\n \"TRANSACTION_FAILED\",\n chainKey,\n originalError\n );\n this.name = \"TransactionFailedError\";\n this.txHash = txHash;\n }\n}\n\nexport class TransactionTimeoutError extends ChainStrategyError {\n public readonly txHash: string;\n\n constructor(chainKey: string, txHash: string) {\n super(\n `${chainKey.toUpperCase()} transaction confirmation timeout: ${txHash}`,\n \"TRANSACTION_TIMEOUT\",\n chainKey\n );\n this.name = \"TransactionTimeoutError\";\n this.txHash = txHash;\n }\n}\n\nexport class TransactionRevertedError extends ChainStrategyError {\n public readonly txHash: string;\n public readonly revertReason?: string;\n\n constructor(chainKey: string, txHash: string, revertReason?: string) {\n const reason = revertReason ? `: ${revertReason}` : \"\";\n super(\n `${chainKey.toUpperCase()} transaction reverted on-chain${reason}`,\n \"TRANSACTION_REVERTED\",\n chainKey\n );\n this.name = \"TransactionRevertedError\";\n this.txHash = txHash;\n this.revertReason = revertReason;\n }\n}\n\nexport class InsufficientGasError extends ChainStrategyError {\n public readonly required: number;\n public readonly available: number;\n\n constructor(chainKey: string, required: number, available: number) {\n super(\n `Insufficient ${chainKey.toUpperCase()} gas. Required: ${required}, Available: ${available}`,\n \"INSUFFICIENT_GAS\",\n chainKey\n );\n this.name = \"InsufficientGasError\";\n this.required = required;\n this.available = available;\n }\n}\n\nexport class ProviderNotAvailableError extends ChainStrategyError {\n constructor(chainKey: string) {\n super(\n `${chainKey.toUpperCase()} provider not available`,\n \"PROVIDER_NOT_AVAILABLE\",\n chainKey\n );\n this.name = \"ProviderNotAvailableError\";\n }\n}\n\nexport class NetworkRequestFailedError extends ChainStrategyError {\n public readonly endpoint?: string;\n\n constructor(\n chainKey: string,\n reason: string,\n endpoint?: string,\n originalError?: Error\n ) {\n super(\n `${chainKey.toUpperCase()} network request failed: ${reason}`,\n \"NETWORK_REQUEST_FAILED\",\n chainKey,\n originalError\n );\n this.name = \"NetworkRequestFailedError\";\n this.endpoint = endpoint;\n }\n}\n\nexport function isUserRejection(error: unknown): boolean {\n if (error instanceof TransactionRejectedError) {\n return true;\n }\n\n if (typeof error === \"string\") {\n const message = error.toLowerCase();\n return (\n message.includes(\"rejected\") ||\n message.includes(\"denied\") ||\n message.includes(\"declined\") ||\n message.includes(\"not sent\") ||\n message.includes(\"user denied\") ||\n message.includes(\"user rejected\") ||\n message.includes(\"user reject\") ||\n message.includes(\"user cancelled\") ||\n message.includes(\"user canceled\") ||\n message.includes(\"action_rejected\") ||\n message.includes(\"ethers-user-denied\") ||\n message.includes(\"denied transaction\") ||\n message.includes(\"reject request\") ||\n message.includes(\"declined by user\")\n );\n }\n\n if (error instanceof Error) {\n const message = error.message.toLowerCase();\n return (\n message.includes(\"rejected\") ||\n message.includes(\"denied\") ||\n message.includes(\"declined\") ||\n message.includes(\"not sent\") ||\n message.includes(\"user denied\") ||\n message.includes(\"user rejected\") ||\n message.includes(\"user reject\") ||\n message.includes(\"user cancelled\") ||\n message.includes(\"user canceled\") ||\n message.includes(\"action_rejected\") ||\n message.includes(\"ethers-user-denied\") ||\n message.includes(\"denied transaction\") ||\n message.includes(\"reject request\") ||\n message.includes(\"declined by user\")\n );\n }\n\n return false;\n}\n\nexport function toChainStrategyError(\n error: unknown,\n chainKey: string,\n context?: string\n): ChainStrategyError {\n if (error instanceof ChainStrategyError) {\n return error;\n }\n\n if (isUserRejection(error)) {\n return new TransactionRejectedError(chainKey, context);\n }\n if (error instanceof Error) {\n return new ChainStrategyError(\n error.message,\n \"UNKNOWN_ERROR\",\n chainKey,\n error\n );\n }\n\n return new ChainStrategyError(String(error), \"UNKNOWN_ERROR\", chainKey);\n}\n","import { useState, useMemo } from \"react\";\nimport { useBridgeQuoteStore } from \"../store/use-bridge-quote-store\";\nimport {\n useTransactionStore,\n type TransactionMetadata,\n} from \"../store/use-transaction-store\";\nimport type {\n TransactionResult,\n TransactionStrategyContext,\n} from \"../chains/chain-strategy-interface\";\nimport { useTokensStore } from \"../store/use-token-store\";\nimport { useChainsStore } from \"../store/use-chains-store\";\nimport { getQuoteAmounts } from \"../utils/quote-helpers\";\nimport { resolveTokenOnChainFromMatrix } from \"../lib/quote\";\nimport {\n ChainStrategyError,\n InvalidStepsError,\n WalletNotConnectedError,\n TransactionFailedError,\n isUserRejection,\n} from \"../chains/errors\";\nimport { useChainStrategies } from \"./use-chain-strategies\";\nimport { useAddresses } from \"./use-addresses\";\n\nexport function useBridgeTransaction() {\n const { quote } = useBridgeQuoteStore();\n const { chainRegistry } = useChainStrategies();\n const { srcAddress, dstAddress } = useAddresses();\n const { assetMatrix, selectedAssetSymbol } = useTokensStore();\n const { chains } = useChainsStore();\n const txStore = useTransactionStore();\n\n const [isProcessing, setIsProcessing] = useState(false);\n\n const srcToken = useMemo(\n () =>\n resolveTokenOnChainFromMatrix(\n assetMatrix,\n selectedAssetSymbol,\n quote?.srcChainKey\n ),\n [assetMatrix, selectedAssetSymbol, quote?.srcChainKey]\n );\n\n const dstToken = useMemo(\n () =>\n resolveTokenOnChainFromMatrix(\n assetMatrix,\n selectedAssetSymbol,\n quote?.dstChainKey\n ),\n [assetMatrix, selectedAssetSymbol, quote?.dstChainKey]\n );\n\n const executeTransaction = async (): Promise<TransactionResult> => {\n if (!quote) {\n throw new InvalidStepsError(\"bridge\", \"No quote available\");\n }\n\n if (!srcAddress || !dstAddress) {\n throw new WalletNotConnectedError(quote.srcChainKey || \"unknown\");\n }\n\n const srcChain = chains?.find((c) => c.chainKey === quote.srcChainKey);\n const dstChain = chains?.find((c) => c.chainKey === quote.dstChainKey);\n\n // Network fees (TON and TRON) are already added to quote when it's fetched\n const amounts = getQuoteAmounts(quote, srcToken, dstToken);\n\n const metadata: TransactionMetadata = {\n srcChainName: srcChain?.name || quote.srcChainKey,\n dstChainName: dstChain?.name || quote.dstChainKey,\n srcTokenSymbol: srcToken?.symbol || quote.srcToken,\n dstTokenSymbol: dstToken?.symbol || quote.dstToken,\n srcAmountHuman: amounts.inputHuman,\n dstAmountHuman: amounts.outputHuman,\n // Actual fee will be updated when transaction completes\n };\n\n txStore.setTransaction(quote, \"executing\", metadata);\n\n setIsProcessing(true);\n\n try {\n const steps = quote.steps || [];\n if (steps.length === 0) {\n throw new InvalidStepsError(\n quote.srcChainKey,\n \"No transaction steps found in quote\"\n );\n }\n\n const chainKey = steps[0].chainKey;\n const strategy = chainRegistry.getStrategy(chainKey);\n if (!strategy) {\n throw new InvalidStepsError(\n chainKey,\n `No strategy available for chain: ${chainKey}`\n );\n }\n\n if (!strategy.isConnected()) {\n throw new WalletNotConnectedError(chainKey);\n }\n\n strategy.validateSteps(steps);\n\n const context: TransactionStrategyContext = {\n srcAddress,\n dstAddress,\n srcChainKey: quote.srcChainKey,\n dstChainKey: quote.dstChainKey,\n };\n\n const txResult = await strategy.executeSteps(steps, context, (hash) => {\n txStore.setSrcHash(hash);\n txStore.updateStatus(\"processing\");\n });\n\n if (txResult?.hash) {\n strategy\n .waitForCompletion(txResult.hash, context)\n .then((result) => {\n if (result.completed) {\n if (result.dstTxHash) {\n txStore.setDstHash(result.dstTxHash);\n }\n\n // Update actual fee if available\n if (result.actualFeeValue) {\n let feeSymbol = result.actualFeeSymbol;\n\n // For EVM, determine the symbol from chain config if not provided\n if (!feeSymbol) {\n const srcChain = chains?.find(\n (c) => c.chainKey === quote.srcChainKey\n );\n feeSymbol = srcChain?.nativeCurrency?.symbol || \"\";\n }\n\n if (feeSymbol) {\n const feeValue = parseFloat(result.actualFeeValue);\n if (!isNaN(feeValue)) {\n txStore.updateActualFee(feeValue, feeSymbol);\n }\n }\n }\n\n txStore.updateStatus(\"completed\");\n console.log(\"Transaction completed successfully\");\n } else {\n txStore.setError(\"TRANSACTION_FAILED_TO_COMPLETE\");\n console.error(\"Transaction completion failed:\", result.error);\n }\n })\n .catch((err) => {\n // Check for user rejection first\n if (isUserRejection(err)) {\n txStore.setError(\"TRANSACTION_REJECTED\");\n } else if (ChainStrategyError.isChainStrategyError(err)) {\n txStore.setError(err.code, { chainKey: err.chainKey });\n } else {\n txStore.setError(\"COMPLETION_TRACKING_FAILED\");\n }\n console.error(\"Error tracking completion:\", err);\n });\n } else {\n throw new TransactionFailedError(\n chainKey,\n \"Transaction hash not received from wallet\"\n );\n }\n\n return txResult;\n } catch (err) {\n if (isUserRejection(err)) {\n txStore.setError(\"TRANSACTION_REJECTED\");\n throw new TransactionFailedError(\n quote.srcChainKey,\n \"Transaction rejected by user\"\n );\n }\n\n if (ChainStrategyError.isChainStrategyError(err)) {\n txStore.setError(err.code, { chainKey: err.chainKey });\n console.error(\"Chain strategy error:\", err.toJSON());\n throw err;\n }\n\n // Handle generic errors\n console.log(err);\n txStore.setError(\"UNKNOWN_ERROR\");\n throw err;\n } finally {\n setIsProcessing(false);\n }\n };\n\n return {\n executeTransaction,\n isProcessing,\n hasQuote: !!quote,\n };\n}\n","import { useMemo } from \"react\";\nimport { useChainsStore } from \"../store/use-chains-store\";\nimport { useTokensStore } from \"../store/use-token-store\";\nimport { useBalances } from \"./api/use-balances\";\nimport { useAddresses } from \"./use-addresses\";\nimport type { GasEstimate } from \"./use-gas-estimate\";\n\nexport interface BalanceCheck {\n availableBalance: number;\n hasInsufficientBalance: boolean;\n isBalanceLoading: boolean;\n reservedForGas: number;\n}\n\nexport function useBalanceCheck(\n amountNum: number,\n gas: GasEstimate\n): BalanceCheck {\n const { fromChain } = useChainsStore();\n const { selectedAssetSymbol } = useTokensStore();\n const { srcAddress } = useAddresses();\n const { getBalance } = useBalances(fromChain?.chainKey, srcAddress);\n\n const validationResult = useMemo((): BalanceCheck => {\n if (!fromChain || !gas.balancesKnown) {\n return {\n availableBalance: 0,\n hasInsufficientBalance: false,\n isBalanceLoading: true,\n reservedForGas: 0,\n };\n }\n\n const rawBalance = getBalance(selectedAssetSymbol || \"\");\n const gasReserve = gas.requiredNative ?? 0;\n\n if (gas.isNativeSelected) {\n const availableBalance = Math.max(0, rawBalance - gasReserve);\n\n return {\n availableBalance,\n hasInsufficientBalance: amountNum > availableBalance,\n isBalanceLoading: false,\n reservedForGas: gasReserve,\n };\n }\n\n const hasEnoughGasForTx = gas.nativeBalance >= gasReserve;\n\n return {\n availableBalance: rawBalance,\n hasInsufficientBalance: amountNum > rawBalance || !hasEnoughGasForTx,\n isBalanceLoading: false,\n reservedForGas: gasReserve,\n };\n }, [\n fromChain,\n gas.balancesKnown,\n gas.isNativeSelected,\n gas.requiredNative,\n gas.nativeBalance,\n getBalance,\n selectedAssetSymbol,\n amountNum,\n ]);\n\n return validationResult;\n}\n","import { useMemo } from \"react\";\nimport { useTokensStore } from \"../../store/use-token-store\";\nimport { useChainsStore } from \"../../store/use-chains-store\";\nimport { useBridgeQuoteStore } from \"../../store/use-bridge-quote-store\";\nimport { fromLD } from \"../../lib/amount\";\nimport { formatTokenAmount } from \"../../utils/formatters\";\n\nexport interface AmountLimitsResult {\n maximumAmount: number;\n hasAmountTooLarge: boolean;\n maximumAmountFormatted: string;\n}\n\nexport function useAmountLimits(amountNum: number): AmountLimitsResult {\n const { selectedAssetSymbol, tokens } = useTokensStore();\n const { fromChain } = useChainsStore();\n const { quote } = useBridgeQuoteStore();\n\n const limitsResult = useMemo((): AmountLimitsResult => {\n const tokenSymbol = selectedAssetSymbol;\n\n if (quote?.srcAmountMax && fromChain?.chainKey && selectedAssetSymbol) {\n const sourceToken = tokens?.find(\n (t) =>\n t.chainKey === fromChain.chainKey &&\n (t.symbol ?? \"\").toUpperCase() ===\n (selectedAssetSymbol ?? \"\").toUpperCase()\n );\n\n if (sourceToken) {\n // Convert from wei to human readable using token decimals\n const maximumAmount = fromLD(quote.srcAmountMax, sourceToken.decimals);\n const hasAmountTooLarge = amountNum > maximumAmount;\n const maximumAmountFormatted = formatTokenAmount(\n maximumAmount,\n tokenSymbol\n );\n\n return {\n maximumAmount,\n hasAmountTooLarge,\n maximumAmountFormatted,\n };\n }\n }\n\n // No limits when API data is unavailable - let API validate on submit\n return {\n maximumAmount: Infinity,\n hasAmountTooLarge: false,\n maximumAmountFormatted: \"\",\n };\n }, [\n amountNum,\n fromChain?.chainKey,\n selectedAssetSymbol,\n quote?.srcAmountMax,\n tokens,\n ]);\n\n return limitsResult;\n}\n","import { useMemo } from \"react\";\nimport { useTokensStore } from \"../../store/use-token-store\";\nimport { useChainsStore } from \"../../store/use-chains-store\";\nimport { useBridgeQuoteStore } from \"../../store/use-bridge-quote-store\";\n\nexport interface SilentValidationsResult {\n hasTooManyDecimals: boolean;\n hasUnsupportedTokenPair: boolean;\n hasInsufficientLiquidity: boolean;\n isValidForTransfer: boolean;\n}\n\nexport function useSilentValidations(\n amountString: string\n): SilentValidationsResult {\n const { selectedAssetSymbol, assetMatrix, tokens } = useTokensStore();\n const { fromChain, toChain } = useChainsStore();\n const { quote, status, error } = useBridgeQuoteStore();\n\n const validationResult = useMemo((): SilentValidationsResult => {\n // 1. Decimal Precision Validation\n const hasTooManyDecimals = (() => {\n if (!amountString || !fromChain?.chainKey || !selectedAssetSymbol)\n return false;\n\n // Find the token on the source chain to get decimals\n const sourceToken = tokens?.find(\n (t) =>\n t.chainKey === fromChain.chainKey &&\n (t.symbol ?? \"\").toUpperCase() ===\n (selectedAssetSymbol ?? \"\").toUpperCase()\n );\n\n if (!sourceToken) return false;\n\n // Check if input has more decimal places than token supports\n const decimalPart = amountString.split(\".\")[1];\n if (!decimalPart) return false;\n\n return decimalPart.length > (sourceToken.decimals ?? 18);\n })();\n\n // 2. Network-Specific Errors (Unsupported Token Pairs)\n const hasUnsupportedTokenPair = (() => {\n if (!selectedAssetSymbol || !fromChain?.chainKey || !toChain?.chainKey)\n return false;\n if (!assetMatrix) return false;\n\n const normalizedSymbol = selectedAssetSymbol.toUpperCase();\n const tokenMatrix = assetMatrix[normalizedSymbol];\n\n if (!tokenMatrix) return true; // Token doesn't exist in matrix\n\n // Check if token exists on both source and destination chains\n const existsOnSource = !!tokenMatrix[fromChain.chainKey];\n const existsOnDestination = !!tokenMatrix[toChain.chainKey];\n\n return !existsOnSource || !existsOnDestination;\n })();\n\n // 3. Liquidity Validation\n const hasInsufficientLiquidity = (() => {\n // If we have an error that mentions liquidity or if quote failed\n if (error) {\n const errorLower = error.toLowerCase();\n return (\n errorLower.includes(\"liquidity\") ||\n errorLower.includes(\"insufficient\") ||\n errorLower.includes(\"slippage\") ||\n errorLower.includes(\"exceeds\")\n );\n }\n\n // If we're not loading and have no route but amount > 0, could be liquidity issue\n if (\n status !== \"loading\" &&\n !quote &&\n parseFloat(amountString || \"0\") > 0\n ) {\n return true;\n }\n\n return false;\n })();\n\n const isValidForTransfer =\n !hasTooManyDecimals &&\n !hasUnsupportedTokenPair &&\n !hasInsufficientLiquidity;\n\n return {\n hasTooManyDecimals,\n hasUnsupportedTokenPair,\n hasInsufficientLiquidity,\n isValidForTransfer,\n };\n }, [\n amountString,\n selectedAssetSymbol,\n fromChain,\n toChain,\n assetMatrix,\n tokens,\n quote,\n status,\n error,\n ]);\n\n return validationResult;\n}\n","import React from \"react\";\nimport { Button } from \"@/components/ui/button\";\nimport { useMemo } from \"react\";\nimport { useBridgeTranslation } from \"../../i18n/BridgeI18nProvider\";\nimport { useChainStrategies } from \"../../hooks/use-chain-strategies\";\nimport { useAddresses } from \"../../hooks/use-addresses\";\nimport { useChainsStore } from \"../../store/use-chains-store\";\nimport { useBridgeQuoteStore } from \"../../store/use-bridge-quote-store\";\nimport { useWalletSelectModal } from \"../../hooks/ui/use-wallet-select-modal\";\nimport { useBridgeTransaction } from \"../../hooks/use-transaction\";\nimport { useGasEstimate } from \"../../hooks/use-gas-estimate\";\nimport { useBalanceCheck } from \"../../hooks/use-balance-check\";\nimport { useAmountLimits } from \"../../hooks/bridge/use-amount-limits\";\nimport { useSilentValidations } from \"../../hooks/bridge/use-silent-validations\";\n\nexport const SubmitButton: React.FC = () => {\n const { t } = useBridgeTranslation();\n\n const { chainRegistry } = useChainStrategies();\n const { srcAddress, dstAddress } = useAddresses();\n const { quote, status, inputAmount, noRoute } = useBridgeQuoteStore();\n const { fromChain, toChain } = useChainsStore();\n const { onOpen } = useWalletSelectModal();\n const { executeTransaction, isProcessing: isTxProcessing } =\n useBridgeTransaction();\n\n const amountNum = Number(inputAmount || 0);\n const gas = useGasEstimate(amountNum);\n\n const { hasInsufficientBalance, isBalanceLoading } = useBalanceCheck(\n amountNum,\n gas\n );\n\n const { hasAmountTooLarge, maximumAmountFormatted } =\n useAmountLimits(amountNum);\n const { isValidForTransfer } = useSilentValidations(inputAmount || \"\");\n\n const srcChainKey = quote?.srcChainKey ?? fromChain?.chainKey;\n const dstChainKey = quote?.dstChainKey ?? toChain?.chainKey;\n\n const srcConnectedOk =\n srcChainKey && chainRegistry.isWalletConnected(srcChainKey);\n const dstConnectedOk =\n dstChainKey && chainRegistry.isWalletConnected(dstChainKey);\n\n const srcAddressValid =\n srcChainKey && chainRegistry.isAddressValid(srcChainKey, srcAddress);\n const dstAddressValid =\n dstChainKey && chainRegistry.isAddressValid(dstChainKey, dstAddress);\n\n const missingSrc = !srcConnectedOk || !srcAddressValid;\n const missingDst = !dstConnectedOk || !dstAddressValid;\n\n const isBusy = isTxProcessing;\n\n const canTransfer =\n !missingSrc &&\n !missingDst &&\n amountNum > 0 &&\n !!srcChainKey &&\n !!dstChainKey;\n\n const label = useMemo(() => {\n switch (true) {\n case status === \"loading\":\n return t(\"transaction.quoting\");\n case isTxProcessing:\n return t(\"transaction.processing\");\n case isBusy:\n return t(\"common.connecting\");\n case missingSrc:\n return srcChainKey\n ? chainRegistry.getConnectLabel(srcChainKey, t)\n : t(\"wallets.connectWallet\");\n case missingDst:\n return dstChainKey\n ? chainRegistry.getConnectLabel(dstChainKey, t)\n : t(\"wallets.connectWallet\");\n case amountNum <= 0:\n return t(\"transaction.enterAmount\");\n case isBalanceLoading:\n return t(\"transaction.checkingBalance\");\n case !gas.hasEnoughGas:\n return t(\"transaction.notEnoughGas\");\n case hasInsufficientBalance:\n return t(\"transaction.insufficientBalance\");\n case hasAmountTooLarge:\n return t(\"transaction.amountTooLarge\", {\n max: maximumAmountFormatted,\n });\n case noRoute:\n return t(\"transaction.noRouteFound\");\n case canTransfer:\n return t(\"transaction.transfer\");\n default:\n return t(\"transaction.getQuote\");\n }\n }, [\n t,\n status,\n isTxProcessing,\n isBusy,\n missingSrc,\n missingDst,\n srcChainKey,\n dstChainKey,\n noRoute,\n gas.hasEnoughGas,\n amountNum,\n canTransfer,\n isBalanceLoading,\n hasInsufficientBalance,\n hasAmountTooLarge,\n maximumAmountFormatted,\n chainRegistry,\n ]);\n\n const handleClick = async () => {\n if (isBusy) return;\n\n if (missingSrc && srcChainKey) {\n onOpen(\"src\");\n return;\n }\n if (missingDst && dstChainKey) {\n onOpen(\"dst\");\n return;\n }\n\n if (canTransfer) {\n try {\n await executeTransaction();\n } catch (error) {\n console.warn(error);\n }\n return;\n }\n };\n\n const disabled =\n isBusy ||\n amountNum <= 0 ||\n status === \"loading\" ||\n isBalanceLoading ||\n hasInsufficientBalance ||\n hasAmountTooLarge ||\n !gas.hasEnoughGas ||\n noRoute ||\n !isValidForTransfer;\n\n return (\n <div className=\"pt-4\">\n <Button\n onClick={handleClick}\n disabled={disabled}\n size=\"lg\"\n className=\"w-full\"\n >\n {label}\n </Button>\n </div>\n );\n};\n","import React, { useState } from \"react\";\nimport { Button, buttonVariants } from \"@/components/ui/button\";\nimport { ExitIcon } from \"../../assets/icons\";\nimport { formatAddress } from \"../../utils/formatters\";\nimport { useChainStrategies } from \"../../hooks/use-chain-strategies\";\nimport { useConnect, type Connector } from \"wagmi\";\nimport type { WalletType } from \"../../hooks/ui/use-wallet-select-modal\";\nimport { useTranslation } from \"react-i18next\";\nimport { toast } from \"sonner\";\nimport { cn } from \"@/lib/utils\";\n\ninterface BaseWalletButtonProps {\n icon: React.ComponentType<{ className?: string }>;\n name: string;\n onClose?: () => void;\n}\n\ninterface ConnectedWalletButtonProps extends BaseWalletButtonProps {\n variant: \"connected\";\n address: string;\n onDisconnect: () => void;\n}\n\ninterface AvailableWalletButtonProps extends BaseWalletButtonProps {\n variant: \"available\";\n walletId: WalletType;\n connector?: Connector;\n}\n\ntype WalletModalButtonProps =\n | ConnectedWalletButtonProps\n | AvailableWalletButtonProps;\n\nexport const WalletModalButton: React.FC<WalletModalButtonProps> = (props) => {\n const { t } = useTranslation();\n const { icon: IconComponent, name, onClose } = props;\n const { chainRegistry } = useChainStrategies();\n const { connect, isPending } = useConnect();\n\n const [isConnecting, setIsConnecting] = useState(false);\n\n if (props.variant === \"connected\") {\n const { address, onDisconnect } = props;\n\n return (\n <div className=\"-mx-3\">\n <div\n className={cn(\n buttonVariants({ variant: \"ghost\", size: \"default\" }),\n \"rounded-xs w-full\"\n )}\n >\n <IconComponent className=\"min-w-8 min-h-8\" />\n\n <div className=\"flex flex-col items-start min-w-0\">\n <p className=\"font-semibold text-foreground text-sm leading-4 truncate\">\n {formatAddress(address)}\n </p>\n <div className=\"text-xs leading-3 font-medium text-muted-foreground\">\n {name}\n </div>\n </div>\n\n <div\n onClick={() => {\n onDisconnect();\n onClose?.();\n }}\n className=\"text-sm ml-auto font-medium text-muted-foreground cursor-pointer hover:text-foreground transition-colors\"\n >\n <ExitIcon className=\"w-6 h-6\" />\n </div>\n </div>\n </div>\n );\n }\n\n const { walletId, connector } = props;\n\n const handleConnect = async () => {\n setIsConnecting(true);\n try {\n if (connector) {\n connect({ connector });\n } else {\n const strategy = chainRegistry.getStrategyByType(\n walletId === \"ton\" ? \"ton\" : \"tron\"\n );\n await strategy?.connect();\n }\n onClose?.();\n } catch (error) {\n console.error(\"Failed to connect wallet:\", error);\n\n const errorMessage =\n error instanceof Error\n ? error.message\n : \"Failed to connect wallet. Please try again.\";\n\n toast.error(errorMessage);\n\n // Don't close modal on error, allow user to retry\n } finally {\n setIsConnecting(false);\n }\n };\n\n const isDisabled = connector ? isPending : isConnecting;\n\n return (\n <Button\n type=\"button\"\n variant=\"ghost\"\n onClick={handleConnect}\n disabled={isDisabled}\n className={`w-full rounded-xs flex justify-start gap-3`}\n >\n <IconComponent className=\"min-w-8 min-h-8\" />\n <div className=\"flex flex-col items-start min-w-0\">\n <p className=\"font-semibold text-foreground text-sm leading-4 truncate\">\n {name}\n </p>\n <div className=\"text-xs leading-3 font-medium text-muted-foreground\">\n {t(\"wallets.connect\")}\n </div>\n </div>\n </Button>\n );\n};\n","import React from \"react\";\nimport { useBridgeTranslation } from \"../../i18n/BridgeI18nProvider\";\nimport {\n Dialog,\n DialogContent,\n DialogHeader,\n DialogTitle,\n DialogDescription,\n} from \"@/components/ui/dialog\";\nimport {\n MetaMaskIcon,\n TonKeeperIcon,\n TronLinkIcon,\n WalletConnectIcon,\n} from \"../../assets/icons\";\nimport { useChainStrategies } from \"../../hooks/use-chain-strategies\";\nimport {\n useWalletSelectModal,\n type WalletType,\n} from \"../../hooks/ui/use-wallet-select-modal\";\nimport { useConnect } from \"wagmi\";\nimport { WalletModalButton } from \"../ui/wallet-button\";\nimport type { NetworkType } from \"../../chains/chain-strategy-interface\";\n\ninterface WalletOption {\n id: WalletType;\n name: string;\n icon: React.ComponentType<{ className?: string }>;\n enabled: boolean;\n}\n\ninterface WalletCategory {\n title: string;\n wallets: WalletOption[];\n}\n\nconst CHAIN_TYPES = {\n TON: \"ton\" as NetworkType,\n EVM: \"evm\" as NetworkType,\n TRON: \"tron\" as NetworkType,\n} as const;\n\ninterface ConnectedWallet {\n id: WalletType;\n name: string;\n icon: React.ComponentType<{ className?: string }>;\n address: string;\n onDisconnect: () => void;\n}\n\nexport const WalletSelectModal: React.FC = () => {\n const { t } = useBridgeTranslation();\n const { isOpen, onClose } = useWalletSelectModal();\n const { connectors } = useConnect();\n\n const { chainRegistry } = useChainStrategies();\n\n const tonWallet = chainRegistry.getStrategyByType(CHAIN_TYPES.TON);\n const metaMaskWallet = chainRegistry.getStrategyByType(CHAIN_TYPES.EVM);\n const tronWallet = chainRegistry.getStrategyByType(CHAIN_TYPES.TRON);\n\n const walletConfigs = [\n {\n strategy: tonWallet,\n walletId: \"ton\" as WalletType,\n name: t(\"wallets.tonconnect\"),\n icon: TonKeeperIcon,\n },\n {\n strategy: metaMaskWallet,\n walletId: \"metamask\" as WalletType,\n name: t(\"wallets.metaMask\"),\n icon: MetaMaskIcon,\n },\n {\n strategy: tronWallet,\n walletId: \"tronlink\" as WalletType,\n name: t(\"wallets.tronLink\"),\n icon: TronLinkIcon,\n },\n ];\n\n const connectedWallets: ConnectedWallet[] = walletConfigs.reduce<\n ConnectedWallet[]\n >((acc, { strategy, walletId, name, icon }) => {\n const account = strategy?.getAccount();\n\n if (strategy?.isConnected() && account) {\n acc.push({\n id: walletId,\n name,\n icon,\n address: account,\n onDisconnect: () => strategy.disconnect(),\n });\n }\n return acc;\n }, []);\n\n const isWalletConnected = (walletId: WalletType) => {\n const isEvmConnector = connectors.some((c) => c.id === walletId);\n if (isEvmConnector && metaMaskWallet?.isConnected()) {\n return true;\n }\n return connectedWallets.some((w) => w.id === walletId);\n };\n\n const tonWallets: WalletOption[] = [\n {\n id: \"ton\" as WalletType,\n name: t(\"wallets.tonconnect\"),\n icon: TonKeeperIcon,\n enabled: true,\n },\n ];\n\n const evmWallets: WalletOption[] = connectors\n .filter(\n (connector) =>\n connector.id === \"walletConnect\" || connector.id === \"metaMaskSDK\"\n )\n .map((connector) => ({\n id: connector.id as WalletType,\n name: connector.name,\n icon: connector.id === \"metaMaskSDK\" ? MetaMaskIcon : WalletConnectIcon,\n enabled: true,\n }));\n\n const tronWallets: WalletOption[] = [\n {\n id: \"tronlink\" as WalletType,\n name: t(\"wallets.tronLink\"),\n icon: TronLinkIcon,\n enabled: true,\n },\n ];\n\n const notConnected = (w: WalletOption): boolean => !isWalletConnected(w.id);\n\n const categories: WalletCategory[] = [\n {\n title: t(\"wallets.tonWallets\"),\n wallets: tonWallets.filter(notConnected),\n },\n {\n title: t(\"wallets.evmWallets\"),\n wallets: evmWallets.filter(notConnected),\n },\n {\n title: t(\"wallets.tronWallets\"),\n wallets: tronWallets.filter(notConnected),\n },\n ].filter((category) => category.wallets.length > 0);\n\n return (\n <Dialog open={isOpen} onOpenChange={(open) => !open && onClose()}>\n <DialogContent className=\"p-10 pt-8 max-w-md\">\n <DialogHeader className=\"text-left\">\n <DialogTitle className=\"text-2xl leading-8\">\n {t(\"wallets.chooseWallet\")}\n </DialogTitle>\n <DialogDescription>{t(\"wallets.oneWalletPerEnv\")}</DialogDescription>\n </DialogHeader>\n\n <div className=\"flex flex-col gap-4\">\n {connectedWallets.length > 0 && (\n <div>\n <div className=\"py-1 text-muted-foreground uppercase\">\n {t(\"wallets.connected\")}\n </div>\n <div>\n {connectedWallets.map((wallet) => (\n <WalletModalButton\n key={wallet.id}\n variant=\"connected\"\n icon={wallet.icon}\n name={wallet.name}\n address={wallet.address}\n onDisconnect={wallet.onDisconnect}\n onClose={onClose}\n />\n ))}\n </div>\n </div>\n )}\n\n {categories.map((category) => (\n <div key={category.title}>\n <div className=\"py-1 text-muted-foreground uppercase\">\n {category.title}\n </div>\n <div className=\"-mx-3\">\n {category.wallets.map((wallet) => {\n const isEvmConnector =\n category.title === t(\"wallets.evmWallets\");\n const connector = isEvmConnector\n ? connectors.find((c) => c.id === wallet.id)\n : undefined;\n\n return (\n <WalletModalButton\n key={wallet.id}\n variant=\"available\"\n icon={wallet.icon}\n name={wallet.name}\n walletId={wallet.id}\n connector={connector}\n onClose={onClose}\n />\n );\n })}\n </div>\n </div>\n ))}\n </div>\n </DialogContent>\n </Dialog>\n );\n};\n","import {\n DialogContent,\n DialogHeader,\n DialogTitle,\n} from \"@/components/ui/dialog\";\nimport { Loader2 } from \"lucide-react\";\nimport { useBridgeTranslation } from \"../../i18n/BridgeI18nProvider\";\n\ninterface ProgressStepProps {\n icon?: React.ReactNode;\n}\n\nexport const ProgressStep = ({\n icon = <Loader2 className=\"w-16 h-16 animate-spin\" />,\n}: ProgressStepProps) => {\n const { t } = useBridgeTranslation();\n return (\n <DialogContent showCloseButton={false}>\n <div className=\"flex relative flex-col gap-4 py-10 px-8 flex-1 items-center justify-start text-center noise bg-background\">\n {icon}\n\n <DialogHeader>\n <DialogTitle>{t(\"transaction.inProgress\")}</DialogTitle>\n </DialogHeader>\n\n <div className=\"relative mt-5 z-10\">\n <div className=\"absolute dot-vertical h-full left-5 top-0 bottom-0 z-0\" />\n </div>\n </div>\n </DialogContent>\n );\n};\n","import { Button } from \"@/components/ui/button\";\nimport { useTransactionStore } from \"../../store/use-transaction-store\";\nimport {\n DialogContent,\n DialogFooter,\n DialogHeader,\n DialogTitle,\n} from \"@/components/ui/dialog\";\nimport { useBridgeTranslation } from \"../../i18n/BridgeI18nProvider\";\nimport { AlertCircleIcon } from \"lucide-react\";\nimport { DialogDescription } from \"@radix-ui/react-dialog\";\n\ninterface FailedStepProps {\n icon?: React.ReactNode;\n}\n\nexport const FailedStep = ({\n icon = <AlertCircleIcon className=\"w-16 h-16\" />,\n}: FailedStepProps) => {\n const { current, reset } = useTransactionStore();\n const { t } = useBridgeTranslation();\n\n return (\n <DialogContent showCloseButton={false}>\n <div className=\"flex flex-col relative gap-4 py-10 px-8 flex-1 items-center justify-start text-center noise\">\n {icon}\n\n <DialogHeader>\n <DialogTitle>{t(\"transaction.failed\")}</DialogTitle>\n {current?.errorCode && (\n <DialogDescription>\n {\n t(\n `errors.${current.errorCode}`,\n current.errorParams || {}\n ) as string\n }\n </DialogDescription>\n )}\n </DialogHeader>\n </div>\n <DialogFooter>\n <Button variant=\"outline\" className=\"w-full min-w-40\" onClick={reset}>\n {t(\"common.close\")}\n </Button>\n </DialogFooter>\n </DialogContent>\n );\n};\n","/**\n * Explorer URL mappings for different blockchain networks\n */\n\ninterface ExplorerConfig {\n baseUrl: string;\n txPath: string;\n}\n\nconst EXPLORER_CONFIGS: Record<string, ExplorerConfig> = {\n // TON\n ton: {\n baseUrl: \"https://tonscan.org\",\n txPath: \"/tx/\",\n },\n\n // TRON\n tron: {\n baseUrl: \"https://tronscan.org\",\n txPath: \"/#/transaction/\",\n },\n\n // Ethereum & EVM chains\n ethereum: {\n baseUrl: \"https://etherscan.io\",\n txPath: \"/tx/\",\n },\n eth: {\n baseUrl: \"https://etherscan.io\",\n txPath: \"/tx/\",\n },\n\n // BSC (Binance Smart Chain)\n bsc: {\n baseUrl: \"https://bscscan.com\",\n txPath: \"/tx/\",\n },\n \"binance-smart-chain\": {\n baseUrl: \"https://bscscan.com\",\n txPath: \"/tx/\",\n },\n\n // Polygon\n polygon: {\n baseUrl: \"https://polygonscan.com\",\n txPath: \"/tx/\",\n },\n matic: {\n baseUrl: \"https://polygonscan.com\",\n txPath: \"/tx/\",\n },\n\n // Avalanche\n avalanche: {\n baseUrl: \"https://snowtrace.io\",\n txPath: \"/tx/\",\n },\n avax: {\n baseUrl: \"https://snowtrace.io\",\n txPath: \"/tx/\",\n },\n\n // Arbitrum\n arbitrum: {\n baseUrl: \"https://arbiscan.io\",\n txPath: \"/tx/\",\n },\n\n // Optimism\n optimism: {\n baseUrl: \"https://optimistic.etherscan.io\",\n txPath: \"/tx/\",\n },\n\n // Base\n base: {\n baseUrl: \"https://basescan.org\",\n txPath: \"/tx/\",\n },\n\n // Fantom\n fantom: {\n baseUrl: \"https://ftmscan.com\",\n txPath: \"/tx/\",\n },\n};\n\n/**\n * Gets the explorer URL for a transaction hash on a specific blockchain\n * @param chainKey - The blockchain key (e.g., \"ton\", \"ethereum\", \"bsc\")\n * @param txHash - The transaction hash\n * @returns The full explorer URL for the transaction\n */\nexport function getExplorerTxUrl(\n chainKey: string | undefined,\n txHash: string | undefined\n): string | null {\n if (!chainKey || !txHash) {\n return null;\n }\n\n const normalizedChainKey = chainKey.toLowerCase();\n const config = EXPLORER_CONFIGS[normalizedChainKey];\n\n if (!config) {\n console.warn(\n `No explorer config found for chain: ${chainKey}. Please add it to EXPLORER_CONFIGS.`\n );\n return null;\n }\n\n return `${config.baseUrl}${config.txPath}${txHash}`;\n}\n\n/**\n * Opens a transaction in the blockchain explorer in a new tab\n * @param chainKey - The blockchain key (e.g., \"ton\", \"ethereum\", \"bsc\")\n * @param txHash - The transaction hash\n */\nexport function openTransactionInExplorer(\n chainKey: string | undefined,\n txHash: string | undefined\n): void {\n const url = getExplorerTxUrl(chainKey, txHash);\n\n if (url && typeof window !== \"undefined\") {\n window.open(url, \"_blank\", \"noopener,noreferrer\");\n }\n}\n","import { Button } from \"@/components/ui/button\";\nimport {\n DialogContent,\n DialogHeader,\n DialogTitle,\n} from \"@/components/ui/dialog\";\nimport { CheckCircle2 } from \"lucide-react\";\nimport { useTransactionStore } from \"../../store/use-transaction-store\";\nimport { useBridgeTranslation } from \"../../i18n/BridgeI18nProvider\";\nimport { formatBalance, formatHash } from \"../../utils/formatters\";\nimport { openTransactionInExplorer } from \"../../utils/explorer\";\nimport { TokenSymbol } from \"../ui/token-symbol\";\nimport { NetworkSymbol } from \"../ui/network-symbol\";\n\ninterface SuccessStepProps {\n icon?: React.ReactNode;\n}\n\nexport const SuccessStep = ({\n icon = <CheckCircle2 className=\"w-16 h-16\" />,\n}: SuccessStepProps) => {\n const { current, reset } = useTransactionStore();\n const { t } = useBridgeTranslation();\n\n const metadata = current?.metadata;\n const srcTxHash = current?.srcTxHash;\n const srcChainKey = current?.quote?.srcChainKey;\n\n const handleOpenExplorer = () => {\n if (srcTxHash && srcChainKey) {\n openTransactionInExplorer(srcChainKey, srcTxHash);\n }\n };\n\n return (\n <DialogContent showCloseButton={false}>\n <div className=\"flex flex-col gap-4 pt-10 px-8 flex-1 justify-start items-center text-center noise bg-background\">\n {icon}\n\n <DialogHeader>\n <DialogTitle>{t(\"transaction.success\")}</DialogTitle>\n </DialogHeader>\n\n <div className=\"w-full space-y-2 mt-4 relative z-10 pb-14\">\n {metadata?.srcAmountHuman && (\n <div className=\"flex justify-between items-center\">\n <span className=\"text-muted-foreground\">\n {t(\"transaction.bridged\")}\n </span>\n <span className=\"inline-flex items-center gap-1 font-medium\">\n {formatBalance(metadata.srcAmountHuman, 2)}{\" \"}\n {metadata?.srcTokenSymbol}\n <TokenSymbol symbol={metadata?.srcTokenSymbol} />\n </span>\n </div>\n )}\n <div className=\"flex justify-between items-center\">\n <span className=\"text-muted-foreground\">\n {t(\"transaction.transferTitle\")}\n </span>\n <span className=\"font-medium space-x-1\">\n <span className=\"inline-flex gap-1 items-center\">\n {metadata?.srcChainName}{\" \"}\n <NetworkSymbol chainKey={metadata!.srcChainName} />\n </span>\n <span className=\"text-muted-foreground\">→</span>\n <span className=\"inline-flex gap-1 items-center\">\n {metadata?.dstChainName}{\" \"}\n <NetworkSymbol chainKey={metadata!.dstChainName} />\n </span>\n </span>\n </div>\n {srcTxHash && (\n <div className=\"flex justify-between items-center\">\n <span className=\"text-muted-foreground\">\n {t(\"transaction.hash\")}\n </span>\n <button\n onClick={handleOpenExplorer}\n className=\"font-medium cursor-pointer inline-flex items-center gap-1 underline hover:no-underline\"\n >\n {formatHash(srcTxHash)}\n </button>\n </div>\n )}\n {metadata?.actualFeeValue && (\n <div className=\"flex justify-between items-center\">\n <span className=\"text-muted-foreground\">\n {t(\"transaction.finalFee\")}\n </span>\n <span className=\"font-medium\">\n {metadata.actualFeeValue} {metadata.actualFeeSymbol}\n </span>\n </div>\n )}\n </div>\n </div>\n\n <div className=\"pb-10 px-8\">\n <Button onClick={reset} className=\"w-full\">\n {t(\"transaction.done\")}\n </Button>\n </div>\n </DialogContent>\n );\n};\n","import { useState, useEffect } from 'react';\n\nexport const useCountdown = (\n initialSeconds: number\n): {\n formatTime: string;\n time: number;\n} => {\n const [time, setTime] = useState(initialSeconds);\n\n const minutes = Math.floor(time / 60);\n const seconds = time % 60;\n\n const formattedTime = `${minutes.toString().padStart(2, '0')}:${seconds.toString().padStart(2, '0')}`;\n\n useEffect(() => {\n if (!time) return;\n\n const intervalId = setInterval(() => {\n setTime(time - 1);\n }, 1000);\n\n return () => clearInterval(intervalId);\n }, [time]);\n\n return {\n formatTime: formattedTime,\n time\n };\n};\n","import {\n DialogContent,\n DialogHeader,\n DialogTitle,\n DialogDescription,\n} from \"@/components/ui/dialog\";\nimport { Clock } from \"lucide-react\";\nimport { useBridgeTranslation } from \"../../i18n/BridgeI18nProvider\";\nimport { useCountdown } from \"../../hooks/ui/use-countdown\";\n\ninterface ConfirmStepProps {\n icon?: React.ReactNode;\n}\n\nexport const ConfirmStep = ({\n icon = <Clock className=\"w-16 h-16\" />,\n}: ConfirmStepProps) => {\n const { t } = useBridgeTranslation();\n const { formatTime } = useCountdown(90);\n\n return (\n <DialogContent showCloseButton={false}>\n <div className=\"flex flex-col relative gap-4 py-10 px-8 flex-1 items-center justify-start text-center noise\">\n {icon}\n\n <DialogHeader>\n <DialogTitle>{t(\"transaction.confirm\")}</DialogTitle>\n <DialogDescription>\n {t(\"transaction.signTransaction\")}\n </DialogDescription>\n </DialogHeader>\n\n <div className=\"text-3xl font-black relative z-10\">{formatTime}</div>\n </div>\n </DialogContent>\n );\n};\n","import React from \"react\";\nimport { useTransactionStore } from \"../../store/use-transaction-store\";\nimport { ProgressStep } from \"./progress-step\";\nimport { FailedStep } from \"./failed-step\";\nimport { SuccessStep } from \"./success-step\";\nimport { ConfirmStep } from \"./confirm-step\";\nimport { Dialog } from \"@/components/ui/dialog\";\nimport type { TransactionIcons } from \"../../evaa-bridge\";\n\ninterface TransactionManagerProps {\n icons?: TransactionIcons;\n}\n\nexport const StatusStepsDialog: React.FC<TransactionManagerProps> = ({\n icons,\n}) => {\n const { current } = useTransactionStore();\n const status = current?.status;\n\n if (!status || status === \"idle\") return null;\n\n let step = null;\n\n if (status === \"executing\") {\n step = <ConfirmStep icon={icons?.confirm} />;\n }\n\n if (status === \"processing\") {\n step = <ProgressStep icon={icons?.progress} />;\n }\n\n if (status === \"failed\") {\n step = <FailedStep icon={icons?.failed} />;\n }\n\n if (status === \"completed\") {\n step = <SuccessStep icon={icons?.success} />;\n }\n\n return (\n <Dialog open={true} onOpenChange={() => {}}>\n {step}\n </Dialog>\n );\n};\n","import { useEffect } from \"react\";\nimport { useQuery } from \"@tanstack/react-query\";\nimport { useTokensStore } from \"../../store/use-token-store\";\nimport type { Token } from \"../../types\";\nimport { getTokens } from \"../../api/api\";\nimport { listAssetsForSelect } from \"../../lib/assets\";\n\nexport const useTokens = () => {\n const { setTokens, setSelectedToken, setSelectedAssetSymbol } =\n useTokensStore();\n\n const query = useQuery<Token[], Error>({\n queryKey: [\"tokens\"],\n queryFn: () => getTokens(),\n enabled: true, // Убираем условие для использования кэша\n staleTime: 30 * 60_000, // 30 минут\n gcTime: 60 * 60_000, // 1 час хранения в кэше\n refetchOnWindowFocus: false,\n select: (list) => list.filter((t) => (t as Token).isBridgeable === true),\n });\n\n useEffect(() => {\n if (query.isSuccess && query.data?.length) {\n setTokens(query.data);\n const firstAsset = listAssetsForSelect(query.data)[0];\n setSelectedAssetSymbol(firstAsset?.symbol);\n setSelectedToken(query.data[0]);\n }\n }, [\n query.isSuccess,\n query.data,\n setTokens,\n setSelectedToken,\n setSelectedAssetSymbol,\n ]);\n\n useEffect(() => {\n if (query.isError && query.error) {\n console.error(query.error.name, query.error.message);\n }\n }, [query.isError, query.error]);\n\n return { ...query };\n};\n","import { useEffect } from \"react\";\nimport { useQuery } from \"@tanstack/react-query\";\nimport { useChainsStore } from \"../../store/use-chains-store\";\nimport { getChains } from \"../../api/api\";\n\nexport const useChains = () => {\n const { setChains, setFromChain, fromChain } = useChainsStore();\n const query = useQuery({\n queryKey: [\"chains\"],\n queryFn: () => getChains(),\n enabled: true, // Убираем условие для использования кэша\n staleTime: 30 * 60_000, // 30 минут\n gcTime: 60 * 60_000, // 1 час хранения в кэше\n refetchOnWindowFocus: false,\n });\n\n useEffect(() => {\n if (query.isSuccess && query.data?.length) {\n console.log(\n `[DEBUG] Loaded ${query.data.length} chains from API:`,\n query.data.map((c) => c.chainKey)\n );\n setChains(query.data);\n if (!fromChain) {\n setFromChain(query.data[0]);\n }\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [query.isSuccess, query.data]);\n\n useEffect(() => {\n if (query.isError && query.error) {\n console.error(query.error.name, query.error.message);\n }\n }, [query.isError, query.error]);\n\n return query;\n};\n","import type { ChainStrategy, NetworkType } from \"./chain-strategy-interface\";\nimport type { Token } from \"../types\";\nimport type { WalletBalances } from \"../api/balances\";\n\nexport class ChainStrategyRegistry {\n private strategies: ChainStrategy[] = [];\n\n constructor(strategies: ChainStrategy[]) {\n this.strategies = strategies;\n }\n\n getStrategy(chainKey: string): ChainStrategy | undefined {\n return (\n this.strategies.find((strategy) => strategy.canHandle(chainKey)) ||\n undefined\n );\n }\n\n getStrategyByType(type: NetworkType): ChainStrategy | undefined {\n return (\n this.strategies.find((strategy) => strategy.getNetworkType() === type) ||\n undefined\n );\n }\n\n getAllStrategies(): ChainStrategy[] {\n return this.strategies;\n }\n\n isChainSupported(chainKey: string): boolean {\n return this.strategies.some((strategy) => strategy.canHandle(chainKey));\n }\n\n getAddressForChain(chainKey?: string): string | undefined {\n if (!chainKey) return undefined;\n\n const strategy = this.getStrategy(chainKey);\n if (!strategy || !strategy.isConnected()) return undefined;\n\n return strategy.getAccount() || undefined;\n }\n\n isWalletConnected(chainKey?: string): boolean {\n if (!chainKey) return false;\n\n const strategy = this.getStrategy(chainKey);\n return strategy?.isConnected() || false;\n }\n\n async getBalances(\n chainKey: string,\n address: string,\n tokens: Token[],\n priorityToken?: Token\n ): Promise<WalletBalances> {\n const strategy = this.getStrategy(chainKey);\n if (!strategy) return {};\n\n return await strategy.getBalances(address, tokens, priorityToken);\n }\n\n isAddressValid(chainKey: string, address?: string): boolean {\n const strategy = this.getStrategy(chainKey);\n if (!strategy) return false;\n\n return strategy.isAddressValid(address);\n }\n\n getConnectLabel(chainKey: string, t: (key: string) => string): string {\n const strategy = this.getStrategy(chainKey);\n if (!strategy) return t(\"wallets.connectWallet\");\n\n return strategy.getConnectLabel(t);\n }\n\n async connectWallet(chainKey: string): Promise<void> {\n const strategy = this.getStrategy(chainKey);\n if (!strategy) {\n throw new Error(`No strategy available for chain: ${chainKey}`);\n }\n\n await strategy.connect();\n }\n\n async disconnectWallet(chainKey: string): Promise<void> {\n const strategy = this.getStrategy(chainKey);\n if (!strategy) {\n throw new Error(`No strategy available for chain: ${chainKey}`);\n }\n\n await strategy.disconnect();\n }\n}\n","import type { PublicClient } from \"viem\";\nimport { isAddress, formatUnits } from \"viem\";\nimport type { TronWeb } from \"tronweb\";\nimport type { Token } from \"../types\";\nimport { Address, beginCell, type TonClient } from \"@ton/ton\";\nimport { getTonClient } from \"../chains/config\";\n\nexport interface WalletBalance {\n balance: number;\n address: string;\n}\n\nexport type WalletBalances = Record<string, WalletBalance>;\n\nfunction isNativeAddress(addr?: string) {\n if (!addr) return false;\n const a = addr.toLowerCase();\n return (\n a === \"native\" ||\n a === \"0x0000000000000000000000000000000000000000\" ||\n a === \"0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee\" ||\n addr === \"T9yD14Nj9j7xAB4dbGeiX9h8unkKHxuWwb\"\n );\n}\n\nfunction toTronBase58(addr: string, tronWeb: TronWeb): string {\n if (!addr) throw new Error(\"Empty TRON address\");\n if (addr.startsWith(\"T\")) return addr;\n if (addr.startsWith(\"41\")) return tronWeb.address.fromHex(addr);\n if (addr.startsWith(\"0x\"))\n return tronWeb.address.fromHex(\"41\" + addr.slice(2));\n throw new Error(\"Unsupported TRON address format: \" + addr);\n}\n\nfunction formatUnitsFromBigIntStr(valueStr: string, decimals: number): number {\n if (decimals <= 0) return Number(valueStr);\n const s = valueStr.replace(/^0+/, \"\") || \"0\";\n if (s === \"0\") return 0;\n if (s.length <= decimals) {\n const pad = \"0\".repeat(decimals - s.length);\n return Number(`0.${pad}${s}`);\n }\n const head = s.slice(0, s.length - decimals);\n const tail = s.slice(s.length - decimals).replace(/0+$/, \"\");\n return Number(tail ? `${head}.${tail}` : head);\n}\n\nfunction isTonFriendlyAddress(address?: string): boolean {\n return !!address && /^[A-Za-z0-9_-]{48,}$/.test(address);\n}\n\nfunction normalizeTickerSymbol(symbol: string): string {\n return symbol\n .toUpperCase()\n .replace(/₮/g, \"T\")\n .replace(/[^A-Z0-9]/g, \"\");\n}\n\nfunction parseTonAddress(address: string): Address {\n // If hex format with 0x prefix, convert to raw format\n if (address.startsWith(\"0x\")) {\n const hex = address.slice(2); // Remove 0x prefix\n return Address.parseRaw(`0:${hex}`); // Workchain 0 for jettons\n }\n\n // If raw format (contains :), parse as raw\n if (address.includes(\":\")) {\n return Address.parseRaw(address);\n }\n\n // Otherwise assume friendly format (base64)\n return Address.parse(address);\n}\n\nexport async function getEvmBalances(\n publicClient: PublicClient,\n address: string,\n tokens: Token[],\n priorityToken?: Token\n): Promise<WalletBalances> {\n const balances: WalletBalances = {};\n\n try {\n if (!address || !isAddress(address)) {\n console.warn(`Invalid EVM address provided: ${address}`);\n return balances;\n }\n\n if (!publicClient) {\n throw new Error(\"No public client provided\");\n }\n\n // Separate native and ERC20 tokens\n const nativeTokens = tokens.filter((t) => isNativeAddress(t.address));\n\n // Always exclude priority token from erc20Tokens to avoid duplicate fetching\n const erc20Tokens = tokens.filter(\n (t) =>\n !isNativeAddress(t.address) &&\n isAddress(t.address) &&\n (!priorityToken || t.address !== priorityToken.address)\n );\n\n // Load priority token balance first if provided\n if (priorityToken) {\n try {\n const isPriorityNative = isNativeAddress(priorityToken.address);\n\n if (isPriorityNative) {\n const ethBalance = await publicClient.getBalance({\n address: address as `0x${string}`,\n });\n const balance = parseFloat(\n formatUnits(ethBalance, priorityToken.decimals)\n );\n if (balance > 0) {\n balances[priorityToken.symbol] = { balance, address };\n }\n } else if (isAddress(priorityToken.address)) {\n const tokenBalance = await publicClient.readContract({\n address: priorityToken.address as `0x${string}`,\n abi: [\n {\n name: \"balanceOf\",\n type: \"function\",\n stateMutability: \"view\",\n inputs: [{ name: \"owner\", type: \"address\" }],\n outputs: [{ name: \"balance\", type: \"uint256\" }],\n },\n ],\n functionName: \"balanceOf\",\n args: [address as `0x${string}`],\n });\n const balance = parseFloat(\n formatUnits(tokenBalance as bigint, priorityToken.decimals)\n );\n if (balance > 0) {\n balances[priorityToken.symbol] = { balance, address };\n }\n }\n } catch (error) {\n // Suppress \"0x\" (no data) errors - these are common on first load\n const errorMessage =\n error instanceof Error ? error.message : String(error);\n const isZeroDataError = errorMessage.includes(\n 'returned no data (\"0x\")'\n );\n\n if (!isZeroDataError) {\n console.debug(\n `Failed to get priority token balance for ${priorityToken.symbol}:`,\n error\n );\n }\n }\n }\n\n // Get native token balances\n for (const token of nativeTokens) {\n try {\n const ethBalance = await publicClient.getBalance({\n address: address as `0x${string}`,\n });\n const balance = parseFloat(formatUnits(ethBalance, token.decimals));\n if (balance > 0) {\n balances[token.symbol] = { balance, address };\n }\n } catch (error) {\n console.debug(\n `Failed to get native balance for ${token.symbol}:`,\n error\n );\n }\n }\n\n // Batch all ERC20 balanceOf calls using multicall\n if (erc20Tokens.length > 0) {\n try {\n const multicallContracts = erc20Tokens.map((token) => ({\n address: token.address as `0x${string}`,\n abi: [\n {\n name: \"balanceOf\",\n type: \"function\",\n stateMutability: \"view\",\n inputs: [{ name: \"owner\", type: \"address\" }],\n outputs: [{ name: \"balance\", type: \"uint256\" }],\n },\n ] as const,\n functionName: \"balanceOf\" as const,\n args: [address as `0x${string}`],\n }));\n\n const results = await publicClient.multicall({\n contracts: multicallContracts,\n allowFailure: true,\n });\n\n results.forEach((result, index) => {\n const token = erc20Tokens[index];\n if (!token) return;\n\n if (result.status === \"success\" && result.result !== undefined) {\n try {\n const balance = parseFloat(\n formatUnits(result.result as bigint, token.decimals)\n );\n if (balance > 0) {\n balances[token.symbol] = { balance, address };\n }\n } catch (error) {\n console.debug(\n `Failed to parse balance for ${token.symbol}:`,\n error\n );\n }\n }\n });\n } catch (error) {\n console.warn(\n \"Multicall failed, falling back to individual calls:\",\n error\n );\n\n // Fallback to individual calls if multicall fails\n for (const token of erc20Tokens) {\n try {\n const tokenBalance = await publicClient.readContract({\n address: token.address as `0x${string}`,\n abi: [\n {\n name: \"balanceOf\",\n type: \"function\",\n stateMutability: \"view\",\n inputs: [{ name: \"owner\", type: \"address\" }],\n outputs: [{ name: \"balance\", type: \"uint256\" }],\n },\n ],\n functionName: \"balanceOf\",\n args: [address as `0x${string}`],\n });\n\n const balance = parseFloat(\n formatUnits(tokenBalance as bigint, token.decimals)\n );\n\n if (balance > 0) {\n balances[token.symbol] = { balance, address };\n }\n } catch (error) {\n console.debug(`Failed to get balance for ${token.symbol}:`, error);\n }\n }\n }\n }\n } catch (error) {\n console.error(\"Failed to get EVM balances:\", error);\n }\n\n return balances;\n}\n\nexport async function getTonBalances(\n address: string,\n tokens: Token[],\n customTonClient?: TonClient,\n tonApiKey?: string\n): Promise<WalletBalances> {\n const balances: WalletBalances = {};\n\n try {\n if (!isTonFriendlyAddress(address)) {\n console.warn(`Invalid TON address provided: ${address}`);\n return balances;\n }\n\n // Get TonClient instance (custom or shared singleton)\n const client = getTonClient(customTonClient, tonApiKey);\n\n const accountAddress = Address.parse(address);\n\n // 1) Get native TON balance\n try {\n const balance = await client.getBalance(accountAddress);\n const tonBalance = Number(balance) / 1e9; // Convert from nanotons to TON\n\n if (tonBalance > 0) {\n balances.TON = { balance: tonBalance, address: \"ton-native\" };\n }\n } catch (error) {\n console.warn(\"Failed to get native TON balance:\", error);\n }\n\n // 2) Get Jetton balances for each token\n for (const token of tokens) {\n try {\n // Skip native TON token (already processed)\n if (\n isNativeAddress(token.address) ||\n token.symbol.toUpperCase() === \"TON\"\n ) {\n continue;\n }\n\n // Parse jetton master address (supports hex with 0x, raw format, and friendly format)\n const jettonMasterAddress = parseTonAddress(token.address);\n\n // Get jetton wallet address for this account\n const jettonWalletAddress = await client.runMethod(\n jettonMasterAddress,\n \"get_wallet_address\",\n [\n {\n type: \"slice\",\n cell: beginCell().storeAddress(accountAddress).endCell(),\n },\n ]\n );\n\n const jettonWalletAddr = jettonWalletAddress.stack.readAddress();\n\n // Get jetton balance from wallet\n const jettonData = await client.runMethod(\n jettonWalletAddr,\n \"get_wallet_data\"\n );\n\n const jettonBalance = jettonData.stack.readBigNumber();\n const humanBalance =\n Number(jettonBalance) / Math.pow(10, token.decimals);\n\n if (humanBalance > 0) {\n const symbolUpper = token.symbol.toUpperCase();\n const symbolNorm = normalizeTickerSymbol(symbolUpper);\n\n const entry = { balance: humanBalance, address: token.address };\n balances[symbolUpper] = entry;\n\n // Add normalized alias if different\n if (symbolNorm !== symbolUpper) {\n balances[symbolNorm] = entry;\n }\n }\n } catch (error) {\n // Exit code -13 means the user doesn't have a jetton wallet for this token (balance = 0)\n // This is normal and not an error, so we skip logging for this case\n const errorMessage =\n error instanceof Error ? error.message : String(error);\n const isNoWalletError =\n errorMessage.includes(\"exit_code: -13\") ||\n errorMessage.includes(\"exit_code:-13\") ||\n errorMessage.includes(\"exitCode: -13\");\n\n if (!isNoWalletError) {\n // Log other errors that might indicate real issues\n console.debug(`Failed to get balance for ${token.symbol}:`, error);\n }\n }\n }\n } catch (error) {\n console.error(\"Failed to get TON balances:\", error);\n }\n\n return balances;\n}\n\nexport async function getTronBalances(\n tronWeb: TronWeb,\n address: string,\n tokens: Token[]\n): Promise<WalletBalances> {\n const balances: WalletBalances = {};\n\n try {\n if (!tronWeb) throw new Error(\"TronWeb not available\");\n const ownerB58 = toTronBase58(address, tronWeb);\n\n // Always fetch native TRX balance first, regardless of tokens list\n try {\n const trxBalanceSun = await tronWeb.trx.getBalance(ownerB58);\n const sunNum = Number(trxBalanceSun);\n const trxVal = tronWeb.fromSun(sunNum);\n const trxStr = typeof trxVal === \"string\" ? trxVal : trxVal.toString();\n const trxBalance = parseFloat(trxStr);\n\n if (trxBalance > 0) {\n balances.TRX = { balance: trxBalance, address: ownerB58 };\n }\n } catch (error) {\n console.warn(\"Failed to get native TRX balance:\", error);\n }\n\n for (const token of tokens) {\n try {\n // Skip native TRX if it's in the tokens list (already processed above)\n if (\n isNativeAddress(token.address) &&\n token.symbol.toUpperCase() === \"TRX\"\n ) {\n continue;\n }\n\n let balance = 0;\n\n if (isNativeAddress(token.address)) {\n // Other native tokens (shouldn't happen for TRON, but keep for compatibility)\n const trxBalanceSun = await tronWeb.trx.getBalance(ownerB58);\n const sunNum = Number(trxBalanceSun);\n const trxVal = tronWeb.fromSun(sunNum);\n const trxStr =\n typeof trxVal === \"string\" ? trxVal : trxVal.toString();\n balance = parseFloat(trxStr);\n } else {\n const contractB58 = toTronBase58(token.address, tronWeb);\n\n const res = await tronWeb.transactionBuilder.triggerSmartContract(\n contractB58,\n \"balanceOf(address)\",\n { feeLimit: 10_000_000, callValue: 0 },\n [{ type: \"address\", value: ownerB58 }],\n ownerB58\n );\n\n const hex = res?.constant_result?.[0];\n if (!hex) {\n balance = 0;\n } else {\n const intStr = tronWeb.toBigNumber(\"0x\" + hex).toString();\n balance = formatUnitsFromBigIntStr(intStr, token.decimals);\n }\n }\n\n if (balance > 0) {\n balances[token.symbol] = { balance, address: ownerB58 };\n }\n } catch (error) {\n console.warn(`Failed to get TRON balance for ${token.symbol}:`, error);\n }\n }\n } catch (error) {\n console.error(\"Failed to get Tron balances:\", error);\n }\n\n return balances;\n}\n","import { BrowserProvider, Contract, parseUnits } from \"ethers\";\nimport type { PublicClient } from \"viem\";\nimport type {\n ChainStrategy,\n NetworkType,\n TransactionResult,\n CompletionResult,\n TransactionStrategyContext,\n} from \"./chain-strategy-interface\";\nimport type { Token, TransactionStep } from \"../types\";\nimport type { WalletBalances } from \"../api/balances\";\nimport { getEvmBalances } from \"../api/balances\";\nimport { EVM_CONFIG } from \"./config\";\nimport {\n WalletNotConnectedError,\n ProviderNotAvailableError,\n InvalidStepsError,\n InvalidTransactionDataError,\n TransactionFailedError,\n TransactionTimeoutError,\n TransactionRevertedError,\n toChainStrategyError,\n} from \"./errors\";\n\nconst ERC20_ABI = [\n \"function approve(address spender, uint256 amount) returns (bool)\",\n \"function allowance(address owner, address spender) view returns (uint256)\",\n \"function decimals() view returns (uint8)\",\n \"function balanceOf(address owner) view returns (uint256)\",\n];\n\nexport interface EvmChainStrategyConfig {\n evmAddress: string | undefined;\n evmIsConnected: boolean;\n evmDisconnect: () => void;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n walletClient: any;\n publicClient: PublicClient | undefined;\n}\n\nexport class EvmChainStrategy implements ChainStrategy {\n private config: EvmChainStrategyConfig;\n private provider: BrowserProvider | undefined;\n private publicClient: PublicClient | undefined;\n\n constructor(config: EvmChainStrategyConfig) {\n this.config = config;\n this.publicClient = config.publicClient;\n if (config.walletClient) {\n this.provider = new BrowserProvider(config.walletClient.transport);\n }\n }\n\n canHandle(chainKey: string): boolean {\n const key = chainKey.toLowerCase();\n return key !== \"ton\" && key !== \"tron\";\n }\n\n getNetworkType(): NetworkType {\n return \"evm\";\n }\n\n getName(): string {\n return \"EVM Chain Strategy\";\n }\n\n async connect(): Promise<void> {\n // EVM connection is handled by Wagmi's useConnect hook in the UI\n // This is a no-op as the actual connection happens through Wagmi\n }\n\n async disconnect(): Promise<void> {\n this.config.evmDisconnect();\n }\n\n isConnected(): boolean {\n return !!this.config.evmIsConnected;\n }\n\n isConnecting(): boolean {\n return false;\n }\n\n getAccount(): string | null {\n return this.config.evmAddress || null;\n }\n\n getError(): string | null {\n return null;\n }\n\n isInitialized(): boolean {\n return true;\n }\n\n getConnectLabel(t: (key: string) => string): string {\n return t(\"wallets.connectEvmWallet\");\n }\n\n getClient(): BrowserProvider | undefined {\n return this.provider;\n }\n\n async getBalances(\n address: string,\n tokens: Token[],\n priorityToken?: Token\n ): Promise<WalletBalances> {\n if (!this.publicClient) {\n console.warn(\"No publicClient available for balance query\");\n return {};\n }\n return await getEvmBalances(\n this.publicClient,\n address,\n tokens,\n priorityToken\n );\n }\n\n isAddressValid(address?: string): boolean {\n if (!address) return false;\n return /^0x[0-9a-fA-F]{40}$/.test(address);\n }\n\n validateSteps(steps: TransactionStep[]): void {\n if (!steps || steps.length === 0) {\n throw new InvalidStepsError(\"evm\", \"No transaction steps provided\");\n }\n\n const hasValidSteps = steps.every((step) => {\n if (!step.transaction) return false;\n\n if (step.type === \"approve\") {\n return !!step.transaction.to && !!step.transaction.data;\n }\n\n if (step.type === \"bridge\") {\n return !!step.transaction.to && !!step.transaction.data;\n }\n\n return false;\n });\n\n if (!hasValidSteps) {\n throw new InvalidStepsError(\"evm\", \"Missing transaction data in steps\");\n }\n }\n\n async executeSteps(\n steps: TransactionStep[],\n _context: TransactionStrategyContext,\n onFirstHash?: (hash: string) => void\n ): Promise<TransactionResult> {\n if (!this.isConnected() || !this.provider) {\n throw new WalletNotConnectedError(\"evm\");\n }\n\n this.validateSteps(steps);\n\n try {\n let firstTxHash: string | undefined;\n\n for (const step of steps) {\n console.log(\n `Executing ${step.type} transaction on ${step.chainKey}...`\n );\n\n if (step.type === \"approve\") {\n const hash = await this.approveTransaction(step);\n console.log(`Approval transaction hash: ${hash}`);\n if (!firstTxHash) {\n firstTxHash = hash;\n onFirstHash?.(hash);\n }\n } else if (step.type === \"bridge\") {\n const hash = await this.executeTransaction(step);\n console.log(`Bridge transaction hash: ${hash}`);\n if (!firstTxHash) {\n firstTxHash = hash;\n onFirstHash?.(hash);\n }\n } else {\n throw new InvalidStepsError(\n \"evm\",\n `Unsupported step type: ${step.type}`\n );\n }\n }\n\n return {\n hash: firstTxHash,\n chainKey: steps[0]?.chainKey,\n };\n } catch (error) {\n if (error instanceof Error && error.name.includes(\"Error\")) {\n throw error;\n }\n\n throw toChainStrategyError(error, \"evm\", \"transaction\");\n }\n }\n\n async waitForCompletion(txHash: string): Promise<CompletionResult> {\n try {\n const provider = this.provider;\n if (!provider) {\n throw new ProviderNotAvailableError(\"evm\");\n }\n\n console.log(\n `Waiting for ${EVM_CONFIG.requiredConfirmations} confirmations for tx: ${txHash}`\n );\n\n // Use provider.waitForTransaction with confirmations and timeout\n const receipt = await provider.waitForTransaction(\n txHash,\n EVM_CONFIG.requiredConfirmations,\n EVM_CONFIG.timeout\n );\n\n if (!receipt) {\n const error = new TransactionTimeoutError(\"evm\", txHash);\n return {\n completed: false,\n error: error.message,\n };\n }\n\n // Check transaction status\n if (receipt.status !== 1) {\n const error = new TransactionRevertedError(\"evm\", txHash);\n return {\n completed: false,\n error: error.message,\n };\n }\n\n console.log(\n `EVM transaction confirmed in block ${receipt.blockNumber} with ${EVM_CONFIG.requiredConfirmations} confirmations`\n );\n\n // Calculate actual fee paid\n let actualFeeValue: string | undefined;\n try {\n const gasUsed = receipt.gasUsed;\n const effectiveGasPrice = receipt.gasPrice;\n\n if (gasUsed && effectiveGasPrice) {\n const feeWei = gasUsed * effectiveGasPrice;\n const { formatUnits } = await import(\"ethers\");\n const feeInNative = formatUnits(feeWei, 18); // EVM chains use 18 decimals\n actualFeeValue = feeInNative;\n\n console.log(`EVM transaction fee: ${feeInNative} (native token)`);\n }\n } catch (error) {\n console.warn(\"Failed to calculate actual fee:\", error);\n }\n\n // Optional: Check finality for additional security (currently logged only)\n // Uncomment to enable finality check for critical transactions\n // const isFinalized = await this.checkFinality(receipt.blockNumber);\n // if (!isFinalized) {\n // console.warn(`Transaction confirmed but block ${receipt.blockNumber} not yet finalized`);\n // }\n\n return {\n completed: true,\n actualFeeValue,\n // Symbol will be determined by the caller based on chain info\n };\n } catch (error) {\n // Handle transaction replacement (repriced, cancelled, or replaced)\n if (\n error &&\n typeof error === \"object\" &&\n \"code\" in error &&\n error.code === \"TRANSACTION_REPLACED\"\n ) {\n console.log(\n `Transaction was replaced: ${\n \"reason\" in error ? String(error.reason) : \"unknown\"\n }`\n );\n\n // Check if replacement transaction succeeded\n if (\"receipt\" in error && error.receipt) {\n const replacementReceipt = error.receipt as {\n status?: number;\n blockNumber?: number;\n };\n\n if (replacementReceipt.status === 1) {\n console.log(\n `Replacement transaction succeeded in block ${replacementReceipt.blockNumber}`\n );\n\n // Calculate fee for replacement transaction if available\n let actualFeeValue: string | undefined;\n try {\n const receipt = error.receipt as {\n gasUsed?: bigint;\n gasPrice?: bigint;\n effectiveGasPrice?: bigint;\n };\n const gasUsed = receipt.gasUsed;\n const effectiveGasPrice =\n receipt.gasPrice || receipt.effectiveGasPrice;\n\n if (gasUsed && effectiveGasPrice) {\n const feeWei = gasUsed * effectiveGasPrice;\n const { formatUnits } = await import(\"ethers\");\n const feeInNative = formatUnits(feeWei, 18);\n actualFeeValue = feeInNative;\n\n console.log(\n `Replacement transaction fee: ${feeInNative} (native token)`\n );\n }\n } catch (feeError) {\n console.warn(\"Failed to calculate replacement transaction fee:\", feeError);\n }\n\n return {\n completed: true,\n actualFeeValue,\n };\n } else {\n const chainError = new TransactionRevertedError(\"evm\", txHash);\n return {\n completed: false,\n error: chainError.message,\n };\n }\n }\n }\n\n const chainError = toChainStrategyError(\n error,\n \"evm\",\n \"waitForCompletion\"\n );\n return {\n completed: false,\n error: chainError.message,\n };\n }\n }\n\n private async executeTransaction(step: TransactionStep): Promise<string> {\n const provider = this.provider;\n const signer = await provider?.getSigner();\n\n if (!step.transaction) {\n throw new InvalidTransactionDataError(\n \"evm\",\n \"No transaction data in step\"\n );\n }\n\n const tx = step.transaction;\n\n const txRequest: Record<string, unknown> = {\n to: tx.to,\n data: tx.data,\n from: tx.from || this.config.evmAddress,\n };\n\n if (tx.value) {\n txRequest.value = tx.value;\n }\n\n const txResponse = await signer?.sendTransaction(txRequest);\n return txResponse?.hash || \"\";\n }\n\n private async approveTransaction(step: TransactionStep): Promise<string> {\n try {\n const provider = this.provider;\n const signer = await provider?.getSigner();\n\n if (!step.transaction) {\n throw new InvalidTransactionDataError(\n \"evm\",\n \"No transaction data in step\"\n );\n }\n\n const tx = step.transaction;\n const tokenAddress = tx.to;\n\n if (\n tokenAddress?.toLowerCase() !== EVM_CONFIG.usdtAddress.toLowerCase()\n ) {\n console.log(\n `Token ${tokenAddress} is not USDT, using standard approve`\n );\n return this.executeTransaction(step);\n }\n\n const data = tx.data;\n if (!data || data.length < 138) {\n throw new InvalidTransactionDataError(\n \"evm\",\n \"Invalid approve transaction data for USDT\"\n );\n }\n\n const spenderAddress = \"0x\" + data.slice(34, 74);\n const amount = \"0x\" + data.slice(74, 138);\n\n const tokenContract = new Contract(tokenAddress, ERC20_ABI, signer);\n\n const currentAllowance = await tokenContract.allowance(\n this.config.evmAddress,\n spenderAddress\n );\n\n if (currentAllowance > 0n) {\n try {\n const resetTx = await tokenContract.approve(spenderAddress, 0);\n await resetTx.wait();\n } catch (resetError) {\n throw new TransactionFailedError(\n \"evm\",\n `Failed to reset USDT allowance: ${\n resetError instanceof Error ? resetError.message : \"Unknown error\"\n }`,\n undefined,\n resetError instanceof Error ? resetError : undefined\n );\n }\n } else {\n console.log(\"USDT allowance is 0, no reset needed\");\n }\n\n try {\n const approveTx = await tokenContract.approve(spenderAddress, amount);\n return approveTx.hash;\n } catch (approveError) {\n throw new TransactionFailedError(\n \"evm\",\n `Failed to approve USDT: ${\n approveError instanceof Error\n ? approveError.message\n : \"Unknown error\"\n }`,\n undefined,\n approveError instanceof Error ? approveError : undefined\n );\n }\n } catch (error) {\n if (error instanceof Error && error.name.includes(\"Error\")) {\n throw error;\n }\n throw toChainStrategyError(error, \"evm\", \"approve\");\n }\n }\n\n async checkAllowance(\n tokenAddress: string,\n spenderAddress: string,\n amount: string\n ): Promise<boolean> {\n try {\n const provider = this.provider;\n const tokenContract = new Contract(tokenAddress, ERC20_ABI, provider);\n\n const allowance = await tokenContract.allowance(\n this.config.evmAddress,\n spenderAddress\n );\n const decimals = await tokenContract.decimals();\n\n const requiredAmount = parseUnits(amount, decimals);\n\n return allowance >= requiredAmount;\n } catch (error) {\n console.error(\"Error checking allowance:\", error);\n return false;\n }\n }\n\n /**\n * Check if a block has reached finality status (optional, for critical transactions)\n * This is more stringent than confirmations and protects against long-range reorgs\n *\n * Usage: Call this method after waitForCompletion if you need additional security\n * for high-value transactions. The method checks if the block has been marked as\n * \"finalized\" by the Ethereum consensus layer (2/3 of validators).\n *\n * @param blockNumber - The block number to check for finality\n * @returns true if the block is finalized, false otherwise\n */\n async checkFinality(blockNumber: number): Promise<boolean> {\n try {\n const provider = this.provider;\n if (!provider) {\n return false;\n }\n\n // Try to get the finalized block\n const finalizedBlock = await provider.getBlock(\"finalized\");\n\n if (!finalizedBlock) {\n console.debug(\n \"Finalized block not available (pre-merge or unsupported)\"\n );\n return false;\n }\n\n // Check if our transaction block is finalized\n const isFinalized = blockNumber <= finalizedBlock.number;\n\n if (isFinalized) {\n console.log(\n `Block ${blockNumber} has reached finality (finalized block: ${finalizedBlock.number})`\n );\n } else {\n console.debug(\n `Block ${blockNumber} not yet finalized (finalized block: ${finalizedBlock.number})`\n );\n }\n\n return isFinalized;\n } catch (error) {\n console.debug(\"Error checking finality:\", error);\n return false;\n }\n }\n}\n","import type { TonConnectUI } from \"@tonconnect/ui-react\";\nimport {\n Cell,\n loadMessage,\n storeMessage,\n beginCell,\n Address,\n type Message,\n} from \"@ton/core\";\nimport type { TonClient } from \"@ton/ton\";\nimport type {\n ChainStrategy,\n NetworkType,\n TransactionResult,\n CompletionResult,\n TransactionStrategyContext,\n} from \"./chain-strategy-interface\";\nimport type { TransactionStep, Token } from \"../types\";\nimport type { WalletBalances } from \"../api/balances\";\nimport { getTonBalances } from \"../api/balances\";\nimport { TON_CONFIG, getTonClient } from \"./config\";\nimport {\n WalletNotConnectedError,\n InvalidStepsError,\n InvalidTransactionDataError,\n TransactionFailedError,\n toChainStrategyError,\n} from \"./errors\";\n\ninterface TonMessage {\n address: string;\n amount: string;\n payload: string;\n}\n\nexport interface TonChainStrategyConfig {\n tonConnectUI: TonConnectUI | null;\n tonAddress: string | null;\n tonClient?: TonClient;\n tonApiKey?: string;\n}\n\nexport class TonChainStrategy implements ChainStrategy {\n private config: TonChainStrategyConfig;\n\n constructor(config: TonChainStrategyConfig) {\n this.config = config;\n }\n\n canHandle(chainKey: string): boolean {\n return chainKey.toLowerCase() === \"ton\";\n }\n\n getNetworkType(): NetworkType {\n return \"ton\";\n }\n\n getName(): string {\n return \"TON Chain Strategy\";\n }\n\n async connect(): Promise<void> {\n await this.config.tonConnectUI?.openModal();\n }\n\n async disconnect(): Promise<void> {\n await this.config.tonConnectUI?.disconnect();\n }\n\n isConnected(): boolean {\n return !!this.config.tonAddress;\n }\n\n isConnecting(): boolean {\n return false;\n }\n\n getAccount(): string | null {\n return this.config.tonAddress || null;\n }\n\n getError(): string | null {\n return null;\n }\n\n isInitialized(): boolean {\n return true;\n }\n\n getConnectLabel(t: (key: string) => string): string {\n return t(\"wallets.connectTonWallet\");\n }\n\n getClient(): TonClient {\n return getTonClient(this.config.tonClient, this.config.tonApiKey);\n }\n\n async getBalances(address: string, tokens: Token[]): Promise<WalletBalances> {\n // Note: priorityToken parameter is available for future optimization\n // TON balances could also benefit from prioritization in the future\n return await getTonBalances(\n address,\n tokens,\n this.config.tonClient,\n this.config.tonApiKey\n );\n }\n\n isAddressValid(address?: string): boolean {\n if (!address) return false;\n return true;\n }\n\n validateSteps(steps: TransactionStep[]): void {\n if (!steps || steps.length === 0) {\n throw new InvalidStepsError(\"ton\", \"No transaction steps provided\");\n }\n\n const tonStep = steps.find(\n (s) => s.chainKey === \"ton\" && s.type === \"bridge\"\n );\n if (!tonStep) {\n throw new InvalidStepsError(\"ton\", \"No TON bridge step found\");\n }\n\n const messages = tonStep.transaction?.messages;\n if (!messages || messages.length === 0) {\n throw new InvalidTransactionDataError(\n \"ton\",\n \"No messages found in TON bridge step\"\n );\n }\n\n for (const msg of messages) {\n if (!msg.address || !msg.amount || !msg.payload) {\n throw new InvalidTransactionDataError(\n \"ton\",\n \"Invalid message format in TON transaction\"\n );\n }\n }\n }\n\n async executeSteps(\n steps: TransactionStep[],\n _context: TransactionStrategyContext,\n onFirstHash?: (hash: string) => void\n ): Promise<TransactionResult> {\n if (!this.isConnected() || !this.config.tonConnectUI) {\n throw new WalletNotConnectedError(\"ton\");\n }\n\n this.validateSteps(steps);\n\n const tonStep = steps.find(\n (s) => s.chainKey === \"ton\" && s.type === \"bridge\"\n );\n if (!tonStep || !tonStep.transaction?.messages) {\n throw new InvalidStepsError(\"ton\", \"Invalid TON transaction step\");\n }\n\n try {\n const tonMessages: TonMessage[] = tonStep.transaction.messages.map(\n (msg) => ({\n address: msg.address,\n amount: msg.amount,\n payload: msg.payload,\n })\n );\n\n const transaction = {\n validUntil: Math.floor(Date.now() / 1000) + TON_CONFIG.validUntil,\n messages: tonMessages,\n };\n\n const result = await this.config.tonConnectUI.sendTransaction(\n transaction\n );\n\n const bocBase64 = result.boc;\n\n // Parse BOC to get readable hex hash\n try {\n const inMessage = loadMessage(Cell.fromBase64(bocBase64).beginParse());\n const messageHash = this.getNormalizedExtMessageHash(inMessage);\n const hexHash = messageHash.toString(\"hex\");\n\n onFirstHash?.(hexHash);\n\n return {\n chainKey: \"ton\",\n hash: hexHash,\n };\n } catch (error) {\n console.error(\"Error parsing BOC to hex hash:\", error);\n // Fallback to BOC if parsing fails\n onFirstHash?.(bocBase64);\n return {\n chainKey: \"ton\",\n hash: bocBase64,\n };\n }\n } catch (error) {\n throw toChainStrategyError(error, \"ton\", \"transaction\");\n }\n }\n\n async waitForCompletion(txHash: string): Promise<CompletionResult> {\n try {\n const result = await this.checkTonTransaction(\n txHash,\n TON_CONFIG.timeout\n );\n\n if (!result.confirmed) {\n const error = new TransactionFailedError(\n \"ton\",\n \"Transaction not confirmed on-chain\",\n txHash\n );\n return {\n completed: false,\n error: error.message,\n };\n }\n\n return {\n completed: true,\n actualFeeValue: result.fee,\n actualFeeSymbol: \"TON\",\n };\n } catch (error) {\n const chainError = toChainStrategyError(\n error,\n \"ton\",\n \"waitForCompletion\"\n );\n return {\n completed: false,\n error: chainError.message,\n };\n }\n }\n\n private getNormalizedExtMessageHash(message: Message): Buffer {\n if (message.info.type !== \"external-in\") {\n throw new Error(`Expected external-in message, got ${message.info.type}`);\n }\n\n // TEP-467: Normalize message by removing src, importFee, and init\n const normalizedInfo = {\n ...message.info,\n src: undefined,\n importFee: 0n,\n };\n\n const normalizedMessage = {\n ...message,\n info: normalizedInfo,\n init: null,\n };\n\n // Serialize and return hash\n return beginCell()\n .store(storeMessage(normalizedMessage, { forceRef: true }))\n .endCell()\n .hash();\n }\n\n private async checkTonTransaction(\n hashOrBoc: string,\n timeoutMs = 360_000\n ): Promise<{ confirmed: boolean; fee?: string }> {\n const deadline = Date.now() + timeoutMs;\n\n // Get TonClient instance (custom or shared singleton)\n const client = getTonClient(this.config.tonClient, this.config.tonApiKey);\n\n try {\n let targetMessageHash: Buffer;\n let accountAddress: Address;\n\n try {\n const inMessage = loadMessage(Cell.fromBase64(hashOrBoc).beginParse());\n\n if (inMessage.info.type !== \"external-in\") {\n console.debug(\n \"Expected external-in message, got:\",\n inMessage.info.type\n );\n return { confirmed: false };\n }\n\n accountAddress = inMessage.info.dest;\n targetMessageHash = this.getNormalizedExtMessageHash(inMessage);\n } catch {\n targetMessageHash = Buffer.from(hashOrBoc, \"hex\");\n\n if (!this.config.tonAddress) {\n console.debug(\"No wallet address available for hex hash lookup\");\n return { confirmed: false };\n }\n\n accountAddress = Address.parse(this.config.tonAddress);\n }\n\n let lt: string | undefined = undefined;\n let hash: string | undefined = undefined;\n\n while (Date.now() < deadline) {\n try {\n const transactions = await client.getTransactions(accountAddress, {\n lt,\n hash,\n limit: 10,\n archival: true,\n });\n\n if (transactions.length === 0) {\n // No more transactions, wait and reset pagination\n await new Promise((r) => setTimeout(r, TON_CONFIG.pollingInterval));\n lt = undefined;\n hash = undefined;\n continue;\n }\n\n // Check each transaction\n for (const tx of transactions) {\n if (tx.inMessage?.info.type === \"external-in\") {\n const txInMessageHash = this.getNormalizedExtMessageHash(\n tx.inMessage\n );\n\n // Compare normalized hashes\n if (txInMessageHash.equals(targetMessageHash)) {\n console.debug(\"Transaction found by in-message hash\");\n\n // Extract fee from transaction\n const totalFees = tx.totalFees;\n const feeInTon = Number(totalFees) / 1_000_000_000; // Convert nanoton to TON\n\n console.log(`TON transaction fee: ${feeInTon} TON`);\n\n return {\n confirmed: true,\n fee: feeInTon.toString(),\n };\n }\n }\n }\n\n // Move to next page\n const lastTx = transactions[transactions.length - 1];\n lt = lastTx.lt.toString();\n hash = lastTx.hash().toString(\"base64\");\n\n // Add delay before next iteration to avoid excessive API calls\n await new Promise((r) => setTimeout(r, TON_CONFIG.pollingInterval));\n } catch (error) {\n console.debug(\"Error fetching transactions:\", error);\n await new Promise((r) => setTimeout(r, TON_CONFIG.pollingInterval));\n\n // Reset pagination on error to retry from the beginning\n lt = undefined;\n hash = undefined;\n }\n }\n\n return { confirmed: false };\n } catch (error) {\n console.debug(\"Error parsing BOC or checking transaction:\", error);\n return { confirmed: false };\n }\n }\n}\n","import {\n TronLinkAdapterName,\n type TronWeb as TronWebType,\n} from \"@tronweb3/tronwallet-adapters\";\nimport type {\n ChainStrategy,\n NetworkType,\n TransactionResult,\n CompletionResult,\n TransactionStrategyContext,\n} from \"./chain-strategy-interface\";\nimport type { Token, TransactionStep } from \"../types\";\nimport type { WalletBalances } from \"../api/balances\";\nimport { getTronBalances } from \"../api/balances\";\nimport { TRON_CONFIG } from \"./config\";\nimport {\n WalletNotConnectedError,\n WalletNotFoundError,\n ProviderNotAvailableError,\n InvalidStepsError,\n InvalidTransactionDataError,\n InvalidAddressError,\n TransactionFailedError,\n TransactionRevertedError,\n TransactionTimeoutError,\n toChainStrategyError,\n} from \"./errors\";\nimport type { Types } from \"tronweb\";\n\ntype ParsedTx =\n | { kind: \"approve\"; token: string; spender: string; amount: string }\n | { kind: \"transfer\"; token: string; to: string; amount: string }\n | {\n kind: \"raw_call\";\n contract: string;\n input: string;\n callValue?: number;\n feeLimit?: number;\n }\n | { kind: \"native\"; to: string; amountSun: number };\n\ninterface TronApproveStepExtra {\n tokenAddress?: string;\n spenderAddress?: string;\n amount?: string;\n}\n\ninterface TronTransferStepExtra {\n tokenAddress?: string;\n toAddress?: string;\n amount?: string;\n}\n\ninterface TronTxLike {\n to?: string;\n data?: string;\n value?: string | number | bigint;\n}\n\nexport interface TronChainStrategyConfig {\n tronAddress: string | null;\n tronConnected: boolean;\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n tronSelect: (adapterName: any) => void;\n tronConnect: () => Promise<void>;\n tronDisconnect: () => Promise<void>;\n}\n\nexport class TronChainStrategy implements ChainStrategy {\n private config: TronChainStrategyConfig;\n\n constructor(config: TronChainStrategyConfig) {\n this.config = config;\n }\n\n canHandle(chainKey: string): boolean {\n return chainKey.toLowerCase() === \"tron\";\n }\n\n getNetworkType(): NetworkType {\n return \"tron\";\n }\n\n getName(): string {\n return \"TRON Chain Strategy\";\n }\n\n async connect(): Promise<void> {\n // Check if TronLink is actually installed (not Bybit)\n if (!this.isTronLinkInstalled()) {\n // Open TronLink installation page in a new tab\n if (typeof window !== \"undefined\") {\n window.open(\"https://www.tronlink.org/\", \"_blank\");\n }\n throw new WalletNotFoundError(\n \"tron\",\n \"TronLink wallet is not installed. Please install TronLink extension and try again.\"\n );\n }\n\n this.config.tronSelect(TronLinkAdapterName);\n\n await new Promise((resolve) => setTimeout(resolve, 100));\n await this.config.tronConnect();\n }\n\n async disconnect(): Promise<void> {\n await this.config.tronDisconnect();\n }\n\n isConnected(): boolean {\n return !!this.config.tronConnected;\n }\n\n isConnecting(): boolean {\n return false;\n }\n\n getAccount(): string | null {\n return this.config.tronAddress || null;\n }\n\n getError(): string | null {\n return null;\n }\n\n isInitialized(): boolean {\n return true;\n }\n\n getConnectLabel(t: (key: string) => string): string {\n return t(\"wallets.connectTronWallet\");\n }\n\n async getBalances(address: string, tokens: Token[]): Promise<WalletBalances> {\n const tronWeb = this.getClient();\n if (!tronWeb) return {};\n return await getTronBalances(tronWeb, address, tokens);\n }\n\n isAddressValid(address?: string): boolean {\n if (!address) return false;\n return /^T[1-9A-HJ-NP-Za-km-z]{33}$/.test(address);\n }\n\n validateSteps(steps: TransactionStep[]): void {\n console.log(\"validateSteps\");\n\n if (!steps?.length) {\n throw new InvalidStepsError(\"tron\", \"No transaction steps provided\");\n }\n\n const tronStep = steps.find(\n (s) => String(s.chainKey).toLowerCase() === \"tron\"\n );\n if (!tronStep) {\n throw new InvalidStepsError(\"tron\", \"No TRON step found in quote\");\n }\n\n if (!tronStep.transaction) {\n throw new InvalidTransactionDataError(\"tron\", \"Missing transaction data\");\n }\n }\n\n async executeSteps(\n steps: TransactionStep[],\n _context: TransactionStrategyContext,\n onFirstHash?: (hash: string) => void\n ): Promise<TransactionResult> {\n const tronWeb = this.getClient();\n if (!tronWeb) {\n throw new ProviderNotAvailableError(\"tron\");\n }\n\n if (!this.isConnected()) {\n throw new WalletNotConnectedError(\"tron\");\n }\n\n this.validateSteps(steps);\n\n const fromB58 = tronWeb.defaultAddress?.base58 as string;\n if (!fromB58) {\n throw new WalletNotConnectedError(\"tron\");\n }\n\n let lastTxId: string | undefined;\n let isFirstHash = true;\n\n for (const step of steps) {\n if (String(step.chainKey).toLowerCase() !== \"tron\") continue;\n\n const tx = step.transaction;\n if (!tx) {\n throw new InvalidTransactionDataError(\n \"tron\",\n \"Missing transaction data\"\n );\n }\n\n const hexData = typeof tx?.data === \"string\" ? tx.data : \"\";\n const parsed = this.parseTronStep(step, tx, hexData);\n\n let unsigned: Types.Transaction;\n switch (parsed.kind) {\n case \"approve\": {\n const tokenB58 = this.toBase58(parsed.token, tronWeb);\n const spenderB58 = this.toBase58(parsed.spender, tronWeb);\n unsigned = await this.buildApprove(tronWeb, {\n token: tokenB58,\n spender: spenderB58,\n amount: parsed.amount,\n from: fromB58,\n feeLimit: TRON_CONFIG.feeLimit,\n });\n break;\n }\n case \"transfer\": {\n const tokenB58 = this.toBase58(parsed.token, tronWeb);\n const toB58 = this.toBase58(parsed.to, tronWeb);\n unsigned = await this.buildTransferTrc20(tronWeb, {\n token: tokenB58,\n to: toB58,\n amount: parsed.amount,\n from: fromB58,\n feeLimit: TRON_CONFIG.feeLimit,\n });\n break;\n }\n case \"native\": {\n const toB58 = this.toBase58(parsed.to, tronWeb);\n unsigned = await this.buildTransferTrx(tronWeb, {\n to: toB58,\n amountSun: parsed.amountSun,\n from: fromB58,\n });\n break;\n }\n case \"raw_call\": {\n const contractB58 = this.toBase58(parsed.contract, tronWeb);\n unsigned = await this.buildRawCall(tronWeb, {\n contract: contractB58,\n input: parsed.input,\n callValue: parsed.callValue,\n feeLimit: parsed.feeLimit,\n from: fromB58,\n });\n break;\n }\n default:\n throw new InvalidStepsError(\n \"tron\",\n \"Unsupported TRON parsed tx kind\"\n );\n }\n\n const { txid } = await this.signAndBroadcast(tronWeb, unsigned);\n lastTxId = txid;\n\n if (isFirstHash) {\n onFirstHash?.(txid);\n isFirstHash = false;\n }\n }\n\n if (!lastTxId) {\n throw new TransactionFailedError(\n \"tron\",\n \"No TRON transaction was executed\"\n );\n }\n\n return { hash: lastTxId, chainKey: \"tron\" };\n }\n\n async waitForCompletion(txHash: string): Promise<CompletionResult> {\n try {\n const tronWeb = this.getClient();\n if (!tronWeb) {\n throw new ProviderNotAvailableError(\"tron\");\n }\n\n console.log(\n `Waiting for ${TRON_CONFIG.requiredConfirmations} confirmations for TRON tx: ${txHash}`\n );\n\n const deadline = Date.now() + TRON_CONFIG.timeout;\n let txBlockNumber: number | null = null;\n let actualFeeTrx: number | null = null;\n\n while (Date.now() < deadline && !txBlockNumber) {\n try {\n const info = await tronWeb.trx.getTransactionInfo(txHash);\n\n if (info && info.blockNumber) {\n const result = info.receipt?.result;\n if (result !== \"SUCCESS\") {\n const msg = this.hexToAscii(info.resMessage) || null;\n let reason: string | null = msg;\n const cr = info.contractResult?.[0];\n if (cr && /^0x?08c379a0/i.test(cr)) {\n try {\n const clean = cr.replace(/^0x/, \"\");\n const len = parseInt(clean.slice(8 + 64, 8 + 64 + 64), 16);\n const strHex = clean.slice(\n 8 + 64 + 64,\n 8 + 64 + 64 + len * 2\n );\n const str = this.hexToAscii(\"0x\" + strHex);\n if (str) reason = str;\n } catch (e) {\n console.debug(\"TRON revert string decode error\", e);\n }\n }\n\n const error = new TransactionRevertedError(\n \"tron\",\n txHash,\n reason || \"Unknown error\"\n );\n return {\n completed: false,\n error: error.message,\n };\n }\n\n txBlockNumber = info.blockNumber;\n\n // Extract actual fee from transaction info\n const feeSun = info.fee || 0;\n actualFeeTrx = feeSun / 1_000_000; // Convert SUN to TRX\n console.log(`TRON transaction found in block ${txBlockNumber}, fee: ${actualFeeTrx} TRX`);\n }\n } catch (e) {\n console.debug(\"TRON getTransactionInfo error:\", e);\n }\n\n if (!txBlockNumber) {\n await new Promise((r) => setTimeout(r, TRON_CONFIG.pollingInterval));\n }\n }\n\n if (!txBlockNumber) {\n const error = new TransactionTimeoutError(\"tron\", txHash);\n return {\n completed: false,\n error: error.message,\n };\n }\n\n let confirmations = 0;\n while (Date.now() < deadline) {\n try {\n const currentBlock = await tronWeb.trx.getCurrentBlock();\n const currentBlockNumber =\n currentBlock?.block_header?.raw_data?.number;\n\n if (currentBlockNumber) {\n confirmations = currentBlockNumber - txBlockNumber;\n\n if (confirmations >= TRON_CONFIG.requiredConfirmations) {\n console.log(\n `TRON transaction confirmed in block ${txBlockNumber} with ${confirmations} confirmations`\n );\n return {\n completed: true,\n actualFeeValue: actualFeeTrx?.toString(),\n actualFeeSymbol: \"TRX\",\n };\n }\n\n console.log(\n `TRON transaction confirmations: ${confirmations}/${TRON_CONFIG.requiredConfirmations}`\n );\n }\n } catch (e) {\n console.debug(\"TRON getCurrentBlock error:\", e);\n }\n\n await new Promise((r) => setTimeout(r, TRON_CONFIG.pollingInterval));\n }\n\n const error = new TransactionTimeoutError(\"tron\", txHash);\n return {\n completed: false,\n error: error.message,\n };\n } catch (error) {\n const chainError = toChainStrategyError(\n error,\n \"tron\",\n \"waitForCompletion\"\n );\n return {\n completed: false,\n error: chainError.message,\n };\n }\n }\n\n getClient(): TronWebType | undefined {\n return typeof window !== \"undefined\" ? window.tronWeb : undefined;\n }\n\n /**\n * Check if TronLink wallet is actually installed\n * This excludes Bybit Wallet which also injects tronLink for compatibility\n */\n private isTronLinkInstalled(): boolean {\n if (typeof window === \"undefined\") {\n return false;\n }\n\n // Check if Bybit Wallet is installed (it has its own namespace)\n // If Bybit is installed, we don't want to treat it as TronLink\n const hasBybitWallet =\n typeof window.bybitWallet !== \"undefined\" &&\n typeof window.bybitWallet.tronLink !== \"undefined\";\n\n // If only Bybit is available, TronLink is not installed\n if (hasBybitWallet && !window.tronLink) {\n return false;\n }\n\n // Check if window.tronLink exists\n if (!window.tronLink) {\n return false;\n }\n\n // If both are installed, prefer TronLink\n // TronLink should have the tronLink property directly on window\n // while Bybit has it under window.bybitWallet.tronLink\n return true;\n }\n\n private hexToAscii(h?: string): string | null {\n if (!h) return null;\n const clean = h.replace(/^0x/, \"\");\n const bytes = clean.match(/.{1,2}/g) || [];\n try {\n return bytes.map((b) => String.fromCharCode(parseInt(b, 16))).join(\"\");\n } catch {\n return null;\n }\n }\n\n private toBase58(addr: string, tronWeb: TronWebType): string {\n if (!addr) {\n throw new InvalidAddressError(\"tron\", addr);\n }\n if (addr.startsWith(\"T\")) return addr;\n if (addr.startsWith(\"41\")) return tronWeb.address.fromHex(addr);\n if (addr.startsWith(\"0x\"))\n return tronWeb.address.fromHex(\"41\" + addr.slice(2));\n throw new InvalidAddressError(\"tron\", addr);\n }\n\n private parseTronStep(\n step: TransactionStep & (TronApproveStepExtra | TronTransferStepExtra),\n tx: TronTxLike,\n hexData: string\n ): ParsedTx {\n const cleanHex = (hexData ?? \"\").replace(/^0x/, \"\");\n\n if (step?.type === \"approve\") {\n const fromPb = this.extractApproveFromProtobuf(cleanHex);\n if (fromPb) {\n return {\n kind: \"approve\",\n token: fromPb.tokenAddress,\n spender: fromPb.spenderAddress,\n amount: fromPb.amount,\n };\n }\n const s = step as TransactionStep & TronApproveStepExtra;\n if (s.tokenAddress && s.spenderAddress && s.amount) {\n return {\n kind: \"approve\",\n token: s.tokenAddress,\n spender: s.spenderAddress,\n amount: s.amount,\n };\n }\n if (tx?.to && tx?.data) {\n return {\n kind: \"approve\",\n token: tx.to,\n spender: this.extractSpenderFromTxData(tx.data),\n amount: this.extractAmountFromTxData(tx.data),\n };\n }\n throw new InvalidTransactionDataError(\n \"tron\",\n \"Cannot parse approve transaction\"\n );\n }\n\n if (step?.type === \"transfer\" || step?.type === \"bridge\") {\n const s = step as TransactionStep & TronTransferStepExtra;\n if (s.tokenAddress && s.toAddress && s.amount) {\n return {\n kind: \"transfer\",\n token: s.tokenAddress,\n to: s.toAddress,\n amount: s.amount,\n };\n }\n if (tx?.to && tx?.data) {\n return {\n kind: \"transfer\",\n token: tx.to,\n to: this.extractRecipientFromTxData(tx.data),\n amount: this.extractAmountFromTxData(tx.data),\n };\n }\n const raw = this.extractContractAndInputFromProtobuf(cleanHex);\n if (raw) {\n return {\n kind: \"raw_call\",\n contract: raw.contractAddress,\n input: raw.input,\n callValue: raw.callValue,\n feeLimit: raw.feeLimit,\n };\n }\n throw new InvalidTransactionDataError(\n \"tron\",\n \"Cannot parse transfer/bridge transaction\"\n );\n }\n\n if (tx?.to && tx?.value && !tx?.data) {\n const v = BigInt(tx.value.toString());\n const amountSun = Number(v);\n if (!Number.isFinite(amountSun)) {\n throw new InvalidTransactionDataError(\"tron\", \"Invalid TRX value\");\n }\n return { kind: \"native\", to: tx.to, amountSun };\n }\n\n const raw = this.extractContractAndInputFromProtobuf(cleanHex);\n if (raw) {\n return {\n kind: \"raw_call\",\n contract: raw.contractAddress,\n input: raw.input,\n callValue: raw.callValue,\n feeLimit: raw.feeLimit,\n };\n }\n\n throw new InvalidTransactionDataError(\n \"tron\",\n `Unsupported TRON step type: ${step?.type ?? \"unknown\"}`\n );\n }\n\n private extractSpenderFromTxData(data: string): string {\n const clean = data.replace(/^0x/, \"\");\n if (clean.length < 74) {\n throw new InvalidTransactionDataError(\n \"tron\",\n \"Invalid transaction data length\"\n );\n }\n return \"41\" + clean.slice(32, 72);\n }\n\n private extractAmountFromTxData(data: string): string {\n const clean = data.replace(/^0x/, \"\");\n if (clean.length < 138) {\n throw new InvalidTransactionDataError(\n \"tron\",\n \"Invalid transaction data length\"\n );\n }\n const amountHex = clean.slice(72, 136);\n return BigInt(\"0x\" + amountHex).toString();\n }\n\n private extractRecipientFromTxData(data: string): string {\n const clean = data.replace(/^0x/, \"\");\n if (clean.length < 74) {\n throw new InvalidTransactionDataError(\n \"tron\",\n \"Invalid transaction data length\"\n );\n }\n return \"41\" + clean.slice(32, 72);\n }\n\n private extractContractAndInputFromProtobuf(hexData: string): {\n contractAddress: string;\n input: string;\n callValue?: number;\n feeLimit?: number;\n } | null {\n try {\n const h = hexData.replace(/^0x/, \"\");\n const contractAddressMatch = h.match(/121541([a-fA-F0-9]{40})/);\n if (!contractAddressMatch) return null;\n const contractAddress = \"41\" + contractAddressMatch[1];\n\n const startIdx =\n (contractAddressMatch.index ?? 0) + contractAddressMatch[0].length;\n const rest = h.slice(startIdx);\n\n const toBytes = (hex: string): Uint8Array =>\n new Uint8Array(hex.match(/.{1,2}/g)?.map((b) => parseInt(b, 16)) || []);\n const bytes = toBytes(rest);\n\n let i = 0;\n let callValue: number | undefined;\n\n if (bytes[i] === 0x18) {\n i += 1;\n let val = 0;\n let shift = 0;\n while (i < bytes.length) {\n const b = bytes[i++];\n val |= (b & 0x7f) << shift;\n if (b < 0x80) break;\n shift += 7;\n }\n callValue = val;\n }\n\n if (bytes[i] !== 0x22) {\n return { contractAddress, input: \"0x\", callValue };\n }\n i += 1;\n let len = 0;\n let shift = 0;\n while (i < bytes.length) {\n const b = bytes[i++];\n len |= (b & 0x7f) << shift;\n if (b < 0x80) break;\n shift += 7;\n }\n\n const dataBytes = bytes.slice(i, i + len);\n const input =\n \"0x\" +\n Array.from(dataBytes)\n .map((b) => b.toString(16).padStart(2, \"0\"))\n .join(\"\");\n\n return { contractAddress, input, callValue };\n } catch {\n return null;\n }\n }\n\n private extractApproveFromProtobuf(hexData: string): {\n tokenAddress: string;\n spenderAddress: string;\n amount: string;\n } | null {\n try {\n const h = hexData.replace(/^0x/, \"\");\n const approveSelector = \"095ea7b3\";\n if (!h.includes(approveSelector)) return null;\n\n const contractAddressMatch = h.match(/121541([a-fA-F0-9]{40})/);\n if (!contractAddressMatch) return null;\n\n const tokenAddress = \"41\" + contractAddressMatch[1];\n const approveIndex = h.indexOf(approveSelector);\n if (approveIndex === -1) return null;\n\n const dataAfterSelector = h.slice(approveIndex + 8);\n if (dataAfterSelector.length < 128) return null;\n\n const spenderPadded = dataAfterSelector.slice(0, 64);\n const spenderHex = \"41\" + spenderPadded.slice(-40);\n\n const amountHex = dataAfterSelector.slice(64, 128).replace(/^0+/, \"\");\n let amount = \"0\";\n if (amountHex) amount = BigInt(\"0x\" + amountHex).toString();\n\n if (amount === \"0\") {\n const hexEnd = h.slice(-64).replace(/^0+/, \"\");\n if (hexEnd && hexEnd !== \"0\" && hexEnd.length <= 16) {\n amount = BigInt(\"0x\" + hexEnd).toString();\n }\n }\n\n return { tokenAddress, spenderAddress: spenderHex, amount };\n } catch {\n return null;\n }\n }\n\n private async buildApprove(\n tronWeb: TronWebType,\n p: {\n token: string;\n spender: string;\n amount: string;\n from: string;\n feeLimit?: number;\n }\n ) {\n const res = await tronWeb.transactionBuilder.triggerSmartContract(\n p.token,\n \"approve(address,uint256)\",\n { feeLimit: p.feeLimit ?? TRON_CONFIG.feeLimit, callValue: 0 },\n [\n { type: \"address\", value: p.spender },\n { type: \"uint256\", value: p.amount },\n ],\n p.from\n );\n if (!res?.transaction) {\n throw new TransactionFailedError(\n \"tron\",\n \"Failed to build approve transaction\"\n );\n }\n return res.transaction;\n }\n\n private async buildTransferTrc20(\n tronWeb: TronWebType,\n p: {\n token: string;\n to: string;\n amount: string;\n from: string;\n feeLimit?: number;\n }\n ) {\n const res = await tronWeb.transactionBuilder.triggerSmartContract(\n p.token,\n \"transfer(address,uint256)\",\n { feeLimit: p.feeLimit ?? TRON_CONFIG.feeLimit, callValue: 0 },\n [\n { type: \"address\", value: p.to },\n { type: \"uint256\", value: p.amount },\n ],\n p.from\n );\n if (!res?.transaction) {\n throw new TransactionFailedError(\n \"tron\",\n \"Failed to build transfer transaction\"\n );\n }\n return res.transaction;\n }\n\n private async buildTransferTrx(\n tronWeb: TronWebType,\n p: { to: string; amountSun: number; from?: string }\n ) {\n return await tronWeb.transactionBuilder.sendTrx(p.to, p.amountSun, p.from);\n }\n\n private async buildRawCall(\n tronWeb: TronWebType,\n p: {\n contract: string;\n input: string;\n callValue?: number;\n feeLimit?: number;\n from: string;\n }\n ) {\n const res = await tronWeb.transactionBuilder.triggerSmartContract(\n p.contract,\n \"\",\n {\n feeLimit: p.feeLimit ?? TRON_CONFIG.feeLimit,\n callValue: p.callValue ?? 0,\n input: p.input.replace(/^0x/, \"\"),\n },\n [],\n p.from\n );\n if (!res?.transaction) {\n throw new TransactionFailedError(\n \"tron\",\n \"Failed to build raw call transaction\"\n );\n }\n return res.transaction;\n }\n\n private async signAndBroadcast(\n tronWeb: TronWebType,\n unsignedTx: Types.Transaction\n ) {\n const signed = await tronWeb.trx.sign(unsignedTx);\n const sent = await tronWeb.trx.sendRawTransaction(signed);\n if (!sent?.result || !sent?.txid) {\n throw new TransactionFailedError(\n \"tron\",\n \"Broadcast failed: \" + JSON.stringify(sent)\n );\n }\n return { txid: sent.txid as string };\n }\n\n /**\n * Check if a transaction has been solidified (confirmed by solidityNode)\n * This is an additional check for critical transactions to ensure they are\n * truly confirmed and available through the solidityNode API.\n *\n * Usage: Call this method after waitForCompletion for high-value transactions\n * to get additional assurance that the transaction is solidified.\n *\n * @param txHash - Transaction hash to check\n * @returns true if the transaction is solidified, false otherwise\n */\n async checkSolidified(txHash: string): Promise<boolean> {\n try {\n const tronWeb = this.getClient();\n if (!tronWeb) {\n return false;\n }\n\n const info = await tronWeb.trx.getTransactionInfo(txHash);\n\n if (!info || !info.blockNumber) {\n console.debug(\n \"Transaction not yet solidified (no blockNumber in info)\"\n );\n return false;\n }\n\n const result = info.receipt?.result;\n if (result === \"SUCCESS\") {\n console.log(\n `Transaction ${txHash} is solidified in block ${info.blockNumber}`\n );\n return true;\n }\n\n console.debug(`Transaction solidified but result is: ${result}`);\n return false;\n } catch (error) {\n console.debug(\"Error checking solidified status:\", error);\n return false;\n }\n }\n}\n","import { useMemo, type ReactNode } from \"react\";\nimport type { TonConnectUI } from \"@tonconnect/ui-react\";\nimport type { TonClient } from \"@ton/ton\";\nimport { ChainStrategyRegistry } from \"./chain-strategy-registry\";\nimport { EvmChainStrategy } from \"./evm-chain-strategy\";\nimport { TonChainStrategy } from \"./ton-chain-strategy\";\nimport { TronChainStrategy } from \"./tron-chain-strategy\";\nimport { ChainStrategyContext } from \"./chain-strategy-context\";\n\nimport type { PublicClient } from \"viem\";\n\nexport interface EvmWalletConfig {\n address: string | undefined;\n isConnected: boolean;\n disconnect: () => void;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n walletClient: any;\n publicClient: PublicClient | undefined;\n}\n\nexport interface TonWalletConfig {\n tonConnectUI: TonConnectUI | null;\n address: string | null;\n}\n\nexport interface TronWalletConfig {\n address: string | null;\n connected: boolean;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n select: (adapterName: any) => void;\n connect: () => Promise<void>;\n disconnect: () => Promise<void>;\n}\n\nexport interface ChainStrategyProviderProps {\n children: ReactNode;\n evmWallet: EvmWalletConfig;\n tonWallet: TonWalletConfig;\n tronWallet: TronWalletConfig;\n tonClient?: TonClient;\n tonApiKey?: string;\n}\n\nexport interface ChainStrategyContextValue {\n chainRegistry: ChainStrategyRegistry;\n}\n\nexport function ChainStrategyProvider({\n children,\n evmWallet,\n tonWallet,\n tronWallet,\n tonClient,\n tonApiKey,\n}: ChainStrategyProviderProps) {\n const evmStrategy = useMemo(\n () =>\n new EvmChainStrategy({\n evmAddress: evmWallet.address,\n evmIsConnected: evmWallet.isConnected,\n evmDisconnect: evmWallet.disconnect,\n walletClient: evmWallet.walletClient,\n publicClient: evmWallet.publicClient,\n }),\n [\n evmWallet.address,\n evmWallet.isConnected,\n evmWallet.disconnect,\n evmWallet.walletClient,\n evmWallet.publicClient,\n ]\n );\n\n const tonStrategy = useMemo(\n () =>\n new TonChainStrategy({\n tonConnectUI: tonWallet.tonConnectUI,\n tonAddress: tonWallet.address,\n tonClient,\n tonApiKey,\n }),\n [tonWallet.tonConnectUI, tonWallet.address, tonClient, tonApiKey]\n );\n\n const tronStrategy = useMemo(\n () =>\n new TronChainStrategy({\n tronAddress: tronWallet.address,\n tronConnected: tronWallet.connected,\n tronSelect: tronWallet.select,\n tronConnect: tronWallet.connect,\n tronDisconnect: tronWallet.disconnect,\n }),\n [\n tronWallet.address,\n tronWallet.connected,\n tronWallet.select,\n tronWallet.connect,\n tronWallet.disconnect,\n ]\n );\n\n const chainRegistry = useMemo(\n () => new ChainStrategyRegistry([evmStrategy, tonStrategy, tronStrategy]),\n [evmStrategy, tonStrategy, tronStrategy]\n );\n\n // Memoize context value to prevent unnecessary re-renders\n const value: ChainStrategyContextValue = useMemo(\n () => ({\n chainRegistry,\n }),\n [chainRegistry]\n );\n\n \n\n return (\n <ChainStrategyContext.Provider value={value}>\n {children}\n </ChainStrategyContext.Provider>\n );\n}\n","import { create } from \"zustand\";\n\ninterface ConnectedWalletState {\n tonConnected: boolean;\n metaMaskConnected: boolean;\n tronConnected: boolean;\n}\n\ninterface ConnectedWalletActions {\n setTonConnected: (connected: boolean) => void;\n setMetaMaskConnected: (connected: boolean) => void;\n setTronConnected: (connected: boolean) => void;\n hasAnyWallet: () => boolean;\n}\n\ntype ConnectedWalletStore = ConnectedWalletState & ConnectedWalletActions;\n\nexport const useConnectedWalletsStore = create<ConnectedWalletStore>((set, get) => ({\n tonConnected: false,\n metaMaskConnected: false,\n tronConnected: false,\n\n setTonConnected: (connected) => set({ tonConnected: connected }),\n setMetaMaskConnected: (connected) => set({ metaMaskConnected: connected }),\n setTronConnected: (connected) => set({ tronConnected: connected }),\n \n hasAnyWallet: () => {\n const state = get();\n return state.tonConnected || state.metaMaskConnected || state.tronConnected;\n },\n}));","import {\n Dialog,\n DialogContent,\n DialogHeader,\n DialogTitle,\n} from \"@/components/ui/dialog\";\nimport { useBridgeTranslation } from \"../../i18n/BridgeI18nProvider\";\nimport { Badge } from \"@/components/ui/badge\";\nimport { InfoIcon } from \"../../assets/icons/InfoIcon\";\nimport { Tip } from \"../ui/tip\";\nimport { TokenSymbol } from \"../ui/token-symbol\";\nimport { cn } from \"@/lib/utils\";\nimport {\n useSettingsStore,\n type GasPreset,\n gasPresetToDisplayAmount,\n gasPresetToUsdValue,\n} from \"../../store/use-settings-store\";\nimport { useChainsStore } from \"../../store/use-chains-store\";\nimport { useTokensStore } from \"../../store/use-token-store\";\nimport { formatUsd, formatPercentage } from \"../../utils/formatters\";\nimport { RoutePriority } from \"../../types\";\n\ninterface SettingsModalProps {\n isOpen: boolean;\n onClose: () => void;\n}\n\nconst gasPresets: GasPreset[] = [\"auto\", \"none\", \"medium\", \"max\"];\nconst slippagePresets = [\"0.5%\", \"1.0%\", \"5.0%\"] as const;\nconst routePresets: RoutePriority[] = [\n RoutePriority.FASTEST,\n RoutePriority.CHEAPEST,\n RoutePriority.RECOMMENDED,\n];\n\nexport const SettingsModal = ({ isOpen, onClose }: SettingsModalProps) => {\n const { t } = useBridgeTranslation();\n const { toChain } = useChainsStore();\n const { tokens } = useTokensStore();\n\n const {\n slippageBps,\n routePriority,\n gasPreset,\n setSlippageBps,\n setRoutePriority,\n setGasPreset,\n } = useSettingsStore();\n\n const slippagePercent = formatPercentage(slippageBps, 1);\n\n const activeSlippagePreset = slippagePresets.find(\n (preset) => parseFloat(preset.replace(\"%\", \"\")) === slippageBps / 100\n );\n\n const dstNativeToken = toChain?.nativeCurrency;\n const nativeTokenPrice =\n tokens?.find(\n (t) =>\n t.chainKey === toChain?.chainKey &&\n t.symbol?.toLowerCase() === dstNativeToken?.symbol?.toLowerCase()\n )?.price?.usd || 0;\n\n const gasDisplayAmount = gasPresetToDisplayAmount(\n gasPreset,\n toChain?.chainKey,\n dstNativeToken?.decimals || 18\n );\n const gasUsdValue = gasPresetToUsdValue(\n gasPreset,\n nativeTokenPrice,\n toChain?.chainKey,\n dstNativeToken?.decimals || 18\n );\n\n const activeBtn =\n \"bg-primary hover:bg-primary/80 text-primary-foreground transition-colors\";\n const notActiveBtn =\n \"bg-accent hover:bg-accent/80 text-accent-foreground transition-colors\";\n\n return (\n <Dialog open={isOpen} onOpenChange={(open) => !open && onClose()}>\n <DialogContent onOpenAutoFocus={(e) => e.preventDefault()} className=\"p-10 pt-8 max-w-md\">\n <DialogHeader className=\"text-left\">\n <DialogTitle className=\"text-2xl leading-8\">{t(\"settings.title\")}</DialogTitle>\n </DialogHeader>\n\n <div className=\"space-y-5\">\n <div className=\"flex flex-col gap-5\">\n <div className=\"flex justify-between items-center\">\n <div className=\"flex items-center gap-2\">\n <p className=\"text-muted-foreground text-sm font-medium leading-4\">\n {t(\"settings.gasOnDestination\")}\n </p>\n <Tip text={t(\"settings.gasOnDestination\")}>\n <InfoIcon className=\"w-4 h-4 text-muted-foreground\" />\n </Tip>\n </div>\n <p className=\"text-foreground text-sm font-medium leading-4\">\n {formatUsd(gasUsdValue)}\n </p>\n </div>\n\n <div className=\"flex items-center justify-between gap-3\">\n <div className=\"flex items-center w-1/3 gap-2 shrink-0\">\n <TokenSymbol\n symbol={dstNativeToken?.symbol || \"eth\"}\n className=\"h-4 w-4 rounded-full\"\n alt={\n dstNativeToken?.symbol ||\n t(\"common.nativeToken\", { defaultValue: \"Native Token\" })\n }\n />\n <div className=\"flex items-center gap-2\">\n <p className=\"text-lg text-foreground leading-5 font-semibold h-5\">\n {gasDisplayAmount % 1 === 0\n ? gasDisplayAmount.toFixed(0)\n : gasDisplayAmount.toFixed(\n gasDisplayAmount < 0.001 ? 6 : 3\n )}\n </p>\n </div>\n </div>\n\n <div className=\"flex items-center gap-2\">\n {gasPresets.map((g) => (\n <Badge\n key={g}\n onClick={() => setGasPreset(g)}\n className={cn(\n \"cursor-pointer h-7 rounded px-2\",\n gasPreset === g ? activeBtn : notActiveBtn\n )}\n >\n {t(`settings.gasPresets.${g}`)}\n </Badge>\n ))}\n </div>\n </div>\n </div>\n\n <hr />\n\n <div className=\"flex flex-col gap-5\">\n <div className=\"flex justify-between items-center\">\n <div className=\"flex items-center gap-2\">\n <p className=\"text-muted-foreground text-sm font-medium leading-4\">\n {t(\"settings.slippageTolerance\")}\n </p>\n <Tip text={t(\"settings.slippageTolerance\")}>\n <InfoIcon className=\"w-4 h-4 text-muted-foreground\" />\n </Tip>\n </div>\n {slippageBps >= 500 && (\n <p className=\"text-destructive text-xs font-medium\">\n {t(\"settings.highSlippageWarning\", {\n defaultValue: \"High slippage warning\",\n })}\n </p>\n )}\n </div>\n <div className=\"flex items-center justify-between gap-6\">\n <div className=\"flex items-center gap-2\">\n <p className=\"text-lg text-foreground leading-5 font-semibold h-5\">\n {slippagePercent}\n </p>\n </div>\n\n <div className=\"flex items-center gap-2\">\n {slippagePresets.map((p) => (\n <Badge\n key={p}\n onClick={() => {\n const bps = parseFloat(p.replace(\"%\", \"\")) * 100;\n setSlippageBps(bps);\n }}\n className={cn(\n \"cursor-pointer h-7 rounded px-2\",\n activeSlippagePreset === p ? activeBtn : notActiveBtn\n )}\n >\n {p}\n </Badge>\n ))}\n </div>\n </div>\n </div>\n\n <hr />\n\n <div className=\"flex flex-col gap-5\">\n <div className=\"flex justify-between items-center\">\n <div className=\"flex items-center gap-2\">\n <p className=\"text-muted-foreground text-sm font-medium leading-4\">\n {t(\"settings.routePriority\")}\n </p>\n <Tip text={t(\"settings.routePriority\")}>\n <InfoIcon className=\"w-4 h-4 text-muted-foreground\" />\n </Tip>\n </div>\n </div>\n <div className=\"flex items-center justify-end gap-2\">\n {routePresets.map((r) => (\n <Badge\n key={r}\n onClick={() => setRoutePriority(r)}\n className={cn(\n \"cursor-pointer h-7 rounded px-2\",\n routePriority === r ? activeBtn : notActiveBtn\n )}\n >\n {t(`settings.routePresets.${r}`)}\n </Badge>\n ))}\n </div>\n </div>\n </div>\n </DialogContent>\n </Dialog>\n );\n};\n","import { useCallback, useEffect, useMemo, useState } from \"react\";\nimport { useBridgeTranslation } from \"../../i18n/BridgeI18nProvider\";\nimport {\n Dialog,\n DialogContent,\n DialogHeader,\n DialogTitle,\n} from \"@/components/ui/dialog\";\nimport { Button } from \"@/components/ui/button\";\nimport { Skeleton } from \"@/components/ui/skeleton\";\nimport { useAddresses } from \"../../hooks/use-addresses\";\nimport { useChainsStore } from \"../../store/use-chains-store\";\nimport { useTokensStore } from \"../../store/use-token-store\";\nimport { useConnectedWalletsStore } from \"../../store/use-connected-wallets-store\";\nimport { useBalances } from \"../../hooks/api/use-balances\";\nimport { formatBalance, formatUsd } from \"../../utils/formatters\";\nimport { TokenSymbol } from \"../ui/token-symbol\";\nimport { SearchInput } from \"../ui/search-input\";\nimport type { Token, TokenPrice } from \"../../types\";\nimport { cn } from \"@/lib/utils\";\n\ntype Tab = \"my\" | \"all\";\n\ntype AssetItem = { symbol: string; name: string; price?: TokenPrice };\n\ninterface GroupedTokens {\n withBalance: AssetItem[];\n onSrcChain: AssetItem[];\n willChangeSrcChain: AssetItem[];\n}\n\ninterface Props {\n isOpen: boolean;\n onClose: () => void;\n items: Token[];\n onChangeAsset: (symbol: string) => void;\n}\n\n// TokenRow component\ninterface TokenRowProps {\n symbol: string;\n name: string;\n isSelected: boolean;\n hasAnyWallet: boolean;\n balance: number;\n usdValue: number;\n isBalanceLoading: boolean;\n onPick: () => void;\n}\n\nconst TokenRow = ({\n symbol,\n name,\n isSelected,\n hasAnyWallet,\n balance,\n usdValue,\n isBalanceLoading,\n onPick,\n}: TokenRowProps) => {\n return (\n <Button\n onClick={onPick}\n className={`w-full px-5 rounded-xs bg-transparent flex items-center justify-between gap-3 hover:bg-accent hover:scale-100 ${\n isSelected ? \"border border-primary\" : \"\"\n }`}\n >\n <div className=\"flex items-center gap-3\">\n <TokenSymbol\n symbol={symbol}\n className=\"w-8 h-8 rounded-full\"\n alt={symbol}\n />\n <div className=\"flex flex-col items-start gap-1\">\n <p className=\"font-semibold text-foreground text-sm leading-4 truncate flex items-center gap-1\">\n {symbol}\n </p>\n <div className=\"text-xs leading-3 text-muted-foreground truncate\">\n {name}\n </div>\n </div>\n </div>\n\n <div className=\"text-right space-y-1\">\n {isBalanceLoading && hasAnyWallet ? (\n <div className=\"flex flex-col items-end gap-1\">\n <Skeleton className=\"h-5 w-16 rounded-md\" />\n <Skeleton className=\"h-3 w-12 rounded-md\" />\n </div>\n ) : (\n <>\n <div className=\"font-semibold text-foreground text-sm leading-4 truncate\">\n {hasAnyWallet ? formatBalance(balance) : \"—\"}\n </div>\n <div className=\"text-xs leading-3 text-muted-foreground/50\">\n {hasAnyWallet && balance > 0 && usdValue > 0\n ? formatUsd(usdValue)\n : \"—\"}\n </div>\n </>\n )}\n </div>\n </Button>\n );\n};\n\nexport const TokenSelectModal = ({\n isOpen,\n onClose,\n items,\n onChangeAsset,\n}: Props) => {\n const { t } = useBridgeTranslation();\n\n // Local state\n const [query, setQuery] = useState(\"\");\n const [tab, setTab] = useState<Tab>(\"my\");\n const [manualTabSwitch, setManualTabSwitch] = useState(false);\n\n // Stores and hooks\n const { srcAddress } = useAddresses();\n const { fromChain, setFromChain, chains } = useChainsStore();\n const { assetMatrix, selectedAssetSymbol } = useTokensStore();\n const { hasAnyWallet } = useConnectedWalletsStore();\n\n const { getBalance, query: balancesQuery } = useBalances(\n fromChain?.chainKey,\n srcAddress\n );\n\n const effectiveTab: Tab = hasAnyWallet() ? tab : \"all\";\n useEffect(() => {\n if (!hasAnyWallet()) setTab(\"all\");\n }, [hasAnyWallet]);\n\n const getTokenUsdValue = useCallback(\n (symbol: string, price?: number) => {\n const bal = getBalance(symbol);\n return bal > 0 && price ? bal * price : 0;\n },\n [getBalance]\n );\n\n const isTokenAvailableOnChain = useCallback(\n (symbol: string, chainKey?: string): boolean => {\n if (!assetMatrix || !chainKey) return false;\n const tokensByChain = assetMatrix[symbol.toUpperCase()];\n return !!tokensByChain?.[chainKey];\n },\n [assetMatrix]\n );\n\n const findFirstAvailableChain = useCallback(\n (symbol: string) => {\n if (!assetMatrix || !chains) return undefined;\n const tokensByChain = assetMatrix[symbol.toUpperCase()];\n if (!tokensByChain) return undefined;\n for (const chainKey of Object.keys(tokensByChain)) {\n const chain = chains.find((c) => c.chainKey === chainKey);\n if (chain) return chain;\n }\n return undefined;\n },\n [assetMatrix, chains]\n );\n\n const groupedTokens = useMemo((): GroupedTokens => {\n const q = query.trim().toLowerCase();\n const filtered = q\n ? items.filter(\n (a) =>\n a.name.toLowerCase().includes(q) ||\n a.symbol.toLowerCase().includes(q)\n )\n : items;\n\n const groups: GroupedTokens = {\n withBalance: [],\n onSrcChain: [],\n willChangeSrcChain: [],\n };\n\n for (const asset of filtered) {\n const hasBalance = getBalance(asset.symbol) > 0;\n const onSrc = isTokenAvailableOnChain(asset.symbol, fromChain?.chainKey);\n\n if (hasBalance && onSrc) {\n groups.withBalance.push(asset);\n } else if (onSrc) {\n groups.onSrcChain.push(asset);\n } else {\n const availableChain = findFirstAvailableChain(asset.symbol);\n if (availableChain) groups.willChangeSrcChain.push(asset);\n }\n }\n\n const sortByUsd = (a: AssetItem, b: AssetItem) =>\n getTokenUsdValue(b.symbol, b.price?.usd) -\n getTokenUsdValue(a.symbol, a.price?.usd);\n const sortAZ = (a: AssetItem, b: AssetItem) =>\n a.symbol.localeCompare(b.symbol);\n\n groups.withBalance.sort(sortByUsd);\n groups.onSrcChain.sort(sortAZ);\n groups.willChangeSrcChain.sort(sortAZ);\n\n return groups;\n }, [\n items,\n query,\n getBalance,\n isTokenAvailableOnChain,\n fromChain?.chainKey,\n findFirstAvailableChain,\n getTokenUsdValue,\n ]);\n\n const myTokens = useMemo(\n () => groupedTokens.withBalance,\n [groupedTokens.withBalance]\n );\n\n // Auto-switch to 'all' tab when no results in 'my' tab\n useEffect(() => {\n if (\n query.trim() !== \"\" &&\n tab === \"my\" &&\n myTokens.length === 0 &&\n !manualTabSwitch\n ) {\n setTab(\"all\");\n }\n }, [query, tab, myTokens.length, manualTabSwitch]);\n\n // Auto-return to 'my' tab when results appear\n useEffect(() => {\n if (\n query.trim() !== \"\" &&\n tab === \"all\" &&\n myTokens.length > 0 &&\n !manualTabSwitch\n ) {\n setTab(\"my\");\n }\n }, [query, tab, myTokens.length, manualTabSwitch]);\n\n // Reset manual tab switch flag when query changes\n useEffect(() => {\n setManualTabSwitch(false);\n }, [query]);\n\n const resetState = useCallback(() => {\n setQuery(\"\");\n setTab(\"my\");\n setManualTabSwitch(false);\n }, []);\n\n const handleClose = useCallback(() => {\n resetState();\n onClose();\n }, [onClose, resetState]);\n\n useEffect(() => {\n if (!isOpen) resetState();\n }, [isOpen, resetState]);\n\n useEffect(() => () => resetState(), [resetState]);\n\n const onPick = (sym: string, willChangeSrcChain = false) => {\n if (willChangeSrcChain) {\n const newChain = findFirstAvailableChain(sym);\n if (newChain && setFromChain) setFromChain(newChain);\n }\n onChangeAsset(sym);\n handleClose();\n };\n\n const tokensToRender = useMemo(() => {\n if (effectiveTab === \"my\") {\n return myTokens.map((token) => ({\n token,\n willChangeSrc: false,\n }));\n }\n\n const mainTokens = [\n ...groupedTokens.withBalance.map((token) => ({\n token,\n willChangeSrc: false,\n })),\n ...groupedTokens.onSrcChain.map((token) => ({\n token,\n willChangeSrc: false,\n })),\n ];\n\n return mainTokens;\n }, [effectiveTab, myTokens, groupedTokens]);\n\n const willChangeSrcTokens = useMemo(\n () =>\n groupedTokens.willChangeSrcChain.map((token) => ({\n token,\n willChangeSrc: true,\n })),\n [groupedTokens.willChangeSrcChain]\n );\n\n const hasNoResults =\n tokensToRender.length === 0 && willChangeSrcTokens.length === 0;\n\n return (\n <Dialog open={isOpen} onOpenChange={(open) => !open && handleClose()}>\n <DialogContent className=\"md:max-h-[90dvh] md:h-[90dvh] overflow-hidden flex flex-col p-10 pt-8 max-w-md\">\n <DialogHeader className=\"text-left\">\n <DialogTitle className=\"text-2xl leading-8\">\n {t(\"bridge.selectToken\")}\n </DialogTitle>\n </DialogHeader>\n\n <SearchInput\n placeholder={t(\"bridge.searchToken\")}\n value={query}\n onChange={setQuery}\n />\n\n {hasAnyWallet() && (\n <div className=\"flex gap-2\">\n <Button\n variant={tab === \"my\" ? \"default\" : \"ghost\"}\n onClick={() => {\n setTab(\"my\");\n setManualTabSwitch(true);\n }}\n size=\"sm\"\n className={cn(\n \"px-4 cursor-pointer\",\n tab !== \"my\" && \"bg-muted hover:bg-accent\"\n )}\n >\n {t(\"bridge.myTokens\")}\n </Button>\n <Button\n variant={tab === \"all\" ? \"default\" : \"ghost\"}\n onClick={() => {\n setTab(\"all\");\n setManualTabSwitch(true);\n }}\n size=\"sm\"\n className={cn(\n \"px-4 cursor-pointer\",\n tab !== \"all\" && \"bg-muted hover:bg-accent\"\n )}\n >\n {t(\"bridge.allTokens\")}\n </Button>\n </div>\n )}\n\n <div className=\"flex-1 overflow-y-auto -mx-5\">\n {hasNoResults ? (\n <p className=\"text-sm text-muted-foreground px-12 py-2 h-28 flex items-center justify-center text-center\">\n {t(\"bridge.tokenNotFound\")}\n </p>\n ) : (\n <>\n {effectiveTab === \"my\" && myTokens.length === 0 && (\n <p className=\"leading-4 px-5 text-base text-muted-foreground uppercase py-2\">\n {t(\"bridge.noBalancesFound\")}\n </p>\n )}\n\n {tokensToRender.map(({ token, willChangeSrc }) => {\n const bal = getBalance(token.symbol);\n const usd = getTokenUsdValue(token.symbol, token.price?.usd);\n const isSelected =\n selectedAssetSymbol?.toUpperCase() ===\n token.symbol.toUpperCase();\n\n return (\n <TokenRow\n key={`${effectiveTab}:${token.symbol}`}\n symbol={token.symbol}\n name={token.name}\n isSelected={!!isSelected}\n hasAnyWallet={hasAnyWallet()}\n balance={bal}\n usdValue={usd}\n isBalanceLoading={\n balancesQuery.isLoading || balancesQuery.isFetching\n }\n onPick={() => onPick(token.symbol, willChangeSrc)}\n />\n );\n })}\n\n {effectiveTab === \"all\" && willChangeSrcTokens.length > 0 && (\n <>\n <div className=\"px-5 flex leading-4 text-base py-2 text-muted-foreground uppercase mt-8\">\n <p>{t(\"bridge.willChangeSourceChain\")}</p>\n </div>\n {willChangeSrcTokens.map(({ token, willChangeSrc }) => {\n const bal = getBalance(token.symbol);\n const usd = getTokenUsdValue(\n token.symbol,\n token.price?.usd\n );\n const isSelected =\n selectedAssetSymbol?.toUpperCase() ===\n token.symbol.toUpperCase();\n\n return (\n <TokenRow\n key={`will:${token.symbol}`}\n symbol={token.symbol}\n name={token.name}\n isSelected={!!isSelected}\n hasAnyWallet={hasAnyWallet()}\n balance={bal}\n usdValue={usd}\n isBalanceLoading={\n balancesQuery.isLoading || balancesQuery.isFetching\n }\n onPick={() => onPick(token.symbol, willChangeSrc)}\n />\n );\n })}\n </>\n )}\n </>\n )}\n </div>\n </DialogContent>\n </Dialog>\n );\n};\n","import { useCallback, useState } from \"react\";\nimport { useQueryClient } from \"@tanstack/react-query\";\nimport { useAddresses } from \"../use-addresses\";\nimport { useBridgeQuoteStore } from \"../../store/use-bridge-quote-store\";\nimport { useConnectedWalletsStore } from \"../../store/use-connected-wallets-store\";\nimport { useChainsStore } from \"../../store/use-chains-store\";\n\nexport function useBridgeRefresh() {\n const qc = useQueryClient();\n const { srcAddress, dstAddress } = useAddresses();\n const { fromChain, toChain } = useChainsStore();\n const { setLoading: setQLoading, triggerRefetch } = useBridgeQuoteStore();\n const { hasAnyWallet } = useConnectedWalletsStore();\n const [spinning, setSpinning] = useState(false);\n\n const refresh = useCallback(async () => {\n setSpinning(true);\n try {\n setQLoading();\n\n const queries = [\n qc.invalidateQueries({ queryKey: [\"tokens\"] }),\n qc.invalidateQueries({ queryKey: [\"chains\"] }),\n ];\n\n if (hasAnyWallet()) {\n if (srcAddress) {\n queries.push(\n qc.invalidateQueries({ queryKey: [\"srcTokens\", srcAddress] })\n );\n if (fromChain?.chainKey) {\n queries.push(\n qc.invalidateQueries({\n queryKey: [\"balances\", fromChain.chainKey, srcAddress],\n })\n );\n }\n }\n if (dstAddress) {\n queries.push(\n qc.invalidateQueries({ queryKey: [\"dstTokens\", dstAddress] })\n );\n if (toChain?.chainKey) {\n queries.push(\n qc.invalidateQueries({\n queryKey: [\"balances\", toChain.chainKey, dstAddress],\n })\n );\n }\n }\n }\n\n await Promise.all(queries);\n\n triggerRefetch();\n\n } finally {\n setSpinning(false);\n }\n }, [\n qc,\n srcAddress,\n dstAddress,\n fromChain?.chainKey,\n toChain?.chainKey,\n hasAnyWallet,\n setQLoading,\n triggerRefetch,\n ]);\n\n return { refresh, spinning };\n}\n","import { Button } from \"@/components/ui/button\";\nimport { ReloadIcon } from \"../../assets/icons\";\nimport { useCallback, useState } from \"react\";\nimport { useBridgeRefresh } from \"../../hooks/bridge/use-bridge-refresh\";\n\nexport const RefreshButton = () => {\n const { refresh, spinning } = useBridgeRefresh();\n const [turns, setTurns] = useState(0);\n\n const handleRefresh = useCallback(() => {\n setTurns((t) => t + 1);\n refresh();\n }, [refresh]);\n\n return (\n <Button\n onClick={handleRefresh}\n disabled={spinning}\n variant=\"secondary\"\n className=\"bg-bridge-button text-bridge-button-foreground hover:text-bridge-button-foreground h-9 w-11\"\n size=\"sm\"\n >\n <ReloadIcon\n style={{\n transform: `rotate(${turns * 180}deg)`,\n transition: \"transform 300ms linear\",\n }}\n />\n </Button>\n );\n};\n","import { useMemo } from \"react\";\nimport { useBridgeTranslation } from \"../../i18n/BridgeI18nProvider\";\nimport { ArrowDownIcon } from \"../../assets/icons\";\nimport { Button } from \"@/components/ui/button\";\nimport type { Token } from \"../../types\";\nimport { TokenSymbol } from \"./token-symbol\";\n\ntype SelectTokenButtonProps = {\n onClick?: () => void;\n token?: Token;\n};\n\nexport const SelectTokenButton = ({\n onClick,\n token,\n}: SelectTokenButtonProps) => {\n const { t } = useBridgeTranslation();\n\n const label = useMemo(() => {\n return token?.symbol ?? t(\"bridge.selectToken\");\n }, [token, t]);\n\n return (\n <Button\n onClick={onClick}\n size=\"sm\"\n variant=\"secondary\"\n className=\"shrink-0 gap-2 h-9 !pl-2 bg-bridge-button text-bridge-button-foreground hover:text-bridge-button-foreground\"\n type=\"button\"\n aria-label={label}\n >\n <div className=\"flex gap-2 items-center\">\n <TokenSymbol\n symbol={token?.symbol ?? \"default\"}\n className=\"w-6 h-6 rounded-full\"\n alt={label}\n />\n <span>{label}</span>\n </div>\n <ArrowDownIcon className=\"w-4 h-4\" />\n </Button>\n );\n};\n","import { useMemo } from \"react\";\nimport { useBridgeTranslation } from \"../../i18n/BridgeI18nProvider\";\nimport { useTokensStore } from \"../../store/use-token-store\";\nimport { listAssetsForSelect } from \"../../lib/assets\";\nimport { useModal } from \"../../hooks/ui/use-modal\";\nimport { BoltIcon } from \"../../assets/icons\";\nimport { Button } from \"@/components/ui/button\";\nimport { SettingsModal } from \"../modals/settings-modal\";\nimport { TokenSelectModal } from \"../modals/token-select-modal\";\nimport { RefreshButton } from \"../ui/refresh-button\";\nimport { SelectTokenButton } from \"../ui/select-token-button\";\nimport { CardAction, CardHeader, CardTitle } from \"@/components/ui/card\";\n\nexport const Toolbar: React.FC = () => {\n const { t } = useBridgeTranslation();\n const { isOpen, onClose, onOpen } = useModal();\n\n const {\n isOpen: isOpenSettings,\n onClose: onCloseSettings,\n onOpen: onOpenSettings,\n } = useModal();\n\n const { tokens, selectedAssetSymbol, setSelectedAssetSymbol } =\n useTokensStore();\n\n const assets = useMemo(() => listAssetsForSelect(tokens || []), [tokens]);\n\n const current = useMemo(() => {\n if (!assets.length) return undefined;\n if (!selectedAssetSymbol) return assets[0];\n const sum = selectedAssetSymbol.toUpperCase();\n return assets.find((a) => a.symbol.toUpperCase() === sum) ?? assets[0];\n }, [assets, selectedAssetSymbol]);\n\n return (\n <CardHeader className=\"gap-y-0 p-0 flex flex-row justify-between items-center\">\n <CardTitle className=\"flex items-center gap-3\">\n <span className=\"text-sm font-normal leading-4 text-muted-foreground\">\n {t(\"bridge.selectToken\")}\n </span>\n\n <SelectTokenButton token={current} onClick={onOpen} />\n </CardTitle>\n\n <CardAction className=\"flex items-center gap-3\">\n <RefreshButton />\n <Button\n onClick={onOpenSettings}\n size=\"sm\"\n className=\"bg-bridge-button text-bridge-button-foreground hover:text-bridge-button-foreground h-9 w-11\"\n variant=\"secondary\"\n >\n <BoltIcon stroke=\"currentColor\" />\n </Button>\n </CardAction>\n\n <TokenSelectModal\n isOpen={isOpen}\n onClose={onClose}\n items={assets}\n onChangeAsset={(symbol) => {\n setSelectedAssetSymbol(symbol);\n onClose();\n }}\n />\n\n <SettingsModal isOpen={isOpenSettings} onClose={onCloseSettings} />\n </CardHeader>\n );\n};\n","import { useEffect, useRef } from \"react\";\nimport { useConnectedWalletsStore } from \"../store/use-connected-wallets-store\";\nimport { useChainsStore } from \"../store/use-chains-store\";\n\ninterface UseAutoSelectNetworkParams {\n tonAddress?: string;\n tronConnected: boolean;\n evmIsConnected: boolean;\n}\n\n/**\n * Hook for automatically selecting the appropriate network when first wallet is connected\n *\n * When a user connects their first wallet (no previous wallets connected):\n * - TON wallet → selects TON network\n * - TRON wallet → selects TRON network\n * - EVM wallet → selects Ethereum network\n */\nexport const useAutoSelectNetwork = ({\n tonAddress,\n tronConnected,\n evmIsConnected,\n}: UseAutoSelectNetworkParams) => {\n const { hasAnyWallet } = useConnectedWalletsStore();\n const { chains, setFromChain } = useChainsStore();\n\n // Track previous wallet connection state\n const previousHadWallet = useRef(hasAnyWallet());\n\n useEffect(() => {\n const currentHasWallet = hasAnyWallet();\n const isFirstWalletConnection = !previousHadWallet.current && currentHasWallet;\n\n if (isFirstWalletConnection && chains?.length) {\n let targetChainKey: string | null = null;\n\n // Determine which wallet was connected\n if (tonAddress) {\n targetChainKey = \"ton\";\n } else if (tronConnected) {\n targetChainKey = \"tron\";\n } else if (evmIsConnected) {\n targetChainKey = \"ethereum\";\n }\n\n // Find and select the appropriate chain\n if (targetChainKey) {\n const matchingChain = chains.find(\n (chain) => chain.chainKey.toLowerCase() === targetChainKey\n );\n\n if (matchingChain) {\n setFromChain(matchingChain);\n }\n }\n }\n\n // Update the ref for next comparison\n previousHadWallet.current = currentHasWallet;\n }, [\n tonAddress,\n tronConnected,\n evmIsConnected,\n hasAnyWallet,\n chains,\n setFromChain,\n ]);\n};\n","import {\n useBridgeTranslation,\n BridgeI18nProvider,\n} from \"./i18n/BridgeI18nProvider\";\nimport { SwapButton } from \"./components/ui/swap-button\";\nimport { SwapSection } from \"./components/layout/swap-section\";\nimport { AnotherAddress } from \"./components/layout/another-address\";\nimport { useMemo, useEffect, useCallback } from \"react\";\nimport { useSwapModel } from \"./hooks/bridge/use-swap-model\";\nimport { useChainsStore } from \"./store/use-chains-store\";\nimport { useTokensStore } from \"./store/use-token-store\";\nimport { Details } from \"./components/layout/details\";\nimport { SubmitButton } from \"./components/ui/submit-button\";\nimport { WalletSelectModal } from \"./components/modals/wallet-select-modal\";\nimport { cn } from \"@/lib/utils\";\nimport { StatusStepsDialog } from \"./components/status-dialog/status-dialog\";\nimport { Toaster } from \"sonner\";\nimport type { Chain } from \"./types\";\nimport { useTokens } from \"./hooks/api/use-tokens\";\nimport { useChains } from \"./hooks/api/use-chains\";\nimport { useBridgeQuoteStore } from \"./store/use-bridge-quote-store\";\nimport { resolveTokenOnChainFromMatrix } from \"./lib/quote\";\nimport { getQuoteAmounts } from \"./utils/quote-helpers\";\nimport { ChainStrategyProvider } from \"./chains/chain-strategy-provider\";\nimport { useTonConnectUI, useTonAddress } from \"@tonconnect/ui-react\";\nimport {\n useAccount,\n useWalletClient,\n useDisconnect,\n usePublicClient,\n} from \"wagmi\";\nimport type { PublicClient } from \"viem\";\nimport { useWallet } from \"@tronweb3/tronwallet-adapter-react-hooks\";\nimport { useConnectedWalletsStore } from \"./store/use-connected-wallets-store\";\nimport type { TonClient } from \"@ton/ton\";\nimport { Card, CardContent, CardFooter } from \"@/components/ui/card\";\nimport { Toolbar } from \"./components/layout/toolbar\";\nimport { useAutoSelectNetwork } from \"./hooks/use-auto-select-network\";\n\nexport interface TransactionIcons {\n confirm?: React.ReactNode;\n progress?: React.ReactNode;\n success?: React.ReactNode;\n failed?: React.ReactNode;\n}\n\nexport interface EvaaBridgeProps {\n className?: string;\n tonClient?: TonClient;\n tonApiKey?: string;\n defaultLanguage?: string;\n transactionIcons?: TransactionIcons;\n onInitialized?: () => void;\n onSwapStart?: (data: SwapStartData) => void;\n onSwapSuccess?: (data: SwapSuccessData) => void;\n onSwapError?: (error: SwapErrorData) => void;\n onAmountChange?: (amount: string) => void;\n onChainChange?: (data: ChainChangeData) => void;\n}\n\nexport interface SwapStartData {\n fromChain: string;\n toChain: string;\n amount: string;\n tokenSymbol: string;\n}\n\nexport interface SwapSuccessData {\n fromChain: string;\n toChain: string;\n amount: string;\n tokenSymbol: string;\n transactionHash?: string;\n}\n\nexport interface SwapErrorData {\n error: string;\n fromChain: string;\n toChain: string;\n amount: string;\n tokenSymbol: string;\n}\n\nexport interface ChainChangeData {\n type: \"from\" | \"to\";\n chain: Chain;\n}\n\nconst EvaaBridgeWithProviders = (props: EvaaBridgeProps) => {\n const [tonConnectUI] = useTonConnectUI();\n const tonAddress = useTonAddress();\n\n const { address: evmAddress, isConnected: evmIsConnected } = useAccount();\n const { disconnect: evmDisconnect } = useDisconnect();\n const { data: walletClient } = useWalletClient();\n const publicClient = usePublicClient() as PublicClient | undefined;\n\n const {\n address: tronAddress,\n connected: tronConnected,\n select: tronSelect,\n connect: tronConnect,\n disconnect: tronDisconnect,\n } = useWallet();\n\n const { setTonConnected, setMetaMaskConnected, setTronConnected } =\n useConnectedWalletsStore();\n\n useEffect(() => {\n setTonConnected(!!tonAddress);\n }, [tonAddress, setTonConnected]);\n\n useEffect(() => {\n setMetaMaskConnected(!!evmIsConnected);\n }, [evmIsConnected, setMetaMaskConnected]);\n\n useEffect(() => {\n setTronConnected(!!tronConnected);\n }, [tronConnected, setTronConnected]);\n\n // Auto-select appropriate network when first wallet is connected\n useAutoSelectNetwork({\n tonAddress,\n tronConnected,\n evmIsConnected,\n });\n\n return (\n <BridgeI18nProvider defaultLanguage={props.defaultLanguage}>\n <ChainStrategyProvider\n evmWallet={{\n address: evmAddress,\n isConnected: evmIsConnected,\n disconnect: evmDisconnect,\n walletClient,\n publicClient,\n }}\n tonWallet={{\n tonConnectUI,\n address: tonAddress,\n }}\n tronWallet={{\n address: tronAddress,\n connected: tronConnected,\n select: tronSelect,\n connect: tronConnect,\n disconnect: tronDisconnect,\n }}\n tonClient={props.tonClient}\n tonApiKey={props.tonApiKey}\n >\n <EvaaBridgeContent {...props} />\n </ChainStrategyProvider>\n </BridgeI18nProvider>\n );\n};\n\nconst EvaaBridgeContent = ({\n className,\n transactionIcons,\n onInitialized,\n onAmountChange,\n onChainChange,\n}: EvaaBridgeProps = {}) => {\n const { t } = useBridgeTranslation();\n\n useTokens();\n useChains();\n\n const swap = useSwapModel();\n const { fromChain, toChain } = swap;\n const { selectedAssetSymbol, assetMatrix } = useTokensStore();\n const { quote } = useBridgeQuoteStore();\n const amount = swap.amount;\n const internalOnAmountChange = swap.actions.setAmount;\n const loading = swap.loadingQuote;\n const fromBalance = swap.fromBalance;\n const receiveBalance = swap.receiveBalance;\n const allowedFromChains = swap.allowedFromChains;\n const allowedToChains = swap.allowedToChains;\n const { chains } = useChainsStore();\n\n // Compute output amount from quote\n const outputAmount = useMemo(() => {\n if (!quote || loading) return \"\";\n const srcToken = resolveTokenOnChainFromMatrix(\n assetMatrix,\n selectedAssetSymbol,\n fromChain?.chainKey\n );\n const dstToken = resolveTokenOnChainFromMatrix(\n assetMatrix,\n selectedAssetSymbol,\n toChain?.chainKey\n );\n const { outputHumanRounded } = getQuoteAmounts(quote, srcToken, dstToken);\n return outputHumanRounded;\n }, [\n quote,\n loading,\n assetMatrix,\n selectedAssetSymbol,\n fromChain?.chainKey,\n toChain?.chainKey,\n ]);\n\n useEffect(() => {\n if (chains?.length && onInitialized) {\n onInitialized();\n }\n }, [chains, onInitialized]);\n\n const handleAmountChange = useCallback(\n (newAmount: string) => {\n internalOnAmountChange(newAmount);\n onAmountChange?.(newAmount);\n },\n [internalOnAmountChange, onAmountChange]\n );\n\n const handleFromChainChange = useCallback(\n (chain?: Chain) => {\n if (!chain) return;\n swap.actions.setFromChain(chain);\n onChainChange?.({\n type: \"from\",\n chain,\n });\n },\n [swap.actions, onChainChange]\n );\n\n const handleToChainChange = useCallback(\n (chain?: Chain) => {\n if (!chain) return;\n swap.actions.setToChain(chain);\n onChainChange?.({\n type: \"to\",\n chain,\n });\n },\n [swap.actions, onChainChange]\n );\n\n const destinationChains = useMemo(() => {\n if (!chains || !selectedAssetSymbol || !assetMatrix) {\n return allowedToChains ?? [];\n }\n\n const result = [...chains];\n\n return result.filter((c) => c.chainKey !== fromChain?.chainKey);\n }, [\n allowedToChains,\n assetMatrix,\n chains,\n fromChain?.chainKey,\n selectedAssetSymbol,\n ]);\n\n const sourceChains = useMemo(() => {\n if (!chains || !assetMatrix) {\n return allowedFromChains ?? [];\n }\n\n return [...chains];\n }, [chains, assetMatrix, allowedFromChains]);\n\n return (\n <>\n <Card\n className={cn(\n \"max-w-md w-full mx-auto flex flex-col p-5 gap-5 relative\",\n className\n )}\n >\n <Toolbar />\n\n <CardContent className=\"space-y-[1px] p-0\">\n <SwapSection\n className=\"rounded-t-sm\"\n label={t(\"bridge.sourceNetwork\")}\n balance={fromBalance}\n chain={fromChain}\n chains={sourceChains}\n allowedChains={allowedFromChains}\n amount={amount}\n isSource\n onAmountChange={handleAmountChange}\n onSelect={handleFromChainChange}\n />\n\n <SwapButton />\n\n <SwapSection\n label={t(\"bridge.destinationNetwork\")}\n balance={receiveBalance}\n chain={toChain}\n chains={destinationChains}\n allowedChains={allowedToChains}\n amount={outputAmount}\n readOnlyAmount\n onSelect={handleToChainChange}\n />\n\n <AnotherAddress />\n\n <SubmitButton />\n </CardContent>\n <CardFooter className=\"p-0\">\n <Details />\n </CardFooter>\n </Card>\n <WalletSelectModal />\n\n <StatusStepsDialog icons={transactionIcons} />\n <Toaster position=\"top-right\" richColors />\n </>\n );\n};\n\nexport const EvaaBridge = EvaaBridgeWithProviders;\n","type DeliveryStatus = {\n status: 'pending' | 'delivered' | 'failed';\n srcTxHash?: string;\n dstTxHash?: string;\n raw?: unknown;\n};\n\ninterface DeliveryStatusParams {\n srcChainKey: string;\n dstChainKey?: string;\n srcTxHash: string;\n}\n\ninterface PollUntilDeliveredParams {\n srcChainKey: string;\n dstChainKey?: string;\n srcTxHash: string;\n intervalMs?: number;\n timeoutMs?: number;\n signal?: AbortSignal;\n onUpdate?: (st: DeliveryStatus) => void;\n}\n\ninterface ApiResponse {\n [key: string]: unknown;\n}\n\nasync function tryFetch(url: string): Promise<ApiResponse | null> {\n try {\n const res = await fetch(url);\n if (!res.ok) return null;\n return await res.json();\n } catch {\n return null;\n }\n}\n\nfunction interpretStatus(data: unknown): DeliveryStatus | null {\n if (!data) return null;\n const d = Array.isArray(data) ? data[0] : data;\n const lower = JSON.stringify(d).toLowerCase();\n const hasDst = d?.dstTxHash || d?.dstTx || d?.destinationTxHash || d?.dstHash;\n const delivered = d?.delivered === true || d?.status === 'delivered' || d?.status === 'completed' || (typeof hasDst === 'string' && hasDst.length > 0);\n const failed = d?.status === 'failed' || lower.includes('failed') || lower.includes('reverted');\n if (delivered) return { status: 'delivered', srcTxHash: d?.srcTxHash || d?.srcTx, dstTxHash: hasDst || undefined, raw: d };\n if (failed) return { status: 'failed', srcTxHash: d?.srcTxHash || d?.srcTx, raw: d };\n return { status: 'pending', srcTxHash: d?.srcTxHash || d?.srcTx, raw: d };\n}\n\nexport async function getDeliveryStatus(params: DeliveryStatusParams): Promise<DeliveryStatus | null> {\n const query = new URLSearchParams();\n query.set('srcChainKey', params.srcChainKey);\n if (params.dstChainKey) query.set('dstChainKey', params.dstChainKey);\n query.set('srcTxHash', params.srcTxHash);\n\n const bases = [\n `https://stargate.finance/api/v1/transactions?${query.toString()}`,\n `https://stargate.finance/api/v1/txStatus?${query.toString()}`,\n `https://stargate.finance/api/v1/messageStatus?${query.toString()}`,\n ];\n\n for (const url of bases) {\n const json = await tryFetch(url);\n const st = interpretStatus(json);\n if (st) return st;\n }\n return null;\n}\n\nexport async function pollUntilDelivered(args: PollUntilDeliveredParams): Promise<DeliveryStatus> {\n const { intervalMs = 7000, timeoutMs = 12 * 60 * 1000 } = args;\n const start = Date.now();\n while (true) {\n if (args.signal?.aborted) throw new Error('aborted');\n const st = await getDeliveryStatus({\n srcChainKey: args.srcChainKey,\n dstChainKey: args.dstChainKey,\n srcTxHash: args.srcTxHash,\n });\n if (st) args.onUpdate?.(st);\n if (st?.status === 'delivered') return st;\n if (st?.status === 'failed') return st;\n if (Date.now() - start > timeoutMs) return { status: 'failed', srcTxHash: args.srcTxHash };\n await new Promise((r) => setTimeout(r, intervalMs));\n }\n}\n\n"],"names":["initReactI18next","useEffect","jsx","I18nextProvider","useTranslation","input","create","normalizeTickerSymbol","useEvmAccount","useTonAddress","useWallet","useMemo","resolveTokenOnChainFromMatrix","Address","createContext","useContext","TonClient","usePublicClient","useState","useQuery","useCallback","jsxs","Button","cn","Skeleton","BASE_URL","forwardRef","Fragment","Input","Dialog","DialogContent","DialogHeader","DialogTitle","TonKeeperIcon","Switch","AnimatePresence","motion","X","Tooltip","TooltipTrigger","TooltipContent","Accordion","AccordionItem","AccordionTrigger","AccordionContent","srcChain","useConnect","buttonVariants","toast","DialogDescription","Loader2","AlertCircleIcon","DialogFooter","CheckCircle2","Clock","isAddress","formatUnits","error","beginCell","BrowserProvider","chainError","Contract","parseUnits","transaction","loadMessage","Cell","storeMessage","TronLinkAdapterName","raw","shift","t","Badge","useQueryClient","CardHeader","CardTitle","CardAction","useRef","useTonConnectUI","useAccount","useDisconnect","useWalletClient","Card","CardContent","CardFooter","Toaster","lower"],"mappings":"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","x_google_ignoreList":[2]}
|
|
1
|
+
{"version":3,"file":"evaa-bridge.cjs","sources":["../src/registry/default/evaa-bridge/i18n/bridge-i18n.ts","../src/registry/default/evaa-bridge/i18n/BridgeI18nProvider.tsx","../node_modules/zustand/esm/middleware.mjs","../src/registry/default/evaa-bridge/store/use-chains-store.ts","../src/registry/default/evaa-bridge/lib/token-normalization.ts","../src/registry/default/evaa-bridge/lib/assets.ts","../src/registry/default/evaa-bridge/store/use-token-store.ts","../src/registry/default/evaa-bridge/lib/amount.ts","../src/registry/default/evaa-bridge/hooks/use-addresses.ts","../src/registry/default/evaa-bridge/store/use-bridge-quote-store.ts","../src/registry/default/evaa-bridge/types.ts","../src/registry/default/evaa-bridge/store/use-settings-store.ts","../src/registry/default/evaa-bridge/api/quotes.ts","../src/registry/default/evaa-bridge/lib/quote.ts","../src/registry/default/evaa-bridge/lib/address-validation.ts","../src/registry/default/evaa-bridge/chains/chain-strategy-context.tsx","../src/registry/default/evaa-bridge/hooks/use-chain-strategies.ts","../src/registry/default/evaa-bridge/utils/formatters.ts","../src/registry/default/evaa-bridge/chains/config.ts","../src/registry/default/evaa-bridge/utils/quote-helpers.ts","../src/registry/default/evaa-bridge/hooks/bridge/use-bridge-quote.ts","../src/registry/default/evaa-bridge/api/api.ts","../src/registry/default/evaa-bridge/hooks/use-chain-derivations.ts","../src/registry/default/evaa-bridge/hooks/api/use-balances.ts","../src/registry/default/evaa-bridge/hooks/bridge/use-swap-model.ts","../src/registry/default/evaa-bridge/assets/icons/ArrowDownIcon.tsx","../src/registry/default/evaa-bridge/assets/icons/BoltIcon.tsx","../src/registry/default/evaa-bridge/assets/icons/ReloadIcon.tsx","../src/registry/default/evaa-bridge/assets/icons/WalletIcon.tsx","../src/registry/default/evaa-bridge/assets/icons/ArrowSwapIcon.tsx","../src/registry/default/evaa-bridge/assets/icons/SearchIcon.tsx","../src/registry/default/evaa-bridge/assets/icons/StargateIcon.tsx","../src/registry/default/evaa-bridge/assets/icons/MetaMaskIcon.tsx","../src/registry/default/evaa-bridge/assets/icons/WalletConnectIcon.tsx","../src/registry/default/evaa-bridge/assets/icons/TonConnectIcon.tsx","../src/registry/default/evaa-bridge/assets/icons/TronLinkIcon.tsx","../src/registry/default/evaa-bridge/assets/icons/ExitIcon.tsx","../src/registry/default/evaa-bridge/components/ui/swap-button.tsx","../src/registry/default/evaa-bridge/components/ui/wallet-balance.tsx","../src/registry/default/evaa-bridge/components/ui/network-symbol.tsx","../src/registry/default/evaa-bridge/components/ui/select-network-button.tsx","../src/registry/default/evaa-bridge/components/ui/token-input.tsx","../src/registry/default/evaa-bridge/hooks/ui/use-modal.ts","../src/registry/default/evaa-bridge/components/ui/search-input.tsx","../src/registry/default/evaa-bridge/components/modals/chain-select-modal.tsx","../src/registry/default/evaa-bridge/hooks/ui/use-wallet-select-modal.ts","../src/registry/default/evaa-bridge/components/icons/edit-icon.tsx","../src/registry/default/evaa-bridge/components/ui/wallet-inline-button.tsx","../src/registry/default/evaa-bridge/components/layout/swap-section.tsx","../src/registry/default/evaa-bridge/store/use-custom-address-store.ts","../src/registry/default/evaa-bridge/hooks/use-is-address-valid.ts","../src/registry/default/evaa-bridge/components/layout/another-address.tsx","../src/registry/default/evaa-bridge/assets/icons/InfoIcon.tsx","../src/registry/default/evaa-bridge/components/ui/tip.tsx","../src/registry/default/evaa-bridge/components/ui/token-symbol.tsx","../src/registry/default/evaa-bridge/hooks/use-gas-estimate.ts","../src/registry/default/evaa-bridge/components/layout/details.tsx","../src/registry/default/evaa-bridge/store/use-transaction-store.ts","../src/registry/default/evaa-bridge/chains/errors.ts","../src/registry/default/evaa-bridge/hooks/use-transaction.ts","../src/registry/default/evaa-bridge/hooks/use-balance-check.ts","../src/registry/default/evaa-bridge/hooks/bridge/use-amount-limits.ts","../src/registry/default/evaa-bridge/hooks/bridge/use-silent-validations.ts","../src/registry/default/evaa-bridge/components/ui/main-button.tsx","../node_modules/events/events.js","../node_modules/tslib/tslib.es6.js","../node_modules/quick-format-unescaped/index.js","../node_modules/@walletconnect/universal-provider/node_modules/pino/browser.js","../node_modules/@walletconnect/environment/dist/cjs/crypto.js","../node_modules/@walletconnect/environment/dist/cjs/env.js","../node_modules/@walletconnect/environment/dist/cjs/index.js","../node_modules/cross-fetch/dist/browser-ponyfill.js","../node_modules/@walletconnect/universal-provider/dist/index.es.js","../src/hooks/use-theme.ts","../src/registry/default/evaa-bridge/providers/tron-walletconnect-provider.tsx","../src/registry/default/evaa-bridge/components/ui/wallet-button.tsx","../src/registry/default/evaa-bridge/components/modals/wallet-select-modal.tsx","../src/registry/default/evaa-bridge/components/status-dialog/progress-step.tsx","../src/registry/default/evaa-bridge/components/status-dialog/failed-step.tsx","../src/registry/default/evaa-bridge/utils/explorer.ts","../src/registry/default/evaa-bridge/components/status-dialog/success-step.tsx","../src/registry/default/evaa-bridge/hooks/ui/use-countdown.tsx","../src/registry/default/evaa-bridge/components/status-dialog/confirm-step.tsx","../src/registry/default/evaa-bridge/components/status-dialog/status-dialog.tsx","../src/registry/default/evaa-bridge/hooks/api/use-tokens.ts","../src/registry/default/evaa-bridge/hooks/api/use-chains.ts","../src/registry/default/evaa-bridge/chains/chain-strategy-registry.ts","../src/registry/default/evaa-bridge/api/balances.ts","../src/registry/default/evaa-bridge/chains/evm-chain-strategy.ts","../src/registry/default/evaa-bridge/chains/ton-chain-strategy.ts","../src/registry/default/evaa-bridge/chains/tron-chain-strategy.ts","../src/registry/default/evaa-bridge/chains/chain-strategy-provider.tsx","../src/registry/default/evaa-bridge/store/use-connected-wallets-store.ts","../src/registry/default/evaa-bridge/components/modals/settings-modal.tsx","../src/registry/default/evaa-bridge/components/modals/token-select-modal.tsx","../src/registry/default/evaa-bridge/hooks/bridge/use-bridge-refresh.ts","../src/registry/default/evaa-bridge/components/ui/refresh-button.tsx","../src/registry/default/evaa-bridge/components/ui/select-token-button.tsx","../src/registry/default/evaa-bridge/components/layout/toolbar.tsx","../src/registry/default/evaa-bridge/hooks/use-auto-select-network.ts","../src/registry/default/evaa-bridge/evaa-bridge.tsx","../src/registry/default/evaa-bridge/api/tx.ts"],"sourcesContent":["import i18n from 'i18next';\nimport { initReactI18next } from 'react-i18next';\n\nimport en from './locales/en.json';\nimport ru from './locales/ru.json';\n\n// Create an isolated i18n instance for the bridge widget\n// This prevents conflicts with the consuming application's i18n\nconst bridgeI18n = i18n.createInstance();\n\nconst resources = {\n en: {\n 'evaa-bridge': en\n },\n ru: {\n 'evaa-bridge': ru\n }\n};\n\nbridgeI18n\n .use(initReactI18next)\n .init({\n resources,\n lng: 'en', // Will be overridden by defaultLanguage prop\n fallbackLng: 'en',\n debug: false,\n\n // Use a dedicated namespace to avoid conflicts\n defaultNS: 'evaa-bridge',\n ns: ['evaa-bridge'],\n\n interpolation: {\n escapeValue: false, // react already does escaping\n },\n });\n\nexport default bridgeI18n;\n","import { useEffect } from 'react';\nimport { I18nextProvider, useTranslation } from 'react-i18next';\nimport bridgeI18n from './bridge-i18n';\n\ninterface BridgeI18nProviderProps {\n children: React.ReactNode;\n defaultLanguage?: string;\n}\n\nexport function BridgeI18nProvider({\n children,\n defaultLanguage = 'en',\n}: BridgeI18nProviderProps) {\n useEffect(() => {\n // Set the language when the component mounts or when defaultLanguage changes\n if (bridgeI18n.language !== defaultLanguage) {\n bridgeI18n.changeLanguage(defaultLanguage);\n }\n }, [defaultLanguage]);\n\n return <I18nextProvider i18n={bridgeI18n}>{children}</I18nextProvider>;\n}\n\n/**\n * Custom hook for using translations within the bridge widget.\n * This ensures that translations are isolated from the parent application's i18n.\n *\n * @example\n * const { t } = useBridgeTranslation();\n * return <div>{t('common.loading')}</div>;\n */\nexport function useBridgeTranslation() {\n return useTranslation('evaa-bridge', { i18n: bridgeI18n });\n}\n","const reduxImpl = (reducer, initial) => (set, _get, api) => {\n api.dispatch = (action) => {\n set((state) => reducer(state, action), false, action);\n return action;\n };\n api.dispatchFromDevtools = true;\n return { dispatch: (...args) => api.dispatch(...args), ...initial };\n};\nconst redux = reduxImpl;\n\nconst trackedConnections = /* @__PURE__ */ new Map();\nconst getTrackedConnectionState = (name) => {\n const api = trackedConnections.get(name);\n if (!api) return {};\n return Object.fromEntries(\n Object.entries(api.stores).map(([key, api2]) => [key, api2.getState()])\n );\n};\nconst extractConnectionInformation = (store, extensionConnector, options) => {\n if (store === void 0) {\n return {\n type: \"untracked\",\n connection: extensionConnector.connect(options)\n };\n }\n const existingConnection = trackedConnections.get(options.name);\n if (existingConnection) {\n return { type: \"tracked\", store, ...existingConnection };\n }\n const newConnection = {\n connection: extensionConnector.connect(options),\n stores: {}\n };\n trackedConnections.set(options.name, newConnection);\n return { type: \"tracked\", store, ...newConnection };\n};\nconst removeStoreFromTrackedConnections = (name, store) => {\n if (store === void 0) return;\n const connectionInfo = trackedConnections.get(name);\n if (!connectionInfo) return;\n delete connectionInfo.stores[store];\n if (Object.keys(connectionInfo.stores).length === 0) {\n trackedConnections.delete(name);\n }\n};\nconst findCallerName = (stack) => {\n var _a, _b;\n if (!stack) return void 0;\n const traceLines = stack.split(\"\\n\");\n const apiSetStateLineIndex = traceLines.findIndex(\n (traceLine) => traceLine.includes(\"api.setState\")\n );\n if (apiSetStateLineIndex < 0) return void 0;\n const callerLine = ((_a = traceLines[apiSetStateLineIndex + 1]) == null ? void 0 : _a.trim()) || \"\";\n return (_b = /.+ (.+) .+/.exec(callerLine)) == null ? void 0 : _b[1];\n};\nconst devtoolsImpl = (fn, devtoolsOptions = {}) => (set, get, api) => {\n const { enabled, anonymousActionType, store, ...options } = devtoolsOptions;\n let extensionConnector;\n try {\n extensionConnector = (enabled != null ? enabled : (import.meta.env ? import.meta.env.MODE : void 0) !== \"production\") && window.__REDUX_DEVTOOLS_EXTENSION__;\n } catch (e) {\n }\n if (!extensionConnector) {\n return fn(set, get, api);\n }\n const { connection, ...connectionInformation } = extractConnectionInformation(store, extensionConnector, options);\n let isRecording = true;\n api.setState = ((state, replace, nameOrAction) => {\n const r = set(state, replace);\n if (!isRecording) return r;\n const action = nameOrAction === void 0 ? {\n type: anonymousActionType || findCallerName(new Error().stack) || \"anonymous\"\n } : typeof nameOrAction === \"string\" ? { type: nameOrAction } : nameOrAction;\n if (store === void 0) {\n connection == null ? void 0 : connection.send(action, get());\n return r;\n }\n connection == null ? void 0 : connection.send(\n {\n ...action,\n type: `${store}/${action.type}`\n },\n {\n ...getTrackedConnectionState(options.name),\n [store]: api.getState()\n }\n );\n return r;\n });\n api.devtools = {\n cleanup: () => {\n if (connection && typeof connection.unsubscribe === \"function\") {\n connection.unsubscribe();\n }\n removeStoreFromTrackedConnections(options.name, store);\n }\n };\n const setStateFromDevtools = (...a) => {\n const originalIsRecording = isRecording;\n isRecording = false;\n set(...a);\n isRecording = originalIsRecording;\n };\n const initialState = fn(api.setState, get, api);\n if (connectionInformation.type === \"untracked\") {\n connection == null ? void 0 : connection.init(initialState);\n } else {\n connectionInformation.stores[connectionInformation.store] = api;\n connection == null ? void 0 : connection.init(\n Object.fromEntries(\n Object.entries(connectionInformation.stores).map(([key, store2]) => [\n key,\n key === connectionInformation.store ? initialState : store2.getState()\n ])\n )\n );\n }\n if (api.dispatchFromDevtools && typeof api.dispatch === \"function\") {\n let didWarnAboutReservedActionType = false;\n const originalDispatch = api.dispatch;\n api.dispatch = (...args) => {\n if ((import.meta.env ? import.meta.env.MODE : void 0) !== \"production\" && args[0].type === \"__setState\" && !didWarnAboutReservedActionType) {\n console.warn(\n '[zustand devtools middleware] \"__setState\" action type is reserved to set state from the devtools. Avoid using it.'\n );\n didWarnAboutReservedActionType = true;\n }\n originalDispatch(...args);\n };\n }\n connection.subscribe((message) => {\n var _a;\n switch (message.type) {\n case \"ACTION\":\n if (typeof message.payload !== \"string\") {\n console.error(\n \"[zustand devtools middleware] Unsupported action format\"\n );\n return;\n }\n return parseJsonThen(\n message.payload,\n (action) => {\n if (action.type === \"__setState\") {\n if (store === void 0) {\n setStateFromDevtools(action.state);\n return;\n }\n if (Object.keys(action.state).length !== 1) {\n console.error(\n `\n [zustand devtools middleware] Unsupported __setState action format.\n When using 'store' option in devtools(), the 'state' should have only one key, which is a value of 'store' that was passed in devtools(),\n and value of this only key should be a state object. Example: { \"type\": \"__setState\", \"state\": { \"abc123Store\": { \"foo\": \"bar\" } } }\n `\n );\n }\n const stateFromDevtools = action.state[store];\n if (stateFromDevtools === void 0 || stateFromDevtools === null) {\n return;\n }\n if (JSON.stringify(api.getState()) !== JSON.stringify(stateFromDevtools)) {\n setStateFromDevtools(stateFromDevtools);\n }\n return;\n }\n if (!api.dispatchFromDevtools) return;\n if (typeof api.dispatch !== \"function\") return;\n api.dispatch(action);\n }\n );\n case \"DISPATCH\":\n switch (message.payload.type) {\n case \"RESET\":\n setStateFromDevtools(initialState);\n if (store === void 0) {\n return connection == null ? void 0 : connection.init(api.getState());\n }\n return connection == null ? void 0 : connection.init(getTrackedConnectionState(options.name));\n case \"COMMIT\":\n if (store === void 0) {\n connection == null ? void 0 : connection.init(api.getState());\n return;\n }\n return connection == null ? void 0 : connection.init(getTrackedConnectionState(options.name));\n case \"ROLLBACK\":\n return parseJsonThen(message.state, (state) => {\n if (store === void 0) {\n setStateFromDevtools(state);\n connection == null ? void 0 : connection.init(api.getState());\n return;\n }\n setStateFromDevtools(state[store]);\n connection == null ? void 0 : connection.init(getTrackedConnectionState(options.name));\n });\n case \"JUMP_TO_STATE\":\n case \"JUMP_TO_ACTION\":\n return parseJsonThen(message.state, (state) => {\n if (store === void 0) {\n setStateFromDevtools(state);\n return;\n }\n if (JSON.stringify(api.getState()) !== JSON.stringify(state[store])) {\n setStateFromDevtools(state[store]);\n }\n });\n case \"IMPORT_STATE\": {\n const { nextLiftedState } = message.payload;\n const lastComputedState = (_a = nextLiftedState.computedStates.slice(-1)[0]) == null ? void 0 : _a.state;\n if (!lastComputedState) return;\n if (store === void 0) {\n setStateFromDevtools(lastComputedState);\n } else {\n setStateFromDevtools(lastComputedState[store]);\n }\n connection == null ? void 0 : connection.send(\n null,\n // FIXME no-any\n nextLiftedState\n );\n return;\n }\n case \"PAUSE_RECORDING\":\n return isRecording = !isRecording;\n }\n return;\n }\n });\n return initialState;\n};\nconst devtools = devtoolsImpl;\nconst parseJsonThen = (stringified, fn) => {\n let parsed;\n try {\n parsed = JSON.parse(stringified);\n } catch (e) {\n console.error(\n \"[zustand devtools middleware] Could not parse the received json\",\n e\n );\n }\n if (parsed !== void 0) fn(parsed);\n};\n\nconst subscribeWithSelectorImpl = (fn) => (set, get, api) => {\n const origSubscribe = api.subscribe;\n api.subscribe = ((selector, optListener, options) => {\n let listener = selector;\n if (optListener) {\n const equalityFn = (options == null ? void 0 : options.equalityFn) || Object.is;\n let currentSlice = selector(api.getState());\n listener = (state) => {\n const nextSlice = selector(state);\n if (!equalityFn(currentSlice, nextSlice)) {\n const previousSlice = currentSlice;\n optListener(currentSlice = nextSlice, previousSlice);\n }\n };\n if (options == null ? void 0 : options.fireImmediately) {\n optListener(currentSlice, currentSlice);\n }\n }\n return origSubscribe(listener);\n });\n const initialState = fn(set, get, api);\n return initialState;\n};\nconst subscribeWithSelector = subscribeWithSelectorImpl;\n\nfunction combine(initialState, create) {\n return (...args) => Object.assign({}, initialState, create(...args));\n}\n\nfunction createJSONStorage(getStorage, options) {\n let storage;\n try {\n storage = getStorage();\n } catch (e) {\n return;\n }\n const persistStorage = {\n getItem: (name) => {\n var _a;\n const parse = (str2) => {\n if (str2 === null) {\n return null;\n }\n return JSON.parse(str2, options == null ? void 0 : options.reviver);\n };\n const str = (_a = storage.getItem(name)) != null ? _a : null;\n if (str instanceof Promise) {\n return str.then(parse);\n }\n return parse(str);\n },\n setItem: (name, newValue) => storage.setItem(name, JSON.stringify(newValue, options == null ? void 0 : options.replacer)),\n removeItem: (name) => storage.removeItem(name)\n };\n return persistStorage;\n}\nconst toThenable = (fn) => (input) => {\n try {\n const result = fn(input);\n if (result instanceof Promise) {\n return result;\n }\n return {\n then(onFulfilled) {\n return toThenable(onFulfilled)(result);\n },\n catch(_onRejected) {\n return this;\n }\n };\n } catch (e) {\n return {\n then(_onFulfilled) {\n return this;\n },\n catch(onRejected) {\n return toThenable(onRejected)(e);\n }\n };\n }\n};\nconst persistImpl = (config, baseOptions) => (set, get, api) => {\n let options = {\n storage: createJSONStorage(() => localStorage),\n partialize: (state) => state,\n version: 0,\n merge: (persistedState, currentState) => ({\n ...currentState,\n ...persistedState\n }),\n ...baseOptions\n };\n let hasHydrated = false;\n const hydrationListeners = /* @__PURE__ */ new Set();\n const finishHydrationListeners = /* @__PURE__ */ new Set();\n let storage = options.storage;\n if (!storage) {\n return config(\n (...args) => {\n console.warn(\n `[zustand persist middleware] Unable to update item '${options.name}', the given storage is currently unavailable.`\n );\n set(...args);\n },\n get,\n api\n );\n }\n const setItem = () => {\n const state = options.partialize({ ...get() });\n return storage.setItem(options.name, {\n state,\n version: options.version\n });\n };\n const savedSetState = api.setState;\n api.setState = (state, replace) => {\n savedSetState(state, replace);\n return setItem();\n };\n const configResult = config(\n (...args) => {\n set(...args);\n return setItem();\n },\n get,\n api\n );\n api.getInitialState = () => configResult;\n let stateFromStorage;\n const hydrate = () => {\n var _a, _b;\n if (!storage) return;\n hasHydrated = false;\n hydrationListeners.forEach((cb) => {\n var _a2;\n return cb((_a2 = get()) != null ? _a2 : configResult);\n });\n const postRehydrationCallback = ((_b = options.onRehydrateStorage) == null ? void 0 : _b.call(options, (_a = get()) != null ? _a : configResult)) || void 0;\n return toThenable(storage.getItem.bind(storage))(options.name).then((deserializedStorageValue) => {\n if (deserializedStorageValue) {\n if (typeof deserializedStorageValue.version === \"number\" && deserializedStorageValue.version !== options.version) {\n if (options.migrate) {\n const migration = options.migrate(\n deserializedStorageValue.state,\n deserializedStorageValue.version\n );\n if (migration instanceof Promise) {\n return migration.then((result) => [true, result]);\n }\n return [true, migration];\n }\n console.error(\n `State loaded from storage couldn't be migrated since no migrate function was provided`\n );\n } else {\n return [false, deserializedStorageValue.state];\n }\n }\n return [false, void 0];\n }).then((migrationResult) => {\n var _a2;\n const [migrated, migratedState] = migrationResult;\n stateFromStorage = options.merge(\n migratedState,\n (_a2 = get()) != null ? _a2 : configResult\n );\n set(stateFromStorage, true);\n if (migrated) {\n return setItem();\n }\n }).then(() => {\n postRehydrationCallback == null ? void 0 : postRehydrationCallback(stateFromStorage, void 0);\n stateFromStorage = get();\n hasHydrated = true;\n finishHydrationListeners.forEach((cb) => cb(stateFromStorage));\n }).catch((e) => {\n postRehydrationCallback == null ? void 0 : postRehydrationCallback(void 0, e);\n });\n };\n api.persist = {\n setOptions: (newOptions) => {\n options = {\n ...options,\n ...newOptions\n };\n if (newOptions.storage) {\n storage = newOptions.storage;\n }\n },\n clearStorage: () => {\n storage == null ? void 0 : storage.removeItem(options.name);\n },\n getOptions: () => options,\n rehydrate: () => hydrate(),\n hasHydrated: () => hasHydrated,\n onHydrate: (cb) => {\n hydrationListeners.add(cb);\n return () => {\n hydrationListeners.delete(cb);\n };\n },\n onFinishHydration: (cb) => {\n finishHydrationListeners.add(cb);\n return () => {\n finishHydrationListeners.delete(cb);\n };\n }\n };\n if (!options.skipHydration) {\n hydrate();\n }\n return stateFromStorage || configResult;\n};\nconst persist = persistImpl;\n\nexport { combine, createJSONStorage, devtools, persist, redux, subscribeWithSelector };\n","import { create } from \"zustand\";\nimport { persist, createJSONStorage } from \"zustand/middleware\";\nimport type { Chain } from \"../types\";\n\ninterface chainState {\n chains?: Chain[];\n fromChain?: Chain;\n toChain?: Chain;\n\n allowedFromChains?: Chain[];\n allowedToChains?: Chain[];\n isLoadingToChains: boolean;\n}\n\ninterface ChainActions {\n setChains: (data?: Chain[]) => Promise<void>;\n setFromChain: (data?: Chain) => void;\n setToChain: (data?: Chain) => void;\n\n setAllowedFromChains: (data?: Chain[]) => void;\n setAllowedToChains: (data?: Chain[]) => void;\n setIsLoadingToChains: (v: boolean) => void;\n\n swapChains: () => void;\n}\n\ntype ChainStoreType = chainState & ChainActions;\n\nexport const useChainsStore = create<ChainStoreType>()(\n persist(\n (set, get) => ({\n chains: undefined,\n fromChain: undefined,\n toChain: undefined,\n\n allowedFromChains: undefined,\n allowedToChains: undefined,\n isLoadingToChains: false,\n\n setChains: async (data) => {\n const prev = get().chains;\n const same = (() => {\n if (!prev && !data) return true;\n if (!prev || !data) return false;\n if (prev.length !== data.length) return false;\n for (let i = 0; i < prev.length; i++) {\n if (prev[i]?.chainKey !== data[i]?.chainKey) return false;\n }\n return true;\n })();\n if (same) return;\n set({ chains: data });\n },\n setFromChain: (data) => {\n const prev = get().fromChain;\n if ((prev?.chainKey ?? null) === (data?.chainKey ?? null)) return;\n set({ fromChain: data });\n },\n setToChain: (data) => {\n const prev = get().toChain;\n if ((prev?.chainKey ?? null) === (data?.chainKey ?? null)) return;\n set({ toChain: data });\n },\n\n setAllowedFromChains: (data) => {\n const prev = get().allowedFromChains;\n const same = (() => {\n if (!prev && !data) return true;\n if (!prev || !data) return false;\n if (prev.length !== data.length) return false;\n for (let i = 0; i < prev.length; i++) {\n if (prev[i]?.chainKey !== data[i]?.chainKey) return false;\n }\n return true;\n })();\n if (same) return;\n set({ allowedFromChains: data });\n },\n setAllowedToChains: (data) => {\n const prev = get().allowedToChains;\n const same = (() => {\n if (!prev && !data) return true;\n if (!prev || !data) return false;\n if (prev.length !== data.length) return false;\n for (let i = 0; i < prev.length; i++) {\n if (prev[i]?.chainKey !== data[i]?.chainKey) return false;\n }\n return true;\n })();\n if (same) return;\n set({ allowedToChains: data });\n },\n setIsLoadingToChains: (v) => set({ isLoadingToChains: v }),\n\n swapChains: () =>\n set((state) => ({\n fromChain: state.toChain,\n toChain: state.fromChain,\n })),\n }),\n {\n name: 'evaa-bridge-chains',\n storage: createJSONStorage(() => sessionStorage),\n partialize: (state) => ({\n fromChain: state.fromChain,\n toChain: state.toChain,\n }),\n }\n )\n);\n","import type { Token } from \"../types\";\n\n/**\n * Нормализует строку символа токена\n * - USD₮ → USDT\n * - Приводит к верхнему регистру\n * - Убирает все символы кроме букв и цифр\n */\nexport function normalizeTickerSymbol(s: string): string {\n return s\n .toUpperCase()\n .replace(/₮/g, \"T\")\n .replace(/[^A-Z0-9]/g, \"\");\n}\n\n/**\n * Нормализует символ токена, убирая вариативные суффиксы и префиксы\n *\n * Примеры трансформаций:\n * - USD₮0 → USDT\n * - USD₮0.s → USDT\n * - USDT0 → USDT\n * - USDC.e → USDC\n * - S*USDC.e → USDC\n * - USDC.n → USDC\n */\nexport function normalizeTokenSymbol(token: Token): Token {\n // Нормализация символа:\n // 1. USD₮ → USDT\n // 2. Убираем суффиксы \"0\", \".s\", \".S\" и их комбинации для USDT\n // 3. Убираем суффиксы \".e\", \".n\" для USDC, и префикс \"S*\" для USDC\n let normalizedSymbol = token.symbol\n .toUpperCase()\n .replace(/₮/g, \"T\");\n\n // Убираем префикс S* для USDC: S*USDC.e → USDC.e\n normalizedSymbol = normalizedSymbol.replace(/^S\\*/, \"\");\n\n // Убираем суффиксы для USDT: USDT0.S → USDT, USDT0 → USDT, USDT.S → USDT\n normalizedSymbol = normalizedSymbol\n .replace(/0\\.S$/i, \"\") // USDT0.s → USDT\n .replace(/0$/, \"\") // USDT0 → USDT\n .replace(/\\.S$/i, \"\"); // USDT.s → USDT\n\n // Убираем суффиксы для USDC: USDC.e → USDC, USDC.n → USDC\n normalizedSymbol = normalizedSymbol\n .replace(/\\.E$/i, \"\") // USDC.e → USDC\n .replace(/\\.N$/i, \"\"); // USDC.n → USDC\n\n return {\n ...token,\n symbol: normalizedSymbol,\n };\n}\n","import type { Token } from \"../types\";\nimport { normalizeTickerSymbol } from \"./token-normalization\";\n\nexport type AssetMatrix = Record<string, Record<string, Token>>;\n\n// Закреплённые сверху (как у Stargate)\nconst POPULAR_ORDER = [\n \"USDT\",\n \"USDC\",\n \"ETH\",\n \"BTC\",\n \"WETH\",\n \"WBTC\",\n \"STG\",\n \"DAI\",\n \"TUSD\",\n \"FDUSD\",\n \"USDD\",\n \"USDE\",\n \"PYUSD\",\n \"FRAX\",\n];\n\nconst STABLES = new Set([\n \"USDT\",\n \"USDC\",\n \"DAI\",\n \"TUSD\",\n \"FDUSD\",\n \"USDD\",\n \"USDE\",\n \"PYUSD\",\n \"FRAX\",\n]);\n\nexport function buildAssetMatrix(tokens: Token[]): AssetMatrix {\n const m: AssetMatrix = {};\n for (const t of tokens) {\n if (!t.isBridgeable) continue;\n const symbol = (t.symbol ?? \"\").toUpperCase();\n if (!symbol) continue;\n (m[symbol] ||= {})[t.chainKey] = t; // один актив, много сетей\n }\n\n const chainStats: Record<string, number> = {};\n \n Object.values(m).forEach((byChain) => {\n Object.keys(byChain).forEach((chainKey) => {\n chainStats[chainKey] = (chainStats[chainKey] || 0) + 1;\n });\n });\n\n return m;\n}\n\nexport function listAssetsForSelect(tokens: Token[]): Token[] {\n const m = buildAssetMatrix(tokens);\n\n // Канонический представитель ассета: Ethereum → Arbitrum → BSC → Polygon → любой\n const pickOrder = [\"ethereum\", \"arbitrum\", \"bsc\", \"polygon\"];\n\n // Базовые элементы (по одному на символ)\n const base = Object.values(m).map((byChain) => {\n const preferred =\n pickOrder.map((k) => byChain[k]).find(Boolean) ??\n Object.values(byChain)[0];\n\n return preferred;\n });\n\n // Быстрый доступ по нормализованному символу\n const byNorm = new Map(base.map((e) => [normalizeTickerSymbol(e.symbol), e]));\n\n // 1) popular — в фиксированном порядке, только присутствующие, без дублей\n const used = new Set<string>();\n const popular: Token[] = [];\n for (const s of POPULAR_ORDER) {\n const key = normalizeTickerSymbol(s);\n const item = byNorm.get(key);\n if (item && !used.has(key)) {\n popular.push(item);\n used.add(key);\n }\n }\n\n // 2) stable (если не попали в popular), по алфавиту\n const stable = base\n .filter((e) => {\n const k = normalizeTickerSymbol(e.symbol);\n return !used.has(k) && STABLES.has(k);\n })\n .sort((a, b) => a.symbol.localeCompare(b.symbol));\n\n for (const e of stable) used.add(normalizeTickerSymbol(e.symbol));\n\n // 3) остальные по алфавиту\n const other = base\n .filter((e) => !used.has(normalizeTickerSymbol(e.symbol)))\n .sort((a, b) => a.symbol.localeCompare(b.symbol));\n\n return [...popular, ...stable, ...other];\n}\n\nexport function resolveTokenOnChain(\n tokens: Token[],\n assetSymbol: string,\n chainKey: string\n): Token | undefined {\n const sym = assetSymbol.toUpperCase();\n return tokens.find(\n (t) =>\n t.isBridgeable &&\n (t.symbol ?? \"\").toUpperCase() === sym &&\n t.chainKey === chainKey\n );\n}\n","import { create } from \"zustand\";\nimport { buildAssetMatrix, type AssetMatrix } from \"../lib/assets\";\nimport type { Token } from \"../types\";\n\ninterface TokensState {\n tokens?: Token[];\n assetMatrix?: AssetMatrix;\n selectedToken?: Token;\n selectedAssetSymbol?: string;\n}\n\ninterface TokensStateActions {\n setTokens: (data: Token[]) => void;\n setSelectedToken: (data?: Token) => void;\n setSelectedAssetSymbol: (data: string) => void;\n}\n\ntype TokensStoreType = TokensState & TokensStateActions;\n\nconst initialState: TokensState = {\n tokens: undefined,\n selectedToken: undefined,\n selectedAssetSymbol: undefined,\n};\n\nconst useTokensStore = create<TokensStoreType>((set) => ({\n ...initialState,\n\n setTokens: (data) => {\n set({ tokens: data, assetMatrix: buildAssetMatrix(data) });\n },\n\n setSelectedToken: (data) => {\n set({ selectedToken: data });\n },\n\n setSelectedAssetSymbol: (data) => {\n const symbol = String(data);\n set({\n selectedAssetSymbol: symbol,\n selectedToken: undefined,\n });\n },\n}));\n\nexport type { Token, TokensState, TokensStateActions, TokensStoreType };\nexport { useTokensStore };\n","export function toLD(human: string, decimals: number): string {\n const [i = \"0\", f = \"\"] = human.replace(\",\", \".\").split(\".\");\n const frac = (f + \"0\".repeat(decimals)).slice(0, decimals);\n return BigInt(i + frac).toString();\n}\nexport function fromLD(ld: string, decimals: number): number {\n const bi = BigInt(ld || \"0\");\n if (decimals === 0) return Number(bi);\n const base = BigInt(10) ** BigInt(decimals);\n const int = bi / base;\n const frac = Number(bi % base) / Number(base);\n return Number(int) + frac;\n}\n","import { useMemo } from \"react\";\nimport { useAccount as useEvmAccount } from \"wagmi\";\nimport { useWallet } from \"@tronweb3/tronwallet-adapter-react-hooks\";\nimport { useTonAddress } from \"@tonconnect/ui-react\";\nimport { useChainsStore } from \"../store/use-chains-store\";\n\nexport function useAddresses() {\n const { fromChain, toChain } = useChainsStore();\n const { address: evmAddress } = useEvmAccount();\n const tonAddress = useTonAddress();\n const { address: tronAddress } = useWallet();\n\n const srcAddress = useMemo(() => {\n if (!fromChain?.chainKey) return undefined;\n\n const chainKey = fromChain.chainKey.toLowerCase();\n\n if (chainKey === \"ton\") {\n return tonAddress || undefined;\n }\n\n if (chainKey === \"tron\") {\n return tronAddress || undefined;\n }\n\n return evmAddress || undefined;\n }, [fromChain?.chainKey, evmAddress, tonAddress, tronAddress]);\n\n const dstAddress = useMemo(() => {\n if (!toChain?.chainKey) return undefined;\n\n const chainKey = toChain.chainKey.toLowerCase();\n\n if (chainKey === \"ton\") {\n return tonAddress || undefined;\n }\n\n if (chainKey === \"tron\") {\n return tronAddress || undefined;\n }\n\n return evmAddress || undefined;\n }, [toChain?.chainKey, evmAddress, tonAddress, tronAddress]);\n\n return {\n srcAddress,\n dstAddress,\n evmAddress,\n tonAddress,\n tronAddress,\n };\n}\n","import { create } from \"zustand\";\nimport type { Quote } from \"../types\";\n\nexport type BridgeQuoteStatus = \"idle\" | \"loading\" | \"success\" | \"error\";\n\ninterface BridgeQuoteState {\n inputAmount: string;\n status: BridgeQuoteStatus;\n quote?: Quote;\n error?: string;\n noRoute: boolean;\n refetchTrigger: number;\n}\n\ninterface BridgeQuoteActions {\n setInputAmount: (v: string) => void;\n setLoading: () => void;\n setQuote: (q?: Quote) => void;\n setError: (e?: string) => void;\n setNoRoute: (v: boolean) => void;\n triggerRefetch: () => void;\n reset: () => void;\n resetWithIdle: () => void;\n}\n\ntype BridgeQuoteStore = BridgeQuoteState & BridgeQuoteActions;\n\nexport const useBridgeQuoteStore = create<BridgeQuoteStore>((set) => ({\n inputAmount: \"\",\n status: \"idle\",\n quote: undefined,\n error: undefined,\n noRoute: false,\n refetchTrigger: 0,\n\n setInputAmount: (v) => set({ inputAmount: v }),\n setLoading: () => set({ status: \"loading\", error: undefined }),\n setQuote: (q) => set({ quote: q, status: q ? \"success\" : \"idle\", error: undefined }),\n setError: (e) => set({ error: e, status: \"error\" }),\n setNoRoute: (v) => set({ noRoute: v }),\n triggerRefetch: () => set((s) => ({ refetchTrigger: s.refetchTrigger + 1 })),\n reset: () =>\n set({\n inputAmount: \"\",\n status: \"idle\",\n quote: undefined,\n error: undefined,\n noRoute: false,\n refetchTrigger: 0,\n }),\n resetWithIdle: () =>\n set({\n status: \"idle\",\n quote: undefined,\n error: undefined,\n noRoute: false,\n }),\n}));\n","export interface Chain {\n chainId: number;\n chainKey: string;\n chainType: string;\n name: string;\n nativeCurrency: {\n address: string;\n chainKey: string;\n decimals: number;\n name: string;\n symbol: string;\n };\n shortName: string;\n}\n\nexport interface TokenPrice {\n usd: number;\n}\n\nexport interface Token {\n address: string;\n symbol: string;\n chainKey: string;\n name: string;\n decimals: number;\n isBridgeable: boolean;\n price?: TokenPrice;\n}\n\nexport interface Message {\n payload: string;\n amount: string;\n address: string;\n}\nexport interface Transaction {\n data?: string;\n to?: string;\n from?: string;\n value?: string;\n network?: string;\n messages?: Message[];\n}\nexport interface TransactionStep {\n type: string;\n sender: string;\n chainKey: string;\n transaction: Transaction;\n}\nexport interface Fees {\n token: string;\n chainKey: string;\n amount: string;\n type: string;\n}\n\nexport const RouteType = {\n STARGATE_V2_FAST: \"STARGATE_V2_FAST\",\n OFT: \"OFT\",\n STARGATE_V1: \"STARGATE_V1\",\n} as const;\n\nexport type RouteType = (typeof RouteType)[keyof typeof RouteType];\n\nexport const RoutePriority = {\n RECOMMENDED: \"recommended\",\n FASTEST: \"fastest\",\n CHEAPEST: \"cheapest\",\n} as const;\n\nexport type RoutePriority = (typeof RoutePriority)[keyof typeof RoutePriority];\n\nexport interface Quote {\n route: string;\n error: string | null;\n srcAmount: string;\n dstAmount: string;\n srcAmountMax: string;\n dstAmountMin: string;\n srcToken: string;\n dstToken: string;\n srcAddress: string;\n dstAddress: string;\n srcChainKey: string;\n dstChainKey: string;\n dstNativeAmount: string;\n duration: { estimated: number };\n fees: Fees[];\n steps: TransactionStep[];\n}\n\nexport type ChainKey = \"TON\" | \"EVM\" | \"TRON\" | string;\nexport type WalletKind = \"ton\" | \"evm\" | \"tron\" | null;\n\nexport interface TronLinkApi {\n ready?: boolean;\n tronWeb?: import(\"tronweb\").TronWeb;\n request?: (args: { method: string; params?: unknown[] }) => Promise<unknown>;\n on?: (event: string, handler: (...args: unknown[]) => void) => void;\n off?: (event: string, handler: (...args: unknown[]) => void) => void;\n}\n\nexport type TxStatus = \"success\" | \"failed\" | \"timeout\";\nexport interface MonitorResult {\n status: TxStatus;\n reason?: string | null; // текст причины или сообщение об ошибке\n receipt?: unknown; // chain-specific объект (receipt/tx info)\n confirmations?: number; // для EVM\n}\n","import { create } from \"zustand\";\nimport { RoutePriority } from \"../types\";\n\nexport type GasPreset = \"auto\" | \"none\" | \"medium\" | \"max\";\n\n// Тип для ключей конфигурации газа\ntype ChainGasConfig = keyof typeof SRC_RESERVE_HUMAN;\n\nconst GAS_MULTIPLIERS = {\n none: 0,\n auto: 0,\n medium: 0,\n max: 1, // Use base amount directly for max\n} as const;\n\nconst CHAIN_BASE_GAS = {\n tron: \"200000000\", // 200 TRX\n ethereum: \"10000000000000000\", // 0.01 ETH\n arbitrum: \"10000000000000000\", // 0.01 ETH\n optimism: \"10000000000000000\", // 0.01 ETH\n polygon: \"10000000000000000000\", // 10 MATIC\n avalanche: \"100000000000000000\", // 0.1 AVAX\n bsc: \"10000000000000000000\", // 0.01 BNB\n base: \"10000000000000000\", // 0.01 ETH\n ton: \"100000000\", // 0.1 TON\n default: \"10000000000000000\", // 0.01 ETH equivalent\n} as const;\n\nexport function gasPresetToDstNativeAmount(\n gasPreset: GasPreset,\n chainKey?: string\n): string {\n const multiplier = GAS_MULTIPLIERS[gasPreset];\n if (multiplier === 0) return \"0\";\n\n // Get base gas for chain\n const baseGas =\n chainKey && chainKey in CHAIN_BASE_GAS\n ? CHAIN_BASE_GAS[chainKey as keyof typeof CHAIN_BASE_GAS]\n : CHAIN_BASE_GAS.default;\n\n return (BigInt(baseGas) * BigInt(multiplier)).toString();\n}\n\nconst SRC_RESERVE_HUMAN = {\n ethereum: { none: 0.001, auto: 0.002, medium: 0.005, max: 0.01 },\n arbitrum: { none: 0.0002, auto: 0.0005, medium: 0.001, max: 0.003 },\n optimism: { none: 0.0002, auto: 0.0005, medium: 0.001, max: 0.003 },\n base: { none: 0.0002, auto: 0.0005, medium: 0.001, max: 0.003 },\n polygon: { none: 1, auto: 2, medium: 5, max: 10 },\n avalanche: { none: 0.02, auto: 0.05, medium: 0.1, max: 0.2 },\n bsc: { none: 0.002, auto: 0.005, medium: 0.01, max: 0.02 },\n ton: { none: 0.05, auto: 0.1, medium: 0.2, max: 0.5 },\n tron: { none: 10, auto: 25, medium: 50, max: 200 },\n default: { none: 0.001, auto: 0.002, medium: 0.005, max: 0.01 },\n} as const;\n\nexport function sourceGasReserveHuman(\n gasPreset: GasPreset,\n chainKey?: string\n): number {\n const isValidChain = chainKey && chainKey in SRC_RESERVE_HUMAN;\n const table = isValidChain\n ? SRC_RESERVE_HUMAN[chainKey as ChainGasConfig]\n : SRC_RESERVE_HUMAN.default;\n return table[gasPreset] ?? table.none;\n}\n\nexport function gasPresetToDisplayAmount(\n gasPreset: GasPreset,\n chainKey?: string,\n decimals: number = 18\n): number {\n const weiAmount = gasPresetToDstNativeAmount(gasPreset, chainKey);\n return Number(weiAmount) / Math.pow(10, decimals);\n}\n\nexport function gasPresetToUsdValue(\n gasPreset: GasPreset,\n priceUsd: number,\n chainKey?: string,\n decimals: number = 18\n): number {\n const amount = gasPresetToDisplayAmount(gasPreset, chainKey, decimals);\n return amount * priceUsd;\n}\n\ninterface SettingsState {\n slippageBps: number;\n routePriority: RoutePriority;\n gasPreset: GasPreset;\n setSlippageBps: (bps: number) => void;\n setRoutePriority: (priority: RoutePriority) => void;\n setGasPreset: (preset: GasPreset) => void;\n\n getDstNativeAmount: (chainKey?: string) => string;\n getSourceGasReserveHuman: (chainKey?: string) => number;\n getSlippageDecimal: () => number;\n}\n\nexport const useSettingsStore = create<SettingsState>((set, get) => ({\n slippageBps: 50, // 0.5%\n routePriority: RoutePriority.RECOMMENDED,\n gasPreset: \"none\",\n setSlippageBps: (bps) => set({ slippageBps: bps }),\n setRoutePriority: (priority) => set({ routePriority: priority }),\n setGasPreset: (preset) => set({ gasPreset: preset }),\n\n getDstNativeAmount: (chainKey) => {\n const { gasPreset } = get();\n return gasPresetToDstNativeAmount(gasPreset, chainKey);\n },\n getSourceGasReserveHuman: (chainKey?: string) => {\n const { gasPreset } = get();\n return sourceGasReserveHuman(gasPreset, chainKey);\n },\n getSlippageDecimal: () => {\n const { slippageBps } = get();\n return slippageBps / 10000;\n },\n}));\n","import { RoutePriority, type Quote } from \"../types\";\n\nexport type QuoteRequest = {\n srcChainKey: string;\n dstChainKey: string;\n srcToken: string;\n dstToken: string;\n srcAmountLD: string;\n dstAmountMinLD?: string;\n srcAddress?: string;\n dstAddress?: string;\n dstNativeAmount?: string;\n slippage?: number;\n routePriority?: RoutePriority;\n};\n\n/**\n * Fetch all available quotes from Stargate API\n * Does not filter by route priority - returns all available routes (taxi, bus, OFT)\n */\nasync function fetchQuotes(req: QuoteRequest): Promise<Quote[]> {\n const params: Record<string, string> = {\n srcChainKey: req.srcChainKey,\n dstChainKey: req.dstChainKey,\n srcToken: req.srcToken,\n dstToken: req.dstToken,\n srcAmount: req.srcAmountLD,\n dstAmountMin: req.dstAmountMinLD ?? \"0\",\n };\n\n if (req.srcAddress) params.srcAddress = req.srcAddress;\n if (req.dstAddress) params.dstAddress = req.dstAddress;\n if (req.dstNativeAmount && req.dstNativeAmount !== \"0\")\n params.dstNativeAmount = req.dstNativeAmount;\n if (req.slippage && req.slippage > 0) params.slippage = String(req.slippage);\n\n const url = `https://stargate.finance/api/v1/quotes?${new URLSearchParams(\n params\n ).toString()}`;\n const res = await fetch(url);\n const data = await res.json();\n\n return (data?.quotes as Quote[]) ?? [];\n}\n\n/**\n * Select best quote based on user's priority preference\n * - fastest: minimum duration, prefer \"taxi\" routes (immediate transfer)\n * - cheapest: minimum total fees by amount, prefer \"bus\" routes (batched, delayed)\n * - recommended: maximum destination amount (best output)\n */\nfunction selectQuoteByPriority(\n routes: Quote[],\n priority: RoutePriority\n): Quote {\n if (priority === RoutePriority.FASTEST) {\n return routes.reduce((fastest: Quote, cur: Quote) => {\n const fastestDuration = fastest.duration?.estimated ?? Number.MAX_VALUE;\n const curDuration = cur.duration?.estimated ?? Number.MAX_VALUE;\n\n // Prefer shorter duration\n if (curDuration < fastestDuration) return cur;\n\n // Prefer \"taxi\" route (immediate transfer)\n if ((cur.route || \"\").toLowerCase().includes(\"taxi\")) return cur;\n\n return fastest;\n });\n }\n\n if (priority === RoutePriority.CHEAPEST) {\n // Sum all fee amounts as BigInt (no USD conversion - API doesn't provide usd field)\n const sumFees = (quote: Quote): bigint => {\n let total = 0n;\n for (const fee of quote.fees ?? []) {\n total += BigInt(fee.amount ?? \"0\");\n }\n return total;\n };\n\n return routes.reduce((cheapest: Quote, cur: Quote) => {\n const cheapestFees = sumFees(cheapest);\n const curFees = sumFees(cur);\n\n // Prefer lower total fees\n if (curFees < cheapestFees) return cur;\n\n // Prefer \"bus\" route (batched, cheaper)\n if ((cur.route || \"\").toLowerCase().includes(\"bus\")) return cur;\n\n return cheapest;\n });\n }\n\n // \"recommended\" - return route with highest destination amount\n return routes.reduce((best: Quote, cur: Quote) =>\n BigInt(cur.dstAmount) > BigInt(best.dstAmount) ? cur : best\n );\n}\n\n/**\n * Get quote by priority preference\n * If API returns single route, use it directly\n * If multiple routes available, select based on user's priority\n */\nexport async function getQuotesByPriority(\n req: QuoteRequest\n): Promise<Quote | null> {\n const routes = await fetchQuotes(req);\n\n if (!routes.length) return null;\n if (routes.length === 1) return routes[0];\n\n const priority = req.routePriority || RoutePriority.RECOMMENDED;\n return selectQuoteByPriority(routes, priority);\n}\n\nexport type QuoteSendRequest = {\n srcChainKey: string;\n dstChainKey: string;\n srcToken: string;\n toAddressBytes32: string;\n amountLD: string;\n minAmountLD: string;\n payInLzToken?: boolean;\n};\n\nexport type QuoteSendResponse = {\n fee: { nativeFee: string; lzTokenFee: string };\n};\n","import { Address } from \"@ton/core\";\nimport { fromLD } from \"./amount\";\nimport type { Chain, Token } from \"../types\";\n\nexport function resolveTokenOnChainFromMatrix(\n assetMatrix: Record<string, Record<string, Token>> | undefined,\n assetSymbol: string | undefined,\n chainKey: string | undefined\n): Token | undefined {\n if (!assetMatrix || !assetSymbol || !chainKey) return undefined;\n const byChain = assetMatrix[assetSymbol.toUpperCase()];\n return byChain?.[chainKey];\n}\n\nexport const DEFAULT_SLIPPAGE_BPS = 50;\n\nconst lower = (s?: string) => (s ?? \"\").toLowerCase();\nconst normSym = (s?: string) =>\n (s ?? \"\")\n .toUpperCase()\n .replace(/₮/g, \"T\")\n .replace(/[^A-Z0-9]/g, \"\");\n\nexport function tonNorm(addr?: string): string | null {\n if (!addr) return null;\n try {\n if (addr.includes(\":\")) {\n return Address.parseRaw(addr).toString({\n bounceable: false,\n urlSafe: true,\n });\n }\n return Address.parse(addr).toString({ bounceable: false, urlSafe: true });\n } catch {\n return null;\n }\n}\n\nexport const isZeroAddr = (a?: string) =>\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (!!a && /^0x0{40}$/i.test(a)) || /^0x[eE]{4}e{36}$/i.test(a as any);\n\nexport function addrForApi(chainKey: string, addr: string): string {\n if (chainKey === \"ton\") return tonNorm(addr)!;\n // Tron и EVM адреса передаются как есть\n return addr;\n}\n\nexport function isNativeAddrEqual(\n chain: Chain | undefined,\n tokenAddr?: string\n) {\n if (!chain) return false;\n if (!tokenAddr) return false;\n\n if (isZeroAddr(tokenAddr)) return true;\n\n const nativeAddr = chain.nativeCurrency?.address;\n if (!nativeAddr) return false;\n\n if (chain.chainKey === \"ton\") {\n const a = tonNorm(tokenAddr);\n const b = tonNorm(nativeAddr);\n return !!a && !!b && a === b;\n }\n return lower(nativeAddr) === lower(tokenAddr);\n}\n\nexport function findNativeMeta(\n tokens: Token[] | undefined,\n chain: Chain | undefined\n): { decimals: number; priceUsd?: number } {\n if (!chain) return { decimals: 18, priceUsd: undefined };\n const sym = normSym(chain.nativeCurrency?.symbol);\n if (!sym) {\n return { decimals: chain.chainKey === \"ton\" ? 9 : 18, priceUsd: undefined };\n }\n const sameChain =\n tokens?.find(\n (t) => t.chainKey === chain.chainKey && normSym(t.symbol) === sym\n ) ?? undefined;\n if (sameChain)\n return { decimals: sameChain.decimals, priceUsd: sameChain.price?.usd };\n\n const anyChain = tokens?.find((t) => normSym(t.symbol) === sym);\n if (anyChain)\n return { decimals: anyChain.decimals, priceUsd: anyChain.price?.usd };\n\n return { decimals: chain.chainKey === \"ton\" ? 9 : 18, priceUsd: undefined };\n}\n\nexport function lookupTokenMeta(\n tokens: Token[] | undefined,\n chains: Chain[] | undefined,\n chainKey?: string,\n tokenAddr?: string\n): { decimals: number; priceUsd?: number } {\n if (!chainKey) return { decimals: 18, priceUsd: undefined };\n\n const chain = chains?.find((c) => c.chainKey === chainKey);\n\n const hit =\n tokens?.find((t) => {\n if (t.chainKey !== chainKey) return false;\n if (chainKey === \"ton\") {\n const a = tonNorm(t.address);\n const b = tonNorm(tokenAddr);\n return !!a && !!b && a === b;\n }\n return lower(t.address) === lower(tokenAddr);\n }) ?? undefined;\n\n if (hit) return { decimals: hit.decimals, priceUsd: hit.price?.usd };\n\n if (isNativeAddrEqual(chain, tokenAddr)) {\n return findNativeMeta(tokens, chain);\n }\n\n return { decimals: chainKey === \"ton\" ? 9 : 18, priceUsd: undefined };\n}\n\nexport function computeFeesUsdFromArray(\n fees:\n | Array<{\n amount?: string;\n token?: string;\n chainKey?: string;\n type?: string;\n usd?: number;\n }>\n | undefined,\n tokens: Token[] | undefined,\n chains: Chain[] | undefined\n): {\n totalUsd: number;\n protocolFeeUsd?: number;\n messageFeeUsd?: number;\n serviceUsd?: number;\n blockchainUsd?: number;\n} {\n if (!fees?.length) return { totalUsd: 0 };\n\n let total = 0;\n let protocolFeeUsd = 0;\n let messageFeeUsd = 0;\n const byType = new Map<string, number>();\n\n for (const f of fees) {\n let usd = Number(f.usd ?? 0);\n\n if (!usd) {\n const { decimals, priceUsd } = lookupTokenMeta(\n tokens,\n chains,\n f.chainKey,\n f.token\n );\n const human = fromLD(String(f.amount ?? \"0\"), decimals);\n usd = (priceUsd ?? 0) * human;\n }\n\n total += usd;\n const type = (f.type ?? \"other\").toLowerCase();\n byType.set(type, (byType.get(type) ?? 0) + usd);\n\n // Categorize fees by type\n if (type === \"protocol\" || type === \"service\") {\n protocolFeeUsd += usd;\n } else if (type === \"message\" || type === \"gas\" || type === \"network\") {\n messageFeeUsd += usd;\n }\n }\n\n const serviceUsd =\n byType.get(\"protocol\") ?? byType.get(\"service\") ?? undefined;\n const blockchainUsd =\n byType.get(\"gas\") ??\n byType.get(\"network\") ??\n byType.get(\"message\") ??\n undefined;\n\n return {\n totalUsd: total,\n protocolFeeUsd: protocolFeeUsd > 0 ? protocolFeeUsd : undefined,\n messageFeeUsd: messageFeeUsd > 0 ? messageFeeUsd : undefined,\n serviceUsd,\n blockchainUsd,\n };\n}\n\n\nexport function sumFeeByTokenLD(\n fees:\n | Array<{ amount?: string; token?: string; chainKey?: string }>\n | undefined,\n dstTokenAddr?: string,\n dstChainKey?: string\n): string {\n if (!fees?.length || !dstTokenAddr || !dstChainKey) return \"0\";\n let acc = 0n;\n for (const f of fees) {\n if (f.chainKey !== dstChainKey) continue;\n const same =\n dstChainKey === \"ton\"\n ? tonNorm(f.token) === tonNorm(dstTokenAddr)\n : lower(f.token) === lower(dstTokenAddr);\n if (!same) continue;\n acc += BigInt((f.amount ?? \"0\") as string);\n }\n return acc.toString();\n}\n","import { Address } from \"@ton/core\";\n\nexport const isEvmAddress = (addr?: string): boolean => {\n return /^0x[0-9a-fA-F]{40}$/.test(addr ?? \"\");\n};\n\nexport const isTronAddress = (addr?: string): boolean => {\n return /^T[1-9A-HJ-NP-Za-km-z]{33}$/.test(addr ?? \"\");\n};\n\nexport const isTonAddress = (addr?: string): boolean => {\n if (!addr) return false;\n try {\n if (addr.includes(\":\")) {\n Address.parseRaw(addr);\n return true;\n }\n Address.parse(addr);\n return true;\n } catch {\n return false;\n }\n};\n\nexport function isAddressValidForChain(\n chainKey?: string,\n addr?: string\n): boolean {\n if (!chainKey || !addr) return false;\n\n if (chainKey === \"ton\") return isTonAddress(addr);\n if (chainKey === \"tron\") return isTronAddress(addr);\n return isEvmAddress(addr);\n}\n","import { createContext } from \"react\";\nimport type { ChainStrategyContextValue } from \"./chain-strategy-provider\";\n\nexport const ChainStrategyContext = createContext<\n ChainStrategyContextValue | undefined\n>(undefined);\n","import { useContext } from \"react\";\nimport { ChainStrategyContext } from \"../chains/chain-strategy-context\";\n\nexport function useChainStrategies() {\n const context = useContext(ChainStrategyContext);\n\n if (!context) {\n throw new Error(\n \"useChainStrategies must be used within ChainStrategyProvider\"\n );\n }\n\n return context;\n}\n","/**\n * Обрезает число до указанного количества десятичных знаков без округления\n * Например: truncateToDecimals(3.389, 2) = \"3.38\" (не \"3.39\")\n */\nexport const truncateToDecimals = (num: number, decimals: number): string => {\n if (!isFinite(num) || isNaN(num)) return \"0.00\";\n\n const multiplier = Math.pow(10, decimals);\n const truncated = Math.floor(num * multiplier) / multiplier;\n return truncated.toFixed(decimals);\n};\n\n/**\n * Formats token amount with symbol-aware logic\n * Stablecoins show as integers when >= 1, other tokens use adaptive decimals\n */\nexport const formatTokenAmount = (\n amount: number,\n symbol?: string,\n options?: { decimals?: number }\n): string => {\n const normalizedSymbol = (symbol ?? \"\").toUpperCase();\n\n // For stablecoins, show as integer if >= 1\n if (\n [\"USDT\", \"USDC\", \"DAI\", \"BUSD\"].includes(normalizedSymbol) &&\n amount >= 1\n ) {\n return `${Math.floor(amount)} ${normalizedSymbol}`;\n }\n\n // Use custom decimals if provided\n if (options?.decimals !== undefined) {\n return `${amount.toFixed(options.decimals)} ${normalizedSymbol}`;\n }\n\n // For other tokens, use appropriate decimal places\n if (amount >= 1) {\n return `${amount.toFixed(0)} ${normalizedSymbol}`;\n } else if (amount >= 0.001) {\n return `${amount.toFixed(3)} ${normalizedSymbol}`;\n } else {\n return `${amount.toFixed(6)} ${normalizedSymbol}`;\n }\n};\n\n/**\n * Formats USD values with adaptive decimal precision\n */\nexport const formatUsd = (value?: number): string => {\n if (!value || !isFinite(value)) return \"$0\";\n if (value >= 1) return `$${value.toFixed(2)}`;\n return `$${value.toFixed(6).replace(/0+$/, \"\").replace(/\\.$/, \"\")}`;\n};\n\n/**\n * Formats percentage from basis points (bps)\n * @param bps - Basis points (e.g., 50 = 0.5%)\n * @param decimals - Number of decimal places (default: 2)\n */\nexport const formatPercentage = (bps: number, decimals: number = 2): string => {\n return `${(bps / 100).toFixed(decimals)}%`;\n};\n\n/**\n * Formats balance with specified decimal precision\n * Returns \"0.00\" for zero/invalid values\n */\nexport const formatBalance = (amount: number, decimals: number = 2): string => {\n if (!isFinite(amount) || isNaN(amount) || amount <= 0) {\n return \"0.00\";\n }\n return amount.toFixed(decimals);\n};\n\n/**\n * Formats transaction hash for display\n * Shows first 4 and last 4 characters with ellipsis\n * @param hash - Transaction hash\n * @param startChars - Number of characters to show at start (default: 4)\n * @param endChars - Number of characters to show at end (default: 4)\n */\nexport const formatHash = (\n hash: string | undefined,\n startChars: number = 4,\n endChars: number = 4\n): string => {\n if (!hash) return \"\";\n if (hash.length <= startChars + endChars) return hash;\n return `${hash.slice(0, startChars)}...${hash.slice(-endChars)}`;\n};\n\n/**\n * Alias for formatHash - formats wallet addresses for display\n * Shows first 4 and last 4 characters with ellipsis\n * @param address - Wallet address\n * @param startChars - Number of characters to show at start (default: 4)\n * @param endChars - Number of characters to show at end (default: 4)\n */\nexport const formatAddress = formatHash;","import { TonClient } from \"@ton/ton\";\n\nexport interface EvmChainConfig {\n usdtAddress: string;\n gasEstimates: {\n approve: bigint;\n bridge: bigint;\n };\n gasBuffer: number;\n timeout: number;\n requiredConfirmations: number;\n}\n\nexport interface TonChainConfig {\n apiUrl: string;\n timeout: number;\n validUntil: number;\n pollingInterval: number;\n estimatedNetworkFee: string; // in nanoton (LD format)\n}\n\nexport interface TronChainConfig {\n timeout: number;\n feeLimit: number;\n requiredConfirmations: number;\n pollingInterval: number;\n estimatedNetworkFee: string; // in SUN (LD format)\n}\n\nexport interface ChainConfigs {\n evm: EvmChainConfig;\n ton: TonChainConfig;\n tron: TronChainConfig;\n}\n\nexport const EVM_CONFIG: EvmChainConfig = {\n usdtAddress: \"0xdAC17F958D2ee523a2206206994597C13D831ec7\",\n gasEstimates: {\n approve: 65_000n,\n bridge: 300_000n,\n },\n gasBuffer: 1.2, // 20% buffer\n timeout: 300_000, // 5 minutes (increased for slower networks)\n requiredConfirmations: 3, // Wait for 3 confirmations for reorg protection\n};\n\nexport const TON_CONFIG: TonChainConfig = {\n apiUrl: \"https://toncenter.com/api/v2\",\n timeout: 360_000, // 6 minutes\n validUntil: 600, // 10 minutes\n pollingInterval: 5000, // 5 seconds between transaction status checks\n estimatedNetworkFee: \"100000000\", // 0.1 TON in nanoton (conservative estimate)\n};\n\nexport const TRON_CONFIG: TronChainConfig = {\n timeout: 120_000, // 2 minutes (for 19 confirmations)\n feeLimit: 100_000_000, // 100 TRX in sun\n requiredConfirmations: 19, // TRON standard: 19 blocks for confirmation\n pollingInterval: 3000, // 3 seconds between checks\n estimatedNetworkFee: \"10000000\", // 10 TRX in SUN (fallback estimate)\n};\n\nexport const CHAIN_CONFIGS: ChainConfigs = {\n evm: EVM_CONFIG,\n ton: TON_CONFIG,\n tron: TRON_CONFIG,\n};\n\n// Singleton TonClient instance to prevent race conditions\nlet tonClientInstance: TonClient | null = null;\n\nexport function getTonClient(\n customClient?: TonClient,\n apiKey?: string\n): TonClient {\n // If a custom client is provided, use it directly\n if (customClient) {\n return customClient;\n }\n\n // Otherwise, use or create the singleton instance\n if (!tonClientInstance) {\n tonClientInstance = new TonClient({\n endpoint: `${TON_CONFIG.apiUrl}/jsonRPC`,\n apiKey,\n });\n }\n return tonClientInstance;\n}\n","import { fromLD } from \"../lib/amount\";\nimport { truncateToDecimals } from \"./formatters\";\nimport { computeFeesUsdFromArray, sumFeeByTokenLD } from \"../lib/quote\";\nimport type { Quote, Token, Chain, Fees } from \"../types\";\nimport { TON_CONFIG, TRON_CONFIG, EVM_CONFIG } from \"../chains/config\";\nimport type { TronWeb } from \"tronweb\";\nimport type { PublicClient } from \"viem\";\n\n/**\n * Get human-readable amounts from quote\n */\nexport function getQuoteAmounts(\n quote: Quote | undefined,\n srcToken: Token | undefined,\n dstToken: Token | undefined\n) {\n if (!quote || !srcToken || !dstToken) {\n return {\n inputHuman: 0,\n outputHuman: 0,\n outputHumanRounded: \"0\",\n minReceivedHuman: 0,\n };\n }\n\n const inputHuman = fromLD(quote.srcAmount, srcToken.decimals);\n const outputHuman = fromLD(quote.dstAmount, dstToken.decimals);\n const outputHumanRounded = truncateToDecimals(outputHuman, 2);\n const minReceivedHuman = fromLD(\n quote.dstAmountMin || \"0\",\n dstToken.decimals\n );\n\n return {\n inputHuman,\n outputHuman,\n outputHumanRounded,\n minReceivedHuman,\n };\n}\n\n/**\n * Get aggregated fees from quote\n */\nexport function getQuoteFees(\n quote: Quote | undefined,\n tokens: Token[] | undefined,\n chains: Chain[] | undefined,\n srcToken: Token | undefined,\n dstToken: Token | undefined\n) {\n if (!quote || !tokens || !chains) {\n return {\n totalUsd: 0,\n protocolFeeUsd: undefined,\n messageFeeUsd: undefined,\n serviceUsd: undefined,\n blockchainUsd: undefined,\n inSrcToken: undefined,\n inDstToken: undefined,\n };\n }\n\n const feeData = computeFeesUsdFromArray(quote.fees, tokens, chains);\n\n // Calculate fees in source and destination tokens\n let inSrcToken: number | undefined = undefined;\n let inDstToken: number | undefined = undefined;\n\n if (srcToken && quote.srcChainKey) {\n const feeInSrcLD = sumFeeByTokenLD(\n quote.fees,\n srcToken.address,\n quote.srcChainKey\n );\n const feeInSrcHuman = fromLD(feeInSrcLD, srcToken.decimals);\n if (feeInSrcHuman > 0) {\n inSrcToken = Number(truncateToDecimals(feeInSrcHuman, 8));\n } else if (feeData.totalUsd > 0 && srcToken.price?.usd) {\n // Approximate from USD\n const feeInSrcApprox = feeData.totalUsd / srcToken.price.usd;\n inSrcToken = Number(truncateToDecimals(feeInSrcApprox, 8));\n }\n }\n\n if (dstToken && quote.dstChainKey) {\n const feeInDstLD = sumFeeByTokenLD(\n quote.fees,\n dstToken.address,\n quote.dstChainKey\n );\n const feeInDstHuman = fromLD(feeInDstLD, dstToken.decimals);\n if (feeInDstHuman > 0) {\n inDstToken = Number(truncateToDecimals(feeInDstHuman, 8));\n }\n }\n\n return {\n totalUsd: feeData.totalUsd,\n protocolFeeUsd: feeData.protocolFeeUsd,\n messageFeeUsd: feeData.messageFeeUsd,\n serviceUsd: feeData.serviceUsd,\n blockchainUsd: feeData.blockchainUsd,\n inSrcToken,\n inDstToken,\n };\n}\n\n/**\n * Calculate minimum received amount with custom slippage\n */\nexport function calculateMinReceived(\n quote: Quote | undefined,\n slippageBps: number,\n dstToken: Token | undefined\n): number {\n if (!quote || !dstToken) return 0;\n\n const dstAmountLD = BigInt(quote.dstAmount);\n const minAmountLD = (dstAmountLD * BigInt(10_000 - slippageBps)) / BigInt(10_000);\n\n return fromLD(minAmountLD.toString(), dstToken.decimals);\n}\n\n/**\n * Estimate TON network fee based on transaction messages\n * Returns fee in nanoton (LD format as string)\n *\n * TON fees are based on:\n * - Number of messages\n * - Message complexity (payload size)\n * - Storage fees\n */\nexport function estimateTonNetworkFee(quote: Quote): string {\n try {\n // Find TON transaction step\n const tonStep = quote.steps?.find(\n (s) => s.chainKey.toLowerCase() === \"ton\" && s.type === \"bridge\"\n );\n\n if (!tonStep?.transaction?.messages) {\n console.warn(\"No TON messages found in quote, using fallback\");\n return TON_CONFIG.estimatedNetworkFee;\n }\n\n const messages = tonStep.transaction.messages;\n const messageCount = messages.length;\n\n // Base fee per message (approximately 0.01 TON per message)\n const baseFeePerMessage = 10_000_000n; // 0.01 TON in nanoton\n\n // Calculate total based on message count and complexity\n let totalFee = 0n;\n\n for (const message of messages) {\n // Start with base fee\n let messageFee = baseFeePerMessage;\n\n // Add fee based on payload size (if available)\n if (message.payload) {\n const payloadSize = message.payload.length;\n // Rough estimate: 0.00001 TON per 100 bytes\n const sizeFee = BigInt(Math.floor(payloadSize / 100)) * 100_000n;\n messageFee += sizeFee;\n }\n\n // Add fee based on amount (larger amounts = more gas)\n if (message.amount) {\n const amount = BigInt(message.amount);\n // If sending tokens (not just TON), add complexity fee\n if (amount > 0n && message.payload) {\n messageFee += 5_000_000n; // 0.005 TON for jetton transfer\n }\n }\n\n totalFee += messageFee;\n }\n\n // Add minimum buffer (at least 0.05 TON for transaction processing)\n const minBuffer = 50_000_000n; // 0.05 TON\n totalFee = totalFee > minBuffer ? totalFee : minBuffer;\n\n // Add safety margin (20%)\n totalFee = (totalFee * 120n) / 100n;\n\n // Cap at reasonable maximum (1 TON for safety)\n const maxFee = 1_000_000_000n; // 1 TON\n if (totalFee > maxFee) {\n totalFee = maxFee;\n }\n\n console.log(\n `TON fee estimate: ${messageCount} messages = ${\n Number(totalFee) / 1_000_000_000\n } TON`\n );\n\n return totalFee.toString();\n } catch (error) {\n console.warn(\"Failed to estimate TON fee:\", error);\n return TON_CONFIG.estimatedNetworkFee;\n }\n}\n\n/**\n * Add TON network fee to quote fees (if source chain is TON)\n * This ensures the user sees the estimated network fee before transaction\n */\nexport function addTonNetworkFee(\n quote: Quote | undefined,\n chains: Chain[] | undefined,\n estimatedFee?: string\n): Quote | undefined {\n if (!quote || quote.srcChainKey.toLowerCase() !== \"ton\") {\n return quote;\n }\n\n // Find TON chain to get native currency address\n const tonChain = chains?.find(\n (c) => c.chainKey.toLowerCase() === \"ton\"\n );\n\n if (!tonChain?.nativeCurrency?.address) {\n console.warn(\"Could not find TON native currency address\");\n return quote;\n }\n\n // Create network fee entry\n const networkFee: Fees = {\n token: tonChain.nativeCurrency.address,\n chainKey: \"ton\",\n amount: estimatedFee || TON_CONFIG.estimatedNetworkFee,\n type: \"network\",\n };\n\n // Check if network fee already exists in quote.fees\n const hasNetworkFee = quote.fees?.some(\n (fee) => fee.type === \"network\" && fee.chainKey === \"ton\"\n );\n\n if (hasNetworkFee) {\n return quote;\n }\n\n // Return new quote with added network fee\n return {\n ...quote,\n fees: [...(quote.fees || []), networkFee],\n };\n}\n\n/**\n * Estimate TRON network fee based on user's Energy balance\n * Returns fee in SUN (LD format)\n */\nexport async function estimateTronNetworkFee(\n tronWeb: TronWeb,\n quote: Quote,\n userAddress: string\n): Promise<string> {\n try {\n // Get user's Energy balance\n const accountResources = await tronWeb.trx.getAccountResources(userAddress);\n const availableEnergy = accountResources.EnergyLimit || 0;\n\n // Find TRON transaction step\n const tronStep = quote.steps?.find(\n (s) => s.chainKey.toLowerCase() === \"tron\" && s.type === \"bridge\"\n );\n\n if (!tronStep?.transaction?.data || !tronStep.transaction.to) {\n console.warn(\"No TRON transaction data in quote, using fallback\");\n return TRON_CONFIG.estimatedNetworkFee;\n }\n\n // Simulate transaction to get required Energy\n // Use triggerConstantContract for simulation\n const contractAddress = tronWeb.address.fromHex(\n tronStep.transaction.to.startsWith(\"41\")\n ? tronStep.transaction.to\n : \"41\" + tronStep.transaction.to.slice(2)\n );\n\n const simulation = await tronWeb.transactionBuilder.triggerSmartContract(\n contractAddress,\n \"function signature doesn't matter for energy estimation\",\n {\n feeLimit: TRON_CONFIG.feeLimit,\n callValue: tronStep.transaction.value\n ? Number(tronStep.transaction.value)\n : 0,\n },\n [],\n userAddress\n );\n\n const requiredEnergy = simulation.energy_used || 0;\n\n // Calculate TRX cost\n const energyDeficit = Math.max(0, requiredEnergy - availableEnergy);\n\n if (energyDeficit === 0) {\n // User has enough Energy, transaction will be free\n return \"0\";\n }\n\n // Current TRON energy price (approximately 420 SUN per Energy unit)\n // This is an approximation and may vary\n const energyPriceInSun = 420;\n const feeSun = energyDeficit * energyPriceInSun;\n\n console.log(\n `TRON fee estimation: ${requiredEnergy} energy required, ${availableEnergy} available, ${feeSun / 1_000_000} TRX fee`\n );\n\n return feeSun.toString();\n } catch (error) {\n console.warn(\"Failed to estimate TRON network fee:\", error);\n return TRON_CONFIG.estimatedNetworkFee;\n }\n}\n\n/**\n * Add TRON network fee to quote fees (if source chain is TRON)\n * This ensures the user sees the estimated network fee before transaction\n */\nexport function addTronNetworkFee(\n quote: Quote | undefined,\n chains: Chain[] | undefined,\n estimatedFee?: string\n): Quote | undefined {\n if (!quote || quote.srcChainKey.toLowerCase() !== \"tron\") {\n return quote;\n }\n\n // Find TRON chain to get native currency address\n const tronChain = chains?.find(\n (c) => c.chainKey.toLowerCase() === \"tron\"\n );\n\n if (!tronChain?.nativeCurrency?.address) {\n console.warn(\"Could not find TRON native currency address\");\n return quote;\n }\n\n // Create network fee entry\n const networkFee: Fees = {\n token: tronChain.nativeCurrency.address,\n chainKey: \"tron\",\n amount: estimatedFee || TRON_CONFIG.estimatedNetworkFee,\n type: \"network\",\n };\n\n // Check if network fee already exists in quote.fees\n const hasNetworkFee = quote.fees?.some(\n (fee) => fee.type === \"network\" && fee.chainKey === \"tron\"\n );\n\n if (hasNetworkFee) {\n return quote;\n }\n\n // Return new quote with added network fee\n return {\n ...quote,\n fees: [...(quote.fees || []), networkFee],\n };\n}\n\n/**\n * Estimate EVM network fee (gas cost) based on quote steps\n * Returns fee in Wei (LD format as string)\n */\nexport async function estimateEvmNetworkFee(\n publicClient: PublicClient,\n quote: Quote,\n chainKey: string\n): Promise<string> {\n try {\n // Count approve and bridge steps for this chain\n let totalGasLimit = 0n;\n\n for (const step of quote.steps || []) {\n if (step.chainKey.toLowerCase() !== chainKey.toLowerCase()) continue;\n\n if (step.type === \"approve\") {\n totalGasLimit += EVM_CONFIG.gasEstimates.approve;\n } else if (step.type === \"bridge\") {\n totalGasLimit += EVM_CONFIG.gasEstimates.bridge;\n }\n }\n\n if (totalGasLimit === 0n) {\n return \"0\";\n }\n\n // Add buffer (20%)\n totalGasLimit =\n (totalGasLimit * BigInt(Math.floor(EVM_CONFIG.gasBuffer * 100))) / 100n;\n\n // Get current gas price\n const gasPrice = await publicClient.getGasPrice();\n\n // Calculate total cost in Wei\n const totalCostWei = totalGasLimit * gasPrice;\n\n console.log(\n `EVM gas estimate: ${totalGasLimit} gas × ${gasPrice} Wei/gas = ${totalCostWei} Wei`\n );\n\n return totalCostWei.toString();\n } catch (error) {\n console.warn(\"Failed to estimate EVM gas fee:\", error);\n // Fallback: 0.01 ETH in Wei\n return \"10000000000000000\"; // 0.01 ETH\n }\n}\n\n/**\n * Add EVM network fee to quote fees\n */\nexport function addEvmNetworkFee(\n quote: Quote | undefined,\n chains: Chain[] | undefined,\n estimatedFee?: string\n): Quote | undefined {\n if (!quote) return quote;\n\n // Check if source chain is EVM (not TON or TRON)\n const srcChainKey = quote.srcChainKey.toLowerCase();\n if (srcChainKey === \"ton\" || srcChainKey === \"tron\") {\n return quote;\n }\n\n // Find source chain\n const srcChain = chains?.find(\n (c) => c.chainKey.toLowerCase() === srcChainKey\n );\n\n if (!srcChain?.nativeCurrency?.address) {\n return quote;\n }\n\n // Check if network fee already exists\n const hasNetworkFee = quote.fees?.some(\n (fee) =>\n fee.type === \"network\" &&\n fee.chainKey.toLowerCase() === srcChainKey\n );\n\n if (hasNetworkFee) {\n return quote;\n }\n\n // Create network fee entry\n const networkFee: Fees = {\n token: srcChain.nativeCurrency.address,\n chainKey: quote.srcChainKey,\n amount: estimatedFee || \"10000000000000000\", // 0.01 ETH fallback\n type: \"network\",\n };\n\n return {\n ...quote,\n fees: [...(quote.fees || []), networkFee],\n };\n}\n\n/**\n * Get complete quote details for UI display\n */\nexport function getQuoteDetails(\n quote: Quote | undefined,\n srcToken: Token | undefined,\n dstToken: Token | undefined,\n tokens: Token[] | undefined,\n chains: Chain[] | undefined,\n slippageBps: number\n) {\n const amounts = getQuoteAmounts(quote, srcToken, dstToken);\n const fees = getQuoteFees(quote, tokens, chains, srcToken, dstToken);\n const minimumReceived = calculateMinReceived(quote, slippageBps, dstToken);\n\n return {\n inputAmount: amounts.inputHuman,\n outputAmount: amounts.outputHuman,\n outputAmountRounded: amounts.outputHumanRounded,\n minimumReceived,\n etaSeconds: quote?.duration?.estimated,\n fees,\n };\n}\n","import { useEffect, useMemo, useState } from \"react\";\nimport { useTokensStore } from \"../../store/use-token-store\";\nimport { useChainsStore } from \"../../store/use-chains-store\";\nimport { toLD } from \"../../lib/amount\";\nimport { useAddresses } from \"../use-addresses\";\nimport { useBridgeQuoteStore } from \"../../store/use-bridge-quote-store\";\nimport { useSettingsStore } from \"../../store/use-settings-store\";\nimport { getQuotesByPriority } from \"../../api/quotes\";\nimport { addrForApi, resolveTokenOnChainFromMatrix } from \"../../lib/quote\";\nimport { isAddressValidForChain } from \"../../lib/address-validation\";\nimport { useChainStrategies } from \"../use-chain-strategies\";\nimport {\n addTonNetworkFee,\n estimateTonNetworkFee,\n addTronNetworkFee,\n estimateTronNetworkFee,\n addEvmNetworkFee,\n estimateEvmNetworkFee,\n} from \"../../utils/quote-helpers\";\nimport type { TronWeb } from \"tronweb\";\nimport { usePublicClient } from \"wagmi\";\nimport type { PublicClient } from \"viem\";\nimport type { Quote } from \"../../types\";\n\nexport function useBridgeQuote() {\n const { assetMatrix, selectedAssetSymbol } = useTokensStore();\n\n const { fromChain, toChain, chains } = useChainsStore();\n const { srcAddress, dstAddress } = useAddresses();\n const { slippageBps, routePriority, getDstNativeAmount, getSlippageDecimal } =\n useSettingsStore();\n\n const {\n inputAmount,\n refetchTrigger,\n setLoading: setQuoteLoading,\n setQuote,\n setError: setQError,\n setNoRoute,\n resetWithIdle,\n } = useBridgeQuoteStore();\n\n const { chainRegistry } = useChainStrategies();\n const publicClient = usePublicClient() as PublicClient | undefined;\n\n const input = inputAmount;\n\n const srcTokenOnFrom = useMemo(\n () =>\n resolveTokenOnChainFromMatrix(\n assetMatrix,\n selectedAssetSymbol,\n fromChain?.chainKey\n ),\n [assetMatrix, selectedAssetSymbol, fromChain?.chainKey]\n );\n\n const dstTokenOnTo = useMemo(\n () =>\n resolveTokenOnChainFromMatrix(\n assetMatrix,\n selectedAssetSymbol,\n toChain?.chainKey\n ),\n [assetMatrix, selectedAssetSymbol, toChain?.chainKey]\n );\n\n const [loading, setLoading] = useState(false);\n\n // Реакция на изменения input: сброс состояния при пустом значении\n useEffect(() => {\n if (!input || input === \"\") {\n setLoading(false);\n resetWithIdle();\n }\n }, [input, resetWithIdle]);\n\n useEffect(() => {\n const resetUi = (withError?: string) => {\n setLoading(false);\n if (withError) {\n setQError(withError);\n } else {\n resetWithIdle();\n }\n };\n\n if (\n !input ||\n Number(input) <= 0 ||\n !fromChain?.chainKey ||\n !toChain?.chainKey ||\n !srcTokenOnFrom ||\n !dstTokenOnTo ||\n !srcAddress ||\n !dstAddress\n ) {\n resetUi();\n return;\n }\n\n if (\n !isAddressValidForChain(fromChain.chainKey, srcAddress) ||\n !isAddressValidForChain(toChain.chainKey, dstAddress)\n ) {\n resetUi();\n return;\n }\n\n if (fromChain.chainKey === toChain.chainKey) {\n resetUi();\n return;\n }\n\n let cancelled = false;\n\n const run = async () => {\n try {\n setLoading(true);\n setQuoteLoading?.();\n\n // Проверяем совместимость через assetMatrix\n if (assetMatrix && selectedAssetSymbol) {\n const tokenMatrix = assetMatrix[selectedAssetSymbol.toUpperCase()];\n if (\n !tokenMatrix ||\n !tokenMatrix[fromChain.chainKey] ||\n !tokenMatrix[toChain.chainKey]\n ) {\n // Токен не поддерживается на одной из сетей - тихо сбрасываем\n if (!cancelled) {\n resetUi();\n }\n return;\n }\n }\n\n const srcAmountLD = toLD(input, srcTokenOnFrom.decimals);\n\n const srcAddrApi = addrForApi(fromChain.chainKey, srcAddress);\n const dstAddrApi = addrForApi(toChain.chainKey, dstAddress);\n const dstNativeAmount = getDstNativeAmount(toChain.chainKey);\n const slippageDecimal = getSlippageDecimal();\n\n // Approximate minAmountLD for the request (will be stored in quote.dstAmountMin)\n // Using a conservative 5% slippage for the API request\n const approximateMinLD =\n (BigInt(srcAmountLD) * BigInt(9500)) / BigInt(10_000);\n\n const quoteRoute = await getQuotesByPriority({\n srcChainKey: fromChain.chainKey,\n dstChainKey: toChain.chainKey,\n srcToken: srcTokenOnFrom.address,\n dstToken: dstTokenOnTo.address,\n srcAmountLD,\n dstAmountMinLD: approximateMinLD.toString(),\n srcAddress: srcAddrApi,\n dstAddress: dstAddrApi,\n dstNativeAmount,\n slippage: slippageDecimal,\n routePriority,\n });\n\n // Check if route exists\n if (quoteRoute?.route === null) {\n setNoRoute(true);\n if (!cancelled) resetUi();\n return;\n } else {\n setNoRoute(false);\n }\n\n // Check if quote is valid\n if (\n !quoteRoute ||\n !quoteRoute.dstAmount ||\n BigInt(quoteRoute.dstAmount) === BigInt(0)\n ) {\n if (!cancelled) resetUi();\n return;\n }\n\n // Quote loaded successfully\n if (cancelled) return;\n\n // Add network fees before setting quote\n let quoteWithFees: Quote | undefined = quoteRoute;\n\n // Add TON network fee with dynamic estimation\n if (quoteRoute.srcChainKey.toLowerCase() === \"ton\") {\n try {\n const estimatedFee = estimateTonNetworkFee(quoteRoute);\n quoteWithFees = addTonNetworkFee(quoteRoute, chains, estimatedFee);\n console.log(\"TON network fee estimated for quote:\", estimatedFee);\n } catch (error) {\n console.warn(\"Failed to estimate TON fee, using fallback:\", error);\n quoteWithFees = addTonNetworkFee(quoteRoute, chains);\n }\n }\n\n // Add TRON network fee if source chain is TRON\n if (quoteRoute.srcChainKey.toLowerCase() === \"tron\") {\n const tronStrategy = chainRegistry.getStrategy(\"tron\");\n\n if (tronStrategy?.isConnected()) {\n const tronWeb = tronStrategy.getClient() as TronWeb;\n const tronAddress = tronStrategy.getAccount();\n\n if (tronWeb && tronAddress) {\n try {\n const estimatedFee = await estimateTronNetworkFee(\n tronWeb,\n quoteRoute,\n tronAddress\n );\n quoteWithFees = addTronNetworkFee(\n quoteWithFees || quoteRoute,\n chains,\n estimatedFee\n );\n console.log(\"TRON network fee estimated for quote:\", estimatedFee);\n } catch (error) {\n console.warn(\"Failed to estimate TRON fee, using fallback:\", error);\n quoteWithFees = addTronNetworkFee(\n quoteWithFees || quoteRoute,\n chains\n );\n }\n } else {\n // Add fallback if TronWeb not available\n quoteWithFees = addTronNetworkFee(\n quoteWithFees || quoteRoute,\n chains\n );\n }\n } else {\n // Add fallback if strategy not connected\n quoteWithFees = addTronNetworkFee(\n quoteWithFees || quoteRoute,\n chains\n );\n }\n }\n\n // Add EVM network fee if source chain is EVM\n const srcChainKey = quoteRoute.srcChainKey.toLowerCase();\n if (srcChainKey !== \"ton\" && srcChainKey !== \"tron\") {\n if (publicClient) {\n try {\n const estimatedFee = await estimateEvmNetworkFee(\n publicClient,\n quoteRoute,\n quoteRoute.srcChainKey\n );\n quoteWithFees = addEvmNetworkFee(\n quoteWithFees || quoteRoute,\n chains,\n estimatedFee\n );\n console.log(\"EVM network fee estimated for quote:\", estimatedFee);\n } catch (error) {\n console.warn(\"Failed to estimate EVM fee, using fallback:\", error);\n quoteWithFees = addEvmNetworkFee(\n quoteWithFees || quoteRoute,\n chains\n );\n }\n } else {\n // Add fallback if publicClient not available\n quoteWithFees = addEvmNetworkFee(\n quoteWithFees || quoteRoute,\n chains\n );\n }\n }\n\n setQuote(quoteWithFees || quoteRoute);\n } catch {\n // Любая ошибка: считаем как no route в UI\n if (!cancelled) {\n resetUi();\n }\n } finally {\n if (!cancelled) setLoading(false);\n }\n };\n\n run();\n return () => {\n cancelled = true;\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [\n input,\n fromChain?.chainKey,\n toChain?.chainKey,\n srcTokenOnFrom,\n dstTokenOnTo,\n srcAddress,\n dstAddress,\n setQuoteLoading,\n setQuote,\n setQError,\n slippageBps,\n routePriority,\n refetchTrigger,\n chainRegistry,\n chains,\n publicClient,\n ]);\n\n return { loading };\n}\n","import type { Chain, Token } from \"../types\";\nimport {\n normalizeTokenSymbol,\n normalizeTickerSymbol,\n} from \"../lib/token-normalization\";\n\n// Реэкспорт для обратной совместимости\nexport { normalizeTickerSymbol };\n\ninterface TokenWithDestination extends Token {\n dstChainKey?: string;\n}\n\nexport async function getChains(): Promise<Chain[]> {\n const res = await fetch(\"https://stargate.finance/api/v1/chains\", {\n credentials: \"same-origin\",\n });\n if (!res.ok) {\n throw new Error(`Failed to load chains: ${res.status}`);\n }\n const data = await res.json();\n return Array.isArray(data) ? data : data.chains ?? [];\n}\n\nexport async function getTokens(): Promise<Token[]> {\n const res = await fetch(\"https://stargate.finance/api/v1/tokens\", {\n credentials: \"same-origin\",\n });\n if (!res.ok) {\n throw new Error(`Failed to load chains: ${res.status}`);\n }\n const data = await res.json();\n const tokens = Array.isArray(data) ? data : data.tokens ?? [];\n\n // Нормализуем символы токенов\n return tokens.map(normalizeTokenSymbol);\n}\n\nexport async function getDestTokens(\n srcChainKey: string,\n srcTokenAddr: string\n): Promise<TokenWithDestination[]> {\n const url = new URL(\"https://stargate.finance/api/v1/tokens\");\n url.searchParams.set(\"srcChainKey\", srcChainKey);\n url.searchParams.set(\"srcToken\", srcTokenAddr);\n\n const res = await fetch(url.toString(), { credentials: \"omit\" });\n if (!res.ok) throw new Error(`Failed to load dest tokens: ${res.status}`);\n\n const data = await res.json();\n const raw: TokenWithDestination[] = (data.tokens ??\n []) as TokenWithDestination[];\n\n const bridgeable = raw.filter((t) => t.isBridgeable === true);\n\n const seen = new Set<string>();\n const unique: TokenWithDestination[] = [];\n for (const t of bridgeable) {\n const chainKey = t.chainKey ?? t.dstChainKey ?? \"\";\n const addr = (t.address ?? \"\").toLowerCase();\n const k = `${chainKey}:${addr}`;\n if (seen.has(k)) continue;\n seen.add(k);\n unique.push(t);\n }\n\n unique.sort((a, b) => {\n const sa = (a.symbol ?? \"\").toLowerCase();\n const sb = (b.symbol ?? \"\").toLowerCase();\n if (sa === sb) return (a.name ?? \"\").localeCompare(b.name ?? \"\");\n return sa.localeCompare(sb);\n });\n\n // Нормализуем символы токенов\n return unique.map(normalizeTokenSymbol);\n}\n\nexport type BalancesMap = Record<string, { balance: number; address: string }>;\n","import { useEffect, useMemo } from \"react\";\nimport type { Token } from \"../types\";\nimport { useTokensStore } from \"../store/use-token-store\";\nimport { useChainsStore } from \"../store/use-chains-store\";\nimport { getDestTokens } from \"../api/api\";\n\nfunction resolveTokenOnChainFromMatrix(\n assetMatrix: Record<string, Record<string, Token>> | undefined,\n assetSymbol: string | undefined,\n chainKey: string | undefined\n): Token | undefined {\n if (!assetMatrix || !assetSymbol || !chainKey) return undefined;\n const byChain = assetMatrix[assetSymbol.toUpperCase()];\n return byChain?.[chainKey];\n}\n\nexport const useChainDerivations = () => {\n const { selectedAssetSymbol, assetMatrix } = useTokensStore();\n const {\n chains,\n fromChain,\n toChain,\n setFromChain,\n setToChain,\n allowedFromChains,\n setAllowedFromChains,\n allowedToChains,\n setAllowedToChains,\n isLoadingToChains,\n setIsLoadingToChains,\n } = useChainsStore();\n\n const supportedFrom = useMemo(() => {\n if (\n typeof selectedAssetSymbol !== \"string\" ||\n !assetMatrix ||\n !chains?.length\n )\n return [];\n const byChain = assetMatrix[selectedAssetSymbol.toUpperCase()];\n\n const keys = new Set(Object.keys(byChain ?? {}));\n const result = chains.filter((c) => keys.has(c.chainKey));\n\n return result;\n }, [selectedAssetSymbol, assetMatrix, chains]);\n\n useEffect(() => {\n setAllowedFromChains(supportedFrom);\n\n if (!supportedFrom.length) {\n if (fromChain) setFromChain(undefined);\n if (toChain) setToChain(undefined);\n setAllowedToChains([]);\n return;\n }\n\n if (!fromChain) {\n setFromChain(supportedFrom[0]);\n setToChain(undefined);\n setAllowedToChains([]);\n return;\n }\n\n if (!supportedFrom.some((c) => c.chainKey === fromChain.chainKey)) {\n setToChain(undefined);\n setAllowedToChains([]);\n }\n }, [\n supportedFrom,\n fromChain,\n toChain,\n setAllowedFromChains,\n setFromChain,\n setToChain,\n setAllowedToChains,\n ]);\n\n useEffect(() => {\n let ignore = false;\n\n const run = async () => {\n if (!selectedAssetSymbol || !fromChain?.chainKey || !chains?.length) {\n setAllowedToChains([]);\n return;\n }\n\n const srcToken = resolveTokenOnChainFromMatrix(\n assetMatrix,\n selectedAssetSymbol,\n fromChain.chainKey\n );\n const srcAddr = srcToken?.address;\n if (!srcAddr) {\n setAllowedToChains([]);\n return;\n }\n\n setIsLoadingToChains(true);\n try {\n if (ignore) return;\n const dest = await getDestTokens(fromChain.chainKey, srcAddr);\n\n const byChainSameSymbol =\n assetMatrix?.[selectedAssetSymbol.toUpperCase()] ?? {};\n const expectedAddrByChain = new Map(\n Object.entries(byChainSameSymbol).map(([ck, tok]) => [\n ck,\n (tok.address ?? \"\").toLowerCase(),\n ])\n );\n\n const filteredDest = dest.filter((t) => {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const ck = (t as Token).chainKey ?? (t as any).dstChainKey ?? \"\";\n const expected = expectedAddrByChain.get(ck);\n const got = (t.address ?? \"\").toLowerCase();\n return !!expected && expected === got;\n });\n\n const keys = new Set(filteredDest.map((t) => t.chainKey));\n let list = chains.filter((c) => keys.has(c.chainKey));\n\n if (fromChain?.chainKey) {\n list = list.filter((c) => c.chainKey !== fromChain.chainKey);\n }\n\n setAllowedToChains(list);\n if (!toChain || !list.some((c) => c.chainKey === toChain.chainKey)) {\n setToChain(list[0]);\n }\n } catch (e) {\n if (!ignore) {\n console.error(\"Failed to load destination chains\", e);\n setAllowedToChains([]);\n setToChain(undefined);\n }\n } finally {\n if (!ignore) setIsLoadingToChains(false);\n }\n };\n\n run();\n return () => {\n ignore = true;\n };\n }, [\n selectedAssetSymbol,\n assetMatrix,\n fromChain?.chainKey,\n chains,\n toChain,\n setAllowedToChains,\n setToChain,\n setIsLoadingToChains,\n ]);\n\n return {\n allowedFromChains,\n allowedToChains,\n isLoadingToChains,\n };\n};\n","import { useMemo, useCallback } from \"react\";\nimport { useQuery } from \"@tanstack/react-query\";\nimport { useChainStrategies } from \"../use-chain-strategies\";\nimport { useTokensStore } from \"../../store/use-token-store\";\nimport type { Token } from \"../../types\";\nimport { isAddressValidForChain } from \"../../lib/address-validation\";\nimport { normalizeTickerSymbol } from \"../../api/api\";\n\nexport interface BalanceData {\n balance: number;\n isLoading: boolean;\n}\n\nexport function useBalances(chainKey?: string, address?: string) {\n const { chainRegistry } = useChainStrategies();\n const { assetMatrix } = useTokensStore();\n\n const tokensOnChain = useMemo(() => {\n if (!chainKey || !assetMatrix) return [] as Token[];\n\n const tokensList: Token[] = [];\n\n for (const [, byChain] of Object.entries(assetMatrix)) {\n const token = byChain[chainKey];\n // Фильтруем токены с невалидными адресами\n if (token && token.address && token.address.length > 2) {\n tokensList.push(token);\n }\n }\n\n return tokensList;\n }, [assetMatrix, chainKey]);\n\n const query = useQuery({\n queryKey: [\"balances\", chainKey, address],\n queryFn: async () => {\n if (!address || !chainKey)\n return {} as Record<string, { balance: number; address: string }>;\n if (!isAddressValidForChain(chainKey, address)) return {};\n\n return await chainRegistry.getBalances(chainKey, address, tokensOnChain);\n },\n enabled:\n !!address &&\n !!chainKey &&\n !!assetMatrix &&\n tokensOnChain.length > 0 &&\n isAddressValidForChain(chainKey, address),\n staleTime: 60_000,\n gcTime: 5 * 60_000,\n refetchOnWindowFocus: false,\n refetchInterval: 60_000,\n refetchIntervalInBackground: false,\n });\n\n const balanceBySymbol = useMemo(() => {\n const map = new Map<string, number>();\n const data = query.data as Record<string, { balance: number }> | undefined;\n if (data) {\n for (const [sum, v] of Object.entries(data)) {\n map.set(normalizeTickerSymbol(sum), Number(v.balance ?? 0));\n }\n }\n return map;\n }, [query.data]);\n\n const getBalance = useCallback(\n (symbol: string) => balanceBySymbol.get(normalizeTickerSymbol(symbol)) ?? 0,\n [balanceBySymbol]\n );\n\n const isLoading = query.isLoading || query.isFetching;\n\n // Memoize balances to prevent creating new empty object on every render\n const balances = useMemo(() => query.data || {}, [query.data]);\n\n return {\n balances,\n getBalance,\n isLoading,\n query,\n };\n}\n","import { useCallback, useMemo } from \"react\";\nimport { useChainsStore } from \"../../store/use-chains-store\";\nimport { useTokensStore } from \"../../store/use-token-store\";\nimport { useBridgeQuote } from \"./use-bridge-quote\";\nimport { useBridgeQuoteStore } from \"../../store/use-bridge-quote-store\";\nimport { useChainDerivations } from \"../use-chain-derivations\";\nimport { useBalances, type BalanceData } from \"../api/use-balances\";\nimport { useAddresses } from \"../use-addresses\";\n\nexport function useSwapModel() {\n const chainsStore = useChainsStore();\n const tokensStore = useTokensStore();\n const { srcAddress, dstAddress } = useAddresses();\n const { allowedFromChains, allowedToChains, isLoadingToChains } =\n useChainDerivations();\n\n const srcBalances = useBalances(\n chainsStore.fromChain?.chainKey,\n srcAddress\n );\n const dstBalances = useBalances(\n chainsStore.toChain?.chainKey,\n dstAddress\n );\n\n const { loading } = useBridgeQuote();\n const { inputAmount, setInputAmount, resetWithIdle } = useBridgeQuoteStore();\n\n const fromBalance: BalanceData = useMemo(\n () => ({\n balance: srcBalances.getBalance(tokensStore.selectedAssetSymbol || \"\"),\n isLoading: srcBalances.isLoading,\n }),\n [srcBalances, tokensStore.selectedAssetSymbol]\n );\n\n const receiveBalance: BalanceData = useMemo(\n () => ({\n balance: dstBalances.getBalance(tokensStore.selectedAssetSymbol || \"\"),\n isLoading: dstBalances.isLoading,\n }),\n [dstBalances, tokensStore.selectedAssetSymbol]\n );\n\n const state = useMemo(\n () => ({\n fromChain: chainsStore.fromChain,\n toChain: chainsStore.toChain,\n selectedAssetSymbol: tokensStore.selectedAssetSymbol,\n }),\n [\n chainsStore.fromChain,\n chainsStore.toChain,\n tokensStore.selectedAssetSymbol,\n ]\n );\n\n const actions = {\n setFromChain: chainsStore.setFromChain,\n setToChain: chainsStore.setToChain,\n setAmount: setInputAmount,\n swapSides: useCallback(() => {\n const fromChain = chainsStore.fromChain;\n const toChain = chainsStore.toChain;\n const sym = (tokensStore.selectedAssetSymbol ?? \"\").toUpperCase();\n if (!fromChain || !toChain || !sym) return;\n\n // мгновенно скрыть старые направления\n chainsStore.setAllowedToChains([]);\n\n // 1) перекидываем цепочки\n chainsStore.setFromChain(toChain);\n\n // 2) проверяем доступность ассета на новой source\n const tokenOnNewFrom = tokensStore.assetMatrix?.[sym]?.[toChain.chainKey];\n if (tokenOnNewFrom) {\n chainsStore.setToChain(fromChain);\n } else {\n chainsStore.setToChain(undefined);\n }\n\n // 3) сбрасываем котировку (адреса пересчитаются автоматически)\n resetWithIdle();\n }, [chainsStore, tokensStore, resetWithIdle]),\n } as const;\n\n return {\n ...state,\n amount: inputAmount,\n loadingQuote: loading,\n fromBalance,\n receiveBalance,\n allowedFromChains,\n allowedToChains,\n isLoadingToChains,\n actions,\n };\n}\n","import type { SVGProps } from \"react\";\n\nexport const ArrowDownIcon = (props: SVGProps<SVGSVGElement>) => {\n return (\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <path\n d=\"M13.2788 5.96875L8.93208 10.3154C8.41875 10.8288 7.57875 10.8288 7.06542 10.3154L2.71875 5.96875\"\n stroke=\"currentColor\"\n strokeOpacity=\"0.7\"\n strokeWidth=\"1.5\"\n strokeMiterlimit=\"10\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n );\n};\n","import type { SVGProps } from \"react\";\n\nexport const BoltIcon = (props: SVGProps<SVGSVGElement>) => {\n return (\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <path\n d=\"M2 6.0651V9.91177C2 11.3251 2 11.3251 3.33333 12.2251L7 14.3451C7.55333 14.6651 8.45333 14.6651 9 14.3451L12.6667 12.2251C14 11.3251 14 11.3251 14 9.91844V6.0651C14 4.65844 14 4.65844 12.6667 3.75844L9 1.63844C8.45333 1.31844 7.55333 1.31844 7 1.63844L3.33333 3.75844C2 4.65844 2 4.65844 2 6.0651Z\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M8 9.99219C9.10457 9.99219 10 9.09676 10 7.99219C10 6.88762 9.10457 5.99219 8 5.99219C6.89543 5.99219 6 6.88762 6 7.99219C6 9.09676 6.89543 9.99219 8 9.99219Z\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n );\n};\n","import type { SVGProps } from \"react\";\n\nexport const ReloadIcon = (props: SVGProps<SVGSVGElement>) => {\n return (\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <path\n d=\"M14 8C14 11.312 11.312 14 8 14C4.688 14 2.666 10.664 2.666 10.664M2.666 10.664H5.378M2.666 10.664V13.664M2 8C2 4.688 4.664 2 8 2C12.002 2 14 5.336 14 5.336M14 5.336V2.336M14 5.336H11.336\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n );\n};\n","import type { SVGProps } from \"react\";\n\nexport const WalletIcon = (props: SVGProps<SVGSVGElement>) => {\n return (\n <svg\n width=\"18\"\n height=\"18\"\n viewBox=\"0 0 18 18\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <g opacity=\"0.6\">\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M11.5825 11.5075C10.45 11.5075 9.52752 10.585 9.52752 9.44498V8.55998C9.52752 7.41999 10.45 6.49749 11.5825 6.49749C12.4679 6.49749 14.2012 6.50243 14.8246 6.5043C14.9511 6.50467 15.0535 6.40062 15.0434 6.27461C14.8832 4.26772 13.2073 2.6875 11.1625 2.6875H6.02499C3.8725 2.6875 2.125 4.4425 2.125 6.59501V11.4175C2.125 13.57 3.8725 15.3175 6.02499 15.3175H11.1625C13.2077 15.3175 14.8907 13.7369 15.0442 11.7297C15.0538 11.6039 14.9515 11.5004 14.8254 11.5007C14.2026 11.5025 12.4683 11.5075 11.5825 11.5075Z\"\n fill=\"currentColor\"\n fillOpacity=\"0.5\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M12.1785 9.5375C11.8784 9.5375 11.6385 9.29749 11.6385 9.00499C11.6385 8.71249 11.8784 8.4725 12.1785 8.4725C12.471 8.4725 12.7109 8.71249 12.7109 9.00499C12.7109 9.29749 12.471 9.5375 12.1785 9.5375ZM14.9309 7.625H11.5784C11.0609 7.625 10.6484 8.045 10.6484 8.5625V9.4475C10.6484 9.965 11.0609 10.385 11.5784 10.385H14.9309C15.4484 10.385 15.8685 9.965 15.8685 9.4475V8.5625C15.8685 8.045 15.4484 7.625 14.9309 7.625Z\"\n fill=\"currentColor\"\n fillOpacity=\"0.5\"\n />\n </g>\n </svg>\n );\n};\n","import { type SVGProps } from \"react\";\n\nexport const ArrowSwapIcon = (props: SVGProps<SVGSVGElement>) => {\n return (\n <svg\n width=\"20\"\n height=\"20\"\n viewBox=\"0 0 20 20\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <path\n d=\"M4.17188 7.55482L7.76601 4.95312V15.0425M15.8385 12.4408L12.2443 15.0425V4.95312\"\n stroke=\"currentColor\"\n strokeWidth=\"1.4\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n );\n};\n","import type { SVGProps } from \"react\";\n\nexport const SearchIcon = (props: SVGProps<SVGSVGElement>) => {\n return (\n <svg\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <path\n d=\"M11.5 21C16.7467 21 21 16.7467 21 11.5C21 6.25329 16.7467 2 11.5 2C6.25329 2 2 6.25329 2 11.5C2 16.7467 6.25329 21 11.5 21Z\"\n stroke=\"currentColor\"\n strokeOpacity=\"0.65\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M22 22L20 20\"\n stroke=\"currentColor\"\n strokeOpacity=\"0.65\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n );\n};\n","import type { SVGProps } from \"react\";\n\nexport const StargateIcon = (props: SVGProps<SVGSVGElement>) => {\n return (\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <g clipPath=\"url(#clip0_13294_89003)\">\n <path\n d=\"M9.58707 0.636789L10.0135 1.63492C10.8488 3.59268 12.4067 5.15059 14.3644 5.98584L15.3626 6.41231C15.6232 6.52489 15.8365 6.68184 15.9994 6.87438C15.4988 3.31131 12.6851 0.494623 9.125 0C9.31455 0.1629 9.47449 0.376148 9.58707 0.636789Z\"\n fill=\"#999999\"\n />\n <path\n d=\"M0.636791 6.41231L1.63492 5.98584C3.59268 5.15059 5.15059 3.59268 5.98876 1.63492L6.41528 0.636789C6.52781 0.376148 6.68775 0.1629 6.8773 0C3.31131 0.494623 0.497584 3.31131 0 6.87139C0.1629 6.68184 0.37615 6.52189 0.636791 6.40937V6.41231Z\"\n fill=\"#999999\"\n />\n <path\n d=\"M15.3626 9.58017L14.3644 10.0067C12.4067 10.8419 10.8488 12.4028 10.0135 14.3606L9.58707 15.3557C9.47449 15.6164 9.31455 15.8296 9.125 15.9925C12.6851 15.4949 15.4988 12.6812 15.9964 9.12109C15.8335 9.31065 15.6203 9.47059 15.3596 9.58317L15.3626 9.58017Z\"\n fill=\"#999999\"\n />\n <path\n d=\"M6.4153 15.3587L5.98878 14.3635C5.15355 12.4057 3.59268 10.8478 1.63492 10.0096L0.636789 9.58311C0.37615 9.47059 0.1629 9.31359 0 9.12109C0.497584 12.6812 3.31131 15.4979 6.87139 15.9925C6.68184 15.8296 6.52189 15.6164 6.40937 15.3557L6.4153 15.3587Z\"\n fill=\"#999999\"\n />\n <path\n d=\"M4.37473 7.21715L4.86639 7.00685C5.83193 6.59514 6.59903 5.82804 7.01074 4.86248L7.22104 4.37082C7.51425 3.68368 8.49163 3.68368 8.78489 4.37082L8.99514 4.86248C9.40685 5.82804 10.1739 6.59514 11.1395 7.00685L11.6312 7.21715C12.3183 7.51036 12.3183 8.4848 11.6312 8.78095L11.1395 8.99125C10.1739 9.40296 9.40685 10.1701 8.99514 11.1356L8.78489 11.6273C8.49163 12.3144 7.51425 12.3144 7.22104 11.6273L7.01074 11.1356C6.59903 10.1701 5.83193 9.40296 4.86639 8.99125L4.37473 8.78095C3.68759 8.48774 3.68759 7.5133 4.37473 7.21715Z\"\n fill=\"currentColor\"\n />\n </g>\n <defs>\n <clipPath id=\"clip0_13294_89003\">\n <rect width=\"16\" height=\"16\" fill=\"white\" />\n </clipPath>\n </defs>\n </svg>\n );\n};\n","import type { SVGProps } from \"react\";\n\nexport const MetaMaskIcon = (props: SVGProps<SVGSVGElement>) => {\n return (\n <svg\n width=\"31\"\n height=\"31\"\n viewBox=\"0 0 31 31\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <mask\n id=\"mask0_13528_106779\"\n maskUnits=\"userSpaceOnUse\"\n x=\"0\"\n y=\"0\"\n width=\"31\"\n height=\"31\"\n >\n <circle cx=\"15.5\" cy=\"15.5\" r=\"15.5\" fill=\"#190066\" />\n </mask>\n <g mask=\"url(#mask0_13528_106779)\">\n <circle cx=\"15.5\" cy=\"15.5\" r=\"15.5\" fill=\"#190066\" />\n </g>\n <g clipPath=\"url(#clip0_13528_106779)\">\n <path\n d=\"M23.1854 23.0614L19.3864 21.9326L16.5214 23.6416L14.5224 23.6407L11.6556 21.9326L7.85821 23.0612L6.70312 19.1703L7.85821 14.8517L6.70312 11.2002L7.85821 6.6748L13.7921 10.2122H17.2517L23.1854 6.6748L24.3405 11.2002L23.1854 14.8515L24.3405 19.1701L23.1854 23.0614Z\"\n fill=\"#FF5C16\"\n />\n <path\n d=\"M7.85156 6.6748L13.7855 10.2149L13.5494 12.6443L7.85156 6.6748ZM11.6495 19.1716L14.2605 21.1561L11.6495 21.9323V19.1716ZM14.051 15.8903L13.5492 12.6456L10.3374 14.8519L10.3356 14.851V14.8528L10.3456 17.1237L11.6481 15.8903H14.051ZM23.1775 6.6748L17.2438 10.2149L17.4788 12.6443L23.1775 6.6748ZM19.3808 19.1716L16.7702 21.156L19.381 21.9321L19.3808 19.1716ZM20.693 14.8526V14.851L20.6922 14.8519L17.4801 12.6456L16.9784 15.8903H19.3806L20.6838 17.1237L20.693 14.8526Z\"\n fill=\"#FF5C16\"\n />\n <path\n d=\"M11.6558 21.9281L7.85821 23.0567L6.70312 19.1675H11.6558V21.9281ZM14.0577 15.8857L14.783 20.5764L13.7777 17.9685L10.3514 17.1201L11.6545 15.8859L14.0577 15.8857ZM19.388 21.9281L23.1856 23.0567L24.3407 19.1675H19.388V21.9281ZM16.9862 15.8857L16.2608 20.5764L17.2661 17.9685L20.6925 17.1201L19.3884 15.8859L16.9862 15.8857Z\"\n fill=\"#E34807\"\n />\n <path\n d=\"M6.70312 19.1685L7.85821 14.8496H10.3424L10.3515 17.1215L13.7779 17.9697L14.7832 20.5777L14.2664 21.1521L11.6558 19.1675H6.70312V19.1685ZM24.3409 19.1685L23.1858 14.8496H20.7016L20.6925 17.1215L17.2661 17.9697L16.2608 20.5777L16.7776 21.1521L19.3884 19.1675H24.3407L24.3409 19.1685ZM17.2519 10.21H13.7923L13.5571 12.6394L14.7834 20.5746H16.2608L17.488 12.6394L17.2519 10.21Z\"\n fill=\"#FF8D5D\"\n />\n <path\n d=\"M7.85821 6.6748L6.70312 11.2002L7.85821 14.8515H10.3424L13.556 12.6443L7.85821 6.6748ZM13.3407 16.8324H12.2154L11.6025 17.4318L13.7793 17.9705L13.3407 16.8317V16.8324ZM23.1856 6.6748L24.3407 11.2002L23.1856 14.8515H20.7014L17.4878 12.6443L23.1856 6.6748ZM17.705 16.8324H18.8317L19.4446 17.4327L17.2652 17.9721L17.705 16.8317V16.8324ZM16.5209 22.0935L16.7776 21.1554L16.261 20.5811H14.7828L14.2662 21.1554L14.523 22.0934\"\n fill=\"#661800\"\n />\n <path\n d=\"M16.5176 22.0928V23.6414H14.5195V22.0928H16.5176Z\"\n fill=\"#C0C4CD\"\n />\n <path\n d=\"M11.6602 21.9353L14.5277 23.6459V22.0971L14.2711 21.1592L11.6602 21.9353ZM19.3914 21.9353L16.5239 23.6459V22.0971L16.7805 21.1592L19.3914 21.9353Z\"\n fill=\"#E7EBF6\"\n />\n </g>\n <defs>\n <clipPath id=\"clip0_13528_106779\">\n <rect\n width=\"17.7143\"\n height=\"17.1664\"\n fill=\"white\"\n transform=\"translate(6.65234 6.64355)\"\n />\n </clipPath>\n </defs>\n </svg>\n );\n};\n","import type { SVGProps } from \"react\";\n\nexport const WalletConnectIcon = (props: SVGProps<SVGSVGElement>) => {\n return (\n <svg\n width=\"31\"\n height=\"31\"\n viewBox=\"0 0 31 31\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <g clipPath=\"url(#clip0_13528_106803)\">\n <path\n d=\"M15.5 31C6.93959 31 0 24.0604 0 15.5C0 6.93959 6.93959 0 15.5 0C24.0604 0 31 6.93959 31 15.5C31 24.0604 24.0604 31 15.5 31Z\"\n fill=\"#2A425C\"\n />\n <path\n d=\"M20.364 14.1881L22.1887 12.3747C18.0647 8.27614 12.9404 8.27614 8.81641 12.3747L10.6411 14.1881C13.7775 11.071 17.2297 11.071 20.3661 14.1881H20.364Z\"\n fill=\"#3A99FB\"\n />\n <path\n d=\"M19.7567 18.4127L15.5013 14.1836L11.2459 18.4127L6.9905 14.1836L5.16797 15.9949L11.2459 22.0374L15.5013 17.8083L19.7567 22.0374L25.8346 15.9949L24.0121 14.1836L19.7567 18.4127Z\"\n fill=\"#3A99FB\"\n />\n </g>\n <defs>\n <clipPath id=\"clip0_13528_106803\">\n <rect width=\"31\" height=\"31\" fill=\"white\" />\n </clipPath>\n </defs>\n </svg>\n );\n};\n","import type { SVGProps } from \"react\";\n\nexport const TonConnectIcon = (props: SVGProps<SVGSVGElement>) => {\n return (\n <svg\n width=\"30\"\n height=\"30\"\n viewBox=\"0 0 30 30\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <rect width=\"30\" height=\"30\" rx=\"7.74194\" fill=\"#0098EA\" />\n <path\n d=\"M20.4479 7.74219H10.2042C8.3207 7.74219 7.12693 9.77392 8.07447 11.4163L14.3966 22.3743C14.8091 23.0897 15.843 23.0897 16.2555 22.3743L22.5789 11.4163C23.5252 9.7765 22.3314 7.74219 20.4492 7.74219H20.4479ZM14.3914 19.0882L13.0146 16.4234L9.69238 10.4817C9.47322 10.1014 9.74394 9.61406 10.2029 9.61406H14.3901V19.0894L14.3914 19.0882ZM20.9571 10.4804L17.6362 16.4247L16.2594 19.0882V9.61277H20.4466C20.9056 9.61277 21.1763 10.1001 20.9571 10.4804Z\"\n fill=\"white\"\n />\n </svg>\n );\n};\n","import type { SVGProps } from \"react\";\n\nexport const TronLinkIcon = (props: SVGProps<SVGSVGElement>) => {\n return (\n <svg\n width=\"30\"\n height=\"30\"\n viewBox=\"0 0 30 30\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <g clipPath=\"url(#clip0_13294_90375)\">\n <rect width=\"30\" height=\"30\" rx=\"7.74194\" fill=\"#0C5CCE\" />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M22.843 19.2866L33.8876 17.2257L21.219 33.128L22.843 19.2866ZM21.4143 18.6579L19.7122 33.1286L10.5271 9.37849L21.4143 18.6579ZM22.1308 16.6062L11.7148 7.93224L28.7382 11.0777L22.1308 16.6062ZM30.4674 11.8559L34.0858 15.3861L24.1884 17.2254L30.4674 11.8559ZM31.3621 10.3519C31.0831 10.078 30.7291 9.89297 30.3451 9.82002L8.52615 5.67614C8.01797 5.57962 7.60141 6.07878 7.78729 6.56149L19.3533 36.5964C19.5367 37.0725 20.1679 37.1693 20.4855 36.7699L36.3132 16.867C36.7338 16.338 36.6869 15.5769 36.2046 15.1036L31.3621 10.3519Z\"\n fill=\"white\"\n />\n </g>\n <defs>\n <clipPath id=\"clip0_13294_90375\">\n <rect width=\"30\" height=\"30\" rx=\"7.74194\" fill=\"white\" />\n </clipPath>\n </defs>\n </svg>\n );\n};\n","import type { SVGProps } from \"react\";\n\nexport const ExitIcon = (props: SVGProps<SVGSVGElement>) => {\n return (\n <svg\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <path\n d=\"M8.89844 7.56219C9.20844 3.96219 11.0584 2.49219 15.1084 2.49219H15.2384C19.7084 2.49219 21.4984 4.28219 21.4984 8.75219V15.2722C21.4984 19.7422 19.7084 21.5322 15.2384 21.5322H15.1084C11.0884 21.5322 9.23844 20.0822 8.90844 16.5422\"\n stroke=\"#808080\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M2 12H14.88\"\n stroke=\"#808080\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M12.6484 8.64844L15.9984 11.9984L12.6484 15.3484\"\n stroke=\"#808080\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n );\n};\n","import React, { useCallback, useMemo, useState } from \"react\";\nimport { Button } from \"@/components/ui/button\";\nimport { useSwapModel } from \"../../hooks/bridge/use-swap-model\";\nimport { ArrowSwapIcon } from \"../../assets/icons\";\nimport { cn } from \"@/lib/utils\";\n\nexport const SwapButton: React.FC = () => {\n const swapModel = useSwapModel();\n const canSwap = useMemo(\n () =>\n !!(\n swapModel.fromChain &&\n swapModel.toChain &&\n swapModel.selectedAssetSymbol\n ),\n [swapModel.fromChain, swapModel.toChain, swapModel.selectedAssetSymbol]\n );\n const [turns, setTurns] = useState(0);\n const [isSwapping, setIsSwapping] = useState(false);\n\n const handleSwap = useCallback(() => {\n if (!canSwap || isSwapping) return;\n setIsSwapping(true);\n setTurns((t) => t + 1);\n swapModel.actions.swapSides();\n\n setTimeout(() => {\n setIsSwapping(false);\n }, 300);\n }, [canSwap, isSwapping, swapModel.actions]);\n\n return (\n <div className=\"relative\">\n <Button\n onClick={handleSwap}\n disabled={!canSwap || isSwapping}\n variant=\"secondary\"\n size=\"sm\"\n className={cn(\n \"bg-bridge-button text-bridge-button-foreground hover:text-bridge-button-foreground backdrop-blur-md h-9 w-9 p-0\",\n \"absolute top-1/2 -translate-y-1/2 left-1/2 -translate-x-1/2\",\n !canSwap || isSwapping\n ? \"opacity-50 cursor-not-allowed\"\n : \"hover:scale-110\"\n )}\n >\n <ArrowSwapIcon\n style={{\n transform: `rotate(${turns * 180}deg)`,\n transition: \"transform 300ms linear\",\n }}\n />\n </Button>\n </div>\n );\n};\n","import React from \"react\";\nimport { WalletIcon } from \"../../assets/icons\";\nimport { Skeleton } from \"@/components/ui/skeleton\";\nimport { Button } from \"@/components/ui/button\";\nimport { useBridgeTranslation } from \"../../i18n/BridgeI18nProvider\";\n\ninterface Props {\n value: string;\n isLoading?: boolean;\n showMax?: boolean;\n onMaxClick?: () => void;\n}\n\nexport const WalletBalance: React.FC<Props> = (props) => {\n const { value, isLoading = false, showMax = false, onMaxClick } = props;\n const { t } = useBridgeTranslation();\n\n const hasNoData =\n !value || value === \"0\" || value === \"0.00\" || value === \"0.0\";\n\n const shouldShowSkeleton = isLoading && hasNoData;\n const shouldShowMaxButton = showMax && !hasNoData && !isLoading;\n\n if (shouldShowSkeleton) {\n return (\n <div className=\"flex gap-2 items-center\">\n <WalletIcon className=\"text-muted-foreground\" />\n <Skeleton className=\"h-4 w-12 rounded-md\" />\n </div>\n );\n }\n\n return (\n <div className=\"flex gap-2 items-center\">\n <WalletIcon className=\"text-muted-foreground\" />\n <span className=\"text-sm leading-5 font-medium text-muted-foreground\">\n {value}\n </span>\n {shouldShowMaxButton && (\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={onMaxClick}\n className=\"h-auto p-0 px-0 text-xs text-bridge-link font-medium underline hover:opacity-70 hover:bg-transparent cursor-pointer rounded-none\"\n >\n {t(\"bridge.max\")}\n </Button>\n )}\n </div>\n );\n};\n","interface NetworkSymbolProps {\n chainKey: string;\n className?: string;\n alt?: string;\n}\n\nconst BASE_URL = \"https://icons-ckg.pages.dev/stargate-light/networks\";\nconst DEFAULT_URL =\n \"https://icons-ckg.pages.dev/stargate-light/tokens/default.svg\";\n\nexport const NetworkSymbol = ({\n chainKey,\n className = \"w-4 h-4\",\n alt,\n}: NetworkSymbolProps) => {\n const normalizedChainKey = chainKey.toLowerCase();\n const src =\n chainKey === \"default\"\n ? DEFAULT_URL\n : `${BASE_URL}/${normalizedChainKey}.svg`;\n\n return <img src={src} alt={alt ?? chainKey} className={className} />;\n};\n","import { useMemo } from \"react\";\nimport { useBridgeTranslation } from \"../../i18n/BridgeI18nProvider\";\nimport { ArrowDownIcon } from \"../../assets/icons\";\nimport { Button } from \"@/components/ui/button\";\nimport type { Chain } from \"../../types\";\nimport { NetworkSymbol } from \"./network-symbol\";\n\ntype SelectNetworkButtonProps = {\n onClick?: () => void;\n network?: Pick<Chain, \"chainKey\" | \"name\">;\n};\n\nexport const SelectNetworkButton = ({\n onClick,\n network,\n}: SelectNetworkButtonProps) => {\n const { t } = useBridgeTranslation();\n\n const label = useMemo(() => {\n return network?.name ?? t(\"bridge.selectNetwork\");\n }, [network, t]);\n\n return (\n <Button\n onClick={onClick}\n size=\"sm\"\n variant=\"secondary\"\n type=\"button\"\n className=\"shrink-0 gap-2 h-9 !pl-2 bg-bridge-button text-bridge-button-foreground hover:text-bridge-button-foreground\"\n aria-label={label}\n >\n <div className=\"flex gap-2 items-center\">\n <NetworkSymbol\n chainKey={network?.chainKey ?? \"default\"}\n className=\"w-6 h-6 rounded-full\"\n alt={label}\n />\n <span>{label}</span>\n </div>\n <ArrowDownIcon className=\"w-4 h-4\" />\n </Button>\n );\n};\n","import { Input } from \"@/components/ui/input\";\nimport { Skeleton } from \"@/components/ui/skeleton\";\nimport { cn } from \"@/lib/utils\";\nimport React, {\n forwardRef,\n useCallback,\n useEffect,\n useState,\n type ChangeEvent,\n} from \"react\";\n\nconst normalizeValue = (value: string, max?: number): string | undefined => {\n const targetValue = value.replace(/,/g, \".\");\n const decimalRegex = /^(\\d+([.]\\d*)?|[.]\\d+)?$/;\n\n if (decimalRegex.test(targetValue)) {\n const numberValue = parseFloat(targetValue);\n\n if (max && targetValue !== \".\" && numberValue > max) {\n return String(max);\n }\n return targetValue;\n }\n\n return undefined;\n};\n\ntype CurrencyInputProps = {\n value: string;\n max?: number;\n onAmountChange: (value: string) => void;\n showSkeleton?: boolean;\n} & Omit<\n React.InputHTMLAttributes<HTMLInputElement>,\n \"value\" | \"onChange\" | \"type\" | \"inputMode\" | \"pattern\"\n>;\n\nexport const TokenInput = forwardRef<HTMLInputElement, CurrencyInputProps>(\n (\n {\n value,\n onAmountChange,\n showSkeleton = false,\n className,\n max,\n readOnly,\n ...rest\n },\n ref\n ) => {\n const [inputVal, setInputVal] = useState<string>(value ?? \"\");\n\n useEffect(() => {\n setInputVal(value ?? \"\");\n }, [value]);\n\n const handleChange = useCallback(\n (event: ChangeEvent<HTMLInputElement>) => {\n const raw = event.target.value;\n const normalized = normalizeValue(raw, max);\n if (normalized === undefined) return;\n setInputVal(normalized);\n onAmountChange(normalized);\n },\n [max, onAmountChange]\n );\n\n if (showSkeleton && readOnly) {\n return <Skeleton className={cn(\"h-8 my-2 w-1/3 bg-secondary rounded-md\", className)} />;\n }\n\n return (\n <>\n <Input\n ref={ref}\n value={inputVal}\n onChange={handleChange}\n type=\"text\"\n placeholder=\"0.0\"\n inputMode=\"decimal\"\n pattern=\"[0-9]*[.,]?[0-9]*\"\n readOnly={readOnly}\n className={cn(\n \"text-4xl h-12 font-medium leading-9 rounded-none text-end bg-transparent dark:bg-transparent text-foreground shadow-none border-none outline-none ring-0 focus:outline-none focus-visible:ring-0 focus-visible:outline-0 focus-visible:ring-offset-0\",\n className\n )}\n max={max}\n {...rest}\n />\n </>\n );\n }\n);\n\nTokenInput.displayName = \"TokenInput\";\n","import { useCallback, useState } from \"react\";\n\nexport function useModal(initial = false) {\n const [isOpen, setOpen] = useState<boolean>(initial);\n\n const onOpen = useCallback(() => setOpen(true), []);\n const onClose = useCallback(() => setOpen(false), []);\n const toggle = useCallback(() => setOpen((v) => !v), []);\n\n return { isOpen, onOpen, onClose, toggle };\n}\n","import { SearchIcon } from \"../../assets/icons\";\nimport { Input } from \"@/components/ui/input\";\nimport { cn } from \"@/lib/utils\";\n\ninterface SearchInputProps {\n placeholder: string;\n value: string;\n onChange: (value: string) => void;\n className?: string;\n}\n\nexport const SearchInput = ({\n placeholder,\n value,\n onChange,\n className,\n}: SearchInputProps) => {\n return (\n <div className={cn(\"rounded-xs relative\")}>\n <SearchIcon className=\"w-6 h-6 absolute z-10 left-5 top-0 bottom-0 my-auto text-foreground\" />\n <Input\n placeholder={placeholder}\n className={cn(\n \"w-full outline-none px-5 py-4 relative pl-16 bg-input border transition-all border-transparent rounded-xs ring-0 leading-0 h-13 text-base focus-visible:border focus-visible:border-ring\",\n className\n )}\n value={value}\n onChange={(e) => onChange(e.target.value)}\n />\n </div>\n );\n};\n","import { useCallback, useMemo, useState } from \"react\";\nimport { useBridgeTranslation } from \"../../i18n/BridgeI18nProvider\";\nimport {\n Dialog,\n DialogContent,\n DialogHeader,\n DialogTitle,\n} from \"@/components/ui/dialog\";\nimport { useChainsStore } from \"../../store/use-chains-store\";\nimport { useTokensStore } from \"../../store/use-token-store\";\nimport { Button } from \"@/components/ui/button\";\nimport { NetworkSymbol } from \"../ui/network-symbol\";\nimport { SearchInput } from \"../ui/search-input\";\nimport type { Chain } from \"../../types\";\nimport { cn } from \"@/lib/utils\";\n\ninterface Props {\n isOpen: boolean;\n onClose: () => void;\n items: Chain[] | undefined;\n allowedItems?: Chain[] | undefined;\n onChangeChain: (v: Chain) => void;\n isSource?: boolean;\n}\n\ninterface GroupedChains {\n available: Chain[];\n willChangeSrc: Chain[];\n willChangeTokenAndSrc: Chain[];\n}\n\nexport const ChainSelectModal = ({\n isOpen,\n onClose,\n items,\n allowedItems,\n onChangeChain,\n isSource,\n}: Props) => {\n const { t } = useBridgeTranslation();\n const [query, setQuery] = useState(\"\");\n const { setFromChain, chains, fromChain, toChain } = useChainsStore();\n const { assetMatrix, selectedAssetSymbol, setSelectedAssetSymbol } =\n useTokensStore();\n\n const handleClose = useCallback(() => {\n setQuery(\"\");\n onClose();\n }, [onClose]);\n\n const findCompatibleSrcChain = useCallback(\n (dstChain: Chain): Chain | undefined => {\n if (!chains || !selectedAssetSymbol || !assetMatrix) return undefined;\n\n const PRIORITY_CHAINS = [\n \"ethereum\",\n \"arbitrum\",\n \"bsc\",\n \"polygon\",\n \"optimism\",\n \"base\",\n ];\n\n const assetByChain = assetMatrix[selectedAssetSymbol.toUpperCase()];\n if (!assetByChain) return undefined;\n\n const availableChains = chains.filter(\n (c) => assetByChain[c.chainKey] && assetByChain[dstChain.chainKey]\n );\n\n for (const chainKey of PRIORITY_CHAINS) {\n const chain = availableChains.find((c) => c.chainKey === chainKey);\n if (chain) return chain;\n }\n return availableChains[0];\n },\n [chains, selectedAssetSymbol, assetMatrix]\n );\n\n const findCompatibleTokenAndSrcChain = useCallback(\n (\n dstChain: Chain\n ): { tokenSymbol: string; sourceChain: Chain } | undefined => {\n if (!chains || !assetMatrix) return undefined;\n\n const PRIORITY_CHAINS = [\n \"ethereum\",\n \"arbitrum\",\n \"bsc\",\n \"polygon\",\n \"optimism\",\n \"base\",\n ];\n\n // Iterate through all tokens in the asset matrix\n for (const tokenSymbol of Object.keys(assetMatrix)) {\n const assetByChain = assetMatrix[tokenSymbol];\n\n // Check if this token is available on the destination chain\n if (!assetByChain[dstChain.chainKey]) continue;\n\n // Find source chains that support this token\n const availableChains = chains.filter(\n (c) => assetByChain[c.chainKey] && c.chainKey !== dstChain.chainKey\n );\n\n if (availableChains.length === 0) continue;\n\n // Pick the first priority chain, or fallback to first available\n let sourceChain: Chain | undefined;\n for (const chainKey of PRIORITY_CHAINS) {\n sourceChain = availableChains.find((c) => c.chainKey === chainKey);\n if (sourceChain) break;\n }\n if (!sourceChain) sourceChain = availableChains[0];\n\n // Return the first working combination\n return { tokenSymbol, sourceChain };\n }\n\n return undefined;\n },\n [chains, assetMatrix]\n );\n\n const groupedChains = useMemo((): GroupedChains => {\n const q = query.trim().toLowerCase();\n const filtered = q\n ? (items ?? []).filter(\n (c) =>\n c.name.toLowerCase().includes(q) ||\n c.chainKey.toLowerCase().includes(q)\n )\n : items ?? [];\n\n const groups: GroupedChains = {\n available: [],\n willChangeSrc: [],\n willChangeTokenAndSrc: [],\n };\n\n for (const chain of filtered) {\n const isAllowed =\n allowedItems?.some((c) => c.chainKey === chain.chainKey) || false;\n\n if (isAllowed) {\n groups.available.push(chain);\n } else {\n // Try to find a compatible source chain with the same token\n const compatibleSrc = findCompatibleSrcChain(chain);\n if (compatibleSrc) {\n groups.willChangeSrc.push(chain);\n } else {\n // Try to find a compatible token and source chain\n const compatibleTokenAndSrc = findCompatibleTokenAndSrcChain(chain);\n if (compatibleTokenAndSrc) {\n groups.willChangeTokenAndSrc.push(chain);\n }\n }\n }\n }\n\n groups.available.sort((a, b) => a.name.localeCompare(b.name));\n groups.willChangeSrc.sort((a, b) => a.name.localeCompare(b.name));\n groups.willChangeTokenAndSrc.sort((a, b) => a.name.localeCompare(b.name));\n return groups;\n }, [\n items,\n query,\n allowedItems,\n findCompatibleSrcChain,\n findCompatibleTokenAndSrcChain,\n ]);\n\n const onChainPick = (\n chain: Chain,\n willChangeSrc = false,\n willChangeTokenAndSrc = false\n ) => {\n if (willChangeTokenAndSrc) {\n const result = findCompatibleTokenAndSrcChain(chain);\n if (result) {\n setSelectedAssetSymbol(result.tokenSymbol);\n if (setFromChain) setFromChain(result.sourceChain);\n }\n } else if (willChangeSrc) {\n const newSrcChain = findCompatibleSrcChain(chain);\n if (newSrcChain && setFromChain) setFromChain(newSrcChain);\n }\n onChangeChain(chain);\n handleClose();\n };\n\n const renderChainItem = (\n chain: Chain,\n willChangeSrc: boolean,\n willChangeTokenAndSrc: boolean = false\n ) => {\n const isSelected = isSource\n ? fromChain?.chainKey === chain.chainKey\n : toChain?.chainKey === chain.chainKey;\n\n return (\n <Button\n key={chain.chainKey}\n onClick={() => onChainPick(chain, willChangeSrc, willChangeTokenAndSrc)}\n className={cn(\n \"w-full cursor-pointer flex shadow-none rounded-xs items-center justify-between gap-3 px-5 py-4 h-13 font-semibold capitalize bg-transparent hover:scale-100 hover:bg-accent\",\n isSelected ? \"border border-primary\" : \"\",\n willChangeSrc || willChangeTokenAndSrc ? \"opacity-50 hover:opacity-100\" : \"\"\n )}\n >\n <div className=\"flex items-center gap-3\">\n <NetworkSymbol\n chainKey={chain.chainKey}\n className=\"w-6 h-6 rounded-full\"\n alt={chain.name}\n />\n <div className=\"flex flex-col items-start\">\n <div className=\"flex items-center gap-1 \">\n <p className=\"text-foreground text-base font-semibold leading-[100%]\">\n {chain.name}\n </p>\n </div>\n </div>\n </div>\n </Button>\n );\n };\n\n return (\n <Dialog open={isOpen} onOpenChange={(open) => !open && handleClose()}>\n <DialogContent className=\"max-h-[90dvh] h-[90dvh] overflow-hidden flex flex-col p-10 pt-8\">\n <DialogHeader className=\"text-left pb-0\">\n <DialogTitle className=\"text-xl leading-8\">\n <div className=\"flex flex-col gap-0\">\n <div>{t(\"bridge.select\")}</div>\n <div>{t(isSource ? \"bridge.sourceNetwork\" : \"bridge.destinationNetwork\")}</div>\n </div>\n </DialogTitle>\n </DialogHeader>\n\n <SearchInput\n placeholder={t(\"bridge.search\")}\n value={query}\n onChange={setQuery}\n className=\"text-foreground placeholder:text-muted-foreground\"\n />\n\n <div className=\"flex-1 overflow-y-auto\">\n {groupedChains.available.length > 0 &&\n groupedChains.available.map((c) => renderChainItem(c, false))}\n\n {groupedChains.willChangeSrc.length > 0 && (\n <>\n <p\n className={`px-5 py-2 leading-4 text-base font-semibold text-muted-foreground uppercase ${\n groupedChains.available.length > 0 ? \"mt-10\" : \"\"\n }`}\n >\n {t(\"bridge.willChangeSourceChain\")}\n </p>\n {groupedChains.willChangeSrc.map((c) =>\n renderChainItem(c, true, false)\n )}\n </>\n )}\n\n {groupedChains.willChangeTokenAndSrc.length > 0 && (\n <>\n <p\n className={`px-5 py-2 leading-4 text-base font-semibold text-muted-foreground uppercase ${\n groupedChains.available.length > 0 ||\n groupedChains.willChangeSrc.length > 0\n ? \"mt-10\"\n : \"\"\n }`}\n >\n {t(\"bridge.willChangeSourceNetworkAndToken\")}\n </p>\n {groupedChains.willChangeTokenAndSrc.map((c) =>\n renderChainItem(c, false, true)\n )}\n </>\n )}\n\n {groupedChains.available.length === 0 &&\n groupedChains.willChangeSrc.length === 0 &&\n groupedChains.willChangeTokenAndSrc.length === 0 && (\n <div className=\"text-sm text-muted-foreground px-12 py-2 h-28 flex items-center justify-center text-center\">\n {t(\"bridge.chainNotFound\")}\n </div>\n )}\n </div>\n </DialogContent>\n </Dialog>\n );\n};\n","import { create } from \"zustand\";\n\nexport type WalletType = \"ton\" | \"metamask\" | \"walletconnect\" | \"coinbase\" | \"tronlink\" | \"tronwc\";\n\ninterface WalletSelectModalState {\n isOpen: boolean;\n addressType?: \"src\" | \"dst\";\n onOpen: (addressType?: \"src\" | \"dst\") => void;\n onClose: () => void;\n}\n\nexport const useWalletSelectModal = create<WalletSelectModalState>((set) => ({\n isOpen: false,\n addressType: undefined,\n onOpen: (addressType) => set({ isOpen: true, addressType }),\n onClose: () => set({ isOpen: false, addressType: undefined }),\n}));","export const EditIcon = (props: React.SVGProps<SVGSVGElement>) => {\n return (\n <svg\n width=\"18\"\n height=\"18\"\n viewBox=\"0 0 18 18\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <g clipPath=\"url(#clip0_551_3851)\">\n <path\n d=\"M9.76159 5.01068L4.91742 9.85489C4.72585 10.0465 4.54793 10.4023 4.50687 10.6622L4.24687 12.5096C4.15108 13.1801 4.61636 13.6454 5.28688 13.5496L7.13425 13.2896C7.39425 13.2486 7.76372 13.0707 7.94161 12.8791L12.7858 8.03491C13.6206 7.20018 14.0174 6.2286 12.7858 4.99702C11.5679 3.77913 10.5963 4.17594 9.76159 5.01068Z\"\n stroke=\"currentColor\"\n strokeMiterlimit=\"10\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M9.0625 5.70312C9.47303 7.18102 10.6225 8.33049 12.1004 8.74101\"\n stroke=\"currentColor\"\n strokeMiterlimit=\"10\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </g>\n <defs>\n <clipPath id=\"clip0_551_3851\">\n <rect\n width=\"12\"\n height=\"12\"\n fill=\"white\"\n transform=\"translate(3 3)\"\n />\n </clipPath>\n </defs>\n </svg>\n );\n};\n","import React, { useCallback, useMemo } from \"react\";\nimport { useBridgeTranslation } from \"../../i18n/BridgeI18nProvider\";\nimport { useChainStrategies } from \"../../hooks/use-chain-strategies\";\nimport { useWalletSelectModal } from \"../../hooks/ui/use-wallet-select-modal\";\nimport { Button } from \"@/components/ui/button\";\nimport { MetaMaskIcon, TonKeeperIcon, TronLinkIcon } from \"../../assets/icons\";\nimport type { NetworkType } from \"../../chains/chain-strategy-interface\";\nimport { formatAddress } from \"../../utils/formatters\";\nimport { EditIcon } from \"../icons/edit-icon\";\n\ninterface WalletButtonProps {\n wallet: \"ton\" | \"metamask\" | \"tronlink\";\n addressType?: \"src\" | \"dst\";\n}\n\nconst prefixIcons = {\n tronlink: <TronLinkIcon className=\"w-5 h-5\" />,\n metamask: <MetaMaskIcon className=\"w-5 h-5\" />,\n ton: <TonKeeperIcon className=\"w-5 h-5\" />,\n};\n\nconst mapWalletToType = (\n wallet: \"ton\" | \"metamask\" | \"tronlink\"\n): NetworkType => {\n switch (wallet) {\n case \"ton\":\n return \"ton\";\n case \"tronlink\":\n return \"tron\";\n case \"metamask\":\n return \"evm\";\n }\n};\n\nexport const WalletInlineButton: React.FC<WalletButtonProps> = ({\n wallet,\n addressType,\n}) => {\n const { t } = useBridgeTranslation();\n const { onOpen } = useWalletSelectModal();\n const { chainRegistry } = useChainStrategies();\n\n const walletType = mapWalletToType(wallet);\n const connection = chainRegistry.getStrategyByType(walletType);\n const account = connection?.getAccount();\n const isConnected = connection?.isConnected();\n const isConnecting = connection?.isConnecting();\n\n const isInitialized = connection?.isInitialized() ?? true;\n const error = connection?.getError();\n\n const handleClick = useCallback(() => {\n onOpen(addressType);\n }, [onOpen, addressType]);\n\n const buttonText = useMemo(() => {\n if ((wallet === \"metamask\" || wallet === \"tronlink\") && !isInitialized)\n return t(\"common.initializing\");\n if (isConnecting) return t(\"common.connecting\");\n if (isConnected && account) return formatAddress(account);\n if (wallet === \"ton\") return t(\"wallets.addTonWallet\");\n if (wallet === \"tronlink\") return t(\"wallets.addTronWallet\");\n return t(\"wallets.addEvmWallet\");\n }, [wallet, isInitialized, isConnecting, isConnected, account, t]);\n\n const isButtonDisabled =\n ((wallet === \"metamask\" || wallet === \"tronlink\") && !isInitialized) ||\n isConnecting;\n\n return (\n <div className=\"inline-flex flex-col items-start gap-1\">\n <Button\n type=\"button\"\n onClick={handleClick}\n onMouseDown={(e) => {\n e.preventDefault();\n }}\n disabled={isButtonDisabled}\n variant=\"ghost\"\n size=\"sm\"\n className=\"flex gap-1 cursor-pointer hover:opacity-60 hover:bg-transparent !px-0 pr-1 h-5\"\n >\n <span>{isConnected ? prefixIcons[wallet] : null}</span>\n <span className=\"leading-3 text-sm border-b border-dotted border-bridge-link text-bridge-link\">\n {buttonText}\n </span>\n {isConnected && <EditIcon className=\"text-bridge-link -ml-0.5\" />}\n </Button>\n\n {error && <div className=\"text-xs text-destructive\">{error}</div>}\n </div>\n );\n};\n","import React, { useCallback, useMemo, useState } from \"react\";\nimport { WalletBalance } from \"../ui/wallet-balance\";\nimport { SelectNetworkButton } from \"../ui/select-network-button\";\nimport { TokenInput } from \"../ui/token-input\";\nimport { useModal } from \"../../hooks/ui/use-modal\";\nimport { ChainSelectModal } from \"../modals/chain-select-modal\";\nimport { useTokensStore } from \"../../store/use-token-store\";\nimport { WalletInlineButton } from \"../ui/wallet-inline-button\";\nimport { Skeleton } from \"@/components/ui/skeleton\";\nimport { useBridgeQuoteStore } from \"../../store/use-bridge-quote-store\";\nimport type { Chain, Token } from \"../../types\";\nimport type { BalanceData } from \"../../hooks/api/use-balances\";\nimport { truncateToDecimals, formatUsd } from \"../../utils/formatters\";\nimport { cn } from \"@/lib/utils\";\n\ninterface SwapSectionProps {\n label: string;\n className?: string;\n balance: BalanceData;\n chain?: Chain;\n chains?: Chain[];\n allowedChains?: Chain[];\n amount?: string;\n readOnlyAmount?: boolean;\n onSelect?: (chain: Chain | undefined) => void;\n onAmountChange?: (v: string) => void;\n disableNetworkSelect?: boolean;\n isSource?: boolean;\n}\n\nfunction resolveTokenOnChainFromMatrix(\n assetMatrix: Record<string, Record<string, Token>> | undefined,\n assetSymbol: string | undefined,\n chainKey: string | undefined\n): Token | undefined {\n if (!assetMatrix || !assetSymbol || !chainKey) return undefined;\n const byChain = assetMatrix[assetSymbol.toUpperCase()];\n return byChain?.[chainKey];\n}\n\nfunction pickAnyPriceUsd(\n assetMatrix: Record<string, Record<string, Token>> | undefined,\n assetSymbol: string | undefined\n): number | undefined {\n if (!assetMatrix || !assetSymbol) return undefined;\n const byChain = assetMatrix[assetSymbol.toUpperCase()];\n if (!byChain) return undefined;\n for (const t of Object.values(byChain)) {\n const p = t?.price?.usd;\n if (typeof p === \"number\" && isFinite(p) && p > 0) return p;\n }\n return undefined;\n}\n\nexport const SwapSection: React.FC<SwapSectionProps> = ({\n label,\n className,\n balance,\n chain,\n chains,\n allowedChains,\n amount = \"\",\n readOnlyAmount,\n disableNetworkSelect,\n isSource,\n onSelect,\n onAmountChange,\n}) => {\n const { isOpen, onClose, onOpen } = useModal();\n const { assetMatrix, selectedAssetSymbol } = useTokensStore();\n const { status } = useBridgeQuoteStore();\n const [isFocused, setIsFocused] = useState(false);\n\n const tokenOnThisChain = useMemo(\n () =>\n resolveTokenOnChainFromMatrix(\n assetMatrix,\n selectedAssetSymbol,\n chain?.chainKey\n ),\n [assetMatrix, selectedAssetSymbol, chain?.chainKey]\n );\n\n const priceUsd =\n tokenOnThisChain?.price?.usd ??\n pickAnyPriceUsd(assetMatrix, selectedAssetSymbol);\n\n const computedFiat = useMemo(() => {\n const amt = parseFloat(amount || \"\");\n if (Number.isNaN(amt) || !priceUsd) return \"$0\";\n return formatUsd(amt * priceUsd);\n }, [amount, priceUsd]);\n\n const isUsdLoading = Boolean(amount && parseFloat(amount) > 0 && !priceUsd);\n\n const onChangeChain = useCallback(\n (c: Chain) => {\n onSelect?.(c);\n onClose();\n },\n [onSelect, onClose]\n );\n\n const handleMaxClick = useCallback(() => {\n if (balance.balance && onAmountChange) {\n onAmountChange(balance.balance.toString());\n }\n }, [balance.balance, onAmountChange]);\n\n return (\n <>\n <div\n className={cn(\n \"p-4 flex flex-col gap-4 transition-colors bg-muted\",\n isSource && isFocused ? \"bg-accent\" : \"\",\n className\n )}\n >\n <div className=\"flex justify-between items-center\">\n <span className=\"text-sm leading-5 font-medium text-muted-foreground\">\n {label}\n </span>\n <WalletBalance\n value={truncateToDecimals(balance.balance, 2)}\n isLoading={balance.isLoading}\n showMax={isSource}\n onMaxClick={handleMaxClick}\n />\n </div>\n\n <div className=\"flex gap-3 justify-between items-center\">\n <SelectNetworkButton\n network={chain}\n onClick={disableNetworkSelect ? undefined : onOpen}\n />\n <TokenInput\n value={amount}\n onAmountChange={useCallback(\n (v) => onAmountChange?.(v),\n [onAmountChange]\n )}\n readOnly={!!readOnlyAmount}\n showSkeleton={status === \"loading\"}\n className=\"p-0\"\n onFocus={() => setIsFocused(true)}\n onBlur={() => setIsFocused(false)}\n />\n </div>\n\n <div className=\"flex justify-between items-center\">\n <WalletInlineButton\n wallet={\n chain?.chainKey === \"ton\"\n ? \"ton\"\n : chain?.chainKey === \"tron\"\n ? \"tronlink\"\n : \"metamask\"\n }\n addressType={isSource ? \"src\" : \"dst\"}\n />\n {isUsdLoading ? (\n <Skeleton className=\"h-4 w-12 rounded-md\" />\n ) : (\n <span className=\"leading-5 text-sm font-medium text-muted-foreground\">\n {computedFiat}\n </span>\n )}\n </div>\n </div>\n\n <ChainSelectModal\n isOpen={isOpen}\n onClose={onClose}\n items={chains}\n allowedItems={allowedChains}\n onChangeChain={onChangeChain}\n isSource={isSource}\n />\n </>\n );\n};\n","import { create } from \"zustand\";\n\n/**\n * Stores custom destination address override when user enables \"Send to another address\"\n */\ninterface CustomAddressState {\n customDstAddress?: string;\n setCustomDstAddress: (address?: string) => void;\n clearCustomDstAddress: () => void;\n}\n\nexport const useCustomAddressStore = create<CustomAddressState>((set) => ({\n customDstAddress: undefined,\n setCustomDstAddress: (address) => set({ customDstAddress: address }),\n clearCustomDstAddress: () => set({ customDstAddress: undefined }),\n}));\n","import { useMemo } from \"react\";\nimport { isAddressValidForChain } from \"../lib/address-validation\";\n\nexport const useIsAddressValid = (\n address: string | undefined,\n chainKey: string | undefined\n) => {\n const isValid = useMemo(() => {\n return isAddressValidForChain(chainKey, address);\n }, [address, chainKey]);\n\n return { isValid };\n};\n","import { useState } from \"react\";\nimport { useBridgeTranslation } from \"../../i18n/BridgeI18nProvider\";\nimport { Switch } from \"@/components/ui/switch\";\nimport { useCustomAddressStore } from \"../../store/use-custom-address-store\";\nimport { useChainsStore } from \"../../store/use-chains-store\";\nimport { Button } from \"@/components/ui/button\";\nimport { X } from \"lucide-react\";\nimport { AnimatePresence, motion } from \"framer-motion\";\nimport { cn } from \"@/lib/utils\";\nimport { useIsAddressValid } from \"../../hooks/use-is-address-valid\";\n\nexport const AnotherAddress = () => {\n const [enabled, setEnabled] = useState(false);\n const [isFocused, setIsFocused] = useState(false);\n\n const { t } = useBridgeTranslation();\n const { toChain } = useChainsStore();\n const { setCustomDstAddress } = useCustomAddressStore();\n\n const [value, setValue] = useState<string>(\"\");\n const { isValid } = useIsAddressValid(value.trim(), toChain?.chainKey);\n const invalid = value.trim() && !isValid;\n\n const pushToStoreIfValid = (raw: string) => {\n if (!enabled) return;\n\n const v = raw.trim();\n if (!v) {\n setCustomDstAddress(undefined);\n return;\n }\n\n if (isValid) {\n setCustomDstAddress(v);\n }\n };\n\n const onChange = (text: string) => {\n setValue(text);\n pushToStoreIfValid(text);\n };\n\n const onPaste = async () => {\n try {\n const text = (await navigator.clipboard.readText?.()) ?? \"\";\n setValue(text);\n pushToStoreIfValid(text);\n } catch {\n // нет доступа к буферу — игнорируем\n }\n };\n\n return (\n <div className=\"p-4 flex flex-col rounded-b-sm bg-muted\">\n <div className=\"flex items-center justify-between\">\n <p className=\"text-sm leading-5 font-medium text-muted-foreground\">\n {t(\"bridge.sendToAnotherAddress\")}\n </p>\n <Switch\n aria-pressed={enabled}\n checked={enabled}\n onClick={() => setEnabled((v) => !v)}\n />\n </div>\n\n <AnimatePresence initial={false} mode=\"wait\">\n {enabled && (\n <motion.div\n key=\"custom-address-block\"\n initial={{ opacity: 0, height: 0, y: -6 }}\n animate={{ opacity: 1, height: \"auto\", y: 0 }}\n exit={{ opacity: 0, height: 0, y: -6 }}\n transition={{ duration: 0.25, ease: [0.22, 1, 0.36, 1] }}\n className=\"overflow-hidden\"\n >\n <div\n className={cn(\n \"bg-input px-4 py-2 pr-2 mt-4 w-full flex items-center gap-3 rounded-xs justify-between border border-transparent transition-all\",\n {\n \"py-4\": value,\n \"border border-ring\": isFocused,\n \"border-destructive\": invalid,\n }\n )}\n >\n <div className=\"flex flex-col gap-2 w-full\">\n <textarea\n className={cn(\n \"h-auto text-base leading-5 font-semibold w-full bg-transparent dark:bg-transparent placeholder:text-muted-foreground/50 border-none focus:outline-none focus:ring-0 resize-none transition-all\",\n )}\n placeholder={t(\"bridge.anotherAddressPlaceholder\")}\n rows={value.length >= 32 ? 2 : 1}\n value={value}\n onFocus={() => setIsFocused(true)}\n onBlur={() => setIsFocused(false)}\n onChange={(e) => onChange(e.target.value)}\n />\n {value && (\n <>\n {invalid ? (\n <p className=\"text-xs font-medium text-destructive\">\n {t(\"bridge.addressDoesntMatch\", {\n network: toChain?.name ?? \"selected\",\n })}\n </p>\n ) : (\n <p className=\"text-xs font-medium text-muted-foreground\">\n {t(\"bridge.checkBeforeTransfer\", {\n defaultValue: \"Check correctness before transfer\",\n })}\n </p>\n )}\n </>\n )}\n </div>\n {!value ? (\n <Button\n variant=\"secondary\"\n className=\"bg-bridge-button text-bridge-button-foreground hover:text-bridge-button-foreground uppercase text-xs\"\n size=\"sm\"\n onClick={onPaste}\n >\n {t(\"common.paste\")}\n </Button>\n ) : (\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className=\"rounded-full p-0 w-5 h-5 self-start\"\n onClick={() => setValue(\"\")}\n >\n <X className=\"w-4 h-4\" />\n </Button>\n )}\n </div>\n </motion.div>\n )}\n </AnimatePresence>\n </div>\n );\n};\n","import { type SVGProps } from \"react\";\n\nexport const InfoIcon = (props: SVGProps<SVGSVGElement>) => {\n return (\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <path\n d=\"M6.56836 5.8519C6.56836 5.06104 7.20948 4.41992 8.00034 4.41992C8.7912 4.41992 9.43232 5.06104 9.43232 5.8519C9.43232 6.13698 9.34902 6.40259 9.20543 6.62574C8.77748 7.29081 8.00034 7.92501 8.00034 8.71587V9.07386M8.00034 11.3159V11.5798\"\n stroke=\"currentColor\"\n stroke-width=\"1.68349\"\n stroke-linecap=\"round\"\n />\n </svg>\n );\n};\n","import {\n Tooltip,\n TooltipContent,\n TooltipTrigger,\n} from \"@/components/ui/tooltip\";\nimport type { ReactNode } from \"react\";\n\ninterface Props {\n children: ReactNode;\n text: string;\n}\n\nexport const Tip = (props: Props) => {\n const { children, text } = props;\n return (\n <Tooltip>\n <TooltipTrigger className=\"w-4 h-4 rounded-full bg-muted text-muted-foreground\">\n {children}\n </TooltipTrigger>\n <TooltipContent>\n <p>{text}</p>\n </TooltipContent>\n </Tooltip>\n );\n};\n","import { normalizeTickerSymbol } from \"../../api/api\";\n\ninterface TokenSymbolProps {\n symbol: string;\n className?: string;\n alt?: string;\n}\n\nconst BASE_URL = \"https://icons-ckg.pages.dev/stargate-light/tokens\";\n\nexport const TokenSymbol = ({\n symbol,\n className = \"w-4 h-4\",\n alt,\n}: TokenSymbolProps) => {\n const normalizedSymbol = normalizeTickerSymbol(symbol).toLowerCase();\n const src = `${BASE_URL}/${normalizedSymbol}.svg`;\n\n return <img src={src} alt={alt ?? symbol} className={className} />;\n};\n","import { useMemo } from \"react\";\nimport { useChainsStore } from \"../store/use-chains-store\";\nimport { useTokensStore } from \"../store/use-token-store\";\nimport { useBalances } from \"./api/use-balances\";\nimport { useAddresses } from \"./use-addresses\";\nimport { useBridgeQuoteStore } from \"../store/use-bridge-quote-store\";\n\nexport interface GasEstimate {\n nativeSym: string;\n nativeBalance: number;\n requiredNative: number;\n balancesKnown: boolean;\n isNativeSelected: boolean;\n hasEnoughGas: boolean;\n}\n\n/**\n * Get simple fallback gas reserve for pre-quote state\n */\nfunction getSimpleFallback(chainKey: string): number {\n const key = chainKey.toLowerCase();\n if (key === \"ton\") return 0.15; // Average of dynamic range (0.05-0.5 TON)\n if (key === \"tron\") return 10; // 10 TRX fallback (varies based on Energy)\n return 0.01; // EVM default\n}\n\nexport function useGasEstimate(amountNum?: number): GasEstimate {\n const { fromChain } = useChainsStore();\n const { selectedAssetSymbol } = useTokensStore();\n const { srcAddress } = useAddresses();\n const { balances, isLoading: balancesLoading } = useBalances(\n fromChain?.chainKey,\n srcAddress\n );\n const { quote } = useBridgeQuoteStore();\n\n const balancesKnown = !balancesLoading;\n\n // Extract stable primitive values to prevent infinite re-renders\n const chainKey = fromChain?.chainKey;\n const nativeCurrencySymbol = fromChain?.nativeCurrency?.symbol;\n const nativeCurrencyAddress = fromChain?.nativeCurrency?.address;\n const nativeCurrencyDecimals = fromChain?.nativeCurrency?.decimals;\n\n // Serialize quote fees to get stable reference\n const quoteFees = quote?.fees ? JSON.stringify(quote.fees) : null;\n const quoteSrcChainKey = quote?.srcChainKey;\n\n // Extract balance value as primitive to prevent infinite re-renders\n const nativeBalanceValue = nativeCurrencySymbol\n ? Number(balances[nativeCurrencySymbol.toUpperCase()]?.balance ?? 0)\n : 0;\n\n const result = useMemo(() => {\n if (!chainKey || !nativeCurrencySymbol) {\n return {\n nativeSym: \"\",\n nativeBalance: 0,\n requiredNative: 0,\n balancesKnown,\n isNativeSelected: false,\n hasEnoughGas: true,\n };\n }\n\n const nativeSym = nativeCurrencySymbol.toUpperCase();\n const nativeBalance = nativeBalanceValue;\n const isNativeSelected =\n nativeSym === (selectedAssetSymbol || \"\").toUpperCase();\n\n let requiredNative = 0;\n\n // Calculate from quote if available\n if (quoteFees && quoteSrcChainKey === chainKey) {\n const fees = JSON.parse(quoteFees);\n\n const feesInNative = fees\n .filter(\n (f: { chainKey: string; token: string; amount?: string }) =>\n f.chainKey === chainKey && f.token === nativeCurrencyAddress\n )\n .reduce(\n (sum: bigint, f: { amount?: string }) =>\n sum + BigInt(f.amount || \"0\"),\n 0n\n );\n\n const decimals = nativeCurrencyDecimals || 18;\n requiredNative = Number(feesInNative) / Math.pow(10, decimals);\n } else {\n // Fallback for pre-quote state\n requiredNative = getSimpleFallback(chainKey);\n }\n\n let hasEnoughGas = true;\n if (isNativeSelected) {\n hasEnoughGas = nativeBalance - (amountNum ?? 0) >= requiredNative;\n } else {\n hasEnoughGas = nativeBalance >= requiredNative;\n }\n\n return {\n nativeSym,\n nativeBalance,\n requiredNative,\n balancesKnown,\n isNativeSelected,\n hasEnoughGas: balancesKnown ? hasEnoughGas : true,\n };\n }, [\n chainKey,\n nativeCurrencySymbol,\n nativeCurrencyAddress,\n nativeCurrencyDecimals,\n selectedAssetSymbol,\n quoteFees,\n quoteSrcChainKey,\n amountNum,\n balancesKnown,\n nativeBalanceValue,\n ]);\n\n return result;\n}\n","import {\n Accordion,\n AccordionContent,\n AccordionItem,\n AccordionTrigger,\n} from \"@/components/ui/accordion\";\nimport { useBridgeTranslation } from \"../../i18n/BridgeI18nProvider\";\nimport { useTokensStore } from \"../../store/use-token-store\";\nimport { useChainsStore } from \"../../store/use-chains-store\";\nimport { useBridgeQuoteStore } from \"../../store/use-bridge-quote-store\";\nimport { useSettingsStore } from \"../../store/use-settings-store\";\nimport { InfoIcon } from \"../../assets/icons/InfoIcon\";\nimport { Skeleton } from \"@/components/ui/skeleton\";\nimport { Tip } from \"../ui/tip\";\nimport { StargateIcon } from \"../../assets/icons\";\nimport { TokenSymbol } from \"../ui/token-symbol\";\nimport { formatPercentage } from \"../../utils/formatters\";\nimport { resolveTokenOnChainFromMatrix } from \"../../lib/quote\";\nimport { getQuoteDetails } from \"../../utils/quote-helpers\";\nimport { useGasEstimate } from \"../../hooks/use-gas-estimate\";\n\n//TODO: get rid of this shit\nfunction getRouteDisplayName(route?: string): string {\n if (!route) return \"Stargate Bridge\";\n\n const routeLower = route.toLowerCase();\n\n if (routeLower.includes(\"taxi\")) return \"Stargate V2 Fast\";\n if (routeLower.includes(\"bus\")) return \"Stargate V2 Economy\";\n if (routeLower.includes(\"oft\")) return \"OFT Bridge\";\n if (routeLower.includes(\"v2\")) return \"Stargate V2\";\n\n return route\n .split(/[/\\-_]/)\n .map((part) => part.charAt(0).toUpperCase() + part.slice(1))\n .join(\" \");\n}\n\nexport const Details = () => {\n const { t } = useBridgeTranslation();\n const { selectedAssetSymbol, assetMatrix, tokens } = useTokensStore();\n const { toChain, fromChain, chains } = useChainsStore();\n const { quote, status } = useBridgeQuoteStore();\n const { slippageBps, routePriority } = useSettingsStore();\n const gas = useGasEstimate();\n\n const dstToken = resolveTokenOnChainFromMatrix(\n assetMatrix,\n selectedAssetSymbol,\n toChain?.chainKey\n );\n const srcToken = resolveTokenOnChainFromMatrix(\n assetMatrix,\n selectedAssetSymbol,\n fromChain?.chainKey\n );\n\n const quoteDetails = getQuoteDetails(\n quote,\n srcToken,\n dstToken,\n tokens,\n chains,\n slippageBps\n );\n\n const symbol = (selectedAssetSymbol ?? dstToken?.symbol ?? \"—\").toUpperCase();\n const isLoading = status === \"loading\";\n\n const receiveText =\n quoteDetails.outputAmount != null\n ? Number(quoteDetails.outputAmount).toFixed(quote ? 6 : 2)\n : \"0.00\";\n\n const etaText =\n quoteDetails.etaSeconds != null\n ? `≈ ${Math.max(1, Math.round(quoteDetails.etaSeconds / 60))}m`\n : \"—\";\n\n // Fee from gas estimate (always in native token of source chain)\n const totalFeeDisplay = !quote\n ? \"—\"\n : gas.requiredNative > 0\n ? `${gas.requiredNative.toFixed(6)} ${gas.nativeSym}`\n : \"—\";\n\n const currentSlippageText = !quote ? \"—\" : formatPercentage(slippageBps);\n\n const routeText = quote?.route\n ? getRouteDisplayName(quote.route)\n : t(`settings.routePresets.${routePriority}`);\n\n return (\n <Accordion type=\"single\" collapsible className=\"w-full border-none\">\n <AccordionItem value=\"item-1\" className=\"bg-muted rounded-sm\">\n <AccordionTrigger className=\"w-full gap-1 items-center py-6 px-5 rounded-b-sm data-[state=open]:pb-3 hover:no-underline\">\n <div className=\"w-full flex items-center justify-between\">\n <p className=\"text-sm font-normal text-priority leading-4\">\n {t(\"bridge.youWillReceive\", { defaultValue: \"You will receive\" })}\n </p>\n <div className=\"bg-transparent hover:bg-transparent shadow-none h-4 p-0 px-0 py-0 flex items-center gap-2\">\n <TokenSymbol symbol={symbol} className=\"w-4 h-4\" alt=\"token\" />\n {isLoading ? (\n <Skeleton className=\"h-4 w-24 rounded-md\" />\n ) : (\n <span className=\"text-sm font-semibold leading-4 text-foreground\">\n {receiveText} {symbol}\n </span>\n )}\n </div>\n </div>\n </AccordionTrigger>\n\n <AccordionContent className=\"px-5 flex flex-col gap-3\">\n <DetailsRow\n label={t(\"transaction.route\")}\n value={\n <span className=\"flex items-center gap-2\">\n <StargateIcon className=\"w-4 h-4\" />\n <p className=\"\">{routeText}</p>\n </span>\n }\n />\n <DetailsRow\n label={t(\"transaction.estTime\")}\n value={etaText}\n isLoading={isLoading}\n />\n <DetailsRow\n label={t(\"transaction.slippage\")}\n value={currentSlippageText}\n />\n <DetailsRow\n label={t(\"transaction.totalFee\")}\n value={\n <strong className=\"inline-flex items-center gap-1\">\n <span>{totalFeeDisplay}</span>\n <TokenSymbol\n symbol={gas.nativeSym}\n className=\"w-4 h-4\"\n alt=\"token\"\n />\n </strong>\n }\n isLoading={isLoading}\n />\n </AccordionContent>\n </AccordionItem>\n </Accordion>\n );\n};\n\nconst DetailsRow = ({\n label,\n value,\n isLoading = false,\n}: {\n label: string;\n value?: string | React.ReactNode;\n isLoading?: boolean;\n}) => (\n <div className=\"flex justify-between items-center\">\n <div className=\"flex items-center gap-2\">\n <p className=\"text-sm text-priority font-normal\">{label}</p>\n <Tip text={label}>\n <InfoIcon />\n </Tip>\n </div>\n {isLoading ? (\n <Skeleton className=\"h-4 w-16 rounded-md\" />\n ) : (\n <div className=\"text-foreground text-sm\">{value ?? \"—\"}</div>\n )}\n </div>\n);\n","import { create } from \"zustand\";\nimport type { Quote } from \"../types\";\n\nexport type TxStatus =\n | \"idle\"\n | \"pending\" // awaiting signature\n | \"executing\" // wallet confirmation in progress\n | \"processing\" // tx hash received, confirming/bridging\n | \"completed\" // delivered to destination\n | \"failed\"\n | \"expired\";\n\nexport interface EvmMonitorReceipt {\n status?: string | number | boolean;\n blockNumber?: string;\n logs?: Array<{\n address?: string;\n topics?: string[];\n data?: string;\n }>;\n}\n\nexport interface TronMonitorReceipt {\n receipt?: {\n result?: string;\n };\n}\n\nexport interface TonMonitorReceipt {\n aborted?: boolean;\n transaction?: {\n aborted?: boolean;\n compute_phase?: {\n exit_code?: number;\n };\n };\n compute_phase?: {\n exit_code?: number;\n };\n success?: boolean;\n ok?: boolean;\n status?: string;\n}\n\nexport type MonitorReceipt =\n | EvmMonitorReceipt\n | TronMonitorReceipt\n | TonMonitorReceipt;\n\nexport interface TransactionMetadata {\n srcChainName: string;\n dstChainName: string;\n srcTokenSymbol: string;\n dstTokenSymbol: string;\n srcAmountHuman: number;\n dstAmountHuman: number;\n actualFeeValue?: number;\n actualFeeSymbol?: string;\n}\n\nexport interface CurrentTransaction {\n quote: Quote;\n status: TxStatus;\n srcTxHash?: string;\n dstTxHash?: string;\n messageId?: string;\n createdAt: number;\n updatedAt: number;\n errorCode?: string;\n errorParams?: Record<string, any>;\n monitorReceipt?: MonitorReceipt;\n metadata?: TransactionMetadata;\n}\n\ninterface TransactionState {\n current?: CurrentTransaction;\n successModalOpen: boolean;\n history: CurrentTransaction[];\n}\n\ninterface TransactionActions {\n setTransaction: (\n quote: Quote,\n status?: TxStatus,\n metadata?: TransactionMetadata\n ) => void;\n updateStatus: (status: TxStatus) => void;\n setSrcHash: (hash?: string) => void;\n setDstHash: (hash?: string) => void;\n setError: (errorCode: string, errorParams?: Record<string, any>) => void;\n updateActualFee: (feeValue: number, feeSymbol: string) => void;\n reset: () => void;\n}\n\ntype Store = TransactionState & TransactionActions;\n\nexport const useTransactionStore = create<Store>((set, get) => ({\n current: undefined,\n successModalOpen: false,\n history: [],\n\n setTransaction: (quote, status = \"executing\", metadata) => {\n const now = Date.now();\n const current: CurrentTransaction = {\n quote,\n status,\n createdAt: now,\n updatedAt: now,\n metadata,\n };\n set({ current });\n },\n\n updateStatus: (status) => {\n const cur = get().current;\n if (!cur) return;\n const next = { ...cur, status, updatedAt: Date.now() };\n set({ current: next });\n },\n\n setSrcHash: (hash) => {\n const cur = get().current;\n if (!cur) return;\n const next = {\n ...cur,\n srcTxHash: hash,\n updatedAt: Date.now(),\n };\n set({ current: next });\n },\n\n setDstHash: (hash) => {\n const cur = get().current;\n if (!cur) return;\n const next = { ...cur, dstTxHash: hash, updatedAt: Date.now() };\n set({ current: next });\n },\n\n setError: (errorCode, errorParams) => {\n const cur = get().current;\n if (!cur) return;\n const next = {\n ...cur,\n status: \"failed\" as TxStatus,\n errorCode,\n errorParams,\n updatedAt: Date.now(),\n };\n set({ current: next });\n },\n\n updateActualFee: (feeValue, feeSymbol) => {\n const cur = get().current;\n if (!cur) return;\n const next = {\n ...cur,\n metadata: {\n ...cur.metadata!,\n actualFeeValue: feeValue,\n actualFeeSymbol: feeSymbol,\n },\n updatedAt: Date.now(),\n };\n set({ current: next });\n },\n\n reset: () => {\n set({ current: undefined });\n },\n}));\n","export class ChainStrategyError extends Error {\n public readonly code: string;\n public readonly chainKey?: string;\n public readonly originalError?: Error;\n\n constructor(\n message: string,\n code: string,\n chainKey?: string,\n originalError?: Error\n ) {\n super(message);\n this.name = \"ChainStrategyError\";\n this.code = code;\n this.chainKey = chainKey;\n this.originalError = originalError;\n\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, this.constructor);\n }\n }\n\n static isChainStrategyError(error: unknown): error is ChainStrategyError {\n return error instanceof ChainStrategyError;\n }\n\n toJSON() {\n return {\n name: this.name,\n message: this.message,\n code: this.code,\n chainKey: this.chainKey,\n originalError: this.originalError?.message,\n };\n }\n}\n\nexport class WalletNotConnectedError extends ChainStrategyError {\n constructor(chainKey: string) {\n super(\n `${chainKey.toUpperCase()} wallet not connected`,\n \"WALLET_NOT_CONNECTED\",\n chainKey\n );\n this.name = \"WalletNotConnectedError\";\n }\n}\n\nexport class WalletConnectionFailedError extends ChainStrategyError {\n constructor(chainKey: string, originalError?: Error) {\n super(\n `Failed to connect ${chainKey.toUpperCase()} wallet`,\n \"WALLET_CONNECTION_FAILED\",\n chainKey,\n originalError\n );\n this.name = \"WalletConnectionFailedError\";\n }\n}\n\nexport class WalletNotFoundError extends ChainStrategyError {\n constructor(chainKey: string, walletName?: string) {\n const message = walletName\n ? `${walletName} wallet not found. Please install the extension.`\n : `No ${chainKey.toUpperCase()} wallet found. Please install a wallet extension.`;\n\n super(message, \"WALLET_NOT_FOUND\", chainKey);\n this.name = \"WalletNotFoundError\";\n }\n}\n\nexport class InvalidAddressError extends ChainStrategyError {\n public readonly address: string;\n\n constructor(chainKey: string, address: string) {\n super(\n `Invalid ${chainKey.toUpperCase()} address format: ${address}`,\n \"INVALID_ADDRESS\",\n chainKey\n );\n this.name = \"InvalidAddressError\";\n this.address = address;\n }\n}\n\nexport class InvalidStepsError extends ChainStrategyError {\n constructor(chainKey: string, reason: string) {\n super(\n `Invalid transaction steps for ${chainKey.toUpperCase()}: ${reason}`,\n \"INVALID_STEPS\",\n chainKey\n );\n this.name = \"InvalidStepsError\";\n }\n}\n\nexport class InvalidTransactionDataError extends ChainStrategyError {\n constructor(chainKey: string, reason: string) {\n super(\n `Invalid transaction data for ${chainKey.toUpperCase()}: ${reason}`,\n \"INVALID_TRANSACTION_DATA\",\n chainKey\n );\n this.name = \"InvalidTransactionDataError\";\n }\n}\n\nexport class TransactionRejectedError extends ChainStrategyError {\n constructor(chainKey: string, transactionType?: string) {\n const type = transactionType ? ` ${transactionType}` : \"\";\n super(\n `${chainKey.toUpperCase()}${type} transaction rejected by user`,\n \"TRANSACTION_REJECTED\",\n chainKey\n );\n this.name = \"TransactionRejectedError\";\n }\n}\n\nexport class TransactionFailedError extends ChainStrategyError {\n public readonly txHash?: string;\n\n constructor(\n chainKey: string,\n reason: string,\n txHash?: string,\n originalError?: Error\n ) {\n super(\n `${chainKey.toUpperCase()} transaction failed: ${reason}`,\n \"TRANSACTION_FAILED\",\n chainKey,\n originalError\n );\n this.name = \"TransactionFailedError\";\n this.txHash = txHash;\n }\n}\n\nexport class TransactionTimeoutError extends ChainStrategyError {\n public readonly txHash: string;\n\n constructor(chainKey: string, txHash: string) {\n super(\n `${chainKey.toUpperCase()} transaction confirmation timeout: ${txHash}`,\n \"TRANSACTION_TIMEOUT\",\n chainKey\n );\n this.name = \"TransactionTimeoutError\";\n this.txHash = txHash;\n }\n}\n\nexport class TransactionRevertedError extends ChainStrategyError {\n public readonly txHash: string;\n public readonly revertReason?: string;\n\n constructor(chainKey: string, txHash: string, revertReason?: string) {\n const reason = revertReason ? `: ${revertReason}` : \"\";\n super(\n `${chainKey.toUpperCase()} transaction reverted on-chain${reason}`,\n \"TRANSACTION_REVERTED\",\n chainKey\n );\n this.name = \"TransactionRevertedError\";\n this.txHash = txHash;\n this.revertReason = revertReason;\n }\n}\n\nexport class InsufficientGasError extends ChainStrategyError {\n public readonly required: number;\n public readonly available: number;\n\n constructor(chainKey: string, required: number, available: number) {\n super(\n `Insufficient ${chainKey.toUpperCase()} gas. Required: ${required}, Available: ${available}`,\n \"INSUFFICIENT_GAS\",\n chainKey\n );\n this.name = \"InsufficientGasError\";\n this.required = required;\n this.available = available;\n }\n}\n\nexport class ProviderNotAvailableError extends ChainStrategyError {\n constructor(chainKey: string) {\n super(\n `${chainKey.toUpperCase()} provider not available`,\n \"PROVIDER_NOT_AVAILABLE\",\n chainKey\n );\n this.name = \"ProviderNotAvailableError\";\n }\n}\n\nexport class NetworkRequestFailedError extends ChainStrategyError {\n public readonly endpoint?: string;\n\n constructor(\n chainKey: string,\n reason: string,\n endpoint?: string,\n originalError?: Error\n ) {\n super(\n `${chainKey.toUpperCase()} network request failed: ${reason}`,\n \"NETWORK_REQUEST_FAILED\",\n chainKey,\n originalError\n );\n this.name = \"NetworkRequestFailedError\";\n this.endpoint = endpoint;\n }\n}\n\nexport function isUserRejection(error: unknown): boolean {\n if (error instanceof TransactionRejectedError) {\n return true;\n }\n\n if (typeof error === \"string\") {\n const message = error.toLowerCase();\n return (\n message.includes(\"rejected\") ||\n message.includes(\"denied\") ||\n message.includes(\"declined\") ||\n message.includes(\"not sent\") ||\n message.includes(\"user denied\") ||\n message.includes(\"user rejected\") ||\n message.includes(\"user reject\") ||\n message.includes(\"user cancelled\") ||\n message.includes(\"user canceled\") ||\n message.includes(\"action_rejected\") ||\n message.includes(\"ethers-user-denied\") ||\n message.includes(\"denied transaction\") ||\n message.includes(\"reject request\") ||\n message.includes(\"declined by user\")\n );\n }\n\n if (error instanceof Error) {\n const message = error.message.toLowerCase();\n return (\n message.includes(\"rejected\") ||\n message.includes(\"denied\") ||\n message.includes(\"declined\") ||\n message.includes(\"not sent\") ||\n message.includes(\"user denied\") ||\n message.includes(\"user rejected\") ||\n message.includes(\"user reject\") ||\n message.includes(\"user cancelled\") ||\n message.includes(\"user canceled\") ||\n message.includes(\"action_rejected\") ||\n message.includes(\"ethers-user-denied\") ||\n message.includes(\"denied transaction\") ||\n message.includes(\"reject request\") ||\n message.includes(\"declined by user\")\n );\n }\n\n return false;\n}\n\nexport function toChainStrategyError(\n error: unknown,\n chainKey: string,\n context?: string\n): ChainStrategyError {\n if (error instanceof ChainStrategyError) {\n return error;\n }\n\n if (isUserRejection(error)) {\n return new TransactionRejectedError(chainKey, context);\n }\n if (error instanceof Error) {\n return new ChainStrategyError(\n error.message,\n \"UNKNOWN_ERROR\",\n chainKey,\n error\n );\n }\n\n return new ChainStrategyError(String(error), \"UNKNOWN_ERROR\", chainKey);\n}\n","import { useState, useMemo } from \"react\";\nimport { useBridgeQuoteStore } from \"../store/use-bridge-quote-store\";\nimport {\n useTransactionStore,\n type TransactionMetadata,\n} from \"../store/use-transaction-store\";\nimport type {\n TransactionResult,\n TransactionStrategyContext,\n} from \"../chains/chain-strategy-interface\";\nimport { useTokensStore } from \"../store/use-token-store\";\nimport { useChainsStore } from \"../store/use-chains-store\";\nimport { getQuoteAmounts } from \"../utils/quote-helpers\";\nimport { resolveTokenOnChainFromMatrix } from \"../lib/quote\";\nimport {\n ChainStrategyError,\n InvalidStepsError,\n WalletNotConnectedError,\n TransactionFailedError,\n isUserRejection,\n} from \"../chains/errors\";\nimport { useChainStrategies } from \"./use-chain-strategies\";\nimport { useAddresses } from \"./use-addresses\";\n\nexport function useBridgeTransaction() {\n const { quote } = useBridgeQuoteStore();\n const { chainRegistry } = useChainStrategies();\n const { srcAddress, dstAddress } = useAddresses();\n const { assetMatrix, selectedAssetSymbol } = useTokensStore();\n const { chains } = useChainsStore();\n const txStore = useTransactionStore();\n\n const [isProcessing, setIsProcessing] = useState(false);\n\n const srcToken = useMemo(\n () =>\n resolveTokenOnChainFromMatrix(\n assetMatrix,\n selectedAssetSymbol,\n quote?.srcChainKey\n ),\n [assetMatrix, selectedAssetSymbol, quote?.srcChainKey]\n );\n\n const dstToken = useMemo(\n () =>\n resolveTokenOnChainFromMatrix(\n assetMatrix,\n selectedAssetSymbol,\n quote?.dstChainKey\n ),\n [assetMatrix, selectedAssetSymbol, quote?.dstChainKey]\n );\n\n const executeTransaction = async (): Promise<TransactionResult> => {\n if (!quote) {\n throw new InvalidStepsError(\"bridge\", \"No quote available\");\n }\n\n if (!srcAddress || !dstAddress) {\n throw new WalletNotConnectedError(quote.srcChainKey || \"unknown\");\n }\n\n const srcChain = chains?.find((c) => c.chainKey === quote.srcChainKey);\n const dstChain = chains?.find((c) => c.chainKey === quote.dstChainKey);\n\n // Network fees (TON and TRON) are already added to quote when it's fetched\n const amounts = getQuoteAmounts(quote, srcToken, dstToken);\n\n const metadata: TransactionMetadata = {\n srcChainName: srcChain?.name || quote.srcChainKey,\n dstChainName: dstChain?.name || quote.dstChainKey,\n srcTokenSymbol: srcToken?.symbol || quote.srcToken,\n dstTokenSymbol: dstToken?.symbol || quote.dstToken,\n srcAmountHuman: amounts.inputHuman,\n dstAmountHuman: amounts.outputHuman,\n // Actual fee will be updated when transaction completes\n };\n\n txStore.setTransaction(quote, \"executing\", metadata);\n\n setIsProcessing(true);\n\n try {\n const steps = quote.steps || [];\n if (steps.length === 0) {\n throw new InvalidStepsError(\n quote.srcChainKey,\n \"No transaction steps found in quote\"\n );\n }\n\n const chainKey = steps[0].chainKey;\n const strategy = chainRegistry.getStrategy(chainKey);\n if (!strategy) {\n throw new InvalidStepsError(\n chainKey,\n `No strategy available for chain: ${chainKey}`\n );\n }\n\n if (!strategy.isConnected()) {\n throw new WalletNotConnectedError(chainKey);\n }\n\n strategy.validateSteps(steps);\n\n const context: TransactionStrategyContext = {\n srcAddress,\n dstAddress,\n srcChainKey: quote.srcChainKey,\n dstChainKey: quote.dstChainKey,\n };\n\n const txResult = await strategy.executeSteps(steps, context, (hash) => {\n txStore.setSrcHash(hash);\n txStore.updateStatus(\"processing\");\n });\n\n if (txResult?.hash) {\n strategy\n .waitForCompletion(txResult.hash, context)\n .then((result) => {\n if (result.completed) {\n if (result.dstTxHash) {\n txStore.setDstHash(result.dstTxHash);\n }\n\n // Update actual fee if available\n if (result.actualFeeValue) {\n let feeSymbol = result.actualFeeSymbol;\n\n // For EVM, determine the symbol from chain config if not provided\n if (!feeSymbol) {\n const srcChain = chains?.find(\n (c) => c.chainKey === quote.srcChainKey\n );\n feeSymbol = srcChain?.nativeCurrency?.symbol || \"\";\n }\n\n if (feeSymbol) {\n const feeValue = parseFloat(result.actualFeeValue);\n if (!isNaN(feeValue)) {\n txStore.updateActualFee(feeValue, feeSymbol);\n }\n }\n }\n\n txStore.updateStatus(\"completed\");\n console.log(\"Transaction completed successfully\");\n } else {\n txStore.setError(\"TRANSACTION_FAILED_TO_COMPLETE\");\n console.error(\"Transaction completion failed:\", result.error);\n }\n })\n .catch((err) => {\n // Check for user rejection first\n if (isUserRejection(err)) {\n txStore.setError(\"TRANSACTION_REJECTED\");\n } else if (ChainStrategyError.isChainStrategyError(err)) {\n txStore.setError(err.code, { chainKey: err.chainKey });\n } else {\n txStore.setError(\"COMPLETION_TRACKING_FAILED\");\n }\n console.error(\"Error tracking completion:\", err);\n });\n } else {\n throw new TransactionFailedError(\n chainKey,\n \"Transaction hash not received from wallet\"\n );\n }\n\n return txResult;\n } catch (err) {\n if (isUserRejection(err)) {\n txStore.setError(\"TRANSACTION_REJECTED\");\n throw new TransactionFailedError(\n quote.srcChainKey,\n \"Transaction rejected by user\"\n );\n }\n\n if (ChainStrategyError.isChainStrategyError(err)) {\n txStore.setError(err.code, { chainKey: err.chainKey });\n console.error(\"Chain strategy error:\", err.toJSON());\n throw err;\n }\n\n // Handle generic errors\n console.log(err);\n txStore.setError(\"UNKNOWN_ERROR\");\n throw err;\n } finally {\n setIsProcessing(false);\n }\n };\n\n return {\n executeTransaction,\n isProcessing,\n hasQuote: !!quote,\n };\n}\n","import { useMemo } from \"react\";\nimport { useChainsStore } from \"../store/use-chains-store\";\nimport { useTokensStore } from \"../store/use-token-store\";\nimport { useBalances } from \"./api/use-balances\";\nimport { useAddresses } from \"./use-addresses\";\nimport type { GasEstimate } from \"./use-gas-estimate\";\n\nexport interface BalanceCheck {\n availableBalance: number;\n hasInsufficientBalance: boolean;\n isBalanceLoading: boolean;\n reservedForGas: number;\n}\n\nexport function useBalanceCheck(\n amountNum: number,\n gas: GasEstimate\n): BalanceCheck {\n const { fromChain } = useChainsStore();\n const { selectedAssetSymbol } = useTokensStore();\n const { srcAddress } = useAddresses();\n const { getBalance } = useBalances(fromChain?.chainKey, srcAddress);\n\n const validationResult = useMemo((): BalanceCheck => {\n if (!fromChain || !gas.balancesKnown) {\n return {\n availableBalance: 0,\n hasInsufficientBalance: false,\n isBalanceLoading: true,\n reservedForGas: 0,\n };\n }\n\n const rawBalance = getBalance(selectedAssetSymbol || \"\");\n const gasReserve = gas.requiredNative ?? 0;\n\n if (gas.isNativeSelected) {\n const availableBalance = Math.max(0, rawBalance - gasReserve);\n\n return {\n availableBalance,\n hasInsufficientBalance: amountNum > availableBalance,\n isBalanceLoading: false,\n reservedForGas: gasReserve,\n };\n }\n\n const hasEnoughGasForTx = gas.nativeBalance >= gasReserve;\n\n return {\n availableBalance: rawBalance,\n hasInsufficientBalance: amountNum > rawBalance || !hasEnoughGasForTx,\n isBalanceLoading: false,\n reservedForGas: gasReserve,\n };\n }, [\n fromChain,\n gas.balancesKnown,\n gas.isNativeSelected,\n gas.requiredNative,\n gas.nativeBalance,\n getBalance,\n selectedAssetSymbol,\n amountNum,\n ]);\n\n return validationResult;\n}\n","import { useMemo } from \"react\";\nimport { useTokensStore } from \"../../store/use-token-store\";\nimport { useChainsStore } from \"../../store/use-chains-store\";\nimport { useBridgeQuoteStore } from \"../../store/use-bridge-quote-store\";\nimport { fromLD } from \"../../lib/amount\";\nimport { formatTokenAmount } from \"../../utils/formatters\";\n\nexport interface AmountLimitsResult {\n maximumAmount: number;\n hasAmountTooLarge: boolean;\n maximumAmountFormatted: string;\n}\n\nexport function useAmountLimits(amountNum: number): AmountLimitsResult {\n const { selectedAssetSymbol, tokens } = useTokensStore();\n const { fromChain } = useChainsStore();\n const { quote } = useBridgeQuoteStore();\n\n const limitsResult = useMemo((): AmountLimitsResult => {\n const tokenSymbol = selectedAssetSymbol;\n\n if (quote?.srcAmountMax && fromChain?.chainKey && selectedAssetSymbol) {\n const sourceToken = tokens?.find(\n (t) =>\n t.chainKey === fromChain.chainKey &&\n (t.symbol ?? \"\").toUpperCase() ===\n (selectedAssetSymbol ?? \"\").toUpperCase()\n );\n\n if (sourceToken) {\n // Convert from wei to human readable using token decimals\n const maximumAmount = fromLD(quote.srcAmountMax, sourceToken.decimals);\n const hasAmountTooLarge = amountNum > maximumAmount;\n const maximumAmountFormatted = formatTokenAmount(\n maximumAmount,\n tokenSymbol\n );\n\n return {\n maximumAmount,\n hasAmountTooLarge,\n maximumAmountFormatted,\n };\n }\n }\n\n // No limits when API data is unavailable - let API validate on submit\n return {\n maximumAmount: Infinity,\n hasAmountTooLarge: false,\n maximumAmountFormatted: \"\",\n };\n }, [\n amountNum,\n fromChain?.chainKey,\n selectedAssetSymbol,\n quote?.srcAmountMax,\n tokens,\n ]);\n\n return limitsResult;\n}\n","import { useMemo } from \"react\";\nimport { useTokensStore } from \"../../store/use-token-store\";\nimport { useChainsStore } from \"../../store/use-chains-store\";\nimport { useBridgeQuoteStore } from \"../../store/use-bridge-quote-store\";\n\nexport interface SilentValidationsResult {\n hasTooManyDecimals: boolean;\n hasUnsupportedTokenPair: boolean;\n hasInsufficientLiquidity: boolean;\n isValidForTransfer: boolean;\n}\n\nexport function useSilentValidations(\n amountString: string\n): SilentValidationsResult {\n const { selectedAssetSymbol, assetMatrix, tokens } = useTokensStore();\n const { fromChain, toChain } = useChainsStore();\n const { quote, status, error } = useBridgeQuoteStore();\n\n const validationResult = useMemo((): SilentValidationsResult => {\n // 1. Decimal Precision Validation\n const hasTooManyDecimals = (() => {\n if (!amountString || !fromChain?.chainKey || !selectedAssetSymbol)\n return false;\n\n // Find the token on the source chain to get decimals\n const sourceToken = tokens?.find(\n (t) =>\n t.chainKey === fromChain.chainKey &&\n (t.symbol ?? \"\").toUpperCase() ===\n (selectedAssetSymbol ?? \"\").toUpperCase()\n );\n\n if (!sourceToken) return false;\n\n // Check if input has more decimal places than token supports\n const decimalPart = amountString.split(\".\")[1];\n if (!decimalPart) return false;\n\n return decimalPart.length > (sourceToken.decimals ?? 18);\n })();\n\n // 2. Network-Specific Errors (Unsupported Token Pairs)\n const hasUnsupportedTokenPair = (() => {\n if (!selectedAssetSymbol || !fromChain?.chainKey || !toChain?.chainKey)\n return false;\n if (!assetMatrix) return false;\n\n const normalizedSymbol = selectedAssetSymbol.toUpperCase();\n const tokenMatrix = assetMatrix[normalizedSymbol];\n\n if (!tokenMatrix) return true; // Token doesn't exist in matrix\n\n // Check if token exists on both source and destination chains\n const existsOnSource = !!tokenMatrix[fromChain.chainKey];\n const existsOnDestination = !!tokenMatrix[toChain.chainKey];\n\n return !existsOnSource || !existsOnDestination;\n })();\n\n // 3. Liquidity Validation\n const hasInsufficientLiquidity = (() => {\n // If we have an error that mentions liquidity or if quote failed\n if (error) {\n const errorLower = error.toLowerCase();\n return (\n errorLower.includes(\"liquidity\") ||\n errorLower.includes(\"insufficient\") ||\n errorLower.includes(\"slippage\") ||\n errorLower.includes(\"exceeds\")\n );\n }\n\n // If we're not loading and have no route but amount > 0, could be liquidity issue\n if (\n status !== \"loading\" &&\n !quote &&\n parseFloat(amountString || \"0\") > 0\n ) {\n return true;\n }\n\n return false;\n })();\n\n const isValidForTransfer =\n !hasTooManyDecimals &&\n !hasUnsupportedTokenPair &&\n !hasInsufficientLiquidity;\n\n return {\n hasTooManyDecimals,\n hasUnsupportedTokenPair,\n hasInsufficientLiquidity,\n isValidForTransfer,\n };\n }, [\n amountString,\n selectedAssetSymbol,\n fromChain,\n toChain,\n assetMatrix,\n tokens,\n quote,\n status,\n error,\n ]);\n\n return validationResult;\n}\n","import React from \"react\";\nimport { Button } from \"@/components/ui/button\";\nimport { useMemo } from \"react\";\nimport { useBridgeTranslation } from \"../../i18n/BridgeI18nProvider\";\nimport { useChainStrategies } from \"../../hooks/use-chain-strategies\";\nimport { useAddresses } from \"../../hooks/use-addresses\";\nimport { useChainsStore } from \"../../store/use-chains-store\";\nimport { useBridgeQuoteStore } from \"../../store/use-bridge-quote-store\";\nimport { useWalletSelectModal } from \"../../hooks/ui/use-wallet-select-modal\";\nimport { useBridgeTransaction } from \"../../hooks/use-transaction\";\nimport { useGasEstimate } from \"../../hooks/use-gas-estimate\";\nimport { useBalanceCheck } from \"../../hooks/use-balance-check\";\nimport { useAmountLimits } from \"../../hooks/bridge/use-amount-limits\";\nimport { useSilentValidations } from \"../../hooks/bridge/use-silent-validations\";\n\nexport const MainButton: React.FC = () => {\n const { t } = useBridgeTranslation();\n\n const { chainRegistry } = useChainStrategies();\n const { srcAddress, dstAddress } = useAddresses();\n const { quote, status, inputAmount, noRoute } = useBridgeQuoteStore();\n const { fromChain, toChain } = useChainsStore();\n const { onOpen } = useWalletSelectModal();\n const { executeTransaction, isProcessing: isTxProcessing } =\n useBridgeTransaction();\n\n const amountNum = Number(inputAmount || 0);\n const gas = useGasEstimate(amountNum);\n\n const { hasInsufficientBalance, isBalanceLoading } = useBalanceCheck(\n amountNum,\n gas\n );\n\n const { hasAmountTooLarge, maximumAmountFormatted } =\n useAmountLimits(amountNum);\n const { isValidForTransfer } = useSilentValidations(inputAmount || \"\");\n\n const srcChainKey = quote?.srcChainKey ?? fromChain?.chainKey;\n const dstChainKey = quote?.dstChainKey ?? toChain?.chainKey;\n\n const srcConnectedOk =\n srcChainKey && chainRegistry.isWalletConnected(srcChainKey);\n const dstConnectedOk =\n dstChainKey && chainRegistry.isWalletConnected(dstChainKey);\n\n const srcAddressValid =\n srcChainKey && chainRegistry.isAddressValid(srcChainKey, srcAddress);\n const dstAddressValid =\n dstChainKey && chainRegistry.isAddressValid(dstChainKey, dstAddress);\n\n const missingSrc = !srcConnectedOk || !srcAddressValid;\n const missingDst = !dstConnectedOk || !dstAddressValid;\n\n const isBusy = isTxProcessing;\n\n const canTransfer =\n !missingSrc &&\n !missingDst &&\n amountNum > 0 &&\n !!srcChainKey &&\n !!dstChainKey;\n\n const label = useMemo(() => {\n switch (true) {\n case status === \"loading\":\n return t(\"transaction.quoting\");\n case isTxProcessing:\n return t(\"transaction.processing\");\n case isBusy:\n return t(\"common.connecting\");\n case missingSrc:\n return srcChainKey\n ? chainRegistry.getConnectLabel(srcChainKey, t)\n : t(\"wallets.connectWallet\");\n case missingDst:\n return dstChainKey\n ? chainRegistry.getConnectLabel(dstChainKey, t)\n : t(\"wallets.connectWallet\");\n case amountNum <= 0:\n return t(\"transaction.enterAmount\");\n case isBalanceLoading:\n return t(\"transaction.checkingBalance\");\n case !gas.hasEnoughGas:\n return t(\"transaction.notEnoughGas\");\n case hasInsufficientBalance:\n return t(\"transaction.insufficientBalance\");\n case hasAmountTooLarge:\n return t(\"transaction.amountTooLarge\", {\n max: maximumAmountFormatted,\n });\n case noRoute:\n return t(\"transaction.noRouteFound\");\n case canTransfer:\n return t(\"transaction.transfer\");\n default:\n return t(\"transaction.getQuote\");\n }\n }, [\n t,\n status,\n isTxProcessing,\n isBusy,\n missingSrc,\n missingDst,\n srcChainKey,\n dstChainKey,\n noRoute,\n gas.hasEnoughGas,\n amountNum,\n canTransfer,\n isBalanceLoading,\n hasInsufficientBalance,\n hasAmountTooLarge,\n maximumAmountFormatted,\n chainRegistry,\n ]);\n\n const handleClick = async () => {\n if (isBusy) return;\n\n if (missingSrc) {\n onOpen(\"src\");\n return;\n }\n if (missingDst) {\n onOpen(\"dst\");\n return;\n }\n\n if (canTransfer) {\n try {\n await executeTransaction();\n } catch (error) {\n console.warn(error);\n }\n return;\n }\n };\n\n const disabled =\n isBusy ||\n status === \"loading\" ||\n ((!missingSrc && !missingDst) && (\n amountNum <= 0 ||\n isBalanceLoading ||\n hasInsufficientBalance ||\n hasAmountTooLarge ||\n !gas.hasEnoughGas ||\n noRoute ||\n !isValidForTransfer\n ));\n\n return (\n <div className=\"pt-4\">\n <Button\n onClick={handleClick}\n disabled={disabled}\n size=\"lg\"\n className=\"w-full\"\n >\n {label}\n </Button>\n </div>\n );\n};\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\nvar R = typeof Reflect === 'object' ? Reflect : null\nvar ReflectApply = R && typeof R.apply === 'function'\n ? R.apply\n : function ReflectApply(target, receiver, args) {\n return Function.prototype.apply.call(target, receiver, args);\n }\n\nvar ReflectOwnKeys\nif (R && typeof R.ownKeys === 'function') {\n ReflectOwnKeys = R.ownKeys\n} else if (Object.getOwnPropertySymbols) {\n ReflectOwnKeys = function ReflectOwnKeys(target) {\n return Object.getOwnPropertyNames(target)\n .concat(Object.getOwnPropertySymbols(target));\n };\n} else {\n ReflectOwnKeys = function ReflectOwnKeys(target) {\n return Object.getOwnPropertyNames(target);\n };\n}\n\nfunction ProcessEmitWarning(warning) {\n if (console && console.warn) console.warn(warning);\n}\n\nvar NumberIsNaN = Number.isNaN || function NumberIsNaN(value) {\n return value !== value;\n}\n\nfunction EventEmitter() {\n EventEmitter.init.call(this);\n}\nmodule.exports = EventEmitter;\nmodule.exports.once = once;\n\n// Backwards-compat with node 0.10.x\nEventEmitter.EventEmitter = EventEmitter;\n\nEventEmitter.prototype._events = undefined;\nEventEmitter.prototype._eventsCount = 0;\nEventEmitter.prototype._maxListeners = undefined;\n\n// By default EventEmitters will print a warning if more than 10 listeners are\n// added to it. This is a useful default which helps finding memory leaks.\nvar defaultMaxListeners = 10;\n\nfunction checkListener(listener) {\n if (typeof listener !== 'function') {\n throw new TypeError('The \"listener\" argument must be of type Function. Received type ' + typeof listener);\n }\n}\n\nObject.defineProperty(EventEmitter, 'defaultMaxListeners', {\n enumerable: true,\n get: function() {\n return defaultMaxListeners;\n },\n set: function(arg) {\n if (typeof arg !== 'number' || arg < 0 || NumberIsNaN(arg)) {\n throw new RangeError('The value of \"defaultMaxListeners\" is out of range. It must be a non-negative number. Received ' + arg + '.');\n }\n defaultMaxListeners = arg;\n }\n});\n\nEventEmitter.init = function() {\n\n if (this._events === undefined ||\n this._events === Object.getPrototypeOf(this)._events) {\n this._events = Object.create(null);\n this._eventsCount = 0;\n }\n\n this._maxListeners = this._maxListeners || undefined;\n};\n\n// Obviously not all Emitters should be limited to 10. This function allows\n// that to be increased. Set to zero for unlimited.\nEventEmitter.prototype.setMaxListeners = function setMaxListeners(n) {\n if (typeof n !== 'number' || n < 0 || NumberIsNaN(n)) {\n throw new RangeError('The value of \"n\" is out of range. It must be a non-negative number. Received ' + n + '.');\n }\n this._maxListeners = n;\n return this;\n};\n\nfunction _getMaxListeners(that) {\n if (that._maxListeners === undefined)\n return EventEmitter.defaultMaxListeners;\n return that._maxListeners;\n}\n\nEventEmitter.prototype.getMaxListeners = function getMaxListeners() {\n return _getMaxListeners(this);\n};\n\nEventEmitter.prototype.emit = function emit(type) {\n var args = [];\n for (var i = 1; i < arguments.length; i++) args.push(arguments[i]);\n var doError = (type === 'error');\n\n var events = this._events;\n if (events !== undefined)\n doError = (doError && events.error === undefined);\n else if (!doError)\n return false;\n\n // If there is no 'error' event listener then throw.\n if (doError) {\n var er;\n if (args.length > 0)\n er = args[0];\n if (er instanceof Error) {\n // Note: The comments on the `throw` lines are intentional, they show\n // up in Node's output if this results in an unhandled exception.\n throw er; // Unhandled 'error' event\n }\n // At least give some kind of context to the user\n var err = new Error('Unhandled error.' + (er ? ' (' + er.message + ')' : ''));\n err.context = er;\n throw err; // Unhandled 'error' event\n }\n\n var handler = events[type];\n\n if (handler === undefined)\n return false;\n\n if (typeof handler === 'function') {\n ReflectApply(handler, this, args);\n } else {\n var len = handler.length;\n var listeners = arrayClone(handler, len);\n for (var i = 0; i < len; ++i)\n ReflectApply(listeners[i], this, args);\n }\n\n return true;\n};\n\nfunction _addListener(target, type, listener, prepend) {\n var m;\n var events;\n var existing;\n\n checkListener(listener);\n\n events = target._events;\n if (events === undefined) {\n events = target._events = Object.create(null);\n target._eventsCount = 0;\n } else {\n // To avoid recursion in the case that type === \"newListener\"! Before\n // adding it to the listeners, first emit \"newListener\".\n if (events.newListener !== undefined) {\n target.emit('newListener', type,\n listener.listener ? listener.listener : listener);\n\n // Re-assign `events` because a newListener handler could have caused the\n // this._events to be assigned to a new object\n events = target._events;\n }\n existing = events[type];\n }\n\n if (existing === undefined) {\n // Optimize the case of one listener. Don't need the extra array object.\n existing = events[type] = listener;\n ++target._eventsCount;\n } else {\n if (typeof existing === 'function') {\n // Adding the second element, need to change to array.\n existing = events[type] =\n prepend ? [listener, existing] : [existing, listener];\n // If we've already got an array, just append.\n } else if (prepend) {\n existing.unshift(listener);\n } else {\n existing.push(listener);\n }\n\n // Check for listener leak\n m = _getMaxListeners(target);\n if (m > 0 && existing.length > m && !existing.warned) {\n existing.warned = true;\n // No error code for this since it is a Warning\n // eslint-disable-next-line no-restricted-syntax\n var w = new Error('Possible EventEmitter memory leak detected. ' +\n existing.length + ' ' + String(type) + ' listeners ' +\n 'added. Use emitter.setMaxListeners() to ' +\n 'increase limit');\n w.name = 'MaxListenersExceededWarning';\n w.emitter = target;\n w.type = type;\n w.count = existing.length;\n ProcessEmitWarning(w);\n }\n }\n\n return target;\n}\n\nEventEmitter.prototype.addListener = function addListener(type, listener) {\n return _addListener(this, type, listener, false);\n};\n\nEventEmitter.prototype.on = EventEmitter.prototype.addListener;\n\nEventEmitter.prototype.prependListener =\n function prependListener(type, listener) {\n return _addListener(this, type, listener, true);\n };\n\nfunction onceWrapper() {\n if (!this.fired) {\n this.target.removeListener(this.type, this.wrapFn);\n this.fired = true;\n if (arguments.length === 0)\n return this.listener.call(this.target);\n return this.listener.apply(this.target, arguments);\n }\n}\n\nfunction _onceWrap(target, type, listener) {\n var state = { fired: false, wrapFn: undefined, target: target, type: type, listener: listener };\n var wrapped = onceWrapper.bind(state);\n wrapped.listener = listener;\n state.wrapFn = wrapped;\n return wrapped;\n}\n\nEventEmitter.prototype.once = function once(type, listener) {\n checkListener(listener);\n this.on(type, _onceWrap(this, type, listener));\n return this;\n};\n\nEventEmitter.prototype.prependOnceListener =\n function prependOnceListener(type, listener) {\n checkListener(listener);\n this.prependListener(type, _onceWrap(this, type, listener));\n return this;\n };\n\n// Emits a 'removeListener' event if and only if the listener was removed.\nEventEmitter.prototype.removeListener =\n function removeListener(type, listener) {\n var list, events, position, i, originalListener;\n\n checkListener(listener);\n\n events = this._events;\n if (events === undefined)\n return this;\n\n list = events[type];\n if (list === undefined)\n return this;\n\n if (list === listener || list.listener === listener) {\n if (--this._eventsCount === 0)\n this._events = Object.create(null);\n else {\n delete events[type];\n if (events.removeListener)\n this.emit('removeListener', type, list.listener || listener);\n }\n } else if (typeof list !== 'function') {\n position = -1;\n\n for (i = list.length - 1; i >= 0; i--) {\n if (list[i] === listener || list[i].listener === listener) {\n originalListener = list[i].listener;\n position = i;\n break;\n }\n }\n\n if (position < 0)\n return this;\n\n if (position === 0)\n list.shift();\n else {\n spliceOne(list, position);\n }\n\n if (list.length === 1)\n events[type] = list[0];\n\n if (events.removeListener !== undefined)\n this.emit('removeListener', type, originalListener || listener);\n }\n\n return this;\n };\n\nEventEmitter.prototype.off = EventEmitter.prototype.removeListener;\n\nEventEmitter.prototype.removeAllListeners =\n function removeAllListeners(type) {\n var listeners, events, i;\n\n events = this._events;\n if (events === undefined)\n return this;\n\n // not listening for removeListener, no need to emit\n if (events.removeListener === undefined) {\n if (arguments.length === 0) {\n this._events = Object.create(null);\n this._eventsCount = 0;\n } else if (events[type] !== undefined) {\n if (--this._eventsCount === 0)\n this._events = Object.create(null);\n else\n delete events[type];\n }\n return this;\n }\n\n // emit removeListener for all listeners on all events\n if (arguments.length === 0) {\n var keys = Object.keys(events);\n var key;\n for (i = 0; i < keys.length; ++i) {\n key = keys[i];\n if (key === 'removeListener') continue;\n this.removeAllListeners(key);\n }\n this.removeAllListeners('removeListener');\n this._events = Object.create(null);\n this._eventsCount = 0;\n return this;\n }\n\n listeners = events[type];\n\n if (typeof listeners === 'function') {\n this.removeListener(type, listeners);\n } else if (listeners !== undefined) {\n // LIFO order\n for (i = listeners.length - 1; i >= 0; i--) {\n this.removeListener(type, listeners[i]);\n }\n }\n\n return this;\n };\n\nfunction _listeners(target, type, unwrap) {\n var events = target._events;\n\n if (events === undefined)\n return [];\n\n var evlistener = events[type];\n if (evlistener === undefined)\n return [];\n\n if (typeof evlistener === 'function')\n return unwrap ? [evlistener.listener || evlistener] : [evlistener];\n\n return unwrap ?\n unwrapListeners(evlistener) : arrayClone(evlistener, evlistener.length);\n}\n\nEventEmitter.prototype.listeners = function listeners(type) {\n return _listeners(this, type, true);\n};\n\nEventEmitter.prototype.rawListeners = function rawListeners(type) {\n return _listeners(this, type, false);\n};\n\nEventEmitter.listenerCount = function(emitter, type) {\n if (typeof emitter.listenerCount === 'function') {\n return emitter.listenerCount(type);\n } else {\n return listenerCount.call(emitter, type);\n }\n};\n\nEventEmitter.prototype.listenerCount = listenerCount;\nfunction listenerCount(type) {\n var events = this._events;\n\n if (events !== undefined) {\n var evlistener = events[type];\n\n if (typeof evlistener === 'function') {\n return 1;\n } else if (evlistener !== undefined) {\n return evlistener.length;\n }\n }\n\n return 0;\n}\n\nEventEmitter.prototype.eventNames = function eventNames() {\n return this._eventsCount > 0 ? ReflectOwnKeys(this._events) : [];\n};\n\nfunction arrayClone(arr, n) {\n var copy = new Array(n);\n for (var i = 0; i < n; ++i)\n copy[i] = arr[i];\n return copy;\n}\n\nfunction spliceOne(list, index) {\n for (; index + 1 < list.length; index++)\n list[index] = list[index + 1];\n list.pop();\n}\n\nfunction unwrapListeners(arr) {\n var ret = new Array(arr.length);\n for (var i = 0; i < ret.length; ++i) {\n ret[i] = arr[i].listener || arr[i];\n }\n return ret;\n}\n\nfunction once(emitter, name) {\n return new Promise(function (resolve, reject) {\n function errorListener(err) {\n emitter.removeListener(name, resolver);\n reject(err);\n }\n\n function resolver() {\n if (typeof emitter.removeListener === 'function') {\n emitter.removeListener('error', errorListener);\n }\n resolve([].slice.call(arguments));\n };\n\n eventTargetAgnosticAddListener(emitter, name, resolver, { once: true });\n if (name !== 'error') {\n addErrorHandlerIfEventEmitter(emitter, errorListener, { once: true });\n }\n });\n}\n\nfunction addErrorHandlerIfEventEmitter(emitter, handler, flags) {\n if (typeof emitter.on === 'function') {\n eventTargetAgnosticAddListener(emitter, 'error', handler, flags);\n }\n}\n\nfunction eventTargetAgnosticAddListener(emitter, name, listener, flags) {\n if (typeof emitter.on === 'function') {\n if (flags.once) {\n emitter.once(name, listener);\n } else {\n emitter.on(name, listener);\n }\n } else if (typeof emitter.addEventListener === 'function') {\n // EventTarget does not have `error` event semantics like Node\n // EventEmitters, we do not listen for `error` events here.\n emitter.addEventListener(name, function wrapListener(arg) {\n // IE does not have builtin `{ once: true }` support so we\n // have to do it manually.\n if (flags.once) {\n emitter.removeEventListener(name, wrapListener);\n }\n listener(arg);\n });\n } else {\n throw new TypeError('The \"emitter\" argument must be of type EventEmitter. Received type ' + typeof emitter);\n }\n}\n","/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport function __createBinding(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n}\r\n\r\nexport function __exportStar(m, exports) {\r\n for (var p in m) if (p !== \"default\" && !exports.hasOwnProperty(p)) exports[p] = m[p];\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n};\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\r\n result.default = mod;\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, privateMap) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to get private field on non-instance\");\r\n }\r\n return privateMap.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, privateMap, value) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to set private field on non-instance\");\r\n }\r\n privateMap.set(receiver, value);\r\n return value;\r\n}\r\n","'use strict'\nfunction tryStringify (o) {\n try { return JSON.stringify(o) } catch(e) { return '\"[Circular]\"' }\n}\n\nmodule.exports = format\n\nfunction format(f, args, opts) {\n var ss = (opts && opts.stringify) || tryStringify\n var offset = 1\n if (typeof f === 'object' && f !== null) {\n var len = args.length + offset\n if (len === 1) return f\n var objects = new Array(len)\n objects[0] = ss(f)\n for (var index = 1; index < len; index++) {\n objects[index] = ss(args[index])\n }\n return objects.join(' ')\n }\n if (typeof f !== 'string') {\n return f\n }\n var argLen = args.length\n if (argLen === 0) return f\n var str = ''\n var a = 1 - offset\n var lastPos = -1\n var flen = (f && f.length) || 0\n for (var i = 0; i < flen;) {\n if (f.charCodeAt(i) === 37 && i + 1 < flen) {\n lastPos = lastPos > -1 ? lastPos : 0\n switch (f.charCodeAt(i + 1)) {\n case 100: // 'd'\n case 102: // 'f'\n if (a >= argLen)\n break\n if (args[a] == null) break\n if (lastPos < i)\n str += f.slice(lastPos, i)\n str += Number(args[a])\n lastPos = i + 2\n i++\n break\n case 105: // 'i'\n if (a >= argLen)\n break\n if (args[a] == null) break\n if (lastPos < i)\n str += f.slice(lastPos, i)\n str += Math.floor(Number(args[a]))\n lastPos = i + 2\n i++\n break\n case 79: // 'O'\n case 111: // 'o'\n case 106: // 'j'\n if (a >= argLen)\n break\n if (args[a] === undefined) break\n if (lastPos < i)\n str += f.slice(lastPos, i)\n var type = typeof args[a]\n if (type === 'string') {\n str += '\\'' + args[a] + '\\''\n lastPos = i + 2\n i++\n break\n }\n if (type === 'function') {\n str += args[a].name || '<anonymous>'\n lastPos = i + 2\n i++\n break\n }\n str += ss(args[a])\n lastPos = i + 2\n i++\n break\n case 115: // 's'\n if (a >= argLen)\n break\n if (lastPos < i)\n str += f.slice(lastPos, i)\n str += String(args[a])\n lastPos = i + 2\n i++\n break\n case 37: // '%'\n if (lastPos < i)\n str += f.slice(lastPos, i)\n str += '%'\n lastPos = i + 2\n i++\n a--\n break\n }\n ++a\n }\n ++i\n }\n if (lastPos === -1)\n return f\n else if (lastPos < flen) {\n str += f.slice(lastPos)\n }\n\n return str\n}\n","'use strict'\n\nconst format = require('quick-format-unescaped')\n\nmodule.exports = pino\n\nconst _console = pfGlobalThisOrFallback().console || {}\nconst stdSerializers = {\n mapHttpRequest: mock,\n mapHttpResponse: mock,\n wrapRequestSerializer: passthrough,\n wrapResponseSerializer: passthrough,\n wrapErrorSerializer: passthrough,\n req: mock,\n res: mock,\n err: asErrValue\n}\n\nfunction shouldSerialize (serialize, serializers) {\n if (Array.isArray(serialize)) {\n const hasToFilter = serialize.filter(function (k) {\n return k !== '!stdSerializers.err'\n })\n return hasToFilter\n } else if (serialize === true) {\n return Object.keys(serializers)\n }\n\n return false\n}\n\nfunction pino (opts) {\n opts = opts || {}\n opts.browser = opts.browser || {}\n\n const transmit = opts.browser.transmit\n if (transmit && typeof transmit.send !== 'function') { throw Error('pino: transmit option must have a send function') }\n\n const proto = opts.browser.write || _console\n if (opts.browser.write) opts.browser.asObject = true\n const serializers = opts.serializers || {}\n const serialize = shouldSerialize(opts.browser.serialize, serializers)\n let stdErrSerialize = opts.browser.serialize\n\n if (\n Array.isArray(opts.browser.serialize) &&\n opts.browser.serialize.indexOf('!stdSerializers.err') > -1\n ) stdErrSerialize = false\n\n const levels = ['error', 'fatal', 'warn', 'info', 'debug', 'trace']\n\n if (typeof proto === 'function') {\n proto.error = proto.fatal = proto.warn =\n proto.info = proto.debug = proto.trace = proto\n }\n if (opts.enabled === false) opts.level = 'silent'\n const level = opts.level || 'info'\n const logger = Object.create(proto)\n if (!logger.log) logger.log = noop\n\n Object.defineProperty(logger, 'levelVal', {\n get: getLevelVal\n })\n Object.defineProperty(logger, 'level', {\n get: getLevel,\n set: setLevel\n })\n\n const setOpts = {\n transmit,\n serialize,\n asObject: opts.browser.asObject,\n levels,\n timestamp: getTimeFunction(opts)\n }\n logger.levels = pino.levels\n logger.level = level\n\n logger.setMaxListeners = logger.getMaxListeners =\n logger.emit = logger.addListener = logger.on =\n logger.prependListener = logger.once =\n logger.prependOnceListener = logger.removeListener =\n logger.removeAllListeners = logger.listeners =\n logger.listenerCount = logger.eventNames =\n logger.write = logger.flush = noop\n logger.serializers = serializers\n logger._serialize = serialize\n logger._stdErrSerialize = stdErrSerialize\n logger.child = child\n\n if (transmit) logger._logEvent = createLogEventShape()\n\n function getLevelVal () {\n return this.level === 'silent'\n ? Infinity\n : this.levels.values[this.level]\n }\n\n function getLevel () {\n return this._level\n }\n function setLevel (level) {\n if (level !== 'silent' && !this.levels.values[level]) {\n throw Error('unknown level ' + level)\n }\n this._level = level\n\n set(setOpts, logger, 'error', 'log') // <-- must stay first\n set(setOpts, logger, 'fatal', 'error')\n set(setOpts, logger, 'warn', 'error')\n set(setOpts, logger, 'info', 'log')\n set(setOpts, logger, 'debug', 'log')\n set(setOpts, logger, 'trace', 'log')\n }\n\n function child (bindings, childOptions) {\n if (!bindings) {\n throw new Error('missing bindings for child Pino')\n }\n childOptions = childOptions || {}\n if (serialize && bindings.serializers) {\n childOptions.serializers = bindings.serializers\n }\n const childOptionsSerializers = childOptions.serializers\n if (serialize && childOptionsSerializers) {\n var childSerializers = Object.assign({}, serializers, childOptionsSerializers)\n var childSerialize = opts.browser.serialize === true\n ? Object.keys(childSerializers)\n : serialize\n delete bindings.serializers\n applySerializers([bindings], childSerialize, childSerializers, this._stdErrSerialize)\n }\n function Child (parent) {\n this._childLevel = (parent._childLevel | 0) + 1\n this.error = bind(parent, bindings, 'error')\n this.fatal = bind(parent, bindings, 'fatal')\n this.warn = bind(parent, bindings, 'warn')\n this.info = bind(parent, bindings, 'info')\n this.debug = bind(parent, bindings, 'debug')\n this.trace = bind(parent, bindings, 'trace')\n if (childSerializers) {\n this.serializers = childSerializers\n this._serialize = childSerialize\n }\n if (transmit) {\n this._logEvent = createLogEventShape(\n [].concat(parent._logEvent.bindings, bindings)\n )\n }\n }\n Child.prototype = this\n return new Child(this)\n }\n return logger\n}\n\npino.levels = {\n values: {\n fatal: 60,\n error: 50,\n warn: 40,\n info: 30,\n debug: 20,\n trace: 10\n },\n labels: {\n 10: 'trace',\n 20: 'debug',\n 30: 'info',\n 40: 'warn',\n 50: 'error',\n 60: 'fatal'\n }\n}\n\npino.stdSerializers = stdSerializers\npino.stdTimeFunctions = Object.assign({}, { nullTime, epochTime, unixTime, isoTime })\n\nfunction set (opts, logger, level, fallback) {\n const proto = Object.getPrototypeOf(logger)\n logger[level] = logger.levelVal > logger.levels.values[level]\n ? noop\n : (proto[level] ? proto[level] : (_console[level] || _console[fallback] || noop))\n\n wrap(opts, logger, level)\n}\n\nfunction wrap (opts, logger, level) {\n if (!opts.transmit && logger[level] === noop) return\n\n logger[level] = (function (write) {\n return function LOG () {\n const ts = opts.timestamp()\n const args = new Array(arguments.length)\n const proto = (Object.getPrototypeOf && Object.getPrototypeOf(this) === _console) ? _console : this\n for (var i = 0; i < args.length; i++) args[i] = arguments[i]\n\n if (opts.serialize && !opts.asObject) {\n applySerializers(args, this._serialize, this.serializers, this._stdErrSerialize)\n }\n if (opts.asObject) write.call(proto, asObject(this, level, args, ts))\n else write.apply(proto, args)\n\n if (opts.transmit) {\n const transmitLevel = opts.transmit.level || logger.level\n const transmitValue = pino.levels.values[transmitLevel]\n const methodValue = pino.levels.values[level]\n if (methodValue < transmitValue) return\n transmit(this, {\n ts,\n methodLevel: level,\n methodValue,\n transmitLevel,\n transmitValue: pino.levels.values[opts.transmit.level || logger.level],\n send: opts.transmit.send,\n val: logger.levelVal\n }, args)\n }\n }\n })(logger[level])\n}\n\nfunction asObject (logger, level, args, ts) {\n if (logger._serialize) applySerializers(args, logger._serialize, logger.serializers, logger._stdErrSerialize)\n const argsCloned = args.slice()\n let msg = argsCloned[0]\n const o = {}\n if (ts) {\n o.time = ts\n }\n o.level = pino.levels.values[level]\n let lvl = (logger._childLevel | 0) + 1\n if (lvl < 1) lvl = 1\n // deliberate, catching objects, arrays\n if (msg !== null && typeof msg === 'object') {\n while (lvl-- && typeof argsCloned[0] === 'object') {\n Object.assign(o, argsCloned.shift())\n }\n msg = argsCloned.length ? format(argsCloned.shift(), argsCloned) : undefined\n } else if (typeof msg === 'string') msg = format(argsCloned.shift(), argsCloned)\n if (msg !== undefined) o.msg = msg\n return o\n}\n\nfunction applySerializers (args, serialize, serializers, stdErrSerialize) {\n for (const i in args) {\n if (stdErrSerialize && args[i] instanceof Error) {\n args[i] = pino.stdSerializers.err(args[i])\n } else if (typeof args[i] === 'object' && !Array.isArray(args[i])) {\n for (const k in args[i]) {\n if (serialize && serialize.indexOf(k) > -1 && k in serializers) {\n args[i][k] = serializers[k](args[i][k])\n }\n }\n }\n }\n}\n\nfunction bind (parent, bindings, level) {\n return function () {\n const args = new Array(1 + arguments.length)\n args[0] = bindings\n for (var i = 1; i < args.length; i++) {\n args[i] = arguments[i - 1]\n }\n return parent[level].apply(this, args)\n }\n}\n\nfunction transmit (logger, opts, args) {\n const send = opts.send\n const ts = opts.ts\n const methodLevel = opts.methodLevel\n const methodValue = opts.methodValue\n const val = opts.val\n const bindings = logger._logEvent.bindings\n\n applySerializers(\n args,\n logger._serialize || Object.keys(logger.serializers),\n logger.serializers,\n logger._stdErrSerialize === undefined ? true : logger._stdErrSerialize\n )\n logger._logEvent.ts = ts\n logger._logEvent.messages = args.filter(function (arg) {\n // bindings can only be objects, so reference equality check via indexOf is fine\n return bindings.indexOf(arg) === -1\n })\n\n logger._logEvent.level.label = methodLevel\n logger._logEvent.level.value = methodValue\n\n send(methodLevel, logger._logEvent, val)\n\n logger._logEvent = createLogEventShape(bindings)\n}\n\nfunction createLogEventShape (bindings) {\n return {\n ts: 0,\n messages: [],\n bindings: bindings || [],\n level: { label: '', value: 0 }\n }\n}\n\nfunction asErrValue (err) {\n const obj = {\n type: err.constructor.name,\n msg: err.message,\n stack: err.stack\n }\n for (const key in err) {\n if (obj[key] === undefined) {\n obj[key] = err[key]\n }\n }\n return obj\n}\n\nfunction getTimeFunction (opts) {\n if (typeof opts.timestamp === 'function') {\n return opts.timestamp\n }\n if (opts.timestamp === false) {\n return nullTime\n }\n return epochTime\n}\n\nfunction mock () { return {} }\nfunction passthrough (a) { return a }\nfunction noop () {}\n\nfunction nullTime () { return false }\nfunction epochTime () { return Date.now() }\nfunction unixTime () { return Math.round(Date.now() / 1000.0) }\nfunction isoTime () { return new Date(Date.now()).toISOString() } // using Date.now() for testability\n\n/* eslint-disable */\n/* istanbul ignore next */\nfunction pfGlobalThisOrFallback () {\n function defd (o) { return typeof o !== 'undefined' && o }\n try {\n if (typeof globalThis !== 'undefined') return globalThis\n Object.defineProperty(Object.prototype, 'globalThis', {\n get: function () {\n delete Object.prototype.globalThis\n return (this.globalThis = this)\n },\n configurable: true\n })\n return globalThis\n } catch (e) {\n return defd(self) || defd(window) || defd(this) || {}\n }\n}\n/* eslint-enable */\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.isBrowserCryptoAvailable = exports.getSubtleCrypto = exports.getBrowerCrypto = void 0;\nfunction getBrowerCrypto() {\n return (global === null || global === void 0 ? void 0 : global.crypto) || (global === null || global === void 0 ? void 0 : global.msCrypto) || {};\n}\nexports.getBrowerCrypto = getBrowerCrypto;\nfunction getSubtleCrypto() {\n const browserCrypto = getBrowerCrypto();\n return browserCrypto.subtle || browserCrypto.webkitSubtle;\n}\nexports.getSubtleCrypto = getSubtleCrypto;\nfunction isBrowserCryptoAvailable() {\n return !!getBrowerCrypto() && !!getSubtleCrypto();\n}\nexports.isBrowserCryptoAvailable = isBrowserCryptoAvailable;\n//# sourceMappingURL=crypto.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.isBrowser = exports.isNode = exports.isReactNative = void 0;\nfunction isReactNative() {\n return (typeof document === \"undefined\" &&\n typeof navigator !== \"undefined\" &&\n navigator.product === \"ReactNative\");\n}\nexports.isReactNative = isReactNative;\nfunction isNode() {\n return (typeof process !== \"undefined\" &&\n typeof process.versions !== \"undefined\" &&\n typeof process.versions.node !== \"undefined\");\n}\nexports.isNode = isNode;\nfunction isBrowser() {\n return !isReactNative() && !isNode();\n}\nexports.isBrowser = isBrowser;\n//# sourceMappingURL=env.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst tslib_1 = require(\"tslib\");\ntslib_1.__exportStar(require(\"./crypto\"), exports);\ntslib_1.__exportStar(require(\"./env\"), exports);\n//# sourceMappingURL=index.js.map","// Save global object in a variable\nvar __global__ =\n(typeof globalThis !== 'undefined' && globalThis) ||\n(typeof self !== 'undefined' && self) ||\n(typeof global !== 'undefined' && global);\n// Create an object that extends from __global__ without the fetch function\nvar __globalThis__ = (function () {\nfunction F() {\nthis.fetch = false;\nthis.DOMException = __global__.DOMException\n}\nF.prototype = __global__; // Needed for feature detection on whatwg-fetch's code\nreturn new F();\n})();\n// Wraps whatwg-fetch with a function scope to hijack the global object\n// \"globalThis\" that's going to be patched\n(function(globalThis) {\n\nvar irrelevant = (function (exports) {\n\n /* eslint-disable no-prototype-builtins */\n var g =\n (typeof globalThis !== 'undefined' && globalThis) ||\n (typeof self !== 'undefined' && self) ||\n // eslint-disable-next-line no-undef\n (typeof global !== 'undefined' && global) ||\n {};\n\n var support = {\n searchParams: 'URLSearchParams' in g,\n iterable: 'Symbol' in g && 'iterator' in Symbol,\n blob:\n 'FileReader' in g &&\n 'Blob' in g &&\n (function() {\n try {\n new Blob();\n return true\n } catch (e) {\n return false\n }\n })(),\n formData: 'FormData' in g,\n arrayBuffer: 'ArrayBuffer' in g\n };\n\n function isDataView(obj) {\n return obj && DataView.prototype.isPrototypeOf(obj)\n }\n\n if (support.arrayBuffer) {\n var viewClasses = [\n '[object Int8Array]',\n '[object Uint8Array]',\n '[object Uint8ClampedArray]',\n '[object Int16Array]',\n '[object Uint16Array]',\n '[object Int32Array]',\n '[object Uint32Array]',\n '[object Float32Array]',\n '[object Float64Array]'\n ];\n\n var isArrayBufferView =\n ArrayBuffer.isView ||\n function(obj) {\n return obj && viewClasses.indexOf(Object.prototype.toString.call(obj)) > -1\n };\n }\n\n function normalizeName(name) {\n if (typeof name !== 'string') {\n name = String(name);\n }\n if (/[^a-z0-9\\-#$%&'*+.^_`|~!]/i.test(name) || name === '') {\n throw new TypeError('Invalid character in header field name: \"' + name + '\"')\n }\n return name.toLowerCase()\n }\n\n function normalizeValue(value) {\n if (typeof value !== 'string') {\n value = String(value);\n }\n return value\n }\n\n // Build a destructive iterator for the value list\n function iteratorFor(items) {\n var iterator = {\n next: function() {\n var value = items.shift();\n return {done: value === undefined, value: value}\n }\n };\n\n if (support.iterable) {\n iterator[Symbol.iterator] = function() {\n return iterator\n };\n }\n\n return iterator\n }\n\n function Headers(headers) {\n this.map = {};\n\n if (headers instanceof Headers) {\n headers.forEach(function(value, name) {\n this.append(name, value);\n }, this);\n } else if (Array.isArray(headers)) {\n headers.forEach(function(header) {\n if (header.length != 2) {\n throw new TypeError('Headers constructor: expected name/value pair to be length 2, found' + header.length)\n }\n this.append(header[0], header[1]);\n }, this);\n } else if (headers) {\n Object.getOwnPropertyNames(headers).forEach(function(name) {\n this.append(name, headers[name]);\n }, this);\n }\n }\n\n Headers.prototype.append = function(name, value) {\n name = normalizeName(name);\n value = normalizeValue(value);\n var oldValue = this.map[name];\n this.map[name] = oldValue ? oldValue + ', ' + value : value;\n };\n\n Headers.prototype['delete'] = function(name) {\n delete this.map[normalizeName(name)];\n };\n\n Headers.prototype.get = function(name) {\n name = normalizeName(name);\n return this.has(name) ? this.map[name] : null\n };\n\n Headers.prototype.has = function(name) {\n return this.map.hasOwnProperty(normalizeName(name))\n };\n\n Headers.prototype.set = function(name, value) {\n this.map[normalizeName(name)] = normalizeValue(value);\n };\n\n Headers.prototype.forEach = function(callback, thisArg) {\n for (var name in this.map) {\n if (this.map.hasOwnProperty(name)) {\n callback.call(thisArg, this.map[name], name, this);\n }\n }\n };\n\n Headers.prototype.keys = function() {\n var items = [];\n this.forEach(function(value, name) {\n items.push(name);\n });\n return iteratorFor(items)\n };\n\n Headers.prototype.values = function() {\n var items = [];\n this.forEach(function(value) {\n items.push(value);\n });\n return iteratorFor(items)\n };\n\n Headers.prototype.entries = function() {\n var items = [];\n this.forEach(function(value, name) {\n items.push([name, value]);\n });\n return iteratorFor(items)\n };\n\n if (support.iterable) {\n Headers.prototype[Symbol.iterator] = Headers.prototype.entries;\n }\n\n function consumed(body) {\n if (body._noBody) return\n if (body.bodyUsed) {\n return Promise.reject(new TypeError('Already read'))\n }\n body.bodyUsed = true;\n }\n\n function fileReaderReady(reader) {\n return new Promise(function(resolve, reject) {\n reader.onload = function() {\n resolve(reader.result);\n };\n reader.onerror = function() {\n reject(reader.error);\n };\n })\n }\n\n function readBlobAsArrayBuffer(blob) {\n var reader = new FileReader();\n var promise = fileReaderReady(reader);\n reader.readAsArrayBuffer(blob);\n return promise\n }\n\n function readBlobAsText(blob) {\n var reader = new FileReader();\n var promise = fileReaderReady(reader);\n var match = /charset=([A-Za-z0-9_-]+)/.exec(blob.type);\n var encoding = match ? match[1] : 'utf-8';\n reader.readAsText(blob, encoding);\n return promise\n }\n\n function readArrayBufferAsText(buf) {\n var view = new Uint8Array(buf);\n var chars = new Array(view.length);\n\n for (var i = 0; i < view.length; i++) {\n chars[i] = String.fromCharCode(view[i]);\n }\n return chars.join('')\n }\n\n function bufferClone(buf) {\n if (buf.slice) {\n return buf.slice(0)\n } else {\n var view = new Uint8Array(buf.byteLength);\n view.set(new Uint8Array(buf));\n return view.buffer\n }\n }\n\n function Body() {\n this.bodyUsed = false;\n\n this._initBody = function(body) {\n /*\n fetch-mock wraps the Response object in an ES6 Proxy to\n provide useful test harness features such as flush. However, on\n ES5 browsers without fetch or Proxy support pollyfills must be used;\n the proxy-pollyfill is unable to proxy an attribute unless it exists\n on the object before the Proxy is created. This change ensures\n Response.bodyUsed exists on the instance, while maintaining the\n semantic of setting Request.bodyUsed in the constructor before\n _initBody is called.\n */\n // eslint-disable-next-line no-self-assign\n this.bodyUsed = this.bodyUsed;\n this._bodyInit = body;\n if (!body) {\n this._noBody = true;\n this._bodyText = '';\n } else if (typeof body === 'string') {\n this._bodyText = body;\n } else if (support.blob && Blob.prototype.isPrototypeOf(body)) {\n this._bodyBlob = body;\n } else if (support.formData && FormData.prototype.isPrototypeOf(body)) {\n this._bodyFormData = body;\n } else if (support.searchParams && URLSearchParams.prototype.isPrototypeOf(body)) {\n this._bodyText = body.toString();\n } else if (support.arrayBuffer && support.blob && isDataView(body)) {\n this._bodyArrayBuffer = bufferClone(body.buffer);\n // IE 10-11 can't handle a DataView body.\n this._bodyInit = new Blob([this._bodyArrayBuffer]);\n } else if (support.arrayBuffer && (ArrayBuffer.prototype.isPrototypeOf(body) || isArrayBufferView(body))) {\n this._bodyArrayBuffer = bufferClone(body);\n } else {\n this._bodyText = body = Object.prototype.toString.call(body);\n }\n\n if (!this.headers.get('content-type')) {\n if (typeof body === 'string') {\n this.headers.set('content-type', 'text/plain;charset=UTF-8');\n } else if (this._bodyBlob && this._bodyBlob.type) {\n this.headers.set('content-type', this._bodyBlob.type);\n } else if (support.searchParams && URLSearchParams.prototype.isPrototypeOf(body)) {\n this.headers.set('content-type', 'application/x-www-form-urlencoded;charset=UTF-8');\n }\n }\n };\n\n if (support.blob) {\n this.blob = function() {\n var rejected = consumed(this);\n if (rejected) {\n return rejected\n }\n\n if (this._bodyBlob) {\n return Promise.resolve(this._bodyBlob)\n } else if (this._bodyArrayBuffer) {\n return Promise.resolve(new Blob([this._bodyArrayBuffer]))\n } else if (this._bodyFormData) {\n throw new Error('could not read FormData body as blob')\n } else {\n return Promise.resolve(new Blob([this._bodyText]))\n }\n };\n }\n\n this.arrayBuffer = function() {\n if (this._bodyArrayBuffer) {\n var isConsumed = consumed(this);\n if (isConsumed) {\n return isConsumed\n } else if (ArrayBuffer.isView(this._bodyArrayBuffer)) {\n return Promise.resolve(\n this._bodyArrayBuffer.buffer.slice(\n this._bodyArrayBuffer.byteOffset,\n this._bodyArrayBuffer.byteOffset + this._bodyArrayBuffer.byteLength\n )\n )\n } else {\n return Promise.resolve(this._bodyArrayBuffer)\n }\n } else if (support.blob) {\n return this.blob().then(readBlobAsArrayBuffer)\n } else {\n throw new Error('could not read as ArrayBuffer')\n }\n };\n\n this.text = function() {\n var rejected = consumed(this);\n if (rejected) {\n return rejected\n }\n\n if (this._bodyBlob) {\n return readBlobAsText(this._bodyBlob)\n } else if (this._bodyArrayBuffer) {\n return Promise.resolve(readArrayBufferAsText(this._bodyArrayBuffer))\n } else if (this._bodyFormData) {\n throw new Error('could not read FormData body as text')\n } else {\n return Promise.resolve(this._bodyText)\n }\n };\n\n if (support.formData) {\n this.formData = function() {\n return this.text().then(decode)\n };\n }\n\n this.json = function() {\n return this.text().then(JSON.parse)\n };\n\n return this\n }\n\n // HTTP methods whose capitalization should be normalized\n var methods = ['CONNECT', 'DELETE', 'GET', 'HEAD', 'OPTIONS', 'PATCH', 'POST', 'PUT', 'TRACE'];\n\n function normalizeMethod(method) {\n var upcased = method.toUpperCase();\n return methods.indexOf(upcased) > -1 ? upcased : method\n }\n\n function Request(input, options) {\n if (!(this instanceof Request)) {\n throw new TypeError('Please use the \"new\" operator, this DOM object constructor cannot be called as a function.')\n }\n\n options = options || {};\n var body = options.body;\n\n if (input instanceof Request) {\n if (input.bodyUsed) {\n throw new TypeError('Already read')\n }\n this.url = input.url;\n this.credentials = input.credentials;\n if (!options.headers) {\n this.headers = new Headers(input.headers);\n }\n this.method = input.method;\n this.mode = input.mode;\n this.signal = input.signal;\n if (!body && input._bodyInit != null) {\n body = input._bodyInit;\n input.bodyUsed = true;\n }\n } else {\n this.url = String(input);\n }\n\n this.credentials = options.credentials || this.credentials || 'same-origin';\n if (options.headers || !this.headers) {\n this.headers = new Headers(options.headers);\n }\n this.method = normalizeMethod(options.method || this.method || 'GET');\n this.mode = options.mode || this.mode || null;\n this.signal = options.signal || this.signal || (function () {\n if ('AbortController' in g) {\n var ctrl = new AbortController();\n return ctrl.signal;\n }\n }());\n this.referrer = null;\n\n if ((this.method === 'GET' || this.method === 'HEAD') && body) {\n throw new TypeError('Body not allowed for GET or HEAD requests')\n }\n this._initBody(body);\n\n if (this.method === 'GET' || this.method === 'HEAD') {\n if (options.cache === 'no-store' || options.cache === 'no-cache') {\n // Search for a '_' parameter in the query string\n var reParamSearch = /([?&])_=[^&]*/;\n if (reParamSearch.test(this.url)) {\n // If it already exists then set the value with the current time\n this.url = this.url.replace(reParamSearch, '$1_=' + new Date().getTime());\n } else {\n // Otherwise add a new '_' parameter to the end with the current time\n var reQueryString = /\\?/;\n this.url += (reQueryString.test(this.url) ? '&' : '?') + '_=' + new Date().getTime();\n }\n }\n }\n }\n\n Request.prototype.clone = function() {\n return new Request(this, {body: this._bodyInit})\n };\n\n function decode(body) {\n var form = new FormData();\n body\n .trim()\n .split('&')\n .forEach(function(bytes) {\n if (bytes) {\n var split = bytes.split('=');\n var name = split.shift().replace(/\\+/g, ' ');\n var value = split.join('=').replace(/\\+/g, ' ');\n form.append(decodeURIComponent(name), decodeURIComponent(value));\n }\n });\n return form\n }\n\n function parseHeaders(rawHeaders) {\n var headers = new Headers();\n // Replace instances of \\r\\n and \\n followed by at least one space or horizontal tab with a space\n // https://tools.ietf.org/html/rfc7230#section-3.2\n var preProcessedHeaders = rawHeaders.replace(/\\r?\\n[\\t ]+/g, ' ');\n // Avoiding split via regex to work around a common IE11 bug with the core-js 3.6.0 regex polyfill\n // https://github.com/github/fetch/issues/748\n // https://github.com/zloirock/core-js/issues/751\n preProcessedHeaders\n .split('\\r')\n .map(function(header) {\n return header.indexOf('\\n') === 0 ? header.substr(1, header.length) : header\n })\n .forEach(function(line) {\n var parts = line.split(':');\n var key = parts.shift().trim();\n if (key) {\n var value = parts.join(':').trim();\n try {\n headers.append(key, value);\n } catch (error) {\n console.warn('Response ' + error.message);\n }\n }\n });\n return headers\n }\n\n Body.call(Request.prototype);\n\n function Response(bodyInit, options) {\n if (!(this instanceof Response)) {\n throw new TypeError('Please use the \"new\" operator, this DOM object constructor cannot be called as a function.')\n }\n if (!options) {\n options = {};\n }\n\n this.type = 'default';\n this.status = options.status === undefined ? 200 : options.status;\n if (this.status < 200 || this.status > 599) {\n throw new RangeError(\"Failed to construct 'Response': The status provided (0) is outside the range [200, 599].\")\n }\n this.ok = this.status >= 200 && this.status < 300;\n this.statusText = options.statusText === undefined ? '' : '' + options.statusText;\n this.headers = new Headers(options.headers);\n this.url = options.url || '';\n this._initBody(bodyInit);\n }\n\n Body.call(Response.prototype);\n\n Response.prototype.clone = function() {\n return new Response(this._bodyInit, {\n status: this.status,\n statusText: this.statusText,\n headers: new Headers(this.headers),\n url: this.url\n })\n };\n\n Response.error = function() {\n var response = new Response(null, {status: 200, statusText: ''});\n response.ok = false;\n response.status = 0;\n response.type = 'error';\n return response\n };\n\n var redirectStatuses = [301, 302, 303, 307, 308];\n\n Response.redirect = function(url, status) {\n if (redirectStatuses.indexOf(status) === -1) {\n throw new RangeError('Invalid status code')\n }\n\n return new Response(null, {status: status, headers: {location: url}})\n };\n\n exports.DOMException = g.DOMException;\n try {\n new exports.DOMException();\n } catch (err) {\n exports.DOMException = function(message, name) {\n this.message = message;\n this.name = name;\n var error = Error(message);\n this.stack = error.stack;\n };\n exports.DOMException.prototype = Object.create(Error.prototype);\n exports.DOMException.prototype.constructor = exports.DOMException;\n }\n\n function fetch(input, init) {\n return new Promise(function(resolve, reject) {\n var request = new Request(input, init);\n\n if (request.signal && request.signal.aborted) {\n return reject(new exports.DOMException('Aborted', 'AbortError'))\n }\n\n var xhr = new XMLHttpRequest();\n\n function abortXhr() {\n xhr.abort();\n }\n\n xhr.onload = function() {\n var options = {\n statusText: xhr.statusText,\n headers: parseHeaders(xhr.getAllResponseHeaders() || '')\n };\n // This check if specifically for when a user fetches a file locally from the file system\n // Only if the status is out of a normal range\n if (request.url.indexOf('file://') === 0 && (xhr.status < 200 || xhr.status > 599)) {\n options.status = 200;\n } else {\n options.status = xhr.status;\n }\n options.url = 'responseURL' in xhr ? xhr.responseURL : options.headers.get('X-Request-URL');\n var body = 'response' in xhr ? xhr.response : xhr.responseText;\n setTimeout(function() {\n resolve(new Response(body, options));\n }, 0);\n };\n\n xhr.onerror = function() {\n setTimeout(function() {\n reject(new TypeError('Network request failed'));\n }, 0);\n };\n\n xhr.ontimeout = function() {\n setTimeout(function() {\n reject(new TypeError('Network request timed out'));\n }, 0);\n };\n\n xhr.onabort = function() {\n setTimeout(function() {\n reject(new exports.DOMException('Aborted', 'AbortError'));\n }, 0);\n };\n\n function fixUrl(url) {\n try {\n return url === '' && g.location.href ? g.location.href : url\n } catch (e) {\n return url\n }\n }\n\n xhr.open(request.method, fixUrl(request.url), true);\n\n if (request.credentials === 'include') {\n xhr.withCredentials = true;\n } else if (request.credentials === 'omit') {\n xhr.withCredentials = false;\n }\n\n if ('responseType' in xhr) {\n if (support.blob) {\n xhr.responseType = 'blob';\n } else if (\n support.arrayBuffer\n ) {\n xhr.responseType = 'arraybuffer';\n }\n }\n\n if (init && typeof init.headers === 'object' && !(init.headers instanceof Headers || (g.Headers && init.headers instanceof g.Headers))) {\n var names = [];\n Object.getOwnPropertyNames(init.headers).forEach(function(name) {\n names.push(normalizeName(name));\n xhr.setRequestHeader(name, normalizeValue(init.headers[name]));\n });\n request.headers.forEach(function(value, name) {\n if (names.indexOf(name) === -1) {\n xhr.setRequestHeader(name, value);\n }\n });\n } else {\n request.headers.forEach(function(value, name) {\n xhr.setRequestHeader(name, value);\n });\n }\n\n if (request.signal) {\n request.signal.addEventListener('abort', abortXhr);\n\n xhr.onreadystatechange = function() {\n // DONE (success or failure)\n if (xhr.readyState === 4) {\n request.signal.removeEventListener('abort', abortXhr);\n }\n };\n }\n\n xhr.send(typeof request._bodyInit === 'undefined' ? null : request._bodyInit);\n })\n }\n\n fetch.polyfill = true;\n\n if (!g.fetch) {\n g.fetch = fetch;\n g.Headers = Headers;\n g.Request = Request;\n g.Response = Response;\n }\n\n exports.Headers = Headers;\n exports.Request = Request;\n exports.Response = Response;\n exports.fetch = fetch;\n\n Object.defineProperty(exports, '__esModule', { value: true });\n\n return exports;\n\n})({});\n})(__globalThis__);\n// This is a ponyfill, so...\n__globalThis__.fetch.ponyfill = true;\ndelete __globalThis__.fetch.polyfill;\n// Choose between native implementation (__global__) or custom implementation (__globalThis__)\nvar ctx = __global__.fetch ? __global__ : __globalThis__;\nexports = ctx.fetch // To enable: import fetch from 'cross-fetch'\nexports.default = ctx.fetch // For TypeScript consumers without esModuleInterop.\nexports.fetch = ctx.fetch // To enable: import {fetch} from 'cross-fetch'\nexports.Headers = ctx.Headers\nexports.Request = ctx.Request\nexports.Response = ctx.Response\nmodule.exports = exports\n","import Rg,{PROPOSAL_EXPIRY_MESSAGE as bg}from\"@walletconnect/sign-client\";import{isValidObject as Tg,isCaipNamespace as Pa,parseNamespaceKey as de,mergeArrays as $i,parseChainId as Lg,getSdkError as Aa,isValidArray as Ca}from\"@walletconnect/utils\";import{pino as Dg,getDefaultLoggerOptions as Hg}from\"@walletconnect/logger\";import At,{HttpConnection as Ng}from\"@walletconnect/jsonrpc-http-connection\";import{JsonRpcProvider as ot}from\"@walletconnect/jsonrpc-provider\";import $g from\"events\";import{formatJsonRpcResult as Ug}from\"@walletconnect/jsonrpc-utils\";const Ia=\"error\",Wg=\"wss://relay.walletconnect.com\",Fg=\"wc\",Mg=\"universal_provider\",xa=`${Fg}@2:${Mg}:`,qg=\"https://rpc.walletconnect.com/v1/\",Vn={DEFAULT_CHAIN_CHANGED:\"default_chain_changed\"};var ge=typeof globalThis<\"u\"?globalThis:typeof window<\"u\"?window:typeof global<\"u\"?global:typeof self<\"u\"?self:{},Ui={exports:{}};/**\n * @license\n * Lodash <https://lodash.com/>\n * Copyright OpenJS Foundation and other contributors <https://openjsf.org/>\n * Released under MIT license <https://lodash.com/license>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */(function(C,u){(function(){var i,d=\"4.17.21\",P=200,O=\"Unsupported core-js use. Try https://npms.io/search?q=ponyfill.\",$=\"Expected a function\",En=\"Invalid `variable` option passed into `_.template`\",zt=\"__lodash_hash_undefined__\",pr=500,It=\"__lodash_placeholder__\",Ln=1,Fn=2,xt=4,Et=1,ve=2,vn=1,ct=2,qi=4,Dn=8,yt=16,Hn=32,St=64,Mn=128,Kt=256,dr=512,La=30,Da=\"...\",Ha=800,Na=16,Bi=1,$a=2,Ua=3,ht=1/0,kn=9007199254740991,Wa=17976931348623157e292,_e=0/0,Nn=4294967295,Fa=Nn-1,Ma=Nn>>>1,qa=[[\"ary\",Mn],[\"bind\",vn],[\"bindKey\",ct],[\"curry\",Dn],[\"curryRight\",yt],[\"flip\",dr],[\"partial\",Hn],[\"partialRight\",St],[\"rearg\",Kt]],Ot=\"[object Arguments]\",me=\"[object Array]\",Ba=\"[object AsyncFunction]\",Yt=\"[object Boolean]\",Zt=\"[object Date]\",Ga=\"[object DOMException]\",we=\"[object Error]\",Pe=\"[object Function]\",Gi=\"[object GeneratorFunction]\",yn=\"[object Map]\",Jt=\"[object Number]\",za=\"[object Null]\",qn=\"[object Object]\",zi=\"[object Promise]\",Ka=\"[object Proxy]\",Xt=\"[object RegExp]\",Sn=\"[object Set]\",Qt=\"[object String]\",Ae=\"[object Symbol]\",Ya=\"[object Undefined]\",Vt=\"[object WeakMap]\",Za=\"[object WeakSet]\",kt=\"[object ArrayBuffer]\",Rt=\"[object DataView]\",gr=\"[object Float32Array]\",vr=\"[object Float64Array]\",_r=\"[object Int8Array]\",mr=\"[object Int16Array]\",wr=\"[object Int32Array]\",Pr=\"[object Uint8Array]\",Ar=\"[object Uint8ClampedArray]\",Cr=\"[object Uint16Array]\",Ir=\"[object Uint32Array]\",Ja=/\\b__p \\+= '';/g,Xa=/\\b(__p \\+=) '' \\+/g,Qa=/(__e\\(.*?\\)|\\b__t\\)) \\+\\n'';/g,Ki=/&(?:amp|lt|gt|quot|#39);/g,Yi=/[&<>\"']/g,Va=RegExp(Ki.source),ka=RegExp(Yi.source),ja=/<%-([\\s\\S]+?)%>/g,no=/<%([\\s\\S]+?)%>/g,Zi=/<%=([\\s\\S]+?)%>/g,to=/\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\\\]|\\\\.)*?\\1)\\]/,eo=/^\\w*$/,ro=/[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))/g,xr=/[\\\\^$.*+?()[\\]{}|]/g,io=RegExp(xr.source),Er=/^\\s+/,so=/\\s/,uo=/\\{(?:\\n\\/\\* \\[wrapped with .+\\] \\*\\/)?\\n?/,ao=/\\{\\n\\/\\* \\[wrapped with (.+)\\] \\*/,oo=/,? & /,fo=/[^\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\x7f]+/g,co=/[()=,{}\\[\\]\\/\\s]/,ho=/\\\\(\\\\)?/g,lo=/\\$\\{([^\\\\}]*(?:\\\\.[^\\\\}]*)*)\\}/g,Ji=/\\w*$/,po=/^[-+]0x[0-9a-f]+$/i,go=/^0b[01]+$/i,vo=/^\\[object .+?Constructor\\]$/,_o=/^0o[0-7]+$/i,mo=/^(?:0|[1-9]\\d*)$/,wo=/[\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\xff\\u0100-\\u017f]/g,Ce=/($^)/,Po=/['\\n\\r\\u2028\\u2029\\\\]/g,Ie=\"\\\\ud800-\\\\udfff\",Ao=\"\\\\u0300-\\\\u036f\",Co=\"\\\\ufe20-\\\\ufe2f\",Io=\"\\\\u20d0-\\\\u20ff\",Xi=Ao+Co+Io,Qi=\"\\\\u2700-\\\\u27bf\",Vi=\"a-z\\\\xdf-\\\\xf6\\\\xf8-\\\\xff\",xo=\"\\\\xac\\\\xb1\\\\xd7\\\\xf7\",Eo=\"\\\\x00-\\\\x2f\\\\x3a-\\\\x40\\\\x5b-\\\\x60\\\\x7b-\\\\xbf\",yo=\"\\\\u2000-\\\\u206f\",So=\" \\\\t\\\\x0b\\\\f\\\\xa0\\\\ufeff\\\\n\\\\r\\\\u2028\\\\u2029\\\\u1680\\\\u180e\\\\u2000\\\\u2001\\\\u2002\\\\u2003\\\\u2004\\\\u2005\\\\u2006\\\\u2007\\\\u2008\\\\u2009\\\\u200a\\\\u202f\\\\u205f\\\\u3000\",ki=\"A-Z\\\\xc0-\\\\xd6\\\\xd8-\\\\xde\",ji=\"\\\\ufe0e\\\\ufe0f\",ns=xo+Eo+yo+So,yr=\"['\\u2019]\",Oo=\"[\"+Ie+\"]\",ts=\"[\"+ns+\"]\",xe=\"[\"+Xi+\"]\",es=\"\\\\d+\",Ro=\"[\"+Qi+\"]\",rs=\"[\"+Vi+\"]\",is=\"[^\"+Ie+ns+es+Qi+Vi+ki+\"]\",Sr=\"\\\\ud83c[\\\\udffb-\\\\udfff]\",bo=\"(?:\"+xe+\"|\"+Sr+\")\",ss=\"[^\"+Ie+\"]\",Or=\"(?:\\\\ud83c[\\\\udde6-\\\\uddff]){2}\",Rr=\"[\\\\ud800-\\\\udbff][\\\\udc00-\\\\udfff]\",bt=\"[\"+ki+\"]\",us=\"\\\\u200d\",as=\"(?:\"+rs+\"|\"+is+\")\",To=\"(?:\"+bt+\"|\"+is+\")\",os=\"(?:\"+yr+\"(?:d|ll|m|re|s|t|ve))?\",fs=\"(?:\"+yr+\"(?:D|LL|M|RE|S|T|VE))?\",cs=bo+\"?\",hs=\"[\"+ji+\"]?\",Lo=\"(?:\"+us+\"(?:\"+[ss,Or,Rr].join(\"|\")+\")\"+hs+cs+\")*\",Do=\"\\\\d*(?:1st|2nd|3rd|(?![123])\\\\dth)(?=\\\\b|[A-Z_])\",Ho=\"\\\\d*(?:1ST|2ND|3RD|(?![123])\\\\dTH)(?=\\\\b|[a-z_])\",ls=hs+cs+Lo,No=\"(?:\"+[Ro,Or,Rr].join(\"|\")+\")\"+ls,$o=\"(?:\"+[ss+xe+\"?\",xe,Or,Rr,Oo].join(\"|\")+\")\",Uo=RegExp(yr,\"g\"),Wo=RegExp(xe,\"g\"),br=RegExp(Sr+\"(?=\"+Sr+\")|\"+$o+ls,\"g\"),Fo=RegExp([bt+\"?\"+rs+\"+\"+os+\"(?=\"+[ts,bt,\"$\"].join(\"|\")+\")\",To+\"+\"+fs+\"(?=\"+[ts,bt+as,\"$\"].join(\"|\")+\")\",bt+\"?\"+as+\"+\"+os,bt+\"+\"+fs,Ho,Do,es,No].join(\"|\"),\"g\"),Mo=RegExp(\"[\"+us+Ie+Xi+ji+\"]\"),qo=/[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/,Bo=[\"Array\",\"Buffer\",\"DataView\",\"Date\",\"Error\",\"Float32Array\",\"Float64Array\",\"Function\",\"Int8Array\",\"Int16Array\",\"Int32Array\",\"Map\",\"Math\",\"Object\",\"Promise\",\"RegExp\",\"Set\",\"String\",\"Symbol\",\"TypeError\",\"Uint8Array\",\"Uint8ClampedArray\",\"Uint16Array\",\"Uint32Array\",\"WeakMap\",\"_\",\"clearTimeout\",\"isFinite\",\"parseInt\",\"setTimeout\"],Go=-1,B={};B[gr]=B[vr]=B[_r]=B[mr]=B[wr]=B[Pr]=B[Ar]=B[Cr]=B[Ir]=!0,B[Ot]=B[me]=B[kt]=B[Yt]=B[Rt]=B[Zt]=B[we]=B[Pe]=B[yn]=B[Jt]=B[qn]=B[Xt]=B[Sn]=B[Qt]=B[Vt]=!1;var q={};q[Ot]=q[me]=q[kt]=q[Rt]=q[Yt]=q[Zt]=q[gr]=q[vr]=q[_r]=q[mr]=q[wr]=q[yn]=q[Jt]=q[qn]=q[Xt]=q[Sn]=q[Qt]=q[Ae]=q[Pr]=q[Ar]=q[Cr]=q[Ir]=!0,q[we]=q[Pe]=q[Vt]=!1;var zo={\\u00C0:\"A\",\\u00C1:\"A\",\\u00C2:\"A\",\\u00C3:\"A\",\\u00C4:\"A\",\\u00C5:\"A\",\\u00E0:\"a\",\\u00E1:\"a\",\\u00E2:\"a\",\\u00E3:\"a\",\\u00E4:\"a\",\\u00E5:\"a\",\\u00C7:\"C\",\\u00E7:\"c\",\\u00D0:\"D\",\\u00F0:\"d\",\\u00C8:\"E\",\\u00C9:\"E\",\\u00CA:\"E\",\\u00CB:\"E\",\\u00E8:\"e\",\\u00E9:\"e\",\\u00EA:\"e\",\\u00EB:\"e\",\\u00CC:\"I\",\\u00CD:\"I\",\\u00CE:\"I\",\\u00CF:\"I\",\\u00EC:\"i\",\\u00ED:\"i\",\\u00EE:\"i\",\\u00EF:\"i\",\\u00D1:\"N\",\\u00F1:\"n\",\\u00D2:\"O\",\\u00D3:\"O\",\\u00D4:\"O\",\\u00D5:\"O\",\\u00D6:\"O\",\\u00D8:\"O\",\\u00F2:\"o\",\\u00F3:\"o\",\\u00F4:\"o\",\\u00F5:\"o\",\\u00F6:\"o\",\\u00F8:\"o\",\\u00D9:\"U\",\\u00DA:\"U\",\\u00DB:\"U\",\\u00DC:\"U\",\\u00F9:\"u\",\\u00FA:\"u\",\\u00FB:\"u\",\\u00FC:\"u\",\\u00DD:\"Y\",\\u00FD:\"y\",\\u00FF:\"y\",\\u00C6:\"Ae\",\\u00E6:\"ae\",\\u00DE:\"Th\",\\u00FE:\"th\",\\u00DF:\"ss\",\\u0100:\"A\",\\u0102:\"A\",\\u0104:\"A\",\\u0101:\"a\",\\u0103:\"a\",\\u0105:\"a\",\\u0106:\"C\",\\u0108:\"C\",\\u010A:\"C\",\\u010C:\"C\",\\u0107:\"c\",\\u0109:\"c\",\\u010B:\"c\",\\u010D:\"c\",\\u010E:\"D\",\\u0110:\"D\",\\u010F:\"d\",\\u0111:\"d\",\\u0112:\"E\",\\u0114:\"E\",\\u0116:\"E\",\\u0118:\"E\",\\u011A:\"E\",\\u0113:\"e\",\\u0115:\"e\",\\u0117:\"e\",\\u0119:\"e\",\\u011B:\"e\",\\u011C:\"G\",\\u011E:\"G\",\\u0120:\"G\",\\u0122:\"G\",\\u011D:\"g\",\\u011F:\"g\",\\u0121:\"g\",\\u0123:\"g\",\\u0124:\"H\",\\u0126:\"H\",\\u0125:\"h\",\\u0127:\"h\",\\u0128:\"I\",\\u012A:\"I\",\\u012C:\"I\",\\u012E:\"I\",\\u0130:\"I\",\\u0129:\"i\",\\u012B:\"i\",\\u012D:\"i\",\\u012F:\"i\",\\u0131:\"i\",\\u0134:\"J\",\\u0135:\"j\",\\u0136:\"K\",\\u0137:\"k\",\\u0138:\"k\",\\u0139:\"L\",\\u013B:\"L\",\\u013D:\"L\",\\u013F:\"L\",\\u0141:\"L\",\\u013A:\"l\",\\u013C:\"l\",\\u013E:\"l\",\\u0140:\"l\",\\u0142:\"l\",\\u0143:\"N\",\\u0145:\"N\",\\u0147:\"N\",\\u014A:\"N\",\\u0144:\"n\",\\u0146:\"n\",\\u0148:\"n\",\\u014B:\"n\",\\u014C:\"O\",\\u014E:\"O\",\\u0150:\"O\",\\u014D:\"o\",\\u014F:\"o\",\\u0151:\"o\",\\u0154:\"R\",\\u0156:\"R\",\\u0158:\"R\",\\u0155:\"r\",\\u0157:\"r\",\\u0159:\"r\",\\u015A:\"S\",\\u015C:\"S\",\\u015E:\"S\",\\u0160:\"S\",\\u015B:\"s\",\\u015D:\"s\",\\u015F:\"s\",\\u0161:\"s\",\\u0162:\"T\",\\u0164:\"T\",\\u0166:\"T\",\\u0163:\"t\",\\u0165:\"t\",\\u0167:\"t\",\\u0168:\"U\",\\u016A:\"U\",\\u016C:\"U\",\\u016E:\"U\",\\u0170:\"U\",\\u0172:\"U\",\\u0169:\"u\",\\u016B:\"u\",\\u016D:\"u\",\\u016F:\"u\",\\u0171:\"u\",\\u0173:\"u\",\\u0174:\"W\",\\u0175:\"w\",\\u0176:\"Y\",\\u0177:\"y\",\\u0178:\"Y\",\\u0179:\"Z\",\\u017B:\"Z\",\\u017D:\"Z\",\\u017A:\"z\",\\u017C:\"z\",\\u017E:\"z\",\\u0132:\"IJ\",\\u0133:\"ij\",\\u0152:\"Oe\",\\u0153:\"oe\",\\u0149:\"'n\",\\u017F:\"s\"},Ko={\"&\":\"&\",\"<\":\"<\",\">\":\">\",'\"':\""\",\"'\":\"'\"},Yo={\"&\":\"&\",\"<\":\"<\",\">\":\">\",\""\":'\"',\"'\":\"'\"},Zo={\"\\\\\":\"\\\\\",\"'\":\"'\",\"\\n\":\"n\",\"\\r\":\"r\",\"\\u2028\":\"u2028\",\"\\u2029\":\"u2029\"},Jo=parseFloat,Xo=parseInt,ps=typeof ge==\"object\"&&ge&&ge.Object===Object&&ge,Qo=typeof self==\"object\"&&self&&self.Object===Object&&self,k=ps||Qo||Function(\"return this\")(),Tr=u&&!u.nodeType&&u,lt=Tr&&!0&&C&&!C.nodeType&&C,ds=lt&<.exports===Tr,Lr=ds&&ps.process,_n=function(){try{var h=lt&<.require&<.require(\"util\").types;return h||Lr&&Lr.binding&&Lr.binding(\"util\")}catch{}}(),gs=_n&&_n.isArrayBuffer,vs=_n&&_n.isDate,_s=_n&&_n.isMap,ms=_n&&_n.isRegExp,ws=_n&&_n.isSet,Ps=_n&&_n.isTypedArray;function cn(h,g,p){switch(p.length){case 0:return h.call(g);case 1:return h.call(g,p[0]);case 2:return h.call(g,p[0],p[1]);case 3:return h.call(g,p[0],p[1],p[2])}return h.apply(g,p)}function Vo(h,g,p,A){for(var S=-1,U=h==null?0:h.length;++S<U;){var X=h[S];g(A,X,p(X),h)}return A}function mn(h,g){for(var p=-1,A=h==null?0:h.length;++p<A&&g(h[p],p,h)!==!1;);return h}function ko(h,g){for(var p=h==null?0:h.length;p--&&g(h[p],p,h)!==!1;);return h}function As(h,g){for(var p=-1,A=h==null?0:h.length;++p<A;)if(!g(h[p],p,h))return!1;return!0}function jn(h,g){for(var p=-1,A=h==null?0:h.length,S=0,U=[];++p<A;){var X=h[p];g(X,p,h)&&(U[S++]=X)}return U}function Ee(h,g){var p=h==null?0:h.length;return!!p&&Tt(h,g,0)>-1}function Dr(h,g,p){for(var A=-1,S=h==null?0:h.length;++A<S;)if(p(g,h[A]))return!0;return!1}function G(h,g){for(var p=-1,A=h==null?0:h.length,S=Array(A);++p<A;)S[p]=g(h[p],p,h);return S}function nt(h,g){for(var p=-1,A=g.length,S=h.length;++p<A;)h[S+p]=g[p];return h}function Hr(h,g,p,A){var S=-1,U=h==null?0:h.length;for(A&&U&&(p=h[++S]);++S<U;)p=g(p,h[S],S,h);return p}function jo(h,g,p,A){var S=h==null?0:h.length;for(A&&S&&(p=h[--S]);S--;)p=g(p,h[S],S,h);return p}function Nr(h,g){for(var p=-1,A=h==null?0:h.length;++p<A;)if(g(h[p],p,h))return!0;return!1}var nf=$r(\"length\");function tf(h){return h.split(\"\")}function ef(h){return h.match(fo)||[]}function Cs(h,g,p){var A;return p(h,function(S,U,X){if(g(S,U,X))return A=U,!1}),A}function ye(h,g,p,A){for(var S=h.length,U=p+(A?1:-1);A?U--:++U<S;)if(g(h[U],U,h))return U;return-1}function Tt(h,g,p){return g===g?gf(h,g,p):ye(h,Is,p)}function rf(h,g,p,A){for(var S=p-1,U=h.length;++S<U;)if(A(h[S],g))return S;return-1}function Is(h){return h!==h}function xs(h,g){var p=h==null?0:h.length;return p?Wr(h,g)/p:_e}function $r(h){return function(g){return g==null?i:g[h]}}function Ur(h){return function(g){return h==null?i:h[g]}}function Es(h,g,p,A,S){return S(h,function(U,X,M){p=A?(A=!1,U):g(p,U,X,M)}),p}function sf(h,g){var p=h.length;for(h.sort(g);p--;)h[p]=h[p].value;return h}function Wr(h,g){for(var p,A=-1,S=h.length;++A<S;){var U=g(h[A]);U!==i&&(p=p===i?U:p+U)}return p}function Fr(h,g){for(var p=-1,A=Array(h);++p<h;)A[p]=g(p);return A}function uf(h,g){return G(g,function(p){return[p,h[p]]})}function ys(h){return h&&h.slice(0,bs(h)+1).replace(Er,\"\")}function hn(h){return function(g){return h(g)}}function Mr(h,g){return G(g,function(p){return h[p]})}function jt(h,g){return h.has(g)}function Ss(h,g){for(var p=-1,A=h.length;++p<A&&Tt(g,h[p],0)>-1;);return p}function Os(h,g){for(var p=h.length;p--&&Tt(g,h[p],0)>-1;);return p}function af(h,g){for(var p=h.length,A=0;p--;)h[p]===g&&++A;return A}var of=Ur(zo),ff=Ur(Ko);function cf(h){return\"\\\\\"+Zo[h]}function hf(h,g){return h==null?i:h[g]}function Lt(h){return Mo.test(h)}function lf(h){return qo.test(h)}function pf(h){for(var g,p=[];!(g=h.next()).done;)p.push(g.value);return p}function qr(h){var g=-1,p=Array(h.size);return h.forEach(function(A,S){p[++g]=[S,A]}),p}function Rs(h,g){return function(p){return h(g(p))}}function tt(h,g){for(var p=-1,A=h.length,S=0,U=[];++p<A;){var X=h[p];(X===g||X===It)&&(h[p]=It,U[S++]=p)}return U}function Se(h){var g=-1,p=Array(h.size);return h.forEach(function(A){p[++g]=A}),p}function df(h){var g=-1,p=Array(h.size);return h.forEach(function(A){p[++g]=[A,A]}),p}function gf(h,g,p){for(var A=p-1,S=h.length;++A<S;)if(h[A]===g)return A;return-1}function vf(h,g,p){for(var A=p+1;A--;)if(h[A]===g)return A;return A}function Dt(h){return Lt(h)?mf(h):nf(h)}function On(h){return Lt(h)?wf(h):tf(h)}function bs(h){for(var g=h.length;g--&&so.test(h.charAt(g)););return g}var _f=Ur(Yo);function mf(h){for(var g=br.lastIndex=0;br.test(h);)++g;return g}function wf(h){return h.match(br)||[]}function Pf(h){return h.match(Fo)||[]}var Af=function h(g){g=g==null?k:Ht.defaults(k.Object(),g,Ht.pick(k,Bo));var p=g.Array,A=g.Date,S=g.Error,U=g.Function,X=g.Math,M=g.Object,Br=g.RegExp,Cf=g.String,wn=g.TypeError,Oe=p.prototype,If=U.prototype,Nt=M.prototype,Re=g[\"__core-js_shared__\"],be=If.toString,F=Nt.hasOwnProperty,xf=0,Ts=function(){var n=/[^.]+$/.exec(Re&&Re.keys&&Re.keys.IE_PROTO||\"\");return n?\"Symbol(src)_1.\"+n:\"\"}(),Te=Nt.toString,Ef=be.call(M),yf=k._,Sf=Br(\"^\"+be.call(F).replace(xr,\"\\\\$&\").replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g,\"$1.*?\")+\"$\"),Le=ds?g.Buffer:i,et=g.Symbol,De=g.Uint8Array,Ls=Le?Le.allocUnsafe:i,He=Rs(M.getPrototypeOf,M),Ds=M.create,Hs=Nt.propertyIsEnumerable,Ne=Oe.splice,Ns=et?et.isConcatSpreadable:i,ne=et?et.iterator:i,pt=et?et.toStringTag:i,$e=function(){try{var n=mt(M,\"defineProperty\");return n({},\"\",{}),n}catch{}}(),Of=g.clearTimeout!==k.clearTimeout&&g.clearTimeout,Rf=A&&A.now!==k.Date.now&&A.now,bf=g.setTimeout!==k.setTimeout&&g.setTimeout,Ue=X.ceil,We=X.floor,Gr=M.getOwnPropertySymbols,Tf=Le?Le.isBuffer:i,$s=g.isFinite,Lf=Oe.join,Df=Rs(M.keys,M),Q=X.max,nn=X.min,Hf=A.now,Nf=g.parseInt,Us=X.random,$f=Oe.reverse,zr=mt(g,\"DataView\"),te=mt(g,\"Map\"),Kr=mt(g,\"Promise\"),$t=mt(g,\"Set\"),ee=mt(g,\"WeakMap\"),re=mt(M,\"create\"),Fe=ee&&new ee,Ut={},Uf=wt(zr),Wf=wt(te),Ff=wt(Kr),Mf=wt($t),qf=wt(ee),Me=et?et.prototype:i,ie=Me?Me.valueOf:i,Ws=Me?Me.toString:i;function a(n){if(Y(n)&&!R(n)&&!(n instanceof H)){if(n instanceof Pn)return n;if(F.call(n,\"__wrapped__\"))return Fu(n)}return new Pn(n)}var Wt=function(){function n(){}return function(t){if(!K(t))return{};if(Ds)return Ds(t);n.prototype=t;var e=new n;return n.prototype=i,e}}();function qe(){}function Pn(n,t){this.__wrapped__=n,this.__actions__=[],this.__chain__=!!t,this.__index__=0,this.__values__=i}a.templateSettings={escape:ja,evaluate:no,interpolate:Zi,variable:\"\",imports:{_:a}},a.prototype=qe.prototype,a.prototype.constructor=a,Pn.prototype=Wt(qe.prototype),Pn.prototype.constructor=Pn;function H(n){this.__wrapped__=n,this.__actions__=[],this.__dir__=1,this.__filtered__=!1,this.__iteratees__=[],this.__takeCount__=Nn,this.__views__=[]}function Bf(){var n=new H(this.__wrapped__);return n.__actions__=un(this.__actions__),n.__dir__=this.__dir__,n.__filtered__=this.__filtered__,n.__iteratees__=un(this.__iteratees__),n.__takeCount__=this.__takeCount__,n.__views__=un(this.__views__),n}function Gf(){if(this.__filtered__){var n=new H(this);n.__dir__=-1,n.__filtered__=!0}else n=this.clone(),n.__dir__*=-1;return n}function zf(){var n=this.__wrapped__.value(),t=this.__dir__,e=R(n),r=t<0,s=e?n.length:0,o=eh(0,s,this.__views__),f=o.start,c=o.end,l=c-f,v=r?c:f-1,_=this.__iteratees__,m=_.length,w=0,I=nn(l,this.__takeCount__);if(!e||!r&&s==l&&I==l)return ou(n,this.__actions__);var E=[];n:for(;l--&&w<I;){v+=t;for(var T=-1,y=n[v];++T<m;){var D=_[T],N=D.iteratee,dn=D.type,sn=N(y);if(dn==$a)y=sn;else if(!sn){if(dn==Bi)continue n;break n}}E[w++]=y}return E}H.prototype=Wt(qe.prototype),H.prototype.constructor=H;function dt(n){var t=-1,e=n==null?0:n.length;for(this.clear();++t<e;){var r=n[t];this.set(r[0],r[1])}}function Kf(){this.__data__=re?re(null):{},this.size=0}function Yf(n){var t=this.has(n)&&delete this.__data__[n];return this.size-=t?1:0,t}function Zf(n){var t=this.__data__;if(re){var e=t[n];return e===zt?i:e}return F.call(t,n)?t[n]:i}function Jf(n){var t=this.__data__;return re?t[n]!==i:F.call(t,n)}function Xf(n,t){var e=this.__data__;return this.size+=this.has(n)?0:1,e[n]=re&&t===i?zt:t,this}dt.prototype.clear=Kf,dt.prototype.delete=Yf,dt.prototype.get=Zf,dt.prototype.has=Jf,dt.prototype.set=Xf;function Bn(n){var t=-1,e=n==null?0:n.length;for(this.clear();++t<e;){var r=n[t];this.set(r[0],r[1])}}function Qf(){this.__data__=[],this.size=0}function Vf(n){var t=this.__data__,e=Be(t,n);if(e<0)return!1;var r=t.length-1;return e==r?t.pop():Ne.call(t,e,1),--this.size,!0}function kf(n){var t=this.__data__,e=Be(t,n);return e<0?i:t[e][1]}function jf(n){return Be(this.__data__,n)>-1}function nc(n,t){var e=this.__data__,r=Be(e,n);return r<0?(++this.size,e.push([n,t])):e[r][1]=t,this}Bn.prototype.clear=Qf,Bn.prototype.delete=Vf,Bn.prototype.get=kf,Bn.prototype.has=jf,Bn.prototype.set=nc;function Gn(n){var t=-1,e=n==null?0:n.length;for(this.clear();++t<e;){var r=n[t];this.set(r[0],r[1])}}function tc(){this.size=0,this.__data__={hash:new dt,map:new(te||Bn),string:new dt}}function ec(n){var t=nr(this,n).delete(n);return this.size-=t?1:0,t}function rc(n){return nr(this,n).get(n)}function ic(n){return nr(this,n).has(n)}function sc(n,t){var e=nr(this,n),r=e.size;return e.set(n,t),this.size+=e.size==r?0:1,this}Gn.prototype.clear=tc,Gn.prototype.delete=ec,Gn.prototype.get=rc,Gn.prototype.has=ic,Gn.prototype.set=sc;function gt(n){var t=-1,e=n==null?0:n.length;for(this.__data__=new Gn;++t<e;)this.add(n[t])}function uc(n){return this.__data__.set(n,zt),this}function ac(n){return this.__data__.has(n)}gt.prototype.add=gt.prototype.push=uc,gt.prototype.has=ac;function Rn(n){var t=this.__data__=new Bn(n);this.size=t.size}function oc(){this.__data__=new Bn,this.size=0}function fc(n){var t=this.__data__,e=t.delete(n);return this.size=t.size,e}function cc(n){return this.__data__.get(n)}function hc(n){return this.__data__.has(n)}function lc(n,t){var e=this.__data__;if(e instanceof Bn){var r=e.__data__;if(!te||r.length<P-1)return r.push([n,t]),this.size=++e.size,this;e=this.__data__=new Gn(r)}return e.set(n,t),this.size=e.size,this}Rn.prototype.clear=oc,Rn.prototype.delete=fc,Rn.prototype.get=cc,Rn.prototype.has=hc,Rn.prototype.set=lc;function Fs(n,t){var e=R(n),r=!e&&Pt(n),s=!e&&!r&&at(n),o=!e&&!r&&!s&&Bt(n),f=e||r||s||o,c=f?Fr(n.length,Cf):[],l=c.length;for(var v in n)(t||F.call(n,v))&&!(f&&(v==\"length\"||s&&(v==\"offset\"||v==\"parent\")||o&&(v==\"buffer\"||v==\"byteLength\"||v==\"byteOffset\")||Zn(v,l)))&&c.push(v);return c}function Ms(n){var t=n.length;return t?n[ei(0,t-1)]:i}function pc(n,t){return tr(un(n),vt(t,0,n.length))}function dc(n){return tr(un(n))}function Yr(n,t,e){(e!==i&&!bn(n[t],e)||e===i&&!(t in n))&&zn(n,t,e)}function se(n,t,e){var r=n[t];(!(F.call(n,t)&&bn(r,e))||e===i&&!(t in n))&&zn(n,t,e)}function Be(n,t){for(var e=n.length;e--;)if(bn(n[e][0],t))return e;return-1}function gc(n,t,e,r){return rt(n,function(s,o,f){t(r,s,e(s),f)}),r}function qs(n,t){return n&&Un(t,V(t),n)}function vc(n,t){return n&&Un(t,on(t),n)}function zn(n,t,e){t==\"__proto__\"&&$e?$e(n,t,{configurable:!0,enumerable:!0,value:e,writable:!0}):n[t]=e}function Zr(n,t){for(var e=-1,r=t.length,s=p(r),o=n==null;++e<r;)s[e]=o?i:Si(n,t[e]);return s}function vt(n,t,e){return n===n&&(e!==i&&(n=n<=e?n:e),t!==i&&(n=n>=t?n:t)),n}function An(n,t,e,r,s,o){var f,c=t&Ln,l=t&Fn,v=t&xt;if(e&&(f=s?e(n,r,s,o):e(n)),f!==i)return f;if(!K(n))return n;var _=R(n);if(_){if(f=ih(n),!c)return un(n,f)}else{var m=tn(n),w=m==Pe||m==Gi;if(at(n))return hu(n,c);if(m==qn||m==Ot||w&&!s){if(f=l||w?{}:bu(n),!c)return l?Zc(n,vc(f,n)):Yc(n,qs(f,n))}else{if(!q[m])return s?n:{};f=sh(n,m,c)}}o||(o=new Rn);var I=o.get(n);if(I)return I;o.set(n,f),sa(n)?n.forEach(function(y){f.add(An(y,t,e,y,n,o))}):ra(n)&&n.forEach(function(y,D){f.set(D,An(y,t,e,D,n,o))});var E=v?l?pi:li:l?on:V,T=_?i:E(n);return mn(T||n,function(y,D){T&&(D=y,y=n[D]),se(f,D,An(y,t,e,D,n,o))}),f}function _c(n){var t=V(n);return function(e){return Bs(e,n,t)}}function Bs(n,t,e){var r=e.length;if(n==null)return!r;for(n=M(n);r--;){var s=e[r],o=t[s],f=n[s];if(f===i&&!(s in n)||!o(f))return!1}return!0}function Gs(n,t,e){if(typeof n!=\"function\")throw new wn($);return le(function(){n.apply(i,e)},t)}function ue(n,t,e,r){var s=-1,o=Ee,f=!0,c=n.length,l=[],v=t.length;if(!c)return l;e&&(t=G(t,hn(e))),r?(o=Dr,f=!1):t.length>=P&&(o=jt,f=!1,t=new gt(t));n:for(;++s<c;){var _=n[s],m=e==null?_:e(_);if(_=r||_!==0?_:0,f&&m===m){for(var w=v;w--;)if(t[w]===m)continue n;l.push(_)}else o(t,m,r)||l.push(_)}return l}var rt=vu($n),zs=vu(Xr,!0);function mc(n,t){var e=!0;return rt(n,function(r,s,o){return e=!!t(r,s,o),e}),e}function Ge(n,t,e){for(var r=-1,s=n.length;++r<s;){var o=n[r],f=t(o);if(f!=null&&(c===i?f===f&&!pn(f):e(f,c)))var c=f,l=o}return l}function wc(n,t,e,r){var s=n.length;for(e=b(e),e<0&&(e=-e>s?0:s+e),r=r===i||r>s?s:b(r),r<0&&(r+=s),r=e>r?0:aa(r);e<r;)n[e++]=t;return n}function Ks(n,t){var e=[];return rt(n,function(r,s,o){t(r,s,o)&&e.push(r)}),e}function j(n,t,e,r,s){var o=-1,f=n.length;for(e||(e=ah),s||(s=[]);++o<f;){var c=n[o];t>0&&e(c)?t>1?j(c,t-1,e,r,s):nt(s,c):r||(s[s.length]=c)}return s}var Jr=_u(),Ys=_u(!0);function $n(n,t){return n&&Jr(n,t,V)}function Xr(n,t){return n&&Ys(n,t,V)}function ze(n,t){return jn(t,function(e){return Jn(n[e])})}function _t(n,t){t=st(t,n);for(var e=0,r=t.length;n!=null&&e<r;)n=n[Wn(t[e++])];return e&&e==r?n:i}function Zs(n,t,e){var r=t(n);return R(n)?r:nt(r,e(n))}function en(n){return n==null?n===i?Ya:za:pt&&pt in M(n)?th(n):dh(n)}function Qr(n,t){return n>t}function Pc(n,t){return n!=null&&F.call(n,t)}function Ac(n,t){return n!=null&&t in M(n)}function Cc(n,t,e){return n>=nn(t,e)&&n<Q(t,e)}function Vr(n,t,e){for(var r=e?Dr:Ee,s=n[0].length,o=n.length,f=o,c=p(o),l=1/0,v=[];f--;){var _=n[f];f&&t&&(_=G(_,hn(t))),l=nn(_.length,l),c[f]=!e&&(t||s>=120&&_.length>=120)?new gt(f&&_):i}_=n[0];var m=-1,w=c[0];n:for(;++m<s&&v.length<l;){var I=_[m],E=t?t(I):I;if(I=e||I!==0?I:0,!(w?jt(w,E):r(v,E,e))){for(f=o;--f;){var T=c[f];if(!(T?jt(T,E):r(n[f],E,e)))continue n}w&&w.push(E),v.push(I)}}return v}function Ic(n,t,e,r){return $n(n,function(s,o,f){t(r,e(s),o,f)}),r}function ae(n,t,e){t=st(t,n),n=Hu(n,t);var r=n==null?n:n[Wn(In(t))];return r==null?i:cn(r,n,e)}function Js(n){return Y(n)&&en(n)==Ot}function xc(n){return Y(n)&&en(n)==kt}function Ec(n){return Y(n)&&en(n)==Zt}function oe(n,t,e,r,s){return n===t?!0:n==null||t==null||!Y(n)&&!Y(t)?n!==n&&t!==t:yc(n,t,e,r,oe,s)}function yc(n,t,e,r,s,o){var f=R(n),c=R(t),l=f?me:tn(n),v=c?me:tn(t);l=l==Ot?qn:l,v=v==Ot?qn:v;var _=l==qn,m=v==qn,w=l==v;if(w&&at(n)){if(!at(t))return!1;f=!0,_=!1}if(w&&!_)return o||(o=new Rn),f||Bt(n)?Su(n,t,e,r,s,o):jc(n,t,l,e,r,s,o);if(!(e&Et)){var I=_&&F.call(n,\"__wrapped__\"),E=m&&F.call(t,\"__wrapped__\");if(I||E){var T=I?n.value():n,y=E?t.value():t;return o||(o=new Rn),s(T,y,e,r,o)}}return w?(o||(o=new Rn),nh(n,t,e,r,s,o)):!1}function Sc(n){return Y(n)&&tn(n)==yn}function kr(n,t,e,r){var s=e.length,o=s,f=!r;if(n==null)return!o;for(n=M(n);s--;){var c=e[s];if(f&&c[2]?c[1]!==n[c[0]]:!(c[0]in n))return!1}for(;++s<o;){c=e[s];var l=c[0],v=n[l],_=c[1];if(f&&c[2]){if(v===i&&!(l in n))return!1}else{var m=new Rn;if(r)var w=r(v,_,l,n,t,m);if(!(w===i?oe(_,v,Et|ve,r,m):w))return!1}}return!0}function Xs(n){if(!K(n)||fh(n))return!1;var t=Jn(n)?Sf:vo;return t.test(wt(n))}function Oc(n){return Y(n)&&en(n)==Xt}function Rc(n){return Y(n)&&tn(n)==Sn}function bc(n){return Y(n)&&ar(n.length)&&!!B[en(n)]}function Qs(n){return typeof n==\"function\"?n:n==null?fn:typeof n==\"object\"?R(n)?js(n[0],n[1]):ks(n):ma(n)}function jr(n){if(!he(n))return Df(n);var t=[];for(var e in M(n))F.call(n,e)&&e!=\"constructor\"&&t.push(e);return t}function Tc(n){if(!K(n))return ph(n);var t=he(n),e=[];for(var r in n)r==\"constructor\"&&(t||!F.call(n,r))||e.push(r);return e}function ni(n,t){return n<t}function Vs(n,t){var e=-1,r=an(n)?p(n.length):[];return rt(n,function(s,o,f){r[++e]=t(s,o,f)}),r}function ks(n){var t=gi(n);return t.length==1&&t[0][2]?Lu(t[0][0],t[0][1]):function(e){return e===n||kr(e,n,t)}}function js(n,t){return _i(n)&&Tu(t)?Lu(Wn(n),t):function(e){var r=Si(e,n);return r===i&&r===t?Oi(e,n):oe(t,r,Et|ve)}}function Ke(n,t,e,r,s){n!==t&&Jr(t,function(o,f){if(s||(s=new Rn),K(o))Lc(n,t,f,e,Ke,r,s);else{var c=r?r(wi(n,f),o,f+\"\",n,t,s):i;c===i&&(c=o),Yr(n,f,c)}},on)}function Lc(n,t,e,r,s,o,f){var c=wi(n,e),l=wi(t,e),v=f.get(l);if(v){Yr(n,e,v);return}var _=o?o(c,l,e+\"\",n,t,f):i,m=_===i;if(m){var w=R(l),I=!w&&at(l),E=!w&&!I&&Bt(l);_=l,w||I||E?R(c)?_=c:Z(c)?_=un(c):I?(m=!1,_=hu(l,!0)):E?(m=!1,_=lu(l,!0)):_=[]:pe(l)||Pt(l)?(_=c,Pt(c)?_=oa(c):(!K(c)||Jn(c))&&(_=bu(l))):m=!1}m&&(f.set(l,_),s(_,l,r,o,f),f.delete(l)),Yr(n,e,_)}function nu(n,t){var e=n.length;if(e)return t+=t<0?e:0,Zn(t,e)?n[t]:i}function tu(n,t,e){t.length?t=G(t,function(o){return R(o)?function(f){return _t(f,o.length===1?o[0]:o)}:o}):t=[fn];var r=-1;t=G(t,hn(x()));var s=Vs(n,function(o,f,c){var l=G(t,function(v){return v(o)});return{criteria:l,index:++r,value:o}});return sf(s,function(o,f){return Kc(o,f,e)})}function Dc(n,t){return eu(n,t,function(e,r){return Oi(n,r)})}function eu(n,t,e){for(var r=-1,s=t.length,o={};++r<s;){var f=t[r],c=_t(n,f);e(c,f)&&fe(o,st(f,n),c)}return o}function Hc(n){return function(t){return _t(t,n)}}function ti(n,t,e,r){var s=r?rf:Tt,o=-1,f=t.length,c=n;for(n===t&&(t=un(t)),e&&(c=G(n,hn(e)));++o<f;)for(var l=0,v=t[o],_=e?e(v):v;(l=s(c,_,l,r))>-1;)c!==n&&Ne.call(c,l,1),Ne.call(n,l,1);return n}function ru(n,t){for(var e=n?t.length:0,r=e-1;e--;){var s=t[e];if(e==r||s!==o){var o=s;Zn(s)?Ne.call(n,s,1):si(n,s)}}return n}function ei(n,t){return n+We(Us()*(t-n+1))}function Nc(n,t,e,r){for(var s=-1,o=Q(Ue((t-n)/(e||1)),0),f=p(o);o--;)f[r?o:++s]=n,n+=e;return f}function ri(n,t){var e=\"\";if(!n||t<1||t>kn)return e;do t%2&&(e+=n),t=We(t/2),t&&(n+=n);while(t);return e}function L(n,t){return Pi(Du(n,t,fn),n+\"\")}function $c(n){return Ms(Gt(n))}function Uc(n,t){var e=Gt(n);return tr(e,vt(t,0,e.length))}function fe(n,t,e,r){if(!K(n))return n;t=st(t,n);for(var s=-1,o=t.length,f=o-1,c=n;c!=null&&++s<o;){var l=Wn(t[s]),v=e;if(l===\"__proto__\"||l===\"constructor\"||l===\"prototype\")return n;if(s!=f){var _=c[l];v=r?r(_,l,c):i,v===i&&(v=K(_)?_:Zn(t[s+1])?[]:{})}se(c,l,v),c=c[l]}return n}var iu=Fe?function(n,t){return Fe.set(n,t),n}:fn,Wc=$e?function(n,t){return $e(n,\"toString\",{configurable:!0,enumerable:!1,value:bi(t),writable:!0})}:fn;function Fc(n){return tr(Gt(n))}function Cn(n,t,e){var r=-1,s=n.length;t<0&&(t=-t>s?0:s+t),e=e>s?s:e,e<0&&(e+=s),s=t>e?0:e-t>>>0,t>>>=0;for(var o=p(s);++r<s;)o[r]=n[r+t];return o}function Mc(n,t){var e;return rt(n,function(r,s,o){return e=t(r,s,o),!e}),!!e}function Ye(n,t,e){var r=0,s=n==null?r:n.length;if(typeof t==\"number\"&&t===t&&s<=Ma){for(;r<s;){var o=r+s>>>1,f=n[o];f!==null&&!pn(f)&&(e?f<=t:f<t)?r=o+1:s=o}return s}return ii(n,t,fn,e)}function ii(n,t,e,r){var s=0,o=n==null?0:n.length;if(o===0)return 0;t=e(t);for(var f=t!==t,c=t===null,l=pn(t),v=t===i;s<o;){var _=We((s+o)/2),m=e(n[_]),w=m!==i,I=m===null,E=m===m,T=pn(m);if(f)var y=r||E;else v?y=E&&(r||w):c?y=E&&w&&(r||!I):l?y=E&&w&&!I&&(r||!T):I||T?y=!1:y=r?m<=t:m<t;y?s=_+1:o=_}return nn(o,Fa)}function su(n,t){for(var e=-1,r=n.length,s=0,o=[];++e<r;){var f=n[e],c=t?t(f):f;if(!e||!bn(c,l)){var l=c;o[s++]=f===0?0:f}}return o}function uu(n){return typeof n==\"number\"?n:pn(n)?_e:+n}function ln(n){if(typeof n==\"string\")return n;if(R(n))return G(n,ln)+\"\";if(pn(n))return Ws?Ws.call(n):\"\";var t=n+\"\";return t==\"0\"&&1/n==-ht?\"-0\":t}function it(n,t,e){var r=-1,s=Ee,o=n.length,f=!0,c=[],l=c;if(e)f=!1,s=Dr;else if(o>=P){var v=t?null:Vc(n);if(v)return Se(v);f=!1,s=jt,l=new gt}else l=t?[]:c;n:for(;++r<o;){var _=n[r],m=t?t(_):_;if(_=e||_!==0?_:0,f&&m===m){for(var w=l.length;w--;)if(l[w]===m)continue n;t&&l.push(m),c.push(_)}else s(l,m,e)||(l!==c&&l.push(m),c.push(_))}return c}function si(n,t){return t=st(t,n),n=Hu(n,t),n==null||delete n[Wn(In(t))]}function au(n,t,e,r){return fe(n,t,e(_t(n,t)),r)}function Ze(n,t,e,r){for(var s=n.length,o=r?s:-1;(r?o--:++o<s)&&t(n[o],o,n););return e?Cn(n,r?0:o,r?o+1:s):Cn(n,r?o+1:0,r?s:o)}function ou(n,t){var e=n;return e instanceof H&&(e=e.value()),Hr(t,function(r,s){return s.func.apply(s.thisArg,nt([r],s.args))},e)}function ui(n,t,e){var r=n.length;if(r<2)return r?it(n[0]):[];for(var s=-1,o=p(r);++s<r;)for(var f=n[s],c=-1;++c<r;)c!=s&&(o[s]=ue(o[s]||f,n[c],t,e));return it(j(o,1),t,e)}function fu(n,t,e){for(var r=-1,s=n.length,o=t.length,f={};++r<s;){var c=r<o?t[r]:i;e(f,n[r],c)}return f}function ai(n){return Z(n)?n:[]}function oi(n){return typeof n==\"function\"?n:fn}function st(n,t){return R(n)?n:_i(n,t)?[n]:Wu(W(n))}var qc=L;function ut(n,t,e){var r=n.length;return e=e===i?r:e,!t&&e>=r?n:Cn(n,t,e)}var cu=Of||function(n){return k.clearTimeout(n)};function hu(n,t){if(t)return n.slice();var e=n.length,r=Ls?Ls(e):new n.constructor(e);return n.copy(r),r}function fi(n){var t=new n.constructor(n.byteLength);return new De(t).set(new De(n)),t}function Bc(n,t){var e=t?fi(n.buffer):n.buffer;return new n.constructor(e,n.byteOffset,n.byteLength)}function Gc(n){var t=new n.constructor(n.source,Ji.exec(n));return t.lastIndex=n.lastIndex,t}function zc(n){return ie?M(ie.call(n)):{}}function lu(n,t){var e=t?fi(n.buffer):n.buffer;return new n.constructor(e,n.byteOffset,n.length)}function pu(n,t){if(n!==t){var e=n!==i,r=n===null,s=n===n,o=pn(n),f=t!==i,c=t===null,l=t===t,v=pn(t);if(!c&&!v&&!o&&n>t||o&&f&&l&&!c&&!v||r&&f&&l||!e&&l||!s)return 1;if(!r&&!o&&!v&&n<t||v&&e&&s&&!r&&!o||c&&e&&s||!f&&s||!l)return-1}return 0}function Kc(n,t,e){for(var r=-1,s=n.criteria,o=t.criteria,f=s.length,c=e.length;++r<f;){var l=pu(s[r],o[r]);if(l){if(r>=c)return l;var v=e[r];return l*(v==\"desc\"?-1:1)}}return n.index-t.index}function du(n,t,e,r){for(var s=-1,o=n.length,f=e.length,c=-1,l=t.length,v=Q(o-f,0),_=p(l+v),m=!r;++c<l;)_[c]=t[c];for(;++s<f;)(m||s<o)&&(_[e[s]]=n[s]);for(;v--;)_[c++]=n[s++];return _}function gu(n,t,e,r){for(var s=-1,o=n.length,f=-1,c=e.length,l=-1,v=t.length,_=Q(o-c,0),m=p(_+v),w=!r;++s<_;)m[s]=n[s];for(var I=s;++l<v;)m[I+l]=t[l];for(;++f<c;)(w||s<o)&&(m[I+e[f]]=n[s++]);return m}function un(n,t){var e=-1,r=n.length;for(t||(t=p(r));++e<r;)t[e]=n[e];return t}function Un(n,t,e,r){var s=!e;e||(e={});for(var o=-1,f=t.length;++o<f;){var c=t[o],l=r?r(e[c],n[c],c,e,n):i;l===i&&(l=n[c]),s?zn(e,c,l):se(e,c,l)}return e}function Yc(n,t){return Un(n,vi(n),t)}function Zc(n,t){return Un(n,Ou(n),t)}function Je(n,t){return function(e,r){var s=R(e)?Vo:gc,o=t?t():{};return s(e,n,x(r,2),o)}}function Ft(n){return L(function(t,e){var r=-1,s=e.length,o=s>1?e[s-1]:i,f=s>2?e[2]:i;for(o=n.length>3&&typeof o==\"function\"?(s--,o):i,f&&rn(e[0],e[1],f)&&(o=s<3?i:o,s=1),t=M(t);++r<s;){var c=e[r];c&&n(t,c,r,o)}return t})}function vu(n,t){return function(e,r){if(e==null)return e;if(!an(e))return n(e,r);for(var s=e.length,o=t?s:-1,f=M(e);(t?o--:++o<s)&&r(f[o],o,f)!==!1;);return e}}function _u(n){return function(t,e,r){for(var s=-1,o=M(t),f=r(t),c=f.length;c--;){var l=f[n?c:++s];if(e(o[l],l,o)===!1)break}return t}}function Jc(n,t,e){var r=t&vn,s=ce(n);function o(){var f=this&&this!==k&&this instanceof o?s:n;return f.apply(r?e:this,arguments)}return o}function mu(n){return function(t){t=W(t);var e=Lt(t)?On(t):i,r=e?e[0]:t.charAt(0),s=e?ut(e,1).join(\"\"):t.slice(1);return r[n]()+s}}function Mt(n){return function(t){return Hr(va(ga(t).replace(Uo,\"\")),n,\"\")}}function ce(n){return function(){var t=arguments;switch(t.length){case 0:return new n;case 1:return new n(t[0]);case 2:return new n(t[0],t[1]);case 3:return new n(t[0],t[1],t[2]);case 4:return new n(t[0],t[1],t[2],t[3]);case 5:return new n(t[0],t[1],t[2],t[3],t[4]);case 6:return new n(t[0],t[1],t[2],t[3],t[4],t[5]);case 7:return new n(t[0],t[1],t[2],t[3],t[4],t[5],t[6])}var e=Wt(n.prototype),r=n.apply(e,t);return K(r)?r:e}}function Xc(n,t,e){var r=ce(n);function s(){for(var o=arguments.length,f=p(o),c=o,l=qt(s);c--;)f[c]=arguments[c];var v=o<3&&f[0]!==l&&f[o-1]!==l?[]:tt(f,l);if(o-=v.length,o<e)return Iu(n,t,Xe,s.placeholder,i,f,v,i,i,e-o);var _=this&&this!==k&&this instanceof s?r:n;return cn(_,this,f)}return s}function wu(n){return function(t,e,r){var s=M(t);if(!an(t)){var o=x(e,3);t=V(t),e=function(c){return o(s[c],c,s)}}var f=n(t,e,r);return f>-1?s[o?t[f]:f]:i}}function Pu(n){return Yn(function(t){var e=t.length,r=e,s=Pn.prototype.thru;for(n&&t.reverse();r--;){var o=t[r];if(typeof o!=\"function\")throw new wn($);if(s&&!f&&je(o)==\"wrapper\")var f=new Pn([],!0)}for(r=f?r:e;++r<e;){o=t[r];var c=je(o),l=c==\"wrapper\"?di(o):i;l&&mi(l[0])&&l[1]==(Mn|Dn|Hn|Kt)&&!l[4].length&&l[9]==1?f=f[je(l[0])].apply(f,l[3]):f=o.length==1&&mi(o)?f[c]():f.thru(o)}return function(){var v=arguments,_=v[0];if(f&&v.length==1&&R(_))return f.plant(_).value();for(var m=0,w=e?t[m].apply(this,v):_;++m<e;)w=t[m].call(this,w);return w}})}function Xe(n,t,e,r,s,o,f,c,l,v){var _=t&Mn,m=t&vn,w=t&ct,I=t&(Dn|yt),E=t&dr,T=w?i:ce(n);function y(){for(var D=arguments.length,N=p(D),dn=D;dn--;)N[dn]=arguments[dn];if(I)var sn=qt(y),gn=af(N,sn);if(r&&(N=du(N,r,s,I)),o&&(N=gu(N,o,f,I)),D-=gn,I&&D<v){var J=tt(N,sn);return Iu(n,t,Xe,y.placeholder,e,N,J,c,l,v-D)}var Tn=m?e:this,Qn=w?Tn[n]:n;return D=N.length,c?N=gh(N,c):E&&D>1&&N.reverse(),_&&l<D&&(N.length=l),this&&this!==k&&this instanceof y&&(Qn=T||ce(Qn)),Qn.apply(Tn,N)}return y}function Au(n,t){return function(e,r){return Ic(e,n,t(r),{})}}function Qe(n,t){return function(e,r){var s;if(e===i&&r===i)return t;if(e!==i&&(s=e),r!==i){if(s===i)return r;typeof e==\"string\"||typeof r==\"string\"?(e=ln(e),r=ln(r)):(e=uu(e),r=uu(r)),s=n(e,r)}return s}}function ci(n){return Yn(function(t){return t=G(t,hn(x())),L(function(e){var r=this;return n(t,function(s){return cn(s,r,e)})})})}function Ve(n,t){t=t===i?\" \":ln(t);var e=t.length;if(e<2)return e?ri(t,n):t;var r=ri(t,Ue(n/Dt(t)));return Lt(t)?ut(On(r),0,n).join(\"\"):r.slice(0,n)}function Qc(n,t,e,r){var s=t&vn,o=ce(n);function f(){for(var c=-1,l=arguments.length,v=-1,_=r.length,m=p(_+l),w=this&&this!==k&&this instanceof f?o:n;++v<_;)m[v]=r[v];for(;l--;)m[v++]=arguments[++c];return cn(w,s?e:this,m)}return f}function Cu(n){return function(t,e,r){return r&&typeof r!=\"number\"&&rn(t,e,r)&&(e=r=i),t=Xn(t),e===i?(e=t,t=0):e=Xn(e),r=r===i?t<e?1:-1:Xn(r),Nc(t,e,r,n)}}function ke(n){return function(t,e){return typeof t==\"string\"&&typeof e==\"string\"||(t=xn(t),e=xn(e)),n(t,e)}}function Iu(n,t,e,r,s,o,f,c,l,v){var _=t&Dn,m=_?f:i,w=_?i:f,I=_?o:i,E=_?i:o;t|=_?Hn:St,t&=~(_?St:Hn),t&qi||(t&=~(vn|ct));var T=[n,t,s,I,m,E,w,c,l,v],y=e.apply(i,T);return mi(n)&&Nu(y,T),y.placeholder=r,$u(y,n,t)}function hi(n){var t=X[n];return function(e,r){if(e=xn(e),r=r==null?0:nn(b(r),292),r&&$s(e)){var s=(W(e)+\"e\").split(\"e\"),o=t(s[0]+\"e\"+(+s[1]+r));return s=(W(o)+\"e\").split(\"e\"),+(s[0]+\"e\"+(+s[1]-r))}return t(e)}}var Vc=$t&&1/Se(new $t([,-0]))[1]==ht?function(n){return new $t(n)}:Di;function xu(n){return function(t){var e=tn(t);return e==yn?qr(t):e==Sn?df(t):uf(t,n(t))}}function Kn(n,t,e,r,s,o,f,c){var l=t&ct;if(!l&&typeof n!=\"function\")throw new wn($);var v=r?r.length:0;if(v||(t&=~(Hn|St),r=s=i),f=f===i?f:Q(b(f),0),c=c===i?c:b(c),v-=s?s.length:0,t&St){var _=r,m=s;r=s=i}var w=l?i:di(n),I=[n,t,e,r,s,_,m,o,f,c];if(w&&lh(I,w),n=I[0],t=I[1],e=I[2],r=I[3],s=I[4],c=I[9]=I[9]===i?l?0:n.length:Q(I[9]-v,0),!c&&t&(Dn|yt)&&(t&=~(Dn|yt)),!t||t==vn)var E=Jc(n,t,e);else t==Dn||t==yt?E=Xc(n,t,c):(t==Hn||t==(vn|Hn))&&!s.length?E=Qc(n,t,e,r):E=Xe.apply(i,I);var T=w?iu:Nu;return $u(T(E,I),n,t)}function Eu(n,t,e,r){return n===i||bn(n,Nt[e])&&!F.call(r,e)?t:n}function yu(n,t,e,r,s,o){return K(n)&&K(t)&&(o.set(t,n),Ke(n,t,i,yu,o),o.delete(t)),n}function kc(n){return pe(n)?i:n}function Su(n,t,e,r,s,o){var f=e&Et,c=n.length,l=t.length;if(c!=l&&!(f&&l>c))return!1;var v=o.get(n),_=o.get(t);if(v&&_)return v==t&&_==n;var m=-1,w=!0,I=e&ve?new gt:i;for(o.set(n,t),o.set(t,n);++m<c;){var E=n[m],T=t[m];if(r)var y=f?r(T,E,m,t,n,o):r(E,T,m,n,t,o);if(y!==i){if(y)continue;w=!1;break}if(I){if(!Nr(t,function(D,N){if(!jt(I,N)&&(E===D||s(E,D,e,r,o)))return I.push(N)})){w=!1;break}}else if(!(E===T||s(E,T,e,r,o))){w=!1;break}}return o.delete(n),o.delete(t),w}function jc(n,t,e,r,s,o,f){switch(e){case Rt:if(n.byteLength!=t.byteLength||n.byteOffset!=t.byteOffset)return!1;n=n.buffer,t=t.buffer;case kt:return!(n.byteLength!=t.byteLength||!o(new De(n),new De(t)));case Yt:case Zt:case Jt:return bn(+n,+t);case we:return n.name==t.name&&n.message==t.message;case Xt:case Qt:return n==t+\"\";case yn:var c=qr;case Sn:var l=r&Et;if(c||(c=Se),n.size!=t.size&&!l)return!1;var v=f.get(n);if(v)return v==t;r|=ve,f.set(n,t);var _=Su(c(n),c(t),r,s,o,f);return f.delete(n),_;case Ae:if(ie)return ie.call(n)==ie.call(t)}return!1}function nh(n,t,e,r,s,o){var f=e&Et,c=li(n),l=c.length,v=li(t),_=v.length;if(l!=_&&!f)return!1;for(var m=l;m--;){var w=c[m];if(!(f?w in t:F.call(t,w)))return!1}var I=o.get(n),E=o.get(t);if(I&&E)return I==t&&E==n;var T=!0;o.set(n,t),o.set(t,n);for(var y=f;++m<l;){w=c[m];var D=n[w],N=t[w];if(r)var dn=f?r(N,D,w,t,n,o):r(D,N,w,n,t,o);if(!(dn===i?D===N||s(D,N,e,r,o):dn)){T=!1;break}y||(y=w==\"constructor\")}if(T&&!y){var sn=n.constructor,gn=t.constructor;sn!=gn&&\"constructor\"in n&&\"constructor\"in t&&!(typeof sn==\"function\"&&sn instanceof sn&&typeof gn==\"function\"&&gn instanceof gn)&&(T=!1)}return o.delete(n),o.delete(t),T}function Yn(n){return Pi(Du(n,i,Bu),n+\"\")}function li(n){return Zs(n,V,vi)}function pi(n){return Zs(n,on,Ou)}var di=Fe?function(n){return Fe.get(n)}:Di;function je(n){for(var t=n.name+\"\",e=Ut[t],r=F.call(Ut,t)?e.length:0;r--;){var s=e[r],o=s.func;if(o==null||o==n)return s.name}return t}function qt(n){var t=F.call(a,\"placeholder\")?a:n;return t.placeholder}function x(){var n=a.iteratee||Ti;return n=n===Ti?Qs:n,arguments.length?n(arguments[0],arguments[1]):n}function nr(n,t){var e=n.__data__;return oh(t)?e[typeof t==\"string\"?\"string\":\"hash\"]:e.map}function gi(n){for(var t=V(n),e=t.length;e--;){var r=t[e],s=n[r];t[e]=[r,s,Tu(s)]}return t}function mt(n,t){var e=hf(n,t);return Xs(e)?e:i}function th(n){var t=F.call(n,pt),e=n[pt];try{n[pt]=i;var r=!0}catch{}var s=Te.call(n);return r&&(t?n[pt]=e:delete n[pt]),s}var vi=Gr?function(n){return n==null?[]:(n=M(n),jn(Gr(n),function(t){return Hs.call(n,t)}))}:Hi,Ou=Gr?function(n){for(var t=[];n;)nt(t,vi(n)),n=He(n);return t}:Hi,tn=en;(zr&&tn(new zr(new ArrayBuffer(1)))!=Rt||te&&tn(new te)!=yn||Kr&&tn(Kr.resolve())!=zi||$t&&tn(new $t)!=Sn||ee&&tn(new ee)!=Vt)&&(tn=function(n){var t=en(n),e=t==qn?n.constructor:i,r=e?wt(e):\"\";if(r)switch(r){case Uf:return Rt;case Wf:return yn;case Ff:return zi;case Mf:return Sn;case qf:return Vt}return t});function eh(n,t,e){for(var r=-1,s=e.length;++r<s;){var o=e[r],f=o.size;switch(o.type){case\"drop\":n+=f;break;case\"dropRight\":t-=f;break;case\"take\":t=nn(t,n+f);break;case\"takeRight\":n=Q(n,t-f);break}}return{start:n,end:t}}function rh(n){var t=n.match(ao);return t?t[1].split(oo):[]}function Ru(n,t,e){t=st(t,n);for(var r=-1,s=t.length,o=!1;++r<s;){var f=Wn(t[r]);if(!(o=n!=null&&e(n,f)))break;n=n[f]}return o||++r!=s?o:(s=n==null?0:n.length,!!s&&ar(s)&&Zn(f,s)&&(R(n)||Pt(n)))}function ih(n){var t=n.length,e=new n.constructor(t);return t&&typeof n[0]==\"string\"&&F.call(n,\"index\")&&(e.index=n.index,e.input=n.input),e}function bu(n){return typeof n.constructor==\"function\"&&!he(n)?Wt(He(n)):{}}function sh(n,t,e){var r=n.constructor;switch(t){case kt:return fi(n);case Yt:case Zt:return new r(+n);case Rt:return Bc(n,e);case gr:case vr:case _r:case mr:case wr:case Pr:case Ar:case Cr:case Ir:return lu(n,e);case yn:return new r;case Jt:case Qt:return new r(n);case Xt:return Gc(n);case Sn:return new r;case Ae:return zc(n)}}function uh(n,t){var e=t.length;if(!e)return n;var r=e-1;return t[r]=(e>1?\"& \":\"\")+t[r],t=t.join(e>2?\", \":\" \"),n.replace(uo,`{\n/* [wrapped with `+t+`] */\n`)}function ah(n){return R(n)||Pt(n)||!!(Ns&&n&&n[Ns])}function Zn(n,t){var e=typeof n;return t=t??kn,!!t&&(e==\"number\"||e!=\"symbol\"&&mo.test(n))&&n>-1&&n%1==0&&n<t}function rn(n,t,e){if(!K(e))return!1;var r=typeof t;return(r==\"number\"?an(e)&&Zn(t,e.length):r==\"string\"&&t in e)?bn(e[t],n):!1}function _i(n,t){if(R(n))return!1;var e=typeof n;return e==\"number\"||e==\"symbol\"||e==\"boolean\"||n==null||pn(n)?!0:eo.test(n)||!to.test(n)||t!=null&&n in M(t)}function oh(n){var t=typeof n;return t==\"string\"||t==\"number\"||t==\"symbol\"||t==\"boolean\"?n!==\"__proto__\":n===null}function mi(n){var t=je(n),e=a[t];if(typeof e!=\"function\"||!(t in H.prototype))return!1;if(n===e)return!0;var r=di(e);return!!r&&n===r[0]}function fh(n){return!!Ts&&Ts in n}var ch=Re?Jn:Ni;function he(n){var t=n&&n.constructor,e=typeof t==\"function\"&&t.prototype||Nt;return n===e}function Tu(n){return n===n&&!K(n)}function Lu(n,t){return function(e){return e==null?!1:e[n]===t&&(t!==i||n in M(e))}}function hh(n){var t=sr(n,function(r){return e.size===pr&&e.clear(),r}),e=t.cache;return t}function lh(n,t){var e=n[1],r=t[1],s=e|r,o=s<(vn|ct|Mn),f=r==Mn&&e==Dn||r==Mn&&e==Kt&&n[7].length<=t[8]||r==(Mn|Kt)&&t[7].length<=t[8]&&e==Dn;if(!(o||f))return n;r&vn&&(n[2]=t[2],s|=e&vn?0:qi);var c=t[3];if(c){var l=n[3];n[3]=l?du(l,c,t[4]):c,n[4]=l?tt(n[3],It):t[4]}return c=t[5],c&&(l=n[5],n[5]=l?gu(l,c,t[6]):c,n[6]=l?tt(n[5],It):t[6]),c=t[7],c&&(n[7]=c),r&Mn&&(n[8]=n[8]==null?t[8]:nn(n[8],t[8])),n[9]==null&&(n[9]=t[9]),n[0]=t[0],n[1]=s,n}function ph(n){var t=[];if(n!=null)for(var e in M(n))t.push(e);return t}function dh(n){return Te.call(n)}function Du(n,t,e){return t=Q(t===i?n.length-1:t,0),function(){for(var r=arguments,s=-1,o=Q(r.length-t,0),f=p(o);++s<o;)f[s]=r[t+s];s=-1;for(var c=p(t+1);++s<t;)c[s]=r[s];return c[t]=e(f),cn(n,this,c)}}function Hu(n,t){return t.length<2?n:_t(n,Cn(t,0,-1))}function gh(n,t){for(var e=n.length,r=nn(t.length,e),s=un(n);r--;){var o=t[r];n[r]=Zn(o,e)?s[o]:i}return n}function wi(n,t){if(!(t===\"constructor\"&&typeof n[t]==\"function\")&&t!=\"__proto__\")return n[t]}var Nu=Uu(iu),le=bf||function(n,t){return k.setTimeout(n,t)},Pi=Uu(Wc);function $u(n,t,e){var r=t+\"\";return Pi(n,uh(r,vh(rh(r),e)))}function Uu(n){var t=0,e=0;return function(){var r=Hf(),s=Na-(r-e);if(e=r,s>0){if(++t>=Ha)return arguments[0]}else t=0;return n.apply(i,arguments)}}function tr(n,t){var e=-1,r=n.length,s=r-1;for(t=t===i?r:t;++e<t;){var o=ei(e,s),f=n[o];n[o]=n[e],n[e]=f}return n.length=t,n}var Wu=hh(function(n){var t=[];return n.charCodeAt(0)===46&&t.push(\"\"),n.replace(ro,function(e,r,s,o){t.push(s?o.replace(ho,\"$1\"):r||e)}),t});function Wn(n){if(typeof n==\"string\"||pn(n))return n;var t=n+\"\";return t==\"0\"&&1/n==-ht?\"-0\":t}function wt(n){if(n!=null){try{return be.call(n)}catch{}try{return n+\"\"}catch{}}return\"\"}function vh(n,t){return mn(qa,function(e){var r=\"_.\"+e[0];t&e[1]&&!Ee(n,r)&&n.push(r)}),n.sort()}function Fu(n){if(n instanceof H)return n.clone();var t=new Pn(n.__wrapped__,n.__chain__);return t.__actions__=un(n.__actions__),t.__index__=n.__index__,t.__values__=n.__values__,t}function _h(n,t,e){(e?rn(n,t,e):t===i)?t=1:t=Q(b(t),0);var r=n==null?0:n.length;if(!r||t<1)return[];for(var s=0,o=0,f=p(Ue(r/t));s<r;)f[o++]=Cn(n,s,s+=t);return f}function mh(n){for(var t=-1,e=n==null?0:n.length,r=0,s=[];++t<e;){var o=n[t];o&&(s[r++]=o)}return s}function wh(){var n=arguments.length;if(!n)return[];for(var t=p(n-1),e=arguments[0],r=n;r--;)t[r-1]=arguments[r];return nt(R(e)?un(e):[e],j(t,1))}var Ph=L(function(n,t){return Z(n)?ue(n,j(t,1,Z,!0)):[]}),Ah=L(function(n,t){var e=In(t);return Z(e)&&(e=i),Z(n)?ue(n,j(t,1,Z,!0),x(e,2)):[]}),Ch=L(function(n,t){var e=In(t);return Z(e)&&(e=i),Z(n)?ue(n,j(t,1,Z,!0),i,e):[]});function Ih(n,t,e){var r=n==null?0:n.length;return r?(t=e||t===i?1:b(t),Cn(n,t<0?0:t,r)):[]}function xh(n,t,e){var r=n==null?0:n.length;return r?(t=e||t===i?1:b(t),t=r-t,Cn(n,0,t<0?0:t)):[]}function Eh(n,t){return n&&n.length?Ze(n,x(t,3),!0,!0):[]}function yh(n,t){return n&&n.length?Ze(n,x(t,3),!0):[]}function Sh(n,t,e,r){var s=n==null?0:n.length;return s?(e&&typeof e!=\"number\"&&rn(n,t,e)&&(e=0,r=s),wc(n,t,e,r)):[]}function Mu(n,t,e){var r=n==null?0:n.length;if(!r)return-1;var s=e==null?0:b(e);return s<0&&(s=Q(r+s,0)),ye(n,x(t,3),s)}function qu(n,t,e){var r=n==null?0:n.length;if(!r)return-1;var s=r-1;return e!==i&&(s=b(e),s=e<0?Q(r+s,0):nn(s,r-1)),ye(n,x(t,3),s,!0)}function Bu(n){var t=n==null?0:n.length;return t?j(n,1):[]}function Oh(n){var t=n==null?0:n.length;return t?j(n,ht):[]}function Rh(n,t){var e=n==null?0:n.length;return e?(t=t===i?1:b(t),j(n,t)):[]}function bh(n){for(var t=-1,e=n==null?0:n.length,r={};++t<e;){var s=n[t];r[s[0]]=s[1]}return r}function Gu(n){return n&&n.length?n[0]:i}function Th(n,t,e){var r=n==null?0:n.length;if(!r)return-1;var s=e==null?0:b(e);return s<0&&(s=Q(r+s,0)),Tt(n,t,s)}function Lh(n){var t=n==null?0:n.length;return t?Cn(n,0,-1):[]}var Dh=L(function(n){var t=G(n,ai);return t.length&&t[0]===n[0]?Vr(t):[]}),Hh=L(function(n){var t=In(n),e=G(n,ai);return t===In(e)?t=i:e.pop(),e.length&&e[0]===n[0]?Vr(e,x(t,2)):[]}),Nh=L(function(n){var t=In(n),e=G(n,ai);return t=typeof t==\"function\"?t:i,t&&e.pop(),e.length&&e[0]===n[0]?Vr(e,i,t):[]});function $h(n,t){return n==null?\"\":Lf.call(n,t)}function In(n){var t=n==null?0:n.length;return t?n[t-1]:i}function Uh(n,t,e){var r=n==null?0:n.length;if(!r)return-1;var s=r;return e!==i&&(s=b(e),s=s<0?Q(r+s,0):nn(s,r-1)),t===t?vf(n,t,s):ye(n,Is,s,!0)}function Wh(n,t){return n&&n.length?nu(n,b(t)):i}var Fh=L(zu);function zu(n,t){return n&&n.length&&t&&t.length?ti(n,t):n}function Mh(n,t,e){return n&&n.length&&t&&t.length?ti(n,t,x(e,2)):n}function qh(n,t,e){return n&&n.length&&t&&t.length?ti(n,t,i,e):n}var Bh=Yn(function(n,t){var e=n==null?0:n.length,r=Zr(n,t);return ru(n,G(t,function(s){return Zn(s,e)?+s:s}).sort(pu)),r});function Gh(n,t){var e=[];if(!(n&&n.length))return e;var r=-1,s=[],o=n.length;for(t=x(t,3);++r<o;){var f=n[r];t(f,r,n)&&(e.push(f),s.push(r))}return ru(n,s),e}function Ai(n){return n==null?n:$f.call(n)}function zh(n,t,e){var r=n==null?0:n.length;return r?(e&&typeof e!=\"number\"&&rn(n,t,e)?(t=0,e=r):(t=t==null?0:b(t),e=e===i?r:b(e)),Cn(n,t,e)):[]}function Kh(n,t){return Ye(n,t)}function Yh(n,t,e){return ii(n,t,x(e,2))}function Zh(n,t){var e=n==null?0:n.length;if(e){var r=Ye(n,t);if(r<e&&bn(n[r],t))return r}return-1}function Jh(n,t){return Ye(n,t,!0)}function Xh(n,t,e){return ii(n,t,x(e,2),!0)}function Qh(n,t){var e=n==null?0:n.length;if(e){var r=Ye(n,t,!0)-1;if(bn(n[r],t))return r}return-1}function Vh(n){return n&&n.length?su(n):[]}function kh(n,t){return n&&n.length?su(n,x(t,2)):[]}function jh(n){var t=n==null?0:n.length;return t?Cn(n,1,t):[]}function nl(n,t,e){return n&&n.length?(t=e||t===i?1:b(t),Cn(n,0,t<0?0:t)):[]}function tl(n,t,e){var r=n==null?0:n.length;return r?(t=e||t===i?1:b(t),t=r-t,Cn(n,t<0?0:t,r)):[]}function el(n,t){return n&&n.length?Ze(n,x(t,3),!1,!0):[]}function rl(n,t){return n&&n.length?Ze(n,x(t,3)):[]}var il=L(function(n){return it(j(n,1,Z,!0))}),sl=L(function(n){var t=In(n);return Z(t)&&(t=i),it(j(n,1,Z,!0),x(t,2))}),ul=L(function(n){var t=In(n);return t=typeof t==\"function\"?t:i,it(j(n,1,Z,!0),i,t)});function al(n){return n&&n.length?it(n):[]}function ol(n,t){return n&&n.length?it(n,x(t,2)):[]}function fl(n,t){return t=typeof t==\"function\"?t:i,n&&n.length?it(n,i,t):[]}function Ci(n){if(!(n&&n.length))return[];var t=0;return n=jn(n,function(e){if(Z(e))return t=Q(e.length,t),!0}),Fr(t,function(e){return G(n,$r(e))})}function Ku(n,t){if(!(n&&n.length))return[];var e=Ci(n);return t==null?e:G(e,function(r){return cn(t,i,r)})}var cl=L(function(n,t){return Z(n)?ue(n,t):[]}),hl=L(function(n){return ui(jn(n,Z))}),ll=L(function(n){var t=In(n);return Z(t)&&(t=i),ui(jn(n,Z),x(t,2))}),pl=L(function(n){var t=In(n);return t=typeof t==\"function\"?t:i,ui(jn(n,Z),i,t)}),dl=L(Ci);function gl(n,t){return fu(n||[],t||[],se)}function vl(n,t){return fu(n||[],t||[],fe)}var _l=L(function(n){var t=n.length,e=t>1?n[t-1]:i;return e=typeof e==\"function\"?(n.pop(),e):i,Ku(n,e)});function Yu(n){var t=a(n);return t.__chain__=!0,t}function ml(n,t){return t(n),n}function er(n,t){return t(n)}var wl=Yn(function(n){var t=n.length,e=t?n[0]:0,r=this.__wrapped__,s=function(o){return Zr(o,n)};return t>1||this.__actions__.length||!(r instanceof H)||!Zn(e)?this.thru(s):(r=r.slice(e,+e+(t?1:0)),r.__actions__.push({func:er,args:[s],thisArg:i}),new Pn(r,this.__chain__).thru(function(o){return t&&!o.length&&o.push(i),o}))});function Pl(){return Yu(this)}function Al(){return new Pn(this.value(),this.__chain__)}function Cl(){this.__values__===i&&(this.__values__=ua(this.value()));var n=this.__index__>=this.__values__.length,t=n?i:this.__values__[this.__index__++];return{done:n,value:t}}function Il(){return this}function xl(n){for(var t,e=this;e instanceof qe;){var r=Fu(e);r.__index__=0,r.__values__=i,t?s.__wrapped__=r:t=r;var s=r;e=e.__wrapped__}return s.__wrapped__=n,t}function El(){var n=this.__wrapped__;if(n instanceof H){var t=n;return this.__actions__.length&&(t=new H(this)),t=t.reverse(),t.__actions__.push({func:er,args:[Ai],thisArg:i}),new Pn(t,this.__chain__)}return this.thru(Ai)}function yl(){return ou(this.__wrapped__,this.__actions__)}var Sl=Je(function(n,t,e){F.call(n,e)?++n[e]:zn(n,e,1)});function Ol(n,t,e){var r=R(n)?As:mc;return e&&rn(n,t,e)&&(t=i),r(n,x(t,3))}function Rl(n,t){var e=R(n)?jn:Ks;return e(n,x(t,3))}var bl=wu(Mu),Tl=wu(qu);function Ll(n,t){return j(rr(n,t),1)}function Dl(n,t){return j(rr(n,t),ht)}function Hl(n,t,e){return e=e===i?1:b(e),j(rr(n,t),e)}function Zu(n,t){var e=R(n)?mn:rt;return e(n,x(t,3))}function Ju(n,t){var e=R(n)?ko:zs;return e(n,x(t,3))}var Nl=Je(function(n,t,e){F.call(n,e)?n[e].push(t):zn(n,e,[t])});function $l(n,t,e,r){n=an(n)?n:Gt(n),e=e&&!r?b(e):0;var s=n.length;return e<0&&(e=Q(s+e,0)),or(n)?e<=s&&n.indexOf(t,e)>-1:!!s&&Tt(n,t,e)>-1}var Ul=L(function(n,t,e){var r=-1,s=typeof t==\"function\",o=an(n)?p(n.length):[];return rt(n,function(f){o[++r]=s?cn(t,f,e):ae(f,t,e)}),o}),Wl=Je(function(n,t,e){zn(n,e,t)});function rr(n,t){var e=R(n)?G:Vs;return e(n,x(t,3))}function Fl(n,t,e,r){return n==null?[]:(R(t)||(t=t==null?[]:[t]),e=r?i:e,R(e)||(e=e==null?[]:[e]),tu(n,t,e))}var Ml=Je(function(n,t,e){n[e?0:1].push(t)},function(){return[[],[]]});function ql(n,t,e){var r=R(n)?Hr:Es,s=arguments.length<3;return r(n,x(t,4),e,s,rt)}function Bl(n,t,e){var r=R(n)?jo:Es,s=arguments.length<3;return r(n,x(t,4),e,s,zs)}function Gl(n,t){var e=R(n)?jn:Ks;return e(n,ur(x(t,3)))}function zl(n){var t=R(n)?Ms:$c;return t(n)}function Kl(n,t,e){(e?rn(n,t,e):t===i)?t=1:t=b(t);var r=R(n)?pc:Uc;return r(n,t)}function Yl(n){var t=R(n)?dc:Fc;return t(n)}function Zl(n){if(n==null)return 0;if(an(n))return or(n)?Dt(n):n.length;var t=tn(n);return t==yn||t==Sn?n.size:jr(n).length}function Jl(n,t,e){var r=R(n)?Nr:Mc;return e&&rn(n,t,e)&&(t=i),r(n,x(t,3))}var Xl=L(function(n,t){if(n==null)return[];var e=t.length;return e>1&&rn(n,t[0],t[1])?t=[]:e>2&&rn(t[0],t[1],t[2])&&(t=[t[0]]),tu(n,j(t,1),[])}),ir=Rf||function(){return k.Date.now()};function Ql(n,t){if(typeof t!=\"function\")throw new wn($);return n=b(n),function(){if(--n<1)return t.apply(this,arguments)}}function Xu(n,t,e){return t=e?i:t,t=n&&t==null?n.length:t,Kn(n,Mn,i,i,i,i,t)}function Qu(n,t){var e;if(typeof t!=\"function\")throw new wn($);return n=b(n),function(){return--n>0&&(e=t.apply(this,arguments)),n<=1&&(t=i),e}}var Ii=L(function(n,t,e){var r=vn;if(e.length){var s=tt(e,qt(Ii));r|=Hn}return Kn(n,r,t,e,s)}),Vu=L(function(n,t,e){var r=vn|ct;if(e.length){var s=tt(e,qt(Vu));r|=Hn}return Kn(t,r,n,e,s)});function ku(n,t,e){t=e?i:t;var r=Kn(n,Dn,i,i,i,i,i,t);return r.placeholder=ku.placeholder,r}function ju(n,t,e){t=e?i:t;var r=Kn(n,yt,i,i,i,i,i,t);return r.placeholder=ju.placeholder,r}function na(n,t,e){var r,s,o,f,c,l,v=0,_=!1,m=!1,w=!0;if(typeof n!=\"function\")throw new wn($);t=xn(t)||0,K(e)&&(_=!!e.leading,m=\"maxWait\"in e,o=m?Q(xn(e.maxWait)||0,t):o,w=\"trailing\"in e?!!e.trailing:w);function I(J){var Tn=r,Qn=s;return r=s=i,v=J,f=n.apply(Qn,Tn),f}function E(J){return v=J,c=le(D,t),_?I(J):f}function T(J){var Tn=J-l,Qn=J-v,wa=t-Tn;return m?nn(wa,o-Qn):wa}function y(J){var Tn=J-l,Qn=J-v;return l===i||Tn>=t||Tn<0||m&&Qn>=o}function D(){var J=ir();if(y(J))return N(J);c=le(D,T(J))}function N(J){return c=i,w&&r?I(J):(r=s=i,f)}function dn(){c!==i&&cu(c),v=0,r=l=s=c=i}function sn(){return c===i?f:N(ir())}function gn(){var J=ir(),Tn=y(J);if(r=arguments,s=this,l=J,Tn){if(c===i)return E(l);if(m)return cu(c),c=le(D,t),I(l)}return c===i&&(c=le(D,t)),f}return gn.cancel=dn,gn.flush=sn,gn}var Vl=L(function(n,t){return Gs(n,1,t)}),kl=L(function(n,t,e){return Gs(n,xn(t)||0,e)});function jl(n){return Kn(n,dr)}function sr(n,t){if(typeof n!=\"function\"||t!=null&&typeof t!=\"function\")throw new wn($);var e=function(){var r=arguments,s=t?t.apply(this,r):r[0],o=e.cache;if(o.has(s))return o.get(s);var f=n.apply(this,r);return e.cache=o.set(s,f)||o,f};return e.cache=new(sr.Cache||Gn),e}sr.Cache=Gn;function ur(n){if(typeof n!=\"function\")throw new wn($);return function(){var t=arguments;switch(t.length){case 0:return!n.call(this);case 1:return!n.call(this,t[0]);case 2:return!n.call(this,t[0],t[1]);case 3:return!n.call(this,t[0],t[1],t[2])}return!n.apply(this,t)}}function np(n){return Qu(2,n)}var tp=qc(function(n,t){t=t.length==1&&R(t[0])?G(t[0],hn(x())):G(j(t,1),hn(x()));var e=t.length;return L(function(r){for(var s=-1,o=nn(r.length,e);++s<o;)r[s]=t[s].call(this,r[s]);return cn(n,this,r)})}),xi=L(function(n,t){var e=tt(t,qt(xi));return Kn(n,Hn,i,t,e)}),ta=L(function(n,t){var e=tt(t,qt(ta));return Kn(n,St,i,t,e)}),ep=Yn(function(n,t){return Kn(n,Kt,i,i,i,t)});function rp(n,t){if(typeof n!=\"function\")throw new wn($);return t=t===i?t:b(t),L(n,t)}function ip(n,t){if(typeof n!=\"function\")throw new wn($);return t=t==null?0:Q(b(t),0),L(function(e){var r=e[t],s=ut(e,0,t);return r&&nt(s,r),cn(n,this,s)})}function sp(n,t,e){var r=!0,s=!0;if(typeof n!=\"function\")throw new wn($);return K(e)&&(r=\"leading\"in e?!!e.leading:r,s=\"trailing\"in e?!!e.trailing:s),na(n,t,{leading:r,maxWait:t,trailing:s})}function up(n){return Xu(n,1)}function ap(n,t){return xi(oi(t),n)}function op(){if(!arguments.length)return[];var n=arguments[0];return R(n)?n:[n]}function fp(n){return An(n,xt)}function cp(n,t){return t=typeof t==\"function\"?t:i,An(n,xt,t)}function hp(n){return An(n,Ln|xt)}function lp(n,t){return t=typeof t==\"function\"?t:i,An(n,Ln|xt,t)}function pp(n,t){return t==null||Bs(n,t,V(t))}function bn(n,t){return n===t||n!==n&&t!==t}var dp=ke(Qr),gp=ke(function(n,t){return n>=t}),Pt=Js(function(){return arguments}())?Js:function(n){return Y(n)&&F.call(n,\"callee\")&&!Hs.call(n,\"callee\")},R=p.isArray,vp=gs?hn(gs):xc;function an(n){return n!=null&&ar(n.length)&&!Jn(n)}function Z(n){return Y(n)&&an(n)}function _p(n){return n===!0||n===!1||Y(n)&&en(n)==Yt}var at=Tf||Ni,mp=vs?hn(vs):Ec;function wp(n){return Y(n)&&n.nodeType===1&&!pe(n)}function Pp(n){if(n==null)return!0;if(an(n)&&(R(n)||typeof n==\"string\"||typeof n.splice==\"function\"||at(n)||Bt(n)||Pt(n)))return!n.length;var t=tn(n);if(t==yn||t==Sn)return!n.size;if(he(n))return!jr(n).length;for(var e in n)if(F.call(n,e))return!1;return!0}function Ap(n,t){return oe(n,t)}function Cp(n,t,e){e=typeof e==\"function\"?e:i;var r=e?e(n,t):i;return r===i?oe(n,t,i,e):!!r}function Ei(n){if(!Y(n))return!1;var t=en(n);return t==we||t==Ga||typeof n.message==\"string\"&&typeof n.name==\"string\"&&!pe(n)}function Ip(n){return typeof n==\"number\"&&$s(n)}function Jn(n){if(!K(n))return!1;var t=en(n);return t==Pe||t==Gi||t==Ba||t==Ka}function ea(n){return typeof n==\"number\"&&n==b(n)}function ar(n){return typeof n==\"number\"&&n>-1&&n%1==0&&n<=kn}function K(n){var t=typeof n;return n!=null&&(t==\"object\"||t==\"function\")}function Y(n){return n!=null&&typeof n==\"object\"}var ra=_s?hn(_s):Sc;function xp(n,t){return n===t||kr(n,t,gi(t))}function Ep(n,t,e){return e=typeof e==\"function\"?e:i,kr(n,t,gi(t),e)}function yp(n){return ia(n)&&n!=+n}function Sp(n){if(ch(n))throw new S(O);return Xs(n)}function Op(n){return n===null}function Rp(n){return n==null}function ia(n){return typeof n==\"number\"||Y(n)&&en(n)==Jt}function pe(n){if(!Y(n)||en(n)!=qn)return!1;var t=He(n);if(t===null)return!0;var e=F.call(t,\"constructor\")&&t.constructor;return typeof e==\"function\"&&e instanceof e&&be.call(e)==Ef}var yi=ms?hn(ms):Oc;function bp(n){return ea(n)&&n>=-kn&&n<=kn}var sa=ws?hn(ws):Rc;function or(n){return typeof n==\"string\"||!R(n)&&Y(n)&&en(n)==Qt}function pn(n){return typeof n==\"symbol\"||Y(n)&&en(n)==Ae}var Bt=Ps?hn(Ps):bc;function Tp(n){return n===i}function Lp(n){return Y(n)&&tn(n)==Vt}function Dp(n){return Y(n)&&en(n)==Za}var Hp=ke(ni),Np=ke(function(n,t){return n<=t});function ua(n){if(!n)return[];if(an(n))return or(n)?On(n):un(n);if(ne&&n[ne])return pf(n[ne]());var t=tn(n),e=t==yn?qr:t==Sn?Se:Gt;return e(n)}function Xn(n){if(!n)return n===0?n:0;if(n=xn(n),n===ht||n===-ht){var t=n<0?-1:1;return t*Wa}return n===n?n:0}function b(n){var t=Xn(n),e=t%1;return t===t?e?t-e:t:0}function aa(n){return n?vt(b(n),0,Nn):0}function xn(n){if(typeof n==\"number\")return n;if(pn(n))return _e;if(K(n)){var t=typeof n.valueOf==\"function\"?n.valueOf():n;n=K(t)?t+\"\":t}if(typeof n!=\"string\")return n===0?n:+n;n=ys(n);var e=go.test(n);return e||_o.test(n)?Xo(n.slice(2),e?2:8):po.test(n)?_e:+n}function oa(n){return Un(n,on(n))}function $p(n){return n?vt(b(n),-kn,kn):n===0?n:0}function W(n){return n==null?\"\":ln(n)}var Up=Ft(function(n,t){if(he(t)||an(t)){Un(t,V(t),n);return}for(var e in t)F.call(t,e)&&se(n,e,t[e])}),fa=Ft(function(n,t){Un(t,on(t),n)}),fr=Ft(function(n,t,e,r){Un(t,on(t),n,r)}),Wp=Ft(function(n,t,e,r){Un(t,V(t),n,r)}),Fp=Yn(Zr);function Mp(n,t){var e=Wt(n);return t==null?e:qs(e,t)}var qp=L(function(n,t){n=M(n);var e=-1,r=t.length,s=r>2?t[2]:i;for(s&&rn(t[0],t[1],s)&&(r=1);++e<r;)for(var o=t[e],f=on(o),c=-1,l=f.length;++c<l;){var v=f[c],_=n[v];(_===i||bn(_,Nt[v])&&!F.call(n,v))&&(n[v]=o[v])}return n}),Bp=L(function(n){return n.push(i,yu),cn(ca,i,n)});function Gp(n,t){return Cs(n,x(t,3),$n)}function zp(n,t){return Cs(n,x(t,3),Xr)}function Kp(n,t){return n==null?n:Jr(n,x(t,3),on)}function Yp(n,t){return n==null?n:Ys(n,x(t,3),on)}function Zp(n,t){return n&&$n(n,x(t,3))}function Jp(n,t){return n&&Xr(n,x(t,3))}function Xp(n){return n==null?[]:ze(n,V(n))}function Qp(n){return n==null?[]:ze(n,on(n))}function Si(n,t,e){var r=n==null?i:_t(n,t);return r===i?e:r}function Vp(n,t){return n!=null&&Ru(n,t,Pc)}function Oi(n,t){return n!=null&&Ru(n,t,Ac)}var kp=Au(function(n,t,e){t!=null&&typeof t.toString!=\"function\"&&(t=Te.call(t)),n[t]=e},bi(fn)),jp=Au(function(n,t,e){t!=null&&typeof t.toString!=\"function\"&&(t=Te.call(t)),F.call(n,t)?n[t].push(e):n[t]=[e]},x),nd=L(ae);function V(n){return an(n)?Fs(n):jr(n)}function on(n){return an(n)?Fs(n,!0):Tc(n)}function td(n,t){var e={};return t=x(t,3),$n(n,function(r,s,o){zn(e,t(r,s,o),r)}),e}function ed(n,t){var e={};return t=x(t,3),$n(n,function(r,s,o){zn(e,s,t(r,s,o))}),e}var rd=Ft(function(n,t,e){Ke(n,t,e)}),ca=Ft(function(n,t,e,r){Ke(n,t,e,r)}),id=Yn(function(n,t){var e={};if(n==null)return e;var r=!1;t=G(t,function(o){return o=st(o,n),r||(r=o.length>1),o}),Un(n,pi(n),e),r&&(e=An(e,Ln|Fn|xt,kc));for(var s=t.length;s--;)si(e,t[s]);return e});function sd(n,t){return ha(n,ur(x(t)))}var ud=Yn(function(n,t){return n==null?{}:Dc(n,t)});function ha(n,t){if(n==null)return{};var e=G(pi(n),function(r){return[r]});return t=x(t),eu(n,e,function(r,s){return t(r,s[0])})}function ad(n,t,e){t=st(t,n);var r=-1,s=t.length;for(s||(s=1,n=i);++r<s;){var o=n==null?i:n[Wn(t[r])];o===i&&(r=s,o=e),n=Jn(o)?o.call(n):o}return n}function od(n,t,e){return n==null?n:fe(n,t,e)}function fd(n,t,e,r){return r=typeof r==\"function\"?r:i,n==null?n:fe(n,t,e,r)}var la=xu(V),pa=xu(on);function cd(n,t,e){var r=R(n),s=r||at(n)||Bt(n);if(t=x(t,4),e==null){var o=n&&n.constructor;s?e=r?new o:[]:K(n)?e=Jn(o)?Wt(He(n)):{}:e={}}return(s?mn:$n)(n,function(f,c,l){return t(e,f,c,l)}),e}function hd(n,t){return n==null?!0:si(n,t)}function ld(n,t,e){return n==null?n:au(n,t,oi(e))}function pd(n,t,e,r){return r=typeof r==\"function\"?r:i,n==null?n:au(n,t,oi(e),r)}function Gt(n){return n==null?[]:Mr(n,V(n))}function dd(n){return n==null?[]:Mr(n,on(n))}function gd(n,t,e){return e===i&&(e=t,t=i),e!==i&&(e=xn(e),e=e===e?e:0),t!==i&&(t=xn(t),t=t===t?t:0),vt(xn(n),t,e)}function vd(n,t,e){return t=Xn(t),e===i?(e=t,t=0):e=Xn(e),n=xn(n),Cc(n,t,e)}function _d(n,t,e){if(e&&typeof e!=\"boolean\"&&rn(n,t,e)&&(t=e=i),e===i&&(typeof t==\"boolean\"?(e=t,t=i):typeof n==\"boolean\"&&(e=n,n=i)),n===i&&t===i?(n=0,t=1):(n=Xn(n),t===i?(t=n,n=0):t=Xn(t)),n>t){var r=n;n=t,t=r}if(e||n%1||t%1){var s=Us();return nn(n+s*(t-n+Jo(\"1e-\"+((s+\"\").length-1))),t)}return ei(n,t)}var md=Mt(function(n,t,e){return t=t.toLowerCase(),n+(e?da(t):t)});function da(n){return Ri(W(n).toLowerCase())}function ga(n){return n=W(n),n&&n.replace(wo,of).replace(Wo,\"\")}function wd(n,t,e){n=W(n),t=ln(t);var r=n.length;e=e===i?r:vt(b(e),0,r);var s=e;return e-=t.length,e>=0&&n.slice(e,s)==t}function Pd(n){return n=W(n),n&&ka.test(n)?n.replace(Yi,ff):n}function Ad(n){return n=W(n),n&&io.test(n)?n.replace(xr,\"\\\\$&\"):n}var Cd=Mt(function(n,t,e){return n+(e?\"-\":\"\")+t.toLowerCase()}),Id=Mt(function(n,t,e){return n+(e?\" \":\"\")+t.toLowerCase()}),xd=mu(\"toLowerCase\");function Ed(n,t,e){n=W(n),t=b(t);var r=t?Dt(n):0;if(!t||r>=t)return n;var s=(t-r)/2;return Ve(We(s),e)+n+Ve(Ue(s),e)}function yd(n,t,e){n=W(n),t=b(t);var r=t?Dt(n):0;return t&&r<t?n+Ve(t-r,e):n}function Sd(n,t,e){n=W(n),t=b(t);var r=t?Dt(n):0;return t&&r<t?Ve(t-r,e)+n:n}function Od(n,t,e){return e||t==null?t=0:t&&(t=+t),Nf(W(n).replace(Er,\"\"),t||0)}function Rd(n,t,e){return(e?rn(n,t,e):t===i)?t=1:t=b(t),ri(W(n),t)}function bd(){var n=arguments,t=W(n[0]);return n.length<3?t:t.replace(n[1],n[2])}var Td=Mt(function(n,t,e){return n+(e?\"_\":\"\")+t.toLowerCase()});function Ld(n,t,e){return e&&typeof e!=\"number\"&&rn(n,t,e)&&(t=e=i),e=e===i?Nn:e>>>0,e?(n=W(n),n&&(typeof t==\"string\"||t!=null&&!yi(t))&&(t=ln(t),!t&&Lt(n))?ut(On(n),0,e):n.split(t,e)):[]}var Dd=Mt(function(n,t,e){return n+(e?\" \":\"\")+Ri(t)});function Hd(n,t,e){return n=W(n),e=e==null?0:vt(b(e),0,n.length),t=ln(t),n.slice(e,e+t.length)==t}function Nd(n,t,e){var r=a.templateSettings;e&&rn(n,t,e)&&(t=i),n=W(n),t=fr({},t,r,Eu);var s=fr({},t.imports,r.imports,Eu),o=V(s),f=Mr(s,o),c,l,v=0,_=t.interpolate||Ce,m=\"__p += '\",w=Br((t.escape||Ce).source+\"|\"+_.source+\"|\"+(_===Zi?lo:Ce).source+\"|\"+(t.evaluate||Ce).source+\"|$\",\"g\"),I=\"//# sourceURL=\"+(F.call(t,\"sourceURL\")?(t.sourceURL+\"\").replace(/\\s/g,\" \"):\"lodash.templateSources[\"+ ++Go+\"]\")+`\n`;n.replace(w,function(y,D,N,dn,sn,gn){return N||(N=dn),m+=n.slice(v,gn).replace(Po,cf),D&&(c=!0,m+=`' +\n__e(`+D+`) +\n'`),sn&&(l=!0,m+=`';\n`+sn+`;\n__p += '`),N&&(m+=`' +\n((__t = (`+N+`)) == null ? '' : __t) +\n'`),v=gn+y.length,y}),m+=`';\n`;var E=F.call(t,\"variable\")&&t.variable;if(!E)m=`with (obj) {\n`+m+`\n}\n`;else if(co.test(E))throw new S(En);m=(l?m.replace(Ja,\"\"):m).replace(Xa,\"$1\").replace(Qa,\"$1;\"),m=\"function(\"+(E||\"obj\")+`) {\n`+(E?\"\":`obj || (obj = {});\n`)+\"var __t, __p = ''\"+(c?\", __e = _.escape\":\"\")+(l?`, __j = Array.prototype.join;\nfunction print() { __p += __j.call(arguments, '') }\n`:`;\n`)+m+`return __p\n}`;var T=_a(function(){return U(o,I+\"return \"+m).apply(i,f)});if(T.source=m,Ei(T))throw T;return T}function $d(n){return W(n).toLowerCase()}function Ud(n){return W(n).toUpperCase()}function Wd(n,t,e){if(n=W(n),n&&(e||t===i))return ys(n);if(!n||!(t=ln(t)))return n;var r=On(n),s=On(t),o=Ss(r,s),f=Os(r,s)+1;return ut(r,o,f).join(\"\")}function Fd(n,t,e){if(n=W(n),n&&(e||t===i))return n.slice(0,bs(n)+1);if(!n||!(t=ln(t)))return n;var r=On(n),s=Os(r,On(t))+1;return ut(r,0,s).join(\"\")}function Md(n,t,e){if(n=W(n),n&&(e||t===i))return n.replace(Er,\"\");if(!n||!(t=ln(t)))return n;var r=On(n),s=Ss(r,On(t));return ut(r,s).join(\"\")}function qd(n,t){var e=La,r=Da;if(K(t)){var s=\"separator\"in t?t.separator:s;e=\"length\"in t?b(t.length):e,r=\"omission\"in t?ln(t.omission):r}n=W(n);var o=n.length;if(Lt(n)){var f=On(n);o=f.length}if(e>=o)return n;var c=e-Dt(r);if(c<1)return r;var l=f?ut(f,0,c).join(\"\"):n.slice(0,c);if(s===i)return l+r;if(f&&(c+=l.length-c),yi(s)){if(n.slice(c).search(s)){var v,_=l;for(s.global||(s=Br(s.source,W(Ji.exec(s))+\"g\")),s.lastIndex=0;v=s.exec(_);)var m=v.index;l=l.slice(0,m===i?c:m)}}else if(n.indexOf(ln(s),c)!=c){var w=l.lastIndexOf(s);w>-1&&(l=l.slice(0,w))}return l+r}function Bd(n){return n=W(n),n&&Va.test(n)?n.replace(Ki,_f):n}var Gd=Mt(function(n,t,e){return n+(e?\" \":\"\")+t.toUpperCase()}),Ri=mu(\"toUpperCase\");function va(n,t,e){return n=W(n),t=e?i:t,t===i?lf(n)?Pf(n):ef(n):n.match(t)||[]}var _a=L(function(n,t){try{return cn(n,i,t)}catch(e){return Ei(e)?e:new S(e)}}),zd=Yn(function(n,t){return mn(t,function(e){e=Wn(e),zn(n,e,Ii(n[e],n))}),n});function Kd(n){var t=n==null?0:n.length,e=x();return n=t?G(n,function(r){if(typeof r[1]!=\"function\")throw new wn($);return[e(r[0]),r[1]]}):[],L(function(r){for(var s=-1;++s<t;){var o=n[s];if(cn(o[0],this,r))return cn(o[1],this,r)}})}function Yd(n){return _c(An(n,Ln))}function bi(n){return function(){return n}}function Zd(n,t){return n==null||n!==n?t:n}var Jd=Pu(),Xd=Pu(!0);function fn(n){return n}function Ti(n){return Qs(typeof n==\"function\"?n:An(n,Ln))}function Qd(n){return ks(An(n,Ln))}function Vd(n,t){return js(n,An(t,Ln))}var kd=L(function(n,t){return function(e){return ae(e,n,t)}}),jd=L(function(n,t){return function(e){return ae(n,e,t)}});function Li(n,t,e){var r=V(t),s=ze(t,r);e==null&&!(K(t)&&(s.length||!r.length))&&(e=t,t=n,n=this,s=ze(t,V(t)));var o=!(K(e)&&\"chain\"in e)||!!e.chain,f=Jn(n);return mn(s,function(c){var l=t[c];n[c]=l,f&&(n.prototype[c]=function(){var v=this.__chain__;if(o||v){var _=n(this.__wrapped__),m=_.__actions__=un(this.__actions__);return m.push({func:l,args:arguments,thisArg:n}),_.__chain__=v,_}return l.apply(n,nt([this.value()],arguments))})}),n}function ng(){return k._===this&&(k._=yf),this}function Di(){}function tg(n){return n=b(n),L(function(t){return nu(t,n)})}var eg=ci(G),rg=ci(As),ig=ci(Nr);function ma(n){return _i(n)?$r(Wn(n)):Hc(n)}function sg(n){return function(t){return n==null?i:_t(n,t)}}var ug=Cu(),ag=Cu(!0);function Hi(){return[]}function Ni(){return!1}function og(){return{}}function fg(){return\"\"}function cg(){return!0}function hg(n,t){if(n=b(n),n<1||n>kn)return[];var e=Nn,r=nn(n,Nn);t=x(t),n-=Nn;for(var s=Fr(r,t);++e<n;)t(e);return s}function lg(n){return R(n)?G(n,Wn):pn(n)?[n]:un(Wu(W(n)))}function pg(n){var t=++xf;return W(n)+t}var dg=Qe(function(n,t){return n+t},0),gg=hi(\"ceil\"),vg=Qe(function(n,t){return n/t},1),_g=hi(\"floor\");function mg(n){return n&&n.length?Ge(n,fn,Qr):i}function wg(n,t){return n&&n.length?Ge(n,x(t,2),Qr):i}function Pg(n){return xs(n,fn)}function Ag(n,t){return xs(n,x(t,2))}function Cg(n){return n&&n.length?Ge(n,fn,ni):i}function Ig(n,t){return n&&n.length?Ge(n,x(t,2),ni):i}var xg=Qe(function(n,t){return n*t},1),Eg=hi(\"round\"),yg=Qe(function(n,t){return n-t},0);function Sg(n){return n&&n.length?Wr(n,fn):0}function Og(n,t){return n&&n.length?Wr(n,x(t,2)):0}return a.after=Ql,a.ary=Xu,a.assign=Up,a.assignIn=fa,a.assignInWith=fr,a.assignWith=Wp,a.at=Fp,a.before=Qu,a.bind=Ii,a.bindAll=zd,a.bindKey=Vu,a.castArray=op,a.chain=Yu,a.chunk=_h,a.compact=mh,a.concat=wh,a.cond=Kd,a.conforms=Yd,a.constant=bi,a.countBy=Sl,a.create=Mp,a.curry=ku,a.curryRight=ju,a.debounce=na,a.defaults=qp,a.defaultsDeep=Bp,a.defer=Vl,a.delay=kl,a.difference=Ph,a.differenceBy=Ah,a.differenceWith=Ch,a.drop=Ih,a.dropRight=xh,a.dropRightWhile=Eh,a.dropWhile=yh,a.fill=Sh,a.filter=Rl,a.flatMap=Ll,a.flatMapDeep=Dl,a.flatMapDepth=Hl,a.flatten=Bu,a.flattenDeep=Oh,a.flattenDepth=Rh,a.flip=jl,a.flow=Jd,a.flowRight=Xd,a.fromPairs=bh,a.functions=Xp,a.functionsIn=Qp,a.groupBy=Nl,a.initial=Lh,a.intersection=Dh,a.intersectionBy=Hh,a.intersectionWith=Nh,a.invert=kp,a.invertBy=jp,a.invokeMap=Ul,a.iteratee=Ti,a.keyBy=Wl,a.keys=V,a.keysIn=on,a.map=rr,a.mapKeys=td,a.mapValues=ed,a.matches=Qd,a.matchesProperty=Vd,a.memoize=sr,a.merge=rd,a.mergeWith=ca,a.method=kd,a.methodOf=jd,a.mixin=Li,a.negate=ur,a.nthArg=tg,a.omit=id,a.omitBy=sd,a.once=np,a.orderBy=Fl,a.over=eg,a.overArgs=tp,a.overEvery=rg,a.overSome=ig,a.partial=xi,a.partialRight=ta,a.partition=Ml,a.pick=ud,a.pickBy=ha,a.property=ma,a.propertyOf=sg,a.pull=Fh,a.pullAll=zu,a.pullAllBy=Mh,a.pullAllWith=qh,a.pullAt=Bh,a.range=ug,a.rangeRight=ag,a.rearg=ep,a.reject=Gl,a.remove=Gh,a.rest=rp,a.reverse=Ai,a.sampleSize=Kl,a.set=od,a.setWith=fd,a.shuffle=Yl,a.slice=zh,a.sortBy=Xl,a.sortedUniq=Vh,a.sortedUniqBy=kh,a.split=Ld,a.spread=ip,a.tail=jh,a.take=nl,a.takeRight=tl,a.takeRightWhile=el,a.takeWhile=rl,a.tap=ml,a.throttle=sp,a.thru=er,a.toArray=ua,a.toPairs=la,a.toPairsIn=pa,a.toPath=lg,a.toPlainObject=oa,a.transform=cd,a.unary=up,a.union=il,a.unionBy=sl,a.unionWith=ul,a.uniq=al,a.uniqBy=ol,a.uniqWith=fl,a.unset=hd,a.unzip=Ci,a.unzipWith=Ku,a.update=ld,a.updateWith=pd,a.values=Gt,a.valuesIn=dd,a.without=cl,a.words=va,a.wrap=ap,a.xor=hl,a.xorBy=ll,a.xorWith=pl,a.zip=dl,a.zipObject=gl,a.zipObjectDeep=vl,a.zipWith=_l,a.entries=la,a.entriesIn=pa,a.extend=fa,a.extendWith=fr,Li(a,a),a.add=dg,a.attempt=_a,a.camelCase=md,a.capitalize=da,a.ceil=gg,a.clamp=gd,a.clone=fp,a.cloneDeep=hp,a.cloneDeepWith=lp,a.cloneWith=cp,a.conformsTo=pp,a.deburr=ga,a.defaultTo=Zd,a.divide=vg,a.endsWith=wd,a.eq=bn,a.escape=Pd,a.escapeRegExp=Ad,a.every=Ol,a.find=bl,a.findIndex=Mu,a.findKey=Gp,a.findLast=Tl,a.findLastIndex=qu,a.findLastKey=zp,a.floor=_g,a.forEach=Zu,a.forEachRight=Ju,a.forIn=Kp,a.forInRight=Yp,a.forOwn=Zp,a.forOwnRight=Jp,a.get=Si,a.gt=dp,a.gte=gp,a.has=Vp,a.hasIn=Oi,a.head=Gu,a.identity=fn,a.includes=$l,a.indexOf=Th,a.inRange=vd,a.invoke=nd,a.isArguments=Pt,a.isArray=R,a.isArrayBuffer=vp,a.isArrayLike=an,a.isArrayLikeObject=Z,a.isBoolean=_p,a.isBuffer=at,a.isDate=mp,a.isElement=wp,a.isEmpty=Pp,a.isEqual=Ap,a.isEqualWith=Cp,a.isError=Ei,a.isFinite=Ip,a.isFunction=Jn,a.isInteger=ea,a.isLength=ar,a.isMap=ra,a.isMatch=xp,a.isMatchWith=Ep,a.isNaN=yp,a.isNative=Sp,a.isNil=Rp,a.isNull=Op,a.isNumber=ia,a.isObject=K,a.isObjectLike=Y,a.isPlainObject=pe,a.isRegExp=yi,a.isSafeInteger=bp,a.isSet=sa,a.isString=or,a.isSymbol=pn,a.isTypedArray=Bt,a.isUndefined=Tp,a.isWeakMap=Lp,a.isWeakSet=Dp,a.join=$h,a.kebabCase=Cd,a.last=In,a.lastIndexOf=Uh,a.lowerCase=Id,a.lowerFirst=xd,a.lt=Hp,a.lte=Np,a.max=mg,a.maxBy=wg,a.mean=Pg,a.meanBy=Ag,a.min=Cg,a.minBy=Ig,a.stubArray=Hi,a.stubFalse=Ni,a.stubObject=og,a.stubString=fg,a.stubTrue=cg,a.multiply=xg,a.nth=Wh,a.noConflict=ng,a.noop=Di,a.now=ir,a.pad=Ed,a.padEnd=yd,a.padStart=Sd,a.parseInt=Od,a.random=_d,a.reduce=ql,a.reduceRight=Bl,a.repeat=Rd,a.replace=bd,a.result=ad,a.round=Eg,a.runInContext=h,a.sample=zl,a.size=Zl,a.snakeCase=Td,a.some=Jl,a.sortedIndex=Kh,a.sortedIndexBy=Yh,a.sortedIndexOf=Zh,a.sortedLastIndex=Jh,a.sortedLastIndexBy=Xh,a.sortedLastIndexOf=Qh,a.startCase=Dd,a.startsWith=Hd,a.subtract=yg,a.sum=Sg,a.sumBy=Og,a.template=Nd,a.times=hg,a.toFinite=Xn,a.toInteger=b,a.toLength=aa,a.toLower=$d,a.toNumber=xn,a.toSafeInteger=$p,a.toString=W,a.toUpper=Ud,a.trim=Wd,a.trimEnd=Fd,a.trimStart=Md,a.truncate=qd,a.unescape=Bd,a.uniqueId=pg,a.upperCase=Gd,a.upperFirst=Ri,a.each=Zu,a.eachRight=Ju,a.first=Gu,Li(a,function(){var n={};return $n(a,function(t,e){F.call(a.prototype,e)||(n[e]=t)}),n}(),{chain:!1}),a.VERSION=d,mn([\"bind\",\"bindKey\",\"curry\",\"curryRight\",\"partial\",\"partialRight\"],function(n){a[n].placeholder=a}),mn([\"drop\",\"take\"],function(n,t){H.prototype[n]=function(e){e=e===i?1:Q(b(e),0);var r=this.__filtered__&&!t?new H(this):this.clone();return r.__filtered__?r.__takeCount__=nn(e,r.__takeCount__):r.__views__.push({size:nn(e,Nn),type:n+(r.__dir__<0?\"Right\":\"\")}),r},H.prototype[n+\"Right\"]=function(e){return this.reverse()[n](e).reverse()}}),mn([\"filter\",\"map\",\"takeWhile\"],function(n,t){var e=t+1,r=e==Bi||e==Ua;H.prototype[n]=function(s){var o=this.clone();return o.__iteratees__.push({iteratee:x(s,3),type:e}),o.__filtered__=o.__filtered__||r,o}}),mn([\"head\",\"last\"],function(n,t){var e=\"take\"+(t?\"Right\":\"\");H.prototype[n]=function(){return this[e](1).value()[0]}}),mn([\"initial\",\"tail\"],function(n,t){var e=\"drop\"+(t?\"\":\"Right\");H.prototype[n]=function(){return this.__filtered__?new H(this):this[e](1)}}),H.prototype.compact=function(){return this.filter(fn)},H.prototype.find=function(n){return this.filter(n).head()},H.prototype.findLast=function(n){return this.reverse().find(n)},H.prototype.invokeMap=L(function(n,t){return typeof n==\"function\"?new H(this):this.map(function(e){return ae(e,n,t)})}),H.prototype.reject=function(n){return this.filter(ur(x(n)))},H.prototype.slice=function(n,t){n=b(n);var e=this;return e.__filtered__&&(n>0||t<0)?new H(e):(n<0?e=e.takeRight(-n):n&&(e=e.drop(n)),t!==i&&(t=b(t),e=t<0?e.dropRight(-t):e.take(t-n)),e)},H.prototype.takeRightWhile=function(n){return this.reverse().takeWhile(n).reverse()},H.prototype.toArray=function(){return this.take(Nn)},$n(H.prototype,function(n,t){var e=/^(?:filter|find|map|reject)|While$/.test(t),r=/^(?:head|last)$/.test(t),s=a[r?\"take\"+(t==\"last\"?\"Right\":\"\"):t],o=r||/^find/.test(t);s&&(a.prototype[t]=function(){var f=this.__wrapped__,c=r?[1]:arguments,l=f instanceof H,v=c[0],_=l||R(f),m=function(D){var N=s.apply(a,nt([D],c));return r&&w?N[0]:N};_&&e&&typeof v==\"function\"&&v.length!=1&&(l=_=!1);var w=this.__chain__,I=!!this.__actions__.length,E=o&&!w,T=l&&!I;if(!o&&_){f=T?f:new H(this);var y=n.apply(f,c);return y.__actions__.push({func:er,args:[m],thisArg:i}),new Pn(y,w)}return E&&T?n.apply(this,c):(y=this.thru(m),E?r?y.value()[0]:y.value():y)})}),mn([\"pop\",\"push\",\"shift\",\"sort\",\"splice\",\"unshift\"],function(n){var t=Oe[n],e=/^(?:push|sort|unshift)$/.test(n)?\"tap\":\"thru\",r=/^(?:pop|shift)$/.test(n);a.prototype[n]=function(){var s=arguments;if(r&&!this.__chain__){var o=this.value();return t.apply(R(o)?o:[],s)}return this[e](function(f){return t.apply(R(f)?f:[],s)})}}),$n(H.prototype,function(n,t){var e=a[t];if(e){var r=e.name+\"\";F.call(Ut,r)||(Ut[r]=[]),Ut[r].push({name:t,func:e})}}),Ut[Xe(i,ct).name]=[{name:\"wrapper\",func:i}],H.prototype.clone=Bf,H.prototype.reverse=Gf,H.prototype.value=zf,a.prototype.at=wl,a.prototype.chain=Pl,a.prototype.commit=Al,a.prototype.next=Cl,a.prototype.plant=xl,a.prototype.reverse=El,a.prototype.toJSON=a.prototype.valueOf=a.prototype.value=yl,a.prototype.first=a.prototype.head,ne&&(a.prototype[ne]=Il),a},Ht=Af();lt?((lt.exports=Ht)._=Ht,Tr._=Ht):k._=Ht}).call(ge)})(Ui,Ui.exports);var Bg=Object.defineProperty,Gg=Object.defineProperties,zg=Object.getOwnPropertyDescriptors,Ea=Object.getOwnPropertySymbols,Kg=Object.prototype.hasOwnProperty,Yg=Object.prototype.propertyIsEnumerable,ya=(C,u,i)=>u in C?Bg(C,u,{enumerable:!0,configurable:!0,writable:!0,value:i}):C[u]=i,cr=(C,u)=>{for(var i in u||(u={}))Kg.call(u,i)&&ya(C,i,u[i]);if(Ea)for(var i of Ea(u))Yg.call(u,i)&&ya(C,i,u[i]);return C},Zg=(C,u)=>Gg(C,zg(u));function ft(C,u,i){var d;const P=Lg(C);return((d=u.rpcMap)==null?void 0:d[P.reference])||`${qg}?chainId=${P.namespace}:${P.reference}&projectId=${i}`}function Ct(C){return C.includes(\":\")?C.split(\":\")[1]:C}function Sa(C){return C.map(u=>`${u.split(\":\")[0]}:${u.split(\":\")[1]}`)}function Jg(C,u){const i=Object.keys(u.namespaces).filter(P=>P.includes(C));if(!i.length)return[];const d=[];return i.forEach(P=>{const O=u.namespaces[P].accounts;d.push(...O)}),d}function Xg(C={},u={}){const i=Oa(C),d=Oa(u);return Ui.exports.merge(i,d)}function Oa(C){var u,i,d,P;const O={};if(!Tg(C))return O;for(const[$,En]of Object.entries(C)){const zt=Pa($)?[$]:En.chains,pr=En.methods||[],It=En.events||[],Ln=En.rpcMap||{},Fn=de($);O[Fn]=Zg(cr(cr({},O[Fn]),En),{chains:$i(zt,(u=O[Fn])==null?void 0:u.chains),methods:$i(pr,(i=O[Fn])==null?void 0:i.methods),events:$i(It,(d=O[Fn])==null?void 0:d.events),rpcMap:cr(cr({},Ln),(P=O[Fn])==null?void 0:P.rpcMap)})}return O}function Qg(C){return C.includes(\":\")?C.split(\":\")[2]:C}function Vg(C){const u={};for(const[i,d]of Object.entries(C)){const P=d.methods||[],O=d.events||[],$=d.accounts||[],En=Pa(i)?[i]:d.chains?d.chains:Sa(d.accounts);u[i]={chains:En,methods:P,events:O,accounts:$}}return u}function Wi(C){return typeof C==\"number\"?C:C.includes(\"0x\")?parseInt(C,16):C.includes(\":\")?Number(C.split(\":\")[1]):Number(C)}const Ra={},z=C=>Ra[C],Fi=(C,u)=>{Ra[C]=u};class kg{constructor(u){this.name=\"polkadot\",this.namespace=u.namespace,this.events=z(\"events\"),this.client=z(\"client\"),this.chainId=this.getDefaultChain(),this.httpProviders=this.createHttpProviders()}updateNamespace(u){this.namespace=Object.assign(this.namespace,u)}requestAccounts(){return this.getAccounts()}getDefaultChain(){if(this.chainId)return this.chainId;if(this.namespace.defaultChain)return this.namespace.defaultChain;const u=this.namespace.chains[0];if(!u)throw new Error(\"ChainId not found\");return u.split(\":\")[1]}request(u){return this.namespace.methods.includes(u.request.method)?this.client.request(u):this.getHttpProvider().request(u.request)}setDefaultChain(u,i){this.httpProviders[u]||this.setHttpProvider(u,i),this.chainId=u,this.events.emit(Vn.DEFAULT_CHAIN_CHANGED,`${this.name}:${u}`)}getAccounts(){const u=this.namespace.accounts;return u?u.filter(i=>i.split(\":\")[1]===this.chainId.toString()).map(i=>i.split(\":\")[2])||[]:[]}createHttpProviders(){const u={};return this.namespace.chains.forEach(i=>{var d;const P=Ct(i);u[P]=this.createHttpProvider(P,(d=this.namespace.rpcMap)==null?void 0:d[i])}),u}getHttpProvider(){const u=`${this.name}:${this.chainId}`,i=this.httpProviders[u];if(typeof i>\"u\")throw new Error(`JSON-RPC provider for ${u} not found`);return i}setHttpProvider(u,i){const d=this.createHttpProvider(u,i);d&&(this.httpProviders[u]=d)}createHttpProvider(u,i){const d=i||ft(u,this.namespace,this.client.core.projectId);if(!d)throw new Error(`No RPC url provided for chainId: ${u}`);return new ot(new At(d,z(\"disableProviderPing\")))}}class jg{constructor(u){this.name=\"eip155\",this.namespace=u.namespace,this.events=z(\"events\"),this.client=z(\"client\"),this.httpProviders=this.createHttpProviders(),this.chainId=parseInt(this.getDefaultChain())}async request(u){switch(u.request.method){case\"eth_requestAccounts\":return this.getAccounts();case\"eth_accounts\":return this.getAccounts();case\"wallet_switchEthereumChain\":return await this.handleSwitchChain(u);case\"eth_chainId\":return parseInt(this.getDefaultChain())}return this.namespace.methods.includes(u.request.method)?await this.client.request(u):this.getHttpProvider().request(u.request)}updateNamespace(u){this.namespace=Object.assign(this.namespace,u)}setDefaultChain(u,i){this.httpProviders[u]||this.setHttpProvider(parseInt(u),i),this.chainId=parseInt(u),this.events.emit(Vn.DEFAULT_CHAIN_CHANGED,`${this.name}:${u}`)}requestAccounts(){return this.getAccounts()}getDefaultChain(){if(this.chainId)return this.chainId.toString();if(this.namespace.defaultChain)return this.namespace.defaultChain;const u=this.namespace.chains[0];if(!u)throw new Error(\"ChainId not found\");return u.split(\":\")[1]}createHttpProvider(u,i){const d=i||ft(`${this.name}:${u}`,this.namespace,this.client.core.projectId);if(!d)throw new Error(`No RPC url provided for chainId: ${u}`);return new ot(new Ng(d,z(\"disableProviderPing\")))}setHttpProvider(u,i){const d=this.createHttpProvider(u,i);d&&(this.httpProviders[u]=d)}createHttpProviders(){const u={};return this.namespace.chains.forEach(i=>{var d;const P=parseInt(Ct(i));u[P]=this.createHttpProvider(P,(d=this.namespace.rpcMap)==null?void 0:d[i])}),u}getAccounts(){const u=this.namespace.accounts;return u?[...new Set(u.filter(i=>i.split(\":\")[1]===this.chainId.toString()).map(i=>i.split(\":\")[2]))]:[]}getHttpProvider(){const u=this.chainId,i=this.httpProviders[u];if(typeof i>\"u\")throw new Error(`JSON-RPC provider for ${u} not found`);return i}async handleSwitchChain(u){var i,d;let P=u.request.params?(i=u.request.params[0])==null?void 0:i.chainId:\"0x0\";P=P.startsWith(\"0x\")?P:`0x${P}`;const O=parseInt(P,16);if(this.isChainApproved(O))this.setDefaultChain(`${O}`);else if(this.namespace.methods.includes(\"wallet_switchEthereumChain\"))await this.client.request({topic:u.topic,request:{method:u.request.method,params:[{chainId:P}]},chainId:(d=this.namespace.chains)==null?void 0:d[0]}),this.setDefaultChain(`${O}`);else throw new Error(`Failed to switch to chain 'eip155:${O}'. The chain is not approved or the wallet does not support 'wallet_switchEthereumChain' method.`);return null}isChainApproved(u){return this.namespace.chains.includes(`${this.name}:${u}`)}}class nv{constructor(u){this.name=\"solana\",this.namespace=u.namespace,this.events=z(\"events\"),this.client=z(\"client\"),this.chainId=this.getDefaultChain(),this.httpProviders=this.createHttpProviders()}updateNamespace(u){this.namespace=Object.assign(this.namespace,u)}requestAccounts(){return this.getAccounts()}request(u){return this.namespace.methods.includes(u.request.method)?this.client.request(u):this.getHttpProvider().request(u.request)}setDefaultChain(u,i){this.httpProviders[u]||this.setHttpProvider(u,i),this.chainId=u,this.events.emit(Vn.DEFAULT_CHAIN_CHANGED,`${this.name}:${u}`)}getDefaultChain(){if(this.chainId)return this.chainId;if(this.namespace.defaultChain)return this.namespace.defaultChain;const u=this.namespace.chains[0];if(!u)throw new Error(\"ChainId not found\");return u.split(\":\")[1]}getAccounts(){const u=this.namespace.accounts;return u?[...new Set(u.filter(i=>i.split(\":\")[1]===this.chainId.toString()).map(i=>i.split(\":\")[2]))]:[]}createHttpProviders(){const u={};return this.namespace.chains.forEach(i=>{var d;const P=Ct(i);u[P]=this.createHttpProvider(P,(d=this.namespace.rpcMap)==null?void 0:d[i])}),u}getHttpProvider(){const u=`${this.name}:${this.chainId}`,i=this.httpProviders[u];if(typeof i>\"u\")throw new Error(`JSON-RPC provider for ${u} not found`);return i}setHttpProvider(u,i){const d=this.createHttpProvider(u,i);d&&(this.httpProviders[u]=d)}createHttpProvider(u,i){const d=i||ft(u,this.namespace,this.client.core.projectId);if(!d)throw new Error(`No RPC url provided for chainId: ${u}`);return new ot(new At(d,z(\"disableProviderPing\")))}}class tv{constructor(u){this.name=\"cosmos\",this.namespace=u.namespace,this.events=z(\"events\"),this.client=z(\"client\"),this.chainId=this.getDefaultChain(),this.httpProviders=this.createHttpProviders()}updateNamespace(u){this.namespace=Object.assign(this.namespace,u)}requestAccounts(){return this.getAccounts()}getDefaultChain(){if(this.chainId)return this.chainId;if(this.namespace.defaultChain)return this.namespace.defaultChain;const u=this.namespace.chains[0];if(!u)throw new Error(\"ChainId not found\");return u.split(\":\")[1]}request(u){return this.namespace.methods.includes(u.request.method)?this.client.request(u):this.getHttpProvider().request(u.request)}setDefaultChain(u,i){this.httpProviders[u]||this.setHttpProvider(u,i),this.chainId=u,this.events.emit(Vn.DEFAULT_CHAIN_CHANGED,`${this.name}:${this.chainId}`)}getAccounts(){const u=this.namespace.accounts;return u?[...new Set(u.filter(i=>i.split(\":\")[1]===this.chainId.toString()).map(i=>i.split(\":\")[2]))]:[]}createHttpProviders(){const u={};return this.namespace.chains.forEach(i=>{var d;const P=Ct(i);u[P]=this.createHttpProvider(P,(d=this.namespace.rpcMap)==null?void 0:d[i])}),u}getHttpProvider(){const u=`${this.name}:${this.chainId}`,i=this.httpProviders[u];if(typeof i>\"u\")throw new Error(`JSON-RPC provider for ${u} not found`);return i}setHttpProvider(u,i){const d=this.createHttpProvider(u,i);d&&(this.httpProviders[u]=d)}createHttpProvider(u,i){const d=i||ft(u,this.namespace,this.client.core.projectId);if(!d)throw new Error(`No RPC url provided for chainId: ${u}`);return new ot(new At(d,z(\"disableProviderPing\")))}}class ev{constructor(u){this.name=\"cip34\",this.namespace=u.namespace,this.events=z(\"events\"),this.client=z(\"client\"),this.chainId=this.getDefaultChain(),this.httpProviders=this.createHttpProviders()}updateNamespace(u){this.namespace=Object.assign(this.namespace,u)}requestAccounts(){return this.getAccounts()}getDefaultChain(){if(this.chainId)return this.chainId;if(this.namespace.defaultChain)return this.namespace.defaultChain;const u=this.namespace.chains[0];if(!u)throw new Error(\"ChainId not found\");return u.split(\":\")[1]}request(u){return this.namespace.methods.includes(u.request.method)?this.client.request(u):this.getHttpProvider().request(u.request)}setDefaultChain(u,i){this.httpProviders[u]||this.setHttpProvider(u,i),this.chainId=u,this.events.emit(Vn.DEFAULT_CHAIN_CHANGED,`${this.name}:${this.chainId}`)}getAccounts(){const u=this.namespace.accounts;return u?[...new Set(u.filter(i=>i.split(\":\")[1]===this.chainId.toString()).map(i=>i.split(\":\")[2]))]:[]}createHttpProviders(){const u={};return this.namespace.chains.forEach(i=>{const d=this.getCardanoRPCUrl(i),P=Ct(i);u[P]=this.createHttpProvider(P,d)}),u}getHttpProvider(){const u=`${this.name}:${this.chainId}`,i=this.httpProviders[u];if(typeof i>\"u\")throw new Error(`JSON-RPC provider for ${u} not found`);return i}getCardanoRPCUrl(u){const i=this.namespace.rpcMap;if(i)return i[u]}setHttpProvider(u,i){const d=this.createHttpProvider(u,i);d&&(this.httpProviders[u]=d)}createHttpProvider(u,i){const d=i||this.getCardanoRPCUrl(u);if(!d)throw new Error(`No RPC url provided for chainId: ${u}`);return new ot(new At(d,z(\"disableProviderPing\")))}}class rv{constructor(u){this.name=\"elrond\",this.namespace=u.namespace,this.events=z(\"events\"),this.client=z(\"client\"),this.chainId=this.getDefaultChain(),this.httpProviders=this.createHttpProviders()}updateNamespace(u){this.namespace=Object.assign(this.namespace,u)}requestAccounts(){return this.getAccounts()}request(u){return this.namespace.methods.includes(u.request.method)?this.client.request(u):this.getHttpProvider().request(u.request)}setDefaultChain(u,i){this.httpProviders[u]||this.setHttpProvider(u,i),this.chainId=u,this.events.emit(Vn.DEFAULT_CHAIN_CHANGED,`${this.name}:${u}`)}getDefaultChain(){if(this.chainId)return this.chainId;if(this.namespace.defaultChain)return this.namespace.defaultChain;const u=this.namespace.chains[0];if(!u)throw new Error(\"ChainId not found\");return u.split(\":\")[1]}getAccounts(){const u=this.namespace.accounts;return u?[...new Set(u.filter(i=>i.split(\":\")[1]===this.chainId.toString()).map(i=>i.split(\":\")[2]))]:[]}createHttpProviders(){const u={};return this.namespace.chains.forEach(i=>{var d;const P=Ct(i);u[P]=this.createHttpProvider(P,(d=this.namespace.rpcMap)==null?void 0:d[i])}),u}getHttpProvider(){const u=`${this.name}:${this.chainId}`,i=this.httpProviders[u];if(typeof i>\"u\")throw new Error(`JSON-RPC provider for ${u} not found`);return i}setHttpProvider(u,i){const d=this.createHttpProvider(u,i);d&&(this.httpProviders[u]=d)}createHttpProvider(u,i){const d=i||ft(u,this.namespace,this.client.core.projectId);if(!d)throw new Error(`No RPC url provided for chainId: ${u}`);return new ot(new At(d,z(\"disableProviderPing\")))}}class iv{constructor(u){this.name=\"multiversx\",this.namespace=u.namespace,this.events=z(\"events\"),this.client=z(\"client\"),this.chainId=this.getDefaultChain(),this.httpProviders=this.createHttpProviders()}updateNamespace(u){this.namespace=Object.assign(this.namespace,u)}requestAccounts(){return this.getAccounts()}request(u){return this.namespace.methods.includes(u.request.method)?this.client.request(u):this.getHttpProvider().request(u.request)}setDefaultChain(u,i){this.httpProviders[u]||this.setHttpProvider(u,i),this.chainId=u,this.events.emit(Vn.DEFAULT_CHAIN_CHANGED,`${this.name}:${u}`)}getDefaultChain(){if(this.chainId)return this.chainId;if(this.namespace.defaultChain)return this.namespace.defaultChain;const u=this.namespace.chains[0];if(!u)throw new Error(\"ChainId not found\");return u.split(\":\")[1]}getAccounts(){const u=this.namespace.accounts;return u?[...new Set(u.filter(i=>i.split(\":\")[1]===this.chainId.toString()).map(i=>i.split(\":\")[2]))]:[]}createHttpProviders(){const u={};return this.namespace.chains.forEach(i=>{var d;const P=Ct(i);u[P]=this.createHttpProvider(P,(d=this.namespace.rpcMap)==null?void 0:d[i])}),u}getHttpProvider(){const u=`${this.name}:${this.chainId}`,i=this.httpProviders[u];if(typeof i>\"u\")throw new Error(`JSON-RPC provider for ${u} not found`);return i}setHttpProvider(u,i){const d=this.createHttpProvider(u,i);d&&(this.httpProviders[u]=d)}createHttpProvider(u,i){const d=i||ft(u,this.namespace,this.client.core.projectId);if(!d)throw new Error(`No RPC url provided for chainId: ${u}`);return new ot(new At(d,z(\"disableProviderPing\")))}}class sv{constructor(u){this.name=\"near\",this.namespace=u.namespace,this.events=z(\"events\"),this.client=z(\"client\"),this.chainId=this.getDefaultChain(),this.httpProviders=this.createHttpProviders()}updateNamespace(u){this.namespace=Object.assign(this.namespace,u)}requestAccounts(){return this.getAccounts()}getDefaultChain(){if(this.chainId)return this.chainId;if(this.namespace.defaultChain)return this.namespace.defaultChain;const u=this.namespace.chains[0];if(!u)throw new Error(\"ChainId not found\");return u.split(\":\")[1]}request(u){return this.namespace.methods.includes(u.request.method)?this.client.request(u):this.getHttpProvider().request(u.request)}setDefaultChain(u,i){if(this.chainId=u,!this.httpProviders[u]){const d=i||ft(`${this.name}:${u}`,this.namespace);if(!d)throw new Error(`No RPC url provided for chainId: ${u}`);this.setHttpProvider(u,d)}this.events.emit(Vn.DEFAULT_CHAIN_CHANGED,`${this.name}:${this.chainId}`)}getAccounts(){const u=this.namespace.accounts;return u?u.filter(i=>i.split(\":\")[1]===this.chainId.toString()).map(i=>i.split(\":\")[2])||[]:[]}createHttpProviders(){const u={};return this.namespace.chains.forEach(i=>{var d;u[i]=this.createHttpProvider(i,(d=this.namespace.rpcMap)==null?void 0:d[i])}),u}getHttpProvider(){const u=`${this.name}:${this.chainId}`,i=this.httpProviders[u];if(typeof i>\"u\")throw new Error(`JSON-RPC provider for ${u} not found`);return i}setHttpProvider(u,i){const d=this.createHttpProvider(u,i);d&&(this.httpProviders[u]=d)}createHttpProvider(u,i){const d=i||ft(u,this.namespace);return typeof d>\"u\"?void 0:new ot(new At(d,z(\"disableProviderPing\")))}}var uv=Object.defineProperty,av=Object.defineProperties,ov=Object.getOwnPropertyDescriptors,ba=Object.getOwnPropertySymbols,fv=Object.prototype.hasOwnProperty,cv=Object.prototype.propertyIsEnumerable,Ta=(C,u,i)=>u in C?uv(C,u,{enumerable:!0,configurable:!0,writable:!0,value:i}):C[u]=i,hr=(C,u)=>{for(var i in u||(u={}))fv.call(u,i)&&Ta(C,i,u[i]);if(ba)for(var i of ba(u))cv.call(u,i)&&Ta(C,i,u[i]);return C},Mi=(C,u)=>av(C,ov(u));class lr{constructor(u){this.events=new $g,this.rpcProviders={},this.shouldAbortPairingAttempt=!1,this.maxPairingAttempts=10,this.disableProviderPing=!1,this.providerOpts=u,this.logger=typeof u?.logger<\"u\"&&typeof u?.logger!=\"string\"?u.logger:Dg(Hg({level:u?.logger||Ia})),this.disableProviderPing=u?.disableProviderPing||!1}static async init(u){const i=new lr(u);return await i.initialize(),i}async request(u,i){const[d,P]=this.validateChain(i);if(!this.session)throw new Error(\"Please call connect() before request()\");return await this.getProvider(d).request({request:hr({},u),chainId:`${d}:${P}`,topic:this.session.topic})}sendAsync(u,i,d){const P=new Date().getTime();this.request(u,d).then(O=>i(null,Ug(P,O))).catch(O=>i(O,void 0))}async enable(){if(!this.client)throw new Error(\"Sign Client not initialized\");return this.session||await this.connect({namespaces:this.namespaces,optionalNamespaces:this.optionalNamespaces,sessionProperties:this.sessionProperties}),await this.requestAccounts()}async disconnect(){var u;if(!this.session)throw new Error(\"Please call connect() before enable()\");await this.client.disconnect({topic:(u=this.session)==null?void 0:u.topic,reason:Aa(\"USER_DISCONNECTED\")}),await this.cleanup()}async connect(u){if(!this.client)throw new Error(\"Sign Client not initialized\");if(this.setNamespaces(u),await this.cleanupPendingPairings(),!u.skipPairing)return await this.pair(u.pairingTopic)}on(u,i){this.events.on(u,i)}once(u,i){this.events.once(u,i)}removeListener(u,i){this.events.removeListener(u,i)}off(u,i){this.events.off(u,i)}get isWalletConnect(){return!0}async pair(u){this.shouldAbortPairingAttempt=!1;let i=0;do{if(this.shouldAbortPairingAttempt)throw new Error(\"Pairing aborted\");if(i>=this.maxPairingAttempts)throw new Error(\"Max auto pairing attempts reached\");const{uri:d,approval:P}=await this.client.connect({pairingTopic:u,requiredNamespaces:this.namespaces,optionalNamespaces:this.optionalNamespaces,sessionProperties:this.sessionProperties});d&&(this.uri=d,this.events.emit(\"display_uri\",d)),await P().then(O=>{this.session=O,this.namespaces||(this.namespaces=Vg(O.namespaces),this.persist(\"namespaces\",this.namespaces))}).catch(O=>{if(O.message!==bg)throw O;i++})}while(!this.session);return this.onConnect(),this.session}setDefaultChain(u,i){try{if(!this.session)return;const[d,P]=this.validateChain(u);this.getProvider(d).setDefaultChain(P,i)}catch(d){if(!/Please call connect/.test(d.message))throw d}}async cleanupPendingPairings(u={}){this.logger.info(\"Cleaning up inactive pairings...\");const i=this.client.pairing.getAll();if(Ca(i)){for(const d of i)u.deletePairings?this.client.core.expirer.set(d.topic,0):await this.client.core.relayer.subscriber.unsubscribe(d.topic);this.logger.info(`Inactive pairings cleared: ${i.length}`)}}abortPairingAttempt(){this.shouldAbortPairingAttempt=!0}async checkStorage(){if(this.namespaces=await this.getFromStore(\"namespaces\"),this.optionalNamespaces=await this.getFromStore(\"optionalNamespaces\")||{},this.client.session.length){const u=this.client.session.keys.length-1;this.session=this.client.session.get(this.client.session.keys[u]),this.createProviders()}}async initialize(){this.logger.trace(\"Initialized\"),await this.createClient(),await this.checkStorage(),this.registerEventListeners()}async createClient(){this.client=this.providerOpts.client||await Rg.init({logger:this.providerOpts.logger||Ia,relayUrl:this.providerOpts.relayUrl||Wg,projectId:this.providerOpts.projectId,metadata:this.providerOpts.metadata,storageOptions:this.providerOpts.storageOptions,storage:this.providerOpts.storage,name:this.providerOpts.name}),this.logger.trace(\"SignClient Initialized\")}createProviders(){if(!this.client)throw new Error(\"Sign Client not initialized\");if(!this.session)throw new Error(\"Session not initialized. Please call connect() before enable()\");const u=[...new Set(Object.keys(this.session.namespaces).map(i=>de(i)))];Fi(\"client\",this.client),Fi(\"events\",this.events),Fi(\"disableProviderPing\",this.disableProviderPing),u.forEach(i=>{if(!this.session)return;const d=Jg(i,this.session),P=Sa(d),O=Xg(this.namespaces,this.optionalNamespaces),$=Mi(hr({},O[i]),{accounts:d,chains:P});switch(i){case\"eip155\":this.rpcProviders[i]=new jg({namespace:$});break;case\"solana\":this.rpcProviders[i]=new nv({namespace:$});break;case\"cosmos\":this.rpcProviders[i]=new tv({namespace:$});break;case\"polkadot\":this.rpcProviders[i]=new kg({namespace:$});break;case\"cip34\":this.rpcProviders[i]=new ev({namespace:$});break;case\"elrond\":this.rpcProviders[i]=new rv({namespace:$});break;case\"multiversx\":this.rpcProviders[i]=new iv({namespace:$});break;case\"near\":this.rpcProviders[i]=new sv({namespace:$});break}})}registerEventListeners(){if(typeof this.client>\"u\")throw new Error(\"Sign Client is not initialized\");this.client.on(\"session_ping\",u=>{this.events.emit(\"session_ping\",u)}),this.client.on(\"session_event\",u=>{const{params:i}=u,{event:d}=i;if(d.name===\"accountsChanged\"){const P=d.data;P&&Ca(P)&&this.events.emit(\"accountsChanged\",P.map(Qg))}else if(d.name===\"chainChanged\"){const P=i.chainId,O=i.event.data,$=de(P),En=Wi(P)!==Wi(O)?`${$}:${Wi(O)}`:P;this.onChainChanged(En)}else this.events.emit(d.name,d.data);this.events.emit(\"session_event\",u)}),this.client.on(\"session_update\",({topic:u,params:i})=>{var d;const{namespaces:P}=i,O=(d=this.client)==null?void 0:d.session.get(u);this.session=Mi(hr({},O),{namespaces:P}),this.onSessionUpdate(),this.events.emit(\"session_update\",{topic:u,params:i})}),this.client.on(\"session_delete\",async u=>{await this.cleanup(),this.events.emit(\"session_delete\",u),this.events.emit(\"disconnect\",Mi(hr({},Aa(\"USER_DISCONNECTED\")),{data:u.topic}))}),this.on(Vn.DEFAULT_CHAIN_CHANGED,u=>{this.onChainChanged(u,!0)})}getProvider(u){if(!this.rpcProviders[u])throw new Error(`Provider not found: ${u}`);return this.rpcProviders[u]}onSessionUpdate(){Object.keys(this.rpcProviders).forEach(u=>{var i;this.getProvider(u).updateNamespace((i=this.session)==null?void 0:i.namespaces[u])})}setNamespaces(u){const{namespaces:i,optionalNamespaces:d,sessionProperties:P}=u;i&&Object.keys(i).length&&(this.namespaces=i),d&&Object.keys(d).length&&(this.optionalNamespaces=d),this.sessionProperties=P,this.persist(\"namespaces\",i),this.persist(\"optionalNamespaces\",d)}validateChain(u){const[i,d]=u?.split(\":\")||[\"\",\"\"];if(!this.namespaces||!Object.keys(this.namespaces).length)return[i,d];if(i&&!Object.keys(this.namespaces||{}).map($=>de($)).includes(i))throw new Error(`Namespace '${i}' is not configured. Please call connect() first with namespace config.`);if(i&&d)return[i,d];const P=de(Object.keys(this.namespaces)[0]),O=this.rpcProviders[P].getDefaultChain();return[P,O]}async requestAccounts(){const[u]=this.validateChain();return await this.getProvider(u).requestAccounts()}onChainChanged(u,i=!1){var d;if(!this.namespaces)return;const[P,O]=this.validateChain(u);i||this.getProvider(P).setDefaultChain(O),((d=this.namespaces[P])!=null?d:this.namespaces[`${P}:${O}`]).defaultChain=O,this.persist(\"namespaces\",this.namespaces),this.events.emit(\"chainChanged\",O)}onConnect(){this.createProviders(),this.events.emit(\"connect\",{session:this.session})}async cleanup(){this.session=void 0,this.namespaces=void 0,this.optionalNamespaces=void 0,this.sessionProperties=void 0,this.persist(\"namespaces\",void 0),this.persist(\"optionalNamespaces\",void 0),this.persist(\"sessionProperties\",void 0),await this.cleanupPendingPairings({deletePairings:!0})}persist(u,i){this.client.core.storage.setItem(`${xa}/${u}`,i)}async getFromStore(u){return await this.client.core.storage.getItem(`${xa}/${u}`)}}const hv=lr;export{hv as UniversalProvider,lr as default};\n//# sourceMappingURL=index.es.js.map\n","import { create } from 'zustand';\nimport { useEffect } from 'react';\n\nexport type ThemeMode = 'light' | 'dark' | 'system';\nexport type AppliedTheme = 'light' | 'dark';\n\ninterface ThemeState {\n mode: ThemeMode;\n appliedTheme: AppliedTheme;\n setTheme: (mode: ThemeMode) => void;\n}\n\nconst THEME_STORAGE_KEY = 'stargate-bridge-theme';\n\n// Get initial theme from localStorage or default to system\nconst getInitialTheme = (): ThemeMode => {\n try {\n const stored = localStorage.getItem(THEME_STORAGE_KEY);\n if (stored && ['light', 'dark', 'system'].includes(stored)) {\n return stored as ThemeMode;\n }\n } catch (error) {\n console.error('Error reading theme from localStorage:', error);\n }\n return 'system';\n};\n\n// Get system theme preference\nconst getSystemTheme = (): AppliedTheme => {\n if (typeof window !== 'undefined' && window.matchMedia) {\n return window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light';\n }\n return 'light';\n};\n\n// Determine applied theme based on mode\nconst getAppliedTheme = (mode: ThemeMode): AppliedTheme => {\n if (mode === 'system') {\n return getSystemTheme();\n }\n return mode;\n};\n\nexport const useThemeStore = create<ThemeState>((set) => ({\n mode: getInitialTheme(),\n appliedTheme: getAppliedTheme(getInitialTheme()),\n setTheme: (mode: ThemeMode) => {\n try {\n localStorage.setItem(THEME_STORAGE_KEY, mode);\n } catch (error) {\n console.error('Error saving theme to localStorage:', error);\n }\n \n const appliedTheme = getAppliedTheme(mode);\n set({ mode, appliedTheme });\n },\n}));\n\nexport const useTheme = () => {\n const { mode, appliedTheme, setTheme } = useThemeStore();\n\n useEffect(() => {\n // Listen for system theme changes when in system mode\n if (mode === 'system') {\n const mediaQuery = window.matchMedia('(prefers-color-scheme: dark)');\n \n const handleChange = () => {\n const newAppliedTheme = getSystemTheme();\n useThemeStore.setState({ appliedTheme: newAppliedTheme });\n };\n\n mediaQuery.addEventListener('change', handleChange);\n return () => mediaQuery.removeEventListener('change', handleChange);\n }\n }, [mode]);\n\n return {\n mode,\n appliedTheme,\n setTheme,\n isLight: appliedTheme === 'light',\n isDark: appliedTheme === 'dark',\n };\n};","import { createContext, useContext } from \"react\";\nimport type { ReactNode } from \"react\";\nimport { useTronWalletConnect } from \"../hooks/use-tron-walletconnect\";\nimport type { Types } from \"tronweb\";\n\ninterface TronWalletConnectContextValue {\n address: string | null;\n isConnected: boolean;\n isConnecting: boolean;\n connect: () => Promise<void>;\n disconnect: () => Promise<void>;\n signTransaction: (transaction: Types.Transaction) => Promise<Types.Transaction>;\n}\n\nconst TronWalletConnectContext = createContext<\n TronWalletConnectContextValue | undefined\n>(undefined);\n\ninterface TronWalletConnectProviderProps {\n projectId: string | undefined;\n children: ReactNode;\n}\n\nexport function TronWalletConnectProvider({\n projectId,\n children,\n}: TronWalletConnectProviderProps) {\n const walletConnect = useTronWalletConnect(projectId);\n\n return (\n <TronWalletConnectContext.Provider value={walletConnect}>\n {children}\n </TronWalletConnectContext.Provider>\n );\n}\n\nexport function useTronWalletConnectContext(): TronWalletConnectContextValue {\n const context = useContext(TronWalletConnectContext);\n if (!context) {\n throw new Error(\n \"useTronWalletConnectContext must be used within TronWalletConnectProvider\"\n );\n }\n return context;\n}\n","import React, { useState } from \"react\";\nimport { Button, buttonVariants } from \"@/components/ui/button\";\nimport { ExitIcon } from \"../../assets/icons\";\nimport { formatAddress } from \"../../utils/formatters\";\nimport { useChainStrategies } from \"../../hooks/use-chain-strategies\";\nimport { useConnect, type Connector } from \"wagmi\";\nimport type { WalletType } from \"../../hooks/ui/use-wallet-select-modal\";\nimport { useTranslation } from \"react-i18next\";\nimport { toast } from \"sonner\";\nimport { cn } from \"@/lib/utils\";\nimport { useTronWalletConnectContext } from \"../../providers/tron-walletconnect-provider\";\n\ninterface BaseWalletButtonProps {\n icon: React.ComponentType<{ className?: string }>;\n name: string;\n onClose?: () => void;\n}\n\ninterface ConnectedWalletButtonProps extends BaseWalletButtonProps {\n variant: \"connected\";\n address: string;\n onDisconnect: () => void;\n}\n\ninterface AvailableWalletButtonProps extends BaseWalletButtonProps {\n variant: \"available\";\n walletId: WalletType;\n connector?: Connector;\n}\n\ntype WalletModalButtonProps =\n | ConnectedWalletButtonProps\n | AvailableWalletButtonProps;\n\nexport const WalletModalButton: React.FC<WalletModalButtonProps> = (props) => {\n const { t } = useTranslation();\n const { icon: IconComponent, name, onClose } = props;\n const { chainRegistry } = useChainStrategies();\n const { connect, isPending } = useConnect();\n const tronWalletConnect = useTronWalletConnectContext();\n\n const [isConnecting, setIsConnecting] = useState(false);\n\n if (props.variant === \"connected\") {\n const { address, onDisconnect } = props;\n\n return (\n <div className=\"-mx-3\">\n <div\n className={cn(\n buttonVariants({ variant: \"ghost\", size: \"default\" }),\n \"rounded-xs w-full px-3 gap-3\"\n )}\n >\n <IconComponent className=\"min-w-8 min-h-8\" />\n\n <div className=\"flex flex-col items-start min-w-0\">\n <p className=\"font-semibold text-foreground text-sm leading-4 truncate\">\n {formatAddress(address)}\n </p>\n <div className=\"text-xs leading-3 font-medium text-muted-foreground\">\n {name}\n </div>\n </div>\n\n <div\n onClick={() => {\n onDisconnect();\n onClose?.();\n }}\n className=\"text-sm ml-auto font-medium text-muted-foreground cursor-pointer hover:text-foreground transition-colors\"\n >\n <ExitIcon className=\"w-6 h-6\" />\n </div>\n </div>\n </div>\n );\n }\n\n const { walletId, connector } = props;\n\n const handleConnect = async () => {\n setIsConnecting(true);\n try {\n if (connector) {\n connect({ connector });\n } else if (walletId === \"tronwc\") {\n await tronWalletConnect.connect();\n } else {\n const strategy = chainRegistry.getStrategyByType(\n walletId === \"ton\" ? \"ton\" : \"tron\"\n );\n await strategy?.connect();\n }\n onClose?.();\n } catch (error) {\n console.error(\"Failed to connect wallet:\", error);\n\n const errorMessage =\n error instanceof Error\n ? error.message\n : \"Failed to connect wallet. Please try again.\";\n\n toast.error(errorMessage);\n\n } finally {\n setIsConnecting(false);\n }\n };\n\n const isDisabled = connector ? isPending : isConnecting;\n\n return (\n <Button\n type=\"button\"\n variant=\"ghost\"\n onClick={handleConnect}\n disabled={isDisabled}\n className={`w-full rounded-xs flex justify-start gap-3`}\n >\n <IconComponent className=\"min-w-8 min-h-8\" />\n <div className=\"flex flex-col items-start min-w-0\">\n <p className=\"font-semibold text-foreground text-sm leading-4 truncate\">\n {name}\n </p>\n <div className=\"text-xs leading-3 font-medium text-muted-foreground\">\n {t(\"wallets.connect\")}\n </div>\n </div>\n </Button>\n );\n};\n","import React from \"react\";\nimport { useBridgeTranslation } from \"../../i18n/BridgeI18nProvider\";\nimport {\n Dialog,\n DialogContent,\n DialogHeader,\n DialogTitle,\n DialogDescription,\n} from \"@/components/ui/dialog\";\nimport {\n MetaMaskIcon,\n TonKeeperIcon,\n TronLinkIcon,\n WalletConnectIcon,\n} from \"../../assets/icons\";\nimport { useChainStrategies } from \"../../hooks/use-chain-strategies\";\nimport {\n useWalletSelectModal,\n type WalletType,\n} from \"../../hooks/ui/use-wallet-select-modal\";\nimport { useConnect } from \"wagmi\";\nimport { WalletModalButton } from \"../ui/wallet-button\";\nimport type { NetworkType } from \"../../chains/chain-strategy-interface\";\nimport { useTronWalletConnectContext } from \"../../providers/tron-walletconnect-provider\";\n\ninterface WalletOption {\n id: WalletType;\n name: string;\n icon: React.ComponentType<{ className?: string }>;\n enabled: boolean;\n}\n\ninterface WalletCategory {\n title: string;\n wallets: WalletOption[];\n}\n\nconst CHAIN_TYPES = {\n TON: \"ton\" as NetworkType,\n EVM: \"evm\" as NetworkType,\n TRON: \"tron\" as NetworkType,\n} as const;\n\ninterface ConnectedWallet {\n id: WalletType;\n name: string;\n icon: React.ComponentType<{ className?: string }>;\n address: string;\n onDisconnect: () => void;\n}\n\nexport const WalletSelectModal: React.FC = () => {\n const { t } = useBridgeTranslation();\n const { isOpen, onClose } = useWalletSelectModal();\n const { connectors } = useConnect();\n\n const { chainRegistry } = useChainStrategies();\n\n const tonWallet = chainRegistry.getStrategyByType(CHAIN_TYPES.TON);\n const metaMaskWallet = chainRegistry.getStrategyByType(CHAIN_TYPES.EVM);\n const tronWallet = chainRegistry.getStrategyByType(CHAIN_TYPES.TRON);\n const tronWalletConnect = useTronWalletConnectContext();\n\n const walletConfigs = [\n {\n strategy: tonWallet,\n walletId: \"ton\" as WalletType,\n name: t(\"wallets.tonconnect\"),\n icon: TonKeeperIcon,\n },\n {\n strategy: metaMaskWallet,\n walletId: \"metamask\" as WalletType,\n name: t(\"wallets.metaMask\"),\n icon: MetaMaskIcon,\n },\n {\n strategy: tronWallet,\n walletId: \"tronlink\" as WalletType,\n name: t(\"wallets.tronLink\"),\n icon: TronLinkIcon,\n },\n ];\n\n const connectedWallets: ConnectedWallet[] = walletConfigs.reduce<\n ConnectedWallet[]\n >((acc, { strategy, walletId, name, icon }) => {\n const account = strategy?.getAccount();\n\n if (strategy?.isConnected() && account) {\n acc.push({\n id: walletId,\n name,\n icon,\n address: account,\n onDisconnect: () => strategy.disconnect(),\n });\n }\n return acc;\n }, []);\n\n if (tronWalletConnect.isConnected && tronWalletConnect.address) {\n connectedWallets.push({\n id: \"tronwc\" as WalletType,\n name: t(\"wallets.walletConnect\"),\n icon: WalletConnectIcon,\n address: tronWalletConnect.address,\n onDisconnect: () => tronWalletConnect.disconnect(),\n });\n }\n\n const isWalletConnected = (walletId: WalletType) => {\n const isEvmConnector = connectors.some((c) => c.id === walletId);\n if (isEvmConnector && metaMaskWallet?.isConnected()) {\n return true;\n }\n if (walletId === \"tronwc\" && tronWalletConnect.isConnected) {\n return true;\n }\n return connectedWallets.some((w) => w.id === walletId);\n };\n\n const tonWallets: WalletOption[] = [\n {\n id: \"ton\" as WalletType,\n name: t(\"wallets.tonconnect\"),\n icon: TonKeeperIcon,\n enabled: true,\n },\n ];\n\n const evmWallets: WalletOption[] = connectors\n .filter(\n (connector) =>\n connector.id === \"walletConnect\" || connector.id === \"metaMaskSDK\"\n )\n .map((connector) => ({\n id: connector.id as WalletType,\n name: connector.name,\n icon: connector.id === \"metaMaskSDK\" ? MetaMaskIcon : WalletConnectIcon,\n enabled: true,\n }));\n\n const tronWallets: WalletOption[] = [\n {\n id: \"tronlink\" as WalletType,\n name: t(\"wallets.tronLink\"),\n icon: TronLinkIcon,\n enabled: true,\n },\n {\n id: \"tronwc\" as WalletType,\n name: t(\"wallets.walletConnect\"),\n icon: WalletConnectIcon,\n enabled: true,\n },\n ];\n\n const notConnected = (w: WalletOption): boolean => !isWalletConnected(w.id);\n\n const categories: WalletCategory[] = [\n {\n title: t(\"wallets.tonWallets\"),\n wallets: tonWallets.filter(notConnected),\n },\n {\n title: t(\"wallets.evmWallets\"),\n wallets: evmWallets.filter(notConnected),\n },\n {\n title: t(\"wallets.tronWallets\"),\n wallets: tronWallets.filter(notConnected),\n },\n ].filter((category) => category.wallets.length > 0);\n\n return (\n <Dialog open={isOpen} onOpenChange={(open) => !open && onClose()}>\n <DialogContent className=\"p-10 pt-8\">\n <DialogHeader className=\"text-left\">\n <DialogTitle className=\"text-2xl leading-8\">\n {t(\"wallets.chooseWallet\")}\n </DialogTitle>\n <DialogDescription>{t(\"wallets.oneWalletPerEnv\")}</DialogDescription>\n </DialogHeader>\n\n <div className=\"flex flex-col gap-4\">\n {connectedWallets.length > 0 && (\n <div>\n <div className=\"py-1 text-muted-foreground uppercase\">\n {t(\"wallets.connected\")}\n </div>\n <div>\n {connectedWallets.map((wallet) => (\n <WalletModalButton\n key={wallet.id}\n variant=\"connected\"\n icon={wallet.icon}\n name={wallet.name}\n address={wallet.address}\n onDisconnect={wallet.onDisconnect}\n onClose={onClose}\n />\n ))}\n </div>\n </div>\n )}\n\n {categories.map((category) => (\n <div key={category.title}>\n <div className=\"py-1 text-muted-foreground uppercase\">\n {category.title}\n </div>\n <div className=\"-mx-3\">\n {category.wallets.map((wallet) => {\n const isEvmConnector =\n category.title === t(\"wallets.evmWallets\");\n const connector = isEvmConnector\n ? connectors.find((c) => c.id === wallet.id)\n : undefined;\n\n return (\n <WalletModalButton\n key={wallet.id}\n variant=\"available\"\n icon={wallet.icon}\n name={wallet.name}\n walletId={wallet.id}\n connector={connector}\n onClose={onClose}\n />\n );\n })}\n </div>\n </div>\n ))}\n </div>\n </DialogContent>\n </Dialog>\n );\n};\n","import {\n DialogContent,\n DialogHeader,\n DialogTitle,\n} from \"@/components/ui/dialog\";\nimport { Loader2 } from \"lucide-react\";\nimport { useBridgeTranslation } from \"../../i18n/BridgeI18nProvider\";\n\ninterface ProgressStepProps {\n icon?: React.ReactNode;\n}\n\nexport const ProgressStep = ({\n icon = <Loader2 className=\"w-16 h-16 animate-spin\" />,\n}: ProgressStepProps) => {\n const { t } = useBridgeTranslation();\n return (\n <DialogContent showCloseButton={false} className=\"overflow-hidden\">\n <div className=\"flex relative flex-col gap-4 flex-1 items-center justify-start text-center noise bg-background\">\n {icon}\n\n <DialogHeader className=\"pr-0\">\n <DialogTitle>{t(\"transaction.inProgress\")}</DialogTitle>\n </DialogHeader>\n\n <div className=\"relative mt-5 z-10\">\n <div className=\"absolute dot-vertical h-full left-5 top-0 bottom-0 z-0\" />\n </div>\n </div>\n </DialogContent>\n );\n};\n","import { Button } from \"@/components/ui/button\";\nimport { useTransactionStore } from \"../../store/use-transaction-store\";\nimport {\n DialogContent,\n DialogFooter,\n DialogHeader,\n DialogTitle,\n} from \"@/components/ui/dialog\";\nimport { useBridgeTranslation } from \"../../i18n/BridgeI18nProvider\";\nimport { AlertCircleIcon } from \"lucide-react\";\nimport { DialogDescription } from \"@radix-ui/react-dialog\";\n\ninterface FailedStepProps {\n icon?: React.ReactNode;\n}\n\nexport const FailedStep = ({\n icon = <AlertCircleIcon className=\"w-16 h-16\" />,\n}: FailedStepProps) => {\n const { current, reset } = useTransactionStore();\n const { t } = useBridgeTranslation();\n\n return (\n <DialogContent showCloseButton={true} className=\"overflow-hidden\">\n <div className=\"flex flex-col relative gap-4 flex-1 items-center justify-start text-center noise\">\n {icon}\n\n <DialogHeader className=\"pr-0\">\n <DialogTitle>{t(\"transaction.failed\")}</DialogTitle>\n {current?.errorCode && (\n <DialogDescription>\n {\n t(\n `errors.${current.errorCode}`,\n current.errorParams || {}\n ) as string\n }\n </DialogDescription>\n )}\n </DialogHeader>\n </div>\n <DialogFooter>\n <Button variant=\"outline\" className=\"w-full min-w-40\" onClick={reset}>\n {t(\"common.close\")}\n </Button>\n </DialogFooter>\n </DialogContent>\n );\n};\n","/**\n * Explorer URL mappings for different blockchain networks\n */\n\ninterface ExplorerConfig {\n baseUrl: string;\n txPath: string;\n}\n\nconst EXPLORER_CONFIGS: Record<string, ExplorerConfig> = {\n // TON\n ton: {\n baseUrl: \"https://tonscan.org\",\n txPath: \"/tx/\",\n },\n\n // TRON\n tron: {\n baseUrl: \"https://tronscan.org\",\n txPath: \"/#/transaction/\",\n },\n\n // Ethereum & EVM chains\n ethereum: {\n baseUrl: \"https://etherscan.io\",\n txPath: \"/tx/\",\n },\n eth: {\n baseUrl: \"https://etherscan.io\",\n txPath: \"/tx/\",\n },\n\n // BSC (Binance Smart Chain)\n bsc: {\n baseUrl: \"https://bscscan.com\",\n txPath: \"/tx/\",\n },\n \"binance-smart-chain\": {\n baseUrl: \"https://bscscan.com\",\n txPath: \"/tx/\",\n },\n\n // Polygon\n polygon: {\n baseUrl: \"https://polygonscan.com\",\n txPath: \"/tx/\",\n },\n matic: {\n baseUrl: \"https://polygonscan.com\",\n txPath: \"/tx/\",\n },\n\n // Avalanche\n avalanche: {\n baseUrl: \"https://snowtrace.io\",\n txPath: \"/tx/\",\n },\n avax: {\n baseUrl: \"https://snowtrace.io\",\n txPath: \"/tx/\",\n },\n\n // Arbitrum\n arbitrum: {\n baseUrl: \"https://arbiscan.io\",\n txPath: \"/tx/\",\n },\n\n // Optimism\n optimism: {\n baseUrl: \"https://optimistic.etherscan.io\",\n txPath: \"/tx/\",\n },\n\n // Base\n base: {\n baseUrl: \"https://basescan.org\",\n txPath: \"/tx/\",\n },\n\n // Fantom\n fantom: {\n baseUrl: \"https://ftmscan.com\",\n txPath: \"/tx/\",\n },\n};\n\n/**\n * Gets the explorer URL for a transaction hash on a specific blockchain\n * @param chainKey - The blockchain key (e.g., \"ton\", \"ethereum\", \"bsc\")\n * @param txHash - The transaction hash\n * @returns The full explorer URL for the transaction\n */\nexport function getExplorerTxUrl(\n chainKey: string | undefined,\n txHash: string | undefined\n): string | null {\n if (!chainKey || !txHash) {\n return null;\n }\n\n const normalizedChainKey = chainKey.toLowerCase();\n const config = EXPLORER_CONFIGS[normalizedChainKey];\n\n if (!config) {\n console.warn(\n `No explorer config found for chain: ${chainKey}. Please add it to EXPLORER_CONFIGS.`\n );\n return null;\n }\n\n return `${config.baseUrl}${config.txPath}${txHash}`;\n}\n\n/**\n * Opens a transaction in the blockchain explorer in a new tab\n * @param chainKey - The blockchain key (e.g., \"ton\", \"ethereum\", \"bsc\")\n * @param txHash - The transaction hash\n */\nexport function openTransactionInExplorer(\n chainKey: string | undefined,\n txHash: string | undefined\n): void {\n const url = getExplorerTxUrl(chainKey, txHash);\n\n if (url && typeof window !== \"undefined\") {\n window.open(url, \"_blank\", \"noopener,noreferrer\");\n }\n}\n","import { Button } from \"@/components/ui/button\";\nimport {\n DialogContent,\n DialogFooter,\n DialogHeader,\n DialogTitle,\n} from \"@/components/ui/dialog\";\nimport { CheckCircle2 } from \"lucide-react\";\nimport { useTransactionStore } from \"../../store/use-transaction-store\";\nimport { useBridgeTranslation } from \"../../i18n/BridgeI18nProvider\";\nimport { formatBalance, formatHash } from \"../../utils/formatters\";\nimport { openTransactionInExplorer } from \"../../utils/explorer\";\nimport { TokenSymbol } from \"../ui/token-symbol\";\nimport { NetworkSymbol } from \"../ui/network-symbol\";\n\ninterface SuccessStepProps {\n icon?: React.ReactNode;\n}\n\nexport const SuccessStep = ({\n icon = <CheckCircle2 className=\"w-16 h-16\" />,\n}: SuccessStepProps) => {\n const { current, reset } = useTransactionStore();\n const { t } = useBridgeTranslation();\n\n const metadata = current?.metadata;\n const srcTxHash = current?.srcTxHash;\n const srcChainKey = current?.quote?.srcChainKey;\n\n const handleOpenExplorer = () => {\n if (srcTxHash && srcChainKey) {\n openTransactionInExplorer(srcChainKey, srcTxHash);\n }\n };\n\n return (\n <DialogContent showCloseButton={true} className=\"overflow-hidden\">\n <div className=\"flex flex-col gap-4 flex-1 justify-start items-center text-center noise bg-background\">\n {icon}\n\n <DialogHeader className=\"pr-0\">\n <DialogTitle>{t(\"transaction.success\")}</DialogTitle>\n </DialogHeader>\n\n <div className=\"w-full space-y-2 mt-4 relative z-10 pb-14\">\n {metadata?.srcAmountHuman && (\n <div className=\"flex justify-between items-center\">\n <span className=\"text-muted-foreground\">\n {t(\"transaction.bridged\")}\n </span>\n <span className=\"inline-flex items-center gap-1 font-medium\">\n {formatBalance(metadata.srcAmountHuman, 2)}{\" \"}\n {metadata?.srcTokenSymbol}\n <TokenSymbol symbol={metadata?.srcTokenSymbol} />\n </span>\n </div>\n )}\n <div className=\"flex justify-between items-center\">\n <span className=\"text-muted-foreground\">\n {t(\"transaction.transferTitle\")}\n </span>\n <span className=\"font-medium space-x-1\">\n <span className=\"inline-flex gap-1 items-center\">\n {metadata?.srcChainName}{\" \"}\n <NetworkSymbol chainKey={metadata!.srcChainName} />\n </span>\n <span className=\"text-muted-foreground\">→</span>\n <span className=\"inline-flex gap-1 items-center\">\n {metadata?.dstChainName}{\" \"}\n <NetworkSymbol chainKey={metadata!.dstChainName} />\n </span>\n </span>\n </div>\n {srcTxHash && (\n <div className=\"flex justify-between items-center\">\n <span className=\"text-muted-foreground\">\n {t(\"transaction.hash\")}\n </span>\n <button\n onClick={handleOpenExplorer}\n className=\"font-medium cursor-pointer inline-flex items-center gap-1 underline hover:no-underline\"\n >\n {formatHash(srcTxHash)}\n </button>\n </div>\n )}\n {metadata?.actualFeeValue && (\n <div className=\"flex justify-between items-center\">\n <span className=\"text-muted-foreground\">\n {t(\"transaction.finalFee\")}\n </span>\n <span className=\"font-medium\">\n {metadata.actualFeeValue} {metadata.actualFeeSymbol}\n </span>\n </div>\n )}\n </div>\n </div>\n\n <DialogFooter>\n <Button onClick={reset} className=\"w-full\">\n {t(\"transaction.done\")}\n </Button>\n </DialogFooter>\n </DialogContent>\n );\n};\n","import { useState, useEffect } from 'react';\n\nexport const useCountdown = (\n initialSeconds: number\n): {\n formatTime: string;\n time: number;\n} => {\n const [time, setTime] = useState(initialSeconds);\n\n const minutes = Math.floor(time / 60);\n const seconds = time % 60;\n\n const formattedTime = `${minutes.toString().padStart(2, '0')}:${seconds.toString().padStart(2, '0')}`;\n\n useEffect(() => {\n if (!time) return;\n\n const intervalId = setInterval(() => {\n setTime(time - 1);\n }, 1000);\n\n return () => clearInterval(intervalId);\n }, [time]);\n\n return {\n formatTime: formattedTime,\n time\n };\n};\n","import {\n DialogContent,\n DialogHeader,\n DialogTitle,\n DialogDescription,\n} from \"@/components/ui/dialog\";\nimport { Clock } from \"lucide-react\";\nimport { useBridgeTranslation } from \"../../i18n/BridgeI18nProvider\";\nimport { useCountdown } from \"../../hooks/ui/use-countdown\";\n\ninterface ConfirmStepProps {\n icon?: React.ReactNode;\n}\n\nexport const ConfirmStep = ({\n icon = <Clock className=\"w-16 h-16\" />,\n}: ConfirmStepProps) => {\n const { t } = useBridgeTranslation();\n const { formatTime } = useCountdown(90);\n\n return (\n <DialogContent showCloseButton={false} className=\"overflow-hidden\">\n <div className=\"flex flex-col relative gap-4 flex-1 items-center justify-start text-center noise\">\n {icon}\n\n <DialogHeader className=\"pr-0\">\n <DialogTitle>{t(\"transaction.confirm\")}</DialogTitle>\n <DialogDescription>\n {t(\"transaction.signTransaction\")}\n </DialogDescription>\n </DialogHeader>\n\n <div className=\"text-3xl font-black relative z-10\">{formatTime}</div>\n </div>\n </DialogContent>\n );\n};\n","import React from \"react\";\nimport { useTransactionStore } from \"../../store/use-transaction-store\";\nimport { ProgressStep } from \"./progress-step\";\nimport { FailedStep } from \"./failed-step\";\nimport { SuccessStep } from \"./success-step\";\nimport { ConfirmStep } from \"./confirm-step\";\nimport { Dialog } from \"@/components/ui/dialog\";\nimport type { TransactionIcons } from \"../../evaa-bridge\";\n\ninterface TransactionManagerProps {\n icons?: TransactionIcons;\n}\n\nexport const StatusStepsDialog: React.FC<TransactionManagerProps> = ({\n icons,\n}) => {\n const { current, reset } = useTransactionStore();\n const status = current?.status;\n\n if (!status || status === \"idle\") return null;\n\n let step = null;\n\n if (status === \"executing\") {\n step = <ConfirmStep icon={icons?.confirm} />;\n }\n\n if (status === \"processing\") {\n step = <ProgressStep icon={icons?.progress} />;\n }\n\n if (status === \"completed\") {\n step = <FailedStep icon={icons?.failed} />;\n }\n\n if (status === \"failed\") {\n step = <SuccessStep icon={icons?.success} />;\n }\n\n return (\n <Dialog open={true} onOpenChange={() => reset()}>\n {step}\n </Dialog>\n );\n};\n","import { useEffect } from \"react\";\nimport { useQuery } from \"@tanstack/react-query\";\nimport { useTokensStore } from \"../../store/use-token-store\";\nimport type { Token } from \"../../types\";\nimport { getTokens } from \"../../api/api\";\nimport { listAssetsForSelect } from \"../../lib/assets\";\n\nexport const useTokens = () => {\n const { setTokens, setSelectedToken, setSelectedAssetSymbol } =\n useTokensStore();\n\n const query = useQuery<Token[], Error>({\n queryKey: [\"tokens\"],\n queryFn: () => getTokens(),\n enabled: true, // Убираем условие для использования кэша\n staleTime: 30 * 60_000, // 30 минут\n gcTime: 60 * 60_000, // 1 час хранения в кэше\n refetchOnWindowFocus: false,\n select: (list) => list.filter((t) => (t as Token).isBridgeable === true),\n });\n\n useEffect(() => {\n if (query.isSuccess && query.data?.length) {\n setTokens(query.data);\n const firstAsset = listAssetsForSelect(query.data)[0];\n setSelectedAssetSymbol(firstAsset?.symbol);\n setSelectedToken(query.data[0]);\n }\n }, [\n query.isSuccess,\n query.data,\n setTokens,\n setSelectedToken,\n setSelectedAssetSymbol,\n ]);\n\n useEffect(() => {\n if (query.isError && query.error) {\n console.error(query.error.name, query.error.message);\n }\n }, [query.isError, query.error]);\n\n return { ...query };\n};\n","import { useEffect } from \"react\";\nimport { useQuery } from \"@tanstack/react-query\";\nimport { useChainsStore } from \"../../store/use-chains-store\";\nimport { getChains } from \"../../api/api\";\n\nexport const useChains = () => {\n const { setChains, setFromChain, fromChain } = useChainsStore();\n const query = useQuery({\n queryKey: [\"chains\"],\n queryFn: () => getChains(),\n enabled: true, // Убираем условие для использования кэша\n staleTime: 30 * 60_000, // 30 минут\n gcTime: 60 * 60_000, // 1 час хранения в кэше\n refetchOnWindowFocus: false,\n });\n\n useEffect(() => {\n if (query.isSuccess && query.data?.length) {\n setChains(query.data);\n if (!fromChain) {\n setFromChain(query.data[0]);\n }\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [query.isSuccess, query.data]);\n\n useEffect(() => {\n if (query.isError && query.error) {\n console.error(query.error.name, query.error.message);\n }\n }, [query.isError, query.error]);\n\n return query;\n};\n","import type { ChainStrategy, NetworkType } from \"./chain-strategy-interface\";\nimport type { Token } from \"../types\";\nimport type { WalletBalances } from \"../api/balances\";\n\nexport class ChainStrategyRegistry {\n private strategies: ChainStrategy[] = [];\n\n constructor(strategies: ChainStrategy[]) {\n this.strategies = strategies;\n }\n\n getStrategy(chainKey: string): ChainStrategy | undefined {\n return (\n this.strategies.find((strategy) => strategy.canHandle(chainKey)) ||\n undefined\n );\n }\n\n getStrategyByType(type: NetworkType): ChainStrategy | undefined {\n return (\n this.strategies.find((strategy) => strategy.getNetworkType() === type) ||\n undefined\n );\n }\n\n getAllStrategies(): ChainStrategy[] {\n return this.strategies;\n }\n\n isChainSupported(chainKey: string): boolean {\n return this.strategies.some((strategy) => strategy.canHandle(chainKey));\n }\n\n getAddressForChain(chainKey?: string): string | undefined {\n if (!chainKey) return undefined;\n\n const strategy = this.getStrategy(chainKey);\n if (!strategy || !strategy.isConnected()) return undefined;\n\n return strategy.getAccount() || undefined;\n }\n\n isWalletConnected(chainKey?: string): boolean {\n if (!chainKey) return false;\n\n const strategy = this.getStrategy(chainKey);\n return strategy?.isConnected() || false;\n }\n\n async getBalances(\n chainKey: string,\n address: string,\n tokens: Token[]\n ): Promise<WalletBalances> {\n const strategy = this.getStrategy(chainKey);\n if (!strategy) return {};\n\n return await strategy.getBalances(address, tokens);\n }\n\n isAddressValid(chainKey: string, address?: string): boolean {\n const strategy = this.getStrategy(chainKey);\n if (!strategy) return false;\n\n return strategy.isAddressValid(address);\n }\n\n getConnectLabel(chainKey: string, t: (key: string) => string): string {\n const strategy = this.getStrategy(chainKey);\n if (!strategy) return t(\"wallets.connectWallet\");\n\n return strategy.getConnectLabel(t);\n }\n\n async connectWallet(chainKey: string): Promise<void> {\n const strategy = this.getStrategy(chainKey);\n if (!strategy) {\n throw new Error(`No strategy available for chain: ${chainKey}`);\n }\n\n await strategy.connect();\n }\n\n async disconnectWallet(chainKey: string): Promise<void> {\n const strategy = this.getStrategy(chainKey);\n if (!strategy) {\n throw new Error(`No strategy available for chain: ${chainKey}`);\n }\n\n await strategy.disconnect();\n }\n}\n","import type { PublicClient } from \"viem\";\nimport { isAddress, formatUnits } from \"viem\";\nimport type { TronWeb } from \"tronweb\";\nimport type { Token } from \"../types\";\nimport { Address, beginCell, type TonClient } from \"@ton/ton\";\nimport { getTonClient } from \"../chains/config\";\n\nexport interface WalletBalance {\n balance: number;\n address: string;\n}\n\nexport type WalletBalances = Record<string, WalletBalance>;\n\nfunction isNativeAddress(addr?: string) {\n if (!addr) return false;\n const a = addr.toLowerCase();\n return (\n a === \"native\" ||\n a === \"0x0000000000000000000000000000000000000000\" ||\n a === \"0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee\" ||\n addr === \"T9yD14Nj9j7xAB4dbGeiX9h8unkKHxuWwb\"\n );\n}\n\nfunction toTronBase58(addr: string, tronWeb: TronWeb): string {\n if (!addr) throw new Error(\"Empty TRON address\");\n if (addr.startsWith(\"T\")) return addr;\n if (addr.startsWith(\"41\")) return tronWeb.address.fromHex(addr);\n if (addr.startsWith(\"0x\"))\n return tronWeb.address.fromHex(\"41\" + addr.slice(2));\n throw new Error(\"Unsupported TRON address format: \" + addr);\n}\n\nfunction formatUnitsFromBigIntStr(valueStr: string, decimals: number): number {\n if (decimals <= 0) return Number(valueStr);\n const s = valueStr.replace(/^0+/, \"\") || \"0\";\n if (s === \"0\") return 0;\n if (s.length <= decimals) {\n const pad = \"0\".repeat(decimals - s.length);\n return Number(`0.${pad}${s}`);\n }\n const head = s.slice(0, s.length - decimals);\n const tail = s.slice(s.length - decimals).replace(/0+$/, \"\");\n return Number(tail ? `${head}.${tail}` : head);\n}\n\nfunction isTonFriendlyAddress(address?: string): boolean {\n return !!address && /^[A-Za-z0-9_-]{48,}$/.test(address);\n}\n\nfunction normalizeTickerSymbol(symbol: string): string {\n return symbol\n .toUpperCase()\n .replace(/₮/g, \"T\")\n .replace(/[^A-Z0-9]/g, \"\");\n}\n\nfunction parseTonAddress(address: string): Address {\n // If hex format with 0x prefix, convert to raw format\n if (address.startsWith(\"0x\")) {\n const hex = address.slice(2); // Remove 0x prefix\n return Address.parseRaw(`0:${hex}`); // Workchain 0 for jettons\n }\n\n // If raw format (contains :), parse as raw\n if (address.includes(\":\")) {\n return Address.parseRaw(address);\n }\n\n // Otherwise assume friendly format (base64)\n return Address.parse(address);\n}\n\nexport async function getEvmBalances(\n publicClient: PublicClient,\n address: string,\n tokens: Token[]\n): Promise<WalletBalances> {\n const balances: WalletBalances = {};\n\n try {\n if (!address || !isAddress(address)) {\n console.warn(`Invalid EVM address provided: ${address}`);\n return balances;\n }\n\n if (!publicClient) {\n throw new Error(\"No public client provided\");\n }\n\n // Separate native and ERC20 tokens\n const nativeTokens = tokens.filter((t) => isNativeAddress(t.address));\n const erc20Tokens = tokens.filter(\n (t) => !isNativeAddress(t.address) && isAddress(t.address)\n );\n\n // Get native token balances\n for (const token of nativeTokens) {\n try {\n const ethBalance = await publicClient.getBalance({\n address: address as `0x${string}`,\n });\n const balance = parseFloat(formatUnits(ethBalance, token.decimals));\n if (balance > 0) {\n balances[token.symbol] = { balance, address };\n }\n } catch (error) {\n console.debug(\n `Failed to get native balance for ${token.symbol}:`,\n error\n );\n }\n }\n\n // Batch all ERC20 balanceOf calls using multicall\n if (erc20Tokens.length > 0) {\n try {\n const multicallContracts = erc20Tokens.map((token) => ({\n address: token.address as `0x${string}`,\n abi: [\n {\n name: \"balanceOf\",\n type: \"function\",\n stateMutability: \"view\",\n inputs: [{ name: \"owner\", type: \"address\" }],\n outputs: [{ name: \"balance\", type: \"uint256\" }],\n },\n ] as const,\n functionName: \"balanceOf\" as const,\n args: [address as `0x${string}`],\n }));\n\n const results = await publicClient.multicall({\n contracts: multicallContracts,\n allowFailure: true,\n });\n\n results.forEach((result, index) => {\n const token = erc20Tokens[index];\n if (!token) return;\n\n if (result.status === \"success\" && result.result !== undefined) {\n try {\n const balance = parseFloat(\n formatUnits(result.result as bigint, token.decimals)\n );\n if (balance > 0) {\n balances[token.symbol] = { balance, address };\n }\n } catch (error) {\n console.debug(\n `Failed to parse balance for ${token.symbol}:`,\n error\n );\n }\n }\n });\n } catch (error) {\n console.warn(\n \"Multicall failed, falling back to individual calls:\",\n error\n );\n\n // Fallback to individual calls if multicall fails\n for (const token of erc20Tokens) {\n try {\n const tokenBalance = await publicClient.readContract({\n address: token.address as `0x${string}`,\n abi: [\n {\n name: \"balanceOf\",\n type: \"function\",\n stateMutability: \"view\",\n inputs: [{ name: \"owner\", type: \"address\" }],\n outputs: [{ name: \"balance\", type: \"uint256\" }],\n },\n ],\n functionName: \"balanceOf\",\n args: [address as `0x${string}`],\n });\n\n const balance = parseFloat(\n formatUnits(tokenBalance as bigint, token.decimals)\n );\n\n if (balance > 0) {\n balances[token.symbol] = { balance, address };\n }\n } catch (error) {\n console.debug(`Failed to get balance for ${token.symbol}:`, error);\n }\n }\n }\n }\n } catch (error) {\n console.error(\"Failed to get EVM balances:\", error);\n }\n\n return balances;\n}\n\nexport async function getTonBalances(\n address: string,\n tokens: Token[],\n customTonClient?: TonClient,\n tonApiKey?: string\n): Promise<WalletBalances> {\n const balances: WalletBalances = {};\n\n try {\n if (!isTonFriendlyAddress(address)) {\n console.warn(`Invalid TON address provided: ${address}`);\n return balances;\n }\n\n // Get TonClient instance (custom or shared singleton)\n const client = getTonClient(customTonClient, tonApiKey);\n\n const accountAddress = Address.parse(address);\n\n // 1) Get native TON balance\n try {\n const balance = await client.getBalance(accountAddress);\n const tonBalance = Number(balance) / 1e9; // Convert from nanotons to TON\n\n if (tonBalance > 0) {\n balances.TON = { balance: tonBalance, address: \"ton-native\" };\n }\n } catch (error) {\n console.warn(\"Failed to get native TON balance:\", error);\n }\n\n // 2) Get Jetton balances for each token\n for (const token of tokens) {\n try {\n // Skip native TON token (already processed)\n if (\n isNativeAddress(token.address) ||\n token.symbol.toUpperCase() === \"TON\"\n ) {\n continue;\n }\n\n // Parse jetton master address (supports hex with 0x, raw format, and friendly format)\n const jettonMasterAddress = parseTonAddress(token.address);\n\n // Get jetton wallet address for this account\n const jettonWalletAddress = await client.runMethod(\n jettonMasterAddress,\n \"get_wallet_address\",\n [\n {\n type: \"slice\",\n cell: beginCell().storeAddress(accountAddress).endCell(),\n },\n ]\n );\n\n const jettonWalletAddr = jettonWalletAddress.stack.readAddress();\n\n // Get jetton balance from wallet\n const jettonData = await client.runMethod(\n jettonWalletAddr,\n \"get_wallet_data\"\n );\n\n const jettonBalance = jettonData.stack.readBigNumber();\n const humanBalance =\n Number(jettonBalance) / Math.pow(10, token.decimals);\n\n if (humanBalance > 0) {\n const symbolUpper = token.symbol.toUpperCase();\n const symbolNorm = normalizeTickerSymbol(symbolUpper);\n\n const entry = { balance: humanBalance, address: token.address };\n balances[symbolUpper] = entry;\n\n // Add normalized alias if different\n if (symbolNorm !== symbolUpper) {\n balances[symbolNorm] = entry;\n }\n }\n } catch (error) {\n // Exit code -13 means the user doesn't have a jetton wallet for this token (balance = 0)\n // This is normal and not an error, so we skip logging for this case\n const errorMessage =\n error instanceof Error ? error.message : String(error);\n const isNoWalletError =\n errorMessage.includes(\"exit_code: -13\") ||\n errorMessage.includes(\"exit_code:-13\") ||\n errorMessage.includes(\"exitCode: -13\");\n\n if (!isNoWalletError) {\n // Log other errors that might indicate real issues\n console.debug(`Failed to get balance for ${token.symbol}:`, error);\n }\n }\n }\n } catch (error) {\n console.error(\"Failed to get TON balances:\", error);\n }\n\n return balances;\n}\n\nexport async function getTronBalances(\n tronWeb: TronWeb,\n address: string,\n tokens: Token[]\n): Promise<WalletBalances> {\n const balances: WalletBalances = {};\n\n try {\n if (!tronWeb) throw new Error(\"TronWeb not available\");\n const ownerB58 = toTronBase58(address, tronWeb);\n\n // Always fetch native TRX balance first, regardless of tokens list\n try {\n const trxBalanceSun = await tronWeb.trx.getBalance(ownerB58);\n const sunNum = Number(trxBalanceSun);\n const trxVal = tronWeb.fromSun(sunNum);\n const trxStr = typeof trxVal === \"string\" ? trxVal : trxVal.toString();\n const trxBalance = parseFloat(trxStr);\n\n if (trxBalance > 0) {\n balances.TRX = { balance: trxBalance, address: ownerB58 };\n }\n } catch (error) {\n console.warn(\"Failed to get native TRX balance:\", error);\n }\n\n for (const token of tokens) {\n try {\n // Skip native TRX if it's in the tokens list (already processed above)\n if (\n isNativeAddress(token.address) &&\n token.symbol.toUpperCase() === \"TRX\"\n ) {\n continue;\n }\n\n let balance = 0;\n\n if (isNativeAddress(token.address)) {\n // Other native tokens (shouldn't happen for TRON, but keep for compatibility)\n const trxBalanceSun = await tronWeb.trx.getBalance(ownerB58);\n const sunNum = Number(trxBalanceSun);\n const trxVal = tronWeb.fromSun(sunNum);\n const trxStr =\n typeof trxVal === \"string\" ? trxVal : trxVal.toString();\n balance = parseFloat(trxStr);\n } else {\n const contractB58 = toTronBase58(token.address, tronWeb);\n\n const res = await tronWeb.transactionBuilder.triggerSmartContract(\n contractB58,\n \"balanceOf(address)\",\n { feeLimit: 10_000_000, callValue: 0 },\n [{ type: \"address\", value: ownerB58 }],\n ownerB58\n );\n\n const hex = res?.constant_result?.[0];\n if (!hex) {\n balance = 0;\n } else {\n const intStr = tronWeb.toBigNumber(\"0x\" + hex).toString();\n balance = formatUnitsFromBigIntStr(intStr, token.decimals);\n }\n }\n\n if (balance > 0) {\n balances[token.symbol] = { balance, address: ownerB58 };\n }\n } catch (error) {\n console.warn(`Failed to get TRON balance for ${token.symbol}:`, error);\n }\n }\n } catch (error) {\n console.error(\"Failed to get Tron balances:\", error);\n }\n\n return balances;\n}\n","import { type PublicClient, type WalletClient, formatUnits, parseUnits } from \"viem\";\nimport type {\n ChainStrategy,\n NetworkType,\n TransactionResult,\n CompletionResult,\n TransactionStrategyContext,\n} from \"./chain-strategy-interface\";\nimport type { Token, TransactionStep } from \"../types\";\nimport type { WalletBalances } from \"../api/balances\";\nimport { getEvmBalances } from \"../api/balances\";\nimport { EVM_CONFIG } from \"./config\";\nimport {\n WalletNotConnectedError,\n ProviderNotAvailableError,\n InvalidStepsError,\n InvalidTransactionDataError,\n TransactionFailedError,\n TransactionTimeoutError,\n TransactionRevertedError,\n toChainStrategyError,\n} from \"./errors\";\n\nconst ERC20_ABI = [\n \"function approve(address spender, uint256 amount) returns (bool)\",\n \"function allowance(address owner, address spender) view returns (uint256)\",\n \"function decimals() view returns (uint8)\",\n \"function balanceOf(address owner) view returns (uint256)\",\n];\n\nexport interface EvmChainStrategyConfig {\n evmAddress: string | undefined;\n evmIsConnected: boolean;\n evmDisconnect: () => void;\n walletClient: WalletClient | undefined;\n publicClient: PublicClient | undefined;\n}\n\nexport class EvmChainStrategy implements ChainStrategy {\n private config: EvmChainStrategyConfig;\n private walletClient: WalletClient | undefined;\n private publicClient: PublicClient | undefined;\n\n constructor(config: EvmChainStrategyConfig) {\n this.config = config;\n this.walletClient = config.walletClient;\n this.publicClient = config.publicClient;\n }\n\n canHandle(chainKey: string): boolean {\n const key = chainKey.toLowerCase();\n return key !== \"ton\" && key !== \"tron\";\n }\n\n getNetworkType(): NetworkType {\n return \"evm\";\n }\n\n getName(): string {\n return \"EVM Chain Strategy\";\n }\n\n async connect(): Promise<void> {\n // EVM connection is handled by Wagmi's useConnect hook in the UI\n // This is a no-op as the actual connection happens through Wagmi\n }\n\n async disconnect(): Promise<void> {\n this.config.evmDisconnect();\n }\n\n isConnected(): boolean {\n return !!this.config.evmIsConnected;\n }\n\n isConnecting(): boolean {\n return false;\n }\n\n getAccount(): string | null {\n return this.config.evmAddress || null;\n }\n\n getError(): string | null {\n return null;\n }\n\n isInitialized(): boolean {\n return true;\n }\n\n getConnectLabel(t: (key: string) => string): string {\n return t(\"wallets.connectEvmWallet\");\n }\n\n getClient(): WalletClient | undefined {\n return this.walletClient;\n }\n\n async getBalances(\n address: string,\n tokens: Token[]\n ): Promise<WalletBalances> {\n if (!this.publicClient) {\n console.warn(\"No publicClient available for balance query\");\n return {};\n }\n return await getEvmBalances(\n this.publicClient,\n address,\n tokens\n );\n }\n\n isAddressValid(address?: string): boolean {\n if (!address) return false;\n return /^0x[0-9a-fA-F]{40}$/.test(address);\n }\n\n validateSteps(steps: TransactionStep[]): void {\n if (!steps || steps.length === 0) {\n throw new InvalidStepsError(\"evm\", \"No transaction steps provided\");\n }\n\n const hasValidSteps = steps.every((step) => {\n if (!step.transaction) return false;\n\n if (step.type === \"approve\") {\n return !!step.transaction.to && !!step.transaction.data;\n }\n\n if (step.type === \"bridge\") {\n return !!step.transaction.to && !!step.transaction.data;\n }\n\n return false;\n });\n\n if (!hasValidSteps) {\n throw new InvalidStepsError(\"evm\", \"Missing transaction data in steps\");\n }\n }\n\n async executeSteps(\n steps: TransactionStep[],\n _context: TransactionStrategyContext,\n onFirstHash?: (hash: string) => void\n ): Promise<TransactionResult> {\n if (!this.isConnected() || !this.walletClient) {\n throw new WalletNotConnectedError(\"evm\");\n }\n\n this.validateSteps(steps);\n\n try {\n let firstTxHash: string | undefined;\n\n for (const step of steps) {\n console.log(\n `Executing ${step.type} transaction on ${step.chainKey}...`\n );\n\n if (step.type === \"approve\") {\n const hash = await this.approveTransaction(step);\n console.log(`Approval transaction hash: ${hash}`);\n if (!firstTxHash) {\n firstTxHash = hash;\n onFirstHash?.(hash);\n }\n } else if (step.type === \"bridge\") {\n const hash = await this.executeTransaction(step);\n console.log(`Bridge transaction hash: ${hash}`);\n if (!firstTxHash) {\n firstTxHash = hash;\n onFirstHash?.(hash);\n }\n } else {\n throw new InvalidStepsError(\n \"evm\",\n `Unsupported step type: ${step.type}`\n );\n }\n }\n\n return {\n hash: firstTxHash,\n chainKey: steps[0]?.chainKey,\n };\n } catch (error) {\n if (error instanceof Error && error.name.includes(\"Error\")) {\n throw error;\n }\n\n throw toChainStrategyError(error, \"evm\", \"transaction\");\n }\n }\n\n async waitForCompletion(txHash: string): Promise<CompletionResult> {\n try {\n const publicClient = this.publicClient;\n if (!publicClient) {\n throw new ProviderNotAvailableError(\"evm\");\n }\n\n console.log(\n `Waiting for ${EVM_CONFIG.requiredConfirmations} confirmations for tx: ${txHash}`\n );\n\n // Use publicClient.waitForTransactionReceipt with confirmations and timeout\n const receipt = await publicClient.waitForTransactionReceipt({\n hash: txHash as `0x${string}`,\n confirmations: EVM_CONFIG.requiredConfirmations,\n timeout: EVM_CONFIG.timeout,\n });\n\n if (!receipt) {\n const error = new TransactionTimeoutError(\"evm\", txHash);\n return {\n completed: false,\n error: error.message,\n };\n }\n\n // Check transaction status\n if (receipt.status !== \"success\") {\n const error = new TransactionRevertedError(\"evm\", txHash);\n return {\n completed: false,\n error: error.message,\n };\n }\n\n console.log(\n `EVM transaction confirmed in block ${receipt.blockNumber} with ${EVM_CONFIG.requiredConfirmations} confirmations`\n );\n\n // Calculate actual fee paid\n let actualFeeValue: string | undefined;\n try {\n const gasUsed = receipt.gasUsed;\n const effectiveGasPrice = receipt.effectiveGasPrice;\n\n if (gasUsed && effectiveGasPrice) {\n const feeWei = gasUsed * effectiveGasPrice;\n const feeInNative = formatUnits(feeWei, 18); // EVM chains use 18 decimals\n actualFeeValue = feeInNative;\n\n console.log(`EVM transaction fee: ${feeInNative} (native token)`);\n }\n } catch (error) {\n console.warn(\"Failed to calculate actual fee:\", error);\n }\n\n // Optional: Check finality for additional security (currently logged only)\n // Uncomment to enable finality check for critical transactions\n // const isFinalized = await this.checkFinality(receipt.blockNumber);\n // if (!isFinalized) {\n // console.warn(`Transaction confirmed but block ${receipt.blockNumber} not yet finalized`);\n // }\n\n return {\n completed: true,\n actualFeeValue,\n // Symbol will be determined by the caller based on chain info\n };\n } catch (error) {\n // Handle transaction replacement (repriced, cancelled, or replaced)\n if (\n error &&\n typeof error === \"object\" &&\n \"code\" in error &&\n error.code === \"TRANSACTION_REPLACED\"\n ) {\n console.log(\n `Transaction was replaced: ${\n \"reason\" in error ? String(error.reason) : \"unknown\"\n }`\n );\n\n // Check if replacement transaction succeeded\n if (\"receipt\" in error && error.receipt) {\n const replacementReceipt = error.receipt as {\n status?: number;\n blockNumber?: number;\n };\n\n if (replacementReceipt.status === 1) {\n console.log(\n `Replacement transaction succeeded in block ${replacementReceipt.blockNumber}`\n );\n\n // Calculate fee for replacement transaction if available\n let actualFeeValue: string | undefined;\n try {\n const receipt = error.receipt as {\n gasUsed?: bigint;\n effectiveGasPrice?: bigint;\n };\n const gasUsed = receipt.gasUsed;\n const effectiveGasPrice = receipt.effectiveGasPrice;\n\n if (gasUsed && effectiveGasPrice) {\n const feeWei = gasUsed * effectiveGasPrice;\n const feeInNative = formatUnits(feeWei, 18);\n actualFeeValue = feeInNative;\n\n console.log(\n `Replacement transaction fee: ${feeInNative} (native token)`\n );\n }\n } catch (feeError) {\n console.warn(\"Failed to calculate replacement transaction fee:\", feeError);\n }\n\n return {\n completed: true,\n actualFeeValue,\n };\n } else {\n const chainError = new TransactionRevertedError(\"evm\", txHash);\n return {\n completed: false,\n error: chainError.message,\n };\n }\n }\n }\n\n const chainError = toChainStrategyError(\n error,\n \"evm\",\n \"waitForCompletion\"\n );\n return {\n completed: false,\n error: chainError.message,\n };\n }\n }\n\n private async executeTransaction(step: TransactionStep): Promise<string> {\n const walletClient = this.walletClient;\n if (!walletClient) {\n throw new WalletNotConnectedError(\"evm\");\n }\n\n if (!step.transaction) {\n throw new InvalidTransactionDataError(\n \"evm\",\n \"No transaction data in step\"\n );\n }\n\n const tx = step.transaction;\n\n const hash = await walletClient.sendTransaction({\n to: tx.to as `0x${string}`,\n data: tx.data as `0x${string}`,\n account: (tx.from || this.config.evmAddress) as `0x${string}`,\n value: tx.value ? BigInt(tx.value) : undefined,\n chain: walletClient.chain,\n });\n\n return hash;\n }\n\n private async approveTransaction(step: TransactionStep): Promise<string> {\n try {\n const walletClient = this.walletClient;\n const publicClient = this.publicClient;\n\n if (!walletClient || !publicClient) {\n throw new WalletNotConnectedError(\"evm\");\n }\n\n if (!step.transaction) {\n throw new InvalidTransactionDataError(\n \"evm\",\n \"No transaction data in step\"\n );\n }\n\n const tx = step.transaction;\n const tokenAddress = tx.to;\n\n if (\n tokenAddress?.toLowerCase() !== EVM_CONFIG.usdtAddress.toLowerCase()\n ) {\n console.log(\n `Token ${tokenAddress} is not USDT, using standard approve`\n );\n return this.executeTransaction(step);\n }\n\n const data = tx.data;\n if (!data || data.length < 138) {\n throw new InvalidTransactionDataError(\n \"evm\",\n \"Invalid approve transaction data for USDT\"\n );\n }\n\n const spenderAddress = (\"0x\" + data.slice(34, 74)) as `0x${string}`;\n const amount = BigInt(\"0x\" + data.slice(74, 138));\n\n // Read current allowance\n const currentAllowance = (await publicClient.readContract({\n address: tokenAddress as `0x${string}`,\n abi: ERC20_ABI,\n functionName: \"allowance\",\n args: [this.config.evmAddress as `0x${string}`, spenderAddress],\n })) as bigint;\n\n if (currentAllowance > 0n) {\n try {\n // Reset allowance to 0\n const resetHash = await walletClient.writeContract({\n address: tokenAddress as `0x${string}`,\n abi: ERC20_ABI,\n functionName: \"approve\",\n args: [spenderAddress, 0n],\n account: this.config.evmAddress as `0x${string}`,\n chain: walletClient.chain,\n });\n\n // Wait for reset transaction to be confirmed\n await publicClient.waitForTransactionReceipt({\n hash: resetHash,\n });\n } catch (resetError) {\n throw new TransactionFailedError(\n \"evm\",\n `Failed to reset USDT allowance: ${\n resetError instanceof Error ? resetError.message : \"Unknown error\"\n }`,\n undefined,\n resetError instanceof Error ? resetError : undefined\n );\n }\n } else {\n console.log(\"USDT allowance is 0, no reset needed\");\n }\n\n try {\n // Approve new amount\n const approveHash = await walletClient.writeContract({\n address: tokenAddress as `0x${string}`,\n abi: ERC20_ABI,\n functionName: \"approve\",\n args: [spenderAddress, amount],\n account: this.config.evmAddress as `0x${string}`,\n chain: walletClient.chain,\n });\n\n return approveHash;\n } catch (approveError) {\n throw new TransactionFailedError(\n \"evm\",\n `Failed to approve USDT: ${\n approveError instanceof Error\n ? approveError.message\n : \"Unknown error\"\n }`,\n undefined,\n approveError instanceof Error ? approveError : undefined\n );\n }\n } catch (error) {\n if (error instanceof Error && error.name.includes(\"Error\")) {\n throw error;\n }\n throw toChainStrategyError(error, \"evm\", \"approve\");\n }\n }\n\n async checkAllowance(\n tokenAddress: string,\n spenderAddress: string,\n amount: string\n ): Promise<boolean> {\n try {\n const publicClient = this.publicClient;\n if (!publicClient) {\n return false;\n }\n\n const allowance = (await publicClient.readContract({\n address: tokenAddress as `0x${string}`,\n abi: ERC20_ABI,\n functionName: \"allowance\",\n args: [\n this.config.evmAddress as `0x${string}`,\n spenderAddress as `0x${string}`,\n ],\n })) as bigint;\n\n const decimals = (await publicClient.readContract({\n address: tokenAddress as `0x${string}`,\n abi: ERC20_ABI,\n functionName: \"decimals\",\n })) as number;\n\n const requiredAmount = parseUnits(amount, decimals);\n\n return allowance >= requiredAmount;\n } catch (error) {\n console.error(\"Error checking allowance:\", error);\n return false;\n }\n }\n\n /**\n * Check if a block has reached finality status (optional, for critical transactions)\n * This is more stringent than confirmations and protects against long-range reorgs\n *\n * Usage: Call this method after waitForCompletion if you need additional security\n * for high-value transactions. The method checks if the block has been marked as\n * \"finalized\" by the Ethereum consensus layer (2/3 of validators).\n *\n * @param blockNumber - The block number to check for finality\n * @returns true if the block is finalized, false otherwise\n */\n async checkFinality(blockNumber: bigint): Promise<boolean> {\n try {\n const publicClient = this.publicClient;\n if (!publicClient) {\n return false;\n }\n\n // Try to get the finalized block\n const finalizedBlock = await publicClient.getBlock({\n blockTag: \"finalized\",\n });\n\n if (!finalizedBlock) {\n console.debug(\n \"Finalized block not available (pre-merge or unsupported)\"\n );\n return false;\n }\n\n // Check if our transaction block is finalized\n const isFinalized = blockNumber <= finalizedBlock.number;\n\n if (isFinalized) {\n console.log(\n `Block ${blockNumber} has reached finality (finalized block: ${finalizedBlock.number})`\n );\n } else {\n console.debug(\n `Block ${blockNumber} not yet finalized (finalized block: ${finalizedBlock.number})`\n );\n }\n\n return isFinalized;\n } catch (error) {\n console.debug(\"Error checking finality:\", error);\n return false;\n }\n }\n}\n","import type { TonConnectUI } from \"@tonconnect/ui-react\";\nimport {\n Cell,\n loadMessage,\n storeMessage,\n beginCell,\n Address,\n type Message,\n} from \"@ton/core\";\nimport type { TonClient } from \"@ton/ton\";\nimport type {\n ChainStrategy,\n NetworkType,\n TransactionResult,\n CompletionResult,\n TransactionStrategyContext,\n} from \"./chain-strategy-interface\";\nimport type { TransactionStep, Token } from \"../types\";\nimport type { WalletBalances } from \"../api/balances\";\nimport { getTonBalances } from \"../api/balances\";\nimport { TON_CONFIG, getTonClient } from \"./config\";\nimport {\n WalletNotConnectedError,\n InvalidStepsError,\n InvalidTransactionDataError,\n TransactionFailedError,\n toChainStrategyError,\n} from \"./errors\";\n\ninterface TonMessage {\n address: string;\n amount: string;\n payload: string;\n}\n\nexport interface TonChainStrategyConfig {\n tonConnectUI: TonConnectUI | null;\n tonAddress: string | null;\n tonClient?: TonClient;\n tonApiKey?: string;\n}\n\nexport class TonChainStrategy implements ChainStrategy {\n private config: TonChainStrategyConfig;\n\n constructor(config: TonChainStrategyConfig) {\n this.config = config;\n }\n\n canHandle(chainKey: string): boolean {\n return chainKey.toLowerCase() === \"ton\";\n }\n\n getNetworkType(): NetworkType {\n return \"ton\";\n }\n\n getName(): string {\n return \"TON Chain Strategy\";\n }\n\n async connect(): Promise<void> {\n await this.config.tonConnectUI?.openModal();\n }\n\n async disconnect(): Promise<void> {\n await this.config.tonConnectUI?.disconnect();\n }\n\n isConnected(): boolean {\n return !!this.config.tonAddress;\n }\n\n isConnecting(): boolean {\n return false;\n }\n\n getAccount(): string | null {\n return this.config.tonAddress || null;\n }\n\n getError(): string | null {\n return null;\n }\n\n isInitialized(): boolean {\n return true;\n }\n\n getConnectLabel(t: (key: string) => string): string {\n return t(\"wallets.connectTonWallet\");\n }\n\n getClient(): TonClient {\n return getTonClient(this.config.tonClient, this.config.tonApiKey);\n }\n\n async getBalances(address: string, tokens: Token[]): Promise<WalletBalances> {\n return await getTonBalances(\n address,\n tokens,\n this.config.tonClient,\n this.config.tonApiKey\n );\n }\n\n isAddressValid(address?: string): boolean {\n if (!address) return false;\n return true;\n }\n\n validateSteps(steps: TransactionStep[]): void {\n if (!steps || steps.length === 0) {\n throw new InvalidStepsError(\"ton\", \"No transaction steps provided\");\n }\n\n const tonStep = steps.find(\n (s) => s.chainKey === \"ton\" && s.type === \"bridge\"\n );\n if (!tonStep) {\n throw new InvalidStepsError(\"ton\", \"No TON bridge step found\");\n }\n\n const messages = tonStep.transaction?.messages;\n if (!messages || messages.length === 0) {\n throw new InvalidTransactionDataError(\n \"ton\",\n \"No messages found in TON bridge step\"\n );\n }\n\n for (const msg of messages) {\n if (!msg.address || !msg.amount || !msg.payload) {\n throw new InvalidTransactionDataError(\n \"ton\",\n \"Invalid message format in TON transaction\"\n );\n }\n }\n }\n\n async executeSteps(\n steps: TransactionStep[],\n _context: TransactionStrategyContext,\n onFirstHash?: (hash: string) => void\n ): Promise<TransactionResult> {\n if (!this.isConnected() || !this.config.tonConnectUI) {\n throw new WalletNotConnectedError(\"ton\");\n }\n\n this.validateSteps(steps);\n\n const tonStep = steps.find(\n (s) => s.chainKey === \"ton\" && s.type === \"bridge\"\n );\n if (!tonStep || !tonStep.transaction?.messages) {\n throw new InvalidStepsError(\"ton\", \"Invalid TON transaction step\");\n }\n\n try {\n const tonMessages: TonMessage[] = tonStep.transaction.messages.map(\n (msg) => ({\n address: msg.address,\n amount: msg.amount,\n payload: msg.payload,\n })\n );\n\n const transaction = {\n validUntil: Math.floor(Date.now() / 1000) + TON_CONFIG.validUntil,\n messages: tonMessages,\n };\n\n const result = await this.config.tonConnectUI.sendTransaction(\n transaction\n );\n\n const bocBase64 = result.boc;\n\n // Parse BOC to get readable hex hash\n try {\n const inMessage = loadMessage(Cell.fromBase64(bocBase64).beginParse());\n const messageHash = this.getNormalizedExtMessageHash(inMessage);\n const hexHash = messageHash.toString(\"hex\");\n\n onFirstHash?.(hexHash);\n\n return {\n chainKey: \"ton\",\n hash: hexHash,\n };\n } catch (error) {\n console.error(\"Error parsing BOC to hex hash:\", error);\n // Fallback to BOC if parsing fails\n onFirstHash?.(bocBase64);\n return {\n chainKey: \"ton\",\n hash: bocBase64,\n };\n }\n } catch (error) {\n throw toChainStrategyError(error, \"ton\", \"transaction\");\n }\n }\n\n async waitForCompletion(txHash: string): Promise<CompletionResult> {\n try {\n const result = await this.checkTonTransaction(\n txHash,\n TON_CONFIG.timeout\n );\n\n if (!result.confirmed) {\n const error = new TransactionFailedError(\n \"ton\",\n \"Transaction not confirmed on-chain\",\n txHash\n );\n return {\n completed: false,\n error: error.message,\n };\n }\n\n return {\n completed: true,\n actualFeeValue: result.fee,\n actualFeeSymbol: \"TON\",\n };\n } catch (error) {\n const chainError = toChainStrategyError(\n error,\n \"ton\",\n \"waitForCompletion\"\n );\n return {\n completed: false,\n error: chainError.message,\n };\n }\n }\n\n private getNormalizedExtMessageHash(message: Message): Buffer {\n if (message.info.type !== \"external-in\") {\n throw new Error(`Expected external-in message, got ${message.info.type}`);\n }\n\n // TEP-467: Normalize message by removing src, importFee, and init\n const normalizedInfo = {\n ...message.info,\n src: undefined,\n importFee: 0n,\n };\n\n const normalizedMessage = {\n ...message,\n info: normalizedInfo,\n init: null,\n };\n\n // Serialize and return hash\n return beginCell()\n .store(storeMessage(normalizedMessage, { forceRef: true }))\n .endCell()\n .hash();\n }\n\n private async checkTonTransaction(\n hashOrBoc: string,\n timeoutMs = 360_000\n ): Promise<{ confirmed: boolean; fee?: string }> {\n const deadline = Date.now() + timeoutMs;\n\n // Get TonClient instance (custom or shared singleton)\n const client = getTonClient(this.config.tonClient, this.config.tonApiKey);\n\n try {\n let targetMessageHash: Buffer;\n let accountAddress: Address;\n\n try {\n const inMessage = loadMessage(Cell.fromBase64(hashOrBoc).beginParse());\n\n if (inMessage.info.type !== \"external-in\") {\n console.debug(\n \"Expected external-in message, got:\",\n inMessage.info.type\n );\n return { confirmed: false };\n }\n\n accountAddress = inMessage.info.dest;\n targetMessageHash = this.getNormalizedExtMessageHash(inMessage);\n } catch {\n targetMessageHash = Buffer.from(hashOrBoc, \"hex\");\n\n if (!this.config.tonAddress) {\n console.debug(\"No wallet address available for hex hash lookup\");\n return { confirmed: false };\n }\n\n accountAddress = Address.parse(this.config.tonAddress);\n }\n\n let lt: string | undefined = undefined;\n let hash: string | undefined = undefined;\n\n while (Date.now() < deadline) {\n try {\n const transactions = await client.getTransactions(accountAddress, {\n lt,\n hash,\n limit: 10,\n archival: true,\n });\n\n if (transactions.length === 0) {\n // No more transactions, wait and reset pagination\n await new Promise((r) => setTimeout(r, TON_CONFIG.pollingInterval));\n lt = undefined;\n hash = undefined;\n continue;\n }\n\n // Check each transaction\n for (const tx of transactions) {\n if (tx.inMessage?.info.type === \"external-in\") {\n const txInMessageHash = this.getNormalizedExtMessageHash(\n tx.inMessage\n );\n\n // Compare normalized hashes\n if (txInMessageHash.equals(targetMessageHash)) {\n console.debug(\"Transaction found by in-message hash\");\n\n // Extract fee from transaction\n const totalFees = tx.totalFees;\n const feeInTon = Number(totalFees) / 1_000_000_000; // Convert nanoton to TON\n\n console.log(`TON transaction fee: ${feeInTon} TON`);\n\n return {\n confirmed: true,\n fee: feeInTon.toString(),\n };\n }\n }\n }\n\n // Move to next page\n const lastTx = transactions[transactions.length - 1];\n lt = lastTx.lt.toString();\n hash = lastTx.hash().toString(\"base64\");\n\n // Add delay before next iteration to avoid excessive API calls\n await new Promise((r) => setTimeout(r, TON_CONFIG.pollingInterval));\n } catch (error) {\n console.debug(\"Error fetching transactions:\", error);\n await new Promise((r) => setTimeout(r, TON_CONFIG.pollingInterval));\n\n // Reset pagination on error to retry from the beginning\n lt = undefined;\n hash = undefined;\n }\n }\n\n return { confirmed: false };\n } catch (error) {\n console.debug(\"Error parsing BOC or checking transaction:\", error);\n return { confirmed: false };\n }\n }\n}\n","import {\n TronLinkAdapterName,\n type TronWeb as TronWebType,\n} from \"@tronweb3/tronwallet-adapters\";\nimport type {\n ChainStrategy,\n NetworkType,\n TransactionResult,\n CompletionResult,\n TransactionStrategyContext,\n} from \"./chain-strategy-interface\";\nimport type { Token, TransactionStep } from \"../types\";\nimport type { WalletBalances } from \"../api/balances\";\nimport { getTronBalances } from \"../api/balances\";\nimport { TRON_CONFIG } from \"./config\";\nimport {\n WalletNotConnectedError,\n WalletNotFoundError,\n ProviderNotAvailableError,\n InvalidStepsError,\n InvalidTransactionDataError,\n InvalidAddressError,\n TransactionFailedError,\n TransactionRevertedError,\n TransactionTimeoutError,\n toChainStrategyError,\n} from \"./errors\";\nimport type { Types } from \"tronweb\";\n\ntype ParsedTx =\n | { kind: \"approve\"; token: string; spender: string; amount: string }\n | { kind: \"transfer\"; token: string; to: string; amount: string }\n | {\n kind: \"raw_call\";\n contract: string;\n input: string;\n callValue?: number;\n feeLimit?: number;\n }\n | { kind: \"native\"; to: string; amountSun: number };\n\ninterface TronApproveStepExtra {\n tokenAddress?: string;\n spenderAddress?: string;\n amount?: string;\n}\n\ninterface TronTransferStepExtra {\n tokenAddress?: string;\n toAddress?: string;\n amount?: string;\n}\n\ninterface TronTxLike {\n to?: string;\n data?: string;\n value?: string | number | bigint;\n}\n\nexport interface TronChainStrategyConfig {\n tronAddress: string | null;\n tronConnected: boolean;\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n tronSelect: (adapterName: any) => void;\n tronConnect: () => Promise<void>;\n tronDisconnect: () => Promise<void>;\n}\n\nexport class TronChainStrategy implements ChainStrategy {\n private config: TronChainStrategyConfig;\n\n constructor(config: TronChainStrategyConfig) {\n this.config = config;\n }\n\n canHandle(chainKey: string): boolean {\n return chainKey.toLowerCase() === \"tron\";\n }\n\n getNetworkType(): NetworkType {\n return \"tron\";\n }\n\n getName(): string {\n return \"TRON Chain Strategy\";\n }\n\n async connect(): Promise<void> {\n // Check if TronLink is actually installed (not Bybit)\n if (!this.isTronLinkInstalled()) {\n // Open TronLink installation page in a new tab\n if (typeof window !== \"undefined\") {\n window.open(\"https://www.tronlink.org/\", \"_blank\");\n }\n throw new WalletNotFoundError(\n \"tron\",\n \"TronLink wallet is not installed. Please install TronLink extension and try again.\"\n );\n }\n\n this.config.tronSelect(TronLinkAdapterName);\n\n await new Promise((resolve) => setTimeout(resolve, 100));\n await this.config.tronConnect();\n }\n\n async disconnect(): Promise<void> {\n await this.config.tronDisconnect();\n }\n\n isConnected(): boolean {\n return !!this.config.tronConnected;\n }\n\n isConnecting(): boolean {\n return false;\n }\n\n getAccount(): string | null {\n return this.config.tronAddress || null;\n }\n\n getError(): string | null {\n return null;\n }\n\n isInitialized(): boolean {\n return true;\n }\n\n getConnectLabel(t: (key: string) => string): string {\n return t(\"wallets.connectTronWallet\");\n }\n\n async getBalances(address: string, tokens: Token[]): Promise<WalletBalances> {\n const tronWeb = this.getClient();\n if (!tronWeb) return {};\n return await getTronBalances(tronWeb, address, tokens);\n }\n\n isAddressValid(address?: string): boolean {\n if (!address) return false;\n return /^T[1-9A-HJ-NP-Za-km-z]{33}$/.test(address);\n }\n\n validateSteps(steps: TransactionStep[]): void {\n console.log(\"validateSteps\");\n\n if (!steps?.length) {\n throw new InvalidStepsError(\"tron\", \"No transaction steps provided\");\n }\n\n const tronStep = steps.find(\n (s) => String(s.chainKey).toLowerCase() === \"tron\"\n );\n if (!tronStep) {\n throw new InvalidStepsError(\"tron\", \"No TRON step found in quote\");\n }\n\n if (!tronStep.transaction) {\n throw new InvalidTransactionDataError(\"tron\", \"Missing transaction data\");\n }\n }\n\n async executeSteps(\n steps: TransactionStep[],\n _context: TransactionStrategyContext,\n onFirstHash?: (hash: string) => void\n ): Promise<TransactionResult> {\n const tronWeb = this.getClient();\n if (!tronWeb) {\n throw new ProviderNotAvailableError(\"tron\");\n }\n\n if (!this.isConnected()) {\n throw new WalletNotConnectedError(\"tron\");\n }\n\n this.validateSteps(steps);\n\n const fromB58 = tronWeb.defaultAddress?.base58 as string;\n if (!fromB58) {\n throw new WalletNotConnectedError(\"tron\");\n }\n\n let lastTxId: string | undefined;\n let isFirstHash = true;\n\n for (const step of steps) {\n if (String(step.chainKey).toLowerCase() !== \"tron\") continue;\n\n const tx = step.transaction;\n if (!tx) {\n throw new InvalidTransactionDataError(\n \"tron\",\n \"Missing transaction data\"\n );\n }\n\n const hexData = typeof tx?.data === \"string\" ? tx.data : \"\";\n const parsed = this.parseTronStep(step, tx, hexData);\n\n let unsigned: Types.Transaction;\n switch (parsed.kind) {\n case \"approve\": {\n const tokenB58 = this.toBase58(parsed.token, tronWeb);\n const spenderB58 = this.toBase58(parsed.spender, tronWeb);\n unsigned = await this.buildApprove(tronWeb, {\n token: tokenB58,\n spender: spenderB58,\n amount: parsed.amount,\n from: fromB58,\n feeLimit: TRON_CONFIG.feeLimit,\n });\n break;\n }\n case \"transfer\": {\n const tokenB58 = this.toBase58(parsed.token, tronWeb);\n const toB58 = this.toBase58(parsed.to, tronWeb);\n unsigned = await this.buildTransferTrc20(tronWeb, {\n token: tokenB58,\n to: toB58,\n amount: parsed.amount,\n from: fromB58,\n feeLimit: TRON_CONFIG.feeLimit,\n });\n break;\n }\n case \"native\": {\n const toB58 = this.toBase58(parsed.to, tronWeb);\n unsigned = await this.buildTransferTrx(tronWeb, {\n to: toB58,\n amountSun: parsed.amountSun,\n from: fromB58,\n });\n break;\n }\n case \"raw_call\": {\n const contractB58 = this.toBase58(parsed.contract, tronWeb);\n unsigned = await this.buildRawCall(tronWeb, {\n contract: contractB58,\n input: parsed.input,\n callValue: parsed.callValue,\n feeLimit: parsed.feeLimit,\n from: fromB58,\n });\n break;\n }\n default:\n throw new InvalidStepsError(\n \"tron\",\n \"Unsupported TRON parsed tx kind\"\n );\n }\n\n const { txid } = await this.signAndBroadcast(tronWeb, unsigned);\n lastTxId = txid;\n\n if (isFirstHash) {\n onFirstHash?.(txid);\n isFirstHash = false;\n }\n }\n\n if (!lastTxId) {\n throw new TransactionFailedError(\n \"tron\",\n \"No TRON transaction was executed\"\n );\n }\n\n return { hash: lastTxId, chainKey: \"tron\" };\n }\n\n async waitForCompletion(txHash: string): Promise<CompletionResult> {\n try {\n const tronWeb = this.getClient();\n if (!tronWeb) {\n throw new ProviderNotAvailableError(\"tron\");\n }\n\n console.log(\n `Waiting for ${TRON_CONFIG.requiredConfirmations} confirmations for TRON tx: ${txHash}`\n );\n\n const deadline = Date.now() + TRON_CONFIG.timeout;\n let txBlockNumber: number | null = null;\n let actualFeeTrx: number | null = null;\n\n while (Date.now() < deadline && !txBlockNumber) {\n try {\n const info = await tronWeb.trx.getTransactionInfo(txHash);\n\n if (info && info.blockNumber) {\n const result = info.receipt?.result;\n if (result !== \"SUCCESS\") {\n const msg = this.hexToAscii(info.resMessage) || null;\n let reason: string | null = msg;\n const cr = info.contractResult?.[0];\n if (cr && /^0x?08c379a0/i.test(cr)) {\n try {\n const clean = cr.replace(/^0x/, \"\");\n const len = parseInt(clean.slice(8 + 64, 8 + 64 + 64), 16);\n const strHex = clean.slice(\n 8 + 64 + 64,\n 8 + 64 + 64 + len * 2\n );\n const str = this.hexToAscii(\"0x\" + strHex);\n if (str) reason = str;\n } catch (e) {\n console.debug(\"TRON revert string decode error\", e);\n }\n }\n\n const error = new TransactionRevertedError(\n \"tron\",\n txHash,\n reason || \"Unknown error\"\n );\n return {\n completed: false,\n error: error.message,\n };\n }\n\n txBlockNumber = info.blockNumber;\n\n // Extract actual fee from transaction info\n const feeSun = info.fee || 0;\n actualFeeTrx = feeSun / 1_000_000; // Convert SUN to TRX\n console.log(`TRON transaction found in block ${txBlockNumber}, fee: ${actualFeeTrx} TRX`);\n }\n } catch (e) {\n console.debug(\"TRON getTransactionInfo error:\", e);\n }\n\n if (!txBlockNumber) {\n await new Promise((r) => setTimeout(r, TRON_CONFIG.pollingInterval));\n }\n }\n\n if (!txBlockNumber) {\n const error = new TransactionTimeoutError(\"tron\", txHash);\n return {\n completed: false,\n error: error.message,\n };\n }\n\n let confirmations = 0;\n while (Date.now() < deadline) {\n try {\n const currentBlock = await tronWeb.trx.getCurrentBlock();\n const currentBlockNumber =\n currentBlock?.block_header?.raw_data?.number;\n\n if (currentBlockNumber) {\n confirmations = currentBlockNumber - txBlockNumber;\n\n if (confirmations >= TRON_CONFIG.requiredConfirmations) {\n console.log(\n `TRON transaction confirmed in block ${txBlockNumber} with ${confirmations} confirmations`\n );\n return {\n completed: true,\n actualFeeValue: actualFeeTrx?.toString(),\n actualFeeSymbol: \"TRX\",\n };\n }\n\n console.log(\n `TRON transaction confirmations: ${confirmations}/${TRON_CONFIG.requiredConfirmations}`\n );\n }\n } catch (e) {\n console.debug(\"TRON getCurrentBlock error:\", e);\n }\n\n await new Promise((r) => setTimeout(r, TRON_CONFIG.pollingInterval));\n }\n\n const error = new TransactionTimeoutError(\"tron\", txHash);\n return {\n completed: false,\n error: error.message,\n };\n } catch (error) {\n const chainError = toChainStrategyError(\n error,\n \"tron\",\n \"waitForCompletion\"\n );\n return {\n completed: false,\n error: chainError.message,\n };\n }\n }\n\n getClient(): TronWebType | undefined {\n return typeof window !== \"undefined\" ? window.tronWeb : undefined;\n }\n\n /**\n * Check if TronLink wallet is actually installed\n * This excludes Bybit Wallet which also injects tronLink for compatibility\n */\n private isTronLinkInstalled(): boolean {\n if (typeof window === \"undefined\") {\n return false;\n }\n\n // Check if Bybit Wallet is installed (it has its own namespace)\n // If Bybit is installed, we don't want to treat it as TronLink\n const hasBybitWallet =\n typeof window.bybitWallet !== \"undefined\" &&\n typeof window.bybitWallet.tronLink !== \"undefined\";\n\n // If only Bybit is available, TronLink is not installed\n if (hasBybitWallet && !window.tronLink) {\n return false;\n }\n\n // Check if window.tronLink exists\n if (!window.tronLink) {\n return false;\n }\n\n // If both are installed, prefer TronLink\n // TronLink should have the tronLink property directly on window\n // while Bybit has it under window.bybitWallet.tronLink\n return true;\n }\n\n private hexToAscii(h?: string): string | null {\n if (!h) return null;\n const clean = h.replace(/^0x/, \"\");\n const bytes = clean.match(/.{1,2}/g) || [];\n try {\n return bytes.map((b) => String.fromCharCode(parseInt(b, 16))).join(\"\");\n } catch {\n return null;\n }\n }\n\n private toBase58(addr: string, tronWeb: TronWebType): string {\n if (!addr) {\n throw new InvalidAddressError(\"tron\", addr);\n }\n if (addr.startsWith(\"T\")) return addr;\n if (addr.startsWith(\"41\")) return tronWeb.address.fromHex(addr);\n if (addr.startsWith(\"0x\"))\n return tronWeb.address.fromHex(\"41\" + addr.slice(2));\n throw new InvalidAddressError(\"tron\", addr);\n }\n\n private parseTronStep(\n step: TransactionStep & (TronApproveStepExtra | TronTransferStepExtra),\n tx: TronTxLike,\n hexData: string\n ): ParsedTx {\n const cleanHex = (hexData ?? \"\").replace(/^0x/, \"\");\n\n if (step?.type === \"approve\") {\n const fromPb = this.extractApproveFromProtobuf(cleanHex);\n if (fromPb) {\n return {\n kind: \"approve\",\n token: fromPb.tokenAddress,\n spender: fromPb.spenderAddress,\n amount: fromPb.amount,\n };\n }\n const s = step as TransactionStep & TronApproveStepExtra;\n if (s.tokenAddress && s.spenderAddress && s.amount) {\n return {\n kind: \"approve\",\n token: s.tokenAddress,\n spender: s.spenderAddress,\n amount: s.amount,\n };\n }\n if (tx?.to && tx?.data) {\n return {\n kind: \"approve\",\n token: tx.to,\n spender: this.extractSpenderFromTxData(tx.data),\n amount: this.extractAmountFromTxData(tx.data),\n };\n }\n throw new InvalidTransactionDataError(\n \"tron\",\n \"Cannot parse approve transaction\"\n );\n }\n\n if (step?.type === \"transfer\" || step?.type === \"bridge\") {\n const s = step as TransactionStep & TronTransferStepExtra;\n if (s.tokenAddress && s.toAddress && s.amount) {\n return {\n kind: \"transfer\",\n token: s.tokenAddress,\n to: s.toAddress,\n amount: s.amount,\n };\n }\n if (tx?.to && tx?.data) {\n return {\n kind: \"transfer\",\n token: tx.to,\n to: this.extractRecipientFromTxData(tx.data),\n amount: this.extractAmountFromTxData(tx.data),\n };\n }\n const raw = this.extractContractAndInputFromProtobuf(cleanHex);\n if (raw) {\n return {\n kind: \"raw_call\",\n contract: raw.contractAddress,\n input: raw.input,\n callValue: raw.callValue,\n feeLimit: raw.feeLimit,\n };\n }\n throw new InvalidTransactionDataError(\n \"tron\",\n \"Cannot parse transfer/bridge transaction\"\n );\n }\n\n if (tx?.to && tx?.value && !tx?.data) {\n const v = BigInt(tx.value.toString());\n const amountSun = Number(v);\n if (!Number.isFinite(amountSun)) {\n throw new InvalidTransactionDataError(\"tron\", \"Invalid TRX value\");\n }\n return { kind: \"native\", to: tx.to, amountSun };\n }\n\n const raw = this.extractContractAndInputFromProtobuf(cleanHex);\n if (raw) {\n return {\n kind: \"raw_call\",\n contract: raw.contractAddress,\n input: raw.input,\n callValue: raw.callValue,\n feeLimit: raw.feeLimit,\n };\n }\n\n throw new InvalidTransactionDataError(\n \"tron\",\n `Unsupported TRON step type: ${step?.type ?? \"unknown\"}`\n );\n }\n\n private extractSpenderFromTxData(data: string): string {\n const clean = data.replace(/^0x/, \"\");\n if (clean.length < 74) {\n throw new InvalidTransactionDataError(\n \"tron\",\n \"Invalid transaction data length\"\n );\n }\n return \"41\" + clean.slice(32, 72);\n }\n\n private extractAmountFromTxData(data: string): string {\n const clean = data.replace(/^0x/, \"\");\n if (clean.length < 138) {\n throw new InvalidTransactionDataError(\n \"tron\",\n \"Invalid transaction data length\"\n );\n }\n const amountHex = clean.slice(72, 136);\n return BigInt(\"0x\" + amountHex).toString();\n }\n\n private extractRecipientFromTxData(data: string): string {\n const clean = data.replace(/^0x/, \"\");\n if (clean.length < 74) {\n throw new InvalidTransactionDataError(\n \"tron\",\n \"Invalid transaction data length\"\n );\n }\n return \"41\" + clean.slice(32, 72);\n }\n\n private extractContractAndInputFromProtobuf(hexData: string): {\n contractAddress: string;\n input: string;\n callValue?: number;\n feeLimit?: number;\n } | null {\n try {\n const h = hexData.replace(/^0x/, \"\");\n const contractAddressMatch = h.match(/121541([a-fA-F0-9]{40})/);\n if (!contractAddressMatch) return null;\n const contractAddress = \"41\" + contractAddressMatch[1];\n\n const startIdx =\n (contractAddressMatch.index ?? 0) + contractAddressMatch[0].length;\n const rest = h.slice(startIdx);\n\n const toBytes = (hex: string): Uint8Array =>\n new Uint8Array(hex.match(/.{1,2}/g)?.map((b) => parseInt(b, 16)) || []);\n const bytes = toBytes(rest);\n\n let i = 0;\n let callValue: number | undefined;\n\n if (bytes[i] === 0x18) {\n i += 1;\n let val = 0;\n let shift = 0;\n while (i < bytes.length) {\n const b = bytes[i++];\n val |= (b & 0x7f) << shift;\n if (b < 0x80) break;\n shift += 7;\n }\n callValue = val;\n }\n\n if (bytes[i] !== 0x22) {\n return { contractAddress, input: \"0x\", callValue };\n }\n i += 1;\n let len = 0;\n let shift = 0;\n while (i < bytes.length) {\n const b = bytes[i++];\n len |= (b & 0x7f) << shift;\n if (b < 0x80) break;\n shift += 7;\n }\n\n const dataBytes = bytes.slice(i, i + len);\n const input =\n \"0x\" +\n Array.from(dataBytes)\n .map((b) => b.toString(16).padStart(2, \"0\"))\n .join(\"\");\n\n return { contractAddress, input, callValue };\n } catch {\n return null;\n }\n }\n\n private extractApproveFromProtobuf(hexData: string): {\n tokenAddress: string;\n spenderAddress: string;\n amount: string;\n } | null {\n try {\n const h = hexData.replace(/^0x/, \"\");\n const approveSelector = \"095ea7b3\";\n if (!h.includes(approveSelector)) return null;\n\n const contractAddressMatch = h.match(/121541([a-fA-F0-9]{40})/);\n if (!contractAddressMatch) return null;\n\n const tokenAddress = \"41\" + contractAddressMatch[1];\n const approveIndex = h.indexOf(approveSelector);\n if (approveIndex === -1) return null;\n\n const dataAfterSelector = h.slice(approveIndex + 8);\n if (dataAfterSelector.length < 128) return null;\n\n const spenderPadded = dataAfterSelector.slice(0, 64);\n const spenderHex = \"41\" + spenderPadded.slice(-40);\n\n const amountHex = dataAfterSelector.slice(64, 128).replace(/^0+/, \"\");\n let amount = \"0\";\n if (amountHex) amount = BigInt(\"0x\" + amountHex).toString();\n\n if (amount === \"0\") {\n const hexEnd = h.slice(-64).replace(/^0+/, \"\");\n if (hexEnd && hexEnd !== \"0\" && hexEnd.length <= 16) {\n amount = BigInt(\"0x\" + hexEnd).toString();\n }\n }\n\n return { tokenAddress, spenderAddress: spenderHex, amount };\n } catch {\n return null;\n }\n }\n\n private async buildApprove(\n tronWeb: TronWebType,\n p: {\n token: string;\n spender: string;\n amount: string;\n from: string;\n feeLimit?: number;\n }\n ) {\n const res = await tronWeb.transactionBuilder.triggerSmartContract(\n p.token,\n \"approve(address,uint256)\",\n { feeLimit: p.feeLimit ?? TRON_CONFIG.feeLimit, callValue: 0 },\n [\n { type: \"address\", value: p.spender },\n { type: \"uint256\", value: p.amount },\n ],\n p.from\n );\n if (!res?.transaction) {\n throw new TransactionFailedError(\n \"tron\",\n \"Failed to build approve transaction\"\n );\n }\n return res.transaction;\n }\n\n private async buildTransferTrc20(\n tronWeb: TronWebType,\n p: {\n token: string;\n to: string;\n amount: string;\n from: string;\n feeLimit?: number;\n }\n ) {\n const res = await tronWeb.transactionBuilder.triggerSmartContract(\n p.token,\n \"transfer(address,uint256)\",\n { feeLimit: p.feeLimit ?? TRON_CONFIG.feeLimit, callValue: 0 },\n [\n { type: \"address\", value: p.to },\n { type: \"uint256\", value: p.amount },\n ],\n p.from\n );\n if (!res?.transaction) {\n throw new TransactionFailedError(\n \"tron\",\n \"Failed to build transfer transaction\"\n );\n }\n return res.transaction;\n }\n\n private async buildTransferTrx(\n tronWeb: TronWebType,\n p: { to: string; amountSun: number; from?: string }\n ) {\n return await tronWeb.transactionBuilder.sendTrx(p.to, p.amountSun, p.from);\n }\n\n private async buildRawCall(\n tronWeb: TronWebType,\n p: {\n contract: string;\n input: string;\n callValue?: number;\n feeLimit?: number;\n from: string;\n }\n ) {\n const res = await tronWeb.transactionBuilder.triggerSmartContract(\n p.contract,\n \"\",\n {\n feeLimit: p.feeLimit ?? TRON_CONFIG.feeLimit,\n callValue: p.callValue ?? 0,\n input: p.input.replace(/^0x/, \"\"),\n },\n [],\n p.from\n );\n if (!res?.transaction) {\n throw new TransactionFailedError(\n \"tron\",\n \"Failed to build raw call transaction\"\n );\n }\n return res.transaction;\n }\n\n private async signAndBroadcast(\n tronWeb: TronWebType,\n unsignedTx: Types.Transaction\n ) {\n const signed = await tronWeb.trx.sign(unsignedTx);\n const sent = await tronWeb.trx.sendRawTransaction(signed);\n if (!sent?.result || !sent?.txid) {\n throw new TransactionFailedError(\n \"tron\",\n \"Broadcast failed: \" + JSON.stringify(sent)\n );\n }\n return { txid: sent.txid as string };\n }\n\n /**\n * Check if a transaction has been solidified (confirmed by solidityNode)\n * This is an additional check for critical transactions to ensure they are\n * truly confirmed and available through the solidityNode API.\n *\n * Usage: Call this method after waitForCompletion for high-value transactions\n * to get additional assurance that the transaction is solidified.\n *\n * @param txHash - Transaction hash to check\n * @returns true if the transaction is solidified, false otherwise\n */\n async checkSolidified(txHash: string): Promise<boolean> {\n try {\n const tronWeb = this.getClient();\n if (!tronWeb) {\n return false;\n }\n\n const info = await tronWeb.trx.getTransactionInfo(txHash);\n\n if (!info || !info.blockNumber) {\n console.debug(\n \"Transaction not yet solidified (no blockNumber in info)\"\n );\n return false;\n }\n\n const result = info.receipt?.result;\n if (result === \"SUCCESS\") {\n console.log(\n `Transaction ${txHash} is solidified in block ${info.blockNumber}`\n );\n return true;\n }\n\n console.debug(`Transaction solidified but result is: ${result}`);\n return false;\n } catch (error) {\n console.debug(\"Error checking solidified status:\", error);\n return false;\n }\n }\n}\n","import { useMemo, type ReactNode } from \"react\";\nimport type { TonConnectUI } from \"@tonconnect/ui-react\";\nimport type { TonClient } from \"@ton/ton\";\nimport { ChainStrategyRegistry } from \"./chain-strategy-registry\";\nimport { EvmChainStrategy } from \"./evm-chain-strategy\";\nimport { TonChainStrategy } from \"./ton-chain-strategy\";\nimport { TronChainStrategy } from \"./tron-chain-strategy\";\nimport { ChainStrategyContext } from \"./chain-strategy-context\";\n\nimport type { PublicClient, WalletClient } from \"viem\";\n\nexport interface EvmWalletConfig {\n address: string | undefined;\n isConnected: boolean;\n disconnect: () => void;\n walletClient: WalletClient | undefined;\n publicClient: PublicClient | undefined;\n}\n\nexport interface TonWalletConfig {\n tonConnectUI: TonConnectUI | null;\n address: string | null;\n}\n\nexport interface TronWalletConfig {\n address: string | null;\n connected: boolean;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n select: (adapterName: any) => void;\n connect: () => Promise<void>;\n disconnect: () => Promise<void>;\n}\n\nexport interface ChainStrategyProviderProps {\n children: ReactNode;\n evmWallet: EvmWalletConfig;\n tonWallet: TonWalletConfig;\n tronWallet: TronWalletConfig;\n tonClient?: TonClient;\n tonApiKey?: string;\n}\n\nexport interface ChainStrategyContextValue {\n chainRegistry: ChainStrategyRegistry;\n}\n\nexport function ChainStrategyProvider({\n children,\n evmWallet,\n tonWallet,\n tronWallet,\n tonClient,\n tonApiKey,\n}: ChainStrategyProviderProps) {\n const evmStrategy = useMemo(\n () =>\n new EvmChainStrategy({\n evmAddress: evmWallet.address,\n evmIsConnected: evmWallet.isConnected,\n evmDisconnect: evmWallet.disconnect,\n walletClient: evmWallet.walletClient,\n publicClient: evmWallet.publicClient,\n }),\n [\n evmWallet.address,\n evmWallet.isConnected,\n evmWallet.disconnect,\n evmWallet.walletClient,\n evmWallet.publicClient,\n ]\n );\n\n const tonStrategy = useMemo(\n () =>\n new TonChainStrategy({\n tonConnectUI: tonWallet.tonConnectUI,\n tonAddress: tonWallet.address,\n tonClient,\n tonApiKey,\n }),\n [tonWallet.tonConnectUI, tonWallet.address, tonClient, tonApiKey]\n );\n\n const tronStrategy = useMemo(\n () =>\n new TronChainStrategy({\n tronAddress: tronWallet.address,\n tronConnected: tronWallet.connected,\n tronSelect: tronWallet.select,\n tronConnect: tronWallet.connect,\n tronDisconnect: tronWallet.disconnect,\n }),\n [\n tronWallet.address,\n tronWallet.connected,\n tronWallet.select,\n tronWallet.connect,\n tronWallet.disconnect,\n ]\n );\n\n const chainRegistry = useMemo(\n () => new ChainStrategyRegistry([evmStrategy, tonStrategy, tronStrategy]),\n [evmStrategy, tonStrategy, tronStrategy]\n );\n\n // Memoize context value to prevent unnecessary re-renders\n const value: ChainStrategyContextValue = useMemo(\n () => ({\n chainRegistry,\n }),\n [chainRegistry]\n );\n\n \n\n return (\n <ChainStrategyContext.Provider value={value}>\n {children}\n </ChainStrategyContext.Provider>\n );\n}\n","import { create } from \"zustand\";\n\ninterface ConnectedWalletState {\n tonConnected: boolean;\n metaMaskConnected: boolean;\n tronConnected: boolean;\n}\n\ninterface ConnectedWalletActions {\n setTonConnected: (connected: boolean) => void;\n setMetaMaskConnected: (connected: boolean) => void;\n setTronConnected: (connected: boolean) => void;\n hasAnyWallet: () => boolean;\n}\n\ntype ConnectedWalletStore = ConnectedWalletState & ConnectedWalletActions;\n\nexport const useConnectedWalletsStore = create<ConnectedWalletStore>((set, get) => ({\n tonConnected: false,\n metaMaskConnected: false,\n tronConnected: false,\n\n setTonConnected: (connected) => set({ tonConnected: connected }),\n setMetaMaskConnected: (connected) => set({ metaMaskConnected: connected }),\n setTronConnected: (connected) => set({ tronConnected: connected }),\n \n hasAnyWallet: () => {\n const state = get();\n return state.tonConnected || state.metaMaskConnected || state.tronConnected;\n },\n}));","import {\n Dialog,\n DialogContent,\n DialogHeader,\n DialogTitle,\n} from \"@/components/ui/dialog\";\nimport { useBridgeTranslation } from \"../../i18n/BridgeI18nProvider\";\nimport { Badge } from \"@/components/ui/badge\";\nimport { InfoIcon } from \"../../assets/icons/InfoIcon\";\nimport { Tip } from \"../ui/tip\";\nimport { TokenSymbol } from \"../ui/token-symbol\";\nimport { cn } from \"@/lib/utils\";\nimport {\n useSettingsStore,\n type GasPreset,\n gasPresetToDisplayAmount,\n gasPresetToUsdValue,\n} from \"../../store/use-settings-store\";\nimport { useChainsStore } from \"../../store/use-chains-store\";\nimport { useTokensStore } from \"../../store/use-token-store\";\nimport { formatUsd, formatPercentage } from \"../../utils/formatters\";\nimport { RoutePriority } from \"../../types\";\n\ninterface SettingsModalProps {\n isOpen: boolean;\n onClose: () => void;\n}\n\nconst gasPresets: GasPreset[] = [\"auto\", \"none\", \"medium\", \"max\"];\nconst slippagePresets = [\"0.5%\", \"1.0%\", \"5.0%\"] as const;\nconst routePresets: RoutePriority[] = [\n RoutePriority.FASTEST,\n RoutePriority.CHEAPEST,\n RoutePriority.RECOMMENDED,\n];\n\nexport const SettingsModal = ({ isOpen, onClose }: SettingsModalProps) => {\n const { t } = useBridgeTranslation();\n const { toChain } = useChainsStore();\n const { tokens } = useTokensStore();\n\n const {\n slippageBps,\n routePriority,\n gasPreset,\n setSlippageBps,\n setRoutePriority,\n setGasPreset,\n } = useSettingsStore();\n\n const slippagePercent = formatPercentage(slippageBps, 1);\n\n const activeSlippagePreset = slippagePresets.find(\n (preset) => parseFloat(preset.replace(\"%\", \"\")) === slippageBps / 100\n );\n\n const dstNativeToken = toChain?.nativeCurrency;\n const nativeTokenPrice =\n tokens?.find(\n (t) =>\n t.chainKey === toChain?.chainKey &&\n t.symbol?.toLowerCase() === dstNativeToken?.symbol?.toLowerCase()\n )?.price?.usd || 0;\n\n const gasDisplayAmount = gasPresetToDisplayAmount(\n gasPreset,\n toChain?.chainKey,\n dstNativeToken?.decimals || 18\n );\n const gasUsdValue = gasPresetToUsdValue(\n gasPreset,\n nativeTokenPrice,\n toChain?.chainKey,\n dstNativeToken?.decimals || 18\n );\n\n const activeBtn =\n \"bg-primary hover:bg-primary/80 text-primary-foreground transition-colors\";\n const notActiveBtn =\n \"bg-accent hover:bg-accent/80 text-accent-foreground transition-colors\";\n\n return (\n <Dialog open={isOpen} onOpenChange={(open) => !open && onClose()}>\n <DialogContent onOpenAutoFocus={(e) => e.preventDefault()} className=\"p-10 pt-8\">\n <DialogHeader className=\"text-left\">\n <DialogTitle className=\"text-2xl leading-8\">{t(\"settings.title\")}</DialogTitle>\n </DialogHeader>\n\n <div className=\"space-y-5\">\n <div className=\"flex flex-col gap-5\">\n <div className=\"flex justify-between items-center\">\n <div className=\"flex items-center gap-2\">\n <p className=\"text-muted-foreground text-sm font-medium leading-4\">\n {t(\"settings.gasOnDestination\")}\n </p>\n <Tip text={t(\"settings.gasOnDestination\")}>\n <InfoIcon className=\"w-4 h-4 text-muted-foreground\" />\n </Tip>\n </div>\n <p className=\"text-foreground text-sm font-medium leading-4\">\n {formatUsd(gasUsdValue)}\n </p>\n </div>\n\n <div className=\"flex items-center justify-between gap-3\">\n <div className=\"flex items-center w-1/3 gap-2 shrink-0\">\n <TokenSymbol\n symbol={dstNativeToken?.symbol || \"eth\"}\n className=\"h-4 w-4 rounded-full\"\n alt={\n dstNativeToken?.symbol ||\n t(\"common.nativeToken\", { defaultValue: \"Native Token\" })\n }\n />\n <div className=\"flex items-center gap-2\">\n <p className=\"text-lg text-foreground leading-5 font-semibold h-5\">\n {gasDisplayAmount % 1 === 0\n ? gasDisplayAmount.toFixed(0)\n : gasDisplayAmount.toFixed(\n gasDisplayAmount < 0.001 ? 6 : 3\n )}\n </p>\n </div>\n </div>\n\n <div className=\"flex items-center gap-2\">\n {gasPresets.map((g) => (\n <Badge\n key={g}\n onClick={() => setGasPreset(g)}\n className={cn(\n \"cursor-pointer h-7 rounded px-2\",\n gasPreset === g ? activeBtn : notActiveBtn\n )}\n >\n {t(`settings.gasPresets.${g}`)}\n </Badge>\n ))}\n </div>\n </div>\n </div>\n\n <hr />\n\n <div className=\"flex flex-col gap-5\">\n <div className=\"flex justify-between items-center\">\n <div className=\"flex items-center gap-2\">\n <p className=\"text-muted-foreground text-sm font-medium leading-4\">\n {t(\"settings.slippageTolerance\")}\n </p>\n <Tip text={t(\"settings.slippageTolerance\")}>\n <InfoIcon className=\"w-4 h-4 text-muted-foreground\" />\n </Tip>\n </div>\n {slippageBps >= 500 && (\n <p className=\"text-destructive text-xs font-medium\">\n {t(\"settings.highSlippageWarning\", {\n defaultValue: \"High slippage warning\",\n })}\n </p>\n )}\n </div>\n <div className=\"flex items-center justify-between gap-6\">\n <div className=\"flex items-center gap-2\">\n <p className=\"text-lg text-foreground leading-5 font-semibold h-5\">\n {slippagePercent}\n </p>\n </div>\n\n <div className=\"flex items-center gap-2\">\n {slippagePresets.map((p) => (\n <Badge\n key={p}\n onClick={() => {\n const bps = parseFloat(p.replace(\"%\", \"\")) * 100;\n setSlippageBps(bps);\n }}\n className={cn(\n \"cursor-pointer h-7 rounded px-2\",\n activeSlippagePreset === p ? activeBtn : notActiveBtn\n )}\n >\n {p}\n </Badge>\n ))}\n </div>\n </div>\n </div>\n\n <hr />\n\n <div className=\"flex flex-col gap-5\">\n <div className=\"flex justify-between items-center\">\n <div className=\"flex items-center gap-2\">\n <p className=\"text-muted-foreground text-sm font-medium leading-4\">\n {t(\"settings.routePriority\")}\n </p>\n <Tip text={t(\"settings.routePriority\")}>\n <InfoIcon className=\"w-4 h-4 text-muted-foreground\" />\n </Tip>\n </div>\n </div>\n <div className=\"flex items-center justify-end gap-2\">\n {routePresets.map((r) => (\n <Badge\n key={r}\n onClick={() => setRoutePriority(r)}\n className={cn(\n \"cursor-pointer h-7 rounded px-2\",\n routePriority === r ? activeBtn : notActiveBtn\n )}\n >\n {t(`settings.routePresets.${r}`)}\n </Badge>\n ))}\n </div>\n </div>\n </div>\n </DialogContent>\n </Dialog>\n );\n};\n","import { useCallback, useEffect, useMemo, useState } from \"react\";\nimport { useBridgeTranslation } from \"../../i18n/BridgeI18nProvider\";\nimport {\n Dialog,\n DialogContent,\n DialogHeader,\n DialogTitle,\n} from \"@/components/ui/dialog\";\nimport { Button } from \"@/components/ui/button\";\nimport { Skeleton } from \"@/components/ui/skeleton\";\nimport { useAddresses } from \"../../hooks/use-addresses\";\nimport { useChainsStore } from \"../../store/use-chains-store\";\nimport { useTokensStore } from \"../../store/use-token-store\";\nimport { useConnectedWalletsStore } from \"../../store/use-connected-wallets-store\";\nimport { useBalances } from \"../../hooks/api/use-balances\";\nimport { formatBalance, formatUsd } from \"../../utils/formatters\";\nimport { TokenSymbol } from \"../ui/token-symbol\";\nimport { SearchInput } from \"../ui/search-input\";\nimport type { Token, TokenPrice } from \"../../types\";\nimport { cn } from \"@/lib/utils\";\n\ntype Tab = \"my\" | \"all\";\n\ntype AssetItem = { symbol: string; name: string; price?: TokenPrice };\n\ninterface GroupedTokens {\n withBalance: AssetItem[];\n onSrcChain: AssetItem[];\n willChangeSrcChain: AssetItem[];\n}\n\ninterface Props {\n isOpen: boolean;\n onClose: () => void;\n items: Token[];\n onChangeAsset: (symbol: string) => void;\n}\n\n// TokenRow component\ninterface TokenRowProps {\n symbol: string;\n name: string;\n isSelected: boolean;\n hasAnyWallet: boolean;\n balance: number;\n usdValue: number;\n isBalanceLoading: boolean;\n onPick: () => void;\n}\n\nconst TokenRow = ({\n symbol,\n name,\n isSelected,\n hasAnyWallet,\n balance,\n usdValue,\n isBalanceLoading,\n onPick,\n}: TokenRowProps) => {\n return (\n <Button\n onClick={onPick}\n className={`w-full px-5 rounded-xs bg-transparent flex items-center justify-between gap-3 hover:bg-accent hover:scale-100 ${\n isSelected ? \"border border-primary\" : \"\"\n }`}\n >\n <div className=\"flex items-center gap-3\">\n <TokenSymbol\n symbol={symbol}\n className=\"w-8 h-8 rounded-full\"\n alt={symbol}\n />\n <div className=\"flex flex-col items-start gap-1\">\n <p className=\"font-semibold text-foreground text-sm leading-4 truncate flex items-center gap-1\">\n {symbol}\n </p>\n <div className=\"text-xs leading-3 text-muted-foreground truncate\">\n {name}\n </div>\n </div>\n </div>\n\n <div className=\"text-right space-y-1\">\n {isBalanceLoading && hasAnyWallet ? (\n <div className=\"flex flex-col items-end gap-1\">\n <Skeleton className=\"h-5 w-16 rounded-md\" />\n <Skeleton className=\"h-3 w-12 rounded-md\" />\n </div>\n ) : (\n <>\n <div className=\"font-semibold text-foreground text-sm leading-4 truncate\">\n {hasAnyWallet ? formatBalance(balance) : \"—\"}\n </div>\n <div className=\"text-xs leading-3 text-muted-foreground/50\">\n {hasAnyWallet && balance > 0 && usdValue > 0\n ? formatUsd(usdValue)\n : \"—\"}\n </div>\n </>\n )}\n </div>\n </Button>\n );\n};\n\nexport const TokenSelectModal = ({\n isOpen,\n onClose,\n items,\n onChangeAsset,\n}: Props) => {\n const { t } = useBridgeTranslation();\n\n // Local state\n const [query, setQuery] = useState(\"\");\n const [tab, setTab] = useState<Tab>(\"my\");\n const [manualTabSwitch, setManualTabSwitch] = useState(false);\n\n // Stores and hooks\n const { srcAddress } = useAddresses();\n const { fromChain, setFromChain, chains } = useChainsStore();\n const { assetMatrix, selectedAssetSymbol } = useTokensStore();\n const { hasAnyWallet } = useConnectedWalletsStore();\n\n const { getBalance, query: balancesQuery } = useBalances(\n fromChain?.chainKey,\n srcAddress\n );\n\n const effectiveTab: Tab = hasAnyWallet() ? tab : \"all\";\n useEffect(() => {\n if (!hasAnyWallet()) setTab(\"all\");\n }, [hasAnyWallet]);\n\n const getTokenUsdValue = useCallback(\n (symbol: string, price?: number) => {\n const bal = getBalance(symbol);\n return bal > 0 && price ? bal * price : 0;\n },\n [getBalance]\n );\n\n const isTokenAvailableOnChain = useCallback(\n (symbol: string, chainKey?: string): boolean => {\n if (!assetMatrix || !chainKey) return false;\n const tokensByChain = assetMatrix[symbol.toUpperCase()];\n return !!tokensByChain?.[chainKey];\n },\n [assetMatrix]\n );\n\n const findFirstAvailableChain = useCallback(\n (symbol: string) => {\n if (!assetMatrix || !chains) return undefined;\n const tokensByChain = assetMatrix[symbol.toUpperCase()];\n if (!tokensByChain) return undefined;\n for (const chainKey of Object.keys(tokensByChain)) {\n const chain = chains.find((c) => c.chainKey === chainKey);\n if (chain) return chain;\n }\n return undefined;\n },\n [assetMatrix, chains]\n );\n\n const groupedTokens = useMemo((): GroupedTokens => {\n const q = query.trim().toLowerCase();\n const filtered = q\n ? items.filter(\n (a) =>\n a.name.toLowerCase().includes(q) ||\n a.symbol.toLowerCase().includes(q)\n )\n : items;\n\n const groups: GroupedTokens = {\n withBalance: [],\n onSrcChain: [],\n willChangeSrcChain: [],\n };\n\n for (const asset of filtered) {\n const hasBalance = getBalance(asset.symbol) > 0;\n const onSrc = isTokenAvailableOnChain(asset.symbol, fromChain?.chainKey);\n\n if (hasBalance && onSrc) {\n groups.withBalance.push(asset);\n } else if (onSrc) {\n groups.onSrcChain.push(asset);\n } else {\n const availableChain = findFirstAvailableChain(asset.symbol);\n if (availableChain) groups.willChangeSrcChain.push(asset);\n }\n }\n\n const sortByUsd = (a: AssetItem, b: AssetItem) =>\n getTokenUsdValue(b.symbol, b.price?.usd) -\n getTokenUsdValue(a.symbol, a.price?.usd);\n const sortAZ = (a: AssetItem, b: AssetItem) =>\n a.symbol.localeCompare(b.symbol);\n\n groups.withBalance.sort(sortByUsd);\n groups.onSrcChain.sort(sortAZ);\n groups.willChangeSrcChain.sort(sortAZ);\n\n return groups;\n }, [\n items,\n query,\n getBalance,\n isTokenAvailableOnChain,\n fromChain?.chainKey,\n findFirstAvailableChain,\n getTokenUsdValue,\n ]);\n\n const myTokens = useMemo(\n () => groupedTokens.withBalance,\n [groupedTokens.withBalance]\n );\n\n // Auto-switch to 'all' tab when no results in 'my' tab\n useEffect(() => {\n if (\n query.trim() !== \"\" &&\n tab === \"my\" &&\n myTokens.length === 0 &&\n !manualTabSwitch\n ) {\n setTab(\"all\");\n }\n }, [query, tab, myTokens.length, manualTabSwitch]);\n\n // Auto-return to 'my' tab when results appear\n useEffect(() => {\n if (\n query.trim() !== \"\" &&\n tab === \"all\" &&\n myTokens.length > 0 &&\n !manualTabSwitch\n ) {\n setTab(\"my\");\n }\n }, [query, tab, myTokens.length, manualTabSwitch]);\n\n // Reset manual tab switch flag when query changes\n useEffect(() => {\n setManualTabSwitch(false);\n }, [query]);\n\n const resetState = useCallback(() => {\n setQuery(\"\");\n setTab(\"my\");\n setManualTabSwitch(false);\n }, []);\n\n const handleClose = useCallback(() => {\n resetState();\n onClose();\n }, [onClose, resetState]);\n\n useEffect(() => {\n if (!isOpen) resetState();\n }, [isOpen, resetState]);\n\n useEffect(() => () => resetState(), [resetState]);\n\n const onPick = (sym: string, willChangeSrcChain = false) => {\n if (willChangeSrcChain) {\n const newChain = findFirstAvailableChain(sym);\n if (newChain && setFromChain) setFromChain(newChain);\n }\n onChangeAsset(sym);\n handleClose();\n };\n\n const tokensToRender = useMemo(() => {\n if (effectiveTab === \"my\") {\n return myTokens.map((token) => ({\n token,\n willChangeSrc: false,\n }));\n }\n\n const mainTokens = [\n ...groupedTokens.withBalance.map((token) => ({\n token,\n willChangeSrc: false,\n })),\n ...groupedTokens.onSrcChain.map((token) => ({\n token,\n willChangeSrc: false,\n })),\n ];\n\n return mainTokens;\n }, [effectiveTab, myTokens, groupedTokens]);\n\n const willChangeSrcTokens = useMemo(\n () =>\n groupedTokens.willChangeSrcChain.map((token) => ({\n token,\n willChangeSrc: true,\n })),\n [groupedTokens.willChangeSrcChain]\n );\n\n const hasNoResults =\n tokensToRender.length === 0 && willChangeSrcTokens.length === 0;\n\n return (\n <Dialog open={isOpen} onOpenChange={(open) => !open && handleClose()}>\n <DialogContent className=\"max-h-[90dvh] h-[90dvh] overflow-hidden flex flex-col p-10 pt-8\">\n <DialogHeader className=\"text-left\">\n <DialogTitle className=\"text-2xl leading-8\">\n {t(\"bridge.selectToken\")}\n </DialogTitle>\n </DialogHeader>\n\n <SearchInput\n placeholder={t(\"bridge.searchToken\")}\n value={query}\n onChange={setQuery}\n />\n\n {hasAnyWallet() && (\n <div className=\"flex gap-2\">\n <Button\n variant={tab === \"my\" ? \"default\" : \"ghost\"}\n onClick={() => {\n setTab(\"my\");\n setManualTabSwitch(true);\n }}\n size=\"sm\"\n className={cn(\n \"px-4 cursor-pointer\",\n tab !== \"my\" && \"bg-muted hover:bg-accent\"\n )}\n >\n {t(\"bridge.myTokens\")}\n </Button>\n <Button\n variant={tab === \"all\" ? \"default\" : \"ghost\"}\n onClick={() => {\n setTab(\"all\");\n setManualTabSwitch(true);\n }}\n size=\"sm\"\n className={cn(\n \"px-4 cursor-pointer\",\n tab !== \"all\" && \"bg-muted hover:bg-accent\"\n )}\n >\n {t(\"bridge.allTokens\")}\n </Button>\n </div>\n )}\n\n <div className=\"flex-1 overflow-y-auto -mx-5\">\n {hasNoResults ? (\n <p className=\"text-sm text-muted-foreground px-12 py-2 h-28 flex items-center justify-center text-center\">\n {t(\"bridge.tokenNotFound\")}\n </p>\n ) : (\n <>\n {effectiveTab === \"my\" && myTokens.length === 0 && (\n <p className=\"leading-4 px-5 text-base text-muted-foreground uppercase py-2\">\n {t(\"bridge.noBalancesFound\")}\n </p>\n )}\n\n {tokensToRender.map(({ token, willChangeSrc }) => {\n const bal = getBalance(token.symbol);\n const usd = getTokenUsdValue(token.symbol, token.price?.usd);\n const isSelected =\n selectedAssetSymbol?.toUpperCase() ===\n token.symbol.toUpperCase();\n\n return (\n <TokenRow\n key={`${effectiveTab}:${token.symbol}`}\n symbol={token.symbol}\n name={token.name}\n isSelected={!!isSelected}\n hasAnyWallet={hasAnyWallet()}\n balance={bal}\n usdValue={usd}\n isBalanceLoading={\n balancesQuery.isLoading || balancesQuery.isFetching\n }\n onPick={() => onPick(token.symbol, willChangeSrc)}\n />\n );\n })}\n\n {effectiveTab === \"all\" && willChangeSrcTokens.length > 0 && (\n <>\n <div className=\"px-5 flex leading-4 text-base py-2 text-muted-foreground uppercase mt-8\">\n <p>{t(\"bridge.willChangeSourceChain\")}</p>\n </div>\n {willChangeSrcTokens.map(({ token, willChangeSrc }) => {\n const bal = getBalance(token.symbol);\n const usd = getTokenUsdValue(\n token.symbol,\n token.price?.usd\n );\n const isSelected =\n selectedAssetSymbol?.toUpperCase() ===\n token.symbol.toUpperCase();\n\n return (\n <TokenRow\n key={`will:${token.symbol}`}\n symbol={token.symbol}\n name={token.name}\n isSelected={!!isSelected}\n hasAnyWallet={hasAnyWallet()}\n balance={bal}\n usdValue={usd}\n isBalanceLoading={\n balancesQuery.isLoading || balancesQuery.isFetching\n }\n onPick={() => onPick(token.symbol, willChangeSrc)}\n />\n );\n })}\n </>\n )}\n </>\n )}\n </div>\n </DialogContent>\n </Dialog>\n );\n};\n","import { useCallback, useState } from \"react\";\nimport { useQueryClient } from \"@tanstack/react-query\";\nimport { useAddresses } from \"../use-addresses\";\nimport { useBridgeQuoteStore } from \"../../store/use-bridge-quote-store\";\nimport { useConnectedWalletsStore } from \"../../store/use-connected-wallets-store\";\nimport { useChainsStore } from \"../../store/use-chains-store\";\n\nexport function useBridgeRefresh() {\n const qc = useQueryClient();\n const { srcAddress, dstAddress } = useAddresses();\n const { fromChain, toChain } = useChainsStore();\n const { setLoading: setQLoading, triggerRefetch } = useBridgeQuoteStore();\n const { hasAnyWallet } = useConnectedWalletsStore();\n const [spinning, setSpinning] = useState(false);\n\n const refresh = useCallback(async () => {\n setSpinning(true);\n try {\n setQLoading();\n\n const queries = [\n qc.invalidateQueries({ queryKey: [\"tokens\"] }),\n qc.invalidateQueries({ queryKey: [\"chains\"] }),\n ];\n\n if (hasAnyWallet()) {\n if (srcAddress) {\n queries.push(\n qc.invalidateQueries({ queryKey: [\"srcTokens\", srcAddress] })\n );\n if (fromChain?.chainKey) {\n queries.push(\n qc.invalidateQueries({\n queryKey: [\"balances\", fromChain.chainKey, srcAddress],\n })\n );\n }\n }\n if (dstAddress) {\n queries.push(\n qc.invalidateQueries({ queryKey: [\"dstTokens\", dstAddress] })\n );\n if (toChain?.chainKey) {\n queries.push(\n qc.invalidateQueries({\n queryKey: [\"balances\", toChain.chainKey, dstAddress],\n })\n );\n }\n }\n }\n\n await Promise.all(queries);\n\n triggerRefetch();\n\n } finally {\n setSpinning(false);\n }\n }, [\n qc,\n srcAddress,\n dstAddress,\n fromChain?.chainKey,\n toChain?.chainKey,\n hasAnyWallet,\n setQLoading,\n triggerRefetch,\n ]);\n\n return { refresh, spinning };\n}\n","import { Button } from \"@/components/ui/button\";\nimport { ReloadIcon } from \"../../assets/icons\";\nimport { useCallback, useState } from \"react\";\nimport { useBridgeRefresh } from \"../../hooks/bridge/use-bridge-refresh\";\n\nexport const RefreshButton = () => {\n const { refresh, spinning } = useBridgeRefresh();\n const [turns, setTurns] = useState(0);\n\n const handleRefresh = useCallback(() => {\n setTurns((t) => t + 1);\n refresh();\n }, [refresh]);\n\n return (\n <Button\n onClick={handleRefresh}\n disabled={spinning}\n variant=\"secondary\"\n className=\"bg-bridge-button text-bridge-button-foreground hover:text-bridge-button-foreground h-9 w-11\"\n size=\"sm\"\n >\n <ReloadIcon\n style={{\n transform: `rotate(${turns * 180}deg)`,\n transition: \"transform 300ms linear\",\n }}\n />\n </Button>\n );\n};\n","import { useMemo } from \"react\";\nimport { useBridgeTranslation } from \"../../i18n/BridgeI18nProvider\";\nimport { ArrowDownIcon } from \"../../assets/icons\";\nimport { Button } from \"@/components/ui/button\";\nimport type { Token } from \"../../types\";\nimport { TokenSymbol } from \"./token-symbol\";\n\ntype SelectTokenButtonProps = {\n onClick?: () => void;\n token?: Token;\n};\n\nexport const SelectTokenButton = ({\n onClick,\n token,\n}: SelectTokenButtonProps) => {\n const { t } = useBridgeTranslation();\n\n const label = useMemo(() => {\n return token?.symbol ?? t(\"bridge.selectToken\");\n }, [token, t]);\n\n return (\n <Button\n onClick={onClick}\n size=\"sm\"\n variant=\"secondary\"\n className=\"shrink-0 gap-2 h-9 !pl-2 bg-bridge-button text-bridge-button-foreground hover:text-bridge-button-foreground\"\n type=\"button\"\n aria-label={label}\n >\n <div className=\"flex gap-2 items-center\">\n <TokenSymbol\n symbol={token?.symbol ?? \"default\"}\n className=\"w-6 h-6 rounded-full\"\n alt={label}\n />\n <span>{label}</span>\n </div>\n <ArrowDownIcon className=\"w-4 h-4\" />\n </Button>\n );\n};\n","import { useMemo } from \"react\";\nimport { useBridgeTranslation } from \"../../i18n/BridgeI18nProvider\";\nimport { useTokensStore } from \"../../store/use-token-store\";\nimport { listAssetsForSelect } from \"../../lib/assets\";\nimport { useModal } from \"../../hooks/ui/use-modal\";\nimport { BoltIcon } from \"../../assets/icons\";\nimport { Button } from \"@/components/ui/button\";\nimport { SettingsModal } from \"../modals/settings-modal\";\nimport { TokenSelectModal } from \"../modals/token-select-modal\";\nimport { RefreshButton } from \"../ui/refresh-button\";\nimport { SelectTokenButton } from \"../ui/select-token-button\";\nimport { CardAction, CardHeader, CardTitle } from \"@/components/ui/card\";\n\nexport const Toolbar: React.FC = () => {\n const { t } = useBridgeTranslation();\n const { isOpen, onClose, onOpen } = useModal();\n\n const {\n isOpen: isOpenSettings,\n onClose: onCloseSettings,\n onOpen: onOpenSettings,\n } = useModal();\n\n const { tokens, selectedAssetSymbol, setSelectedAssetSymbol } =\n useTokensStore();\n\n const assets = useMemo(() => listAssetsForSelect(tokens || []), [tokens]);\n\n const current = useMemo(() => {\n if (!assets.length) return undefined;\n if (!selectedAssetSymbol) return assets[0];\n const sum = selectedAssetSymbol.toUpperCase();\n return assets.find((a) => a.symbol.toUpperCase() === sum) ?? assets[0];\n }, [assets, selectedAssetSymbol]);\n\n return (\n <CardHeader className=\"gap-y-0 p-0 flex flex-row justify-between items-center space-y-0\">\n <CardTitle className=\"flex items-center gap-3\">\n <span className=\"text-sm font-normal leading-4 text-muted-foreground\">\n {t(\"bridge.selectToken\")}\n </span>\n\n <SelectTokenButton token={current} onClick={onOpen} />\n </CardTitle>\n\n <CardAction className=\"flex items-center gap-3\">\n <RefreshButton />\n <Button\n onClick={onOpenSettings}\n size=\"sm\"\n className=\"bg-bridge-button text-bridge-button-foreground hover:text-bridge-button-foreground h-9 w-11\"\n variant=\"secondary\"\n >\n <BoltIcon stroke=\"currentColor\" />\n </Button>\n </CardAction>\n\n <TokenSelectModal\n isOpen={isOpen}\n onClose={onClose}\n items={assets}\n onChangeAsset={(symbol) => {\n setSelectedAssetSymbol(symbol);\n onClose();\n }}\n />\n\n <SettingsModal isOpen={isOpenSettings} onClose={onCloseSettings} />\n </CardHeader>\n );\n};\n","import { useEffect, useRef } from \"react\";\nimport { useConnectedWalletsStore } from \"../store/use-connected-wallets-store\";\nimport { useChainsStore } from \"../store/use-chains-store\";\n\ninterface UseAutoSelectNetworkParams {\n tonAddress?: string;\n tronConnected: boolean;\n evmIsConnected: boolean;\n}\n\n/**\n * Hook for automatically selecting the appropriate network when first wallet is connected\n *\n * When a user connects their first wallet (no previous wallets connected):\n * - TON wallet → selects TON network\n * - TRON wallet → selects TRON network\n * - EVM wallet → selects Ethereum network\n */\nexport const useAutoSelectNetwork = ({\n tonAddress,\n tronConnected,\n evmIsConnected,\n}: UseAutoSelectNetworkParams) => {\n const { hasAnyWallet } = useConnectedWalletsStore();\n const { chains, setFromChain } = useChainsStore();\n\n // Track previous wallet connection state\n const previousHadWallet = useRef(hasAnyWallet());\n\n useEffect(() => {\n const currentHasWallet = hasAnyWallet();\n const isFirstWalletConnection = !previousHadWallet.current && currentHasWallet;\n\n if (isFirstWalletConnection && chains?.length) {\n let targetChainKey: string | null = null;\n\n // Determine which wallet was connected\n if (tonAddress) {\n targetChainKey = \"ton\";\n } else if (tronConnected) {\n targetChainKey = \"tron\";\n } else if (evmIsConnected) {\n targetChainKey = \"ethereum\";\n }\n\n // Find and select the appropriate chain\n if (targetChainKey) {\n const matchingChain = chains.find(\n (chain) => chain.chainKey.toLowerCase() === targetChainKey\n );\n\n if (matchingChain) {\n setFromChain(matchingChain);\n }\n }\n }\n\n // Update the ref for next comparison\n previousHadWallet.current = currentHasWallet;\n }, [\n tonAddress,\n tronConnected,\n evmIsConnected,\n hasAnyWallet,\n chains,\n setFromChain,\n ]);\n};\n","import {\n useBridgeTranslation,\n BridgeI18nProvider,\n} from \"./i18n/BridgeI18nProvider\";\nimport { SwapButton } from \"./components/ui/swap-button\";\nimport { SwapSection } from \"./components/layout/swap-section\";\nimport { AnotherAddress } from \"./components/layout/another-address\";\nimport { useMemo, useEffect, useCallback } from \"react\";\nimport { useSwapModel } from \"./hooks/bridge/use-swap-model\";\nimport { useChainsStore } from \"./store/use-chains-store\";\nimport { useTokensStore } from \"./store/use-token-store\";\nimport { Details } from \"./components/layout/details\";\nimport { MainButton } from \"./components/ui/main-button\";\nimport { WalletSelectModal } from \"./components/modals/wallet-select-modal\";\nimport { cn } from \"@/lib/utils\";\nimport { StatusStepsDialog } from \"./components/status-dialog/status-dialog\";\nimport { Toaster } from \"sonner\";\nimport type { Chain } from \"./types\";\nimport { useTokens } from \"./hooks/api/use-tokens\";\nimport { useChains } from \"./hooks/api/use-chains\";\nimport { useBridgeQuoteStore } from \"./store/use-bridge-quote-store\";\nimport { resolveTokenOnChainFromMatrix } from \"./lib/quote\";\nimport { getQuoteAmounts } from \"./utils/quote-helpers\";\nimport { ChainStrategyProvider } from \"./chains/chain-strategy-provider\";\nimport { useTonConnectUI, useTonAddress } from \"@tonconnect/ui-react\";\nimport {\n useAccount,\n useWalletClient,\n useDisconnect,\n usePublicClient,\n} from \"wagmi\";\nimport type { PublicClient } from \"viem\";\nimport { useWallet } from \"@tronweb3/tronwallet-adapter-react-hooks\";\nimport { useConnectedWalletsStore } from \"./store/use-connected-wallets-store\";\nimport type { TonClient } from \"@ton/ton\";\nimport { Card, CardContent, CardFooter } from \"@/components/ui/card\";\nimport { Toolbar } from \"./components/layout/toolbar\";\nimport { useAutoSelectNetwork } from \"./hooks/use-auto-select-network\";\n\nexport interface TransactionIcons {\n confirm?: React.ReactNode;\n progress?: React.ReactNode;\n success?: React.ReactNode;\n failed?: React.ReactNode;\n}\n\nexport interface EvaaBridgeProps {\n className?: string;\n tonClient?: TonClient;\n tonApiKey?: string;\n defaultLanguage?: string;\n transactionIcons?: TransactionIcons;\n onInitialized?: () => void;\n onSwapStart?: (data: SwapStartData) => void;\n onSwapSuccess?: (data: SwapSuccessData) => void;\n onSwapError?: (error: SwapErrorData) => void;\n onAmountChange?: (amount: string) => void;\n onChainChange?: (data: ChainChangeData) => void;\n}\n\nexport interface SwapStartData {\n fromChain: string;\n toChain: string;\n amount: string;\n tokenSymbol: string;\n}\n\nexport interface SwapSuccessData {\n fromChain: string;\n toChain: string;\n amount: string;\n tokenSymbol: string;\n transactionHash?: string;\n}\n\nexport interface SwapErrorData {\n error: string;\n fromChain: string;\n toChain: string;\n amount: string;\n tokenSymbol: string;\n}\n\nexport interface ChainChangeData {\n type: \"from\" | \"to\";\n chain: Chain;\n}\n\nconst EvaaBridgeWithProviders = (props: EvaaBridgeProps) => {\n const [tonConnectUI] = useTonConnectUI();\n const tonAddress = useTonAddress();\n\n const { address: evmAddress, isConnected: evmIsConnected } = useAccount();\n const { disconnect: evmDisconnect } = useDisconnect();\n const { data: walletClient } = useWalletClient();\n const publicClient = usePublicClient() as PublicClient | undefined;\n\n const {\n address: tronAddress,\n connected: tronConnected,\n select: tronSelect,\n connect: tronConnect,\n disconnect: tronDisconnect,\n } = useWallet();\n\n const { setTonConnected, setMetaMaskConnected, setTronConnected } =\n useConnectedWalletsStore();\n\n useEffect(() => {\n setTonConnected(!!tonAddress);\n }, [tonAddress, setTonConnected]);\n\n useEffect(() => {\n setMetaMaskConnected(!!evmIsConnected);\n }, [evmIsConnected, setMetaMaskConnected]);\n\n useEffect(() => {\n setTronConnected(!!tronConnected);\n }, [tronConnected, setTronConnected]);\n\n // Auto-select appropriate network when first wallet is connected\n useAutoSelectNetwork({\n tonAddress,\n tronConnected,\n evmIsConnected,\n });\n\n return (\n <BridgeI18nProvider defaultLanguage={props.defaultLanguage}>\n <ChainStrategyProvider\n evmWallet={{\n address: evmAddress,\n isConnected: evmIsConnected,\n disconnect: evmDisconnect,\n walletClient,\n publicClient,\n }}\n tonWallet={{\n tonConnectUI,\n address: tonAddress,\n }}\n tronWallet={{\n address: tronAddress,\n connected: tronConnected,\n select: tronSelect,\n connect: tronConnect,\n disconnect: tronDisconnect,\n }}\n tonClient={props.tonClient}\n tonApiKey={props.tonApiKey}\n >\n <EvaaBridgeContent {...props} />\n </ChainStrategyProvider>\n </BridgeI18nProvider>\n );\n};\n\nconst EvaaBridgeContent = ({\n className,\n transactionIcons,\n onInitialized,\n onAmountChange,\n onChainChange,\n}: EvaaBridgeProps = {}) => {\n const { t } = useBridgeTranslation();\n\n useTokens();\n useChains();\n\n const swap = useSwapModel();\n const { fromChain, toChain } = swap;\n const { selectedAssetSymbol, assetMatrix } = useTokensStore();\n const { quote } = useBridgeQuoteStore();\n const amount = swap.amount;\n const internalOnAmountChange = swap.actions.setAmount;\n const loading = swap.loadingQuote;\n const fromBalance = swap.fromBalance;\n const receiveBalance = swap.receiveBalance;\n const allowedFromChains = swap.allowedFromChains;\n const allowedToChains = swap.allowedToChains;\n const { chains } = useChainsStore();\n\n // Compute output amount from quote\n const outputAmount = useMemo(() => {\n if (!quote || loading) return \"\";\n const srcToken = resolveTokenOnChainFromMatrix(\n assetMatrix,\n selectedAssetSymbol,\n fromChain?.chainKey\n );\n const dstToken = resolveTokenOnChainFromMatrix(\n assetMatrix,\n selectedAssetSymbol,\n toChain?.chainKey\n );\n const { outputHumanRounded } = getQuoteAmounts(quote, srcToken, dstToken);\n return outputHumanRounded;\n }, [\n quote,\n loading,\n assetMatrix,\n selectedAssetSymbol,\n fromChain?.chainKey,\n toChain?.chainKey,\n ]);\n\n useEffect(() => {\n if (chains?.length && onInitialized) {\n onInitialized();\n }\n }, [chains, onInitialized]);\n\n const handleAmountChange = useCallback(\n (newAmount: string) => {\n internalOnAmountChange(newAmount);\n onAmountChange?.(newAmount);\n },\n [internalOnAmountChange, onAmountChange]\n );\n\n const handleFromChainChange = useCallback(\n (chain?: Chain) => {\n if (!chain) return;\n swap.actions.setFromChain(chain);\n onChainChange?.({\n type: \"from\",\n chain,\n });\n },\n [swap.actions, onChainChange]\n );\n\n const handleToChainChange = useCallback(\n (chain?: Chain) => {\n if (!chain) return;\n swap.actions.setToChain(chain);\n onChainChange?.({\n type: \"to\",\n chain,\n });\n },\n [swap.actions, onChainChange]\n );\n\n const destinationChains = useMemo(() => {\n if (!chains || !selectedAssetSymbol || !assetMatrix) {\n return allowedToChains ?? [];\n }\n\n const result = [...chains];\n\n return result.filter((c) => c.chainKey !== fromChain?.chainKey);\n }, [\n allowedToChains,\n assetMatrix,\n chains,\n fromChain?.chainKey,\n selectedAssetSymbol,\n ]);\n\n const sourceChains = useMemo(() => {\n if (!chains || !assetMatrix) {\n return allowedFromChains ?? [];\n }\n\n return [...chains];\n }, [chains, assetMatrix, allowedFromChains]);\n\n return (\n <>\n <Card\n className={cn(\n \"max-w-md w-full mx-auto flex flex-col p-5 gap-5 relative\",\n className\n )}\n >\n <Toolbar />\n\n <CardContent className=\"space-y-[1px] p-0\">\n <SwapSection\n className=\"rounded-t-sm\"\n label={t(\"bridge.sourceNetwork\")}\n balance={fromBalance}\n chain={fromChain}\n chains={sourceChains}\n allowedChains={allowedFromChains}\n amount={amount}\n isSource\n onAmountChange={handleAmountChange}\n onSelect={handleFromChainChange}\n />\n\n <SwapButton />\n\n <SwapSection\n label={t(\"bridge.destinationNetwork\")}\n balance={receiveBalance}\n chain={toChain}\n chains={destinationChains}\n allowedChains={allowedToChains}\n amount={outputAmount}\n readOnlyAmount\n onSelect={handleToChainChange}\n />\n\n <AnotherAddress />\n\n <MainButton />\n </CardContent>\n <CardFooter className=\"p-0\">\n <Details />\n </CardFooter>\n </Card>\n <WalletSelectModal />\n\n <StatusStepsDialog icons={transactionIcons} />\n <Toaster position=\"top-right\" richColors />\n </>\n );\n};\n\nexport const EvaaBridge = EvaaBridgeWithProviders;\n","type DeliveryStatus = {\n status: 'pending' | 'delivered' | 'failed';\n srcTxHash?: string;\n dstTxHash?: string;\n raw?: unknown;\n};\n\ninterface DeliveryStatusParams {\n srcChainKey: string;\n dstChainKey?: string;\n srcTxHash: string;\n}\n\ninterface PollUntilDeliveredParams {\n srcChainKey: string;\n dstChainKey?: string;\n srcTxHash: string;\n intervalMs?: number;\n timeoutMs?: number;\n signal?: AbortSignal;\n onUpdate?: (st: DeliveryStatus) => void;\n}\n\ninterface ApiResponse {\n [key: string]: unknown;\n}\n\nasync function tryFetch(url: string): Promise<ApiResponse | null> {\n try {\n const res = await fetch(url);\n if (!res.ok) return null;\n return await res.json();\n } catch {\n return null;\n }\n}\n\nfunction interpretStatus(data: unknown): DeliveryStatus | null {\n if (!data) return null;\n const d = Array.isArray(data) ? data[0] : data;\n const lower = JSON.stringify(d).toLowerCase();\n const hasDst = d?.dstTxHash || d?.dstTx || d?.destinationTxHash || d?.dstHash;\n const delivered = d?.delivered === true || d?.status === 'delivered' || d?.status === 'completed' || (typeof hasDst === 'string' && hasDst.length > 0);\n const failed = d?.status === 'failed' || lower.includes('failed') || lower.includes('reverted');\n if (delivered) return { status: 'delivered', srcTxHash: d?.srcTxHash || d?.srcTx, dstTxHash: hasDst || undefined, raw: d };\n if (failed) return { status: 'failed', srcTxHash: d?.srcTxHash || d?.srcTx, raw: d };\n return { status: 'pending', srcTxHash: d?.srcTxHash || d?.srcTx, raw: d };\n}\n\nexport async function getDeliveryStatus(params: DeliveryStatusParams): Promise<DeliveryStatus | null> {\n const query = new URLSearchParams();\n query.set('srcChainKey', params.srcChainKey);\n if (params.dstChainKey) query.set('dstChainKey', params.dstChainKey);\n query.set('srcTxHash', params.srcTxHash);\n\n const bases = [\n `https://stargate.finance/api/v1/transactions?${query.toString()}`,\n `https://stargate.finance/api/v1/txStatus?${query.toString()}`,\n `https://stargate.finance/api/v1/messageStatus?${query.toString()}`,\n ];\n\n for (const url of bases) {\n const json = await tryFetch(url);\n const st = interpretStatus(json);\n if (st) return st;\n }\n return null;\n}\n\nexport async function pollUntilDelivered(args: PollUntilDeliveredParams): Promise<DeliveryStatus> {\n const { intervalMs = 7000, timeoutMs = 12 * 60 * 1000 } = args;\n const start = Date.now();\n while (true) {\n if (args.signal?.aborted) throw new Error('aborted');\n const st = await getDeliveryStatus({\n srcChainKey: args.srcChainKey,\n dstChainKey: args.dstChainKey,\n srcTxHash: args.srcTxHash,\n });\n if (st) args.onUpdate?.(st);\n if (st?.status === 'delivered') return st;\n if (st?.status === 'failed') return st;\n if (Date.now() - start > timeoutMs) return { status: 'failed', srcTxHash: args.srcTxHash };\n await new Promise((r) => setTimeout(r, intervalMs));\n }\n}\n\n"],"names":["initReactI18next","useEffect","jsx","I18nextProvider","useTranslation","input","create","normalizeTickerSymbol","useEvmAccount","useTonAddress","useWallet","useMemo","resolveTokenOnChainFromMatrix","Address","createContext","useContext","TonClient","usePublicClient","useState","useQuery","useCallback","jsxs","Button","cn","Skeleton","BASE_URL","forwardRef","Fragment","Input","Dialog","DialogContent","DialogHeader","DialogTitle","TonKeeperIcon","Switch","AnimatePresence","motion","X","Tooltip","TooltipTrigger","TooltipContent","Accordion","AccordionItem","AccordionTrigger","AccordionContent","srcChain","ReflectApply","ReflectOwnKeys","NumberIsNaN","eventsModule","events","once","d","b","__assign","exports","v","require$$0","transmit","level","global","require$$1","require$$2","globalThis","normalizeValue","fetch","module","en","ru","useConnect","buttonVariants","toast","DialogDescription","Loader2","AlertCircleIcon","DialogFooter","CheckCircle2","Clock","isAddress","formatUnits","error","beginCell","chainError","parseUnits","transaction","loadMessage","Cell","storeMessage","TronLinkAdapterName","raw","shift","t","Badge","useQueryClient","CardHeader","CardTitle","CardAction","useRef","useTonConnectUI","useAccount","useDisconnect","useWalletClient","Card","CardContent","CardFooter","Toaster","lower"],"mappings":"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","x_google_ignoreList":[2,64,65,66,67,68,69,70,71,72]}
|