@tuwaio/nova-connect 0.1.0 → 0.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (113) hide show
  1. package/README.md +21 -96
  2. package/dist/ToastError-CSlbvXKT.d.cts +106 -0
  3. package/dist/ToastError-CSlbvXKT.d.ts +106 -0
  4. package/dist/chunk-A2677K5M.cjs +2 -0
  5. package/dist/chunk-A2677K5M.cjs.map +1 -0
  6. package/dist/chunk-CEGEQMI2.cjs +2 -0
  7. package/dist/chunk-CEGEQMI2.cjs.map +1 -0
  8. package/dist/chunk-DYDY3FCT.cjs +2 -0
  9. package/dist/chunk-DYDY3FCT.cjs.map +1 -0
  10. package/dist/{chunk-KKCRUSJT.js → chunk-J4TY3CJF.js} +2 -2
  11. package/dist/{chunk-KKCRUSJT.js.map → chunk-J4TY3CJF.js.map} +1 -1
  12. package/dist/chunk-LF6FTUUQ.js +2 -0
  13. package/dist/chunk-LF6FTUUQ.js.map +1 -0
  14. package/dist/chunk-MPEJHQKC.js +2 -0
  15. package/dist/chunk-MPEJHQKC.js.map +1 -0
  16. package/dist/{chunk-NJDPFYUJ.js → chunk-MQGDTFY7.js} +2 -2
  17. package/dist/{chunk-NJDPFYUJ.js.map → chunk-MQGDTFY7.js.map} +1 -1
  18. package/dist/chunk-NMQZA377.cjs +2 -0
  19. package/dist/chunk-NMQZA377.cjs.map +1 -0
  20. package/dist/chunk-OA6MB7CZ.cjs +2 -0
  21. package/dist/chunk-OA6MB7CZ.cjs.map +1 -0
  22. package/dist/chunk-QERPNHKX.cjs +2 -0
  23. package/dist/chunk-QERPNHKX.cjs.map +1 -0
  24. package/dist/chunk-RUYOUU6Q.cjs +6 -0
  25. package/dist/chunk-RUYOUU6Q.cjs.map +1 -0
  26. package/dist/chunk-TAV7EL23.js +2 -0
  27. package/dist/chunk-TAV7EL23.js.map +1 -0
  28. package/dist/chunk-Z2NDRIEI.js +6 -0
  29. package/dist/chunk-Z2NDRIEI.js.map +1 -0
  30. package/dist/components/index.cjs +2 -0
  31. package/dist/components/index.cjs.map +1 -0
  32. package/dist/components/index.d.cts +6430 -0
  33. package/dist/components/index.d.ts +6430 -0
  34. package/dist/components/index.js +2 -0
  35. package/dist/components/index.js.map +1 -0
  36. package/dist/evm/index.cjs +1 -1
  37. package/dist/evm/index.cjs.map +1 -1
  38. package/dist/evm/index.d.cts +24 -0
  39. package/dist/evm/index.d.ts +24 -0
  40. package/dist/evm/index.js +1 -1
  41. package/dist/evm/index.js.map +1 -1
  42. package/dist/evm-7NHOTSAK.cjs +2 -0
  43. package/dist/evm-7NHOTSAK.cjs.map +1 -0
  44. package/dist/getChainsListByWalletType-CDPECVNS.cjs +2 -0
  45. package/dist/getChainsListByWalletType-CDPECVNS.cjs.map +1 -0
  46. package/dist/{getChainsListByWalletType-KXWMBNB4.js → getChainsListByWalletType-VMQ4BO2B.js} +2 -2
  47. package/dist/{getChainsListByWalletType-KXWMBNB4.js.map → getChainsListByWalletType-VMQ4BO2B.js.map} +1 -1
  48. package/dist/hooks/index.cjs +1 -1
  49. package/dist/hooks/index.cjs.map +1 -1
  50. package/dist/hooks/index.d.cts +70 -0
  51. package/dist/hooks/index.d.ts +70 -0
  52. package/dist/hooks/index.js +1 -1
  53. package/dist/hooks/index.js.map +1 -1
  54. package/dist/i18n/index.cjs +2 -0
  55. package/dist/i18n/index.cjs.map +1 -0
  56. package/dist/i18n/index.d.cts +15 -0
  57. package/dist/i18n/index.d.ts +15 -0
  58. package/dist/i18n/index.js +2 -0
  59. package/dist/i18n/index.js.map +1 -0
  60. package/dist/index.cjs +1 -5
  61. package/dist/index.cjs.map +1 -1
  62. package/dist/index.d.cts +791 -7818
  63. package/dist/index.d.ts +791 -7818
  64. package/dist/index.js +1 -5
  65. package/dist/index.js.map +1 -1
  66. package/dist/satellite/index.cjs +2 -0
  67. package/dist/satellite/index.cjs.map +1 -0
  68. package/dist/satellite/index.d.cts +1 -0
  69. package/dist/satellite/index.d.ts +1 -0
  70. package/dist/satellite/index.js +2 -0
  71. package/dist/satellite/index.js.map +1 -0
  72. package/dist/solana/index.cjs +1 -1
  73. package/dist/solana/index.cjs.map +1 -1
  74. package/dist/solana/index.d.cts +33 -0
  75. package/dist/solana/index.d.ts +33 -0
  76. package/dist/solana/index.js +1 -1
  77. package/dist/solana/index.js.map +1 -1
  78. package/dist/{providers/solana-WHT5KTOF.js → solana-GLHHYZDQ.js} +2 -2
  79. package/dist/{solana-2MXIY6UT.js.map → solana-GLHHYZDQ.js.map} +1 -1
  80. package/dist/solana-JUU54KQ3.cjs +2 -0
  81. package/dist/solana-JUU54KQ3.cjs.map +1 -0
  82. package/dist/types-D4Vti05g.d.cts +98 -0
  83. package/dist/types-D4Vti05g.d.ts +98 -0
  84. package/dist/types-DGsiEwne.d.cts +50 -0
  85. package/dist/types-DGsiEwne.d.ts +50 -0
  86. package/dist/useWalletNativeBalance-6RVzdGvM.d.ts +312 -0
  87. package/dist/useWalletNativeBalance-D8Ehciju.d.cts +312 -0
  88. package/dist/utils-DZB4ZTS4.cjs +2 -0
  89. package/dist/utils-DZB4ZTS4.cjs.map +1 -0
  90. package/dist/utils-H5O25MTI.cjs +2 -0
  91. package/dist/utils-H5O25MTI.cjs.map +1 -0
  92. package/dist/utils-SUIRQJIA.js +2 -0
  93. package/dist/{utils-72MDY3OH.js.map → utils-SUIRQJIA.js.map} +1 -1
  94. package/package.json +20 -12
  95. package/dist/evm-F7OJEDX3.js +0 -2
  96. package/dist/evm-F7OJEDX3.js.map +0 -1
  97. package/dist/providers/evm-5323YCLC.js +0 -2
  98. package/dist/providers/evm-5323YCLC.js.map +0 -1
  99. package/dist/providers/index.cjs +0 -6
  100. package/dist/providers/index.cjs.map +0 -1
  101. package/dist/providers/index.d.cts +0 -506
  102. package/dist/providers/index.d.ts +0 -506
  103. package/dist/providers/index.js +0 -6
  104. package/dist/providers/index.js.map +0 -1
  105. package/dist/providers/solana-WHT5KTOF.js.map +0 -1
  106. package/dist/providers/utils-FHHKXQ5Z.js +0 -2
  107. package/dist/providers/utils-FHHKXQ5Z.js.map +0 -1
  108. package/dist/providers/utils-L6CFHW4B.js +0 -2
  109. package/dist/providers/utils-L6CFHW4B.js.map +0 -1
  110. package/dist/solana-2MXIY6UT.js +0 -2
  111. package/dist/solana-EV65GS7Q.js +0 -2
  112. package/dist/solana-EV65GS7Q.js.map +0 -1
  113. package/dist/utils-72MDY3OH.js +0 -2
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/hooks/useGetWalletNameAndAvatar.ts","../src/hooks/useNovaConnect.ts","../src/hooks/useNovaConnectLabels.ts","../src/hooks/useWalletNativeBalance.ts"],"names":["useGetWalletNameAndAvatar","options","abbreviateSymbols","maxNameLength","autoRetry","retryDelay","activeWallet","useSatelliteConnectStore","store","getAdapter","walletAddress","useMemo","walletType","foundAdapter","getAdapterFromWalletType","OrbitAdapter","ensName","setEnsName","useState","ensAvatar","setEnsAvatar","isLoading","setIsLoading","error","setError","abortControllerRef","useRef","retryTimeoutRef","adapterCapabilities","hasNameResolver","hasAvatarResolver","cleanup","useCallback","fetchNameData","signal","name","avatar","avatarError","errorMessage","retry","useEffect","ensNameAbbreviated","textCenterEllipsis","NovaConnectProviderError","message","NovaConnectProviderContext","createContext","useNovaConnect","context","useContext","useHasNovaConnectContext","useNovaConnectOptional","NovaConnectLabelsContext","defaultLabels","useNovaConnectLabels","useNovaConnectLabel","key","useNovaConnectLabelsSubset","keys","allLabels","subset","hasLabel","labels","useLabelsByCategory","category","categoryLabels","isDefaultLabels","getLabelWithFallback","fallback","value","createLabelsSubset","useWalletNativeBalance","balanceCache","setBalanceCache","fetchOperationRef","cacheKey","hasBalanceResolver","fetchBalance","forceRefresh","operationId","balanceResult","prevCache","newCache","refetch"],"mappings":"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","file":"chunk-LF6FTUUQ.js","sourcesContent":["import { textCenterEllipsis } from '@tuwaio/nova-core';\nimport { getAdapterFromWalletType, OrbitAdapter } from '@tuwaio/orbit-core';\nimport { useCallback, useEffect, useMemo, useRef, useState } from 'react';\n\nimport { useSatelliteConnectStore } from '../satellite';\n\nexport interface WalletNameAndAvatarData {\n /** The resolved name from the Name Service (e.g., ENS, like \"alice.eth\"), or null if not found. */\n ensName: string | null;\n /** The URL of the avatar associated with the name, or null if not found. */\n ensAvatar: string | null;\n /** True while the name service data is being fetched. */\n isLoading: boolean;\n /** A truncated version of the name for display, or the abbreviated address if no name. */\n ensNameAbbreviated: string | undefined;\n /** Error message if the name resolution failed. */\n error: string | null;\n /** Function to retry the name resolution manually. */\n retry: () => void;\n}\n\ninterface UseGetWalletNameAndAvatarOptions {\n /** Number of characters to show on each side when abbreviating (default: 12) */\n abbreviateSymbols?: number;\n /** Maximum length before abbreviation is applied (default: 30) */\n maxNameLength?: number;\n /** Whether to automatically retry on failure (default: false) */\n autoRetry?: boolean;\n /** Retry delay in milliseconds (default: 3000) */\n retryDelay?: number;\n}\n\n/**\n * A custom hook to fetch the Name Service (e.g., ENS) name and avatar\n * for the currently active wallet.\n *\n * This hook automatically detects the active wallet and its corresponding\n * adapter via the `useSatelliteConnectStore` and attempts to resolve the\n * wallet address to a human-readable name and avatar.\n *\n * @param options Configuration options for the hook\n * @returns An object containing the resolved name, avatar, loading state, and utility functions\n *\n * @example\n * ```typescript\n * import { useGetWalletNameAndAvatar } from './useGetWalletNameAndAvatar';\n *\n * function DisplayWalletInfo() {\n * const { ensName, ensAvatar, isLoading, ensNameAbbreviated, error, retry } = useGetWalletNameAndAvatar({\n * abbreviateSymbols: 8,\n * maxNameLength: 25\n * });\n *\n * if (isLoading) {\n * return <div>Resolving name...</div>;\n * }\n *\n * if (error) {\n * return <div>Error: {error} <button onClick={retry}>Retry</button></div>;\n * }\n *\n * return (\n * <div className=\"wallet-info\">\n * {ensAvatar && <img src={ensAvatar} alt=\"Wallet Avatar\" />}\n * <p title={ensName || ''}>{ensNameAbbreviated || 'No Name Found'}</p>\n * </div>\n * );\n * }\n * ```\n */\nexport function useGetWalletNameAndAvatar(options: UseGetWalletNameAndAvatarOptions): WalletNameAndAvatarData {\n const { abbreviateSymbols = 12, maxNameLength = 30, autoRetry = false, retryDelay = 3000 } = options;\n\n // Store state selectors - memoized for performance\n const activeWallet = useSatelliteConnectStore((store) => store.activeWallet);\n const getAdapter = useSatelliteConnectStore((store) => store.getAdapter);\n\n // Memoize wallet address and adapter for dependency tracking\n const walletAddress = useMemo(() => activeWallet?.address, [activeWallet?.address]);\n const walletType = useMemo(() => activeWallet?.walletType, [activeWallet?.walletType]);\n\n const foundAdapter = useMemo(() => {\n if (!walletType) return null;\n return getAdapter(getAdapterFromWalletType(walletType ?? `${OrbitAdapter.EVM}:not-connected`));\n }, [getAdapter, walletType]);\n\n // State variables\n const [ensName, setEnsName] = useState<string | null>(null);\n const [ensAvatar, setEnsAvatar] = useState<string | null>(null);\n const [isLoading, setIsLoading] = useState(false);\n const [error, setError] = useState<string | null>(null);\n\n // Refs for cleanup and retry functionality\n const abortControllerRef = useRef<AbortController | null>(null);\n const retryTimeoutRef = useRef<number | null>(null);\n\n // Memoize adapter capabilities\n const adapterCapabilities = useMemo(() => {\n if (!foundAdapter) {\n return { hasNameResolver: false, hasAvatarResolver: false };\n }\n\n const hasNameResolver = 'getName' in foundAdapter && typeof foundAdapter.getName === 'function';\n const hasAvatarResolver = 'getAvatar' in foundAdapter && typeof foundAdapter.getAvatar === 'function';\n\n return { hasNameResolver, hasAvatarResolver };\n }, [foundAdapter]);\n\n // Cleanup function\n const cleanup = useCallback(() => {\n if (abortControllerRef.current) {\n abortControllerRef.current.abort();\n abortControllerRef.current = null;\n }\n if (retryTimeoutRef.current !== null) {\n clearTimeout(retryTimeoutRef.current);\n retryTimeoutRef.current = null;\n }\n }, []);\n\n // Main fetch function\n const fetchNameData = useCallback(async () => {\n cleanup();\n\n // Exit conditions\n if (!walletAddress || !foundAdapter || !adapterCapabilities.hasNameResolver) {\n setEnsName(null);\n setEnsAvatar(null);\n setIsLoading(false);\n setError(null);\n return;\n }\n\n // Create new abort controller for this request\n abortControllerRef.current = new AbortController();\n const { signal } = abortControllerRef.current;\n\n // Start loading\n setIsLoading(true);\n setError(null);\n setEnsName(null);\n setEnsAvatar(null);\n\n try {\n // Check if request was aborted\n if (signal.aborted) return;\n\n // Attempt to resolve the name\n const name = await foundAdapter.getName?.(walletAddress);\n\n if (signal.aborted) return;\n\n if (name) {\n setEnsName(name);\n\n // If avatar resolution is supported, fetch the avatar\n if (adapterCapabilities.hasAvatarResolver) {\n try {\n const avatar = await foundAdapter.getAvatar?.(name);\n if (!signal.aborted) {\n // Handle undefined case by converting to null\n setEnsAvatar(avatar ?? null);\n }\n } catch (avatarError) {\n // Avatar fetch failed, but name succeeded - not critical\n console.warn('Failed to fetch avatar:', avatarError);\n if (!signal.aborted) {\n setEnsAvatar(null);\n }\n }\n }\n }\n } catch (error) {\n if (signal.aborted) return;\n\n const errorMessage = error instanceof Error ? error.message : 'Failed to fetch name service data';\n console.error('Failed to fetch name service data:', error);\n\n setError(errorMessage);\n setEnsName(null);\n setEnsAvatar(null);\n\n // Auto retry if enabled\n if (autoRetry) {\n retryTimeoutRef.current = setTimeout(() => {\n fetchNameData();\n }, retryDelay) as unknown as number;\n }\n } finally {\n if (!signal.aborted) {\n setIsLoading(false);\n }\n }\n }, [walletAddress, foundAdapter, adapterCapabilities, autoRetry, retryDelay, cleanup]);\n\n // Manual retry function\n const retry = useCallback(() => {\n setError(null);\n fetchNameData();\n }, [fetchNameData]);\n\n // Effect to fetch data when dependencies change\n useEffect(() => {\n fetchNameData();\n return cleanup;\n }, [fetchNameData, cleanup]);\n\n // Cleanup on unmount\n useEffect(() => {\n return cleanup;\n }, [cleanup]);\n\n // Memoized abbreviated name computation\n const ensNameAbbreviated = useMemo(() => {\n if (ensName) {\n return ensName.length > maxNameLength\n ? textCenterEllipsis(ensName, abbreviateSymbols, abbreviateSymbols)\n : ensName;\n }\n\n return walletAddress ? textCenterEllipsis(walletAddress, abbreviateSymbols, abbreviateSymbols) : undefined;\n }, [ensName, walletAddress, maxNameLength, abbreviateSymbols]);\n\n return {\n ensName,\n ensAvatar,\n isLoading,\n ensNameAbbreviated,\n error,\n retry,\n };\n}\n","import { OrbitAdapter } from '@tuwaio/orbit-core';\nimport { createContext, useContext } from 'react';\n\nimport { NovaConnectLabels } from '../i18n';\n\nexport type ButtonTxStatus = 'idle' | 'loading' | 'succeed' | 'failed' | 'replaced';\nexport type ConnectContentType = 'network' | 'connectors' | 'about' | 'getWallet' | 'connecting' | 'impersonate';\nexport type ConnectedContentType = 'main' | 'transactions' | 'chains';\n\n// Provider props interface\nexport interface NovaConnectProviderProps {\n children: React.ReactNode;\n labels?: Partial<NovaConnectLabels>;\n}\n\n// Balance type for better type safety\nexport interface WalletBalance {\n value: string;\n symbol: string;\n}\n\n// Provider context type with better organization\nexport interface NovaConnectProviderType {\n // Modal states\n isConnectModalOpen: boolean;\n setIsConnectModalOpen: (value: boolean) => void;\n isConnectedModalOpen: boolean;\n setIsConnectedModalOpen: (value: boolean) => void;\n\n // Chain selection states\n isChainsListOpen: boolean;\n setIsChainsListOpen: (value: boolean) => void;\n isChainsListOpenMobile: boolean;\n setIsChainsListOpenMobile: (value: boolean) => void;\n\n // Connection states\n connectedButtonStatus: ButtonTxStatus;\n setConnectedButtonStatus: (value: ButtonTxStatus) => void;\n isConnected: boolean;\n setIsConnected: (value: boolean) => void;\n\n // Modal content types\n connectedModalContentType: ConnectedContentType;\n setConnectedModalContentType: (value: ConnectedContentType) => void;\n connectModalContentType: ConnectContentType;\n setConnectModalContentType: (value: ConnectContentType) => void;\n\n // Adapter and connector states\n selectedAdapter: OrbitAdapter | undefined;\n setSelectedAdapter: (value: OrbitAdapter | undefined) => void;\n activeConnector: string | undefined;\n setActiveConnector: (value: string | undefined) => void;\n\n // Impersonation\n impersonatedAddress: string;\n setImpersonatedAddress: (value: string) => void;\n}\n\n// Custom error for hook usage outside provider\nexport class NovaConnectProviderError extends Error {\n constructor(message = 'useNovaConnect must be used within NovaConnectProvider') {\n super(message);\n this.name = 'NovaConnectProviderError';\n }\n}\n\n// Create context with undefined default to enforce provider usage\nexport const NovaConnectProviderContext = createContext<NovaConnectProviderType | undefined>(undefined);\n\n/**\n * Hook to access NovaConnect context\n *\n * @throws {NovaConnectProviderError} When used outside of NovaConnectProvider\n * @returns {NovaConnectProviderType} The NovaConnect context value\n *\n * @example\n * ```typescript\n * function MyComponent() {\n * const { isConnected, handleConnectButtonClick } = useNovaConnect();\n *\n * return (\n * <button onClick={handleConnectButtonClick}>\n * {isConnected ? 'Connected' : 'Connect Wallet'}\n * </button>\n * );\n * }\n * ```\n */\nexport const useNovaConnect = (): NovaConnectProviderType => {\n const context = useContext(NovaConnectProviderContext);\n\n if (!context) {\n throw new NovaConnectProviderError();\n }\n\n return context;\n};\n\n/**\n * Hook to check if NovaConnect context is available\n *\n * @returns {boolean} True if context is available, false otherwise\n *\n * @example\n * ```typescript\n * function ConditionalComponent() {\n * const hasContext = useHasNovaConnectContext();\n *\n * if (!hasContext) {\n * return <div>NovaConnect provider not found</div>;\n * }\n *\n * return <ConnectedComponent />;\n * }\n * ```\n */\nexport const useHasNovaConnectContext = (): boolean => {\n const context = useContext(NovaConnectProviderContext);\n return context !== undefined;\n};\n\n/**\n * Optional hook that returns null if provider is not available\n *\n * @returns {NovaConnectProviderType | null} Context value or null if not available\n *\n * @example\n * ```typescript\n * function OptionalComponent() {\n * const context = useNovaConnectOptional();\n *\n * if (!context) {\n * return <div>No wallet provider available</div>;\n * }\n *\n * return <div>Connected: {context.isConnected}</div>;\n * }\n * ```\n */\nexport const useNovaConnectOptional = (): NovaConnectProviderType | null => {\n const context = useContext(NovaConnectProviderContext);\n return context ?? null;\n};\n","import { createContext, useContext } from 'react';\n\nimport { defaultLabels, NovaConnectLabels } from '../i18n';\n\n/**\n * React Context for storing and providing the UI labels.\n * It is initialized with the default English labels, ensuring that components\n * work even without an explicit provider.\n */\nexport const NovaConnectLabelsContext = createContext<NovaConnectLabels>(defaultLabels);\n\n/**\n * A custom hook to easily access the i18n labels from any component\n * within the `NovaConnectLabelsProvider` tree.\n *\n * This hook provides type-safe access to all UI labels and automatically\n * falls back to default English labels if no provider is found.\n *\n * @returns {NovaConnectLabels} The complete object of UI labels for the current locale.\n *\n * @example\n * ```typescript\n * import { useNovaConnectLabels } from './hooks/useNovaConnectLabels';\n *\n * function MyComponent() {\n * const labels = useNovaConnectLabels();\n *\n * return (\n * <div>\n * <h1>{labels.connectWallet}</h1>\n * <button>{labels.connect}</button>\n * <p aria-label={labels.walletBalance}>{formattedBalance}</p>\n * </div>\n * );\n * }\n * ```\n *\n * @example\n * ```typescript\n * // Destructuring specific labels for better performance\n * function ConnectButton() {\n * const { connectWallet, connecting, connected } = useNovaConnectLabels();\n *\n * return (\n * <button>\n * {isConnecting ? connecting : isConnected ? connected : connectWallet}\n * </button>\n * );\n * }\n * ```\n */\nexport const useNovaConnectLabels = (): NovaConnectLabels => {\n return useContext(NovaConnectLabelsContext);\n};\n\n/**\n * Hook to get a specific label by key path with type safety\n *\n * @param key The label key to retrieve\n * @returns The specific label value\n *\n * @example\n * ```typescript\n * function MyComponent() {\n * const connectLabel = useNovaConnectLabel('connectWallet');\n * const errorLabel = useNovaConnectLabel('connectionError');\n *\n * return <button>{connectLabel}</button>;\n * }\n * ```\n */\nexport const useNovaConnectLabel = <K extends keyof NovaConnectLabels>(key: K): NovaConnectLabels[K] => {\n const labels = useNovaConnectLabels();\n return labels[key];\n};\n\n/**\n * Hook to get multiple specific labels for better performance\n *\n * @param keys Array of label keys to retrieve\n * @returns Object with only the requested labels\n *\n * @example\n * ```typescript\n * function ConnectModal() {\n * const { connectWallet, connecting, disconnect } = useNovaConnectLabelsSubset(['connectWallet', 'connecting', 'disconnect']);\n *\n * return (\n * <div>\n * <h2>{connectWallet}</h2>\n * <span>{connecting}</span>\n * <button>{disconnect}</button>\n * </div>\n * );\n * }\n * ```\n */\nexport const useNovaConnectLabelsSubset = <K extends keyof NovaConnectLabels>(\n keys: K[],\n): Pick<NovaConnectLabels, K> => {\n const allLabels = useNovaConnectLabels();\n\n const subset = {} as Pick<NovaConnectLabels, K>;\n for (const key of keys) {\n subset[key] = allLabels[key];\n }\n\n return subset;\n};\n\n/**\n * Type-safe helper to check if a label exists\n *\n * @param labels The labels object\n * @param key The key to check\n * @returns Whether the key exists and has a non-empty value\n */\nexport const hasLabel = (labels: NovaConnectLabels, key: keyof NovaConnectLabels): boolean => {\n return Boolean(labels[key]?.trim());\n};\n\n/**\n * Utility type for extracting label keys by category\n */\nexport type LabelCategory = {\n actions: Extract<\n keyof NovaConnectLabels,\n 'connectWallet' | 'disconnect' | 'connecting' | 'connected' | 'tryAgain' | 'back' | 'connect' | 'close'\n >;\n states: Extract<keyof NovaConnectLabels, 'success' | 'error' | 'replaced' | 'loading' | 'idle'>;\n accessibility: Extract<\n keyof NovaConnectLabels,\n 'chainSelector' | 'closeModal' | 'selectChain' | 'walletControls' | 'openWalletModal'\n >;\n transactions: Extract<\n keyof NovaConnectLabels,\n 'transactionLoading' | 'transactionSuccess' | 'transactionError' | 'transactionReplaced' | 'recent'\n >;\n};\n\n/**\n * Hook to get labels by category for better organization\n *\n * @param category The category of labels to retrieve\n * @returns Object with labels from the specified category\n */\nexport const useLabelsByCategory = <T extends keyof LabelCategory>(\n category: T,\n): Pick<NovaConnectLabels, LabelCategory[T]> => {\n const allLabels = useNovaConnectLabels();\n\n const categoryKeys: Record<keyof LabelCategory, (keyof NovaConnectLabels)[]> = {\n actions: ['connectWallet', 'disconnect', 'connecting', 'connected', 'tryAgain', 'back', 'connect', 'close'],\n states: ['success', 'error', 'replaced', 'loading', 'idle'],\n accessibility: ['chainSelector', 'closeModal', 'selectChain', 'walletControls', 'openWalletModal'],\n transactions: ['transactionLoading', 'transactionSuccess', 'transactionError', 'transactionReplaced', 'recent'],\n };\n\n const keys = categoryKeys[category] as LabelCategory[T][];\n const categoryLabels = {} as Pick<NovaConnectLabels, LabelCategory[T]>;\n\n for (const key of keys) {\n // eslint-disable-next-line\n (categoryLabels as any)[key] = allLabels[key as keyof NovaConnectLabels];\n }\n\n return categoryLabels;\n};\n\n/**\n * Utility function to check if labels are default ones (for external use)\n * This is a regular function, not a hook, so it can be used anywhere\n *\n * @param labels The labels to check\n * @returns Whether the labels are the default English labels\n *\n * @example\n * ```typescript\n * function SomeUtilityFunction(labels: NovaConnectLabels) {\n * if (isDefaultLabels(labels)) {\n * console.log('Using default English labels');\n * }\n * }\n * ```\n */\nexport const isDefaultLabels = (labels: NovaConnectLabels): boolean => {\n return labels === defaultLabels;\n};\n\n/**\n * Utility function to get a formatted label with fallback\n *\n * @param labels The labels object\n * @param key The label key\n * @param fallback Optional fallback text\n * @returns The label value or fallback\n *\n * @example\n * ```typescript\n * const buttonText = getLabelWithFallback(labels, 'connectWallet', 'Connect');\n * ```\n */\nexport const getLabelWithFallback = (\n labels: NovaConnectLabels,\n key: keyof NovaConnectLabels,\n fallback?: string,\n): string => {\n const value = labels[key];\n if (value && value.trim()) {\n return value;\n }\n return fallback || defaultLabels[key] || key.toString();\n};\n\n/**\n * Utility function to create a labels subset (for use outside of React components)\n *\n * @param labels The source labels object\n * @param keys Array of keys to extract\n * @returns Object with only the requested labels\n *\n * @example\n * ```typescript\n * const actionLabels = createLabelsSubset(labels, ['connect', 'disconnect', 'tryAgain']);\n * ```\n */\nexport const createLabelsSubset = <K extends keyof NovaConnectLabels>(\n labels: NovaConnectLabels,\n keys: K[],\n): Pick<NovaConnectLabels, K> => {\n const subset = {} as Pick<NovaConnectLabels, K>;\n for (const key of keys) {\n subset[key] = labels[key];\n }\n return subset;\n};\n","import { getAdapterFromWalletType } from '@tuwaio/orbit-core';\nimport { useCallback, useEffect, useMemo, useRef, useState } from 'react';\n\nimport { useSatelliteConnectStore } from '../satellite';\n\n/**\n * @interface NativeBalanceResult\n * Represents the native token balance returned by the adapter.\n * The value is already formatted for human readability.\n * @property {string} value The native token balance formatted to standard decimals (e.g., \"1.5\").\n * @property {string} symbol The symbol of the native token (e.g., \"ETH\").\n */\nexport interface NativeBalanceResult {\n value: string;\n symbol: string;\n}\n\n// Type for the balance state within the hook (the fetched data or null).\ntype NativeBalanceState = NativeBalanceResult | null;\n\n// Type for the local cache: \"walletAddress-chainId\" -> { value, symbol }.\ntype BalanceCache = Record<string, NativeBalanceResult>;\n\n/**\n * @interface NativeBalanceData\n * The object returned by the useWalletNativeBalance hook.\n * @property {NativeBalanceState} balance The native token balance and symbol, or null.\n * @property {boolean} isLoading True while the balance is being fetched for the current wallet/chain combination.\n * @property {() => void} refetch Function to manually trigger a balance refresh.\n */\ninterface NativeBalanceData {\n balance: NativeBalanceState;\n isLoading: boolean;\n refetch: () => void;\n}\n\n/**\n * Custom hook to fetch the native token balance for the currently connected wallet\n * on the active chain. It includes a local cache layer to prevent redundant network calls\n * when switching between components or on re-renders for the same wallet/chain.\n *\n * @returns {NativeBalanceData} An object containing the balance data and loading state.\n *\n * @example\n * ```typescript\n * import { useWalletNativeBalance } from './useWalletNativeBalance';\n *\n * function NativeTokenDisplay() {\n * const { balance, isLoading, refetch } = useWalletNativeBalance();\n *\n * if (isLoading) {\n * return <p>Loading balance...</p>;\n * }\n *\n * // Display the formatted balance and symbol\n * return (\n * <div>\n * <p>Balance: {balance ? `${balance.value} ${balance.symbol}` : '0.00'}</p>\n * <button onClick={refetch}>Refresh</button>\n * </div>\n * );\n * }\n * ```\n */\nexport function useWalletNativeBalance(): NativeBalanceData {\n // --- 1. STATE & CACHE SETUP ---\n\n // Local cache storage. Keys combine wallet address and chain ID.\n const [balanceCache, setBalanceCache] = useState<BalanceCache>({});\n\n // Local loading state, managed alongside the cache check.\n const [isLoading, setIsLoading] = useState<boolean>(false);\n\n // Track the current fetch operation to prevent race conditions\n const fetchOperationRef = useRef<string | null>(null);\n\n // Store state selectors - memoized for performance\n const activeWallet = useSatelliteConnectStore((store) => store.activeWallet);\n const getAdapter = useSatelliteConnectStore((store) => store.getAdapter);\n\n // --- 2. COMPUTED INPUTS ---\n\n // Create the unique key for cache lookups: \"address-chainId\".\n const cacheKey = useMemo(() => {\n return activeWallet?.chainId && activeWallet?.address ? `${activeWallet.address}-${activeWallet.chainId}` : null;\n }, [activeWallet?.chainId, activeWallet?.address]);\n\n // Find the actual adapter object from the adapter map.\n const foundAdapter = useMemo(() => {\n if (!activeWallet?.walletType) return null;\n return getAdapter(getAdapterFromWalletType(activeWallet.walletType));\n }, [getAdapter, activeWallet?.walletType]);\n\n // Check if the adapter has balance functionality\n const hasBalanceResolver = useMemo(() => {\n return foundAdapter && 'getBalance' in foundAdapter && typeof foundAdapter.getBalance === 'function';\n }, [foundAdapter]);\n\n // --- 3. BALANCE FETCHING LOGIC ---\n\n const fetchBalance = useCallback(\n async (forceRefresh = false) => {\n // Exit early if essential data is missing (not connected).\n if (!activeWallet?.address || !foundAdapter || !activeWallet?.chainId || !cacheKey || !hasBalanceResolver) {\n setIsLoading(false);\n return;\n }\n\n // Set the current operation ID to prevent race conditions\n const operationId = `${cacheKey}-${Date.now()}`;\n fetchOperationRef.current = operationId;\n\n // Check cache unless forcing a refresh\n if (!forceRefresh) {\n const cachedBalance = balanceCache[cacheKey];\n if (cachedBalance) {\n setIsLoading(false);\n return;\n }\n }\n\n setIsLoading(true);\n\n try {\n // Call the adapter's getBalance method\n const balanceResult: NativeBalanceResult = await foundAdapter.getBalance(\n activeWallet.address,\n activeWallet.chainId,\n );\n\n // Only update if this operation is still the latest one\n if (fetchOperationRef.current === operationId) {\n setBalanceCache((prevCache) => ({\n ...prevCache,\n [cacheKey]: balanceResult,\n }));\n }\n } catch (error) {\n console.error(`Failed to fetch native balance for ${cacheKey}:`, error);\n\n // Optionally clear cache entry on error (if you want to retry on next call)\n if (forceRefresh && fetchOperationRef.current === operationId) {\n setBalanceCache((prevCache) => {\n const newCache = { ...prevCache };\n delete newCache[cacheKey];\n return newCache;\n });\n }\n } finally {\n // Only update loading state if this operation is still current\n if (fetchOperationRef.current === operationId) {\n setIsLoading(false);\n }\n }\n },\n [activeWallet?.address, foundAdapter, activeWallet?.chainId, cacheKey, hasBalanceResolver, balanceCache],\n );\n\n // Memoized refetch function that forces a refresh\n const refetch = useCallback(() => {\n fetchBalance(true);\n }, [fetchBalance]);\n\n // --- 4. EFFECT FOR INITIAL FETCH ---\n\n useEffect(() => {\n // Only fetch if we have all required data and no cached result\n if (cacheKey && hasBalanceResolver && !balanceCache[cacheKey]) {\n fetchBalance(false);\n } else if (!cacheKey || !hasBalanceResolver) {\n // Reset loading state if we can't fetch\n setIsLoading(false);\n }\n }, [cacheKey, hasBalanceResolver, balanceCache, fetchBalance]);\n\n // --- 5. CLEANUP EFFECT ---\n\n useEffect(() => {\n return () => {\n // Cancel any ongoing operations when component unmounts\n fetchOperationRef.current = null;\n };\n }, []);\n\n // --- 6. RETURNED DATA ---\n\n // The definitive balance is always derived from the cache based on the current key.\n const balance: NativeBalanceState = useMemo(() => {\n return cacheKey ? balanceCache[cacheKey] || null : null;\n }, [cacheKey, balanceCache]);\n\n // Return the fetched balance data and the loading status.\n return {\n balance, // { value: \"1.5\", symbol: \"ETH\" } or null\n isLoading,\n refetch,\n };\n}\n"]}
@@ -0,0 +1,2 @@
1
+ export{AllConnectors as a,AllWallets as b,Connector as c,SatelliteConnectProvider as d,SatelliteConnectProviderProps as e,SatelliteStoreContext as f,useInitializeAutoConnect as g,useSatelliteConnectStore as h,Wallet as i}from'@tuwaio/satellite-react';//# sourceMappingURL=chunk-MPEJHQKC.js.map
2
+ //# sourceMappingURL=chunk-MPEJHQKC.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"chunk-MPEJHQKC.js","sourcesContent":[]}
@@ -1,2 +1,2 @@
1
- import {OrbitAdapter,getAdapterFromWalletType}from'@tuwaio/orbit-core';var l=class{adapters=new Map;async getAdapter(t){let e=this.adapters.get(t);return e?.status==="loaded"&&e.adapter?e.adapter:e?.status==="loading"?this.waitForAdapter(t):(e?.status==="error"&&console.warn(`Retrying to load ${t} adapter after previous error`),this.loadAdapter(t))}async loadAdapter(t){this.adapters.set(t,{status:"loading"});try{let e;switch(t){case OrbitAdapter.EVM:{let{createEvmAdapter:a}=await import('./evm-RBGEX4L3.js');e=await a();break}case OrbitAdapter.SOLANA:{let{createSolanaAdapter:a}=await import('./solana-2MXIY6UT.js');e=await a();break}case OrbitAdapter.Starknet:return console.warn("Starknet adapter not implemented yet"),this.adapters.set(t,{status:"error",error:new Error("Starknet adapter not yet implemented")}),null;default:{let a=new Error(`Unknown adapter type: ${t}`);return this.adapters.set(t,{status:"error",error:a}),null}}return this.adapters.set(t,{status:"loaded",adapter:e}),e}catch(e){let a=e instanceof Error?e:new Error(`Failed to load ${t} adapter`);return console.warn(`Failed to load ${t} adapter:`,a),this.adapters.set(t,{status:"error",error:a}),null}}async waitForAdapter(t){let e=0,a=50,n=100;for(;e<a;){let s=this.adapters.get(t);if(s?.status==="loaded"&&s.adapter)return s.adapter;if(s?.status==="error")return null;await new Promise(d=>setTimeout(d,n)),e++;}return console.warn(`Timeout waiting for ${t} adapter to load after ${a*n}ms`),null}getLoadedAdapter(t){let e=this.adapters.get(t);return e?.status==="loaded"&&e.adapter||null}getAdapterStatus(t){return this.adapters.get(t)?.status||"idle"}async isAdapterAvailable(t){return await this.getAdapter(t)!==null}async preloadAdapters(t=[OrbitAdapter.EVM,OrbitAdapter.SOLANA]){await Promise.allSettled(t.map(e=>this.getAdapter(e)));}clearCache(){this.adapters.clear();}getAdaptersInfo(){let t={};for(let[e,a]of this.adapters.entries())t[e]=a.status;return t}},i=new l;function A(r){return r!=null&&(typeof r=="string"||typeof r=="number")}async function C(r){let{walletType:t,chains:e=[],...a}=r;if(!t)return console.warn("getChainsListByWalletType: walletType is required"),[];let n=getAdapterFromWalletType(t),s=await i.getAdapter(n);if(!s)return console.warn(`No adapter available for ${n}, using fallback`),u(n,a);try{return n===OrbitAdapter.SOLANA?s.getChains(a.solanaRPCUrls,e):s.getChains(a.appChains)}catch(d){return console.warn(`Error getting chains for ${n}:`,d),u(n,a)}}function b(r){let{walletType:t,chains:e=[],...a}=r;if(!t)return console.warn("getChainsListByWalletType: walletType is required"),[];let n=getAdapterFromWalletType(t),s=i.getLoadedAdapter(n);if(s)try{return n===OrbitAdapter.SOLANA?s.getChains(a.solanaRPCUrls,e):s.getChains(a.appChains)}catch(d){console.warn(`Error with loaded adapter for ${n}:`,d);}return u(n,a)}function u(r,t){switch(r){case OrbitAdapter.EVM:{let e=t.appChains;return Array.isArray(e)?e.map(a=>typeof a=="object"&&a?.id?a.id:typeof a=="number"||typeof a=="string"?a:null).filter(A):[]}case OrbitAdapter.SOLANA:{let e=t.solanaRPCUrls;return e&&typeof e=="object"?Object.keys(e):[]}default:return []}}async function w(r){return (await i.getAdapter(OrbitAdapter.EVM))?.isChainList(r)??r.every(e=>typeof e=="number")}async function L(r){return (await i.getAdapter(OrbitAdapter.SOLANA))?.isChainList(r)??r.every(e=>typeof e=="string")}function S(r){return i.getLoadedAdapter(OrbitAdapter.EVM)?.isChainList(r)??r.every(e=>typeof e=="number")}function O(r){return i.getLoadedAdapter(OrbitAdapter.SOLANA)?.isChainList(r)??r.every(e=>typeof e=="string")}async function P(){return (await i.getAdapter(OrbitAdapter.SOLANA))?.getAvailableClusters?.()??[]}async function T(r){return (await i.getAdapter(OrbitAdapter.SOLANA))?.isValidCluster?.(r)??false}function x(r){if(r&&typeof r=="object"&&"connectedWallet"in r&&r.connectedWallet&&typeof r.connectedWallet=="object"&&"chains"in r.connectedWallet){let t=r.connectedWallet.chains;if(Array.isArray(t))return t}}async function E(r=[OrbitAdapter.EVM,OrbitAdapter.SOLANA]){await i.preloadAdapters(r);}function v(r){return i.getAdapterStatus(r)}function I(){return i.getAdaptersInfo()}export{C as a,b,w as c,L as d,S as e,O as f,P as g,T as h,x as i,E as j,v as k,I as l};//# sourceMappingURL=chunk-NJDPFYUJ.js.map
2
- //# sourceMappingURL=chunk-NJDPFYUJ.js.map
1
+ import {OrbitAdapter,getAdapterFromWalletType}from'@tuwaio/orbit-core';var l=class{adapters=new Map;async getAdapter(t){let e=this.adapters.get(t);return e?.status==="loaded"&&e.adapter?e.adapter:e?.status==="loading"?this.waitForAdapter(t):(e?.status==="error"&&console.warn(`Retrying to load ${t} adapter after previous error`),this.loadAdapter(t))}async loadAdapter(t){this.adapters.set(t,{status:"loading"});try{let e;switch(t){case OrbitAdapter.EVM:{let{createEvmAdapter:a}=await import('./evm-RBGEX4L3.js');e=await a();break}case OrbitAdapter.SOLANA:{let{createSolanaAdapter:a}=await import('./solana-GLHHYZDQ.js');e=await a();break}case OrbitAdapter.Starknet:return console.warn("Starknet adapter not implemented yet"),this.adapters.set(t,{status:"error",error:new Error("Starknet adapter not yet implemented")}),null;default:{let a=new Error(`Unknown adapter type: ${t}`);return this.adapters.set(t,{status:"error",error:a}),null}}return this.adapters.set(t,{status:"loaded",adapter:e}),e}catch(e){let a=e instanceof Error?e:new Error(`Failed to load ${t} adapter`);return console.warn(`Failed to load ${t} adapter:`,a),this.adapters.set(t,{status:"error",error:a}),null}}async waitForAdapter(t){let e=0,a=50,n=100;for(;e<a;){let s=this.adapters.get(t);if(s?.status==="loaded"&&s.adapter)return s.adapter;if(s?.status==="error")return null;await new Promise(d=>setTimeout(d,n)),e++;}return console.warn(`Timeout waiting for ${t} adapter to load after ${a*n}ms`),null}getLoadedAdapter(t){let e=this.adapters.get(t);return e?.status==="loaded"&&e.adapter||null}getAdapterStatus(t){return this.adapters.get(t)?.status||"idle"}async isAdapterAvailable(t){return await this.getAdapter(t)!==null}async preloadAdapters(t=[OrbitAdapter.EVM,OrbitAdapter.SOLANA]){await Promise.allSettled(t.map(e=>this.getAdapter(e)));}clearCache(){this.adapters.clear();}getAdaptersInfo(){let t={};for(let[e,a]of this.adapters.entries())t[e]=a.status;return t}},i=new l;function A(r){return r!=null&&(typeof r=="string"||typeof r=="number")}async function C(r){let{walletType:t,chains:e=[],...a}=r;if(!t)return console.warn("getChainsListByWalletType: walletType is required"),[];let n=getAdapterFromWalletType(t),s=await i.getAdapter(n);if(!s)return console.warn(`No adapter available for ${n}, using fallback`),u(n,a);try{return n===OrbitAdapter.SOLANA?s.getChains(a.solanaRPCUrls,e):s.getChains(a.appChains)}catch(d){return console.warn(`Error getting chains for ${n}:`,d),u(n,a)}}function b(r){let{walletType:t,chains:e=[],...a}=r;if(!t)return console.warn("getChainsListByWalletType: walletType is required"),[];let n=getAdapterFromWalletType(t),s=i.getLoadedAdapter(n);if(s)try{return n===OrbitAdapter.SOLANA?s.getChains(a.solanaRPCUrls,e):s.getChains(a.appChains)}catch(d){console.warn(`Error with loaded adapter for ${n}:`,d);}return u(n,a)}function u(r,t){switch(r){case OrbitAdapter.EVM:{let e=t.appChains;return Array.isArray(e)?e.map(a=>typeof a=="object"&&a?.id?a.id:typeof a=="number"||typeof a=="string"?a:null).filter(A):[]}case OrbitAdapter.SOLANA:{let e=t.solanaRPCUrls;return e&&typeof e=="object"?Object.keys(e):[]}default:return []}}async function w(r){return (await i.getAdapter(OrbitAdapter.EVM))?.isChainList(r)??r.every(e=>typeof e=="number")}async function L(r){return (await i.getAdapter(OrbitAdapter.SOLANA))?.isChainList(r)??r.every(e=>typeof e=="string")}function S(r){return i.getLoadedAdapter(OrbitAdapter.EVM)?.isChainList(r)??r.every(e=>typeof e=="number")}function O(r){return i.getLoadedAdapter(OrbitAdapter.SOLANA)?.isChainList(r)??r.every(e=>typeof e=="string")}async function P(){return (await i.getAdapter(OrbitAdapter.SOLANA))?.getAvailableClusters?.()??[]}async function T(r){return (await i.getAdapter(OrbitAdapter.SOLANA))?.isValidCluster?.(r)??false}function x(r){if(r&&typeof r=="object"&&"connectedWallet"in r&&r.connectedWallet&&typeof r.connectedWallet=="object"&&"chains"in r.connectedWallet){let t=r.connectedWallet.chains;if(Array.isArray(t))return t}}async function E(r=[OrbitAdapter.EVM,OrbitAdapter.SOLANA]){await i.preloadAdapters(r);}function v(r){return i.getAdapterStatus(r)}function I(){return i.getAdaptersInfo()}export{C as a,b,w as c,L as d,S as e,O as f,P as g,T as h,x as i,E as j,v as k,I as l};//# sourceMappingURL=chunk-MQGDTFY7.js.map
2
+ //# sourceMappingURL=chunk-MQGDTFY7.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/utils/adapters/registry.ts","../src/utils/getChainsListByWalletType.ts"],"names":["LazyAdapterRegistry","type","info","adapter","OrbitAdapter","createEvmAdapter","createSolanaAdapter","error","err","attempts","maxAttempts","pollInterval","resolve","types","adapterInfo","adapterRegistry","isValidChainId","id","getChainsListByWalletType","params","walletType","chains","config","adapterType","getAdapterFromWalletType","getFallbackChains","getChainsListByWalletTypeSync","appChains","chain","solanaRPCUrls","isEvmChainList","isSolanaChainList","isEvmChainListSync","isSolanaChainListSync","getAvailableSolanaClusters","isValidSolanaCluster","cluster","getWalletChains","activeWallet","preloadChainAdapters","getAdapterStatus","getAllAdaptersStatus"],"mappings":"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","file":"chunk-NJDPFYUJ.js","sourcesContent":["import { OrbitAdapter } from '@tuwaio/orbit-core';\n\nimport type { AdapterInfo, AdapterLoadStatus, ChainAdapter } from './types';\n\n/**\n * Registry for blockchain adapters with lazy loading and intelligent caching.\n *\n * This class manages the lifecycle of blockchain adapters, providing:\n * - Lazy loading of adapters only when needed\n * - Intelligent caching to avoid redundant loads\n * - Graceful error handling and retry logic\n * - Thread-safe loading with concurrent request handling\n *\n * @internal\n * @since 1.0.0\n */\nclass LazyAdapterRegistry {\n /**\n * Internal cache mapping adapter types to their loading information.\n * @private\n */\n private adapters = new Map<OrbitAdapter, AdapterInfo>();\n\n /**\n * Gets an adapter with automatic loading and caching.\n *\n * This method implements intelligent loading logic:\n * - Returns immediately if adapter is already loaded\n * - Waits for completion if adapter is currently loading\n * - Retries loading if previous attempt failed\n * - Initiates new load if adapter hasn't been requested before\n *\n * @param type The blockchain adapter type to retrieve\n * @returns Promise resolving to the loaded adapter or null if unavailable\n *\n * @example\n * ```typescript\n * const evmAdapter = await registry.getAdapter(OrbitAdapter.EVM);\n * if (evmAdapter) {\n * const chains = evmAdapter.getChains(appChains);\n * }\n * ```\n *\n * @since 1.0.0\n */\n async getAdapter(type: OrbitAdapter): Promise<ChainAdapter | null> {\n const info = this.adapters.get(type);\n\n // Return cached adapter if already loaded\n if (info?.status === 'loaded' && info.adapter) {\n return info.adapter;\n }\n\n // Wait for completion if currently loading\n if (info?.status === 'loading') {\n return this.waitForAdapter(type);\n }\n\n // Retry loading if previous attempt failed\n if (info?.status === 'error') {\n console.warn(`Retrying to load ${type} adapter after previous error`);\n }\n\n // Start new loading process\n return this.loadAdapter(type);\n }\n\n /**\n * Loads a specific adapter with error handling and state management.\n *\n * @private\n * @param type The adapter type to load\n * @returns Promise resolving to the loaded adapter or null on failure\n *\n * @since 1.0.0\n */\n private async loadAdapter(type: OrbitAdapter): Promise<ChainAdapter | null> {\n // Set loading status to prevent concurrent loads\n this.adapters.set(type, { status: 'loading' });\n\n try {\n let adapter: ChainAdapter;\n\n switch (type) {\n case OrbitAdapter.EVM: {\n const { createEvmAdapter } = await import('./evm');\n adapter = await createEvmAdapter();\n break;\n }\n case OrbitAdapter.SOLANA: {\n const { createSolanaAdapter } = await import('./solana');\n adapter = await createSolanaAdapter();\n break;\n }\n case OrbitAdapter.Starknet: {\n // Future implementation placeholder\n console.warn('Starknet adapter not implemented yet');\n this.adapters.set(type, {\n status: 'error',\n error: new Error('Starknet adapter not yet implemented'),\n });\n return null;\n }\n default: {\n const error = new Error(`Unknown adapter type: ${type}`);\n this.adapters.set(type, { status: 'error', error });\n return null;\n }\n }\n\n // Mark as successfully loaded\n this.adapters.set(type, { status: 'loaded', adapter });\n return adapter;\n } catch (error) {\n const err = error instanceof Error ? error : new Error(`Failed to load ${type} adapter`);\n console.warn(`Failed to load ${type} adapter:`, err);\n this.adapters.set(type, { status: 'error', error: err });\n return null;\n }\n }\n\n /**\n * Waits for an adapter that's currently loading to complete.\n *\n * Implements polling with timeout to handle concurrent loading requests.\n * Multiple calls to getAdapter() for the same type will wait for a single\n * loading operation to complete rather than starting multiple loads.\n *\n * @private\n * @param type The adapter type to wait for\n * @returns Promise resolving to the loaded adapter or null on timeout/error\n *\n * @since 1.0.0\n */\n private async waitForAdapter(type: OrbitAdapter): Promise<ChainAdapter | null> {\n let attempts = 0;\n const maxAttempts = 50; // 5 seconds with 100ms intervals\n const pollInterval = 100; // milliseconds\n\n while (attempts < maxAttempts) {\n const info = this.adapters.get(type);\n\n if (info?.status === 'loaded' && info.adapter) {\n return info.adapter;\n }\n\n if (info?.status === 'error') {\n return null;\n }\n\n // Wait before next poll\n await new Promise((resolve) => setTimeout(resolve, pollInterval));\n attempts++;\n }\n\n console.warn(`Timeout waiting for ${type} adapter to load after ${maxAttempts * pollInterval}ms`);\n return null;\n }\n\n /**\n * Synchronously retrieves an already loaded adapter.\n *\n * This method only returns adapters that have been successfully loaded\n * and cached. It will not trigger loading of new adapters.\n *\n * @param type The adapter type to retrieve\n * @returns The loaded adapter or null if not available/loaded\n *\n * @example\n * ```typescript\n * // Check if adapter is already loaded\n * const adapter = registry.getLoadedAdapter(OrbitAdapter.EVM);\n * if (adapter) {\n * // Use immediately without waiting\n * const isValid = adapter.isChainList([1, 137]);\n * }\n * ```\n *\n * @since 1.0.0\n */\n getLoadedAdapter(type: OrbitAdapter): ChainAdapter | null {\n const info = this.adapters.get(type);\n return info?.status === 'loaded' ? info.adapter || null : null;\n }\n\n /**\n * Gets the current loading status of a specific adapter.\n *\n * @param type The adapter type to check\n * @returns Current status of the adapter\n *\n * @example\n * ```typescript\n * const status = registry.getAdapterStatus(OrbitAdapter.EVM);\n * console.log(`EVM adapter status: ${status}`);\n * // Possible values: 'idle', 'loading', 'loaded', 'error'\n * ```\n *\n * @since 1.0.0\n */\n getAdapterStatus(type: OrbitAdapter): AdapterLoadStatus {\n return this.adapters.get(type)?.status || 'idle';\n }\n\n /**\n * Checks if an adapter is available by attempting to load it.\n *\n * @param type The adapter type to check for availability\n * @returns Promise resolving to true if adapter can be loaded successfully\n *\n * @example\n * ```typescript\n * const hasEvm = await registry.isAdapterAvailable(OrbitAdapter.EVM);\n * const hasSolana = await registry.isAdapterAvailable(OrbitAdapter.SOLANA);\n *\n * if (hasEvm && hasSolana) {\n * console.log('Multi-chain support available');\n * }\n * ```\n *\n * @since 1.0.0\n */\n async isAdapterAvailable(type: OrbitAdapter): Promise<boolean> {\n const adapter = await this.getAdapter(type);\n return adapter !== null;\n }\n\n /**\n * Preloads multiple adapters for improved performance.\n *\n * This method is useful for application initialization to load commonly\n * used adapters ahead of time. All loading operations run concurrently.\n *\n * @param types Array of adapter types to preload (defaults to EVM and Solana)\n * @returns Promise that resolves when all loading attempts complete\n *\n * @example\n * ```typescript\n * // Preload during app startup\n * await registry.preloadAdapters([OrbitAdapter.EVM, OrbitAdapter.SOLANA]);\n *\n * // Later usage will be instant for loaded adapters\n * const evmAdapter = registry.getLoadedAdapter(OrbitAdapter.EVM);\n * ```\n *\n * @since 1.0.0\n */\n async preloadAdapters(types: OrbitAdapter[] = [OrbitAdapter.EVM, OrbitAdapter.SOLANA]): Promise<void> {\n // Use Promise.allSettled to continue even if some adapters fail\n await Promise.allSettled(types.map((type) => this.getAdapter(type)));\n }\n\n /**\n * Clears all cached adapters and resets the registry state.\n *\n * This method is useful for testing scenarios or when you need to\n * force reload of all adapters (e.g., after configuration changes).\n *\n * @example\n * ```typescript\n * // Clear cache to force reload\n * registry.clearCache();\n *\n * // Next getAdapter() call will reload from scratch\n * const adapter = await registry.getAdapter(OrbitAdapter.EVM);\n * ```\n *\n * @since 1.0.0\n */\n clearCache(): void {\n this.adapters.clear();\n }\n\n /**\n * Gets comprehensive information about all registered adapters.\n *\n * @returns Record mapping adapter types to their current loading status\n *\n * @example\n * ```typescript\n * const info = registry.getAdaptersInfo();\n * console.log('Adapter status overview:', info);\n * // Output: { \"evm\": \"loaded\", \"solana\": \"loading\", \"starknet\": \"idle\" }\n *\n * // Check specific status\n * if (info.evm === 'loaded') {\n * console.log('EVM adapter ready for use');\n * }\n * ```\n *\n * @since 1.0.0\n */\n getAdaptersInfo(): Record<string, AdapterLoadStatus> {\n const info: Record<string, AdapterLoadStatus> = {};\n for (const [type, adapterInfo] of this.adapters.entries()) {\n info[type] = adapterInfo.status;\n }\n return info;\n }\n}\n\n/**\n * Global singleton instance of the adapter registry.\n *\n * This is the primary interface for accessing blockchain adapters throughout\n * the application. The registry handles all loading, caching, and lifecycle\n * management automatically.\n *\n * @example\n * ```typescript\n * import { adapterRegistry } from './registry';\n *\n * // Get an adapter (loads if needed)\n * const evmAdapter = await adapterRegistry.getAdapter(OrbitAdapter.EVM);\n *\n * // Check loading status\n * const status = adapterRegistry.getAdapterStatus(OrbitAdapter.EVM);\n *\n * // Preload adapters during initialization\n * await adapterRegistry.preloadAdapters();\n * ```\n *\n * @since 1.0.0\n */\nexport const adapterRegistry = new LazyAdapterRegistry();\n","import { getAdapterFromWalletType, OrbitAdapter, WalletType } from '@tuwaio/orbit-core';\n\nimport { ChainIdentifierArray, InitialChains } from '../types';\nimport { adapterRegistry } from './adapters/registry';\n\n/**\n * Parameters for retrieving chain lists based on wallet configuration.\n *\n * Combines chain configuration with wallet-specific requirements to determine\n * which chains should be available for a given wallet type.\n *\n * @interface GetChainsListParams\n * @extends InitialChains\n * @since 1.0.0\n *\n * @example\n * ```typescript\n * const params: GetChainsListParams = {\n * walletType: WalletType.EVM_METAMASK,\n * appChains: [\n * { id: 1, name: 'Ethereum' },\n * { id: 137, name: 'Polygon' }\n * ],\n * chains: [1, 137] // Optional filter\n * };\n * ```\n */\ninterface GetChainsListParams extends InitialChains {\n /** The wallet type to determine chain compatibility */\n walletType: WalletType;\n /** Optional array of specific chain identifiers to filter or validate */\n chains?: ChainIdentifierArray;\n}\n\n/**\n * Type guard that validates if a value represents a valid chain identifier.\n *\n * Chain identifiers can be strings (for Solana clusters) or numbers (for EVM chain IDs).\n * This function filters out null, undefined, and other invalid values.\n *\n * @param id - Value to check for validity as chain identifier\n * @returns True if the value is a valid string or number chain ID\n *\n * @example\n * ```typescript\n * const rawChains = [1, 'mainnet-beta', null, undefined, 137];\n * const validChains = rawChains.filter(isValidChainId);\n * // Result: [1, 'mainnet-beta', 137]\n * ```\n *\n * @since 1.0.0\n */\nfunction isValidChainId(id: unknown): id is string | number {\n return id !== undefined && id !== null && (typeof id === 'string' || typeof id === 'number');\n}\n\n/**\n * Retrieves chain list for a specific wallet type with automatic adapter loading.\n *\n * This is the primary function for getting blockchain-compatible chains based on\n * wallet type and configuration. It automatically determines the correct adapter,\n * loads it if necessary, and falls back to safe defaults if loading fails.\n *\n * The function supports all major blockchain types:\n * - EVM chains: Returns numeric chain IDs from app configuration\n * - Solana clusters: Returns string cluster names from RPC configuration\n * - Future blockchains: Extensible through the adapter pattern\n *\n * @param params - Configuration object with wallet type and chain data\n * @returns Promise resolving to array of chain identifiers\n *\n * @example\n * ```typescript\n * // Get EVM chains for MetaMask\n * const evmChains = await getChainsListByWalletType({\n * walletType: WalletType.EVM_METAMASK,\n * appChains: [\n * { id: 1, name: 'Ethereum' },\n * { id: 137, name: 'Polygon' }\n * ]\n * });\n * // Returns: [1, 137]\n *\n * // Get Solana clusters for Phantom\n * const solanaClusters = await getChainsListByWalletType({\n * walletType: WalletType.SOLANA_PHANTOM,\n * solanaRPCUrls: {\n * 'mainnet-beta': 'https://api.mainnet-beta.solana.com',\n * 'devnet': 'https://api.devnet.solana.com'\n * }\n * });\n * // Returns: ['mainnet-beta', 'devnet']\n * ```\n *\n * @since 1.0.0\n */\nexport async function getChainsListByWalletType(params: GetChainsListParams): Promise<(string | number)[]> {\n const { walletType, chains = [], ...config } = params;\n\n if (!walletType) {\n console.warn('getChainsListByWalletType: walletType is required');\n return [];\n }\n\n const adapterType = getAdapterFromWalletType(walletType);\n const adapter = await adapterRegistry.getAdapter(adapterType);\n\n if (!adapter) {\n console.warn(`No adapter available for ${adapterType}, using fallback`);\n return getFallbackChains(adapterType, config);\n }\n\n try {\n if (adapterType === OrbitAdapter.SOLANA) {\n return adapter.getChains(config.solanaRPCUrls, chains);\n } else {\n return adapter.getChains(config.appChains);\n }\n } catch (error) {\n console.warn(`Error getting chains for ${adapterType}:`, error);\n return getFallbackChains(adapterType, config);\n }\n}\n\n/**\n * Synchronous version that only works with pre-loaded adapters.\n *\n * This function provides immediate results by using only adapters that have\n * already been loaded into the registry cache. It will not trigger new\n * loading operations, making it safe for synchronous contexts but potentially\n * less complete than the async version.\n *\n * Use this function when:\n * - You've pre-loaded adapters during app initialization\n * - You need immediate results without async overhead\n * - You're in a synchronous context where async calls aren't feasible\n *\n * @param params - Configuration object with wallet type and chain data\n * @returns Array of chain identifiers (empty if adapter not loaded)\n *\n * @example\n * ```typescript\n * // Pre-load adapters first\n * await preloadChainAdapters([OrbitAdapter.EVM, OrbitAdapter.SOLANA]);\n *\n * // Now safe to use sync version\n * const chains = getChainsListByWalletTypeSync({\n * walletType: WalletType.EVM_METAMASK,\n * appChains: evmConfiguration\n * });\n * ```\n *\n * @since 1.0.0\n */\nexport function getChainsListByWalletTypeSync(params: GetChainsListParams): (string | number)[] {\n const { walletType, chains = [], ...config } = params;\n\n if (!walletType) {\n console.warn('getChainsListByWalletType: walletType is required');\n return [];\n }\n\n const adapterType = getAdapterFromWalletType(walletType);\n const adapter = adapterRegistry.getLoadedAdapter(adapterType);\n\n if (adapter) {\n try {\n if (adapterType === OrbitAdapter.SOLANA) {\n return adapter.getChains(config.solanaRPCUrls, chains);\n } else {\n return adapter.getChains(config.appChains);\n }\n } catch (error) {\n console.warn(`Error with loaded adapter for ${adapterType}:`, error);\n }\n }\n\n return getFallbackChains(adapterType, config);\n}\n\n/**\n * Provides fallback chain extraction without external dependencies.\n *\n * This function implements basic chain extraction logic that works without\n * requiring blockchain-specific packages to be installed. It provides a\n * safety net when adapters fail to load or aren't available.\n *\n * Fallback behaviors:\n * - EVM: Extracts `id` field from chain objects or direct identifiers\n * - Solana: Extracts keys from RPC URL configuration objects\n * - Unknown: Returns empty array\n *\n * @private\n * @param adapterType - The blockchain adapter type\n * @param config - Configuration object containing chain data\n * @returns Array of extracted chain identifiers\n *\n * @since 1.0.0\n */\nfunction getFallbackChains(adapterType: OrbitAdapter, config: any): (string | number)[] {\n switch (adapterType) {\n case OrbitAdapter.EVM: {\n const appChains = config.appChains;\n if (!Array.isArray(appChains)) return [];\n\n return appChains\n .map((chain: any) => {\n // Handle chain objects with id property (e.g., { id: 1, name: 'Ethereum' })\n if (typeof chain === 'object' && chain?.id) return chain.id;\n // Handle direct chain identifiers (numbers or strings)\n if (typeof chain === 'number' || typeof chain === 'string') return chain;\n return null;\n })\n .filter(isValidChainId);\n }\n case OrbitAdapter.SOLANA: {\n const solanaRPCUrls = config.solanaRPCUrls;\n // Extract cluster names from RPC URL configuration\n return solanaRPCUrls && typeof solanaRPCUrls === 'object' ? Object.keys(solanaRPCUrls) : [];\n }\n default:\n return [];\n }\n}\n\n// ========================================\n// Chain List Validation Functions\n// ========================================\n\n/**\n * Validates if a chain list conforms to EVM format (with adapter loading).\n *\n * Uses the EVM adapter to perform comprehensive validation, falling back to\n * basic type checking if the adapter isn't available. EVM chains typically\n * use numeric identifiers.\n *\n * @param chains - Array of chain identifiers to validate\n * @returns Promise resolving to true if chains are valid for EVM\n *\n * @example\n * ```typescript\n * const isEvm = await isEvmChainList([1, 137, 56]); // true\n * const notEvm = await isEvmChainList(['mainnet-beta']); // false\n * ```\n *\n * @since 1.0.0\n */\nexport async function isEvmChainList(chains: (string | number)[]): Promise<boolean> {\n const adapter = await adapterRegistry.getAdapter(OrbitAdapter.EVM);\n return adapter?.isChainList(chains) ?? chains.every((chain) => typeof chain === 'number');\n}\n\n/**\n * Validates if a chain list conforms to Solana format (with adapter loading).\n *\n * Uses the Solana adapter to perform comprehensive validation, falling back to\n * basic type checking if the adapter isn't available. Solana chains typically\n * use string cluster names.\n *\n * @param chains - Array of chain identifiers to validate\n * @returns Promise resolving to true if chains are valid for Solana\n *\n * @example\n * ```typescript\n * const isSolana = await isSolanaChainList(['mainnet-beta', 'devnet']); // true\n * const notSolana = await isSolanaChainList([1, 137]); // false\n * ```\n *\n * @since 1.0.0\n */\nexport async function isSolanaChainList(chains: (string | number)[]): Promise<boolean> {\n const adapter = await adapterRegistry.getAdapter(OrbitAdapter.SOLANA);\n return adapter?.isChainList(chains) ?? chains.every((chain) => typeof chain === 'string');\n}\n\n/**\n * Synchronous EVM chain list validation using pre-loaded adapters.\n *\n * Provides immediate validation results without triggering adapter loading.\n * Falls back to basic type checking if adapter isn't pre-loaded.\n *\n * @param chains - Array of chain identifiers to validate\n * @returns True if chains are valid for EVM\n *\n * @example\n * ```typescript\n * const isEvm = isEvmChainListSync([1, 137, 56]); // true (immediate result)\n * ```\n *\n * @since 1.0.0\n */\nexport function isEvmChainListSync(chains: (string | number)[]): boolean {\n const adapter = adapterRegistry.getLoadedAdapter(OrbitAdapter.EVM);\n return adapter?.isChainList(chains) ?? chains.every((chain) => typeof chain === 'number');\n}\n\n/**\n * Synchronous Solana chain list validation using pre-loaded adapters.\n *\n * Provides immediate validation results without triggering adapter loading.\n * Falls back to basic type checking if adapter isn't pre-loaded.\n *\n * @param chains - Array of chain identifiers to validate\n * @returns True if chains are valid for Solana\n *\n * @example\n * ```typescript\n * const isSolana = isSolanaChainListSync(['mainnet-beta', 'devnet']); // true\n * ```\n *\n * @since 1.0.0\n */\nexport function isSolanaChainListSync(chains: (string | number)[]): boolean {\n const adapter = adapterRegistry.getLoadedAdapter(OrbitAdapter.SOLANA);\n return adapter?.isChainList(chains) ?? chains.every((chain) => typeof chain === 'string');\n}\n\n// ========================================\n// Solana-Specific Utilities\n// ========================================\n\n/**\n * Retrieves all available Solana clusters from the current configuration.\n *\n * This function loads the Solana adapter and queries it for all configured\n * cluster names. Useful for populating UI dropdowns or validating cluster\n * availability before connection attempts.\n *\n * @returns Promise resolving to array of available cluster names\n *\n * @example\n * ```typescript\n * const clusters = await getAvailableSolanaClusters();\n * console.log('Available clusters:', clusters);\n * // Might log: ['mainnet-beta', 'devnet', 'testnet', 'localnet']\n *\n * // Use for UI population\n * const clusterOptions = clusters.map(cluster => ({\n * value: cluster,\n * label: cluster.replace('-', ' ').toUpperCase()\n * }));\n * ```\n *\n * @since 1.0.0\n */\nexport async function getAvailableSolanaClusters(): Promise<string[]> {\n const adapter = await adapterRegistry.getAdapter(OrbitAdapter.SOLANA);\n return adapter?.getAvailableClusters?.() ?? [];\n}\n\n/**\n * Validates whether a cluster name is valid for Solana connections.\n *\n * This function loads the Solana adapter and uses it to validate cluster\n * names against known Solana cluster monikers and custom configurations.\n *\n * @param cluster - Cluster name to validate\n * @returns Promise resolving to true if cluster is valid\n *\n * @example\n * ```typescript\n * const isValid = await isValidSolanaCluster('mainnet-beta'); // true\n * const isInvalid = await isValidSolanaCluster('invalid-cluster'); // false\n *\n * // Use for form validation\n * if (await isValidSolanaCluster(userInput)) {\n * // Proceed with connection\n * } else {\n * // Show error message\n * }\n * ```\n *\n * @since 1.0.0\n */\nexport async function isValidSolanaCluster(cluster: string): Promise<boolean> {\n const adapter = await adapterRegistry.getAdapter(OrbitAdapter.SOLANA);\n return adapter?.isValidCluster?.(cluster) ?? false;\n}\n\n// ========================================\n// Wallet Chain Extraction Utilities\n// ========================================\n\n/**\n * Safely extracts chain information from a wallet object.\n *\n * This utility function handles the complex nested structure of wallet objects\n * and safely extracts chain information without throwing errors. It performs\n * comprehensive type checking to ensure data integrity.\n *\n * The function expects wallet objects with this structure:\n * ```\n * {\n * connectedWallet: {\n * chains: [chain1, chain2, ...]\n * }\n * }\n * ```\n *\n * @param activeWallet - Wallet object to extract chains from\n * @returns Array of chain identifiers or undefined if not found/invalid\n *\n * @example\n * ```typescript\n * // With valid wallet structure\n * const wallet = {\n * connectedWallet: {\n * chains: [1, 137, 56]\n * }\n * };\n * const chains = getWalletChains(wallet); // [1, 137, 56]\n *\n * // With invalid/missing structure\n * const invalidWallet = { someOtherProperty: true };\n * const noChains = getWalletChains(invalidWallet); // undefined\n *\n * // Use in conditional logic\n * const walletChains = getWalletChains(activeWallet);\n * if (walletChains) {\n * console.log('Wallet supports chains:', walletChains);\n * }\n * ```\n *\n * @since 1.0.0\n */\nexport function getWalletChains(activeWallet: any): (string | number)[] | undefined {\n if (\n activeWallet &&\n typeof activeWallet === 'object' &&\n 'connectedWallet' in activeWallet &&\n activeWallet.connectedWallet &&\n typeof activeWallet.connectedWallet === 'object' &&\n 'chains' in activeWallet.connectedWallet\n ) {\n const chains = activeWallet.connectedWallet.chains;\n if (Array.isArray(chains)) {\n return chains;\n }\n }\n return undefined;\n}\n\n// ========================================\n// Adapter Management Utilities\n// ========================================\n\n/**\n * Pre-loads blockchain adapters for improved application performance.\n *\n * This function should be called during application initialization to load\n * commonly used adapters ahead of time. This eliminates loading delays when\n * users first interact with wallet connections.\n *\n * All loading operations run concurrently for maximum efficiency, and the\n * function completes even if some adapters fail to load (partial success).\n *\n * @param types - Array of adapter types to preload (defaults to EVM and Solana)\n * @returns Promise that resolves when all loading attempts complete\n *\n * @example\n * ```typescript\n * // During app initialization\n * export async function initializeApp() {\n * // Preload common adapters\n * await preloadChainAdapters([OrbitAdapter.EVM, OrbitAdapter.SOLANA]);\n *\n * // Continue with other initialization\n * // ...\n * }\n *\n * // Later usage will be instant for loaded adapters\n * const evmChains = getChainsListByWalletTypeSync({\n * walletType: WalletType.EVM_METAMASK,\n * appChains: configuration\n * }); // Instant result since adapter is pre-loaded\n * ```\n *\n * @since 1.0.0\n */\nexport async function preloadChainAdapters(\n types: OrbitAdapter[] = [OrbitAdapter.EVM, OrbitAdapter.SOLANA],\n): Promise<void> {\n await adapterRegistry.preloadAdapters(types);\n}\n\n/**\n * Gets the current loading status of a specific adapter.\n *\n * Returns the current state of an adapter in the loading lifecycle. Useful\n * for UI indicators, debugging, or conditional logic based on adapter\n * availability.\n *\n * @param type - The adapter type to check\n * @returns Current loading status of the adapter\n *\n * @example\n * ```typescript\n * const evmStatus = getAdapterStatus(OrbitAdapter.EVM);\n *\n * switch (evmStatus) {\n * case 'idle':\n * console.log('EVM adapter not yet requested');\n * break;\n * case 'loading':\n * // Show loading spinner\n * break;\n * case 'loaded':\n * // Enable EVM features\n * break;\n * case 'error':\n * // Show fallback UI\n * break;\n * }\n * ```\n *\n * @since 1.0.0\n */\nexport function getAdapterStatus(type: OrbitAdapter) {\n return adapterRegistry.getAdapterStatus(type);\n}\n\n/**\n * Gets comprehensive status information for all registered adapters.\n *\n * Returns a complete overview of all adapter states, useful for debugging,\n * monitoring, or displaying system status in admin interfaces.\n *\n * @returns Record mapping adapter types to their current loading status\n *\n * @example\n * ```typescript\n * const allStatuses = getAllAdaptersStatus();\n * console.log('System overview:', allStatuses);\n * // Output: { \"evm\": \"loaded\", \"solana\": \"loading\", \"starknet\": \"idle\" }\n *\n * // Use for system health monitoring\n * const loadedAdapters = Object.entries(allStatuses)\n * .filter(([_, status]) => status === 'loaded')\n * .map(([type, _]) => type);\n *\n * console.log('Available blockchain support:', loadedAdapters);\n * ```\n *\n * @since 1.0.0\n */\nexport function getAllAdaptersStatus() {\n return adapterRegistry.getAdaptersInfo();\n}\n"]}
1
+ {"version":3,"sources":["../src/utils/adapters/registry.ts","../src/utils/getChainsListByWalletType.ts"],"names":["LazyAdapterRegistry","type","info","adapter","OrbitAdapter","createEvmAdapter","createSolanaAdapter","error","err","attempts","maxAttempts","pollInterval","resolve","types","adapterInfo","adapterRegistry","isValidChainId","id","getChainsListByWalletType","params","walletType","chains","config","adapterType","getAdapterFromWalletType","getFallbackChains","getChainsListByWalletTypeSync","appChains","chain","solanaRPCUrls","isEvmChainList","isSolanaChainList","isEvmChainListSync","isSolanaChainListSync","getAvailableSolanaClusters","isValidSolanaCluster","cluster","getWalletChains","activeWallet","preloadChainAdapters","getAdapterStatus","getAllAdaptersStatus"],"mappings":"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","file":"chunk-MQGDTFY7.js","sourcesContent":["import { OrbitAdapter } from '@tuwaio/orbit-core';\n\nimport type { AdapterInfo, AdapterLoadStatus, ChainAdapter } from './types';\n\n/**\n * Registry for blockchain adapters with lazy loading and intelligent caching.\n *\n * This class manages the lifecycle of blockchain adapters, providing:\n * - Lazy loading of adapters only when needed\n * - Intelligent caching to avoid redundant loads\n * - Graceful error handling and retry logic\n * - Thread-safe loading with concurrent request handling\n *\n * @internal\n * @since 1.0.0\n */\nclass LazyAdapterRegistry {\n /**\n * Internal cache mapping adapter types to their loading information.\n * @private\n */\n private adapters = new Map<OrbitAdapter, AdapterInfo>();\n\n /**\n * Gets an adapter with automatic loading and caching.\n *\n * This method implements intelligent loading logic:\n * - Returns immediately if adapter is already loaded\n * - Waits for completion if adapter is currently loading\n * - Retries loading if previous attempt failed\n * - Initiates new load if adapter hasn't been requested before\n *\n * @param type The blockchain adapter type to retrieve\n * @returns Promise resolving to the loaded adapter or null if unavailable\n *\n * @example\n * ```typescript\n * const evmAdapter = await registry.getAdapter(OrbitAdapter.EVM);\n * if (evmAdapter) {\n * const chains = evmAdapter.getChains(appChains);\n * }\n * ```\n *\n * @since 1.0.0\n */\n async getAdapter(type: OrbitAdapter): Promise<ChainAdapter | null> {\n const info = this.adapters.get(type);\n\n // Return cached adapter if already loaded\n if (info?.status === 'loaded' && info.adapter) {\n return info.adapter;\n }\n\n // Wait for completion if currently loading\n if (info?.status === 'loading') {\n return this.waitForAdapter(type);\n }\n\n // Retry loading if previous attempt failed\n if (info?.status === 'error') {\n console.warn(`Retrying to load ${type} adapter after previous error`);\n }\n\n // Start new loading process\n return this.loadAdapter(type);\n }\n\n /**\n * Loads a specific adapter with error handling and state management.\n *\n * @private\n * @param type The adapter type to load\n * @returns Promise resolving to the loaded adapter or null on failure\n *\n * @since 1.0.0\n */\n private async loadAdapter(type: OrbitAdapter): Promise<ChainAdapter | null> {\n // Set loading status to prevent concurrent loads\n this.adapters.set(type, { status: 'loading' });\n\n try {\n let adapter: ChainAdapter;\n\n switch (type) {\n case OrbitAdapter.EVM: {\n const { createEvmAdapter } = await import('./evm');\n adapter = await createEvmAdapter();\n break;\n }\n case OrbitAdapter.SOLANA: {\n const { createSolanaAdapter } = await import('./solana');\n adapter = await createSolanaAdapter();\n break;\n }\n case OrbitAdapter.Starknet: {\n // Future implementation placeholder\n console.warn('Starknet adapter not implemented yet');\n this.adapters.set(type, {\n status: 'error',\n error: new Error('Starknet adapter not yet implemented'),\n });\n return null;\n }\n default: {\n const error = new Error(`Unknown adapter type: ${type}`);\n this.adapters.set(type, { status: 'error', error });\n return null;\n }\n }\n\n // Mark as successfully loaded\n this.adapters.set(type, { status: 'loaded', adapter });\n return adapter;\n } catch (error) {\n const err = error instanceof Error ? error : new Error(`Failed to load ${type} adapter`);\n console.warn(`Failed to load ${type} adapter:`, err);\n this.adapters.set(type, { status: 'error', error: err });\n return null;\n }\n }\n\n /**\n * Waits for an adapter that's currently loading to complete.\n *\n * Implements polling with timeout to handle concurrent loading requests.\n * Multiple calls to getAdapter() for the same type will wait for a single\n * loading operation to complete rather than starting multiple loads.\n *\n * @private\n * @param type The adapter type to wait for\n * @returns Promise resolving to the loaded adapter or null on timeout/error\n *\n * @since 1.0.0\n */\n private async waitForAdapter(type: OrbitAdapter): Promise<ChainAdapter | null> {\n let attempts = 0;\n const maxAttempts = 50; // 5 seconds with 100ms intervals\n const pollInterval = 100; // milliseconds\n\n while (attempts < maxAttempts) {\n const info = this.adapters.get(type);\n\n if (info?.status === 'loaded' && info.adapter) {\n return info.adapter;\n }\n\n if (info?.status === 'error') {\n return null;\n }\n\n // Wait before next poll\n await new Promise((resolve) => setTimeout(resolve, pollInterval));\n attempts++;\n }\n\n console.warn(`Timeout waiting for ${type} adapter to load after ${maxAttempts * pollInterval}ms`);\n return null;\n }\n\n /**\n * Synchronously retrieves an already loaded adapter.\n *\n * This method only returns adapters that have been successfully loaded\n * and cached. It will not trigger loading of new adapters.\n *\n * @param type The adapter type to retrieve\n * @returns The loaded adapter or null if not available/loaded\n *\n * @example\n * ```typescript\n * // Check if adapter is already loaded\n * const adapter = registry.getLoadedAdapter(OrbitAdapter.EVM);\n * if (adapter) {\n * // Use immediately without waiting\n * const isValid = adapter.isChainList([1, 137]);\n * }\n * ```\n *\n * @since 1.0.0\n */\n getLoadedAdapter(type: OrbitAdapter): ChainAdapter | null {\n const info = this.adapters.get(type);\n return info?.status === 'loaded' ? info.adapter || null : null;\n }\n\n /**\n * Gets the current loading status of a specific adapter.\n *\n * @param type The adapter type to check\n * @returns Current status of the adapter\n *\n * @example\n * ```typescript\n * const status = registry.getAdapterStatus(OrbitAdapter.EVM);\n * console.log(`EVM adapter status: ${status}`);\n * // Possible values: 'idle', 'loading', 'loaded', 'error'\n * ```\n *\n * @since 1.0.0\n */\n getAdapterStatus(type: OrbitAdapter): AdapterLoadStatus {\n return this.adapters.get(type)?.status || 'idle';\n }\n\n /**\n * Checks if an adapter is available by attempting to load it.\n *\n * @param type The adapter type to check for availability\n * @returns Promise resolving to true if adapter can be loaded successfully\n *\n * @example\n * ```typescript\n * const hasEvm = await registry.isAdapterAvailable(OrbitAdapter.EVM);\n * const hasSolana = await registry.isAdapterAvailable(OrbitAdapter.SOLANA);\n *\n * if (hasEvm && hasSolana) {\n * console.log('Multi-chain support available');\n * }\n * ```\n *\n * @since 1.0.0\n */\n async isAdapterAvailable(type: OrbitAdapter): Promise<boolean> {\n const adapter = await this.getAdapter(type);\n return adapter !== null;\n }\n\n /**\n * Preloads multiple adapters for improved performance.\n *\n * This method is useful for application initialization to load commonly\n * used adapters ahead of time. All loading operations run concurrently.\n *\n * @param types Array of adapter types to preload (defaults to EVM and Solana)\n * @returns Promise that resolves when all loading attempts complete\n *\n * @example\n * ```typescript\n * // Preload during app startup\n * await registry.preloadAdapters([OrbitAdapter.EVM, OrbitAdapter.SOLANA]);\n *\n * // Later usage will be instant for loaded adapters\n * const evmAdapter = registry.getLoadedAdapter(OrbitAdapter.EVM);\n * ```\n *\n * @since 1.0.0\n */\n async preloadAdapters(types: OrbitAdapter[] = [OrbitAdapter.EVM, OrbitAdapter.SOLANA]): Promise<void> {\n // Use Promise.allSettled to continue even if some adapters fail\n await Promise.allSettled(types.map((type) => this.getAdapter(type)));\n }\n\n /**\n * Clears all cached adapters and resets the registry state.\n *\n * This method is useful for testing scenarios or when you need to\n * force reload of all adapters (e.g., after configuration changes).\n *\n * @example\n * ```typescript\n * // Clear cache to force reload\n * registry.clearCache();\n *\n * // Next getAdapter() call will reload from scratch\n * const adapter = await registry.getAdapter(OrbitAdapter.EVM);\n * ```\n *\n * @since 1.0.0\n */\n clearCache(): void {\n this.adapters.clear();\n }\n\n /**\n * Gets comprehensive information about all registered adapters.\n *\n * @returns Record mapping adapter types to their current loading status\n *\n * @example\n * ```typescript\n * const info = registry.getAdaptersInfo();\n * console.log('Adapter status overview:', info);\n * // Output: { \"evm\": \"loaded\", \"solana\": \"loading\", \"starknet\": \"idle\" }\n *\n * // Check specific status\n * if (info.evm === 'loaded') {\n * console.log('EVM adapter ready for use');\n * }\n * ```\n *\n * @since 1.0.0\n */\n getAdaptersInfo(): Record<string, AdapterLoadStatus> {\n const info: Record<string, AdapterLoadStatus> = {};\n for (const [type, adapterInfo] of this.adapters.entries()) {\n info[type] = adapterInfo.status;\n }\n return info;\n }\n}\n\n/**\n * Global singleton instance of the adapter registry.\n *\n * This is the primary interface for accessing blockchain adapters throughout\n * the application. The registry handles all loading, caching, and lifecycle\n * management automatically.\n *\n * @example\n * ```typescript\n * import { adapterRegistry } from './registry';\n *\n * // Get an adapter (loads if needed)\n * const evmAdapter = await adapterRegistry.getAdapter(OrbitAdapter.EVM);\n *\n * // Check loading status\n * const status = adapterRegistry.getAdapterStatus(OrbitAdapter.EVM);\n *\n * // Preload adapters during initialization\n * await adapterRegistry.preloadAdapters();\n * ```\n *\n * @since 1.0.0\n */\nexport const adapterRegistry = new LazyAdapterRegistry();\n","import { getAdapterFromWalletType, OrbitAdapter, WalletType } from '@tuwaio/orbit-core';\n\nimport { ChainIdentifierArray, InitialChains } from '../types';\nimport { adapterRegistry } from './adapters/registry';\n\n/**\n * Parameters for retrieving chain lists based on wallet configuration.\n *\n * Combines chain configuration with wallet-specific requirements to determine\n * which chains should be available for a given wallet type.\n *\n * @interface GetChainsListParams\n * @extends InitialChains\n * @since 1.0.0\n *\n * @example\n * ```typescript\n * const params: GetChainsListParams = {\n * walletType: WalletType.EVM_METAMASK,\n * appChains: [\n * { id: 1, name: 'Ethereum' },\n * { id: 137, name: 'Polygon' }\n * ],\n * chains: [1, 137] // Optional filter\n * };\n * ```\n */\ninterface GetChainsListParams extends InitialChains {\n /** The wallet type to determine chain compatibility */\n walletType: WalletType;\n /** Optional array of specific chain identifiers to filter or validate */\n chains?: ChainIdentifierArray;\n}\n\n/**\n * Type guard that validates if a value represents a valid chain identifier.\n *\n * Chain identifiers can be strings (for Solana clusters) or numbers (for EVM chain IDs).\n * This function filters out null, undefined, and other invalid values.\n *\n * @param id - Value to check for validity as chain identifier\n * @returns True if the value is a valid string or number chain ID\n *\n * @example\n * ```typescript\n * const rawChains = [1, 'mainnet-beta', null, undefined, 137];\n * const validChains = rawChains.filter(isValidChainId);\n * // Result: [1, 'mainnet-beta', 137]\n * ```\n *\n * @since 1.0.0\n */\nfunction isValidChainId(id: unknown): id is string | number {\n return id !== undefined && id !== null && (typeof id === 'string' || typeof id === 'number');\n}\n\n/**\n * Retrieves chain list for a specific wallet type with automatic adapter loading.\n *\n * This is the primary function for getting blockchain-compatible chains based on\n * wallet type and configuration. It automatically determines the correct adapter,\n * loads it if necessary, and falls back to safe defaults if loading fails.\n *\n * The function supports all major blockchain types:\n * - EVM chains: Returns numeric chain IDs from app configuration\n * - Solana clusters: Returns string cluster names from RPC configuration\n * - Future blockchains: Extensible through the adapter pattern\n *\n * @param params - Configuration object with wallet type and chain data\n * @returns Promise resolving to array of chain identifiers\n *\n * @example\n * ```typescript\n * // Get EVM chains for MetaMask\n * const evmChains = await getChainsListByWalletType({\n * walletType: WalletType.EVM_METAMASK,\n * appChains: [\n * { id: 1, name: 'Ethereum' },\n * { id: 137, name: 'Polygon' }\n * ]\n * });\n * // Returns: [1, 137]\n *\n * // Get Solana clusters for Phantom\n * const solanaClusters = await getChainsListByWalletType({\n * walletType: WalletType.SOLANA_PHANTOM,\n * solanaRPCUrls: {\n * 'mainnet-beta': 'https://api.mainnet-beta.solana.com',\n * 'devnet': 'https://api.devnet.solana.com'\n * }\n * });\n * // Returns: ['mainnet-beta', 'devnet']\n * ```\n *\n * @since 1.0.0\n */\nexport async function getChainsListByWalletType(params: GetChainsListParams): Promise<(string | number)[]> {\n const { walletType, chains = [], ...config } = params;\n\n if (!walletType) {\n console.warn('getChainsListByWalletType: walletType is required');\n return [];\n }\n\n const adapterType = getAdapterFromWalletType(walletType);\n const adapter = await adapterRegistry.getAdapter(adapterType);\n\n if (!adapter) {\n console.warn(`No adapter available for ${adapterType}, using fallback`);\n return getFallbackChains(adapterType, config);\n }\n\n try {\n if (adapterType === OrbitAdapter.SOLANA) {\n return adapter.getChains(config.solanaRPCUrls, chains);\n } else {\n return adapter.getChains(config.appChains);\n }\n } catch (error) {\n console.warn(`Error getting chains for ${adapterType}:`, error);\n return getFallbackChains(adapterType, config);\n }\n}\n\n/**\n * Synchronous version that only works with pre-loaded adapters.\n *\n * This function provides immediate results by using only adapters that have\n * already been loaded into the registry cache. It will not trigger new\n * loading operations, making it safe for synchronous contexts but potentially\n * less complete than the async version.\n *\n * Use this function when:\n * - You've pre-loaded adapters during app initialization\n * - You need immediate results without async overhead\n * - You're in a synchronous context where async calls aren't feasible\n *\n * @param params - Configuration object with wallet type and chain data\n * @returns Array of chain identifiers (empty if adapter not loaded)\n *\n * @example\n * ```typescript\n * // Pre-load adapters first\n * await preloadChainAdapters([OrbitAdapter.EVM, OrbitAdapter.SOLANA]);\n *\n * // Now safe to use sync version\n * const chains = getChainsListByWalletTypeSync({\n * walletType: WalletType.EVM_METAMASK,\n * appChains: evmConfiguration\n * });\n * ```\n *\n * @since 1.0.0\n */\nexport function getChainsListByWalletTypeSync(params: GetChainsListParams): (string | number)[] {\n const { walletType, chains = [], ...config } = params;\n\n if (!walletType) {\n console.warn('getChainsListByWalletType: walletType is required');\n return [];\n }\n\n const adapterType = getAdapterFromWalletType(walletType);\n const adapter = adapterRegistry.getLoadedAdapter(adapterType);\n\n if (adapter) {\n try {\n if (adapterType === OrbitAdapter.SOLANA) {\n return adapter.getChains(config.solanaRPCUrls, chains);\n } else {\n return adapter.getChains(config.appChains);\n }\n } catch (error) {\n console.warn(`Error with loaded adapter for ${adapterType}:`, error);\n }\n }\n\n return getFallbackChains(adapterType, config);\n}\n\n/**\n * Provides fallback chain extraction without external dependencies.\n *\n * This function implements basic chain extraction logic that works without\n * requiring blockchain-specific packages to be installed. It provides a\n * safety net when adapters fail to load or aren't available.\n *\n * Fallback behaviors:\n * - EVM: Extracts `id` field from chain objects or direct identifiers\n * - Solana: Extracts keys from RPC URL configuration objects\n * - Unknown: Returns empty array\n *\n * @private\n * @param adapterType - The blockchain adapter type\n * @param config - Configuration object containing chain data\n * @returns Array of extracted chain identifiers\n *\n * @since 1.0.0\n */\nfunction getFallbackChains(adapterType: OrbitAdapter, config: any): (string | number)[] {\n switch (adapterType) {\n case OrbitAdapter.EVM: {\n const appChains = config.appChains;\n if (!Array.isArray(appChains)) return [];\n\n return appChains\n .map((chain: any) => {\n // Handle chain objects with id property (e.g., { id: 1, name: 'Ethereum' })\n if (typeof chain === 'object' && chain?.id) return chain.id;\n // Handle direct chain identifiers (numbers or strings)\n if (typeof chain === 'number' || typeof chain === 'string') return chain;\n return null;\n })\n .filter(isValidChainId);\n }\n case OrbitAdapter.SOLANA: {\n const solanaRPCUrls = config.solanaRPCUrls;\n // Extract cluster names from RPC URL configuration\n return solanaRPCUrls && typeof solanaRPCUrls === 'object' ? Object.keys(solanaRPCUrls) : [];\n }\n default:\n return [];\n }\n}\n\n// ========================================\n// Chain List Validation Functions\n// ========================================\n\n/**\n * Validates if a chain list conforms to EVM format (with adapter loading).\n *\n * Uses the EVM adapter to perform comprehensive validation, falling back to\n * basic type checking if the adapter isn't available. EVM chains typically\n * use numeric identifiers.\n *\n * @param chains - Array of chain identifiers to validate\n * @returns Promise resolving to true if chains are valid for EVM\n *\n * @example\n * ```typescript\n * const isEvm = await isEvmChainList([1, 137, 56]); // true\n * const notEvm = await isEvmChainList(['mainnet-beta']); // false\n * ```\n *\n * @since 1.0.0\n */\nexport async function isEvmChainList(chains: (string | number)[]): Promise<boolean> {\n const adapter = await adapterRegistry.getAdapter(OrbitAdapter.EVM);\n return adapter?.isChainList(chains) ?? chains.every((chain) => typeof chain === 'number');\n}\n\n/**\n * Validates if a chain list conforms to Solana format (with adapter loading).\n *\n * Uses the Solana adapter to perform comprehensive validation, falling back to\n * basic type checking if the adapter isn't available. Solana chains typically\n * use string cluster names.\n *\n * @param chains - Array of chain identifiers to validate\n * @returns Promise resolving to true if chains are valid for Solana\n *\n * @example\n * ```typescript\n * const isSolana = await isSolanaChainList(['mainnet-beta', 'devnet']); // true\n * const notSolana = await isSolanaChainList([1, 137]); // false\n * ```\n *\n * @since 1.0.0\n */\nexport async function isSolanaChainList(chains: (string | number)[]): Promise<boolean> {\n const adapter = await adapterRegistry.getAdapter(OrbitAdapter.SOLANA);\n return adapter?.isChainList(chains) ?? chains.every((chain) => typeof chain === 'string');\n}\n\n/**\n * Synchronous EVM chain list validation using pre-loaded adapters.\n *\n * Provides immediate validation results without triggering adapter loading.\n * Falls back to basic type checking if adapter isn't pre-loaded.\n *\n * @param chains - Array of chain identifiers to validate\n * @returns True if chains are valid for EVM\n *\n * @example\n * ```typescript\n * const isEvm = isEvmChainListSync([1, 137, 56]); // true (immediate result)\n * ```\n *\n * @since 1.0.0\n */\nexport function isEvmChainListSync(chains: (string | number)[]): boolean {\n const adapter = adapterRegistry.getLoadedAdapter(OrbitAdapter.EVM);\n return adapter?.isChainList(chains) ?? chains.every((chain) => typeof chain === 'number');\n}\n\n/**\n * Synchronous Solana chain list validation using pre-loaded adapters.\n *\n * Provides immediate validation results without triggering adapter loading.\n * Falls back to basic type checking if adapter isn't pre-loaded.\n *\n * @param chains - Array of chain identifiers to validate\n * @returns True if chains are valid for Solana\n *\n * @example\n * ```typescript\n * const isSolana = isSolanaChainListSync(['mainnet-beta', 'devnet']); // true\n * ```\n *\n * @since 1.0.0\n */\nexport function isSolanaChainListSync(chains: (string | number)[]): boolean {\n const adapter = adapterRegistry.getLoadedAdapter(OrbitAdapter.SOLANA);\n return adapter?.isChainList(chains) ?? chains.every((chain) => typeof chain === 'string');\n}\n\n// ========================================\n// Solana-Specific Utilities\n// ========================================\n\n/**\n * Retrieves all available Solana clusters from the current configuration.\n *\n * This function loads the Solana adapter and queries it for all configured\n * cluster names. Useful for populating UI dropdowns or validating cluster\n * availability before connection attempts.\n *\n * @returns Promise resolving to array of available cluster names\n *\n * @example\n * ```typescript\n * const clusters = await getAvailableSolanaClusters();\n * console.log('Available clusters:', clusters);\n * // Might log: ['mainnet-beta', 'devnet', 'testnet', 'localnet']\n *\n * // Use for UI population\n * const clusterOptions = clusters.map(cluster => ({\n * value: cluster,\n * label: cluster.replace('-', ' ').toUpperCase()\n * }));\n * ```\n *\n * @since 1.0.0\n */\nexport async function getAvailableSolanaClusters(): Promise<string[]> {\n const adapter = await adapterRegistry.getAdapter(OrbitAdapter.SOLANA);\n return adapter?.getAvailableClusters?.() ?? [];\n}\n\n/**\n * Validates whether a cluster name is valid for Solana connections.\n *\n * This function loads the Solana adapter and uses it to validate cluster\n * names against known Solana cluster monikers and custom configurations.\n *\n * @param cluster - Cluster name to validate\n * @returns Promise resolving to true if cluster is valid\n *\n * @example\n * ```typescript\n * const isValid = await isValidSolanaCluster('mainnet-beta'); // true\n * const isInvalid = await isValidSolanaCluster('invalid-cluster'); // false\n *\n * // Use for form validation\n * if (await isValidSolanaCluster(userInput)) {\n * // Proceed with connection\n * } else {\n * // Show error message\n * }\n * ```\n *\n * @since 1.0.0\n */\nexport async function isValidSolanaCluster(cluster: string): Promise<boolean> {\n const adapter = await adapterRegistry.getAdapter(OrbitAdapter.SOLANA);\n return adapter?.isValidCluster?.(cluster) ?? false;\n}\n\n// ========================================\n// Wallet Chain Extraction Utilities\n// ========================================\n\n/**\n * Safely extracts chain information from a wallet object.\n *\n * This utility function handles the complex nested structure of wallet objects\n * and safely extracts chain information without throwing errors. It performs\n * comprehensive type checking to ensure data integrity.\n *\n * The function expects wallet objects with this structure:\n * ```\n * {\n * connectedWallet: {\n * chains: [chain1, chain2, ...]\n * }\n * }\n * ```\n *\n * @param activeWallet - Wallet object to extract chains from\n * @returns Array of chain identifiers or undefined if not found/invalid\n *\n * @example\n * ```typescript\n * // With valid wallet structure\n * const wallet = {\n * connectedWallet: {\n * chains: [1, 137, 56]\n * }\n * };\n * const chains = getWalletChains(wallet); // [1, 137, 56]\n *\n * // With invalid/missing structure\n * const invalidWallet = { someOtherProperty: true };\n * const noChains = getWalletChains(invalidWallet); // undefined\n *\n * // Use in conditional logic\n * const walletChains = getWalletChains(activeWallet);\n * if (walletChains) {\n * console.log('Wallet supports chains:', walletChains);\n * }\n * ```\n *\n * @since 1.0.0\n */\nexport function getWalletChains(activeWallet: any): (string | number)[] | undefined {\n if (\n activeWallet &&\n typeof activeWallet === 'object' &&\n 'connectedWallet' in activeWallet &&\n activeWallet.connectedWallet &&\n typeof activeWallet.connectedWallet === 'object' &&\n 'chains' in activeWallet.connectedWallet\n ) {\n const chains = activeWallet.connectedWallet.chains;\n if (Array.isArray(chains)) {\n return chains;\n }\n }\n return undefined;\n}\n\n// ========================================\n// Adapter Management Utilities\n// ========================================\n\n/**\n * Pre-loads blockchain adapters for improved application performance.\n *\n * This function should be called during application initialization to load\n * commonly used adapters ahead of time. This eliminates loading delays when\n * users first interact with wallet connections.\n *\n * All loading operations run concurrently for maximum efficiency, and the\n * function completes even if some adapters fail to load (partial success).\n *\n * @param types - Array of adapter types to preload (defaults to EVM and Solana)\n * @returns Promise that resolves when all loading attempts complete\n *\n * @example\n * ```typescript\n * // During app initialization\n * export async function initializeApp() {\n * // Preload common adapters\n * await preloadChainAdapters([OrbitAdapter.EVM, OrbitAdapter.SOLANA]);\n *\n * // Continue with other initialization\n * // ...\n * }\n *\n * // Later usage will be instant for loaded adapters\n * const evmChains = getChainsListByWalletTypeSync({\n * walletType: WalletType.EVM_METAMASK,\n * appChains: configuration\n * }); // Instant result since adapter is pre-loaded\n * ```\n *\n * @since 1.0.0\n */\nexport async function preloadChainAdapters(\n types: OrbitAdapter[] = [OrbitAdapter.EVM, OrbitAdapter.SOLANA],\n): Promise<void> {\n await adapterRegistry.preloadAdapters(types);\n}\n\n/**\n * Gets the current loading status of a specific adapter.\n *\n * Returns the current state of an adapter in the loading lifecycle. Useful\n * for UI indicators, debugging, or conditional logic based on adapter\n * availability.\n *\n * @param type - The adapter type to check\n * @returns Current loading status of the adapter\n *\n * @example\n * ```typescript\n * const evmStatus = getAdapterStatus(OrbitAdapter.EVM);\n *\n * switch (evmStatus) {\n * case 'idle':\n * console.log('EVM adapter not yet requested');\n * break;\n * case 'loading':\n * // Show loading spinner\n * break;\n * case 'loaded':\n * // Enable EVM features\n * break;\n * case 'error':\n * // Show fallback UI\n * break;\n * }\n * ```\n *\n * @since 1.0.0\n */\nexport function getAdapterStatus(type: OrbitAdapter) {\n return adapterRegistry.getAdapterStatus(type);\n}\n\n/**\n * Gets comprehensive status information for all registered adapters.\n *\n * Returns a complete overview of all adapter states, useful for debugging,\n * monitoring, or displaying system status in admin interfaces.\n *\n * @returns Record mapping adapter types to their current loading status\n *\n * @example\n * ```typescript\n * const allStatuses = getAllAdaptersStatus();\n * console.log('System overview:', allStatuses);\n * // Output: { \"evm\": \"loaded\", \"solana\": \"loading\", \"starknet\": \"idle\" }\n *\n * // Use for system health monitoring\n * const loadedAdapters = Object.entries(allStatuses)\n * .filter(([_, status]) => status === 'loaded')\n * .map(([type, _]) => type);\n *\n * console.log('Available blockchain support:', loadedAdapters);\n * ```\n *\n * @since 1.0.0\n */\nexport function getAllAdaptersStatus() {\n return adapterRegistry.getAdaptersInfo();\n}\n"]}
@@ -0,0 +1,2 @@
1
+ 'use strict';var orbitCore=require('@tuwaio/orbit-core');var l=class{adapters=new Map;async getAdapter(t){let e=this.adapters.get(t);return e?.status==="loaded"&&e.adapter?e.adapter:e?.status==="loading"?this.waitForAdapter(t):(e?.status==="error"&&console.warn(`Retrying to load ${t} adapter after previous error`),this.loadAdapter(t))}async loadAdapter(t){this.adapters.set(t,{status:"loading"});try{let e;switch(t){case orbitCore.OrbitAdapter.EVM:{let{createEvmAdapter:a}=await import('./evm-7NHOTSAK.cjs');e=await a();break}case orbitCore.OrbitAdapter.SOLANA:{let{createSolanaAdapter:a}=await import('./solana-JUU54KQ3.cjs');e=await a();break}case orbitCore.OrbitAdapter.Starknet:return console.warn("Starknet adapter not implemented yet"),this.adapters.set(t,{status:"error",error:new Error("Starknet adapter not yet implemented")}),null;default:{let a=new Error(`Unknown adapter type: ${t}`);return this.adapters.set(t,{status:"error",error:a}),null}}return this.adapters.set(t,{status:"loaded",adapter:e}),e}catch(e){let a=e instanceof Error?e:new Error(`Failed to load ${t} adapter`);return console.warn(`Failed to load ${t} adapter:`,a),this.adapters.set(t,{status:"error",error:a}),null}}async waitForAdapter(t){let e=0,a=50,n=100;for(;e<a;){let s=this.adapters.get(t);if(s?.status==="loaded"&&s.adapter)return s.adapter;if(s?.status==="error")return null;await new Promise(d=>setTimeout(d,n)),e++;}return console.warn(`Timeout waiting for ${t} adapter to load after ${a*n}ms`),null}getLoadedAdapter(t){let e=this.adapters.get(t);return e?.status==="loaded"&&e.adapter||null}getAdapterStatus(t){return this.adapters.get(t)?.status||"idle"}async isAdapterAvailable(t){return await this.getAdapter(t)!==null}async preloadAdapters(t=[orbitCore.OrbitAdapter.EVM,orbitCore.OrbitAdapter.SOLANA]){await Promise.allSettled(t.map(e=>this.getAdapter(e)));}clearCache(){this.adapters.clear();}getAdaptersInfo(){let t={};for(let[e,a]of this.adapters.entries())t[e]=a.status;return t}},i=new l;function A(r){return r!=null&&(typeof r=="string"||typeof r=="number")}async function C(r){let{walletType:t,chains:e=[],...a}=r;if(!t)return console.warn("getChainsListByWalletType: walletType is required"),[];let n=orbitCore.getAdapterFromWalletType(t),s=await i.getAdapter(n);if(!s)return console.warn(`No adapter available for ${n}, using fallback`),u(n,a);try{return n===orbitCore.OrbitAdapter.SOLANA?s.getChains(a.solanaRPCUrls,e):s.getChains(a.appChains)}catch(d){return console.warn(`Error getting chains for ${n}:`,d),u(n,a)}}function b(r){let{walletType:t,chains:e=[],...a}=r;if(!t)return console.warn("getChainsListByWalletType: walletType is required"),[];let n=orbitCore.getAdapterFromWalletType(t),s=i.getLoadedAdapter(n);if(s)try{return n===orbitCore.OrbitAdapter.SOLANA?s.getChains(a.solanaRPCUrls,e):s.getChains(a.appChains)}catch(d){console.warn(`Error with loaded adapter for ${n}:`,d);}return u(n,a)}function u(r,t){switch(r){case orbitCore.OrbitAdapter.EVM:{let e=t.appChains;return Array.isArray(e)?e.map(a=>typeof a=="object"&&a?.id?a.id:typeof a=="number"||typeof a=="string"?a:null).filter(A):[]}case orbitCore.OrbitAdapter.SOLANA:{let e=t.solanaRPCUrls;return e&&typeof e=="object"?Object.keys(e):[]}default:return []}}async function w(r){return (await i.getAdapter(orbitCore.OrbitAdapter.EVM))?.isChainList(r)??r.every(e=>typeof e=="number")}async function L(r){return (await i.getAdapter(orbitCore.OrbitAdapter.SOLANA))?.isChainList(r)??r.every(e=>typeof e=="string")}function S(r){return i.getLoadedAdapter(orbitCore.OrbitAdapter.EVM)?.isChainList(r)??r.every(e=>typeof e=="number")}function O(r){return i.getLoadedAdapter(orbitCore.OrbitAdapter.SOLANA)?.isChainList(r)??r.every(e=>typeof e=="string")}async function P(){return (await i.getAdapter(orbitCore.OrbitAdapter.SOLANA))?.getAvailableClusters?.()??[]}async function T(r){return (await i.getAdapter(orbitCore.OrbitAdapter.SOLANA))?.isValidCluster?.(r)??false}function x(r){if(r&&typeof r=="object"&&"connectedWallet"in r&&r.connectedWallet&&typeof r.connectedWallet=="object"&&"chains"in r.connectedWallet){let t=r.connectedWallet.chains;if(Array.isArray(t))return t}}async function E(r=[orbitCore.OrbitAdapter.EVM,orbitCore.OrbitAdapter.SOLANA]){await i.preloadAdapters(r);}function v(r){return i.getAdapterStatus(r)}function I(){return i.getAdaptersInfo()}exports.a=C;exports.b=b;exports.c=w;exports.d=L;exports.e=S;exports.f=O;exports.g=P;exports.h=T;exports.i=x;exports.j=E;exports.k=v;exports.l=I;//# sourceMappingURL=chunk-NMQZA377.cjs.map
2
+ //# sourceMappingURL=chunk-NMQZA377.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/utils/adapters/registry.ts","../src/utils/getChainsListByWalletType.ts"],"names":["LazyAdapterRegistry","type","info","adapter","OrbitAdapter","createEvmAdapter","createSolanaAdapter","error","err","attempts","maxAttempts","pollInterval","resolve","types","adapterInfo","adapterRegistry","isValidChainId","id","getChainsListByWalletType","params","walletType","chains","config","adapterType","getAdapterFromWalletType","getFallbackChains","getChainsListByWalletTypeSync","appChains","chain","solanaRPCUrls","isEvmChainList","isSolanaChainList","isEvmChainListSync","isSolanaChainListSync","getAvailableSolanaClusters","isValidSolanaCluster","cluster","getWalletChains","activeWallet","preloadChainAdapters","getAdapterStatus","getAllAdaptersStatus"],"mappings":"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","file":"chunk-NMQZA377.cjs","sourcesContent":["import { OrbitAdapter } from '@tuwaio/orbit-core';\n\nimport type { AdapterInfo, AdapterLoadStatus, ChainAdapter } from './types';\n\n/**\n * Registry for blockchain adapters with lazy loading and intelligent caching.\n *\n * This class manages the lifecycle of blockchain adapters, providing:\n * - Lazy loading of adapters only when needed\n * - Intelligent caching to avoid redundant loads\n * - Graceful error handling and retry logic\n * - Thread-safe loading with concurrent request handling\n *\n * @internal\n * @since 1.0.0\n */\nclass LazyAdapterRegistry {\n /**\n * Internal cache mapping adapter types to their loading information.\n * @private\n */\n private adapters = new Map<OrbitAdapter, AdapterInfo>();\n\n /**\n * Gets an adapter with automatic loading and caching.\n *\n * This method implements intelligent loading logic:\n * - Returns immediately if adapter is already loaded\n * - Waits for completion if adapter is currently loading\n * - Retries loading if previous attempt failed\n * - Initiates new load if adapter hasn't been requested before\n *\n * @param type The blockchain adapter type to retrieve\n * @returns Promise resolving to the loaded adapter or null if unavailable\n *\n * @example\n * ```typescript\n * const evmAdapter = await registry.getAdapter(OrbitAdapter.EVM);\n * if (evmAdapter) {\n * const chains = evmAdapter.getChains(appChains);\n * }\n * ```\n *\n * @since 1.0.0\n */\n async getAdapter(type: OrbitAdapter): Promise<ChainAdapter | null> {\n const info = this.adapters.get(type);\n\n // Return cached adapter if already loaded\n if (info?.status === 'loaded' && info.adapter) {\n return info.adapter;\n }\n\n // Wait for completion if currently loading\n if (info?.status === 'loading') {\n return this.waitForAdapter(type);\n }\n\n // Retry loading if previous attempt failed\n if (info?.status === 'error') {\n console.warn(`Retrying to load ${type} adapter after previous error`);\n }\n\n // Start new loading process\n return this.loadAdapter(type);\n }\n\n /**\n * Loads a specific adapter with error handling and state management.\n *\n * @private\n * @param type The adapter type to load\n * @returns Promise resolving to the loaded adapter or null on failure\n *\n * @since 1.0.0\n */\n private async loadAdapter(type: OrbitAdapter): Promise<ChainAdapter | null> {\n // Set loading status to prevent concurrent loads\n this.adapters.set(type, { status: 'loading' });\n\n try {\n let adapter: ChainAdapter;\n\n switch (type) {\n case OrbitAdapter.EVM: {\n const { createEvmAdapter } = await import('./evm');\n adapter = await createEvmAdapter();\n break;\n }\n case OrbitAdapter.SOLANA: {\n const { createSolanaAdapter } = await import('./solana');\n adapter = await createSolanaAdapter();\n break;\n }\n case OrbitAdapter.Starknet: {\n // Future implementation placeholder\n console.warn('Starknet adapter not implemented yet');\n this.adapters.set(type, {\n status: 'error',\n error: new Error('Starknet adapter not yet implemented'),\n });\n return null;\n }\n default: {\n const error = new Error(`Unknown adapter type: ${type}`);\n this.adapters.set(type, { status: 'error', error });\n return null;\n }\n }\n\n // Mark as successfully loaded\n this.adapters.set(type, { status: 'loaded', adapter });\n return adapter;\n } catch (error) {\n const err = error instanceof Error ? error : new Error(`Failed to load ${type} adapter`);\n console.warn(`Failed to load ${type} adapter:`, err);\n this.adapters.set(type, { status: 'error', error: err });\n return null;\n }\n }\n\n /**\n * Waits for an adapter that's currently loading to complete.\n *\n * Implements polling with timeout to handle concurrent loading requests.\n * Multiple calls to getAdapter() for the same type will wait for a single\n * loading operation to complete rather than starting multiple loads.\n *\n * @private\n * @param type The adapter type to wait for\n * @returns Promise resolving to the loaded adapter or null on timeout/error\n *\n * @since 1.0.0\n */\n private async waitForAdapter(type: OrbitAdapter): Promise<ChainAdapter | null> {\n let attempts = 0;\n const maxAttempts = 50; // 5 seconds with 100ms intervals\n const pollInterval = 100; // milliseconds\n\n while (attempts < maxAttempts) {\n const info = this.adapters.get(type);\n\n if (info?.status === 'loaded' && info.adapter) {\n return info.adapter;\n }\n\n if (info?.status === 'error') {\n return null;\n }\n\n // Wait before next poll\n await new Promise((resolve) => setTimeout(resolve, pollInterval));\n attempts++;\n }\n\n console.warn(`Timeout waiting for ${type} adapter to load after ${maxAttempts * pollInterval}ms`);\n return null;\n }\n\n /**\n * Synchronously retrieves an already loaded adapter.\n *\n * This method only returns adapters that have been successfully loaded\n * and cached. It will not trigger loading of new adapters.\n *\n * @param type The adapter type to retrieve\n * @returns The loaded adapter or null if not available/loaded\n *\n * @example\n * ```typescript\n * // Check if adapter is already loaded\n * const adapter = registry.getLoadedAdapter(OrbitAdapter.EVM);\n * if (adapter) {\n * // Use immediately without waiting\n * const isValid = adapter.isChainList([1, 137]);\n * }\n * ```\n *\n * @since 1.0.0\n */\n getLoadedAdapter(type: OrbitAdapter): ChainAdapter | null {\n const info = this.adapters.get(type);\n return info?.status === 'loaded' ? info.adapter || null : null;\n }\n\n /**\n * Gets the current loading status of a specific adapter.\n *\n * @param type The adapter type to check\n * @returns Current status of the adapter\n *\n * @example\n * ```typescript\n * const status = registry.getAdapterStatus(OrbitAdapter.EVM);\n * console.log(`EVM adapter status: ${status}`);\n * // Possible values: 'idle', 'loading', 'loaded', 'error'\n * ```\n *\n * @since 1.0.0\n */\n getAdapterStatus(type: OrbitAdapter): AdapterLoadStatus {\n return this.adapters.get(type)?.status || 'idle';\n }\n\n /**\n * Checks if an adapter is available by attempting to load it.\n *\n * @param type The adapter type to check for availability\n * @returns Promise resolving to true if adapter can be loaded successfully\n *\n * @example\n * ```typescript\n * const hasEvm = await registry.isAdapterAvailable(OrbitAdapter.EVM);\n * const hasSolana = await registry.isAdapterAvailable(OrbitAdapter.SOLANA);\n *\n * if (hasEvm && hasSolana) {\n * console.log('Multi-chain support available');\n * }\n * ```\n *\n * @since 1.0.0\n */\n async isAdapterAvailable(type: OrbitAdapter): Promise<boolean> {\n const adapter = await this.getAdapter(type);\n return adapter !== null;\n }\n\n /**\n * Preloads multiple adapters for improved performance.\n *\n * This method is useful for application initialization to load commonly\n * used adapters ahead of time. All loading operations run concurrently.\n *\n * @param types Array of adapter types to preload (defaults to EVM and Solana)\n * @returns Promise that resolves when all loading attempts complete\n *\n * @example\n * ```typescript\n * // Preload during app startup\n * await registry.preloadAdapters([OrbitAdapter.EVM, OrbitAdapter.SOLANA]);\n *\n * // Later usage will be instant for loaded adapters\n * const evmAdapter = registry.getLoadedAdapter(OrbitAdapter.EVM);\n * ```\n *\n * @since 1.0.0\n */\n async preloadAdapters(types: OrbitAdapter[] = [OrbitAdapter.EVM, OrbitAdapter.SOLANA]): Promise<void> {\n // Use Promise.allSettled to continue even if some adapters fail\n await Promise.allSettled(types.map((type) => this.getAdapter(type)));\n }\n\n /**\n * Clears all cached adapters and resets the registry state.\n *\n * This method is useful for testing scenarios or when you need to\n * force reload of all adapters (e.g., after configuration changes).\n *\n * @example\n * ```typescript\n * // Clear cache to force reload\n * registry.clearCache();\n *\n * // Next getAdapter() call will reload from scratch\n * const adapter = await registry.getAdapter(OrbitAdapter.EVM);\n * ```\n *\n * @since 1.0.0\n */\n clearCache(): void {\n this.adapters.clear();\n }\n\n /**\n * Gets comprehensive information about all registered adapters.\n *\n * @returns Record mapping adapter types to their current loading status\n *\n * @example\n * ```typescript\n * const info = registry.getAdaptersInfo();\n * console.log('Adapter status overview:', info);\n * // Output: { \"evm\": \"loaded\", \"solana\": \"loading\", \"starknet\": \"idle\" }\n *\n * // Check specific status\n * if (info.evm === 'loaded') {\n * console.log('EVM adapter ready for use');\n * }\n * ```\n *\n * @since 1.0.0\n */\n getAdaptersInfo(): Record<string, AdapterLoadStatus> {\n const info: Record<string, AdapterLoadStatus> = {};\n for (const [type, adapterInfo] of this.adapters.entries()) {\n info[type] = adapterInfo.status;\n }\n return info;\n }\n}\n\n/**\n * Global singleton instance of the adapter registry.\n *\n * This is the primary interface for accessing blockchain adapters throughout\n * the application. The registry handles all loading, caching, and lifecycle\n * management automatically.\n *\n * @example\n * ```typescript\n * import { adapterRegistry } from './registry';\n *\n * // Get an adapter (loads if needed)\n * const evmAdapter = await adapterRegistry.getAdapter(OrbitAdapter.EVM);\n *\n * // Check loading status\n * const status = adapterRegistry.getAdapterStatus(OrbitAdapter.EVM);\n *\n * // Preload adapters during initialization\n * await adapterRegistry.preloadAdapters();\n * ```\n *\n * @since 1.0.0\n */\nexport const adapterRegistry = new LazyAdapterRegistry();\n","import { getAdapterFromWalletType, OrbitAdapter, WalletType } from '@tuwaio/orbit-core';\n\nimport { ChainIdentifierArray, InitialChains } from '../types';\nimport { adapterRegistry } from './adapters/registry';\n\n/**\n * Parameters for retrieving chain lists based on wallet configuration.\n *\n * Combines chain configuration with wallet-specific requirements to determine\n * which chains should be available for a given wallet type.\n *\n * @interface GetChainsListParams\n * @extends InitialChains\n * @since 1.0.0\n *\n * @example\n * ```typescript\n * const params: GetChainsListParams = {\n * walletType: WalletType.EVM_METAMASK,\n * appChains: [\n * { id: 1, name: 'Ethereum' },\n * { id: 137, name: 'Polygon' }\n * ],\n * chains: [1, 137] // Optional filter\n * };\n * ```\n */\ninterface GetChainsListParams extends InitialChains {\n /** The wallet type to determine chain compatibility */\n walletType: WalletType;\n /** Optional array of specific chain identifiers to filter or validate */\n chains?: ChainIdentifierArray;\n}\n\n/**\n * Type guard that validates if a value represents a valid chain identifier.\n *\n * Chain identifiers can be strings (for Solana clusters) or numbers (for EVM chain IDs).\n * This function filters out null, undefined, and other invalid values.\n *\n * @param id - Value to check for validity as chain identifier\n * @returns True if the value is a valid string or number chain ID\n *\n * @example\n * ```typescript\n * const rawChains = [1, 'mainnet-beta', null, undefined, 137];\n * const validChains = rawChains.filter(isValidChainId);\n * // Result: [1, 'mainnet-beta', 137]\n * ```\n *\n * @since 1.0.0\n */\nfunction isValidChainId(id: unknown): id is string | number {\n return id !== undefined && id !== null && (typeof id === 'string' || typeof id === 'number');\n}\n\n/**\n * Retrieves chain list for a specific wallet type with automatic adapter loading.\n *\n * This is the primary function for getting blockchain-compatible chains based on\n * wallet type and configuration. It automatically determines the correct adapter,\n * loads it if necessary, and falls back to safe defaults if loading fails.\n *\n * The function supports all major blockchain types:\n * - EVM chains: Returns numeric chain IDs from app configuration\n * - Solana clusters: Returns string cluster names from RPC configuration\n * - Future blockchains: Extensible through the adapter pattern\n *\n * @param params - Configuration object with wallet type and chain data\n * @returns Promise resolving to array of chain identifiers\n *\n * @example\n * ```typescript\n * // Get EVM chains for MetaMask\n * const evmChains = await getChainsListByWalletType({\n * walletType: WalletType.EVM_METAMASK,\n * appChains: [\n * { id: 1, name: 'Ethereum' },\n * { id: 137, name: 'Polygon' }\n * ]\n * });\n * // Returns: [1, 137]\n *\n * // Get Solana clusters for Phantom\n * const solanaClusters = await getChainsListByWalletType({\n * walletType: WalletType.SOLANA_PHANTOM,\n * solanaRPCUrls: {\n * 'mainnet-beta': 'https://api.mainnet-beta.solana.com',\n * 'devnet': 'https://api.devnet.solana.com'\n * }\n * });\n * // Returns: ['mainnet-beta', 'devnet']\n * ```\n *\n * @since 1.0.0\n */\nexport async function getChainsListByWalletType(params: GetChainsListParams): Promise<(string | number)[]> {\n const { walletType, chains = [], ...config } = params;\n\n if (!walletType) {\n console.warn('getChainsListByWalletType: walletType is required');\n return [];\n }\n\n const adapterType = getAdapterFromWalletType(walletType);\n const adapter = await adapterRegistry.getAdapter(adapterType);\n\n if (!adapter) {\n console.warn(`No adapter available for ${adapterType}, using fallback`);\n return getFallbackChains(adapterType, config);\n }\n\n try {\n if (adapterType === OrbitAdapter.SOLANA) {\n return adapter.getChains(config.solanaRPCUrls, chains);\n } else {\n return adapter.getChains(config.appChains);\n }\n } catch (error) {\n console.warn(`Error getting chains for ${adapterType}:`, error);\n return getFallbackChains(adapterType, config);\n }\n}\n\n/**\n * Synchronous version that only works with pre-loaded adapters.\n *\n * This function provides immediate results by using only adapters that have\n * already been loaded into the registry cache. It will not trigger new\n * loading operations, making it safe for synchronous contexts but potentially\n * less complete than the async version.\n *\n * Use this function when:\n * - You've pre-loaded adapters during app initialization\n * - You need immediate results without async overhead\n * - You're in a synchronous context where async calls aren't feasible\n *\n * @param params - Configuration object with wallet type and chain data\n * @returns Array of chain identifiers (empty if adapter not loaded)\n *\n * @example\n * ```typescript\n * // Pre-load adapters first\n * await preloadChainAdapters([OrbitAdapter.EVM, OrbitAdapter.SOLANA]);\n *\n * // Now safe to use sync version\n * const chains = getChainsListByWalletTypeSync({\n * walletType: WalletType.EVM_METAMASK,\n * appChains: evmConfiguration\n * });\n * ```\n *\n * @since 1.0.0\n */\nexport function getChainsListByWalletTypeSync(params: GetChainsListParams): (string | number)[] {\n const { walletType, chains = [], ...config } = params;\n\n if (!walletType) {\n console.warn('getChainsListByWalletType: walletType is required');\n return [];\n }\n\n const adapterType = getAdapterFromWalletType(walletType);\n const adapter = adapterRegistry.getLoadedAdapter(adapterType);\n\n if (adapter) {\n try {\n if (adapterType === OrbitAdapter.SOLANA) {\n return adapter.getChains(config.solanaRPCUrls, chains);\n } else {\n return adapter.getChains(config.appChains);\n }\n } catch (error) {\n console.warn(`Error with loaded adapter for ${adapterType}:`, error);\n }\n }\n\n return getFallbackChains(adapterType, config);\n}\n\n/**\n * Provides fallback chain extraction without external dependencies.\n *\n * This function implements basic chain extraction logic that works without\n * requiring blockchain-specific packages to be installed. It provides a\n * safety net when adapters fail to load or aren't available.\n *\n * Fallback behaviors:\n * - EVM: Extracts `id` field from chain objects or direct identifiers\n * - Solana: Extracts keys from RPC URL configuration objects\n * - Unknown: Returns empty array\n *\n * @private\n * @param adapterType - The blockchain adapter type\n * @param config - Configuration object containing chain data\n * @returns Array of extracted chain identifiers\n *\n * @since 1.0.0\n */\nfunction getFallbackChains(adapterType: OrbitAdapter, config: any): (string | number)[] {\n switch (adapterType) {\n case OrbitAdapter.EVM: {\n const appChains = config.appChains;\n if (!Array.isArray(appChains)) return [];\n\n return appChains\n .map((chain: any) => {\n // Handle chain objects with id property (e.g., { id: 1, name: 'Ethereum' })\n if (typeof chain === 'object' && chain?.id) return chain.id;\n // Handle direct chain identifiers (numbers or strings)\n if (typeof chain === 'number' || typeof chain === 'string') return chain;\n return null;\n })\n .filter(isValidChainId);\n }\n case OrbitAdapter.SOLANA: {\n const solanaRPCUrls = config.solanaRPCUrls;\n // Extract cluster names from RPC URL configuration\n return solanaRPCUrls && typeof solanaRPCUrls === 'object' ? Object.keys(solanaRPCUrls) : [];\n }\n default:\n return [];\n }\n}\n\n// ========================================\n// Chain List Validation Functions\n// ========================================\n\n/**\n * Validates if a chain list conforms to EVM format (with adapter loading).\n *\n * Uses the EVM adapter to perform comprehensive validation, falling back to\n * basic type checking if the adapter isn't available. EVM chains typically\n * use numeric identifiers.\n *\n * @param chains - Array of chain identifiers to validate\n * @returns Promise resolving to true if chains are valid for EVM\n *\n * @example\n * ```typescript\n * const isEvm = await isEvmChainList([1, 137, 56]); // true\n * const notEvm = await isEvmChainList(['mainnet-beta']); // false\n * ```\n *\n * @since 1.0.0\n */\nexport async function isEvmChainList(chains: (string | number)[]): Promise<boolean> {\n const adapter = await adapterRegistry.getAdapter(OrbitAdapter.EVM);\n return adapter?.isChainList(chains) ?? chains.every((chain) => typeof chain === 'number');\n}\n\n/**\n * Validates if a chain list conforms to Solana format (with adapter loading).\n *\n * Uses the Solana adapter to perform comprehensive validation, falling back to\n * basic type checking if the adapter isn't available. Solana chains typically\n * use string cluster names.\n *\n * @param chains - Array of chain identifiers to validate\n * @returns Promise resolving to true if chains are valid for Solana\n *\n * @example\n * ```typescript\n * const isSolana = await isSolanaChainList(['mainnet-beta', 'devnet']); // true\n * const notSolana = await isSolanaChainList([1, 137]); // false\n * ```\n *\n * @since 1.0.0\n */\nexport async function isSolanaChainList(chains: (string | number)[]): Promise<boolean> {\n const adapter = await adapterRegistry.getAdapter(OrbitAdapter.SOLANA);\n return adapter?.isChainList(chains) ?? chains.every((chain) => typeof chain === 'string');\n}\n\n/**\n * Synchronous EVM chain list validation using pre-loaded adapters.\n *\n * Provides immediate validation results without triggering adapter loading.\n * Falls back to basic type checking if adapter isn't pre-loaded.\n *\n * @param chains - Array of chain identifiers to validate\n * @returns True if chains are valid for EVM\n *\n * @example\n * ```typescript\n * const isEvm = isEvmChainListSync([1, 137, 56]); // true (immediate result)\n * ```\n *\n * @since 1.0.0\n */\nexport function isEvmChainListSync(chains: (string | number)[]): boolean {\n const adapter = adapterRegistry.getLoadedAdapter(OrbitAdapter.EVM);\n return adapter?.isChainList(chains) ?? chains.every((chain) => typeof chain === 'number');\n}\n\n/**\n * Synchronous Solana chain list validation using pre-loaded adapters.\n *\n * Provides immediate validation results without triggering adapter loading.\n * Falls back to basic type checking if adapter isn't pre-loaded.\n *\n * @param chains - Array of chain identifiers to validate\n * @returns True if chains are valid for Solana\n *\n * @example\n * ```typescript\n * const isSolana = isSolanaChainListSync(['mainnet-beta', 'devnet']); // true\n * ```\n *\n * @since 1.0.0\n */\nexport function isSolanaChainListSync(chains: (string | number)[]): boolean {\n const adapter = adapterRegistry.getLoadedAdapter(OrbitAdapter.SOLANA);\n return adapter?.isChainList(chains) ?? chains.every((chain) => typeof chain === 'string');\n}\n\n// ========================================\n// Solana-Specific Utilities\n// ========================================\n\n/**\n * Retrieves all available Solana clusters from the current configuration.\n *\n * This function loads the Solana adapter and queries it for all configured\n * cluster names. Useful for populating UI dropdowns or validating cluster\n * availability before connection attempts.\n *\n * @returns Promise resolving to array of available cluster names\n *\n * @example\n * ```typescript\n * const clusters = await getAvailableSolanaClusters();\n * console.log('Available clusters:', clusters);\n * // Might log: ['mainnet-beta', 'devnet', 'testnet', 'localnet']\n *\n * // Use for UI population\n * const clusterOptions = clusters.map(cluster => ({\n * value: cluster,\n * label: cluster.replace('-', ' ').toUpperCase()\n * }));\n * ```\n *\n * @since 1.0.0\n */\nexport async function getAvailableSolanaClusters(): Promise<string[]> {\n const adapter = await adapterRegistry.getAdapter(OrbitAdapter.SOLANA);\n return adapter?.getAvailableClusters?.() ?? [];\n}\n\n/**\n * Validates whether a cluster name is valid for Solana connections.\n *\n * This function loads the Solana adapter and uses it to validate cluster\n * names against known Solana cluster monikers and custom configurations.\n *\n * @param cluster - Cluster name to validate\n * @returns Promise resolving to true if cluster is valid\n *\n * @example\n * ```typescript\n * const isValid = await isValidSolanaCluster('mainnet-beta'); // true\n * const isInvalid = await isValidSolanaCluster('invalid-cluster'); // false\n *\n * // Use for form validation\n * if (await isValidSolanaCluster(userInput)) {\n * // Proceed with connection\n * } else {\n * // Show error message\n * }\n * ```\n *\n * @since 1.0.0\n */\nexport async function isValidSolanaCluster(cluster: string): Promise<boolean> {\n const adapter = await adapterRegistry.getAdapter(OrbitAdapter.SOLANA);\n return adapter?.isValidCluster?.(cluster) ?? false;\n}\n\n// ========================================\n// Wallet Chain Extraction Utilities\n// ========================================\n\n/**\n * Safely extracts chain information from a wallet object.\n *\n * This utility function handles the complex nested structure of wallet objects\n * and safely extracts chain information without throwing errors. It performs\n * comprehensive type checking to ensure data integrity.\n *\n * The function expects wallet objects with this structure:\n * ```\n * {\n * connectedWallet: {\n * chains: [chain1, chain2, ...]\n * }\n * }\n * ```\n *\n * @param activeWallet - Wallet object to extract chains from\n * @returns Array of chain identifiers or undefined if not found/invalid\n *\n * @example\n * ```typescript\n * // With valid wallet structure\n * const wallet = {\n * connectedWallet: {\n * chains: [1, 137, 56]\n * }\n * };\n * const chains = getWalletChains(wallet); // [1, 137, 56]\n *\n * // With invalid/missing structure\n * const invalidWallet = { someOtherProperty: true };\n * const noChains = getWalletChains(invalidWallet); // undefined\n *\n * // Use in conditional logic\n * const walletChains = getWalletChains(activeWallet);\n * if (walletChains) {\n * console.log('Wallet supports chains:', walletChains);\n * }\n * ```\n *\n * @since 1.0.0\n */\nexport function getWalletChains(activeWallet: any): (string | number)[] | undefined {\n if (\n activeWallet &&\n typeof activeWallet === 'object' &&\n 'connectedWallet' in activeWallet &&\n activeWallet.connectedWallet &&\n typeof activeWallet.connectedWallet === 'object' &&\n 'chains' in activeWallet.connectedWallet\n ) {\n const chains = activeWallet.connectedWallet.chains;\n if (Array.isArray(chains)) {\n return chains;\n }\n }\n return undefined;\n}\n\n// ========================================\n// Adapter Management Utilities\n// ========================================\n\n/**\n * Pre-loads blockchain adapters for improved application performance.\n *\n * This function should be called during application initialization to load\n * commonly used adapters ahead of time. This eliminates loading delays when\n * users first interact with wallet connections.\n *\n * All loading operations run concurrently for maximum efficiency, and the\n * function completes even if some adapters fail to load (partial success).\n *\n * @param types - Array of adapter types to preload (defaults to EVM and Solana)\n * @returns Promise that resolves when all loading attempts complete\n *\n * @example\n * ```typescript\n * // During app initialization\n * export async function initializeApp() {\n * // Preload common adapters\n * await preloadChainAdapters([OrbitAdapter.EVM, OrbitAdapter.SOLANA]);\n *\n * // Continue with other initialization\n * // ...\n * }\n *\n * // Later usage will be instant for loaded adapters\n * const evmChains = getChainsListByWalletTypeSync({\n * walletType: WalletType.EVM_METAMASK,\n * appChains: configuration\n * }); // Instant result since adapter is pre-loaded\n * ```\n *\n * @since 1.0.0\n */\nexport async function preloadChainAdapters(\n types: OrbitAdapter[] = [OrbitAdapter.EVM, OrbitAdapter.SOLANA],\n): Promise<void> {\n await adapterRegistry.preloadAdapters(types);\n}\n\n/**\n * Gets the current loading status of a specific adapter.\n *\n * Returns the current state of an adapter in the loading lifecycle. Useful\n * for UI indicators, debugging, or conditional logic based on adapter\n * availability.\n *\n * @param type - The adapter type to check\n * @returns Current loading status of the adapter\n *\n * @example\n * ```typescript\n * const evmStatus = getAdapterStatus(OrbitAdapter.EVM);\n *\n * switch (evmStatus) {\n * case 'idle':\n * console.log('EVM adapter not yet requested');\n * break;\n * case 'loading':\n * // Show loading spinner\n * break;\n * case 'loaded':\n * // Enable EVM features\n * break;\n * case 'error':\n * // Show fallback UI\n * break;\n * }\n * ```\n *\n * @since 1.0.0\n */\nexport function getAdapterStatus(type: OrbitAdapter) {\n return adapterRegistry.getAdapterStatus(type);\n}\n\n/**\n * Gets comprehensive status information for all registered adapters.\n *\n * Returns a complete overview of all adapter states, useful for debugging,\n * monitoring, or displaying system status in admin interfaces.\n *\n * @returns Record mapping adapter types to their current loading status\n *\n * @example\n * ```typescript\n * const allStatuses = getAllAdaptersStatus();\n * console.log('System overview:', allStatuses);\n * // Output: { \"evm\": \"loaded\", \"solana\": \"loading\", \"starknet\": \"idle\" }\n *\n * // Use for system health monitoring\n * const loadedAdapters = Object.entries(allStatuses)\n * .filter(([_, status]) => status === 'loaded')\n * .map(([type, _]) => type);\n *\n * console.log('Available blockchain support:', loadedAdapters);\n * ```\n *\n * @since 1.0.0\n */\nexport function getAllAdaptersStatus() {\n return adapterRegistry.getAdaptersInfo();\n}\n"]}
@@ -0,0 +1,2 @@
1
+ 'use strict';var satelliteReact=require('@tuwaio/satellite-react');Object.defineProperty(exports,"a",{enumerable:true,get:function(){return satelliteReact.AllConnectors}});Object.defineProperty(exports,"b",{enumerable:true,get:function(){return satelliteReact.AllWallets}});Object.defineProperty(exports,"c",{enumerable:true,get:function(){return satelliteReact.Connector}});Object.defineProperty(exports,"d",{enumerable:true,get:function(){return satelliteReact.SatelliteConnectProvider}});Object.defineProperty(exports,"e",{enumerable:true,get:function(){return satelliteReact.SatelliteConnectProviderProps}});Object.defineProperty(exports,"f",{enumerable:true,get:function(){return satelliteReact.SatelliteStoreContext}});Object.defineProperty(exports,"g",{enumerable:true,get:function(){return satelliteReact.useInitializeAutoConnect}});Object.defineProperty(exports,"h",{enumerable:true,get:function(){return satelliteReact.useSatelliteConnectStore}});Object.defineProperty(exports,"i",{enumerable:true,get:function(){return satelliteReact.Wallet}});//# sourceMappingURL=chunk-OA6MB7CZ.cjs.map
2
+ //# sourceMappingURL=chunk-OA6MB7CZ.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"chunk-OA6MB7CZ.cjs","sourcesContent":[]}
@@ -0,0 +1,2 @@
1
+ 'use strict';var e={connectWallet:"Connect Wallet",disconnect:"Disconnect",connecting:"Connecting...",connected:"Connected",tryAgain:"Try again",back:"Back",connect:"Connect",close:"Close",all:"All",connectionError:"Connection error",connectedSuccessfully:"Connected successfully!",connectingTo:"Connecting to",walletConnectionError:"Wallet connection error",errorWhenChainSwitching:"Error when chain switching",cannotConnectWallet:"Cannot connect to the wallet. Please try again or use another connector.",success:"Success",error:"Error",replaced:"Replaced",recent:"Recent",transactionLoading:"Transaction loading",transactionSuccess:"Transaction successful",transactionError:"Transaction failed",transactionReplaced:"Transaction replaced",aboutWallets:"About wallets",getWallet:"Get a wallet",connectImpersonatedWallet:"Connect impersonated wallet",transactionsInApp:"Transactions in app",switchNetwork:"Switch network",switchNetworks:"Switch Networks",connectingEllipsis:"Connecting...",installed:"Installed",popular:"Popular",impersonate:"Impersonate",readOnlyMode:"Read-only mode",whatIsWallet:"What is a wallet?",walletDescription:"Wallets are essential for managing your crypto\u2014they let you send, receive, and securely hold digital assets. Connecting your wallet grants you safe access and interaction with decentralized applications (dApps).",whatIsNetwork:"What is a network?",networkDescription:"A network (or blockchain) is a decentralized digital ledger that records transactions. Selecting a network lets you choose which blockchain you want to connect to.",learnMore:"Learn more",listOfNetworks:"List of networks",viewOnExplorer:"View on explorer",viewTransactions:"View transactions",enterWalletAddress:"Enter wallet address to impersonate",walletAddressPlaceholder:"0x...",noConnectorsFound:"No Connectors Found",noConnectorsDescription:"We couldn't find any wallets or connection methods for the selected network.",somethingWentWrong:"Something went wrong",networkPickingError:"Something went wrong with wallet network selection. Please go back and try again.",pulsarAdapterRequired:"Pulsar Adapter Required",pulsarAdapterDescription:"Additional configuration is needed for viewing transactions in app. Please contact your admin.",selectAvailableNetwork:"Select one of available network",startExploringWeb3:"Start Exploring Web3",walletKeyToDigitalWorld:"Your wallet is the key to the digital world and the technology that makes exploring web3 possible.",iDontHaveWallet:"I don't have a wallet",choseWallet:"Choose a wallet",keyToNewInternet:"The Key to a New Internet",keyToNewInternetDescription:"Your wallet is more than just storage. Think of it as your digital passport that lets you truly own, display, and exchange every digital asset you hold, from crypto tokens to unique NFTs.",logInWithoutHassle:"Log In Without the Hassle",logInWithoutHassleDescription:"Skip the endless sign-up forms! Your wallet is your unique access pass. Just connect it, and the website instantly recognizes you. It saves you time and protects your privacy.",copyRawError:"Copy raw error",copied:"Copied!",chainSelector:"Chain Selector",closeModal:"Close modal",selectChain:"Select chain",chainOption:"Chain option",openChainSelector:"Open chain selector",currentChain:"Current chain",scrollToTop:"Scroll to top",scrollToBottom:"Scroll to bottom",chainListContainer:"Chain list container",walletControls:"Wallet controls",openWalletModal:"Open wallet modal",walletConnected:"Wallet connected",walletNotConnected:"Wallet not connected",walletBalance:"Wallet balance",walletAddress:"Wallet address",transactionStatus:"Transaction status",successIcon:"Success icon",errorIcon:"Error icon",replacedIcon:"Replaced icon",statusIcon:"Status icon",loading:"Loading",idle:"Idle",unknownWallet:"Unknown wallet",walletAvatar:"Wallet avatar",ensAvatar:"ENS avatar",walletIcon:"Wallet icon",impersonateAddressEmpty:"Enter a wallet address to impersonate.",impersonateAddressNotCorrect:"Entered wallet address is not correct. Please try again.",impersonateAddressConnected:"First disconnect the wallet to impersonate another address."};var n={connectWallet:"\u041F\u0456\u0434\u043A\u043B\u044E\u0447\u0438\u0442\u0438 \u0413\u0430\u043C\u0430\u043D\u0435\u0446\u044C",disconnect:"\u0412\u0456\u0434\u043A\u043B\u044E\u0447\u0438\u0442\u0438",connecting:"\u041F\u0456\u0434\u043A\u043B\u044E\u0447\u0435\u043D\u043D\u044F...",connected:"\u041F\u0456\u0434\u043A\u043B\u044E\u0447\u0435\u043D\u043E",tryAgain:"\u0421\u043F\u0440\u043E\u0431\u0443\u0432\u0430\u0442\u0438 \u0437\u043D\u043E\u0432\u0443",back:"\u041D\u0430\u0437\u0430\u0434",connect:"\u041F\u0456\u0434\u043A\u043B\u044E\u0447\u0438\u0442\u0438",close:"\u0417\u0430\u043A\u0440\u0438\u0442\u0438",all:"\u0412\u0441\u0456",connectionError:"\u041F\u043E\u043C\u0438\u043B\u043A\u0430 \u043F\u0456\u0434\u043A\u043B\u044E\u0447\u0435\u043D\u043D\u044F",connectedSuccessfully:"\u0423\u0441\u043F\u0456\u0448\u043D\u043E \u043F\u0456\u0434\u043A\u043B\u044E\u0447\u0435\u043D\u043E!",connectingTo:"\u041F\u0456\u0434\u043A\u043B\u044E\u0447\u0435\u043D\u043D\u044F \u0434\u043E",walletConnectionError:"\u041F\u043E\u043C\u0438\u043B\u043A\u0430 \u043F\u0456\u0434\u043A\u043B\u044E\u0447\u0435\u043D\u043D\u044F \u0433\u0430\u043C\u0430\u043D\u0446\u044F",errorWhenChainSwitching:"\u041F\u043E\u043C\u0438\u043B\u043A\u0430 \u043F\u0440\u0438 \u043F\u0435\u0440\u0435\u043C\u0438\u043A\u0430\u043D\u043D\u0456 \u043C\u0435\u0440\u0435\u0436\u0456",cannotConnectWallet:"\u041D\u0435 \u0432\u0434\u0430\u0454\u0442\u044C\u0441\u044F \u043F\u0456\u0434\u043A\u043B\u044E\u0447\u0438\u0442\u0438\u0441\u044C \u0434\u043E \u0433\u0430\u043C\u0430\u043D\u0446\u044F. \u0421\u043F\u0440\u043E\u0431\u0443\u0439\u0442\u0435 \u0437\u043D\u043E\u0432\u0443 \u0430\u0431\u043E \u0432\u0438\u043A\u043E\u0440\u0438\u0441\u0442\u0430\u0439\u0442\u0435 \u0456\u043D\u0448\u0438\u0439 \u0437'\u0454\u0434\u043D\u0443\u0432\u0430\u0447.",success:"\u0423\u0441\u043F\u0456\u0445",error:"\u041F\u043E\u043C\u0438\u043B\u043A\u0430",replaced:"\u0417\u0430\u043C\u0456\u043D\u0435\u043D\u043E",recent:"\u041E\u0441\u0442\u0430\u043D\u043D\u0456",transactionLoading:"\u0417\u0430\u0432\u0430\u043D\u0442\u0430\u0436\u0435\u043D\u043D\u044F \u0442\u0440\u0430\u043D\u0437\u0430\u043A\u0446\u0456\u0457",transactionSuccess:"\u0422\u0440\u0430\u043D\u0437\u0430\u043A\u0446\u0456\u044F \u0443\u0441\u043F\u0456\u0448\u043D\u0430",transactionError:"\u0422\u0440\u0430\u043D\u0437\u0430\u043A\u0446\u0456\u044F \u043D\u0435 \u0432\u0434\u0430\u043B\u0430\u0441\u044C",transactionReplaced:"\u0422\u0440\u0430\u043D\u0437\u0430\u043A\u0446\u0456\u044F \u0437\u0430\u043C\u0456\u043D\u0435\u043D\u0430",aboutWallets:"\u041F\u0440\u043E \u0433\u0430\u043C\u0430\u043D\u0446\u0456",getWallet:"\u041E\u0442\u0440\u0438\u043C\u0430\u0442\u0438 \u0433\u0430\u043C\u0430\u043D\u0435\u0446\u044C",connectImpersonatedWallet:"\u041F\u0456\u0434\u043A\u043B\u044E\u0447\u0438\u0442\u0438 \u0456\u043C\u0456\u0442\u043E\u0432\u0430\u043D\u0438\u0439 \u0433\u0430\u043C\u0430\u043D\u0435\u0446\u044C",transactionsInApp:"\u0422\u0440\u0430\u043D\u0437\u0430\u043A\u0446\u0456\u0457 \u0432 \u0434\u043E\u0434\u0430\u0442\u043A\u0443",switchNetwork:"\u0417\u043C\u0456\u043D\u0438\u0442\u0438 \u043C\u0435\u0440\u0435\u0436\u0443",switchNetworks:"\u0417\u043C\u0456\u043D\u0438\u0442\u0438 \u041C\u0435\u0440\u0435\u0436\u0456",connectingEllipsis:"\u041F\u0456\u0434\u043A\u043B\u044E\u0447\u0435\u043D\u043D\u044F...",installed:"\u0412\u0441\u0442\u0430\u043D\u043E\u0432\u043B\u0435\u043D\u0456",popular:"\u041F\u043E\u043F\u0443\u043B\u044F\u0440\u043D\u0456",impersonate:"\u0406\u043C\u0456\u0442\u0443\u0432\u0430\u0442\u0438",readOnlyMode:"\u0420\u0435\u0436\u0438\u043C \u0442\u0456\u043B\u044C\u043A\u0438 \u0447\u0438\u0442\u0430\u043D\u043D\u044F",whatIsWallet:"\u0429\u043E \u0442\u0430\u043A\u0435 \u0433\u0430\u043C\u0430\u043D\u0435\u0446\u044C?",walletDescription:"\u0413\u0430\u043C\u0430\u043D\u0446\u0456 \u043D\u0435\u043E\u0431\u0445\u0456\u0434\u043D\u0456 \u0434\u043B\u044F \u0443\u043F\u0440\u0430\u0432\u043B\u0456\u043D\u043D\u044F \u0432\u0430\u0448\u043E\u044E \u043A\u0440\u0438\u043F\u0442\u043E\u0432\u0430\u043B\u044E\u0442\u043E\u044E \u2014 \u0432\u043E\u043D\u0438 \u0434\u043E\u0437\u0432\u043E\u043B\u044F\u044E\u0442\u044C \u043D\u0430\u0434\u0441\u0438\u043B\u0430\u0442\u0438, \u043E\u0442\u0440\u0438\u043C\u0443\u0432\u0430\u0442\u0438 \u0442\u0430 \u0431\u0435\u0437\u043F\u0435\u0447\u043D\u043E \u0437\u0431\u0435\u0440\u0456\u0433\u0430\u0442\u0438 \u0446\u0438\u0444\u0440\u043E\u0432\u0456 \u0430\u043A\u0442\u0438\u0432\u0438. \u041F\u0456\u0434\u043A\u043B\u044E\u0447\u0435\u043D\u043D\u044F \u0433\u0430\u043C\u0430\u043D\u0446\u044F \u043D\u0430\u0434\u0430\u0454 \u0432\u0430\u043C \u0431\u0435\u0437\u043F\u0435\u0447\u043D\u0438\u0439 \u0434\u043E\u0441\u0442\u0443\u043F \u0442\u0430 \u0432\u0437\u0430\u0454\u043C\u043E\u0434\u0456\u044E \u0437 \u0434\u0435\u0446\u0435\u043D\u0442\u0440\u0430\u043B\u0456\u0437\u043E\u0432\u0430\u043D\u0438\u043C\u0438 \u0434\u043E\u0434\u0430\u0442\u043A\u0430\u043C\u0438 (dApps).",whatIsNetwork:"\u0429\u043E \u0442\u0430\u043A\u0435 \u043C\u0435\u0440\u0435\u0436\u0430?",networkDescription:"\u041C\u0435\u0440\u0435\u0436\u0430 (\u0430\u0431\u043E \u0431\u043B\u043E\u043A\u0447\u0435\u0439\u043D) \u2014 \u0446\u0435 \u0434\u0435\u0446\u0435\u043D\u0442\u0440\u0430\u043B\u0456\u0437\u043E\u0432\u0430\u043D\u0438\u0439 \u0446\u0438\u0444\u0440\u043E\u0432\u0438\u0439 \u0440\u0435\u0454\u0441\u0442\u0440, \u044F\u043A\u0438\u0439 \u0437\u0430\u043F\u0438\u0441\u0443\u0454 \u0442\u0440\u0430\u043D\u0437\u0430\u043A\u0446\u0456\u0457. \u0412\u0438\u0431\u0456\u0440 \u043C\u0435\u0440\u0435\u0436\u0456 \u0434\u043E\u0437\u0432\u043E\u043B\u044F\u0454 \u0432\u0430\u043C \u043E\u0431\u0440\u0430\u0442\u0438, \u0434\u043E \u044F\u043A\u043E\u0433\u043E \u0431\u043B\u043E\u043A\u0447\u0435\u0439\u043D\u0443 \u0432\u0438 \u0445\u043E\u0447\u0435\u0442\u0435 \u043F\u0456\u0434\u043A\u043B\u044E\u0447\u0438\u0442\u0438\u0441\u044C.",learnMore:"\u0414\u0456\u0437\u043D\u0430\u0442\u0438\u0441\u044F \u0431\u0456\u043B\u044C\u0448\u0435",listOfNetworks:"\u0421\u043F\u0438\u0441\u043E\u043A \u043C\u0435\u0440\u0435\u0436",viewOnExplorer:"\u041F\u0435\u0440\u0435\u0433\u043B\u044F\u043D\u0443\u0442\u0438 \u0432 \u043F\u0440\u043E\u0432\u0456\u0434\u043D\u0438\u043A\u0443",viewTransactions:"\u041F\u0435\u0440\u0435\u0433\u043B\u044F\u043D\u0443\u0442\u0438 \u0442\u0440\u0430\u043D\u0437\u0430\u043A\u0446\u0456\u0457",enterWalletAddress:"\u0412\u0432\u0435\u0434\u0456\u0442\u044C \u0430\u0434\u0440\u0435\u0441\u0443 \u0433\u0430\u043C\u0430\u043D\u0446\u044F \u0434\u043B\u044F \u0456\u043C\u0456\u0442\u0430\u0446\u0456\u0457",walletAddressPlaceholder:"0x...",noConnectorsFound:"\u0417'\u0454\u0434\u043D\u0443\u0432\u0430\u0447\u0456 \u043D\u0435 \u0437\u043D\u0430\u0439\u0434\u0435\u043D\u0456",noConnectorsDescription:"\u041C\u0438 \u043D\u0435 \u0437\u043C\u043E\u0433\u043B\u0438 \u0437\u043D\u0430\u0439\u0442\u0438 \u0436\u043E\u0434\u043D\u0438\u0445 \u0433\u0430\u043C\u0430\u043D\u0446\u0456\u0432 \u0430\u0431\u043E \u043C\u0435\u0442\u043E\u0434\u0456\u0432 \u043F\u0456\u0434\u043A\u043B\u044E\u0447\u0435\u043D\u043D\u044F \u0434\u043B\u044F \u043E\u0431\u0440\u0430\u043D\u043E\u0457 \u043C\u0435\u0440\u0435\u0436\u0456.",somethingWentWrong:"\u0429\u043E\u0441\u044C \u043F\u0456\u0448\u043B\u043E \u043D\u0435 \u0442\u0430\u043A",networkPickingError:"\u0429\u043E\u0441\u044C \u043F\u0456\u0448\u043B\u043E \u043D\u0435 \u0442\u0430\u043A \u0437 \u0432\u0438\u0431\u043E\u0440\u043E\u043C \u043C\u0435\u0440\u0435\u0436\u0456 \u0433\u0430\u043C\u0430\u043D\u0446\u044F. \u041F\u043E\u0432\u0435\u0440\u043D\u0456\u0442\u044C\u0441\u044F \u043D\u0430\u0437\u0430\u0434 \u0456 \u0441\u043F\u0440\u043E\u0431\u0443\u0439\u0442\u0435 \u0437\u043D\u043E\u0432\u0443.",pulsarAdapterRequired:"\u041F\u043E\u0442\u0440\u0456\u0431\u0435\u043D Pulsar \u0410\u0434\u0430\u043F\u0442\u0435\u0440",pulsarAdapterDescription:"\u041F\u043E\u0442\u0440\u0456\u0431\u043D\u0430 \u0434\u043E\u0434\u0430\u0442\u043A\u043E\u0432\u0430 \u043A\u043E\u043D\u0444\u0456\u0433\u0443\u0440\u0430\u0446\u0456\u044F \u0434\u043B\u044F \u043F\u0435\u0440\u0435\u0433\u043B\u044F\u0434\u0443 \u0442\u0440\u0430\u043D\u0437\u0430\u043A\u0446\u0456\u0439 \u0432 \u0434\u043E\u0434\u0430\u0442\u043A\u0443. \u0417\u0432\u0435\u0440\u043D\u0456\u0442\u044C\u0441\u044F \u0434\u043E \u0432\u0430\u0448\u043E\u0433\u043E \u0430\u0434\u043C\u0456\u043D\u0456\u0441\u0442\u0440\u0430\u0442\u043E\u0440\u0430.",selectAvailableNetwork:"\u041E\u0431\u0435\u0440\u0456\u0442\u044C \u043E\u0434\u043D\u0443 \u0437 \u0434\u043E\u0441\u0442\u0443\u043F\u043D\u0438\u0445 \u043C\u0435\u0440\u0435\u0436",startExploringWeb3:"\u041F\u043E\u0447\u043D\u0456\u0442\u044C \u0434\u043E\u0441\u043B\u0456\u0434\u0436\u0443\u0432\u0430\u0442\u0438 Web3",walletKeyToDigitalWorld:"\u0412\u0430\u0448 \u0433\u0430\u043C\u0430\u043D\u0435\u0446\u044C \u2014 \u0446\u0435 \u043A\u043B\u044E\u0447 \u0434\u043E \u0446\u0438\u0444\u0440\u043E\u0432\u043E\u0433\u043E \u0441\u0432\u0456\u0442\u0443 \u0442\u0430 \u0442\u0435\u0445\u043D\u043E\u043B\u043E\u0433\u0456\u044F, \u044F\u043A\u0430 \u0440\u043E\u0431\u0438\u0442\u044C \u043C\u043E\u0436\u043B\u0438\u0432\u0438\u043C \u0434\u043E\u0441\u043B\u0456\u0434\u0436\u0435\u043D\u043D\u044F web3.",iDontHaveWallet:"\u0423 \u043C\u0435\u043D\u0435 \u043D\u0435\u043C\u0430\u0454 \u0433\u0430\u043C\u0430\u043D\u0446\u044F",choseWallet:"\u041E\u0431\u0435\u0440\u0456\u0442\u044C \u0433\u0430\u043C\u0430\u043D\u0435\u0446\u044C",keyToNewInternet:"\u041A\u043B\u044E\u0447 \u0434\u043E \u043D\u043E\u0432\u043E\u0433\u043E \u0406\u043D\u0442\u0435\u0440\u043D\u0435\u0442\u0443",keyToNewInternetDescription:"\u0412\u0430\u0448 \u0433\u0430\u043C\u0430\u043D\u0435\u0446\u044C \u2014 \u0446\u0435 \u0431\u0456\u043B\u044C\u0448\u0435 \u043D\u0456\u0436 \u043F\u0440\u043E\u0441\u0442\u043E \u0441\u0445\u043E\u0432\u0438\u0449\u0435. \u0414\u0443\u043C\u0430\u0439\u0442\u0435 \u043F\u0440\u043E \u043D\u044C\u043E\u0433\u043E \u044F\u043A \u043F\u0440\u043E \u0441\u0432\u0456\u0439 \u0446\u0438\u0444\u0440\u043E\u0432\u0438\u0439 \u043F\u0430\u0441\u043F\u043E\u0440\u0442, \u044F\u043A\u0438\u0439 \u0434\u043E\u0437\u0432\u043E\u043B\u044F\u0454 \u0432\u0430\u043C \u0441\u043F\u0440\u0430\u0432\u0434\u0456 \u0432\u043E\u043B\u043E\u0434\u0456\u0442\u0438, \u043F\u043E\u043A\u0430\u0437\u0443\u0432\u0430\u0442\u0438 \u0442\u0430 \u043E\u0431\u043C\u0456\u043D\u044E\u0432\u0430\u0442\u0438 \u043A\u043E\u0436\u0435\u043D \u0446\u0438\u0444\u0440\u043E\u0432\u0438\u0439 \u0430\u043A\u0442\u0438\u0432, \u044F\u043A\u0438\u0439 \u0443 \u0432\u0430\u0441 \u0454, \u0432\u0456\u0434 \u043A\u0440\u0438\u043F\u0442\u043E-\u0442\u043E\u043A\u0435\u043D\u0456\u0432 \u0434\u043E \u0443\u043D\u0456\u043A\u0430\u043B\u044C\u043D\u0438\u0445 NFT.",logInWithoutHassle:"\u0423\u0432\u0456\u0439\u0434\u0456\u0442\u044C \u0431\u0435\u0437 \u043A\u043B\u043E\u043F\u043E\u0442\u0443",logInWithoutHassleDescription:"\u041F\u0440\u043E\u043F\u0443\u0441\u0442\u0456\u0442\u044C \u043D\u0435\u0441\u043A\u0456\u043D\u0447\u0435\u043D\u043D\u0456 \u0444\u043E\u0440\u043C\u0438 \u0440\u0435\u0454\u0441\u0442\u0440\u0430\u0446\u0456\u0457! \u0412\u0430\u0448 \u0433\u0430\u043C\u0430\u043D\u0435\u0446\u044C \u2014 \u0446\u0435 \u0432\u0430\u0448 \u0443\u043D\u0456\u043A\u0430\u043B\u044C\u043D\u0438\u0439 \u043F\u0440\u043E\u043F\u0443\u0441\u043A. \u041F\u0440\u043E\u0441\u0442\u043E \u043F\u0456\u0434\u043A\u043B\u044E\u0447\u0456\u0442\u044C \u0439\u043E\u0433\u043E, \u0456 \u0432\u0435\u0431-\u0441\u0430\u0439\u0442 \u043C\u0438\u0442\u0442\u0454\u0432\u043E \u0432\u0430\u0441 \u0432\u043F\u0456\u0437\u043D\u0430\u0454. \u0426\u0435 \u0437\u0430\u043E\u0449\u0430\u0434\u0436\u0443\u0454 \u0432\u0430\u0448 \u0447\u0430\u0441 \u0456 \u0437\u0430\u0445\u0438\u0449\u0430\u0454 \u0432\u0430\u0448\u0443 \u043A\u043E\u043D\u0444\u0456\u0434\u0435\u043D\u0446\u0456\u0439\u043D\u0456\u0441\u0442\u044C.",copyRawError:"\u0421\u043A\u043E\u043F\u0456\u044E\u0432\u0430\u0442\u0438 \u043D\u0435\u043E\u0431\u0440\u043E\u0431\u043B\u0435\u043D\u0443 \u043F\u043E\u043C\u0438\u043B\u043A\u0443",copied:"\u0421\u043A\u043E\u043F\u0456\u0439\u043E\u0432\u0430\u043D\u043E!",chainSelector:"\u0421\u0435\u043B\u0435\u043A\u0442\u043E\u0440 \u041B\u0430\u043D\u0446\u044E\u0433\u0430",closeModal:"\u0417\u0430\u043A\u0440\u0438\u0442\u0438 \u043C\u043E\u0434\u0430\u043B\u044C\u043D\u0435 \u0432\u0456\u043A\u043D\u043E",selectChain:"\u041E\u0431\u0435\u0440\u0456\u0442\u044C \u043B\u0430\u043D\u0446\u044E\u0433",chainOption:"\u0412\u0430\u0440\u0456\u0430\u043D\u0442 \u043B\u0430\u043D\u0446\u044E\u0433\u0430",openChainSelector:"\u0412\u0456\u0434\u043A\u0440\u0438\u0442\u0438 \u0441\u0435\u043B\u0435\u043A\u0442\u043E\u0440 \u043B\u0430\u043D\u0446\u044E\u0433\u0430",currentChain:"\u041F\u043E\u0442\u043E\u0447\u043D\u0438\u0439 \u043B\u0430\u043D\u0446\u044E\u0433",scrollToTop:"\u041F\u0440\u043E\u043A\u0440\u0443\u0442\u0438\u0442\u0438 \u0432\u0433\u043E\u0440\u0443",scrollToBottom:"\u041F\u0440\u043E\u043A\u0440\u0443\u0442\u0438\u0442\u0438 \u0432\u043D\u0438\u0437",chainListContainer:"\u041A\u043E\u043D\u0442\u0435\u0439\u043D\u0435\u0440 \u0441\u043F\u0438\u0441\u043A\u0443 \u043B\u0430\u043D\u0446\u044E\u0433\u0456\u0432",walletControls:"\u041A\u0435\u0440\u0443\u0432\u0430\u043D\u043D\u044F \u0433\u0430\u043C\u0430\u043D\u0446\u0435\u043C",openWalletModal:"\u0412\u0456\u0434\u043A\u0440\u0438\u0442\u0438 \u043C\u043E\u0434\u0430\u043B\u044C\u043D\u0435 \u0432\u0456\u043A\u043D\u043E \u0433\u0430\u043C\u0430\u043D\u0446\u044F",walletConnected:"\u0413\u0430\u043C\u0430\u043D\u0435\u0446\u044C \u043F\u0456\u0434\u043A\u043B\u044E\u0447\u0435\u043D\u043E",walletNotConnected:"\u0413\u0430\u043C\u0430\u043D\u0435\u0446\u044C \u043D\u0435 \u043F\u0456\u0434\u043A\u043B\u044E\u0447\u0435\u043D\u043E",walletBalance:"\u0411\u0430\u043B\u0430\u043D\u0441 \u0433\u0430\u043C\u0430\u043D\u0446\u044F",walletAddress:"\u0410\u0434\u0440\u0435\u0441\u0430 \u0433\u0430\u043C\u0430\u043D\u0446\u044F",transactionStatus:"\u0421\u0442\u0430\u0442\u0443\u0441 \u0442\u0440\u0430\u043D\u0437\u0430\u043A\u0446\u0456\u0457",successIcon:"\u0406\u043A\u043E\u043D\u043A\u0430 \u0443\u0441\u043F\u0456\u0445\u0443",errorIcon:"\u0406\u043A\u043E\u043D\u043A\u0430 \u043F\u043E\u043C\u0438\u043B\u043A\u0438",replacedIcon:"\u0406\u043A\u043E\u043D\u043A\u0430 \u0437\u0430\u043C\u0456\u043D\u0438",statusIcon:"\u0406\u043A\u043E\u043D\u043A\u0430 \u0441\u0442\u0430\u0442\u0443\u0441\u0443",loading:"\u0417\u0430\u0432\u0430\u043D\u0442\u0430\u0436\u0435\u043D\u043D\u044F",idle:"\u041E\u0447\u0456\u043A\u0443\u0432\u0430\u043D\u043D\u044F",unknownWallet:"\u041D\u0435\u0432\u0456\u0434\u043E\u043C\u0438\u0439 \u0433\u0430\u043C\u0430\u043D\u0435\u0446\u044C",walletAvatar:"\u0410\u0432\u0430\u0442\u0430\u0440 \u0433\u0430\u043C\u0430\u043D\u0446\u044F",ensAvatar:"ENS \u0430\u0432\u0430\u0442\u0430\u0440",walletIcon:"\u0406\u043A\u043E\u043D\u043A\u0430 \u0433\u0430\u043C\u0430\u043D\u0446\u044F",impersonateAddressEmpty:"\u0412\u0432\u0435\u0434\u0456\u0442\u044C \u0430\u0434\u0440\u0435\u0441\u0443 \u0433\u0430\u043C\u0430\u043D\u0446\u044F \u0434\u043B\u044F \u0456\u043C\u0456\u0442\u0430\u0446\u0456\u0457.",impersonateAddressNotCorrect:"\u0412\u0432\u0435\u0434\u0435\u043D\u0430 \u0430\u0434\u0440\u0435\u0441\u0430 \u0433\u0430\u043C\u0430\u043D\u0446\u044F \u043D\u0435\u043F\u0440\u0430\u0432\u0438\u043B\u044C\u043D\u0430. \u0421\u043F\u0440\u043E\u0431\u0443\u0439\u0442\u0435 \u0437\u043D\u043E\u0432\u0443.",impersonateAddressConnected:"\u0421\u043F\u043E\u0447\u0430\u0442\u043A\u0443 \u0432\u0456\u0434\u043A\u043B\u044E\u0447\u0456\u0442\u044C \u0433\u0430\u043C\u0430\u043D\u0435\u0446\u044C \u0434\u043B\u044F \u0456\u043C\u0456\u0442\u0430\u0446\u0456\u0457 \u0456\u043D\u0448\u043E\u0457 \u0430\u0434\u0440\u0435\u0441\u0438."};exports.a=e;exports.b=n;//# sourceMappingURL=chunk-QERPNHKX.cjs.map
2
+ //# sourceMappingURL=chunk-QERPNHKX.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/i18n/en.ts","../src/i18n/ua.ts"],"names":["defaultLabels","ukrainianLabels"],"mappings":"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","file":"chunk-QERPNHKX.cjs","sourcesContent":["import { NovaConnectLabels } from './types';\n\n/**\n * Default English translations for NovaConnect component\n * All text strings extracted from component files\n */\nexport const defaultLabels: NovaConnectLabels = {\n // Core actions - Primary user interactions\n connectWallet: 'Connect Wallet',\n disconnect: 'Disconnect',\n connecting: 'Connecting...',\n connected: 'Connected',\n tryAgain: 'Try again',\n back: 'Back',\n connect: 'Connect',\n close: 'Close',\n all: 'All',\n\n // Connection states - Status messages for wallet connection flow\n connectionError: 'Connection error',\n connectedSuccessfully: 'Connected successfully!',\n connectingTo: 'Connecting to',\n walletConnectionError: 'Wallet connection error',\n errorWhenChainSwitching: 'Error when chain switching',\n cannotConnectWallet: 'Cannot connect to the wallet. Please try again or use another connector.',\n\n // Transaction states - Status indicators for blockchain transactions\n success: 'Success',\n error: 'Error',\n replaced: 'Replaced',\n recent: 'Recent',\n transactionLoading: 'Transaction loading',\n transactionSuccess: 'Transaction successful',\n transactionError: 'Transaction failed',\n transactionReplaced: 'Transaction replaced',\n\n // Modal titles - Headers for different modal dialogs\n aboutWallets: 'About wallets',\n getWallet: 'Get a wallet',\n connectImpersonatedWallet: 'Connect impersonated wallet',\n transactionsInApp: 'Transactions in app',\n switchNetwork: 'Switch network',\n switchNetworks: 'Switch Networks',\n connectingEllipsis: 'Connecting...',\n\n // Wallet sections - Categories for wallet connector grouping\n installed: 'Installed',\n popular: 'Popular',\n impersonate: 'Impersonate',\n readOnlyMode: 'Read-only mode',\n\n // Information and descriptions - Educational content and explanations\n whatIsWallet: 'What is a wallet?',\n walletDescription:\n 'Wallets are essential for managing your crypto—they let you send, receive, and securely hold digital assets. Connecting your wallet grants you safe access and interaction with decentralized applications (dApps).',\n whatIsNetwork: 'What is a network?',\n networkDescription:\n 'A network (or blockchain) is a decentralized digital ledger that records transactions. Selecting a network lets you choose which blockchain you want to connect to.',\n learnMore: 'Learn more',\n listOfNetworks: 'List of networks',\n viewOnExplorer: 'View on explorer',\n viewTransactions: 'View transactions',\n\n // Impersonation form - Labels for wallet address impersonation feature\n enterWalletAddress: 'Enter wallet address to impersonate',\n walletAddressPlaceholder: '0x...',\n\n // Error messages - User-facing error notifications and descriptions\n noConnectorsFound: 'No Connectors Found',\n noConnectorsDescription: \"We couldn't find any wallets or connection methods for the selected network.\",\n somethingWentWrong: 'Something went wrong',\n networkPickingError: 'Something went wrong with wallet network selection. Please go back and try again.',\n pulsarAdapterRequired: 'Pulsar Adapter Required',\n pulsarAdapterDescription:\n 'Additional configuration is needed for viewing transactions in app. Please contact your admin.',\n selectAvailableNetwork: 'Select one of available network',\n\n // Get Wallet section - Onboarding content for new users without wallets\n startExploringWeb3: 'Start Exploring Web3',\n walletKeyToDigitalWorld:\n 'Your wallet is the key to the digital world and the technology that makes exploring web3 possible.',\n iDontHaveWallet: \"I don't have a wallet\",\n choseWallet: 'Choose a wallet',\n\n // About Wallets slides - Educational carousel content explaining wallet benefits\n keyToNewInternet: 'The Key to a New Internet',\n keyToNewInternetDescription:\n 'Your wallet is more than just storage. Think of it as your digital passport that lets you truly own, display, and exchange every digital asset you hold, from crypto tokens to unique NFTs.',\n logInWithoutHassle: 'Log In Without the Hassle',\n logInWithoutHassleDescription:\n 'Skip the endless sign-up forms! Your wallet is your unique access pass. Just connect it, and the website instantly recognizes you. It saves you time and protects your privacy.',\n\n // Copy functionality and UI feedback - Clipboard operations and user feedback\n copyRawError: 'Copy raw error',\n copied: 'Copied!',\n\n // Accessibility labels - Screen reader and ARIA labels for better accessibility\n chainSelector: 'Chain Selector',\n closeModal: 'Close modal',\n selectChain: 'Select chain',\n chainOption: 'Chain option',\n openChainSelector: 'Open chain selector',\n currentChain: 'Current chain',\n scrollToTop: 'Scroll to top',\n scrollToBottom: 'Scroll to bottom',\n chainListContainer: 'Chain list container',\n walletControls: 'Wallet controls',\n openWalletModal: 'Open wallet modal',\n walletConnected: 'Wallet connected',\n walletNotConnected: 'Wallet not connected',\n walletBalance: 'Wallet balance',\n walletAddress: 'Wallet address',\n transactionStatus: 'Transaction status',\n successIcon: 'Success icon',\n errorIcon: 'Error icon',\n replacedIcon: 'Replaced icon',\n statusIcon: 'Status icon',\n\n // Additional states - Supplementary status indicators\n loading: 'Loading',\n idle: 'Idle',\n\n // Wallet Avatar labels\n unknownWallet: 'Unknown wallet',\n walletAvatar: 'Wallet avatar',\n ensAvatar: 'ENS avatar',\n walletIcon: 'Wallet icon',\n\n // Impersonate errors\n impersonateAddressEmpty: 'Enter a wallet address to impersonate.',\n impersonateAddressNotCorrect: 'Entered wallet address is not correct. Please try again.',\n impersonateAddressConnected: 'First disconnect the wallet to impersonate another address.',\n};\n","import { NovaConnectLabels } from './types';\n\n/**\n * Українські переклади для компонента NovaConnect\n * Всі текстові рядки витягнуті з файлів компонентів\n */\nexport const ukrainianLabels: NovaConnectLabels = {\n // Основні дії - Основні взаємодії користувача\n connectWallet: 'Підключити Гаманець',\n disconnect: 'Відключити',\n connecting: 'Підключення...',\n connected: 'Підключено',\n tryAgain: 'Спробувати знову',\n back: 'Назад',\n connect: 'Підключити',\n close: 'Закрити',\n all: 'Всі',\n\n // Стани підключення - Статусні повідомлення для процесу підключення гаманця\n connectionError: 'Помилка підключення',\n connectedSuccessfully: 'Успішно підключено!',\n connectingTo: 'Підключення до',\n walletConnectionError: 'Помилка підключення гаманця',\n errorWhenChainSwitching: 'Помилка при перемиканні мережі',\n cannotConnectWallet: `Не вдається підключитись до гаманця. Спробуйте знову або використайте інший з'єднувач.`,\n\n // Стани транзакцій - Індикатори статусу для блокчейн транзакцій\n success: 'Успіх',\n error: 'Помилка',\n replaced: 'Замінено',\n recent: 'Останні',\n transactionLoading: 'Завантаження транзакції',\n transactionSuccess: 'Транзакція успішна',\n transactionError: 'Транзакція не вдалась',\n transactionReplaced: 'Транзакція замінена',\n\n // Заголовки модальних вікон - Заголовки для різних модальних діалогів\n aboutWallets: 'Про гаманці',\n getWallet: 'Отримати гаманець',\n connectImpersonatedWallet: 'Підключити імітований гаманець',\n transactionsInApp: 'Транзакції в додатку',\n switchNetwork: 'Змінити мережу',\n switchNetworks: 'Змінити Мережі',\n connectingEllipsis: 'Підключення...',\n\n // Секції гаманців - Категорії для групування з'єднувачів гаманців\n installed: 'Встановлені',\n popular: 'Популярні',\n impersonate: 'Імітувати',\n readOnlyMode: 'Режим тільки читання',\n\n // Інформація та описи - Освітній контент та пояснення\n whatIsWallet: 'Що таке гаманець?',\n walletDescription:\n 'Гаманці необхідні для управління вашою криптовалютою — вони дозволяють надсилати, отримувати та безпечно зберігати цифрові активи. Підключення гаманця надає вам безпечний доступ та взаємодію з децентралізованими додатками (dApps).',\n whatIsNetwork: 'Що таке мережа?',\n networkDescription:\n 'Мережа (або блокчейн) — це децентралізований цифровий реєстр, який записує транзакції. Вибір мережі дозволяє вам обрати, до якого блокчейну ви хочете підключитись.',\n learnMore: 'Дізнатися більше',\n listOfNetworks: 'Список мереж',\n viewOnExplorer: 'Переглянути в провіднику',\n viewTransactions: 'Переглянути транзакції',\n\n // Форма імітації - Підписи для функції імітації адреси гаманця\n enterWalletAddress: 'Введіть адресу гаманця для імітації',\n walletAddressPlaceholder: '0x...',\n\n // Повідомлення про помилки - Повідомлення про помилки для користувача\n noConnectorsFound: `З'єднувачі не знайдені`,\n noConnectorsDescription: 'Ми не змогли знайти жодних гаманців або методів підключення для обраної мережі.',\n somethingWentWrong: 'Щось пішло не так',\n networkPickingError: 'Щось пішло не так з вибором мережі гаманця. Поверніться назад і спробуйте знову.',\n pulsarAdapterRequired: 'Потрібен Pulsar Адаптер',\n pulsarAdapterDescription:\n 'Потрібна додаткова конфігурація для перегляду транзакцій в додатку. Зверніться до вашого адміністратора.',\n selectAvailableNetwork: 'Оберіть одну з доступних мереж',\n\n // Секція отримання гаманця - Контент для нових користувачів без гаманців\n startExploringWeb3: 'Почніть досліджувати Web3',\n walletKeyToDigitalWorld:\n 'Ваш гаманець — це ключ до цифрового світу та технологія, яка робить можливим дослідження web3.',\n iDontHaveWallet: 'У мене немає гаманця',\n choseWallet: 'Оберіть гаманець',\n\n // Слайди про гаманці - Освітній контент карусель, що пояснює переваги гаманців\n keyToNewInternet: 'Ключ до нового Інтернету',\n keyToNewInternetDescription:\n 'Ваш гаманець — це більше ніж просто сховище. Думайте про нього як про свій цифровий паспорт, який дозволяє вам справді володіти, показувати та обмінювати кожен цифровий актив, який у вас є, від крипто-токенів до унікальних NFT.',\n logInWithoutHassle: 'Увійдіть без клопоту',\n logInWithoutHassleDescription:\n 'Пропустіть нескінченні форми реєстрації! Ваш гаманець — це ваш унікальний пропуск. Просто підключіть його, і веб-сайт миттєво вас впізнає. Це заощаджує ваш час і захищає вашу конфіденційність.',\n\n // Функція копіювання та відгуки UI - Операції з буфером обміну та відгуки користувача\n copyRawError: 'Скопіювати необроблену помилку',\n copied: 'Скопійовано!',\n\n // Підписи доступності - Підписи для зчитувачів екрану та ARIA для кращої доступності\n chainSelector: 'Селектор Ланцюга',\n closeModal: 'Закрити модальне вікно',\n selectChain: 'Оберіть ланцюг',\n chainOption: 'Варіант ланцюга',\n openChainSelector: 'Відкрити селектор ланцюга',\n currentChain: 'Поточний ланцюг',\n scrollToTop: 'Прокрутити вгору',\n scrollToBottom: 'Прокрутити вниз',\n chainListContainer: 'Контейнер списку ланцюгів',\n walletControls: 'Керування гаманцем',\n openWalletModal: 'Відкрити модальне вікно гаманця',\n walletConnected: 'Гаманець підключено',\n walletNotConnected: 'Гаманець не підключено',\n walletBalance: 'Баланс гаманця',\n walletAddress: 'Адреса гаманця',\n transactionStatus: 'Статус транзакції',\n successIcon: 'Іконка успіху',\n errorIcon: 'Іконка помилки',\n replacedIcon: 'Іконка заміни',\n statusIcon: 'Іконка статусу',\n\n // Додаткові стани - Додаткові індикатори статусу\n loading: 'Завантаження',\n idle: 'Очікування',\n\n // Підписи аватара гаманця\n unknownWallet: 'Невідомий гаманець',\n walletAvatar: 'Аватар гаманця',\n ensAvatar: 'ENS аватар',\n walletIcon: 'Іконка гаманця',\n\n // Помилки імітації\n impersonateAddressEmpty: 'Введіть адресу гаманця для імітації.',\n impersonateAddressNotCorrect: 'Введена адреса гаманця неправильна. Спробуйте знову.',\n impersonateAddressConnected: 'Спочатку відключіть гаманець для імітації іншої адреси.',\n};\n"]}