@n1xyz/wallet-widget 0.0.35-alpha.0 → 0.0.35-alpha.1

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 (574) hide show
  1. package/dist/bridge-assist/cctp-solana.d.ts +33 -0
  2. package/dist/bridge-assist/cctp-solana.js +392 -0
  3. package/dist/bridge-assist/cctp-solana.js.map +1 -0
  4. package/dist/main.css +1 -2
  5. package/dist/src/adapters/evm.d.ts +39 -0
  6. package/dist/src/adapters/evm.js +338 -0
  7. package/dist/src/adapters/evm.js.map +1 -0
  8. package/dist/src/adapters/factory.d.ts +37 -0
  9. package/dist/src/adapters/factory.js +82 -0
  10. package/dist/src/adapters/factory.js.map +1 -0
  11. package/dist/src/adapters/index.d.ts +33 -0
  12. package/dist/src/adapters/index.js +36 -0
  13. package/dist/src/adapters/index.js.map +1 -0
  14. package/dist/src/adapters/solana.d.ts +37 -0
  15. package/dist/src/adapters/solana.js +359 -0
  16. package/dist/src/adapters/solana.js.map +1 -0
  17. package/dist/src/adapters/types.d.ts +160 -0
  18. package/dist/src/adapters/types.js +20 -0
  19. package/dist/src/adapters/types.js.map +1 -0
  20. package/dist/src/animations/N1Loader.js.map +1 -0
  21. package/dist/src/animations/N1Loader.json +1 -0
  22. package/dist/src/animations/Processing.js.map +1 -0
  23. package/dist/src/animations/Processing.json +1 -0
  24. package/dist/{components → src/components}/LoadingFallback.d.ts +3 -0
  25. package/dist/{components → src/components}/LoadingFallback.js +3 -0
  26. package/dist/src/components/LoadingFallback.js.map +1 -0
  27. package/dist/{components → src/components}/Logo.d.ts +4 -0
  28. package/dist/{components → src/components}/Logo.js +4 -0
  29. package/dist/src/components/Logo.js.map +1 -0
  30. package/dist/src/components/N1ConnectButton.d.ts +13 -0
  31. package/dist/src/components/N1ConnectButton.js +66 -0
  32. package/dist/src/components/N1ConnectButton.js.map +1 -0
  33. package/dist/src/components/logos/ArbitrumLogo.js.map +1 -0
  34. package/dist/src/components/logos/BaseLogo.js +6 -0
  35. package/dist/src/components/logos/BaseLogo.js.map +1 -0
  36. package/dist/src/components/logos/BeraLogo.js.map +1 -0
  37. package/dist/src/components/logos/BitcoinLogo.js.map +1 -0
  38. package/dist/src/components/logos/EthereumLogo.js.map +1 -0
  39. package/dist/{components → src/components}/logos/HyperliquidLogo.js +1 -1
  40. package/dist/src/components/logos/HyperliquidLogo.js.map +1 -0
  41. package/dist/src/components/logos/OptimismLogo.js.map +1 -0
  42. package/dist/src/components/logos/SolanaLogo.js.map +1 -0
  43. package/dist/src/components/logos/ZeroOneLogo.js.map +1 -0
  44. package/dist/src/components/logos/index.js.map +1 -0
  45. package/dist/src/config/chains.d.ts +18 -0
  46. package/dist/src/config/chains.js +58 -0
  47. package/dist/src/config/chains.js.map +1 -0
  48. package/dist/src/config/dynamic.d.ts +1 -0
  49. package/dist/src/config/dynamic.js +18 -0
  50. package/dist/src/config/dynamic.js.map +1 -0
  51. package/dist/src/config/solana.js.map +1 -0
  52. package/dist/src/config/turnkey.d.ts +2 -0
  53. package/dist/src/config/turnkey.js +32 -0
  54. package/dist/src/config/turnkey.js.map +1 -0
  55. package/dist/src/context/n1-wallet-context.js.map +1 -0
  56. package/dist/src/errors/types.d.ts +72 -0
  57. package/dist/src/errors/types.js +140 -0
  58. package/dist/src/errors/types.js.map +1 -0
  59. package/dist/{features → src/features}/onboarding-flow/N1WalletModal.js +44 -29
  60. package/dist/src/features/onboarding-flow/N1WalletModal.js.map +1 -0
  61. package/dist/{features → src/features}/onboarding-flow/OnboardingFlow.d.ts +2 -1
  62. package/dist/{features → src/features}/onboarding-flow/OnboardingFlow.js +54 -8
  63. package/dist/src/features/onboarding-flow/OnboardingFlow.js.map +1 -0
  64. package/dist/src/features/onboarding-flow/bridge-assist/client.d.ts +42 -0
  65. package/dist/src/features/onboarding-flow/bridge-assist/client.js +268 -0
  66. package/dist/src/features/onboarding-flow/bridge-assist/client.js.map +1 -0
  67. package/dist/src/features/onboarding-flow/bridge-assist/config.d.ts +4 -0
  68. package/dist/src/features/onboarding-flow/bridge-assist/config.js +11 -0
  69. package/dist/src/features/onboarding-flow/bridge-assist/config.js.map +1 -0
  70. package/dist/src/features/onboarding-flow/bridge-assist/index.d.ts +1 -0
  71. package/dist/src/features/onboarding-flow/bridge-assist/index.js +2 -0
  72. package/dist/src/features/onboarding-flow/bridge-assist/index.js.map +1 -0
  73. package/dist/src/features/onboarding-flow/bridge-assist/types.d.ts +5 -0
  74. package/dist/src/features/onboarding-flow/bridge-assist/types.js +28 -0
  75. package/dist/src/features/onboarding-flow/bridge-assist/types.js.map +1 -0
  76. package/dist/src/features/onboarding-flow/cctp/bridgeKitClient.d.ts +35 -0
  77. package/dist/src/features/onboarding-flow/cctp/bridgeKitClient.js +391 -0
  78. package/dist/src/features/onboarding-flow/cctp/bridgeKitClient.js.map +1 -0
  79. package/dist/src/features/onboarding-flow/cctp/clientFactory.d.ts +6 -0
  80. package/dist/src/features/onboarding-flow/cctp/clientFactory.js +9 -0
  81. package/dist/src/features/onboarding-flow/cctp/clientFactory.js.map +1 -0
  82. package/dist/src/features/onboarding-flow/cctp/config.d.ts +16 -0
  83. package/dist/src/features/onboarding-flow/cctp/config.js +55 -0
  84. package/dist/src/features/onboarding-flow/cctp/config.js.map +1 -0
  85. package/dist/src/features/onboarding-flow/cctp/mockCctpClient.d.ts +11 -0
  86. package/dist/src/features/onboarding-flow/cctp/mockCctpClient.js +85 -0
  87. package/dist/src/features/onboarding-flow/cctp/mockCctpClient.js.map +1 -0
  88. package/dist/src/features/onboarding-flow/cctp/solanaClaim.d.ts +1 -0
  89. package/dist/src/features/onboarding-flow/cctp/solanaClaim.js +2 -0
  90. package/dist/src/features/onboarding-flow/cctp/solanaClaim.js.map +1 -0
  91. package/dist/src/features/onboarding-flow/cctp/types.d.ts +50 -0
  92. package/dist/src/features/onboarding-flow/cctp/types.js +2 -0
  93. package/dist/src/features/onboarding-flow/cctp/types.js.map +1 -0
  94. package/dist/{features → src/features}/onboarding-flow/components/ChainButton.d.ts +5 -2
  95. package/dist/src/features/onboarding-flow/components/ChainButton.js +14 -0
  96. package/dist/src/features/onboarding-flow/components/ChainButton.js.map +1 -0
  97. package/dist/{features → src/features}/onboarding-flow/components/Header.d.ts +2 -2
  98. package/dist/src/features/onboarding-flow/components/Header.js +69 -0
  99. package/dist/src/features/onboarding-flow/components/Header.js.map +1 -0
  100. package/dist/{features → src/features}/onboarding-flow/components/ImageWithFallback.d.ts +2 -5
  101. package/dist/src/features/onboarding-flow/components/ImageWithFallback.js +33 -0
  102. package/dist/src/features/onboarding-flow/components/ImageWithFallback.js.map +1 -0
  103. package/dist/{features → src/features}/onboarding-flow/components/TransactionTable.d.ts +5 -0
  104. package/dist/{features → src/features}/onboarding-flow/components/TransactionTable.js +8 -3
  105. package/dist/src/features/onboarding-flow/components/TransactionTable.js.map +1 -0
  106. package/dist/{features → src/features}/onboarding-flow/components/WaitingMessage.d.ts +4 -0
  107. package/dist/src/features/onboarding-flow/components/WaitingMessage.js.map +1 -0
  108. package/dist/src/features/onboarding-flow/components/index.js.map +1 -0
  109. package/dist/src/features/onboarding-flow/errors/depositError.d.ts +36 -0
  110. package/dist/src/features/onboarding-flow/errors/depositError.js +134 -0
  111. package/dist/src/features/onboarding-flow/errors/depositError.js.map +1 -0
  112. package/dist/src/features/onboarding-flow/hooks/useBridgeDeposit.d.ts +35 -0
  113. package/dist/src/features/onboarding-flow/hooks/useBridgeDeposit.js +585 -0
  114. package/dist/src/features/onboarding-flow/hooks/useBridgeDeposit.js.map +1 -0
  115. package/dist/src/features/onboarding-flow/hooks/useDepositAuth.d.ts +6 -0
  116. package/dist/src/features/onboarding-flow/hooks/useDepositAuth.js +141 -0
  117. package/dist/src/features/onboarding-flow/hooks/useDepositAuth.js.map +1 -0
  118. package/dist/src/features/onboarding-flow/hooks/useDepositHydration.d.ts +15 -0
  119. package/dist/src/features/onboarding-flow/hooks/useDepositHydration.js +83 -0
  120. package/dist/src/features/onboarding-flow/hooks/useDepositHydration.js.map +1 -0
  121. package/dist/src/features/onboarding-flow/hooks/usePendingDepositState.d.ts +6 -0
  122. package/dist/src/features/onboarding-flow/hooks/usePendingDepositState.js +45 -0
  123. package/dist/src/features/onboarding-flow/hooks/usePendingDepositState.js.map +1 -0
  124. package/dist/src/features/onboarding-flow/hooks/useSolanaDeposit.d.ts +13 -0
  125. package/dist/src/features/onboarding-flow/hooks/useSolanaDeposit.js +161 -0
  126. package/dist/src/features/onboarding-flow/hooks/useSolanaDeposit.js.map +1 -0
  127. package/dist/src/features/onboarding-flow/index.js.map +1 -0
  128. package/dist/{features → src/features}/onboarding-flow/providers/DepositFlowProvider.d.ts +10 -3
  129. package/dist/src/features/onboarding-flow/providers/DepositFlowProvider.js +762 -0
  130. package/dist/src/features/onboarding-flow/providers/DepositFlowProvider.js.map +1 -0
  131. package/dist/{features → src/features}/onboarding-flow/providers/OnboardingStateProvider.d.ts +5 -0
  132. package/dist/src/features/onboarding-flow/providers/OnboardingStateProvider.js +399 -0
  133. package/dist/src/features/onboarding-flow/providers/OnboardingStateProvider.js.map +1 -0
  134. package/dist/{features → src/features}/onboarding-flow/providers/StateProvider.d.ts +2 -2
  135. package/dist/{features → src/features}/onboarding-flow/providers/StateProvider.js +2 -2
  136. package/dist/src/features/onboarding-flow/providers/StateProvider.js.map +1 -0
  137. package/dist/{features → src/features}/onboarding-flow/providers/WalletConnectionProvider.d.ts +8 -0
  138. package/dist/src/features/onboarding-flow/providers/WalletConnectionProvider.js +938 -0
  139. package/dist/src/features/onboarding-flow/providers/WalletConnectionProvider.js.map +1 -0
  140. package/dist/{features → src/features}/onboarding-flow/providers/debug.js +5 -1
  141. package/dist/src/features/onboarding-flow/providers/debug.js.map +1 -0
  142. package/dist/src/features/onboarding-flow/providers/index.js.map +1 -0
  143. package/dist/{features → src/features}/onboarding-flow/providers/onboardingStateMachine.d.ts +28 -1
  144. package/dist/{features → src/features}/onboarding-flow/providers/onboardingStateMachine.js +38 -4
  145. package/dist/src/features/onboarding-flow/providers/onboardingStateMachine.js.map +1 -0
  146. package/dist/src/features/onboarding-flow/screens/00-EntrySelectionScreen.d.ts +4 -0
  147. package/dist/src/features/onboarding-flow/screens/00-EntrySelectionScreen.js +32 -0
  148. package/dist/src/features/onboarding-flow/screens/00-EntrySelectionScreen.js.map +1 -0
  149. package/dist/src/features/onboarding-flow/screens/01-ConnectWalletScreen.d.ts +5 -0
  150. package/dist/{features → src/features}/onboarding-flow/screens/01-ConnectWalletScreen.js +5 -0
  151. package/dist/src/features/onboarding-flow/screens/01-ConnectWalletScreen.js.map +1 -0
  152. package/dist/src/features/onboarding-flow/screens/02-TurnkeyAuthScreen.d.ts +1 -0
  153. package/dist/src/features/onboarding-flow/screens/02-TurnkeyAuthScreen.js +25 -0
  154. package/dist/src/features/onboarding-flow/screens/02-TurnkeyAuthScreen.js.map +1 -0
  155. package/dist/src/features/onboarding-flow/screens/03-TurnkeyPreparingScreen.d.ts +1 -0
  156. package/dist/src/features/onboarding-flow/screens/03-TurnkeyPreparingScreen.js +25 -0
  157. package/dist/src/features/onboarding-flow/screens/03-TurnkeyPreparingScreen.js.map +1 -0
  158. package/dist/{features/onboarding-flow/screens/02-ChainSelectionScreen.d.ts → src/features/onboarding-flow/screens/04-ChainSelectionScreen.d.ts} +11 -11
  159. package/dist/{features/onboarding-flow/screens/02-ChainSelectionScreen.js → src/features/onboarding-flow/screens/04-ChainSelectionScreen.js} +60 -30
  160. package/dist/src/features/onboarding-flow/screens/04-ChainSelectionScreen.js.map +1 -0
  161. package/dist/src/features/onboarding-flow/screens/05-AmountInputScreen.d.ts +11 -0
  162. package/dist/src/features/onboarding-flow/screens/05-AmountInputScreen.js +585 -0
  163. package/dist/src/features/onboarding-flow/screens/05-AmountInputScreen.js.map +1 -0
  164. package/dist/{features/onboarding-flow/screens/04-DepositProgressScreen.d.ts → src/features/onboarding-flow/screens/06-DepositProgressScreen.d.ts} +5 -0
  165. package/dist/src/features/onboarding-flow/screens/06-DepositProgressScreen.js +367 -0
  166. package/dist/src/features/onboarding-flow/screens/06-DepositProgressScreen.js.map +1 -0
  167. package/dist/src/features/onboarding-flow/screens/07-DepositSuccessScreen.d.ts +6 -0
  168. package/dist/{features/onboarding-flow/screens/05-DepositSuccessScreen.js → src/features/onboarding-flow/screens/07-DepositSuccessScreen.js} +12 -6
  169. package/dist/src/features/onboarding-flow/screens/07-DepositSuccessScreen.js.map +1 -0
  170. package/dist/src/features/onboarding-flow/screens/08-AuthLoadingScreen.d.ts +5 -0
  171. package/dist/{features/onboarding-flow/screens/06-AuthLoadingScreen.js → src/features/onboarding-flow/screens/08-AuthLoadingScreen.js} +6 -2
  172. package/dist/src/features/onboarding-flow/screens/08-AuthLoadingScreen.js.map +1 -0
  173. package/dist/src/features/onboarding-flow/screens/09-ErrorScreen.d.ts +5 -0
  174. package/dist/src/features/onboarding-flow/screens/09-ErrorScreen.js +43 -0
  175. package/dist/src/features/onboarding-flow/screens/09-ErrorScreen.js.map +1 -0
  176. package/dist/src/features/onboarding-flow/screens/index.d.ts +10 -0
  177. package/dist/src/features/onboarding-flow/screens/index.js +11 -0
  178. package/dist/src/features/onboarding-flow/screens/index.js.map +1 -0
  179. package/dist/src/features/onboarding-flow/turnkey/turnkeySessionMachine.d.ts +1 -0
  180. package/dist/src/features/onboarding-flow/turnkey/turnkeySessionMachine.js +2 -0
  181. package/dist/src/features/onboarding-flow/turnkey/turnkeySessionMachine.js.map +1 -0
  182. package/dist/{features → src/features}/onboarding-flow/types.d.ts +38 -11
  183. package/dist/{features → src/features}/onboarding-flow/types.js +5 -0
  184. package/dist/src/features/onboarding-flow/types.js.map +1 -0
  185. package/dist/src/features/onboarding-flow/utils/bridgeUtils.d.ts +6 -0
  186. package/dist/src/features/onboarding-flow/utils/bridgeUtils.js +34 -0
  187. package/dist/src/features/onboarding-flow/utils/bridgeUtils.js.map +1 -0
  188. package/dist/src/features/onboarding-flow/utils/deposit/attestationUtils.d.ts +29 -0
  189. package/dist/src/features/onboarding-flow/utils/deposit/attestationUtils.js +82 -0
  190. package/dist/src/features/onboarding-flow/utils/deposit/attestationUtils.js.map +1 -0
  191. package/dist/src/features/onboarding-flow/utils/deposit/bridgeUtils.d.ts +5 -0
  192. package/dist/src/features/onboarding-flow/utils/deposit/bridgeUtils.js +10 -0
  193. package/dist/src/features/onboarding-flow/utils/deposit/bridgeUtils.js.map +1 -0
  194. package/dist/src/features/onboarding-flow/utils/deposit/claimConfirmation.d.ts +14 -0
  195. package/dist/src/features/onboarding-flow/utils/deposit/claimConfirmation.js +94 -0
  196. package/dist/src/features/onboarding-flow/utils/deposit/claimConfirmation.js.map +1 -0
  197. package/dist/src/features/onboarding-flow/utils/deposit/claimSubmission.d.ts +25 -0
  198. package/dist/src/features/onboarding-flow/utils/deposit/claimSubmission.js +212 -0
  199. package/dist/src/features/onboarding-flow/utils/deposit/claimSubmission.js.map +1 -0
  200. package/dist/src/features/onboarding-flow/utils/deposit/depositPolling.d.ts +37 -0
  201. package/dist/src/features/onboarding-flow/utils/deposit/depositPolling.js +199 -0
  202. package/dist/src/features/onboarding-flow/utils/deposit/depositPolling.js.map +1 -0
  203. package/dist/src/features/onboarding-flow/utils/deposit/evmTxInterceptor.d.ts +27 -0
  204. package/dist/src/features/onboarding-flow/utils/deposit/evmTxInterceptor.js +149 -0
  205. package/dist/src/features/onboarding-flow/utils/deposit/evmTxInterceptor.js.map +1 -0
  206. package/dist/src/features/onboarding-flow/utils/deposit/nonceUtils.d.ts +5 -0
  207. package/dist/src/features/onboarding-flow/utils/deposit/nonceUtils.js +121 -0
  208. package/dist/src/features/onboarding-flow/utils/deposit/nonceUtils.js.map +1 -0
  209. package/dist/{features/onboarding-flow/utils/transaction.d.ts → src/features/onboarding-flow/utils/deposit/solanaDepositTransaction.d.ts} +3 -3
  210. package/dist/src/features/onboarding-flow/utils/deposit/solanaDepositTransaction.js +8 -0
  211. package/dist/src/features/onboarding-flow/utils/deposit/solanaDepositTransaction.js.map +1 -0
  212. package/dist/src/features/onboarding-flow/utils/deposit/solanaUtils.d.ts +12 -0
  213. package/dist/src/features/onboarding-flow/utils/deposit/solanaUtils.js +150 -0
  214. package/dist/src/features/onboarding-flow/utils/deposit/solanaUtils.js.map +1 -0
  215. package/dist/src/features/onboarding-flow/utils/deposit/storage.d.ts +52 -0
  216. package/dist/src/features/onboarding-flow/utils/deposit/storage.js +243 -0
  217. package/dist/src/features/onboarding-flow/utils/deposit/storage.js.map +1 -0
  218. package/dist/src/features/onboarding-flow/utils/deposit/walletUtils.d.ts +36 -0
  219. package/dist/src/features/onboarding-flow/utils/deposit/walletUtils.js +304 -0
  220. package/dist/src/features/onboarding-flow/utils/deposit/walletUtils.js.map +1 -0
  221. package/dist/src/features/onboarding-flow/utils/depositPolling.d.ts +1 -0
  222. package/dist/src/features/onboarding-flow/utils/depositPolling.js +3 -0
  223. package/dist/src/features/onboarding-flow/utils/depositPolling.js.map +1 -0
  224. package/dist/src/features/onboarding-flow/utils/explorerUrl.d.ts +14 -0
  225. package/dist/src/features/onboarding-flow/utils/explorerUrl.js +44 -0
  226. package/dist/src/features/onboarding-flow/utils/explorerUrl.js.map +1 -0
  227. package/dist/src/features/onboarding-flow/utils/nordUtils.d.ts +8 -0
  228. package/dist/{features/onboarding-flow/utils/nordUser.js → src/features/onboarding-flow/utils/nordUtils.js} +14 -1
  229. package/dist/src/features/onboarding-flow/utils/nordUtils.js.map +1 -0
  230. package/dist/src/features/onboarding-flow/utils/pendingDepositCookie.d.ts +13 -0
  231. package/dist/src/features/onboarding-flow/utils/pendingDepositCookie.js +15 -0
  232. package/dist/src/features/onboarding-flow/utils/pendingDepositCookie.js.map +1 -0
  233. package/dist/src/features/onboarding-flow/utils/pendingDepositStorage.d.ts +15 -0
  234. package/dist/src/features/onboarding-flow/utils/pendingDepositStorage.js +94 -0
  235. package/dist/src/features/onboarding-flow/utils/pendingDepositStorage.js.map +1 -0
  236. package/dist/{features → src/features}/onboarding-flow/utils/utils.d.ts +9 -2
  237. package/dist/{features → src/features}/onboarding-flow/utils/utils.js +9 -4
  238. package/dist/src/features/onboarding-flow/utils/utils.js.map +1 -0
  239. package/dist/src/features/onboarding-flow/utils/withImageFallback.d.ts +6 -0
  240. package/dist/{features → src/features}/onboarding-flow/utils/withImageFallback.js +2 -3
  241. package/dist/src/features/onboarding-flow/utils/withImageFallback.js.map +1 -0
  242. package/dist/src/hooks/index.js.map +1 -0
  243. package/dist/src/hooks/useN1Wallet.d.ts +12 -0
  244. package/dist/{hooks → src/hooks}/useN1Wallet.js +10 -0
  245. package/dist/src/hooks/useN1Wallet.js.map +1 -0
  246. package/dist/src/hooks/useNordUserInitialization.d.ts +12 -0
  247. package/dist/{hooks → src/hooks}/useNordUserInitialization.js +74 -33
  248. package/dist/src/hooks/useNordUserInitialization.js.map +1 -0
  249. package/dist/src/index.d.ts +9 -0
  250. package/dist/src/index.js +16 -0
  251. package/dist/src/index.js.map +1 -0
  252. package/dist/src/providers/LazyWalletProvider.d.ts +4 -0
  253. package/dist/src/providers/LazyWalletProvider.js +404 -0
  254. package/dist/src/providers/LazyWalletProvider.js.map +1 -0
  255. package/dist/src/providers/N1WalletProvider/ContextBridge.d.ts +28 -0
  256. package/dist/src/providers/N1WalletProvider/ContextBridge.js +273 -0
  257. package/dist/src/providers/N1WalletProvider/ContextBridge.js.map +1 -0
  258. package/dist/src/providers/N1WalletProvider/ModalProvider.d.ts +113 -0
  259. package/dist/src/providers/N1WalletProvider/ModalProvider.js +319 -0
  260. package/dist/src/providers/N1WalletProvider/ModalProvider.js.map +1 -0
  261. package/dist/src/providers/N1WalletProvider/NetworkProvider.d.ts +88 -0
  262. package/dist/src/providers/N1WalletProvider/NetworkProvider.js +252 -0
  263. package/dist/src/providers/N1WalletProvider/NetworkProvider.js.map +1 -0
  264. package/dist/src/providers/N1WalletProvider/SessionProvider.d.ts +71 -0
  265. package/dist/src/providers/N1WalletProvider/SessionProvider.js +187 -0
  266. package/dist/src/providers/N1WalletProvider/SessionProvider.js.map +1 -0
  267. package/dist/src/providers/N1WalletProvider/SigningProvider.d.ts +58 -0
  268. package/dist/src/providers/N1WalletProvider/SigningProvider.js +134 -0
  269. package/dist/src/providers/N1WalletProvider/SigningProvider.js.map +1 -0
  270. package/dist/src/providers/N1WalletProvider/ThemingProvider.d.ts +50 -0
  271. package/dist/src/providers/N1WalletProvider/ThemingProvider.js +102 -0
  272. package/dist/src/providers/N1WalletProvider/ThemingProvider.js.map +1 -0
  273. package/dist/src/providers/N1WalletProvider/index.d.ts +21 -0
  274. package/dist/src/providers/N1WalletProvider/index.js +27 -0
  275. package/dist/src/providers/N1WalletProvider/index.js.map +1 -0
  276. package/dist/src/providers/N1WalletProvider.d.ts +17 -0
  277. package/dist/src/providers/N1WalletProvider.js +102 -0
  278. package/dist/src/providers/N1WalletProvider.js.map +1 -0
  279. package/dist/{providers → src/providers}/ShadowRootWrapper.d.ts +4 -0
  280. package/dist/{providers → src/providers}/ShadowRootWrapper.js +4 -5
  281. package/dist/src/providers/ShadowRootWrapper.js.map +1 -0
  282. package/dist/{providers → src/providers}/WalletErrorBoundary.d.ts +7 -2
  283. package/dist/{providers → src/providers}/WalletErrorBoundary.js +5 -1
  284. package/dist/src/providers/WalletErrorBoundary.js.map +1 -0
  285. package/dist/src/services/bootstrap/DepositRecoveryService.d.ts +64 -0
  286. package/dist/src/services/bootstrap/DepositRecoveryService.js +245 -0
  287. package/dist/src/services/bootstrap/DepositRecoveryService.js.map +1 -0
  288. package/dist/src/services/bootstrap/DynamicSdkService.d.ts +62 -0
  289. package/dist/src/services/bootstrap/DynamicSdkService.js +335 -0
  290. package/dist/src/services/bootstrap/DynamicSdkService.js.map +1 -0
  291. package/dist/src/services/bootstrap/SessionBootstrapService.d.ts +78 -0
  292. package/dist/src/services/bootstrap/SessionBootstrapService.js +280 -0
  293. package/dist/src/services/bootstrap/SessionBootstrapService.js.map +1 -0
  294. package/dist/src/services/bootstrap/TurnkeyBootstrapService.d.ts +92 -0
  295. package/dist/src/services/bootstrap/TurnkeyBootstrapService.js +253 -0
  296. package/dist/src/services/bootstrap/TurnkeyBootstrapService.js.map +1 -0
  297. package/dist/src/services/bootstrap/index.d.ts +13 -0
  298. package/dist/src/services/bootstrap/index.js +16 -0
  299. package/dist/src/services/bootstrap/index.js.map +1 -0
  300. package/dist/src/services/bootstrap/types.d.ts +92 -0
  301. package/dist/src/services/bootstrap/types.js +7 -0
  302. package/dist/src/services/bootstrap/types.js.map +1 -0
  303. package/dist/src/services/storage/StorageService.d.ts +98 -0
  304. package/dist/src/services/storage/StorageService.js +360 -0
  305. package/dist/src/services/storage/StorageService.js.map +1 -0
  306. package/dist/src/services/storage/index.d.ts +9 -0
  307. package/dist/src/services/storage/index.js +10 -0
  308. package/dist/src/services/storage/index.js.map +1 -0
  309. package/dist/src/services/storage/keys.d.ts +28 -0
  310. package/dist/src/services/storage/keys.js +45 -0
  311. package/dist/src/services/storage/keys.js.map +1 -0
  312. package/dist/src/services/storage/types.d.ts +73 -0
  313. package/dist/src/services/storage/types.js +23 -0
  314. package/dist/src/services/storage/types.js.map +1 -0
  315. package/dist/src/store/index.d.ts +8 -0
  316. package/dist/src/store/index.js +24 -0
  317. package/dist/src/store/index.js.map +1 -0
  318. package/dist/src/store/selectors.d.ts +105 -0
  319. package/dist/src/store/selectors.js +183 -0
  320. package/dist/src/store/selectors.js.map +1 -0
  321. package/dist/src/store/slices/bootstrapSlice.d.ts +64 -0
  322. package/dist/src/store/slices/bootstrapSlice.js +78 -0
  323. package/dist/src/store/slices/bootstrapSlice.js.map +1 -0
  324. package/dist/src/store/slices/configSlice.d.ts +7 -0
  325. package/dist/src/store/slices/configSlice.js +14 -0
  326. package/dist/src/store/slices/configSlice.js.map +1 -0
  327. package/dist/src/store/slices/index.d.ts +10 -0
  328. package/dist/src/store/slices/index.js +10 -0
  329. package/dist/src/store/slices/index.js.map +1 -0
  330. package/dist/src/store/slices/sessionSlice.d.ts +7 -0
  331. package/dist/src/store/slices/sessionSlice.js +17 -0
  332. package/dist/src/store/slices/sessionSlice.js.map +1 -0
  333. package/dist/src/store/slices/signingSlice.d.ts +7 -0
  334. package/dist/src/store/slices/signingSlice.js +14 -0
  335. package/dist/src/store/slices/signingSlice.js.map +1 -0
  336. package/dist/src/store/slices/uiSlice.d.ts +9 -0
  337. package/dist/src/store/slices/uiSlice.js +25 -0
  338. package/dist/src/store/slices/uiSlice.js.map +1 -0
  339. package/dist/src/store/slices/walletSlice.d.ts +7 -0
  340. package/dist/src/store/slices/walletSlice.js +21 -0
  341. package/dist/src/store/slices/walletSlice.js.map +1 -0
  342. package/dist/src/store/store.d.ts +50 -0
  343. package/dist/src/store/store.js +259 -0
  344. package/dist/src/store/store.js.map +1 -0
  345. package/dist/src/store/subscriptions/depositPersistence.d.ts +32 -0
  346. package/dist/src/store/subscriptions/depositPersistence.js +106 -0
  347. package/dist/src/store/subscriptions/depositPersistence.js.map +1 -0
  348. package/dist/src/store/subscriptions/index.d.ts +34 -0
  349. package/dist/src/store/subscriptions/index.js +73 -0
  350. package/dist/src/store/subscriptions/index.js.map +1 -0
  351. package/dist/src/store/subscriptions/turnkeyPersistence.d.ts +42 -0
  352. package/dist/src/store/subscriptions/turnkeyPersistence.js +127 -0
  353. package/dist/src/store/subscriptions/turnkeyPersistence.js.map +1 -0
  354. package/dist/src/store/types.d.ts +166 -0
  355. package/dist/src/store/types.js +7 -0
  356. package/dist/src/store/types.js.map +1 -0
  357. package/dist/src/styles/cdn-fonts.d.ts +12 -0
  358. package/dist/{styles → src/styles}/cdn-fonts.js +20 -2
  359. package/dist/src/styles/cdn-fonts.js.map +1 -0
  360. package/dist/src/styles/embedded-main-css.d.ts +2 -0
  361. package/dist/src/styles/embedded-main-css.js +3 -0
  362. package/dist/src/styles/embedded-main-css.js.map +1 -0
  363. package/dist/src/turnkey/TurnkeyProvider.d.ts +21 -0
  364. package/dist/src/turnkey/TurnkeyProvider.js +695 -0
  365. package/dist/src/turnkey/TurnkeyProvider.js.map +1 -0
  366. package/dist/src/turnkey/createTurnkeyWallet.d.ts +39 -0
  367. package/dist/src/turnkey/createTurnkeyWallet.js +319 -0
  368. package/dist/src/turnkey/createTurnkeyWallet.js.map +1 -0
  369. package/dist/src/turnkey/createWalletProvider.d.ts +8 -0
  370. package/dist/src/turnkey/createWalletProvider.js +286 -0
  371. package/dist/src/turnkey/createWalletProvider.js.map +1 -0
  372. package/dist/src/turnkey/index.d.ts +3 -0
  373. package/dist/src/turnkey/index.js +3 -0
  374. package/dist/src/turnkey/index.js.map +1 -0
  375. package/dist/src/turnkey/turnkeySessionMachine.d.ts +39 -0
  376. package/dist/src/turnkey/turnkeySessionMachine.js +77 -0
  377. package/dist/src/turnkey/turnkeySessionMachine.js.map +1 -0
  378. package/dist/src/turnkey/turnkeySessionStorage.d.ts +48 -0
  379. package/dist/src/turnkey/turnkeySessionStorage.js +183 -0
  380. package/dist/src/turnkey/turnkeySessionStorage.js.map +1 -0
  381. package/dist/src/turnkey/types.d.ts +61 -0
  382. package/dist/src/turnkey/types.js +12 -0
  383. package/dist/src/turnkey/types.js.map +1 -0
  384. package/dist/{types → src/types}/wallet.d.ts +39 -13
  385. package/dist/src/types/wallet.js.map +1 -0
  386. package/dist/src/utils/address.d.ts +130 -0
  387. package/dist/src/utils/address.js +274 -0
  388. package/dist/src/utils/address.js.map +1 -0
  389. package/dist/src/utils/chain.d.ts +89 -0
  390. package/dist/src/utils/chain.js +282 -0
  391. package/dist/src/utils/chain.js.map +1 -0
  392. package/dist/{utils → src/utils}/ed25519.d.ts +0 -2
  393. package/dist/{utils → src/utils}/ed25519.js +5 -20
  394. package/dist/src/utils/ed25519.js.map +1 -0
  395. package/dist/src/utils/errors.d.ts +68 -0
  396. package/dist/src/utils/errors.js +190 -0
  397. package/dist/src/utils/errors.js.map +1 -0
  398. package/dist/src/utils/events.d.ts +124 -0
  399. package/dist/src/utils/events.js +155 -0
  400. package/dist/src/utils/events.js.map +1 -0
  401. package/dist/src/utils/formatAmount.d.ts +4 -0
  402. package/dist/src/utils/formatAmount.js +9 -0
  403. package/dist/src/utils/formatAmount.js.map +1 -0
  404. package/dist/src/utils/logger.d.ts +45 -0
  405. package/dist/{utils → src/utils}/logger.js +68 -2
  406. package/dist/src/utils/logger.js.map +1 -0
  407. package/dist/src/utils/shortenString.d.ts +5 -0
  408. package/dist/src/utils/shortenString.js +16 -0
  409. package/dist/src/utils/shortenString.js.map +1 -0
  410. package/package.json +45 -29
  411. package/dist/animations/N1Loader.js.map +0 -1
  412. package/dist/animations/Processing.js.map +0 -1
  413. package/dist/components/LoadingFallback.js.map +0 -1
  414. package/dist/components/Logo.js.map +0 -1
  415. package/dist/components/N1ConnectButton.d.ts +0 -5
  416. package/dist/components/N1ConnectButton.js +0 -49
  417. package/dist/components/N1ConnectButton.js.map +0 -1
  418. package/dist/components/logos/ArbitrumLogo.js.map +0 -1
  419. package/dist/components/logos/BaseLogo.js +0 -6
  420. package/dist/components/logos/BaseLogo.js.map +0 -1
  421. package/dist/components/logos/BeraLogo.js.map +0 -1
  422. package/dist/components/logos/BitcoinLogo.js.map +0 -1
  423. package/dist/components/logos/EthereumLogo.js.map +0 -1
  424. package/dist/components/logos/HyperliquidLogo.js.map +0 -1
  425. package/dist/components/logos/OptimismLogo.js.map +0 -1
  426. package/dist/components/logos/SolanaLogo.js.map +0 -1
  427. package/dist/components/logos/ZeroOneLogo.js.map +0 -1
  428. package/dist/components/logos/index.js.map +0 -1
  429. package/dist/config/chains.d.ts +0 -0
  430. package/dist/config/chains.js +0 -2
  431. package/dist/config/chains.js.map +0 -1
  432. package/dist/config/solana.js.map +0 -1
  433. package/dist/config.d.ts +0 -2
  434. package/dist/config.js +0 -3
  435. package/dist/config.js.map +0 -1
  436. package/dist/context/n1-wallet-context.js.map +0 -1
  437. package/dist/errors/types.d.ts +0 -25
  438. package/dist/errors/types.js +0 -77
  439. package/dist/errors/types.js.map +0 -1
  440. package/dist/features/onboarding-flow/N1WalletModal.js.map +0 -1
  441. package/dist/features/onboarding-flow/OnboardingFlow.js.map +0 -1
  442. package/dist/features/onboarding-flow/components/ChainButton.js +0 -21
  443. package/dist/features/onboarding-flow/components/ChainButton.js.map +0 -1
  444. package/dist/features/onboarding-flow/components/Header.js +0 -45
  445. package/dist/features/onboarding-flow/components/Header.js.map +0 -1
  446. package/dist/features/onboarding-flow/components/ImageWithFallback.js +0 -63
  447. package/dist/features/onboarding-flow/components/ImageWithFallback.js.map +0 -1
  448. package/dist/features/onboarding-flow/components/TransactionTable.js.map +0 -1
  449. package/dist/features/onboarding-flow/components/WaitingMessage.js.map +0 -1
  450. package/dist/features/onboarding-flow/components/index.js.map +0 -1
  451. package/dist/features/onboarding-flow/index.js.map +0 -1
  452. package/dist/features/onboarding-flow/providers/DepositFlowProvider.js +0 -525
  453. package/dist/features/onboarding-flow/providers/DepositFlowProvider.js.map +0 -1
  454. package/dist/features/onboarding-flow/providers/OnboardingStateProvider.js +0 -185
  455. package/dist/features/onboarding-flow/providers/OnboardingStateProvider.js.map +0 -1
  456. package/dist/features/onboarding-flow/providers/StateProvider.js.map +0 -1
  457. package/dist/features/onboarding-flow/providers/WalletConnectionProvider.js +0 -394
  458. package/dist/features/onboarding-flow/providers/WalletConnectionProvider.js.map +0 -1
  459. package/dist/features/onboarding-flow/providers/debug.js.map +0 -1
  460. package/dist/features/onboarding-flow/providers/index.js.map +0 -1
  461. package/dist/features/onboarding-flow/providers/onboardingStateMachine.js.map +0 -1
  462. package/dist/features/onboarding-flow/screens/01-ConnectWalletScreen.d.ts +0 -1
  463. package/dist/features/onboarding-flow/screens/01-ConnectWalletScreen.js.map +0 -1
  464. package/dist/features/onboarding-flow/screens/02-ChainSelectionScreen.js.map +0 -1
  465. package/dist/features/onboarding-flow/screens/03-AmountInputScreen.d.ts +0 -6
  466. package/dist/features/onboarding-flow/screens/03-AmountInputScreen.js +0 -360
  467. package/dist/features/onboarding-flow/screens/03-AmountInputScreen.js.map +0 -1
  468. package/dist/features/onboarding-flow/screens/04-DepositProgressScreen.js +0 -31
  469. package/dist/features/onboarding-flow/screens/04-DepositProgressScreen.js.map +0 -1
  470. package/dist/features/onboarding-flow/screens/05-DepositSuccessScreen.d.ts +0 -1
  471. package/dist/features/onboarding-flow/screens/05-DepositSuccessScreen.js.map +0 -1
  472. package/dist/features/onboarding-flow/screens/06-AuthLoadingScreen.d.ts +0 -1
  473. package/dist/features/onboarding-flow/screens/06-AuthLoadingScreen.js.map +0 -1
  474. package/dist/features/onboarding-flow/screens/07-ErrorScreen.d.ts +0 -1
  475. package/dist/features/onboarding-flow/screens/07-ErrorScreen.js +0 -14
  476. package/dist/features/onboarding-flow/screens/07-ErrorScreen.js.map +0 -1
  477. package/dist/features/onboarding-flow/screens/index.d.ts +0 -7
  478. package/dist/features/onboarding-flow/screens/index.js +0 -8
  479. package/dist/features/onboarding-flow/screens/index.js.map +0 -1
  480. package/dist/features/onboarding-flow/types.js.map +0 -1
  481. package/dist/features/onboarding-flow/utils/depositStorage.d.ts +0 -4
  482. package/dist/features/onboarding-flow/utils/depositStorage.js +0 -48
  483. package/dist/features/onboarding-flow/utils/depositStorage.js.map +0 -1
  484. package/dist/features/onboarding-flow/utils/imageUtils.d.ts +0 -21
  485. package/dist/features/onboarding-flow/utils/imageUtils.js +0 -110
  486. package/dist/features/onboarding-flow/utils/imageUtils.js.map +0 -1
  487. package/dist/features/onboarding-flow/utils/nordUser.d.ts +0 -1
  488. package/dist/features/onboarding-flow/utils/nordUser.js.map +0 -1
  489. package/dist/features/onboarding-flow/utils/nordUtils.d.ts +0 -40
  490. package/dist/features/onboarding-flow/utils/nordUtils.js +0 -64
  491. package/dist/features/onboarding-flow/utils/nordUtils.js.map +0 -1
  492. package/dist/features/onboarding-flow/utils/session.d.ts +0 -17
  493. package/dist/features/onboarding-flow/utils/session.js +0 -69
  494. package/dist/features/onboarding-flow/utils/session.js.map +0 -1
  495. package/dist/features/onboarding-flow/utils/transaction.js +0 -8
  496. package/dist/features/onboarding-flow/utils/transaction.js.map +0 -1
  497. package/dist/features/onboarding-flow/utils/utils.js.map +0 -1
  498. package/dist/features/onboarding-flow/utils/withImageFallback.d.ts +0 -7
  499. package/dist/features/onboarding-flow/utils/withImageFallback.js.map +0 -1
  500. package/dist/hooks/index.js.map +0 -1
  501. package/dist/hooks/useN1Wallet.d.ts +0 -2
  502. package/dist/hooks/useN1Wallet.js.map +0 -1
  503. package/dist/hooks/useNordUserInitialization.d.ts +0 -1
  504. package/dist/hooks/useNordUserInitialization.js.map +0 -1
  505. package/dist/index.d.ts +0 -7
  506. package/dist/index.js +0 -8
  507. package/dist/index.js.map +0 -1
  508. package/dist/polyfills/windowEthereumGuard.d.ts +0 -6
  509. package/dist/polyfills/windowEthereumGuard.js +0 -28
  510. package/dist/polyfills/windowEthereumGuard.js.map +0 -1
  511. package/dist/providers/LazyWalletProvider.d.ts +0 -1
  512. package/dist/providers/LazyWalletProvider.js +0 -230
  513. package/dist/providers/LazyWalletProvider.js.map +0 -1
  514. package/dist/providers/N1WalletProvider.d.ts +0 -3
  515. package/dist/providers/N1WalletProvider.js +0 -271
  516. package/dist/providers/N1WalletProvider.js.map +0 -1
  517. package/dist/providers/ShadowRootWrapper.js.map +0 -1
  518. package/dist/providers/WalletErrorBoundary.js.map +0 -1
  519. package/dist/styles/cdn-fonts.d.ts +0 -1
  520. package/dist/styles/cdn-fonts.js.map +0 -1
  521. package/dist/styles/embedded-main-css.d.ts +0 -2
  522. package/dist/styles/embedded-main-css.js +0 -3
  523. package/dist/styles/embedded-main-css.js.map +0 -1
  524. package/dist/types/wallet.js.map +0 -1
  525. package/dist/utils/ed25519.js.map +0 -1
  526. package/dist/utils/getPseudoName.d.ts +0 -1
  527. package/dist/utils/getPseudoName.js +0 -5826
  528. package/dist/utils/getPseudoName.js.map +0 -1
  529. package/dist/utils/logger.d.ts +0 -21
  530. package/dist/utils/logger.js.map +0 -1
  531. package/dist/utils/shortenString.d.ts +0 -2
  532. package/dist/utils/shortenString.js +0 -9
  533. package/dist/utils/shortenString.js.map +0 -1
  534. package/dist/utils/words.d.ts +0 -9
  535. package/dist/utils/words.js +0 -93572
  536. package/dist/utils/words.js.map +0 -1
  537. /package/dist/{animations → src/animations}/N1Loader.d.ts +0 -0
  538. /package/dist/{animations → src/animations}/N1Loader.js +0 -0
  539. /package/dist/{animations → src/animations}/Processing.d.ts +0 -0
  540. /package/dist/{animations → src/animations}/Processing.js +0 -0
  541. /package/dist/{components → src/components}/logos/ArbitrumLogo.d.ts +0 -0
  542. /package/dist/{components → src/components}/logos/ArbitrumLogo.js +0 -0
  543. /package/dist/{components → src/components}/logos/BaseLogo.d.ts +0 -0
  544. /package/dist/{components → src/components}/logos/BeraLogo.d.ts +0 -0
  545. /package/dist/{components → src/components}/logos/BeraLogo.js +0 -0
  546. /package/dist/{components → src/components}/logos/BitcoinLogo.d.ts +0 -0
  547. /package/dist/{components → src/components}/logos/BitcoinLogo.js +0 -0
  548. /package/dist/{components → src/components}/logos/EthereumLogo.d.ts +0 -0
  549. /package/dist/{components → src/components}/logos/EthereumLogo.js +0 -0
  550. /package/dist/{components → src/components}/logos/HyperliquidLogo.d.ts +0 -0
  551. /package/dist/{components → src/components}/logos/OptimismLogo.d.ts +0 -0
  552. /package/dist/{components → src/components}/logos/OptimismLogo.js +0 -0
  553. /package/dist/{components → src/components}/logos/SolanaLogo.d.ts +0 -0
  554. /package/dist/{components → src/components}/logos/SolanaLogo.js +0 -0
  555. /package/dist/{components → src/components}/logos/ZeroOneLogo.d.ts +0 -0
  556. /package/dist/{components → src/components}/logos/ZeroOneLogo.js +0 -0
  557. /package/dist/{components → src/components}/logos/index.d.ts +0 -0
  558. /package/dist/{components → src/components}/logos/index.js +0 -0
  559. /package/dist/{config → src/config}/solana.d.ts +0 -0
  560. /package/dist/{config → src/config}/solana.js +0 -0
  561. /package/dist/{context → src/context}/n1-wallet-context.d.ts +0 -0
  562. /package/dist/{context → src/context}/n1-wallet-context.js +0 -0
  563. /package/dist/{features → src/features}/onboarding-flow/N1WalletModal.d.ts +0 -0
  564. /package/dist/{features → src/features}/onboarding-flow/components/WaitingMessage.js +0 -0
  565. /package/dist/{features → src/features}/onboarding-flow/components/index.d.ts +0 -0
  566. /package/dist/{features → src/features}/onboarding-flow/components/index.js +0 -0
  567. /package/dist/{features → src/features}/onboarding-flow/index.d.ts +0 -0
  568. /package/dist/{features → src/features}/onboarding-flow/index.js +0 -0
  569. /package/dist/{features → src/features}/onboarding-flow/providers/debug.d.ts +0 -0
  570. /package/dist/{features → src/features}/onboarding-flow/providers/index.d.ts +0 -0
  571. /package/dist/{features → src/features}/onboarding-flow/providers/index.js +0 -0
  572. /package/dist/{hooks → src/hooks}/index.d.ts +0 -0
  573. /package/dist/{hooks → src/hooks}/index.js +0 -0
  574. /package/dist/{types → src/types}/wallet.js +0 -0
@@ -0,0 +1,243 @@
1
+ var __assign = (this && this.__assign) || function () {
2
+ __assign = Object.assign || function(t) {
3
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
4
+ s = arguments[i];
5
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
6
+ t[p] = s[p];
7
+ }
8
+ return t;
9
+ };
10
+ return __assign.apply(this, arguments);
11
+ };
12
+ // --- Constants ---
13
+ var LAST_DEPOSIT_KEY_PREFIX = 'n1_last_deposit_';
14
+ var PENDING_DEPOSIT_KEY_PREFIX = 'n1_pending_deposit_';
15
+ var COOKIE_NAME = 'n1_pending_deposit'; // Legacy cookie name for backward compatibility if needed, but we are moving to localStorage primarily or standardizing.
16
+ // Wait, the prompt says "standardize storage to use localStorage".
17
+ // `pendingDepositCookie.ts` uses document.cookie.
18
+ // `pendingDepositStorage.ts` uses localStorage for "meta" (whatever that is).
19
+ // `depositStorage.ts` uses localStorage for "last completed deposit".
20
+ // Let's unify everything into localStorage for simplicity as requested.
21
+ // We will use a single file for all deposit-related storage.
22
+ var MAX_TTL_MS = 48 * 60 * 60 * 1000;
23
+ var FAILED_TTL_MS = 30 * 60 * 1000;
24
+ var STAGE_ORDER = [
25
+ 'initiated',
26
+ 'bridge_submitted',
27
+ 'bridge_confirmed',
28
+ 'solana_submitted',
29
+ 'solana_confirmed',
30
+ 'failed',
31
+ ];
32
+ // Helper function to get the rank/order of a stage
33
+ var stageRank = function (stage) {
34
+ var index = STAGE_ORDER.indexOf(stage);
35
+ return index === -1 ? 0 : index;
36
+ };
37
+ // In Node/test environments there is no `window.localStorage`. Provide a small in-memory fallback
38
+ // so storage-based utilities remain testable.
39
+ var memoryStorage = (function () {
40
+ var map = new Map();
41
+ return {
42
+ getItem: function (k) { return (map.has(k) ? map.get(k) : null); },
43
+ setItem: function (k, v) {
44
+ map.set(k, v);
45
+ },
46
+ removeItem: function (k) {
47
+ map.delete(k);
48
+ },
49
+ };
50
+ })();
51
+ var getStorage = function () {
52
+ // Prefer browser storage if available.
53
+ var ls = globalThis === null || globalThis === void 0 ? void 0 : globalThis.localStorage;
54
+ if (ls && typeof ls.getItem === 'function') {
55
+ return ls;
56
+ }
57
+ // Node/test fallback.
58
+ return memoryStorage;
59
+ };
60
+ var getLastDepositKey = function (address) {
61
+ return "".concat(LAST_DEPOSIT_KEY_PREFIX).concat(address.toLowerCase());
62
+ };
63
+ var getPendingDepositKey = function (wallet) {
64
+ return "".concat(PENDING_DEPOSIT_KEY_PREFIX).concat(wallet.toLowerCase());
65
+ };
66
+ // --- Completed Deposit Storage ---
67
+ /**
68
+ * Saves the last completed deposit record for a wallet address.
69
+ */
70
+ export function saveLastDepositRecord(address, record) {
71
+ if (!address || !record || !record.transactionId)
72
+ return;
73
+ var storage = getStorage();
74
+ if (!storage)
75
+ return;
76
+ storage.setItem(getLastDepositKey(address), JSON.stringify(record));
77
+ }
78
+ /**
79
+ * Reads the last completed deposit record for a wallet address.
80
+ */
81
+ export function readLastDepositRecord(address) {
82
+ if (!address)
83
+ return null;
84
+ var storage = getStorage();
85
+ if (!storage)
86
+ return null;
87
+ try {
88
+ var raw = storage.getItem(getLastDepositKey(address));
89
+ if (!raw)
90
+ return null;
91
+ return JSON.parse(raw);
92
+ }
93
+ catch (_a) {
94
+ storage.removeItem(getLastDepositKey(address));
95
+ return null;
96
+ }
97
+ }
98
+ export function clearLastDepositRecord(address) {
99
+ if (!address)
100
+ return;
101
+ var storage = getStorage();
102
+ if (!storage)
103
+ return;
104
+ storage.removeItem(getLastDepositKey(address));
105
+ }
106
+ var GLOBAL_PENDING_KEY = 'n1_active_pending_deposit';
107
+ /**
108
+ * Reads pending deposit from localStorage - includes chain
109
+ */
110
+ export function readPendingDeposit(now) {
111
+ var _a, _b, _c, _d, _e, _f, _g;
112
+ if (now === void 0) { now = Date.now(); }
113
+ var storage = getStorage();
114
+ if (!storage)
115
+ return null;
116
+ var raw = storage.getItem(GLOBAL_PENDING_KEY);
117
+ if (!raw)
118
+ return null;
119
+ try {
120
+ var parsed = JSON.parse(raw);
121
+ if (!parsed || typeof parsed !== 'object')
122
+ return null;
123
+ if (!parsed.depositId || !parsed.wallet)
124
+ return null;
125
+ var stage = parsed.stage && STAGE_ORDER.includes(parsed.stage) ? parsed.stage : 'initiated';
126
+ var updatedAt = (_a = parsed.updatedAt) !== null && _a !== void 0 ? _a : now;
127
+ var ttl = stage === 'failed' ? FAILED_TTL_MS : MAX_TTL_MS;
128
+ if (now - updatedAt > ttl) {
129
+ clearPendingDeposit();
130
+ return null;
131
+ }
132
+ // Return state with persisted values (fallbacks for legacy records)
133
+ return {
134
+ depositId: parsed.depositId,
135
+ wallet: parsed.wallet,
136
+ chain: parsed.chain || '',
137
+ amount: (_b = parsed.amount) !== null && _b !== void 0 ? _b : '',
138
+ stage: stage,
139
+ tx: (_c = parsed.tx) !== null && _c !== void 0 ? _c : null,
140
+ mintTx: (_d = parsed.mintTx) !== null && _d !== void 0 ? _d : null,
141
+ attestationId: (_e = parsed.attestationId) !== null && _e !== void 0 ? _e : null,
142
+ explorerUrl: (_f = parsed.explorerUrl) !== null && _f !== void 0 ? _f : null,
143
+ reason: (_g = parsed.reason) !== null && _g !== void 0 ? _g : null,
144
+ updatedAt: updatedAt,
145
+ };
146
+ }
147
+ catch (_h) {
148
+ clearPendingDeposit();
149
+ return null;
150
+ }
151
+ }
152
+ /**
153
+ * Writes pending deposit to localStorage - includes chain
154
+ */
155
+ export function writePendingDeposit(state, now) {
156
+ var _a, _b, _c, _d, _e;
157
+ if (now === void 0) { now = Date.now(); }
158
+ var storage = getStorage();
159
+ if (!storage)
160
+ return state;
161
+ // Persist enough to resume across refresh.
162
+ var stored = {
163
+ depositId: state.depositId,
164
+ wallet: state.wallet,
165
+ chain: state.chain,
166
+ amount: state.amount,
167
+ stage: state.stage,
168
+ tx: (_a = state.tx) !== null && _a !== void 0 ? _a : null,
169
+ mintTx: (_b = state.mintTx) !== null && _b !== void 0 ? _b : null,
170
+ attestationId: (_c = state.attestationId) !== null && _c !== void 0 ? _c : null,
171
+ explorerUrl: (_d = state.explorerUrl) !== null && _d !== void 0 ? _d : null,
172
+ reason: (_e = state.reason) !== null && _e !== void 0 ? _e : null,
173
+ updatedAt: now,
174
+ };
175
+ storage.setItem(GLOBAL_PENDING_KEY, JSON.stringify(stored));
176
+ // Return the original state (with all fields) for code compatibility
177
+ return __assign(__assign({}, state), { updatedAt: now });
178
+ }
179
+ export function clearPendingDeposit() {
180
+ var storage = getStorage();
181
+ if (!storage)
182
+ return;
183
+ storage.removeItem(GLOBAL_PENDING_KEY);
184
+ }
185
+ /**
186
+ * Advances the state of a pending deposit.
187
+ * Note: Only wallet and depositId are persisted, other fields are ignored.
188
+ */
189
+ export function advancePendingDeposit(previous, updates, now) {
190
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;
191
+ if (now === void 0) { now = Date.now(); }
192
+ // Prevent stage regression (except moving to failed).
193
+ var prevRank = stageRank(previous.stage);
194
+ var nextRank = stageRank(updates.stage);
195
+ if (updates.stage !== 'failed' && nextRank < prevRank) {
196
+ throw new Error("Cannot regress pending deposit stage from ".concat(previous.stage, " to ").concat(updates.stage));
197
+ }
198
+ // Merge updates (for code compatibility)
199
+ var merged = __assign(__assign(__assign({}, previous), updates), { tx: (_b = (_a = updates.tx) !== null && _a !== void 0 ? _a : previous.tx) !== null && _b !== void 0 ? _b : null, mintTx: (_d = (_c = updates.mintTx) !== null && _c !== void 0 ? _c : previous.mintTx) !== null && _d !== void 0 ? _d : null, attestationId: (_f = (_e = updates.attestationId) !== null && _e !== void 0 ? _e : previous.attestationId) !== null && _f !== void 0 ? _f : null, explorerUrl: (_h = (_g = updates.explorerUrl) !== null && _g !== void 0 ? _g : previous.explorerUrl) !== null && _h !== void 0 ? _h : null, reason: (_k = (_j = updates.reason) !== null && _j !== void 0 ? _j : previous.reason) !== null && _k !== void 0 ? _k : null, stage: updates.stage, updatedAt: now });
200
+ // Only wallet and depositId are persisted
201
+ return writePendingDeposit(merged, now);
202
+ }
203
+ /**
204
+ * Creates a new pending deposit draft.
205
+ * Only wallet and depositId are persisted to localStorage.
206
+ */
207
+ export function createPendingDepositDraft(params) {
208
+ var _a;
209
+ var now = (_a = params.now) !== null && _a !== void 0 ? _a : Date.now();
210
+ // Only wallet and depositId are persisted, other fields are for code compatibility
211
+ return writePendingDeposit({
212
+ depositId: params.depositId,
213
+ wallet: params.wallet,
214
+ chain: params.chain,
215
+ amount: params.amount,
216
+ stage: 'initiated',
217
+ tx: null,
218
+ mintTx: null,
219
+ attestationId: null,
220
+ explorerUrl: null,
221
+ reason: null,
222
+ updatedAt: now,
223
+ }, now);
224
+ }
225
+ export function reconcileStages(localStage, remoteStage) {
226
+ if (!remoteStage)
227
+ return localStage;
228
+ if (remoteStage === 'failed')
229
+ return 'failed';
230
+ var localRank = stageRank(localStage);
231
+ var remoteRank = stageRank(remoteStage);
232
+ return remoteRank > localRank ? remoteStage : localStage;
233
+ }
234
+ // --- Legacy/Meta Compatibility (Optional but kept for migration if needed) ---
235
+ // The prompt asks to standardize, so we will likely replace usages of "readLastPendingMeta"
236
+ // with just "readPendingDeposit". If we need to recover from the old "meta" storage
237
+ // to the new single key, we could add a migration helper, but for now we'll assume clean slate
238
+ // or just sticking to the new GLOBAL_PENDING_KEY.
239
+ // To be safe and support the logic where we look for "last pending deposit for this specific wallet",
240
+ // we might want to verify if the global pending deposit matches the current wallet.
241
+ // But the previous `readLastPendingMeta` iterated through candidate wallets.
242
+ // The new system is simpler: there is one active deposit flow in the browser.
243
+ //# sourceMappingURL=storage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"storage.js","sourceRoot":"","sources":["../../../../../../src/features/onboarding-flow/utils/deposit/storage.ts"],"names":[],"mappings":"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","sourcesContent":["import { StoredDepositRecord } from '../../types';\nimport { logger } from '../../../../utils/logger';\n\n// --- Types ---\n\nexport type PendingDepositStage =\n | 'initiated'\n | 'bridge_submitted'\n | 'bridge_confirmed'\n | 'solana_submitted'\n | 'solana_confirmed'\n | 'failed';\n\nexport interface PendingDepositState {\n depositId: string;\n wallet: string;\n chain: string;\n amount: string;\n stage: PendingDepositStage;\n tx?: string | null;\n mintTx?: string | null;\n attestationId?: string | null;\n explorerUrl?: string | null;\n reason?: string | null;\n updatedAt: number;\n}\n\n// --- Constants ---\n\nconst LAST_DEPOSIT_KEY_PREFIX = 'n1_last_deposit_';\nconst PENDING_DEPOSIT_KEY_PREFIX = 'n1_pending_deposit_';\nconst COOKIE_NAME = 'n1_pending_deposit'; // Legacy cookie name for backward compatibility if needed, but we are moving to localStorage primarily or standardizing.\n// Wait, the prompt says \"standardize storage to use localStorage\". \n// `pendingDepositCookie.ts` uses document.cookie. \n// `pendingDepositStorage.ts` uses localStorage for \"meta\" (whatever that is).\n// `depositStorage.ts` uses localStorage for \"last completed deposit\".\n\n// Let's unify everything into localStorage for simplicity as requested.\n// We will use a single file for all deposit-related storage.\n\nconst MAX_TTL_MS = 48 * 60 * 60 * 1_000;\nconst FAILED_TTL_MS = 30 * 60 * 1_000;\n\nconst STAGE_ORDER: PendingDepositStage[] = [\n 'initiated',\n 'bridge_submitted',\n 'bridge_confirmed',\n 'solana_submitted',\n 'solana_confirmed',\n 'failed',\n];\n\n// Helper function to get the rank/order of a stage\nconst stageRank = (stage: PendingDepositStage): number => {\n const index = STAGE_ORDER.indexOf(stage);\n return index === -1 ? 0 : index;\n};\n\n// --- Helpers ---\n\ntype StorageLike = Pick<Storage, 'getItem' | 'setItem' | 'removeItem'>;\n\n// In Node/test environments there is no `window.localStorage`. Provide a small in-memory fallback\n// so storage-based utilities remain testable.\nconst memoryStorage: StorageLike = (() => {\n const map = new Map<string, string>();\n return {\n getItem: (k: string) => (map.has(k) ? (map.get(k) as string) : null),\n setItem: (k: string, v: string) => {\n map.set(k, v);\n },\n removeItem: (k: string) => {\n map.delete(k);\n },\n };\n})();\n\nconst getStorage = (): StorageLike | null => {\n // Prefer browser storage if available.\n const ls = (globalThis as any)?.localStorage as Storage | undefined;\n if (ls && typeof ls.getItem === 'function') {\n return ls;\n }\n // Node/test fallback.\n return memoryStorage;\n};\n\nconst getLastDepositKey = (address: string) =>\n `${LAST_DEPOSIT_KEY_PREFIX}${address.toLowerCase()}`;\n\nconst getPendingDepositKey = (wallet: string) =>\n `${PENDING_DEPOSIT_KEY_PREFIX}${wallet.toLowerCase()}`;\n\n// --- Completed Deposit Storage ---\n\n/**\n * Saves the last completed deposit record for a wallet address.\n */\nexport function saveLastDepositRecord(\n address: string | null | undefined,\n record: StoredDepositRecord\n) {\n if (!address || !record || !record.transactionId) return;\n const storage = getStorage();\n if (!storage) return;\n storage.setItem(getLastDepositKey(address), JSON.stringify(record));\n}\n\n/**\n * Reads the last completed deposit record for a wallet address.\n */\nexport function readLastDepositRecord(\n address: string | null | undefined\n): StoredDepositRecord | null {\n if (!address) return null;\n const storage = getStorage();\n if (!storage) return null;\n\n try {\n const raw = storage.getItem(getLastDepositKey(address));\n if (!raw) return null;\n return JSON.parse(raw) as StoredDepositRecord;\n } catch {\n storage.removeItem(getLastDepositKey(address));\n return null;\n }\n}\n\nexport function clearLastDepositRecord(address: string | null | undefined) {\n if (!address) return;\n const storage = getStorage();\n if (!storage) return;\n storage.removeItem(getLastDepositKey(address));\n}\n\n// --- Pending Deposit Storage ---\n\n/**\n * Persisted pending deposit shape.\n * We persist enough to safely resume after refresh (especially `tx` for CCTP attestation lookup).\n *\n * Backward compatible with older, minimal records that only stored:\n * `{ depositId, wallet, chain, amount }`.\n */\ninterface StoredPendingDeposit {\n depositId: string;\n wallet: string;\n chain?: string;\n amount?: string;\n stage?: PendingDepositStage;\n tx?: string | null;\n mintTx?: string | null;\n attestationId?: string | null;\n explorerUrl?: string | null;\n reason?: string | null;\n updatedAt?: number;\n}\n\nconst GLOBAL_PENDING_KEY = 'n1_active_pending_deposit';\n\n/**\n * Reads pending deposit from localStorage - includes chain\n */\nexport function readPendingDeposit(now: number = Date.now()): PendingDepositState | null {\n const storage = getStorage();\n if (!storage) return null;\n\n const raw = storage.getItem(GLOBAL_PENDING_KEY);\n if (!raw) return null;\n\n try {\n const parsed = JSON.parse(raw) as StoredPendingDeposit;\n if (!parsed || typeof parsed !== 'object') return null;\n if (!parsed.depositId || !parsed.wallet) return null;\n\n const stage: PendingDepositStage =\n parsed.stage && STAGE_ORDER.includes(parsed.stage) ? parsed.stage : 'initiated';\n\n const updatedAt = parsed.updatedAt ?? now;\n const ttl = stage === 'failed' ? FAILED_TTL_MS : MAX_TTL_MS;\n if (now - updatedAt > ttl) {\n clearPendingDeposit();\n return null;\n }\n\n // Return state with persisted values (fallbacks for legacy records)\n return {\n depositId: parsed.depositId,\n wallet: parsed.wallet,\n chain: parsed.chain || '',\n amount: parsed.amount ?? '',\n stage,\n tx: parsed.tx ?? null,\n mintTx: parsed.mintTx ?? null,\n attestationId: parsed.attestationId ?? null,\n explorerUrl: parsed.explorerUrl ?? null,\n reason: parsed.reason ?? null,\n updatedAt,\n };\n } catch {\n clearPendingDeposit();\n return null;\n }\n}\n\n/**\n * Writes pending deposit to localStorage - includes chain\n */\nexport function writePendingDeposit(\n state: PendingDepositState,\n now: number = Date.now()\n): PendingDepositState {\n const storage = getStorage();\n if (!storage) return state;\n\n // Persist enough to resume across refresh.\n const stored: StoredPendingDeposit = {\n depositId: state.depositId,\n wallet: state.wallet,\n chain: state.chain,\n amount: state.amount,\n stage: state.stage,\n tx: state.tx ?? null,\n mintTx: state.mintTx ?? null,\n attestationId: state.attestationId ?? null,\n explorerUrl: state.explorerUrl ?? null,\n reason: state.reason ?? null,\n updatedAt: now,\n };\n\n storage.setItem(GLOBAL_PENDING_KEY, JSON.stringify(stored));\n\n // Return the original state (with all fields) for code compatibility\n return {\n ...state,\n updatedAt: now,\n };\n}\n\nexport function clearPendingDeposit() {\n const storage = getStorage();\n if (!storage) return;\n storage.removeItem(GLOBAL_PENDING_KEY);\n}\n\n/**\n * Advances the state of a pending deposit.\n * Note: Only wallet and depositId are persisted, other fields are ignored.\n */\nexport function advancePendingDeposit(\n previous: PendingDepositState,\n updates: Partial<Omit<PendingDepositState, 'depositId' | 'wallet' | 'chain'>> & {\n stage: PendingDepositStage;\n },\n now: number = Date.now()\n): PendingDepositState {\n // Prevent stage regression (except moving to failed).\n const prevRank = stageRank(previous.stage);\n const nextRank = stageRank(updates.stage);\n if (updates.stage !== 'failed' && nextRank < prevRank) {\n throw new Error(`Cannot regress pending deposit stage from ${previous.stage} to ${updates.stage}`);\n }\n\n // Merge updates (for code compatibility)\n const merged: PendingDepositState = {\n ...previous,\n ...updates,\n tx: updates.tx ?? previous.tx ?? null,\n mintTx: updates.mintTx ?? previous.mintTx ?? null,\n attestationId: updates.attestationId ?? previous.attestationId ?? null,\n explorerUrl: updates.explorerUrl ?? previous.explorerUrl ?? null,\n reason: updates.reason ?? previous.reason ?? null,\n stage: updates.stage,\n updatedAt: now,\n };\n\n // Only wallet and depositId are persisted\n return writePendingDeposit(merged, now);\n}\n\n/**\n * Creates a new pending deposit draft.\n * Only wallet and depositId are persisted to localStorage.\n */\nexport function createPendingDepositDraft(params: {\n depositId: string;\n wallet: string;\n chain: string;\n amount: string;\n now?: number;\n}): PendingDepositState {\n const now = params.now ?? Date.now();\n // Only wallet and depositId are persisted, other fields are for code compatibility\n return writePendingDeposit(\n {\n depositId: params.depositId,\n wallet: params.wallet,\n chain: params.chain,\n amount: params.amount,\n stage: 'initiated',\n tx: null,\n mintTx: null,\n attestationId: null,\n explorerUrl: null,\n reason: null,\n updatedAt: now,\n },\n now\n );\n}\n\nexport function reconcileStages(\n localStage: PendingDepositStage,\n remoteStage: PendingDepositStage | null | undefined\n): PendingDepositStage {\n if (!remoteStage) return localStage;\n if (remoteStage === 'failed') return 'failed';\n const localRank = stageRank(localStage);\n const remoteRank = stageRank(remoteStage);\n return remoteRank > localRank ? remoteStage : localStage;\n}\n\n// --- Legacy/Meta Compatibility (Optional but kept for migration if needed) ---\n// The prompt asks to standardize, so we will likely replace usages of \"readLastPendingMeta\"\n// with just \"readPendingDeposit\". If we need to recover from the old \"meta\" storage\n// to the new single key, we could add a migration helper, but for now we'll assume clean slate\n// or just sticking to the new GLOBAL_PENDING_KEY.\n\n// To be safe and support the logic where we look for \"last pending deposit for this specific wallet\",\n// we might want to verify if the global pending deposit matches the current wallet.\n// But the previous `readLastPendingMeta` iterated through candidate wallets.\n// The new system is simpler: there is one active deposit flow in the browser.\n"]}
@@ -0,0 +1,36 @@
1
+ import type { EVMWalletAdapter, SolanaWalletAdapter } from '../../../../adapters';
2
+ type AnyEvmWallet = any;
3
+ type AnySolanaWallet = any;
4
+ export interface WalletProviderResult {
5
+ provider: unknown | null;
6
+ walletClient: unknown | null;
7
+ }
8
+ /**
9
+ * Best-effort network switch using EVMWalletAdapter (preferred) or Dynamic wallet (fallback).
10
+ * We intentionally do not throw on switch failures; the bridge submission will fail if network is wrong.
11
+ */
12
+ export declare const ensureCorrectNetwork: ({ evmWallet, evmAdapter, targetChain, }: {
13
+ evmWallet?: AnyEvmWallet;
14
+ evmAdapter?: EVMWalletAdapter | null;
15
+ targetChain: string;
16
+ }) => Promise<void>;
17
+ /**
18
+ * Get wallet provider using EVMWalletAdapter (preferred) or Direct wallet access (fallback).
19
+ */
20
+ export declare const getWalletProvider: (evmWallet?: AnyEvmWallet, evmAdapter?: EVMWalletAdapter | null) => Promise<WalletProviderResult>;
21
+ export declare const validateBridgeConfig: (cctpConfig: {
22
+ allowedFromChains?: string[];
23
+ allowedToChains?: string[];
24
+ minAmount?: number;
25
+ maxAmount?: number;
26
+ }, fromChain: string, amount: string) => void;
27
+ /**
28
+ * Best-effort detection for Ledger-backed Solana accounts when connected through other wallets (e.g. Phantom).
29
+ * Uses SolanaWalletAdapter (preferred) or direct wallet access (fallback).
30
+ * We probe signMessage once:
31
+ * - If signing succeeds => treat as non-Ledger (for testing).
32
+ * - If signing fails with non-rejection error => treat as Ledger-like and block.
33
+ * - If user rejects => propagate N1_SIGNATURE_CANCELLED so deposit flow returns to amount input.
34
+ */
35
+ export declare const isLikelyLedgerSolanaWallet: (wallet?: AnySolanaWallet, solanaAdapter?: SolanaWalletAdapter | null) => Promise<boolean>;
36
+ export {};
@@ -0,0 +1,304 @@
1
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
+ return new (P || (P = Promise))(function (resolve, reject) {
4
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
8
+ });
9
+ };
10
+ var __generator = (this && this.__generator) || function (thisArg, body) {
11
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype);
12
+ return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
13
+ function verb(n) { return function (v) { return step([n, v]); }; }
14
+ function step(op) {
15
+ if (f) throw new TypeError("Generator is already executing.");
16
+ while (g && (g = 0, op[0] && (_ = 0)), _) try {
17
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
18
+ if (y = 0, t) op = [op[0] & 2, t.value];
19
+ switch (op[0]) {
20
+ case 0: case 1: t = op; break;
21
+ case 4: _.label++; return { value: op[1], done: false };
22
+ case 5: _.label++; y = op[1]; op = [0]; continue;
23
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
24
+ default:
25
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
26
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
27
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
28
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
29
+ if (t[2]) _.ops.pop();
30
+ _.trys.pop(); continue;
31
+ }
32
+ op = body.call(thisArg, _);
33
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
34
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
35
+ }
36
+ };
37
+ import { logger } from '../../../../utils/logger';
38
+ import { mapChainToBridgeKit } from '../../cctp/bridgeKitClient';
39
+ /**
40
+ * Best-effort network switch using EVMWalletAdapter (preferred) or Dynamic wallet (fallback).
41
+ * We intentionally do not throw on switch failures; the bridge submission will fail if network is wrong.
42
+ */
43
+ export var ensureCorrectNetwork = function (_a) { return __awaiter(void 0, [_a], void 0, function (_b) {
44
+ var targetChainDef, targetChainId, currentChainId_1, currentChainId, _c, error_1;
45
+ var _d;
46
+ var evmWallet = _b.evmWallet, evmAdapter = _b.evmAdapter, targetChain = _b.targetChain;
47
+ return __generator(this, function (_e) {
48
+ switch (_e.label) {
49
+ case 0:
50
+ _e.trys.push([0, 10, , 11]);
51
+ targetChainDef = mapChainToBridgeKit(targetChain);
52
+ targetChainId = typeof targetChainDef === 'object' && (targetChainDef === null || targetChainDef === void 0 ? void 0 : targetChainDef.chainId)
53
+ ? Number(targetChainDef.chainId)
54
+ : typeof targetChainDef === 'number'
55
+ ? targetChainDef
56
+ : undefined;
57
+ if (!targetChainId)
58
+ return [2 /*return*/];
59
+ if (!evmAdapter) return [3 /*break*/, 4];
60
+ return [4 /*yield*/, evmAdapter.getCurrentChainId()];
61
+ case 1:
62
+ currentChainId_1 = _e.sent();
63
+ if (currentChainId_1 && currentChainId_1 === targetChainId)
64
+ return [2 /*return*/];
65
+ logger.info('[CCTP] Switching EVM network via adapter', {
66
+ currentChainId: currentChainId_1,
67
+ targetChainId: targetChainId,
68
+ targetChain: targetChain,
69
+ });
70
+ return [4 /*yield*/, evmAdapter.switchChain(targetChainId)];
71
+ case 2:
72
+ _e.sent();
73
+ // Small delay to allow provider state propagation
74
+ return [4 /*yield*/, new Promise(function (resolve) { return setTimeout(resolve, 1500); })];
75
+ case 3:
76
+ // Small delay to allow provider state propagation
77
+ _e.sent();
78
+ return [2 /*return*/];
79
+ case 4:
80
+ // Fallback to direct wallet access
81
+ if (!evmWallet || typeof evmWallet.switchNetwork !== 'function')
82
+ return [2 /*return*/];
83
+ if (!(typeof ((_d = evmWallet === null || evmWallet === void 0 ? void 0 : evmWallet.connector) === null || _d === void 0 ? void 0 : _d.getNetwork) === 'function')) return [3 /*break*/, 6];
84
+ return [4 /*yield*/, evmWallet.connector.getNetwork()];
85
+ case 5:
86
+ _c = _e.sent();
87
+ return [3 /*break*/, 7];
88
+ case 6:
89
+ _c = undefined;
90
+ _e.label = 7;
91
+ case 7:
92
+ currentChainId = _c;
93
+ if (currentChainId && currentChainId === targetChainId)
94
+ return [2 /*return*/];
95
+ logger.info('[CCTP] Switching EVM network via wallet', {
96
+ currentChainId: currentChainId,
97
+ targetChainId: targetChainId,
98
+ targetChain: targetChain,
99
+ });
100
+ return [4 /*yield*/, evmWallet.switchNetwork(targetChainId)];
101
+ case 8:
102
+ _e.sent();
103
+ // Small delay to allow provider state propagation
104
+ return [4 /*yield*/, new Promise(function (resolve) { return setTimeout(resolve, 1500); })];
105
+ case 9:
106
+ // Small delay to allow provider state propagation
107
+ _e.sent();
108
+ return [3 /*break*/, 11];
109
+ case 10:
110
+ error_1 = _e.sent();
111
+ logger.warn('[CCTP] EVM network switch failed', {
112
+ error: error_1,
113
+ errorMessage: error_1 instanceof Error ? error_1.message : String(error_1),
114
+ });
115
+ return [3 /*break*/, 11];
116
+ case 11: return [2 /*return*/];
117
+ }
118
+ });
119
+ }); };
120
+ /**
121
+ * Get wallet provider using EVMWalletAdapter (preferred) or Direct wallet access (fallback).
122
+ */
123
+ export var getWalletProvider = function (evmWallet, evmAdapter) { return __awaiter(void 0, void 0, void 0, function () {
124
+ var provider, walletClient, error_2;
125
+ var _a, _b;
126
+ return __generator(this, function (_c) {
127
+ switch (_c.label) {
128
+ case 0:
129
+ provider = null;
130
+ walletClient = null;
131
+ if (!evmAdapter) return [3 /*break*/, 4];
132
+ _c.label = 1;
133
+ case 1:
134
+ _c.trys.push([1, 3, , 4]);
135
+ return [4 /*yield*/, evmAdapter.getProvider()];
136
+ case 2:
137
+ provider = _c.sent();
138
+ return [2 /*return*/, { provider: provider, walletClient: null }];
139
+ case 3:
140
+ error_2 = _c.sent();
141
+ logger.warn('[WalletUtils] Failed to get provider via adapter, falling back', {
142
+ error: error_2 instanceof Error ? error_2.message : String(error_2),
143
+ });
144
+ return [3 /*break*/, 4];
145
+ case 4:
146
+ if (!((_a = evmWallet === null || evmWallet === void 0 ? void 0 : evmWallet.connector) === null || _a === void 0 ? void 0 : _a.getProvider)) return [3 /*break*/, 6];
147
+ return [4 /*yield*/, evmWallet.connector.getProvider()];
148
+ case 5:
149
+ provider = _c.sent();
150
+ return [3 /*break*/, 8];
151
+ case 6:
152
+ if (!((_b = evmWallet === null || evmWallet === void 0 ? void 0 : evmWallet.connector) === null || _b === void 0 ? void 0 : _b.getWalletClient)) return [3 /*break*/, 8];
153
+ return [4 /*yield*/, evmWallet.connector.getWalletClient()];
154
+ case 7:
155
+ walletClient = _c.sent();
156
+ _c.label = 8;
157
+ case 8: return [2 /*return*/, { provider: provider, walletClient: walletClient }];
158
+ }
159
+ });
160
+ }); };
161
+ export var validateBridgeConfig = function (cctpConfig, fromChain, amount) {
162
+ var _a, _b;
163
+ if (((_a = cctpConfig.allowedFromChains) === null || _a === void 0 ? void 0 : _a.length) && !cctpConfig.allowedFromChains.includes(fromChain)) {
164
+ throw new Error('This EVM chain is not supported for bridging.');
165
+ }
166
+ if (((_b = cctpConfig.allowedToChains) === null || _b === void 0 ? void 0 : _b.length) && !cctpConfig.allowedToChains.includes('solana')) {
167
+ throw new Error('Target chain is not supported for bridging.');
168
+ }
169
+ var amountNum = parseFloat(amount);
170
+ if (!Number.isFinite(amountNum) || amountNum <= 0) {
171
+ throw new Error('Invalid amount.');
172
+ }
173
+ if (cctpConfig.minAmount && amountNum < cctpConfig.minAmount) {
174
+ throw new Error("Amount must be at least ".concat(cctpConfig.minAmount, "."));
175
+ }
176
+ if (cctpConfig.maxAmount && amountNum > cctpConfig.maxAmount) {
177
+ throw new Error("Amount must be below ".concat(cctpConfig.maxAmount, "."));
178
+ }
179
+ };
180
+ var getErrorMessage = function (error) {
181
+ if (!error)
182
+ return '';
183
+ if (typeof error === 'string')
184
+ return error;
185
+ if (error instanceof Error)
186
+ return error.message || '';
187
+ try {
188
+ var maybeMessage = error === null || error === void 0 ? void 0 : error.message;
189
+ if (typeof maybeMessage === 'string')
190
+ return maybeMessage;
191
+ }
192
+ catch (_a) {
193
+ // ignore
194
+ }
195
+ return '';
196
+ };
197
+ var isUserRejectedError = function (error) {
198
+ var anyErr = error;
199
+ var code = anyErr === null || anyErr === void 0 ? void 0 : anyErr.code;
200
+ if (code === 4001)
201
+ return true;
202
+ if (typeof code === 'string' && code.toLowerCase().includes('reject'))
203
+ return true;
204
+ var name = typeof (anyErr === null || anyErr === void 0 ? void 0 : anyErr.name) === 'string' ? anyErr.name.toLowerCase() : '';
205
+ if (name.includes('reject') || name.includes('denied') || name.includes('cancel'))
206
+ return true;
207
+ var message = getErrorMessage(error).toLowerCase();
208
+ if (!message)
209
+ return false;
210
+ return (message.includes('user rejected') ||
211
+ message.includes('rejected') ||
212
+ message.includes('denied') ||
213
+ message.includes('cancelled') ||
214
+ message.includes('canceled') ||
215
+ message.includes('cancel'));
216
+ };
217
+ var getSolanaWalletAddress = function (wallet) {
218
+ var addr = wallet === null || wallet === void 0 ? void 0 : wallet.address;
219
+ return typeof addr === 'string' && addr.length > 0 ? addr : null;
220
+ };
221
+ /**
222
+ * Best-effort detection for Ledger-backed Solana accounts when connected through other wallets (e.g. Phantom).
223
+ * Uses SolanaWalletAdapter (preferred) or direct wallet access (fallback).
224
+ * We probe signMessage once:
225
+ * - If signing succeeds => treat as non-Ledger (for testing).
226
+ * - If signing fails with non-rejection error => treat as Ledger-like and block.
227
+ * - If user rejects => propagate N1_SIGNATURE_CANCELLED so deposit flow returns to amount input.
228
+ */
229
+ export var isLikelyLedgerSolanaWallet = function (wallet, solanaAdapter) { return __awaiter(void 0, void 0, void 0, function () {
230
+ var error_3, cancelled, signer, _a, _b, signMessage, encoder, msg, error_4, cancelled;
231
+ return __generator(this, function (_c) {
232
+ switch (_c.label) {
233
+ case 0:
234
+ if (!solanaAdapter) return [3 /*break*/, 4];
235
+ _c.label = 1;
236
+ case 1:
237
+ _c.trys.push([1, 3, , 4]);
238
+ return [4 /*yield*/, solanaAdapter.isLedger()];
239
+ case 2: return [2 /*return*/, _c.sent()];
240
+ case 3:
241
+ error_3 = _c.sent();
242
+ if (isUserRejectedError(error_3)) {
243
+ cancelled = new Error('Signature request was cancelled');
244
+ cancelled.code = 'N1_SIGNATURE_CANCELLED';
245
+ throw cancelled;
246
+ }
247
+ logger.warn('[Deposit] Solana adapter isLedger check failed', {
248
+ errorMessage: getErrorMessage(error_3),
249
+ });
250
+ return [2 /*return*/, true];
251
+ case 4:
252
+ // Fallback to direct wallet access
253
+ if (!wallet)
254
+ return [2 /*return*/, false];
255
+ _c.label = 5;
256
+ case 5:
257
+ _c.trys.push([5, 13, , 14]);
258
+ if (!(typeof (wallet === null || wallet === void 0 ? void 0 : wallet.getSigner) === 'function')) return [3 /*break*/, 7];
259
+ return [4 /*yield*/, wallet.getSigner()];
260
+ case 6:
261
+ _a = _c.sent();
262
+ return [3 /*break*/, 11];
263
+ case 7:
264
+ if (!((wallet === null || wallet === void 0 ? void 0 : wallet.connector) && typeof wallet.connector.getSigner === 'function')) return [3 /*break*/, 9];
265
+ return [4 /*yield*/, wallet.connector.getSigner()];
266
+ case 8:
267
+ _b = _c.sent();
268
+ return [3 /*break*/, 10];
269
+ case 9:
270
+ _b = null;
271
+ _c.label = 10;
272
+ case 10:
273
+ _a = _b;
274
+ _c.label = 11;
275
+ case 11:
276
+ signer = _a;
277
+ signMessage = signer && typeof signer.signMessage === 'function'
278
+ ? signer.signMessage
279
+ : null;
280
+ if (!signMessage) {
281
+ return [2 /*return*/, false];
282
+ }
283
+ encoder = typeof TextEncoder !== 'undefined' ? new TextEncoder() : null;
284
+ msg = encoder ? encoder.encode('n1-ledger-probe') : new Uint8Array([110, 49, 45, 112, 114, 111, 98, 101]);
285
+ return [4 /*yield*/, signMessage(msg)];
286
+ case 12:
287
+ _c.sent();
288
+ return [2 /*return*/, false];
289
+ case 13:
290
+ error_4 = _c.sent();
291
+ if (isUserRejectedError(error_4)) {
292
+ cancelled = new Error('Signature request was cancelled');
293
+ cancelled.code = 'N1_SIGNATURE_CANCELLED';
294
+ throw cancelled;
295
+ }
296
+ logger.warn('[Deposit] Solana signMessage probe failed (treating as Ledger-like for testing)', {
297
+ errorMessage: getErrorMessage(error_4),
298
+ });
299
+ return [2 /*return*/, true];
300
+ case 14: return [2 /*return*/];
301
+ }
302
+ });
303
+ }); };
304
+ //# sourceMappingURL=walletUtils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"walletUtils.js","sourceRoot":"","sources":["../../../../../../src/features/onboarding-flow/utils/deposit/walletUtils.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,0BAA0B,CAAC;AAClD,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAWjE;;;GAGG;AACH,MAAM,CAAC,IAAM,oBAAoB,GAAG,iEAAO,EAQ1C;;;QAPC,SAAS,eAAA,EACT,UAAU,gBAAA,EACV,WAAW,iBAAA;;;;;gBAOH,cAAc,GAAG,mBAAmB,CAAC,WAAW,CAAC,CAAC;gBAClD,aAAa,GACjB,OAAO,cAAc,KAAK,QAAQ,KAAI,cAAc,aAAd,cAAc,uBAAd,cAAc,CAAE,OAAO,CAAA;oBAC3D,CAAC,CAAC,MAAM,CAAC,cAAc,CAAC,OAAO,CAAC;oBAChC,CAAC,CAAC,OAAO,cAAc,KAAK,QAAQ;wBAClC,CAAC,CAAC,cAAc;wBAChB,CAAC,CAAC,SAAS,CAAC;gBAElB,IAAI,CAAC,aAAa;oBAAE,sBAAO;qBAGvB,UAAU,EAAV,wBAAU;gBAGW,qBAAM,UAAU,CAAC,iBAAiB,EAAE,EAAA;;gBAArD,mBAAiB,SAAoC;gBAE3D,IAAI,gBAAc,IAAI,gBAAc,KAAK,aAAa;oBAAE,sBAAO;gBAE/D,MAAM,CAAC,IAAI,CAAC,0CAA0C,EAAE;oBACtD,cAAc,kBAAA;oBACd,aAAa,eAAA;oBACb,WAAW,aAAA;iBACZ,CAAC,CAAC;gBAEH,qBAAM,UAAU,CAAC,WAAW,CAAC,aAAa,CAAC,EAAA;;gBAA3C,SAA2C,CAAC;gBAC5C,kDAAkD;gBAClD,qBAAM,IAAI,OAAO,CAAC,UAAC,OAAO,IAAK,OAAA,UAAU,CAAC,OAAO,EAAE,IAAK,CAAC,EAA1B,CAA0B,CAAC,EAAA;;gBAD1D,kDAAkD;gBAClD,SAA0D,CAAC;gBAC3D,sBAAO;;gBAGT,mCAAmC;gBACnC,IAAI,CAAC,SAAS,IAAI,OAAO,SAAS,CAAC,aAAa,KAAK,UAAU;oBAAE,sBAAO;qBAGtE,CAAA,OAAO,CAAA,MAAA,SAAS,aAAT,SAAS,uBAAT,SAAS,CAAE,SAAS,0CAAE,UAAU,CAAA,KAAK,UAAU,CAAA,EAAtD,wBAAsD;gBAClD,qBAAM,SAAS,CAAC,SAAS,CAAC,UAAU,EAAE,EAAA;;gBAAtC,KAAA,SAAsC,CAAA;;;gBACtC,KAAA,SAAS,CAAA;;;gBAHT,cAAc,KAGL;gBAEf,IAAI,cAAc,IAAI,cAAc,KAAK,aAAa;oBAAE,sBAAO;gBAE/D,MAAM,CAAC,IAAI,CAAC,yCAAyC,EAAE;oBACrD,cAAc,gBAAA;oBACd,aAAa,eAAA;oBACb,WAAW,aAAA;iBACZ,CAAC,CAAC;gBAEH,qBAAM,SAAS,CAAC,aAAa,CAAC,aAAa,CAAC,EAAA;;gBAA5C,SAA4C,CAAC;gBAC7C,kDAAkD;gBAClD,qBAAM,IAAI,OAAO,CAAC,UAAC,OAAO,IAAK,OAAA,UAAU,CAAC,OAAO,EAAE,IAAK,CAAC,EAA1B,CAA0B,CAAC,EAAA;;gBAD1D,kDAAkD;gBAClD,SAA0D,CAAC;;;;gBAE3D,MAAM,CAAC,IAAI,CAAC,kCAAkC,EAAE;oBAC9C,KAAK,SAAA;oBACL,YAAY,EAAE,OAAK,YAAY,KAAK,CAAC,CAAC,CAAC,OAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,OAAK,CAAC;iBACrE,CAAC,CAAC;;;;;KAEN,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,IAAM,iBAAiB,GAAG,UAC/B,SAAwB,EACxB,UAAoC;;;;;;gBAEhC,QAAQ,GAAmB,IAAI,CAAC;gBAChC,YAAY,GAAmB,IAAI,CAAC;qBAGpC,UAAU,EAAV,wBAAU;;;;gBAEC,qBAAM,UAAU,CAAC,WAAW,EAAE,EAAA;;gBAAzC,QAAQ,GAAG,SAA8B,CAAC;gBAC1C,sBAAO,EAAE,QAAQ,UAAA,EAAE,YAAY,EAAE,IAAI,EAAE,EAAC;;;gBAExC,MAAM,CAAC,IAAI,CAAC,gEAAgE,EAAE;oBAC5E,KAAK,EAAE,OAAK,YAAY,KAAK,CAAC,CAAC,CAAC,OAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,OAAK,CAAC;iBAC9D,CAAC,CAAC;;;qBAKH,CAAA,MAAA,SAAS,aAAT,SAAS,uBAAT,SAAS,CAAE,SAAS,0CAAE,WAAW,CAAA,EAAjC,wBAAiC;gBACxB,qBAAM,SAAS,CAAC,SAAS,CAAC,WAAW,EAAE,EAAA;;gBAAlD,QAAQ,GAAG,SAAuC,CAAC;;;qBAC1C,CAAA,MAAA,SAAS,aAAT,SAAS,uBAAT,SAAS,CAAE,SAAS,0CAAE,eAAe,CAAA,EAArC,wBAAqC;gBAC/B,qBAAM,SAAS,CAAC,SAAS,CAAC,eAAe,EAAE,EAAA;;gBAA1D,YAAY,GAAG,SAA2C,CAAC;;oBAG7D,sBAAO,EAAE,QAAQ,UAAA,EAAE,YAAY,cAAA,EAAE,EAAC;;;KACnC,CAAC;AAEF,MAAM,CAAC,IAAM,oBAAoB,GAAG,UAClC,UAKC,EACD,SAAiB,EACjB,MAAc;;IAEd,IAAI,CAAA,MAAA,UAAU,CAAC,iBAAiB,0CAAE,MAAM,KAAI,CAAC,UAAU,CAAC,iBAAiB,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;QAC9F,MAAM,IAAI,KAAK,CAAC,+CAA+C,CAAC,CAAC;IACnE,CAAC;IACD,IAAI,CAAA,MAAA,UAAU,CAAC,eAAe,0CAAE,MAAM,KAAI,CAAC,UAAU,CAAC,eAAe,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;QACzF,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC;IACjE,CAAC;IAED,IAAM,SAAS,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC;IACrC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,SAAS,IAAI,CAAC,EAAE,CAAC;QAClD,MAAM,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAC;IACrC,CAAC;IAED,IAAI,UAAU,CAAC,SAAS,IAAI,SAAS,GAAG,UAAU,CAAC,SAAS,EAAE,CAAC;QAC7D,MAAM,IAAI,KAAK,CAAC,kCAA2B,UAAU,CAAC,SAAS,MAAG,CAAC,CAAC;IACtE,CAAC;IACD,IAAI,UAAU,CAAC,SAAS,IAAI,SAAS,GAAG,UAAU,CAAC,SAAS,EAAE,CAAC;QAC7D,MAAM,IAAI,KAAK,CAAC,+BAAwB,UAAU,CAAC,SAAS,MAAG,CAAC,CAAC;IACnE,CAAC;AACH,CAAC,CAAC;AAEF,IAAM,eAAe,GAAG,UAAC,KAAc;IACrC,IAAI,CAAC,KAAK;QAAE,OAAO,EAAE,CAAC;IACtB,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IAC5C,IAAI,KAAK,YAAY,KAAK;QAAE,OAAO,KAAK,CAAC,OAAO,IAAI,EAAE,CAAC;IACvD,IAAI,CAAC;QACH,IAAM,YAAY,GAAI,KAAa,aAAb,KAAK,uBAAL,KAAK,CAAU,OAAO,CAAC;QAC7C,IAAI,OAAO,YAAY,KAAK,QAAQ;YAAE,OAAO,YAAY,CAAC;IAC5D,CAAC;IAAC,WAAM,CAAC;QACP,SAAS;IACX,CAAC;IACD,OAAO,EAAE,CAAC;AACZ,CAAC,CAAC;AAEF,IAAM,mBAAmB,GAAG,UAAC,KAAc;IACzC,IAAM,MAAM,GAAG,KAAY,CAAC;IAC5B,IAAM,IAAI,GAAG,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,IAAI,CAAC;IAC1B,IAAI,IAAI,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IAC/B,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC;QAAE,OAAO,IAAI,CAAC;IAEnF,IAAM,IAAI,GAAG,OAAO,CAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,IAAI,CAAA,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IAC/E,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC;QAAE,OAAO,IAAI,CAAC;IAE/F,IAAM,OAAO,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC,WAAW,EAAE,CAAC;IACrD,IAAI,CAAC,OAAO;QAAE,OAAO,KAAK,CAAC;IAC3B,OAAO,CACL,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAC;QACjC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC;QAC5B,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC;QAC1B,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC;QAC7B,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC;QAC5B,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAC3B,CAAC;AACJ,CAAC,CAAC;AAEF,IAAM,sBAAsB,GAAG,UAAC,MAAuB;IACrD,IAAM,IAAI,GAAG,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,OAAO,CAAC;IAC7B,OAAO,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;AACnE,CAAC,CAAC;AAEF;;;;;;;GAOG;AACH,MAAM,CAAC,IAAM,0BAA0B,GAAG,UACxC,MAAwB,EACxB,aAA0C;;;;;qBAGtC,aAAa,EAAb,wBAAa;;;;gBAEN,qBAAM,aAAa,CAAC,QAAQ,EAAE,EAAA;oBAArC,sBAAO,SAA8B,EAAC;;;gBAEtC,IAAI,mBAAmB,CAAC,OAAK,CAAC,EAAE,CAAC;oBACzB,SAAS,GAAG,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC;oBAC9D,SAAiB,CAAC,IAAI,GAAG,wBAAwB,CAAC;oBACnD,MAAM,SAAS,CAAC;gBAClB,CAAC;gBACD,MAAM,CAAC,IAAI,CAAC,gDAAgD,EAAE;oBAC5D,YAAY,EAAE,eAAe,CAAC,OAAK,CAAC;iBACrC,CAAC,CAAC;gBACH,sBAAO,IAAI,EAAC;;gBAIhB,mCAAmC;gBACnC,IAAI,CAAC,MAAM;oBAAE,sBAAO,KAAK,EAAC;;;;qBAItB,CAAA,OAAO,CAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,SAAS,CAAA,KAAK,UAAU,CAAA,EAAvC,wBAAuC;gBACnC,qBAAM,MAAM,CAAC,SAAS,EAAE,EAAA;;gBAAxB,KAAA,SAAwB,CAAA;;;qBACxB,CAAA,CAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,SAAS,KAAI,OAAO,MAAM,CAAC,SAAS,CAAC,SAAS,KAAK,UAAU,CAAA,EAArE,wBAAqE;gBACnE,qBAAM,MAAM,CAAC,SAAS,CAAC,SAAS,EAAE,EAAA;;gBAAlC,KAAA,SAAkC,CAAA;;;gBAClC,KAAA,IAAI,CAAA;;;gBAFN,QAEM;;;gBALN,MAAM,KAKA;gBAEN,WAAW,GACf,MAAM,IAAI,OAAO,MAAM,CAAC,WAAW,KAAK,UAAU;oBAChD,CAAC,CAAE,MAAM,CAAC,WAAiD;oBAC3D,CAAC,CAAC,IAAI,CAAC;gBAEX,IAAI,CAAC,WAAW,EAAE,CAAC;oBACjB,sBAAO,KAAK,EAAC;gBACf,CAAC;gBAEK,OAAO,GAAG,OAAO,WAAW,KAAK,WAAW,CAAC,CAAC,CAAC,IAAI,WAAW,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;gBACxE,GAAG,GAAG,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,IAAI,UAAU,CAAC,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC;gBAEhH,qBAAM,WAAW,CAAC,GAAG,CAAC,EAAA;;gBAAtB,SAAsB,CAAC;gBACvB,sBAAO,KAAK,EAAC;;;gBAGb,IAAI,mBAAmB,CAAC,OAAK,CAAC,EAAE,CAAC;oBACzB,SAAS,GAAG,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC;oBAC9D,SAAiB,CAAC,IAAI,GAAG,wBAAwB,CAAC;oBACnD,MAAM,SAAS,CAAC;gBAClB,CAAC;gBAED,MAAM,CAAC,IAAI,CAAC,iFAAiF,EAAE;oBAC7F,YAAY,EAAE,eAAe,CAAC,OAAK,CAAC;iBACrC,CAAC,CAAC;gBACH,sBAAO,IAAI,EAAC;;;;KAEf,CAAC","sourcesContent":["import { logger } from '../../../../utils/logger';\nimport { mapChainToBridgeKit } from '../../cctp/bridgeKitClient';\nimport type { EVMWalletAdapter, SolanaWalletAdapter } from '../../../../adapters';\n\ntype AnyEvmWallet = any;\ntype AnySolanaWallet = any;\n\nexport interface WalletProviderResult {\n provider: unknown | null;\n walletClient: unknown | null;\n}\n\n/**\n * Best-effort network switch using EVMWalletAdapter (preferred) or Dynamic wallet (fallback).\n * We intentionally do not throw on switch failures; the bridge submission will fail if network is wrong.\n */\nexport const ensureCorrectNetwork = async ({\n evmWallet,\n evmAdapter,\n targetChain,\n}: {\n evmWallet?: AnyEvmWallet;\n evmAdapter?: EVMWalletAdapter | null;\n targetChain: string;\n}): Promise<void> => {\n try {\n const targetChainDef = mapChainToBridgeKit(targetChain);\n const targetChainId =\n typeof targetChainDef === 'object' && targetChainDef?.chainId\n ? Number(targetChainDef.chainId)\n : typeof targetChainDef === 'number'\n ? targetChainDef\n : undefined;\n\n if (!targetChainId) return;\n\n // Prefer adapter if available\n if (evmAdapter) {\n // Use getCurrentChainId() to get the live chain ID from the provider,\n // not the cached chainId which can be stale if user switched networks externally\n const currentChainId = await evmAdapter.getCurrentChainId();\n\n if (currentChainId && currentChainId === targetChainId) return;\n\n logger.info('[CCTP] Switching EVM network via adapter', {\n currentChainId,\n targetChainId,\n targetChain,\n });\n\n await evmAdapter.switchChain(targetChainId);\n // Small delay to allow provider state propagation\n await new Promise((resolve) => setTimeout(resolve, 1_500));\n return;\n }\n\n // Fallback to direct wallet access\n if (!evmWallet || typeof evmWallet.switchNetwork !== 'function') return;\n\n const currentChainId =\n typeof evmWallet?.connector?.getNetwork === 'function'\n ? await evmWallet.connector.getNetwork()\n : undefined;\n\n if (currentChainId && currentChainId === targetChainId) return;\n\n logger.info('[CCTP] Switching EVM network via wallet', {\n currentChainId,\n targetChainId,\n targetChain,\n });\n\n await evmWallet.switchNetwork(targetChainId);\n // Small delay to allow provider state propagation\n await new Promise((resolve) => setTimeout(resolve, 1_500));\n } catch (error) {\n logger.warn('[CCTP] EVM network switch failed', {\n error,\n errorMessage: error instanceof Error ? error.message : String(error),\n });\n }\n};\n\n/**\n * Get wallet provider using EVMWalletAdapter (preferred) or Direct wallet access (fallback).\n */\nexport const getWalletProvider = async (\n evmWallet?: AnyEvmWallet,\n evmAdapter?: EVMWalletAdapter | null,\n): Promise<WalletProviderResult> => {\n let provider: unknown | null = null;\n let walletClient: unknown | null = null;\n\n // Prefer adapter if available\n if (evmAdapter) {\n try {\n provider = await evmAdapter.getProvider();\n return { provider, walletClient: null };\n } catch (error) {\n logger.warn('[WalletUtils] Failed to get provider via adapter, falling back', {\n error: error instanceof Error ? error.message : String(error),\n });\n }\n }\n\n // Fallback to direct wallet access\n if (evmWallet?.connector?.getProvider) {\n provider = await evmWallet.connector.getProvider();\n } else if (evmWallet?.connector?.getWalletClient) {\n walletClient = await evmWallet.connector.getWalletClient();\n }\n\n return { provider, walletClient };\n};\n\nexport const validateBridgeConfig = (\n cctpConfig: {\n allowedFromChains?: string[];\n allowedToChains?: string[];\n minAmount?: number;\n maxAmount?: number;\n },\n fromChain: string,\n amount: string,\n) => {\n if (cctpConfig.allowedFromChains?.length && !cctpConfig.allowedFromChains.includes(fromChain)) {\n throw new Error('This EVM chain is not supported for bridging.');\n }\n if (cctpConfig.allowedToChains?.length && !cctpConfig.allowedToChains.includes('solana')) {\n throw new Error('Target chain is not supported for bridging.');\n }\n\n const amountNum = parseFloat(amount);\n if (!Number.isFinite(amountNum) || amountNum <= 0) {\n throw new Error('Invalid amount.');\n }\n\n if (cctpConfig.minAmount && amountNum < cctpConfig.minAmount) {\n throw new Error(`Amount must be at least ${cctpConfig.minAmount}.`);\n }\n if (cctpConfig.maxAmount && amountNum > cctpConfig.maxAmount) {\n throw new Error(`Amount must be below ${cctpConfig.maxAmount}.`);\n }\n};\n\nconst getErrorMessage = (error: unknown): string => {\n if (!error) return '';\n if (typeof error === 'string') return error;\n if (error instanceof Error) return error.message || '';\n try {\n const maybeMessage = (error as any)?.message;\n if (typeof maybeMessage === 'string') return maybeMessage;\n } catch {\n // ignore\n }\n return '';\n};\n\nconst isUserRejectedError = (error: unknown): boolean => {\n const anyErr = error as any;\n const code = anyErr?.code;\n if (code === 4001) return true;\n if (typeof code === 'string' && code.toLowerCase().includes('reject')) return true;\n\n const name = typeof anyErr?.name === 'string' ? anyErr.name.toLowerCase() : '';\n if (name.includes('reject') || name.includes('denied') || name.includes('cancel')) return true;\n\n const message = getErrorMessage(error).toLowerCase();\n if (!message) return false;\n return (\n message.includes('user rejected') ||\n message.includes('rejected') ||\n message.includes('denied') ||\n message.includes('cancelled') ||\n message.includes('canceled') ||\n message.includes('cancel')\n );\n};\n\nconst getSolanaWalletAddress = (wallet: AnySolanaWallet): string | null => {\n const addr = wallet?.address;\n return typeof addr === 'string' && addr.length > 0 ? addr : null;\n};\n\n/**\n * Best-effort detection for Ledger-backed Solana accounts when connected through other wallets (e.g. Phantom).\n * Uses SolanaWalletAdapter (preferred) or direct wallet access (fallback).\n * We probe signMessage once:\n * - If signing succeeds => treat as non-Ledger (for testing).\n * - If signing fails with non-rejection error => treat as Ledger-like and block.\n * - If user rejects => propagate N1_SIGNATURE_CANCELLED so deposit flow returns to amount input.\n */\nexport const isLikelyLedgerSolanaWallet = async (\n wallet?: AnySolanaWallet,\n solanaAdapter?: SolanaWalletAdapter | null,\n): Promise<boolean> => {\n // Prefer adapter if available - it has a dedicated isLedger() method\n if (solanaAdapter) {\n try {\n return await solanaAdapter.isLedger();\n } catch (error) {\n if (isUserRejectedError(error)) {\n const cancelled = new Error('Signature request was cancelled');\n (cancelled as any).code = 'N1_SIGNATURE_CANCELLED';\n throw cancelled;\n }\n logger.warn('[Deposit] Solana adapter isLedger check failed', {\n errorMessage: getErrorMessage(error),\n });\n return true;\n }\n }\n\n // Fallback to direct wallet access\n if (!wallet) return false;\n\n try {\n const signer =\n typeof wallet?.getSigner === 'function'\n ? await wallet.getSigner()\n : wallet?.connector && typeof wallet.connector.getSigner === 'function'\n ? await wallet.connector.getSigner()\n : null;\n\n const signMessage =\n signer && typeof signer.signMessage === 'function'\n ? (signer.signMessage as (msg: Uint8Array) => Promise<any>)\n : null;\n\n if (!signMessage) {\n return false;\n }\n\n const encoder = typeof TextEncoder !== 'undefined' ? new TextEncoder() : null;\n const msg = encoder ? encoder.encode('n1-ledger-probe') : new Uint8Array([110, 49, 45, 112, 114, 111, 98, 101]);\n\n await signMessage(msg);\n return false;\n\n } catch (error) {\n if (isUserRejectedError(error)) {\n const cancelled = new Error('Signature request was cancelled');\n (cancelled as any).code = 'N1_SIGNATURE_CANCELLED';\n throw cancelled;\n }\n\n logger.warn('[Deposit] Solana signMessage probe failed (treating as Ledger-like for testing)', {\n errorMessage: getErrorMessage(error),\n });\n return true;\n }\n};\n\n\n"]}