@n1xyz/wallet-widget 0.0.35-alpha.2 → 0.0.35-alpha.20
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/adapters/evm.js.map +1 -0
- package/dist/adapters/factory.js.map +1 -0
- package/dist/adapters/index.js.map +1 -0
- package/dist/adapters/solana.js.map +1 -0
- package/dist/adapters/types.js.map +1 -0
- package/dist/animations/N1Loader.js.map +1 -0
- package/dist/animations/Processing.js.map +1 -0
- package/dist/bridge-assist/cctp-solana.d.ts +1 -0
- package/dist/bridge-assist/cctp-solana.js +12 -6
- package/dist/bridge-assist/cctp-solana.js.map +1 -1
- package/dist/components/LoadingFallback.js.map +1 -0
- package/dist/components/Logo.js.map +1 -0
- package/dist/components/N1ConnectButton.js.map +1 -0
- package/dist/components/logos/ArbitrumLogo.js.map +1 -0
- package/dist/components/logos/BaseLogo.js.map +1 -0
- package/dist/components/logos/BeraLogo.js.map +1 -0
- package/dist/components/logos/BitcoinLogo.js.map +1 -0
- package/dist/components/logos/EthereumLogo.js.map +1 -0
- package/dist/components/logos/HyperliquidLogo.js.map +1 -0
- package/dist/components/logos/OptimismLogo.js.map +1 -0
- package/dist/components/logos/SolanaLogo.js.map +1 -0
- package/dist/components/logos/ZeroOneLogo.js.map +1 -0
- package/dist/components/logos/index.js.map +1 -0
- package/dist/{src/config → config}/chains.js +45 -15
- package/dist/config/chains.js.map +1 -0
- package/dist/config/dynamic.js.map +1 -0
- package/dist/config/solana.js.map +1 -0
- package/dist/config/turnkey.js.map +1 -0
- package/dist/context/n1-wallet-context.js.map +1 -0
- package/dist/errors/types.js.map +1 -0
- package/dist/features/onboarding-flow/N1WalletModal.js.map +1 -0
- package/dist/features/onboarding-flow/OnboardingFlow.js.map +1 -0
- package/dist/{src/features → features}/onboarding-flow/bridge-assist/client.js +0 -1
- package/dist/features/onboarding-flow/bridge-assist/client.js.map +1 -0
- package/dist/features/onboarding-flow/bridge-assist/config.js.map +1 -0
- package/dist/features/onboarding-flow/bridge-assist/index.js.map +1 -0
- package/dist/features/onboarding-flow/bridge-assist/types.js.map +1 -0
- package/dist/{src/features → features}/onboarding-flow/cctp/bridgeKitClient.d.ts +1 -0
- package/dist/{src/features → features}/onboarding-flow/cctp/bridgeKitClient.js +71 -12
- package/dist/features/onboarding-flow/cctp/bridgeKitClient.js.map +1 -0
- package/dist/features/onboarding-flow/cctp/clientFactory.js.map +1 -0
- package/dist/features/onboarding-flow/cctp/config.js.map +1 -0
- package/dist/features/onboarding-flow/cctp/mockCctpClient.js.map +1 -0
- package/dist/{src/features → features}/onboarding-flow/cctp/solanaClaim.d.ts +1 -1
- package/dist/features/onboarding-flow/cctp/solanaClaim.js +2 -0
- package/dist/features/onboarding-flow/cctp/solanaClaim.js.map +1 -0
- package/dist/features/onboarding-flow/cctp/types.js.map +1 -0
- package/dist/features/onboarding-flow/components/ChainButton.js.map +1 -0
- package/dist/features/onboarding-flow/components/Header.js.map +1 -0
- package/dist/features/onboarding-flow/components/ImageWithFallback.js.map +1 -0
- package/dist/{src/features → features}/onboarding-flow/components/TransactionTable.js +6 -1
- package/dist/features/onboarding-flow/components/TransactionTable.js.map +1 -0
- package/dist/features/onboarding-flow/components/WaitingMessage.js.map +1 -0
- package/dist/features/onboarding-flow/components/index.js.map +1 -0
- package/dist/features/onboarding-flow/errors/depositError.js.map +1 -0
- package/dist/{src/features → features}/onboarding-flow/hooks/useBridgeDeposit.js +60 -15
- package/dist/features/onboarding-flow/hooks/useBridgeDeposit.js.map +1 -0
- package/dist/features/onboarding-flow/hooks/useDepositAuth.js.map +1 -0
- package/dist/features/onboarding-flow/hooks/useDepositHydration.js.map +1 -0
- package/dist/{src/features → features}/onboarding-flow/hooks/usePendingDepositState.js +27 -2
- package/dist/features/onboarding-flow/hooks/usePendingDepositState.js.map +1 -0
- package/dist/{src/features → features}/onboarding-flow/hooks/useSolanaDeposit.js +1 -1
- package/dist/features/onboarding-flow/hooks/useSolanaDeposit.js.map +1 -0
- package/dist/features/onboarding-flow/index.js.map +1 -0
- package/dist/{src/features → features}/onboarding-flow/providers/DepositFlowProvider.js +9 -4
- package/dist/features/onboarding-flow/providers/DepositFlowProvider.js.map +1 -0
- package/dist/{src/features → features}/onboarding-flow/providers/OnboardingStateProvider.js +2 -4
- package/dist/features/onboarding-flow/providers/OnboardingStateProvider.js.map +1 -0
- package/dist/features/onboarding-flow/providers/StateProvider.js.map +1 -0
- package/dist/{src/features → features}/onboarding-flow/providers/WalletConnectionProvider.js +136 -74
- package/dist/features/onboarding-flow/providers/WalletConnectionProvider.js.map +1 -0
- package/dist/{src/features → features}/onboarding-flow/providers/debug.js +14 -1
- package/dist/features/onboarding-flow/providers/debug.js.map +1 -0
- package/dist/features/onboarding-flow/providers/index.js.map +1 -0
- package/dist/features/onboarding-flow/providers/onboardingStateMachine.js.map +1 -0
- package/dist/features/onboarding-flow/screens/00-EntrySelectionScreen.js.map +1 -0
- package/dist/features/onboarding-flow/screens/01-ConnectWalletScreen.js.map +1 -0
- package/dist/features/onboarding-flow/screens/02-TurnkeyAuthScreen.js.map +1 -0
- package/dist/features/onboarding-flow/screens/03-TurnkeyPreparingScreen.js.map +1 -0
- package/dist/features/onboarding-flow/screens/04-ChainSelectionScreen.js.map +1 -0
- package/dist/{src/features → features}/onboarding-flow/screens/05-AmountInputScreen.d.ts +1 -1
- package/dist/{src/features → features}/onboarding-flow/screens/05-AmountInputScreen.js +25 -6
- package/dist/features/onboarding-flow/screens/05-AmountInputScreen.js.map +1 -0
- package/dist/{src/features → features}/onboarding-flow/screens/06-DepositProgressScreen.js +12 -21
- package/dist/features/onboarding-flow/screens/06-DepositProgressScreen.js.map +1 -0
- package/dist/features/onboarding-flow/screens/07-DepositSuccessScreen.js.map +1 -0
- package/dist/features/onboarding-flow/screens/08-AuthLoadingScreen.js.map +1 -0
- package/dist/features/onboarding-flow/screens/09-ErrorScreen.js.map +1 -0
- package/dist/features/onboarding-flow/screens/index.js.map +1 -0
- package/dist/features/onboarding-flow/turnkey/turnkeySessionMachine.js.map +1 -0
- package/dist/features/onboarding-flow/types.js.map +1 -0
- package/dist/features/onboarding-flow/utils/bridgeUtils.js.map +1 -0
- package/dist/features/onboarding-flow/utils/deposit/attestationUtils.js.map +1 -0
- package/dist/features/onboarding-flow/utils/deposit/bridgeUtils.js.map +1 -0
- package/dist/{src/features → features}/onboarding-flow/utils/deposit/claimConfirmation.js +41 -7
- package/dist/features/onboarding-flow/utils/deposit/claimConfirmation.js.map +1 -0
- package/dist/{src/features → features}/onboarding-flow/utils/deposit/claimSubmission.d.ts +1 -1
- package/dist/{src/features → features}/onboarding-flow/utils/deposit/claimSubmission.js +58 -37
- package/dist/features/onboarding-flow/utils/deposit/claimSubmission.js.map +1 -0
- package/dist/features/onboarding-flow/utils/deposit/depositPolling.js.map +1 -0
- package/dist/features/onboarding-flow/utils/deposit/evmTxInterceptor.js.map +1 -0
- package/dist/features/onboarding-flow/utils/deposit/nonceUtils.js.map +1 -0
- package/dist/{src/features → features}/onboarding-flow/utils/deposit/solanaDepositTransaction.d.ts +2 -1
- package/dist/features/onboarding-flow/utils/deposit/solanaDepositTransaction.js +14 -0
- package/dist/features/onboarding-flow/utils/deposit/solanaDepositTransaction.js.map +1 -0
- package/dist/features/onboarding-flow/utils/deposit/solanaUtils.js.map +1 -0
- package/dist/features/onboarding-flow/utils/deposit/storage.js.map +1 -0
- package/dist/features/onboarding-flow/utils/deposit/walletUtils.js.map +1 -0
- package/dist/features/onboarding-flow/utils/depositPolling.js.map +1 -0
- package/dist/features/onboarding-flow/utils/explorerUrl.js.map +1 -0
- package/dist/features/onboarding-flow/utils/nordUtils.js.map +1 -0
- package/dist/features/onboarding-flow/utils/pendingDepositCookie.js.map +1 -0
- package/dist/features/onboarding-flow/utils/pendingDepositStorage.js.map +1 -0
- package/dist/features/onboarding-flow/utils/utils.js.map +1 -0
- package/dist/features/onboarding-flow/utils/withImageFallback.js.map +1 -0
- package/dist/hooks/index.js.map +1 -0
- package/dist/hooks/useN1Wallet.js.map +1 -0
- package/dist/hooks/useNordUserInitialization.js.map +1 -0
- package/dist/index.js.map +1 -0
- package/dist/main.css +1 -1
- package/dist/{src/providers → providers}/LazyWalletProvider.js +105 -57
- package/dist/providers/LazyWalletProvider.js.map +1 -0
- package/dist/providers/N1WalletProvider/ContextBridge.js.map +1 -0
- package/dist/providers/N1WalletProvider/ModalProvider.js.map +1 -0
- package/dist/providers/N1WalletProvider/NetworkProvider.js.map +1 -0
- package/dist/providers/N1WalletProvider/SessionProvider.js.map +1 -0
- package/dist/providers/N1WalletProvider/SigningProvider.js.map +1 -0
- package/dist/providers/N1WalletProvider/ThemingProvider.js.map +1 -0
- package/dist/providers/N1WalletProvider/index.js.map +1 -0
- package/dist/providers/N1WalletProvider.js.map +1 -0
- package/dist/providers/ShadowRootWrapper.js.map +1 -0
- package/dist/providers/WalletErrorBoundary.js.map +1 -0
- package/dist/services/bootstrap/DepositRecoveryService.js.map +1 -0
- package/dist/services/bootstrap/DynamicSdkService.js.map +1 -0
- package/dist/services/bootstrap/SessionBootstrapService.js.map +1 -0
- package/dist/services/bootstrap/TurnkeyBootstrapService.js.map +1 -0
- package/dist/services/bootstrap/index.js.map +1 -0
- package/dist/services/bootstrap/types.js.map +1 -0
- package/dist/services/storage/StorageService.js.map +1 -0
- package/dist/services/storage/index.js.map +1 -0
- package/dist/services/storage/keys.js.map +1 -0
- package/dist/services/storage/types.js.map +1 -0
- package/dist/store/index.js.map +1 -0
- package/dist/store/selectors.js.map +1 -0
- package/dist/store/slices/bootstrapSlice.js.map +1 -0
- package/dist/store/slices/configSlice.js.map +1 -0
- package/dist/store/slices/index.js.map +1 -0
- package/dist/store/slices/sessionSlice.js.map +1 -0
- package/dist/store/slices/signingSlice.js.map +1 -0
- package/dist/store/slices/uiSlice.js.map +1 -0
- package/dist/store/slices/walletSlice.js.map +1 -0
- package/dist/store/store.js.map +1 -0
- package/dist/store/subscriptions/depositPersistence.js.map +1 -0
- package/dist/store/subscriptions/index.js.map +1 -0
- package/dist/store/subscriptions/turnkeyPersistence.js.map +1 -0
- package/dist/store/types.js.map +1 -0
- package/dist/styles/cdn-fonts.js.map +1 -0
- package/dist/styles/embedded-main-css.js.map +1 -0
- package/dist/turnkey/TurnkeyProvider.js.map +1 -0
- package/dist/turnkey/createTurnkeyWallet.js.map +1 -0
- package/dist/turnkey/createWalletProvider.js.map +1 -0
- package/dist/turnkey/index.js.map +1 -0
- package/dist/turnkey/turnkeySessionMachine.js.map +1 -0
- package/dist/turnkey/turnkeySessionStorage.js.map +1 -0
- package/dist/turnkey/types.js.map +1 -0
- package/dist/types/wallet.js.map +1 -0
- package/dist/utils/address.js.map +1 -0
- package/dist/utils/chain.js.map +1 -0
- package/dist/utils/ed25519.js.map +1 -0
- package/dist/utils/errors.js.map +1 -0
- package/dist/utils/events.js.map +1 -0
- package/dist/utils/formatAmount.js.map +1 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/shortenString.js.map +1 -0
- package/package.json +16 -34
- package/LICENSE +0 -44
- package/README.md +0 -197
- package/dist/src/adapters/evm.js.map +0 -1
- package/dist/src/adapters/factory.js.map +0 -1
- package/dist/src/adapters/index.js.map +0 -1
- package/dist/src/adapters/solana.js.map +0 -1
- package/dist/src/adapters/types.js.map +0 -1
- package/dist/src/animations/N1Loader.js.map +0 -1
- package/dist/src/animations/N1Loader.json +0 -1
- package/dist/src/animations/Processing.js.map +0 -1
- package/dist/src/animations/Processing.json +0 -1
- package/dist/src/components/LoadingFallback.js.map +0 -1
- package/dist/src/components/Logo.js.map +0 -1
- package/dist/src/components/N1ConnectButton.js.map +0 -1
- package/dist/src/components/logos/ArbitrumLogo.js.map +0 -1
- package/dist/src/components/logos/BaseLogo.js.map +0 -1
- package/dist/src/components/logos/BeraLogo.js.map +0 -1
- package/dist/src/components/logos/BitcoinLogo.js.map +0 -1
- package/dist/src/components/logos/EthereumLogo.js.map +0 -1
- package/dist/src/components/logos/HyperliquidLogo.js.map +0 -1
- package/dist/src/components/logos/OptimismLogo.js.map +0 -1
- package/dist/src/components/logos/SolanaLogo.js.map +0 -1
- package/dist/src/components/logos/ZeroOneLogo.js.map +0 -1
- package/dist/src/components/logos/index.js.map +0 -1
- package/dist/src/config/chains.js.map +0 -1
- package/dist/src/config/dynamic.js.map +0 -1
- package/dist/src/config/solana.js.map +0 -1
- package/dist/src/config/turnkey.js.map +0 -1
- package/dist/src/context/n1-wallet-context.js.map +0 -1
- package/dist/src/errors/types.js.map +0 -1
- package/dist/src/features/onboarding-flow/N1WalletModal.js.map +0 -1
- package/dist/src/features/onboarding-flow/OnboardingFlow.js.map +0 -1
- package/dist/src/features/onboarding-flow/bridge-assist/client.js.map +0 -1
- package/dist/src/features/onboarding-flow/bridge-assist/config.js.map +0 -1
- package/dist/src/features/onboarding-flow/bridge-assist/index.js.map +0 -1
- package/dist/src/features/onboarding-flow/bridge-assist/types.js.map +0 -1
- package/dist/src/features/onboarding-flow/cctp/bridgeKitClient.js.map +0 -1
- package/dist/src/features/onboarding-flow/cctp/clientFactory.js.map +0 -1
- package/dist/src/features/onboarding-flow/cctp/config.js.map +0 -1
- package/dist/src/features/onboarding-flow/cctp/mockCctpClient.js.map +0 -1
- package/dist/src/features/onboarding-flow/cctp/solanaClaim.js +0 -2
- package/dist/src/features/onboarding-flow/cctp/solanaClaim.js.map +0 -1
- package/dist/src/features/onboarding-flow/cctp/types.js.map +0 -1
- package/dist/src/features/onboarding-flow/components/ChainButton.js.map +0 -1
- package/dist/src/features/onboarding-flow/components/Header.js.map +0 -1
- package/dist/src/features/onboarding-flow/components/ImageWithFallback.js.map +0 -1
- package/dist/src/features/onboarding-flow/components/TransactionTable.js.map +0 -1
- package/dist/src/features/onboarding-flow/components/WaitingMessage.js.map +0 -1
- package/dist/src/features/onboarding-flow/components/index.js.map +0 -1
- package/dist/src/features/onboarding-flow/errors/depositError.js.map +0 -1
- package/dist/src/features/onboarding-flow/hooks/useBridgeDeposit.js.map +0 -1
- package/dist/src/features/onboarding-flow/hooks/useDepositAuth.js.map +0 -1
- package/dist/src/features/onboarding-flow/hooks/useDepositHydration.js.map +0 -1
- package/dist/src/features/onboarding-flow/hooks/usePendingDepositState.js.map +0 -1
- package/dist/src/features/onboarding-flow/hooks/useSolanaDeposit.js.map +0 -1
- package/dist/src/features/onboarding-flow/index.js.map +0 -1
- package/dist/src/features/onboarding-flow/providers/DepositFlowProvider.js.map +0 -1
- package/dist/src/features/onboarding-flow/providers/OnboardingStateProvider.js.map +0 -1
- package/dist/src/features/onboarding-flow/providers/StateProvider.js.map +0 -1
- package/dist/src/features/onboarding-flow/providers/WalletConnectionProvider.js.map +0 -1
- package/dist/src/features/onboarding-flow/providers/debug.js.map +0 -1
- package/dist/src/features/onboarding-flow/providers/index.js.map +0 -1
- package/dist/src/features/onboarding-flow/providers/onboardingStateMachine.js.map +0 -1
- package/dist/src/features/onboarding-flow/screens/00-EntrySelectionScreen.js.map +0 -1
- package/dist/src/features/onboarding-flow/screens/01-ConnectWalletScreen.js.map +0 -1
- package/dist/src/features/onboarding-flow/screens/02-TurnkeyAuthScreen.js.map +0 -1
- package/dist/src/features/onboarding-flow/screens/03-TurnkeyPreparingScreen.js.map +0 -1
- package/dist/src/features/onboarding-flow/screens/04-ChainSelectionScreen.js.map +0 -1
- package/dist/src/features/onboarding-flow/screens/05-AmountInputScreen.js.map +0 -1
- package/dist/src/features/onboarding-flow/screens/06-DepositProgressScreen.js.map +0 -1
- package/dist/src/features/onboarding-flow/screens/07-DepositSuccessScreen.js.map +0 -1
- package/dist/src/features/onboarding-flow/screens/08-AuthLoadingScreen.js.map +0 -1
- package/dist/src/features/onboarding-flow/screens/09-ErrorScreen.js.map +0 -1
- package/dist/src/features/onboarding-flow/screens/index.js.map +0 -1
- package/dist/src/features/onboarding-flow/turnkey/turnkeySessionMachine.js.map +0 -1
- package/dist/src/features/onboarding-flow/types.js.map +0 -1
- package/dist/src/features/onboarding-flow/utils/bridgeUtils.js.map +0 -1
- package/dist/src/features/onboarding-flow/utils/deposit/attestationUtils.js.map +0 -1
- package/dist/src/features/onboarding-flow/utils/deposit/bridgeUtils.js.map +0 -1
- package/dist/src/features/onboarding-flow/utils/deposit/claimConfirmation.js.map +0 -1
- package/dist/src/features/onboarding-flow/utils/deposit/claimSubmission.js.map +0 -1
- package/dist/src/features/onboarding-flow/utils/deposit/depositPolling.js.map +0 -1
- package/dist/src/features/onboarding-flow/utils/deposit/evmTxInterceptor.js.map +0 -1
- package/dist/src/features/onboarding-flow/utils/deposit/nonceUtils.js.map +0 -1
- package/dist/src/features/onboarding-flow/utils/deposit/solanaDepositTransaction.js +0 -8
- package/dist/src/features/onboarding-flow/utils/deposit/solanaDepositTransaction.js.map +0 -1
- package/dist/src/features/onboarding-flow/utils/deposit/solanaUtils.js.map +0 -1
- package/dist/src/features/onboarding-flow/utils/deposit/storage.js.map +0 -1
- package/dist/src/features/onboarding-flow/utils/deposit/walletUtils.js.map +0 -1
- package/dist/src/features/onboarding-flow/utils/depositPolling.js.map +0 -1
- package/dist/src/features/onboarding-flow/utils/explorerUrl.js.map +0 -1
- package/dist/src/features/onboarding-flow/utils/nordUtils.js.map +0 -1
- package/dist/src/features/onboarding-flow/utils/pendingDepositCookie.js.map +0 -1
- package/dist/src/features/onboarding-flow/utils/pendingDepositStorage.js.map +0 -1
- package/dist/src/features/onboarding-flow/utils/utils.js.map +0 -1
- package/dist/src/features/onboarding-flow/utils/withImageFallback.js.map +0 -1
- package/dist/src/hooks/index.js.map +0 -1
- package/dist/src/hooks/useN1Wallet.js.map +0 -1
- package/dist/src/hooks/useNordUserInitialization.js.map +0 -1
- package/dist/src/index.js.map +0 -1
- package/dist/src/providers/LazyWalletProvider.js.map +0 -1
- package/dist/src/providers/N1WalletProvider/ContextBridge.js.map +0 -1
- package/dist/src/providers/N1WalletProvider/ModalProvider.js.map +0 -1
- package/dist/src/providers/N1WalletProvider/NetworkProvider.js.map +0 -1
- package/dist/src/providers/N1WalletProvider/SessionProvider.js.map +0 -1
- package/dist/src/providers/N1WalletProvider/SigningProvider.js.map +0 -1
- package/dist/src/providers/N1WalletProvider/ThemingProvider.js.map +0 -1
- package/dist/src/providers/N1WalletProvider/index.js.map +0 -1
- package/dist/src/providers/N1WalletProvider.js.map +0 -1
- package/dist/src/providers/N1WalletProviderTemp.d.ts +0 -0
- package/dist/src/providers/N1WalletProviderTemp.js +0 -184
- package/dist/src/providers/N1WalletProviderTemp.js.map +0 -1
- package/dist/src/providers/ShadowRootWrapper.js.map +0 -1
- package/dist/src/providers/WalletErrorBoundary.js.map +0 -1
- package/dist/src/services/bootstrap/DepositRecoveryService.js.map +0 -1
- package/dist/src/services/bootstrap/DynamicSdkService.js.map +0 -1
- package/dist/src/services/bootstrap/SessionBootstrapService.js.map +0 -1
- package/dist/src/services/bootstrap/TurnkeyBootstrapService.js.map +0 -1
- package/dist/src/services/bootstrap/index.js.map +0 -1
- package/dist/src/services/bootstrap/types.js.map +0 -1
- package/dist/src/services/storage/StorageService.js.map +0 -1
- package/dist/src/services/storage/index.js.map +0 -1
- package/dist/src/services/storage/keys.js.map +0 -1
- package/dist/src/services/storage/types.js.map +0 -1
- package/dist/src/store/index.js.map +0 -1
- package/dist/src/store/selectors.js.map +0 -1
- package/dist/src/store/slices/bootstrapSlice.js.map +0 -1
- package/dist/src/store/slices/configSlice.js.map +0 -1
- package/dist/src/store/slices/index.js.map +0 -1
- package/dist/src/store/slices/sessionSlice.js.map +0 -1
- package/dist/src/store/slices/signingSlice.js.map +0 -1
- package/dist/src/store/slices/uiSlice.js.map +0 -1
- package/dist/src/store/slices/walletSlice.js.map +0 -1
- package/dist/src/store/store.js.map +0 -1
- package/dist/src/store/subscriptions/depositPersistence.js.map +0 -1
- package/dist/src/store/subscriptions/fontInjection.d.ts +0 -18
- package/dist/src/store/subscriptions/fontInjection.js +0 -90
- package/dist/src/store/subscriptions/fontInjection.js.map +0 -1
- package/dist/src/store/subscriptions/index.js.map +0 -1
- package/dist/src/store/subscriptions/turnkeyPersistence.js.map +0 -1
- package/dist/src/store/types.js.map +0 -1
- package/dist/src/styles/cdn-fonts.js.map +0 -1
- package/dist/src/styles/embedded-main-css.js.map +0 -1
- package/dist/src/turnkey/TurnkeyProvider.js.map +0 -1
- package/dist/src/turnkey/createTurnkeyWallet.js.map +0 -1
- package/dist/src/turnkey/createWalletProvider.js.map +0 -1
- package/dist/src/turnkey/index.js.map +0 -1
- package/dist/src/turnkey/turnkeySessionMachine.js.map +0 -1
- package/dist/src/turnkey/turnkeySessionStorage.js.map +0 -1
- package/dist/src/turnkey/types.js.map +0 -1
- package/dist/src/types/dynamic-wallets.d.ts +0 -104
- package/dist/src/types/dynamic-wallets.js +0 -8
- package/dist/src/types/dynamic-wallets.js.map +0 -1
- package/dist/src/types/wallet.js.map +0 -1
- package/dist/src/utils/address.js.map +0 -1
- package/dist/src/utils/chain.js.map +0 -1
- package/dist/src/utils/ed25519.js.map +0 -1
- package/dist/src/utils/errors.js.map +0 -1
- package/dist/src/utils/events.js.map +0 -1
- package/dist/src/utils/formatAmount.js.map +0 -1
- package/dist/src/utils/logger.js.map +0 -1
- package/dist/src/utils/shortenString.js.map +0 -1
- /package/dist/{src/adapters → adapters}/evm.d.ts +0 -0
- /package/dist/{src/adapters → adapters}/evm.js +0 -0
- /package/dist/{src/adapters → adapters}/factory.d.ts +0 -0
- /package/dist/{src/adapters → adapters}/factory.js +0 -0
- /package/dist/{src/adapters → adapters}/index.d.ts +0 -0
- /package/dist/{src/adapters → adapters}/index.js +0 -0
- /package/dist/{src/adapters → adapters}/solana.d.ts +0 -0
- /package/dist/{src/adapters → adapters}/solana.js +0 -0
- /package/dist/{src/adapters → adapters}/types.d.ts +0 -0
- /package/dist/{src/adapters → adapters}/types.js +0 -0
- /package/dist/{src/animations → animations}/N1Loader.d.ts +0 -0
- /package/dist/{src/animations → animations}/N1Loader.js +0 -0
- /package/dist/{src/animations → animations}/Processing.d.ts +0 -0
- /package/dist/{src/animations → animations}/Processing.js +0 -0
- /package/dist/{src/components → components}/LoadingFallback.d.ts +0 -0
- /package/dist/{src/components → components}/LoadingFallback.js +0 -0
- /package/dist/{src/components → components}/Logo.d.ts +0 -0
- /package/dist/{src/components → components}/Logo.js +0 -0
- /package/dist/{src/components → components}/N1ConnectButton.d.ts +0 -0
- /package/dist/{src/components → components}/N1ConnectButton.js +0 -0
- /package/dist/{src/components → components}/logos/ArbitrumLogo.d.ts +0 -0
- /package/dist/{src/components → components}/logos/ArbitrumLogo.js +0 -0
- /package/dist/{src/components → components}/logos/BaseLogo.d.ts +0 -0
- /package/dist/{src/components → components}/logos/BaseLogo.js +0 -0
- /package/dist/{src/components → components}/logos/BeraLogo.d.ts +0 -0
- /package/dist/{src/components → components}/logos/BeraLogo.js +0 -0
- /package/dist/{src/components → components}/logos/BitcoinLogo.d.ts +0 -0
- /package/dist/{src/components → components}/logos/BitcoinLogo.js +0 -0
- /package/dist/{src/components → components}/logos/EthereumLogo.d.ts +0 -0
- /package/dist/{src/components → components}/logos/EthereumLogo.js +0 -0
- /package/dist/{src/components → components}/logos/HyperliquidLogo.d.ts +0 -0
- /package/dist/{src/components → components}/logos/HyperliquidLogo.js +0 -0
- /package/dist/{src/components → components}/logos/OptimismLogo.d.ts +0 -0
- /package/dist/{src/components → components}/logos/OptimismLogo.js +0 -0
- /package/dist/{src/components → components}/logos/SolanaLogo.d.ts +0 -0
- /package/dist/{src/components → components}/logos/SolanaLogo.js +0 -0
- /package/dist/{src/components → components}/logos/ZeroOneLogo.d.ts +0 -0
- /package/dist/{src/components → components}/logos/ZeroOneLogo.js +0 -0
- /package/dist/{src/components → components}/logos/index.d.ts +0 -0
- /package/dist/{src/components → components}/logos/index.js +0 -0
- /package/dist/{src/config → config}/chains.d.ts +0 -0
- /package/dist/{src/config → config}/dynamic.d.ts +0 -0
- /package/dist/{src/config → config}/dynamic.js +0 -0
- /package/dist/{src/config → config}/solana.d.ts +0 -0
- /package/dist/{src/config → config}/solana.js +0 -0
- /package/dist/{src/config → config}/turnkey.d.ts +0 -0
- /package/dist/{src/config → config}/turnkey.js +0 -0
- /package/dist/{src/context → context}/n1-wallet-context.d.ts +0 -0
- /package/dist/{src/context → context}/n1-wallet-context.js +0 -0
- /package/dist/{src/errors → errors}/types.d.ts +0 -0
- /package/dist/{src/errors → errors}/types.js +0 -0
- /package/dist/{src/features → features}/onboarding-flow/N1WalletModal.d.ts +0 -0
- /package/dist/{src/features → features}/onboarding-flow/N1WalletModal.js +0 -0
- /package/dist/{src/features → features}/onboarding-flow/OnboardingFlow.d.ts +0 -0
- /package/dist/{src/features → features}/onboarding-flow/OnboardingFlow.js +0 -0
- /package/dist/{src/features → features}/onboarding-flow/bridge-assist/client.d.ts +0 -0
- /package/dist/{src/features → features}/onboarding-flow/bridge-assist/config.d.ts +0 -0
- /package/dist/{src/features → features}/onboarding-flow/bridge-assist/config.js +0 -0
- /package/dist/{src/features → features}/onboarding-flow/bridge-assist/index.d.ts +0 -0
- /package/dist/{src/features → features}/onboarding-flow/bridge-assist/index.js +0 -0
- /package/dist/{src/features → features}/onboarding-flow/bridge-assist/types.d.ts +0 -0
- /package/dist/{src/features → features}/onboarding-flow/bridge-assist/types.js +0 -0
- /package/dist/{src/features → features}/onboarding-flow/cctp/clientFactory.d.ts +0 -0
- /package/dist/{src/features → features}/onboarding-flow/cctp/clientFactory.js +0 -0
- /package/dist/{src/features → features}/onboarding-flow/cctp/config.d.ts +0 -0
- /package/dist/{src/features → features}/onboarding-flow/cctp/config.js +0 -0
- /package/dist/{src/features → features}/onboarding-flow/cctp/mockCctpClient.d.ts +0 -0
- /package/dist/{src/features → features}/onboarding-flow/cctp/mockCctpClient.js +0 -0
- /package/dist/{src/features → features}/onboarding-flow/cctp/types.d.ts +0 -0
- /package/dist/{src/features → features}/onboarding-flow/cctp/types.js +0 -0
- /package/dist/{src/features → features}/onboarding-flow/components/ChainButton.d.ts +0 -0
- /package/dist/{src/features → features}/onboarding-flow/components/ChainButton.js +0 -0
- /package/dist/{src/features → features}/onboarding-flow/components/Header.d.ts +0 -0
- /package/dist/{src/features → features}/onboarding-flow/components/Header.js +0 -0
- /package/dist/{src/features → features}/onboarding-flow/components/ImageWithFallback.d.ts +0 -0
- /package/dist/{src/features → features}/onboarding-flow/components/ImageWithFallback.js +0 -0
- /package/dist/{src/features → features}/onboarding-flow/components/TransactionTable.d.ts +0 -0
- /package/dist/{src/features → features}/onboarding-flow/components/WaitingMessage.d.ts +0 -0
- /package/dist/{src/features → features}/onboarding-flow/components/WaitingMessage.js +0 -0
- /package/dist/{src/features → features}/onboarding-flow/components/index.d.ts +0 -0
- /package/dist/{src/features → features}/onboarding-flow/components/index.js +0 -0
- /package/dist/{src/features → features}/onboarding-flow/errors/depositError.d.ts +0 -0
- /package/dist/{src/features → features}/onboarding-flow/errors/depositError.js +0 -0
- /package/dist/{src/features → features}/onboarding-flow/hooks/useBridgeDeposit.d.ts +0 -0
- /package/dist/{src/features → features}/onboarding-flow/hooks/useDepositAuth.d.ts +0 -0
- /package/dist/{src/features → features}/onboarding-flow/hooks/useDepositAuth.js +0 -0
- /package/dist/{src/features → features}/onboarding-flow/hooks/useDepositHydration.d.ts +0 -0
- /package/dist/{src/features → features}/onboarding-flow/hooks/useDepositHydration.js +0 -0
- /package/dist/{src/features → features}/onboarding-flow/hooks/usePendingDepositState.d.ts +0 -0
- /package/dist/{src/features → features}/onboarding-flow/hooks/useSolanaDeposit.d.ts +0 -0
- /package/dist/{src/features → features}/onboarding-flow/index.d.ts +0 -0
- /package/dist/{src/features → features}/onboarding-flow/index.js +0 -0
- /package/dist/{src/features → features}/onboarding-flow/providers/DepositFlowProvider.d.ts +0 -0
- /package/dist/{src/features → features}/onboarding-flow/providers/OnboardingStateProvider.d.ts +0 -0
- /package/dist/{src/features → features}/onboarding-flow/providers/StateProvider.d.ts +0 -0
- /package/dist/{src/features → features}/onboarding-flow/providers/StateProvider.js +0 -0
- /package/dist/{src/features → features}/onboarding-flow/providers/WalletConnectionProvider.d.ts +0 -0
- /package/dist/{src/features → features}/onboarding-flow/providers/debug.d.ts +0 -0
- /package/dist/{src/features → features}/onboarding-flow/providers/index.d.ts +0 -0
- /package/dist/{src/features → features}/onboarding-flow/providers/index.js +0 -0
- /package/dist/{src/features → features}/onboarding-flow/providers/onboardingStateMachine.d.ts +0 -0
- /package/dist/{src/features → features}/onboarding-flow/providers/onboardingStateMachine.js +0 -0
- /package/dist/{src/features → features}/onboarding-flow/screens/00-EntrySelectionScreen.d.ts +0 -0
- /package/dist/{src/features → features}/onboarding-flow/screens/00-EntrySelectionScreen.js +0 -0
- /package/dist/{src/features → features}/onboarding-flow/screens/01-ConnectWalletScreen.d.ts +0 -0
- /package/dist/{src/features → features}/onboarding-flow/screens/01-ConnectWalletScreen.js +0 -0
- /package/dist/{src/features → features}/onboarding-flow/screens/02-TurnkeyAuthScreen.d.ts +0 -0
- /package/dist/{src/features → features}/onboarding-flow/screens/02-TurnkeyAuthScreen.js +0 -0
- /package/dist/{src/features → features}/onboarding-flow/screens/03-TurnkeyPreparingScreen.d.ts +0 -0
- /package/dist/{src/features → features}/onboarding-flow/screens/03-TurnkeyPreparingScreen.js +0 -0
- /package/dist/{src/features → features}/onboarding-flow/screens/04-ChainSelectionScreen.d.ts +0 -0
- /package/dist/{src/features → features}/onboarding-flow/screens/04-ChainSelectionScreen.js +0 -0
- /package/dist/{src/features → features}/onboarding-flow/screens/06-DepositProgressScreen.d.ts +0 -0
- /package/dist/{src/features → features}/onboarding-flow/screens/07-DepositSuccessScreen.d.ts +0 -0
- /package/dist/{src/features → features}/onboarding-flow/screens/07-DepositSuccessScreen.js +0 -0
- /package/dist/{src/features → features}/onboarding-flow/screens/08-AuthLoadingScreen.d.ts +0 -0
- /package/dist/{src/features → features}/onboarding-flow/screens/08-AuthLoadingScreen.js +0 -0
- /package/dist/{src/features → features}/onboarding-flow/screens/09-ErrorScreen.d.ts +0 -0
- /package/dist/{src/features → features}/onboarding-flow/screens/09-ErrorScreen.js +0 -0
- /package/dist/{src/features → features}/onboarding-flow/screens/index.d.ts +0 -0
- /package/dist/{src/features → features}/onboarding-flow/screens/index.js +0 -0
- /package/dist/{src/features → features}/onboarding-flow/turnkey/turnkeySessionMachine.d.ts +0 -0
- /package/dist/{src/features → features}/onboarding-flow/turnkey/turnkeySessionMachine.js +0 -0
- /package/dist/{src/features → features}/onboarding-flow/types.d.ts +0 -0
- /package/dist/{src/features → features}/onboarding-flow/types.js +0 -0
- /package/dist/{src/features → features}/onboarding-flow/utils/bridgeUtils.d.ts +0 -0
- /package/dist/{src/features → features}/onboarding-flow/utils/bridgeUtils.js +0 -0
- /package/dist/{src/features → features}/onboarding-flow/utils/deposit/attestationUtils.d.ts +0 -0
- /package/dist/{src/features → features}/onboarding-flow/utils/deposit/attestationUtils.js +0 -0
- /package/dist/{src/features → features}/onboarding-flow/utils/deposit/bridgeUtils.d.ts +0 -0
- /package/dist/{src/features → features}/onboarding-flow/utils/deposit/bridgeUtils.js +0 -0
- /package/dist/{src/features → features}/onboarding-flow/utils/deposit/claimConfirmation.d.ts +0 -0
- /package/dist/{src/features → features}/onboarding-flow/utils/deposit/depositPolling.d.ts +0 -0
- /package/dist/{src/features → features}/onboarding-flow/utils/deposit/depositPolling.js +0 -0
- /package/dist/{src/features → features}/onboarding-flow/utils/deposit/evmTxInterceptor.d.ts +0 -0
- /package/dist/{src/features → features}/onboarding-flow/utils/deposit/evmTxInterceptor.js +0 -0
- /package/dist/{src/features → features}/onboarding-flow/utils/deposit/nonceUtils.d.ts +0 -0
- /package/dist/{src/features → features}/onboarding-flow/utils/deposit/nonceUtils.js +0 -0
- /package/dist/{src/features → features}/onboarding-flow/utils/deposit/solanaUtils.d.ts +0 -0
- /package/dist/{src/features → features}/onboarding-flow/utils/deposit/solanaUtils.js +0 -0
- /package/dist/{src/features → features}/onboarding-flow/utils/deposit/storage.d.ts +0 -0
- /package/dist/{src/features → features}/onboarding-flow/utils/deposit/storage.js +0 -0
- /package/dist/{src/features → features}/onboarding-flow/utils/deposit/walletUtils.d.ts +0 -0
- /package/dist/{src/features → features}/onboarding-flow/utils/deposit/walletUtils.js +0 -0
- /package/dist/{src/features → features}/onboarding-flow/utils/depositPolling.d.ts +0 -0
- /package/dist/{src/features → features}/onboarding-flow/utils/depositPolling.js +0 -0
- /package/dist/{src/features → features}/onboarding-flow/utils/explorerUrl.d.ts +0 -0
- /package/dist/{src/features → features}/onboarding-flow/utils/explorerUrl.js +0 -0
- /package/dist/{src/features → features}/onboarding-flow/utils/nordUtils.d.ts +0 -0
- /package/dist/{src/features → features}/onboarding-flow/utils/nordUtils.js +0 -0
- /package/dist/{src/features → features}/onboarding-flow/utils/pendingDepositCookie.d.ts +0 -0
- /package/dist/{src/features → features}/onboarding-flow/utils/pendingDepositCookie.js +0 -0
- /package/dist/{src/features → features}/onboarding-flow/utils/pendingDepositStorage.d.ts +0 -0
- /package/dist/{src/features → features}/onboarding-flow/utils/pendingDepositStorage.js +0 -0
- /package/dist/{src/features → features}/onboarding-flow/utils/utils.d.ts +0 -0
- /package/dist/{src/features → features}/onboarding-flow/utils/utils.js +0 -0
- /package/dist/{src/features → features}/onboarding-flow/utils/withImageFallback.d.ts +0 -0
- /package/dist/{src/features → features}/onboarding-flow/utils/withImageFallback.js +0 -0
- /package/dist/{src/hooks → hooks}/index.d.ts +0 -0
- /package/dist/{src/hooks → hooks}/index.js +0 -0
- /package/dist/{src/hooks → hooks}/useN1Wallet.d.ts +0 -0
- /package/dist/{src/hooks → hooks}/useN1Wallet.js +0 -0
- /package/dist/{src/hooks → hooks}/useNordUserInitialization.d.ts +0 -0
- /package/dist/{src/hooks → hooks}/useNordUserInitialization.js +0 -0
- /package/dist/{src/index.d.ts → index.d.ts} +0 -0
- /package/dist/{src/index.js → index.js} +0 -0
- /package/dist/{src/providers → providers}/LazyWalletProvider.d.ts +0 -0
- /package/dist/{src/providers → providers}/N1WalletProvider/ContextBridge.d.ts +0 -0
- /package/dist/{src/providers → providers}/N1WalletProvider/ContextBridge.js +0 -0
- /package/dist/{src/providers → providers}/N1WalletProvider/ModalProvider.d.ts +0 -0
- /package/dist/{src/providers → providers}/N1WalletProvider/ModalProvider.js +0 -0
- /package/dist/{src/providers → providers}/N1WalletProvider/NetworkProvider.d.ts +0 -0
- /package/dist/{src/providers → providers}/N1WalletProvider/NetworkProvider.js +0 -0
- /package/dist/{src/providers → providers}/N1WalletProvider/SessionProvider.d.ts +0 -0
- /package/dist/{src/providers → providers}/N1WalletProvider/SessionProvider.js +0 -0
- /package/dist/{src/providers → providers}/N1WalletProvider/SigningProvider.d.ts +0 -0
- /package/dist/{src/providers → providers}/N1WalletProvider/SigningProvider.js +0 -0
- /package/dist/{src/providers → providers}/N1WalletProvider/ThemingProvider.d.ts +0 -0
- /package/dist/{src/providers → providers}/N1WalletProvider/ThemingProvider.js +0 -0
- /package/dist/{src/providers → providers}/N1WalletProvider/index.d.ts +0 -0
- /package/dist/{src/providers → providers}/N1WalletProvider/index.js +0 -0
- /package/dist/{src/providers → providers}/N1WalletProvider.d.ts +0 -0
- /package/dist/{src/providers → providers}/N1WalletProvider.js +0 -0
- /package/dist/{src/providers → providers}/ShadowRootWrapper.d.ts +0 -0
- /package/dist/{src/providers → providers}/ShadowRootWrapper.js +0 -0
- /package/dist/{src/providers → providers}/WalletErrorBoundary.d.ts +0 -0
- /package/dist/{src/providers → providers}/WalletErrorBoundary.js +0 -0
- /package/dist/{src/services → services}/bootstrap/DepositRecoveryService.d.ts +0 -0
- /package/dist/{src/services → services}/bootstrap/DepositRecoveryService.js +0 -0
- /package/dist/{src/services → services}/bootstrap/DynamicSdkService.d.ts +0 -0
- /package/dist/{src/services → services}/bootstrap/DynamicSdkService.js +0 -0
- /package/dist/{src/services → services}/bootstrap/SessionBootstrapService.d.ts +0 -0
- /package/dist/{src/services → services}/bootstrap/SessionBootstrapService.js +0 -0
- /package/dist/{src/services → services}/bootstrap/TurnkeyBootstrapService.d.ts +0 -0
- /package/dist/{src/services → services}/bootstrap/TurnkeyBootstrapService.js +0 -0
- /package/dist/{src/services → services}/bootstrap/index.d.ts +0 -0
- /package/dist/{src/services → services}/bootstrap/index.js +0 -0
- /package/dist/{src/services → services}/bootstrap/types.d.ts +0 -0
- /package/dist/{src/services → services}/bootstrap/types.js +0 -0
- /package/dist/{src/services → services}/storage/StorageService.d.ts +0 -0
- /package/dist/{src/services → services}/storage/StorageService.js +0 -0
- /package/dist/{src/services → services}/storage/index.d.ts +0 -0
- /package/dist/{src/services → services}/storage/index.js +0 -0
- /package/dist/{src/services → services}/storage/keys.d.ts +0 -0
- /package/dist/{src/services → services}/storage/keys.js +0 -0
- /package/dist/{src/services → services}/storage/types.d.ts +0 -0
- /package/dist/{src/services → services}/storage/types.js +0 -0
- /package/dist/{src/store → store}/index.d.ts +0 -0
- /package/dist/{src/store → store}/index.js +0 -0
- /package/dist/{src/store → store}/selectors.d.ts +0 -0
- /package/dist/{src/store → store}/selectors.js +0 -0
- /package/dist/{src/store → store}/slices/bootstrapSlice.d.ts +0 -0
- /package/dist/{src/store → store}/slices/bootstrapSlice.js +0 -0
- /package/dist/{src/store → store}/slices/configSlice.d.ts +0 -0
- /package/dist/{src/store → store}/slices/configSlice.js +0 -0
- /package/dist/{src/store → store}/slices/index.d.ts +0 -0
- /package/dist/{src/store → store}/slices/index.js +0 -0
- /package/dist/{src/store → store}/slices/sessionSlice.d.ts +0 -0
- /package/dist/{src/store → store}/slices/sessionSlice.js +0 -0
- /package/dist/{src/store → store}/slices/signingSlice.d.ts +0 -0
- /package/dist/{src/store → store}/slices/signingSlice.js +0 -0
- /package/dist/{src/store → store}/slices/uiSlice.d.ts +0 -0
- /package/dist/{src/store → store}/slices/uiSlice.js +0 -0
- /package/dist/{src/store → store}/slices/walletSlice.d.ts +0 -0
- /package/dist/{src/store → store}/slices/walletSlice.js +0 -0
- /package/dist/{src/store → store}/store.d.ts +0 -0
- /package/dist/{src/store → store}/store.js +0 -0
- /package/dist/{src/store → store}/subscriptions/depositPersistence.d.ts +0 -0
- /package/dist/{src/store → store}/subscriptions/depositPersistence.js +0 -0
- /package/dist/{src/store → store}/subscriptions/index.d.ts +0 -0
- /package/dist/{src/store → store}/subscriptions/index.js +0 -0
- /package/dist/{src/store → store}/subscriptions/turnkeyPersistence.d.ts +0 -0
- /package/dist/{src/store → store}/subscriptions/turnkeyPersistence.js +0 -0
- /package/dist/{src/store → store}/types.d.ts +0 -0
- /package/dist/{src/store → store}/types.js +0 -0
- /package/dist/{src/styles → styles}/cdn-fonts.d.ts +0 -0
- /package/dist/{src/styles → styles}/cdn-fonts.js +0 -0
- /package/dist/{src/styles → styles}/embedded-main-css.d.ts +0 -0
- /package/dist/{src/styles → styles}/embedded-main-css.js +0 -0
- /package/dist/{src/turnkey → turnkey}/TurnkeyProvider.d.ts +0 -0
- /package/dist/{src/turnkey → turnkey}/TurnkeyProvider.js +0 -0
- /package/dist/{src/turnkey → turnkey}/createTurnkeyWallet.d.ts +0 -0
- /package/dist/{src/turnkey → turnkey}/createTurnkeyWallet.js +0 -0
- /package/dist/{src/turnkey → turnkey}/createWalletProvider.d.ts +0 -0
- /package/dist/{src/turnkey → turnkey}/createWalletProvider.js +0 -0
- /package/dist/{src/turnkey → turnkey}/index.d.ts +0 -0
- /package/dist/{src/turnkey → turnkey}/index.js +0 -0
- /package/dist/{src/turnkey → turnkey}/turnkeySessionMachine.d.ts +0 -0
- /package/dist/{src/turnkey → turnkey}/turnkeySessionMachine.js +0 -0
- /package/dist/{src/turnkey → turnkey}/turnkeySessionStorage.d.ts +0 -0
- /package/dist/{src/turnkey → turnkey}/turnkeySessionStorage.js +0 -0
- /package/dist/{src/turnkey → turnkey}/types.d.ts +0 -0
- /package/dist/{src/turnkey → turnkey}/types.js +0 -0
- /package/dist/{src/types → types}/wallet.d.ts +0 -0
- /package/dist/{src/types → types}/wallet.js +0 -0
- /package/dist/{src/utils → utils}/address.d.ts +0 -0
- /package/dist/{src/utils → utils}/address.js +0 -0
- /package/dist/{src/utils → utils}/chain.d.ts +0 -0
- /package/dist/{src/utils → utils}/chain.js +0 -0
- /package/dist/{src/utils → utils}/ed25519.d.ts +0 -0
- /package/dist/{src/utils → utils}/ed25519.js +0 -0
- /package/dist/{src/utils → utils}/errors.d.ts +0 -0
- /package/dist/{src/utils → utils}/errors.js +0 -0
- /package/dist/{src/utils → utils}/events.d.ts +0 -0
- /package/dist/{src/utils → utils}/events.js +0 -0
- /package/dist/{src/utils → utils}/formatAmount.d.ts +0 -0
- /package/dist/{src/utils → utils}/formatAmount.js +0 -0
- /package/dist/{src/utils → utils}/logger.d.ts +0 -0
- /package/dist/{src/utils → utils}/logger.js +0 -0
- /package/dist/{src/utils → utils}/shortenString.d.ts +0 -0
- /package/dist/{src/utils → utils}/shortenString.js +0 -0
|
@@ -42,7 +42,7 @@ import { mapChainToBridgeKit } from '../../cctp/bridgeKitClient';
|
|
|
42
42
|
* Returns the amount string that should be deposited to Nord.
|
|
43
43
|
*/
|
|
44
44
|
export var confirmClaimAndGetUsdcBalance = function (_a) { return __awaiter(void 0, [_a], void 0, function (_b) {
|
|
45
|
-
var rpcEndpoint, connection, shouldConfirmOnChain, confirmation, solanaChain, usdcMint, owner, tokenAccounts, totalRaw, decimals, _i, _c, acct, parsed, availableUsdc, amountToDeposit;
|
|
45
|
+
var rpcEndpoint, connection, shouldConfirmOnChain, CONFIRMATION_TIMEOUT_MS_1, timeoutId_1, confirmationPromise, timeoutPromise, confirmation, error_1, solanaChain, usdcMint, owner, tokenAccounts, totalRaw, decimals, _i, _c, acct, parsed, divisor, wholeUnits, remainder, availableUsdc, amountToDeposit;
|
|
46
46
|
var _d, _e, _f, _g, _h;
|
|
47
47
|
var signature = _b.signature, destinationAddress = _b.destinationAddress, amountHint = _b.amountHint, skipConfirmation = _b.skipConfirmation;
|
|
48
48
|
return __generator(this, function (_j) {
|
|
@@ -51,20 +51,51 @@ export var confirmClaimAndGetUsdcBalance = function (_a) { return __awaiter(void
|
|
|
51
51
|
rpcEndpoint = process.env.NEXT_PUBLIC_NORD_SOLANA_URL || getSolanaRpcUrl();
|
|
52
52
|
connection = new Connection(rpcEndpoint);
|
|
53
53
|
shouldConfirmOnChain = Boolean(signature) && !skipConfirmation;
|
|
54
|
-
if (!(shouldConfirmOnChain && signature)) return [3 /*break*/,
|
|
55
|
-
|
|
54
|
+
if (!(shouldConfirmOnChain && signature)) return [3 /*break*/, 4];
|
|
55
|
+
CONFIRMATION_TIMEOUT_MS_1 = 45000;
|
|
56
|
+
timeoutId_1 = null;
|
|
57
|
+
confirmationPromise = connection.confirmTransaction(signature, 'finalized');
|
|
58
|
+
timeoutPromise = new Promise(function (_, reject) {
|
|
59
|
+
timeoutId_1 = setTimeout(function () {
|
|
60
|
+
reject(new Error('Transaction confirmation timed out. The transaction may still be processing.'));
|
|
61
|
+
}, CONFIRMATION_TIMEOUT_MS_1);
|
|
62
|
+
});
|
|
63
|
+
_j.label = 1;
|
|
56
64
|
case 1:
|
|
65
|
+
_j.trys.push([1, 3, , 4]);
|
|
66
|
+
return [4 /*yield*/, Promise.race([confirmationPromise, timeoutPromise])];
|
|
67
|
+
case 2:
|
|
57
68
|
confirmation = _j.sent();
|
|
69
|
+
// Clear timeout as soon as we have a result to prevent memory leak
|
|
70
|
+
if (timeoutId_1 !== null) {
|
|
71
|
+
clearTimeout(timeoutId_1);
|
|
72
|
+
timeoutId_1 = null;
|
|
73
|
+
}
|
|
58
74
|
if ((_d = confirmation.value) === null || _d === void 0 ? void 0 : _d.err) {
|
|
59
75
|
throw new Error('Claim transaction failed on-chain');
|
|
60
76
|
}
|
|
61
|
-
|
|
62
|
-
case
|
|
77
|
+
return [3 /*break*/, 4];
|
|
78
|
+
case 3:
|
|
79
|
+
error_1 = _j.sent();
|
|
80
|
+
// Always clear timeout on error path too
|
|
81
|
+
if (timeoutId_1 !== null) {
|
|
82
|
+
clearTimeout(timeoutId_1);
|
|
83
|
+
timeoutId_1 = null;
|
|
84
|
+
}
|
|
85
|
+
// If timeout, the transaction might still succeed - let it continue and check balance
|
|
86
|
+
if (error_1 instanceof Error && error_1.message.includes('timed out')) {
|
|
87
|
+
console.warn('[ConfirmClaim] Confirmation timed out, checking balance anyway');
|
|
88
|
+
}
|
|
89
|
+
else {
|
|
90
|
+
throw error_1;
|
|
91
|
+
}
|
|
92
|
+
return [3 /*break*/, 4];
|
|
93
|
+
case 4:
|
|
63
94
|
solanaChain = mapChainToBridgeKit('solana');
|
|
64
95
|
usdcMint = new PublicKey(solanaChain.usdcAddress);
|
|
65
96
|
owner = new PublicKey(destinationAddress);
|
|
66
97
|
return [4 /*yield*/, connection.getParsedTokenAccountsByOwner(owner, { mint: usdcMint })];
|
|
67
|
-
case
|
|
98
|
+
case 5:
|
|
68
99
|
tokenAccounts = _j.sent();
|
|
69
100
|
totalRaw = BigInt(0);
|
|
70
101
|
decimals = 6;
|
|
@@ -76,7 +107,10 @@ export var confirmClaimAndGetUsdcBalance = function (_a) { return __awaiter(void
|
|
|
76
107
|
totalRaw += BigInt(parsed.amount);
|
|
77
108
|
}
|
|
78
109
|
}
|
|
79
|
-
|
|
110
|
+
divisor = BigInt(Math.pow(10, decimals));
|
|
111
|
+
wholeUnits = totalRaw / divisor;
|
|
112
|
+
remainder = totalRaw % divisor;
|
|
113
|
+
availableUsdc = Number(wholeUnits) + Number(remainder) / Number(divisor);
|
|
80
114
|
// If we are explicitly skipping confirmation (typically "nonce already processed" recovery),
|
|
81
115
|
// do NOT fall back to amountHint. If USDC is not present, it's very likely the user already
|
|
82
116
|
// completed the Nord deposit earlier (or moved funds), so retrying would be misleading.
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"claimConfirmation.js","sourceRoot":"","sources":["../../../../../src/features/onboarding-flow/utils/deposit/claimConfirmation.ts"],"names":[],"mappings":"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","sourcesContent":["import { Connection, PublicKey } from '@solana/web3.js';\nimport { getSolanaRpcUrl } from '../../../../config/solana';\nimport { mapChainToBridgeKit } from '../../cctp/bridgeKitClient';\n\nexport interface ConfirmClaimAndGetUsdcBalanceParams {\n signature: string | null;\n destinationAddress: string;\n amountHint?: string | number | null;\n skipConfirmation?: boolean;\n}\n\n/**\n * Confirms the claim transaction (optional), then reads USDC token balance for the destination address.\n * Returns the amount string that should be deposited to Nord.\n */\nexport const confirmClaimAndGetUsdcBalance = async ({\n signature,\n destinationAddress,\n amountHint,\n skipConfirmation,\n}: ConfirmClaimAndGetUsdcBalanceParams): Promise<{ amount: string; txSignature: string | null }> => {\n const rpcEndpoint = process.env.NEXT_PUBLIC_NORD_SOLANA_URL || getSolanaRpcUrl();\n const connection = new Connection(rpcEndpoint);\n\n const shouldConfirmOnChain = Boolean(signature) && !skipConfirmation;\n if (shouldConfirmOnChain && signature) {\n // Add timeout to prevent hanging on slow RPC\n const CONFIRMATION_TIMEOUT_MS = 45000; // 45 seconds\n\n let timeoutId: ReturnType<typeof setTimeout> | null = null;\n\n const confirmationPromise = connection.confirmTransaction(signature, 'finalized');\n const timeoutPromise = new Promise<never>((_, reject) => {\n timeoutId = setTimeout(() => {\n reject(new Error('Transaction confirmation timed out. The transaction may still be processing.'));\n }, CONFIRMATION_TIMEOUT_MS);\n });\n\n try {\n const confirmation = await Promise.race([confirmationPromise, timeoutPromise]);\n\n // Clear timeout as soon as we have a result to prevent memory leak\n if (timeoutId !== null) {\n clearTimeout(timeoutId);\n timeoutId = null;\n }\n\n if (confirmation.value?.err) {\n throw new Error('Claim transaction failed on-chain');\n }\n } catch (error) {\n // Always clear timeout on error path too\n if (timeoutId !== null) {\n clearTimeout(timeoutId);\n timeoutId = null;\n }\n\n // If timeout, the transaction might still succeed - let it continue and check balance\n if (error instanceof Error && error.message.includes('timed out')) {\n console.warn('[ConfirmClaim] Confirmation timed out, checking balance anyway');\n } else {\n throw error;\n }\n }\n }\n\n const solanaChain = mapChainToBridgeKit('solana');\n const usdcMint = new PublicKey(solanaChain.usdcAddress);\n const owner = new PublicKey(destinationAddress);\n\n // Use parsed token accounts to avoid SPL decoding issues in some environments.\n const tokenAccounts = await connection.getParsedTokenAccountsByOwner(owner, { mint: usdcMint });\n\n let totalRaw = BigInt(0);\n let decimals = 6;\n\n for (const acct of tokenAccounts.value) {\n const parsed = (acct.account.data as any)?.parsed?.info?.tokenAmount;\n if (parsed?.amount) {\n decimals = parsed.decimals ?? decimals;\n totalRaw += BigInt(parsed.amount);\n }\n }\n\n // Use BigInt math to avoid precision loss for large amounts\n // Divide first (get whole units), then handle remainder separately\n const divisor = BigInt(10 ** decimals);\n const wholeUnits = totalRaw / divisor;\n const remainder = totalRaw % divisor;\n\n // Convert to number only after division to preserve precision\n // For USDC with 6 decimals, this safely handles amounts up to 2^53 / 10^6 = ~9 trillion USDC\n const availableUsdc = Number(wholeUnits) + Number(remainder) / Number(divisor);\n // If we are explicitly skipping confirmation (typically \"nonce already processed\" recovery),\n // do NOT fall back to amountHint. If USDC is not present, it's very likely the user already\n // completed the Nord deposit earlier (or moved funds), so retrying would be misleading.\n if (skipConfirmation && availableUsdc <= 0) {\n throw new Error('No USDC available to deposit. This deposit may already be completed. If your deposit was successful, you can click \"Start Over\" to clear this state.');\n }\n\n const amountToDeposit = availableUsdc > 0 ? availableUsdc : Number(amountHint ?? 0);\n\n if (!Number.isFinite(amountToDeposit) || amountToDeposit <= 0) {\n throw new Error('No USDC available after claim to deposit');\n }\n\n return { amount: amountToDeposit.toString(), txSignature: signature };\n};\n\n\n"]}
|
|
@@ -19,7 +19,7 @@ export interface SubmitClaimWithRetryParams {
|
|
|
19
19
|
}
|
|
20
20
|
/**
|
|
21
21
|
* Submits a claim to Bridge Assist. If the deposit does not exist on the server (404),
|
|
22
|
-
* it will create it and retry once.
|
|
22
|
+
* it will create it and retry once. Implements retry limits to prevent infinite loops.
|
|
23
23
|
*/
|
|
24
24
|
export declare const submitClaimWithRetry: (params: SubmitClaimWithRetryParams) => Promise<string>;
|
|
25
25
|
export {};
|
|
@@ -166,47 +166,68 @@ var buildSignAndSubmitClaimTx = function (_a) { return __awaiter(void 0, [_a], v
|
|
|
166
166
|
}); };
|
|
167
167
|
/**
|
|
168
168
|
* Submits a claim to Bridge Assist. If the deposit does not exist on the server (404),
|
|
169
|
-
* it will create it and retry once.
|
|
169
|
+
* it will create it and retry once. Implements retry limits to prevent infinite loops.
|
|
170
170
|
*/
|
|
171
171
|
export var submitClaimWithRetry = function (params) { return __awaiter(void 0, void 0, void 0, function () {
|
|
172
|
-
var
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
172
|
+
var MAX_RETRIES, retryCount, attemptSubmit;
|
|
173
|
+
return __generator(this, function (_a) {
|
|
174
|
+
MAX_RETRIES = 1;
|
|
175
|
+
retryCount = 0;
|
|
176
|
+
attemptSubmit = function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
177
|
+
var error_1, errorName, isBridgeAssistError, errorStatus, is404Error, status_1, retryAfterMs;
|
|
178
|
+
var _a, _b;
|
|
179
|
+
return __generator(this, function (_c) {
|
|
180
|
+
switch (_c.label) {
|
|
181
|
+
case 0:
|
|
182
|
+
_c.trys.push([0, 2, , 9]);
|
|
183
|
+
return [4 /*yield*/, buildSignAndSubmitClaimTx(params)];
|
|
184
|
+
case 1: return [2 /*return*/, _c.sent()];
|
|
185
|
+
case 2:
|
|
186
|
+
error_1 = _c.sent();
|
|
187
|
+
errorName = error_1 instanceof Error ? error_1.name : 'unknown';
|
|
188
|
+
isBridgeAssistError = error_1 instanceof BridgeAssistError || errorName === 'BridgeAssistError';
|
|
189
|
+
errorStatus = isBridgeAssistError ? error_1.status : undefined;
|
|
190
|
+
is404Error = isBridgeAssistError && errorStatus === 404;
|
|
191
|
+
if (!is404Error) return [3 /*break*/, 5];
|
|
192
|
+
if (retryCount >= MAX_RETRIES) {
|
|
193
|
+
throw new Error('Max retries exceeded: Unable to create deposit on Bridge Assist server');
|
|
194
|
+
}
|
|
195
|
+
return [4 /*yield*/, createBridgeDeposit({
|
|
196
|
+
wallet: params.fallbackWallet,
|
|
197
|
+
chain: params.sourceChain,
|
|
198
|
+
solanaAddress: params.destinationAddress,
|
|
199
|
+
amount: params.fallbackAmount,
|
|
200
|
+
bridgeTx: params.bridgeTx,
|
|
201
|
+
depositId: params.depositId,
|
|
202
|
+
attestationId: (_a = params.attestationId) !== null && _a !== void 0 ? _a : undefined,
|
|
203
|
+
})];
|
|
204
|
+
case 3:
|
|
205
|
+
_c.sent();
|
|
206
|
+
retryCount++;
|
|
207
|
+
return [4 /*yield*/, attemptSubmit()];
|
|
208
|
+
case 4: return [2 /*return*/, _c.sent()]; // Recursive retry after creating deposit
|
|
209
|
+
case 5:
|
|
210
|
+
if (!isBridgeAssistError) return [3 /*break*/, 8];
|
|
211
|
+
status_1 = typeof errorStatus === 'number' ? errorStatus : undefined;
|
|
212
|
+
if (!((typeof status_1 === 'number' && status_1 >= 500) || status_1 == null)) return [3 /*break*/, 8];
|
|
213
|
+
if (retryCount >= MAX_RETRIES) {
|
|
214
|
+
throw error_1; // Re-throw original error if max retries exceeded
|
|
215
|
+
}
|
|
216
|
+
retryAfterMs = ((_b = error_1.retryAfter) !== null && _b !== void 0 ? _b : 3) * 1000;
|
|
217
|
+
return [4 /*yield*/, delay(Math.min(Math.max(retryAfterMs, 1000), 15000))];
|
|
218
|
+
case 6:
|
|
219
|
+
_c.sent();
|
|
220
|
+
retryCount++;
|
|
221
|
+
return [4 /*yield*/, attemptSubmit()];
|
|
222
|
+
case 7: return [2 /*return*/, _c.sent()]; // Recursive retry after server error
|
|
223
|
+
case 8:
|
|
224
|
+
// For all other errors, throw immediately
|
|
193
225
|
throw error_1;
|
|
226
|
+
case 9: return [2 /*return*/];
|
|
194
227
|
}
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
solanaAddress: params.destinationAddress,
|
|
199
|
-
amount: params.fallbackAmount,
|
|
200
|
-
bridgeTx: params.bridgeTx,
|
|
201
|
-
depositId: params.depositId,
|
|
202
|
-
attestationId: (_b = params.attestationId) !== null && _b !== void 0 ? _b : undefined,
|
|
203
|
-
})];
|
|
204
|
-
case 6:
|
|
205
|
-
_c.sent();
|
|
206
|
-
return [4 /*yield*/, buildSignAndSubmitClaimTx(params)];
|
|
207
|
-
case 7: return [2 /*return*/, _c.sent()];
|
|
208
|
-
case 8: return [2 /*return*/];
|
|
209
|
-
}
|
|
228
|
+
});
|
|
229
|
+
}); };
|
|
230
|
+
return [2 /*return*/, attemptSubmit()];
|
|
210
231
|
});
|
|
211
232
|
}); };
|
|
212
233
|
//# sourceMappingURL=claimSubmission.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"claimSubmission.js","sourceRoot":"","sources":["../../../../../src/features/onboarding-flow/utils/deposit/claimSubmission.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,EAAE,SAAS,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAClE,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAClG,OAAO,EAAE,oBAAoB,EAAE,wBAAwB,EAAE,MAAM,wBAAwB,CAAC;AACxF,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AAEtC,IAAM,qBAAqB,GAAG,KAAM,CAAC;AACrC,IAAM,oBAAoB,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,KAAM,EAAE,KAAM,CAAC,CAAC;AAEhE,IAAM,4BAA4B,GAAG;;;;;gBAC7B,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;gBACzB,OAAO,GAAG,CAAC,CAAC;gBACZ,SAAS,GAAY,IAAI,CAAC;;;qBACvB,CAAA,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,GAAG,qBAAqB,CAAA;;;;gBAEhC,qBAAM,mBAAmB,EAAE,EAAA;;gBAAtC,QAAQ,GAAG,SAA2B;gBAC5C,IAAI,QAAQ;oBAAE,sBAAO,QAAQ,EAAC;;;;gBAE9B,SAAS,GAAG,GAAC,CAAC;gBACd,qGAAqG;gBACrG,IAAI,GAAC,YAAY,iBAAiB,IAAI,GAAC,CAAC,MAAM,IAAI,IAAI,EAAE,CAAC;oBACvD,MAAM,GAAC,CAAC;gBACV,CAAC;;;gBAEG,OAAO,GAAG,oBAAoB,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,oBAAoB,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;gBACzF,OAAO,IAAI,CAAC,CAAC;gBACb,qBAAM,KAAK,CAAC,OAAO,CAAC,EAAA;;gBAApB,SAAoB,CAAC;;;gBAEvB,IAAI,SAAS,YAAY,iBAAiB,EAAE,CAAC;oBAC3C,MAAM,SAAS,CAAC;gBAClB,CAAC;gBACD,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;;;KACnD,CAAC;AAqBF,IAAM,yBAAyB,GAAG,iEAAO,EAQ8D;;QAPrG,SAAS,eAAA,EACT,OAAO,aAAA,EACP,WAAW,iBAAA,EACX,WAAW,iBAAA,EACX,kBAAkB,wBAAA,EAClB,kBAAkB,wBAAA,EAClB,YAAY,kBAAA;;;;gBAEZ,IAAI,CAAC,kBAAkB,EAAE,CAAC;oBACxB,MAAM,IAAI,KAAK,CAAC,0EAA0E,CAAC,CAAC;gBAC9F,CAAC;gBACD,IAAI,CAAC,SAAS;oBAAE,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAC;gBAC5E,IAAI,CAAC,YAAY;oBAAE,MAAM,IAAI,KAAK,CAAC,8EAA8E,CAAC,CAAC;gBACnH,IAAI,YAAY,CAAC,KAAK,IAAI,YAAY,CAAC,KAAK,KAAK,KAAK,EAAE,CAAC;oBACvD,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAC;gBAC7D,CAAC;gBAEc,qBAAM,YAAY,CAAC,SAAS,EAAE,EAAA;;gBAAvC,MAAM,GAAG,SAA8B;gBAC7C,IAAI,CAAC,CAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,eAAe,CAAA,EAAE,CAAC;oBAC7B,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAC;gBAC/D,CAAC;gBAIgB,qBAAM,4BAA4B,EAAE,EAAA;;gBAA/C,QAAQ,GAAG,SAAoC;gBAEvC,qBAAM,oBAAoB,CAAC;wBACvC,OAAO,SAAA;wBACP,WAAW,aAAA;wBACX,WAAW,aAAA;wBACX,kBAAkB,oBAAA;wBAClB,QAAQ,UAAA;wBACR,WAAW,EAAE,kBAAkB;wBAC/B,kBAAkB,oBAAA;wBAClB,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,2BAA2B;qBAChD,CAAC,EAAA;;gBATI,KAAK,GAAG,SASZ;gBAEF,IAAI,CAAC,KAAK,EAAE,CAAC;oBACX,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAC;gBAC/D,CAAC;gBAEO,EAAE,GAAsC,KAAK,GAA3C,EAAE,SAAS,GAA2B,KAAK,UAAhC,EAAE,oBAAoB,GAAK,KAAK,qBAAV,CAAW;gBACvC,qBAAM,MAAM,CAAC,eAAe,CAAC,EAAS,CAAC,EAAA;;gBAAhD,MAAM,GAAG,SAAuC;gBACtD,IAAI,CAAC,CAAC,MAAM,YAAY,oBAAoB,CAAC,EAAE,CAAC;oBAC9C,MAAM,IAAI,KAAK,CAAC,oDAAoD,CAAC,CAAC;gBACxE,CAAC;gBAGK,OAAO,GAAG,IAAI,SAAS,CAAC,kBAAkB,CAAC,CAAC;gBAC5C,WAAW,GAAG,MAAM,CAAC,OAAO,CAAC,iBAAiB,CAAC;gBAC/C,QAAQ,GAAG,WAAW,CAAC,SAAS,CAAC,UAAC,CAAC,IAAK,OAAA,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,EAAjB,CAAiB,CAAC,CAAC;gBACjE,IAAI,QAAQ,GAAG,CAAC,EAAE,CAAC;oBACjB,MAAM,IAAI,KAAK,CAAC,mDAAmD,CAAC,CAAC;gBACvE,CAAC;gBACK,GAAG,GAAG,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;gBACxC,IAAI,CAAC,GAAG,EAAE,CAAC;oBACT,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAC;gBAC1D,CAAC;gBAEK,mBAAmB,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;gBAC1D,MAAM,GAAG,wBAAwB,CAAC,MAAa,CAAC,CAAC;gBAEpC,qBAAM,iBAAiB,CAAC,SAAS,EAAE;wBACpD,OAAO,SAAA;wBACP,WAAW,aAAA;wBACX,WAAW,aAAA;wBACX,kBAAkB,oBAAA;wBAClB,kBAAkB,oBAAA;wBAClB,SAAS,WAAA;wBACT,oBAAoB,sBAAA;wBACpB,aAAa,EAAE,mBAAmB;wBAClC,MAAM,QAAA;qBACP,CAAC,EAAA;;gBAVI,UAAU,GAAG,SAUjB;gBAEF,IAAI,CAAC,CAAA,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,EAAE,CAAA,EAAE,CAAC;oBACpB,MAAM,IAAI,KAAK,CAAC,sDAAsD,CAAC,CAAC;gBAC1E,CAAC;gBAED,sBAAO,UAAU,CAAC,EAAE,EAAC;;;KACtB,CAAC;AAEF;;;GAGG;AACH,MAAM,CAAC,IAAM,oBAAoB,GAAG,UAAO,MAAkC;;;QACrE,WAAW,GAAG,CAAC,CAAC;QAClB,UAAU,GAAG,CAAC,CAAC;QAEb,aAAa,GAAG;;;;;;;wBAEX,qBAAM,yBAAyB,CAAC,MAAM,CAAC,EAAA;4BAA9C,sBAAO,SAAuC,EAAC;;;wBAGzC,SAAS,GAAG,OAAK,YAAY,KAAK,CAAC,CAAC,CAAC,OAAK,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;wBAC5D,mBAAmB,GAAG,OAAK,YAAY,iBAAiB,IAAI,SAAS,KAAK,mBAAmB,CAAC;wBAC9F,WAAW,GAAG,mBAAmB,CAAC,CAAC,CAAE,OAAa,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC;wBAGtE,UAAU,GAAG,mBAAmB,IAAI,WAAW,KAAK,GAAG,CAAC;6BAC1D,UAAU,EAAV,wBAAU;wBACZ,IAAI,UAAU,IAAI,WAAW,EAAE,CAAC;4BAC9B,MAAM,IAAI,KAAK,CAAC,wEAAwE,CAAC,CAAC;wBAC5F,CAAC;wBAED,qBAAM,mBAAmB,CAAC;gCACxB,MAAM,EAAE,MAAM,CAAC,cAAc;gCAC7B,KAAK,EAAE,MAAM,CAAC,WAAW;gCACzB,aAAa,EAAE,MAAM,CAAC,kBAAkB;gCACxC,MAAM,EAAE,MAAM,CAAC,cAAc;gCAC7B,QAAQ,EAAE,MAAM,CAAC,QAAQ;gCACzB,SAAS,EAAE,MAAM,CAAC,SAAS;gCAC3B,aAAa,EAAE,MAAA,MAAM,CAAC,aAAa,mCAAI,SAAS;6BACjD,CAAC,EAAA;;wBARF,SAQE,CAAC;wBAEH,UAAU,EAAE,CAAC;wBACN,qBAAM,aAAa,EAAE,EAAA;4BAA5B,sBAAO,SAAqB,EAAC,CAAC,yCAAyC;;6BAIrE,mBAAmB,EAAnB,wBAAmB;wBACf,WAAS,OAAO,WAAW,KAAK,QAAQ,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC;6BACrE,CAAA,CAAC,OAAO,QAAM,KAAK,QAAQ,IAAI,QAAM,IAAI,GAAG,CAAC,IAAI,QAAM,IAAI,IAAI,CAAA,EAA/D,wBAA+D;wBACjE,IAAI,UAAU,IAAI,WAAW,EAAE,CAAC;4BAC9B,MAAM,OAAK,CAAC,CAAC,kDAAkD;wBACjE,CAAC;wBAEK,YAAY,GAAG,CAAC,MAAC,OAAa,CAAC,UAAU,mCAAI,CAAC,CAAC,GAAG,IAAI,CAAC;wBAC7D,qBAAM,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,IAAI,CAAC,EAAE,KAAM,CAAC,CAAC,EAAA;;wBAA3D,SAA2D,CAAC;wBAC5D,UAAU,EAAE,CAAC;wBACN,qBAAM,aAAa,EAAE,EAAA;4BAA5B,sBAAO,SAAqB,EAAC,CAAC,qCAAqC;;oBAIvE,0CAA0C;oBAC1C,MAAM,OAAK,CAAC;;;;aAEf,CAAC;QAEF,sBAAO,aAAa,EAAE,EAAC;;KACxB,CAAC","sourcesContent":["import { Buffer } from 'buffer';\nimport { PublicKey, VersionedTransaction } from '@solana/web3.js';\nimport { BridgeAssistError } from '../../bridge-assist/types';\nimport { createBridgeDeposit, fetchServerFeePayer, submitBridgeClaim } from '../../bridge-assist';\nimport { constructCctpClaimTx, hashVersionedTransaction } from '../../cctp/solanaClaim';\nimport { delay } from './solanaUtils';\n\nconst FEE_PAYER_WAIT_MAX_MS = 60_000;\nconst FEE_PAYER_BACKOFF_MS = [1000, 2000, 5000, 10_000, 15_000];\n\nconst fetchServerFeePayerWithRetry = async (): Promise<string> => {\n const startedAt = Date.now();\n let attempt = 0;\n let lastError: unknown = null;\n while (Date.now() - startedAt < FEE_PAYER_WAIT_MAX_MS) {\n try {\n const feePayer = await fetchServerFeePayer();\n if (feePayer) return feePayer;\n } catch (e) {\n lastError = e;\n // If the server is unreachable (network/CORS), surface immediately so UI can show it and auto-retry.\n if (e instanceof BridgeAssistError && e.status == null) {\n throw e;\n }\n }\n const backoff = FEE_PAYER_BACKOFF_MS[Math.min(attempt, FEE_PAYER_BACKOFF_MS.length - 1)];\n attempt += 1;\n await delay(backoff);\n }\n if (lastError instanceof BridgeAssistError) {\n throw lastError;\n }\n throw new Error('Server fee payer not available');\n};\n\ntype SolanaWalletLike = {\n chain?: string;\n getSigner: () => Promise<{ signTransaction?: (tx: unknown) => Promise<unknown> } | null>;\n};\n\nexport interface SubmitClaimWithRetryParams {\n depositId: string;\n message: string;\n attestation: string;\n sourceChain: string;\n destinationAddress: string;\n lookupTableAddress: string;\n solanaWallet: SolanaWalletLike;\n fallbackWallet: string;\n fallbackAmount: string;\n bridgeTx: string;\n attestationId: string | null;\n}\n\nconst buildSignAndSubmitClaimTx = async ({\n depositId,\n message,\n attestation,\n sourceChain,\n destinationAddress,\n lookupTableAddress,\n solanaWallet,\n}: Omit<SubmitClaimWithRetryParams, 'fallbackWallet' | 'fallbackAmount' | 'bridgeTx' | 'attestationId'>): Promise<string> => {\n if (!lookupTableAddress) {\n throw new Error('CCTP lookup table not configured (NEXT_PUBLIC_CCTP_LOOKUP_TABLE_ADDRESS)');\n }\n if (!depositId) throw new Error('Missing deposit ID for claim transaction');\n if (!solanaWallet) throw new Error('Solana wallet not connected. Please connect your wallet to finish the claim.');\n if (solanaWallet.chain && solanaWallet.chain !== 'SOL') {\n throw new Error('Connected wallet is not a Solana wallet');\n }\n\n const signer = await solanaWallet.getSigner();\n if (!signer?.signTransaction) {\n throw new Error('Connected wallet cannot sign transactions');\n }\n\n // Bridge Assist fee payer may briefly be unavailable during server startup.\n // Poll with backoff to avoid pausing the flow.\n const feePayer = await fetchServerFeePayerWithRetry();\n\n const built = await constructCctpClaimTx({\n message,\n attestation,\n sourceChain,\n destinationAddress,\n feePayer,\n userAddress: destinationAddress,\n lookupTableAddress,\n rpcUrl: process.env.NEXT_PUBLIC_NORD_SOLANA_URL,\n });\n\n if (!built) {\n throw new Error('Failed to build claim transaction locally');\n }\n\n const { tx, blockhash, lastValidBlockHeight } = built;\n const signed = await signer.signTransaction(tx as any);\n if (!(signed instanceof VersionedTransaction)) {\n throw new Error('Lookup-table claims require a VersionedTransaction');\n }\n\n // Extract user signature from VersionedTransaction signatures\n const userKey = new PublicKey(destinationAddress);\n const accountKeys = signed.message.staticAccountKeys;\n const sigIndex = accountKeys.findIndex((k) => k.equals(userKey));\n if (sigIndex < 0) {\n throw new Error('User pubkey not found in transaction account keys');\n }\n const sig = signed.signatures[sigIndex];\n if (!sig) {\n throw new Error('User signature missing after signing');\n }\n\n const userSignatureBase64 = Buffer.from(sig).toString('base64');\n const txHash = hashVersionedTransaction(signed as any);\n\n const submission = await submitBridgeClaim(depositId, {\n message,\n attestation,\n sourceChain,\n destinationAddress,\n lookupTableAddress,\n blockhash,\n lastValidBlockHeight,\n userSignature: userSignatureBase64,\n txHash,\n });\n\n if (!submission?.tx) {\n throw new Error('Bridge Assist did not return a transaction signature');\n }\n\n return submission.tx;\n};\n\n/**\n * Submits a claim to Bridge Assist. If the deposit does not exist on the server (404),\n * it will create it and retry once. Implements retry limits to prevent infinite loops.\n */\nexport const submitClaimWithRetry = async (params: SubmitClaimWithRetryParams): Promise<string> => {\n const MAX_RETRIES = 1;\n let retryCount = 0;\n\n const attemptSubmit = async (): Promise<string> => {\n try {\n return await buildSignAndSubmitClaimTx(params);\n } catch (error) {\n // Check if this is a BridgeAssistError by name (more reliable across module boundaries)\n const errorName = error instanceof Error ? error.name : 'unknown';\n const isBridgeAssistError = error instanceof BridgeAssistError || errorName === 'BridgeAssistError';\n const errorStatus = isBridgeAssistError ? (error as any).status : undefined;\n\n // Check for 404 first (deposit doesn't exist) - this takes precedence\n const is404Error = isBridgeAssistError && errorStatus === 404;\n if (is404Error) {\n if (retryCount >= MAX_RETRIES) {\n throw new Error('Max retries exceeded: Unable to create deposit on Bridge Assist server');\n }\n\n await createBridgeDeposit({\n wallet: params.fallbackWallet,\n chain: params.sourceChain,\n solanaAddress: params.destinationAddress,\n amount: params.fallbackAmount,\n bridgeTx: params.bridgeTx,\n depositId: params.depositId,\n attestationId: params.attestationId ?? undefined,\n });\n\n retryCount++;\n return await attemptSubmit(); // Recursive retry after creating deposit\n }\n\n // If Bridge Assist temporarily unavailable, retry once with backoff\n if (isBridgeAssistError) {\n const status = typeof errorStatus === 'number' ? errorStatus : undefined;\n if ((typeof status === 'number' && status >= 500) || status == null) {\n if (retryCount >= MAX_RETRIES) {\n throw error; // Re-throw original error if max retries exceeded\n }\n\n const retryAfterMs = ((error as any).retryAfter ?? 3) * 1000;\n await delay(Math.min(Math.max(retryAfterMs, 1000), 15_000));\n retryCount++;\n return await attemptSubmit(); // Recursive retry after server error\n }\n }\n\n // For all other errors, throw immediately\n throw error;\n }\n };\n\n return attemptSubmit();\n};\n\n\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"depositPolling.js","sourceRoot":"","sources":["../../../../../src/features/onboarding-flow/utils/deposit/depositPolling.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n PendingDepositStage,\n PendingDepositState,\n advancePendingDeposit,\n clearPendingDeposit,\n reconcileStages,\n readPendingDeposit,\n writePendingDeposit,\n} from './storage';\n\nexport interface DepositStatus {\n stage: PendingDepositStage;\n tx?: string | null;\n reason?: string | null;\n bridgeTx?: string | null;\n mintTx?: string | null;\n attestationId?: string | null;\n depositId?: string | null;\n}\n\nexport type DepositStatusFetcher = (depositId: string) => Promise<DepositStatus | null>;\n\nexport interface DepositPollerOptions {\n fetchStatus: DepositStatusFetcher;\n intervalMs?: number;\n maxIntervalMs?: number;\n jitterMs?: number;\n readStorage?: () => PendingDepositState | null;\n writeStorage?: (state: PendingDepositState) => PendingDepositState | void;\n clearStorage?: () => void;\n onStatus?: (status: DepositStatus) => void;\n onError?: (error: unknown) => void;\n}\n\nconst DEFAULT_INTERVAL_MS = 3_000;\nconst DEFAULT_MAX_INTERVAL_MS = 15_000;\nconst DEFAULT_JITTER_MS = 250;\n\n/**\n * Adds random jitter to polling intervals to prevent synchronized requests.\n */\nconst addJitter = (base: number, jitterMs: number): number => {\n if (jitterMs <= 0) {\n return base;\n }\n const jitter = Math.floor(Math.random() * jitterMs);\n return base + jitter;\n};\n\nexport interface DepositPoller {\n start: (depositId: string) => void;\n stop: () => void;\n isRunning: () => boolean;\n}\n\n/**\n * Creates a deposit poller that tracks deposit status through bridge stages.\n *\n * Features:\n * - Exponential backoff on errors (doubles interval up to maxIntervalMs)\n * - Jittered intervals to prevent request synchronization\n * - Storage-based state reconciliation between server and client\n * - Auto-stops on completion (solana_confirmed) or failure\n */\nexport const createDepositPoller = (options: DepositPollerOptions): DepositPoller => {\n const readStorageFn = options.readStorage ?? readPendingDeposit;\n const writeStorageFn = options.writeStorage ?? writePendingDeposit;\n const clearStorageFn = options.clearStorage ?? clearPendingDeposit;\n const intervalMs = options.intervalMs ?? DEFAULT_INTERVAL_MS;\n const maxIntervalMs = options.maxIntervalMs ?? DEFAULT_MAX_INTERVAL_MS;\n const jitterMs = options.jitterMs ?? DEFAULT_JITTER_MS;\n\n let activeDepositId: string | null = null;\n let timer: ReturnType<typeof setTimeout> | null = null;\n let currentInterval = intervalMs;\n let running = false;\n\n const stop = () => {\n running = false;\n activeDepositId = null;\n if (timer) {\n clearTimeout(timer);\n timer = null;\n }\n };\n\n const scheduleNext = () => {\n if (!running || !activeDepositId) {\n return;\n }\n const delay = addJitter(currentInterval, jitterMs);\n timer = setTimeout(poll, delay);\n };\n\n const poll = async () => {\n if (!activeDepositId) {\n stop();\n return;\n }\n try {\n const serverStatus = await options.fetchStatus(activeDepositId);\n const localState = readStorageFn();\n const localStage = localState?.stage ?? 'initiated';\n const nextStage = reconcileStages(localStage, serverStatus?.stage);\n\n // Safety check: stop if local state contains a different deposit ID\n if (localState && localState.depositId !== activeDepositId) {\n stop();\n return;\n }\n\n if (serverStatus?.stage) {\n options.onStatus?.(serverStatus);\n }\n\n let workingState = localState;\n if (!workingState && serverStatus) {\n const created = writeStorageFn({\n depositId: activeDepositId,\n wallet: '',\n chain: '',\n amount: '',\n stage: serverStatus.stage,\n tx: serverStatus.tx ?? null,\n reason: serverStatus.reason ?? null,\n updatedAt: Date.now(),\n });\n workingState =\n (created as PendingDepositState | undefined | null) ?? readStorageFn();\n }\n\n // Handle failure: persist error state and stop polling\n if (nextStage === 'failed') {\n if (workingState) {\n advancePendingDeposit(workingState, { stage: 'failed', reason: serverStatus?.reason });\n } else {\n const created = writeStorageFn({\n depositId: activeDepositId,\n wallet: '',\n chain: '',\n amount: '',\n stage: 'failed',\n tx: serverStatus?.tx ?? null,\n reason: serverStatus?.reason ?? null,\n updatedAt: Date.now(),\n });\n workingState =\n (created as PendingDepositState | undefined | null) ?? readStorageFn();\n }\n stop();\n return;\n }\n\n if (workingState) {\n advancePendingDeposit(workingState, {\n stage: nextStage,\n tx: serverStatus?.tx ?? workingState.tx ?? null,\n reason: serverStatus?.reason ?? workingState.reason ?? null,\n });\n }\n\n // Completion: clear storage and stop polling\n if (nextStage === 'solana_confirmed') {\n clearStorageFn();\n stop();\n return;\n }\n\n // Reset interval on success\n currentInterval = intervalMs;\n } catch (error) {\n // Exponential backoff on errors\n currentInterval = Math.min(currentInterval * 2, maxIntervalMs);\n options.onError?.(error);\n } finally {\n scheduleNext();\n }\n };\n\n const start = (depositId: string) => {\n if (!depositId) {\n throw new Error('Deposit id is required to start polling');\n }\n if (activeDepositId === depositId && running) {\n return;\n }\n stop();\n activeDepositId = depositId;\n running = true;\n currentInterval = intervalMs;\n void poll();\n };\n\n return {\n start,\n stop,\n isRunning: () => running,\n };\n};\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"evmTxInterceptor.js","sourceRoot":"","sources":["../../../../../src/features/onboarding-flow/utils/deposit/evmTxInterceptor.ts"],"names":[],"mappings":"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","sourcesContent":["import { logger } from '../../../../utils/logger';\n\n/**\n * Interface that matches the EIP-1193 request method signature.\n */\ninterface Eip1193Provider {\n request: (args: { method: string; params?: any[] | any }) => Promise<any>;\n}\n\n/**\n * ERC20 function selectors to ignore when looking for burn transactions.\n * Currently ignoring:\n * - increaseAllowance(address,uint256) -> 0x39509351\n */\nconst IGNORED_SELECTORS = new Set([\n '0x39509351', // increaseAllowance\n]);\n\n/**\n * Intercepts EIP-1193 provider requests to capture transaction hashes for specific actions.\n * This is used to capture the \"Burn\" transaction hash in CCTP flows *before* the\n * high-level BridgeKit client resolves, allowing for immediate UI updates and state persistence.\n */\nexport class EvmTxInterceptor {\n private capturedTx: string | null = null;\n private readonly callback: (txHash: string) => void;\n\n constructor(onTxCaptured: (txHash: string) => void) {\n this.callback = onTxCaptured;\n }\n\n /**\n * Wraps an EIP-1193 provider (or generic wallet object with a request method)\n * to intercept eth_sendTransaction and eth_sendRawTransaction calls.\n */\n public wrap(provider: Eip1193Provider | any): any {\n if (!provider || typeof provider.request !== 'function') {\n return provider;\n }\n\n const self = this;\n const originalRequest = provider.request.bind(provider);\n\n return {\n ...provider,\n request: async (args: any) => {\n const result = await originalRequest(args);\n self.inspectRequest(args, result);\n return result;\n },\n };\n }\n\n private inspectRequest(args: any, result: any) {\n // If we already captured a tx, we stop inspecting to avoid overwriting with subsequent calls\n // (though typically there's only one relevant tx per flow).\n if (this.capturedTx) return;\n\n const method = String(args?.method ?? '');\n\n // We only care about transaction sending methods\n if (method !== 'eth_sendTransaction' && method !== 'eth_sendRawTransaction') {\n return;\n }\n\n // Result of these methods should be a transaction hash string (0x...)\n if (typeof result !== 'string' || !result.startsWith('0x')) {\n return;\n }\n\n try {\n if (this.shouldIgnoreTransaction(method, args)) {\n return;\n }\n\n // If we got here, it's a transaction we want to capture\n this.capturedTx = result;\n logger.info('[EvmTxInterceptor] Captured EVM tx hash', {\n method,\n tx: result,\n });\n\n this.callback(result);\n\n } catch (e) {\n logger.warn('[EvmTxInterceptor] Failed to inspect transaction', e);\n }\n }\n\n private shouldIgnoreTransaction(method: string, args: any): boolean {\n // If it's a raw tx string, we can't easily parse it without a library like ethers/viem\n // to decode the RLP and data. For safety, we avoid capturing these unless we are sure.\n // However, typically CCTP flows via wagmi/viem might use sendTransaction with an object.\n const params = Array.isArray(args?.params) ? args.params[0] : undefined;\n\n // eth_sendRawTransaction takes a hex string as the first param\n if (method === 'eth_sendRawTransaction' && typeof params === 'string') {\n // Logic decision: If we can't inspect the data, we might capture the wrong tx (e.g. approve).\n // So we skip raw transactions. BridgeKit usually handles the flow so we rely on return value fallback.\n return true;\n }\n\n // eth_sendTransaction takes a transaction object\n if (typeof params === 'object' && params !== null) {\n const dataField = (params.data ?? params.input ?? '') as unknown;\n const data = typeof dataField === 'string' ? dataField.toLowerCase() : '';\n\n // Check function selector (first 4 bytes = 8 hex chars + '0x' prefix = 10 chars)\n const selector = data.length >= 10 ? data.slice(0, 10) : '';\n\n if (selector && IGNORED_SELECTORS.has(selector)) {\n return true;\n }\n }\n\n return false;\n }\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nonceUtils.js","sourceRoot":"","sources":["../../../../../src/features/onboarding-flow/utils/deposit/nonceUtils.ts"],"names":[],"mappings":"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","sourcesContent":["import { Connection, PublicKey } from '@solana/web3.js';\nimport { Buffer } from 'buffer';\nimport { getSolanaRpcUrl } from '../../../../config/solana';\nimport { logger } from '../../../../utils/logger';\nimport { mapChainToBridgeKit } from '../../cctp/bridgeKitClient';\n\n// Normalize nonce from Iris API (decimal) or hex into a 32-byte buffer for PDA derivation.\nconst normalizeNonceToBuffer = (nonce: string): { buf: Buffer; hex: string } | null => {\n try {\n const trimmed = nonce.trim();\n if (!trimmed) return null;\n\n let hex = '';\n if (trimmed.startsWith('0x')) {\n hex = trimmed.slice(2);\n } else if (/^\\d+$/.test(trimmed)) {\n hex = BigInt(trimmed).toString(16);\n } else {\n hex = trimmed;\n }\n\n const paddedHex = hex.padStart(64, '0');\n const buf = Buffer.from(paddedHex, 'hex');\n if (buf.length !== 32) return null;\n\n return { buf, hex: paddedHex };\n } catch {\n return null;\n }\n};\n\n/**\n * Checks if the `used_nonce` PDA exists for the given nonce.\n * If it exists, the claim was already processed on Solana and we should not submit it again.\n */\nexport const checkUsedNonceAccount = async (nonce?: string | null): Promise<boolean> => {\n if (!nonce) return false;\n\n try {\n const solanaChain = mapChainToBridgeKit('solana');\n const v2config = solanaChain.cctp?.contracts?.v2;\n if (!v2config || v2config.type !== 'split') {\n logger.warn('[BridgeDeposit] Cannot check used nonce: unsupported CCTP config');\n return false;\n }\n\n const normalized = normalizeNonceToBuffer(nonce);\n if (!normalized) {\n logger.warn('[BridgeDeposit] Invalid nonce format for used_nonce check', { nonce });\n return false;\n }\n\n const connection = new Connection(process.env.NEXT_PUBLIC_NORD_SOLANA_URL || getSolanaRpcUrl());\n const messageTransmitterProgramId = new PublicKey(v2config.messageTransmitter);\n const [usedNoncePda] = PublicKey.findProgramAddressSync(\n [Buffer.from('used_nonce'), normalized.buf],\n messageTransmitterProgramId,\n );\n const accountInfo = await connection.getAccountInfo(usedNoncePda);\n const exists = !!accountInfo && (accountInfo.data?.length ?? 0) > 0;\n\n logger.info('[BridgeDeposit] Used nonce account check', {\n nonce,\n paddedNonceHex: normalized.hex,\n usedNoncePda: usedNoncePda.toBase58(),\n exists,\n dataLength: accountInfo?.data?.length ?? 0,\n });\n\n return exists;\n } catch (error) {\n logger.warn('[BridgeDeposit] Failed to check used nonce account', {\n nonce,\n error,\n errorMessage: error instanceof Error ? error.message : String(error),\n });\n return false;\n }\n};\n\n\n"]}
|
package/dist/{src/features → features}/onboarding-flow/utils/deposit/solanaDepositTransaction.d.ts
RENAMED
|
@@ -14,6 +14,7 @@ export interface SolanaDepositTransactionResult {
|
|
|
14
14
|
error?: Error;
|
|
15
15
|
}
|
|
16
16
|
/**
|
|
17
|
-
* Constructs Solana explorer URL for a transaction ID
|
|
17
|
+
* Constructs Solana explorer URL for a transaction ID.
|
|
18
|
+
* Uses devnet cluster for testnet, mainnet-beta for mainnet.
|
|
18
19
|
*/
|
|
19
20
|
export declare function getSolanaExplorerUrl(transactionId: string): string;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
// Network selection based on NEXT_PUBLIC_TESTNET env var (default: true for testnet)
|
|
2
|
+
var isTestnet = process.env.NEXT_PUBLIC_TESTNET !== 'false';
|
|
3
|
+
/**
|
|
4
|
+
* Constructs Solana explorer URL for a transaction ID.
|
|
5
|
+
* Uses devnet cluster for testnet, mainnet-beta for mainnet.
|
|
6
|
+
*/
|
|
7
|
+
export function getSolanaExplorerUrl(transactionId) {
|
|
8
|
+
var baseUrl = 'https://explorer.solana.com/tx/';
|
|
9
|
+
// Mainnet doesn't need cluster param, devnet needs ?cluster=devnet
|
|
10
|
+
return isTestnet
|
|
11
|
+
? "".concat(baseUrl).concat(transactionId, "?cluster=devnet")
|
|
12
|
+
: "".concat(baseUrl).concat(transactionId);
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=solanaDepositTransaction.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"solanaDepositTransaction.js","sourceRoot":"","sources":["../../../../../src/features/onboarding-flow/utils/deposit/solanaDepositTransaction.ts"],"names":[],"mappings":"AAgBA,qFAAqF;AACrF,IAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,mBAAmB,KAAK,OAAO,CAAC;AAE9D;;;GAGG;AACH,MAAM,UAAU,oBAAoB,CAAC,aAAqB;IACxD,IAAM,OAAO,GAAG,iCAAiC,CAAC;IAClD,mEAAmE;IACnE,OAAO,SAAS;QACd,CAAC,CAAC,UAAG,OAAO,SAAG,aAAa,oBAAiB;QAC7C,CAAC,CAAC,UAAG,OAAO,SAAG,aAAa,CAAE,CAAC;AACnC,CAAC","sourcesContent":["/**\n * Interface for transaction result\n */\nexport interface SolanaDepositTransactionResult {\n success: boolean;\n transactionId: string;\n amount: string;\n tokenSymbol: string;\n fromAddress: string;\n toAddress: string;\n networkName: string;\n status: 'Completed' | 'Failed' | 'Pending';\n explorerUrl?: string;\n error?: Error;\n}\n\n// Network selection based on NEXT_PUBLIC_TESTNET env var (default: true for testnet)\nconst isTestnet = process.env.NEXT_PUBLIC_TESTNET !== 'false';\n\n/**\n * Constructs Solana explorer URL for a transaction ID.\n * Uses devnet cluster for testnet, mainnet-beta for mainnet.\n */\nexport function getSolanaExplorerUrl(transactionId: string) {\n const baseUrl = 'https://explorer.solana.com/tx/';\n // Mainnet doesn't need cluster param, devnet needs ?cluster=devnet\n return isTestnet\n ? `${baseUrl}${transactionId}?cluster=devnet`\n : `${baseUrl}${transactionId}`;\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"solanaUtils.js","sourceRoot":"","sources":["../../../../../src/features/onboarding-flow/utils/deposit/solanaUtils.ts"],"names":[],"mappings":"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","sourcesContent":["import { PublicKey } from '@solana/web3.js';\nimport { logger } from '../../../../utils/logger';\nimport { ProtonClientLike, SolanaConnectionLike } from '../../types';\n\nexport const DEPOSIT_POLL_INTERVAL_MS = 5_000;\nexport const SLOT_LOOKUP_TIMEOUT_MS = 2 * 60 * 1_000;\nexport const DEPOSIT_EVENT_TIMEOUT_MS = 5 * 60 * 1_000;\nexport const NORD_ACK_TIMEOUT_MS = 5 * 60 * 1_000;\n\nexport const delay = (ms: number) =>\n new Promise<void>((resolve) => {\n setTimeout(resolve, ms);\n });\n\nexport const waitForTransactionSlot = async (\n connection: SolanaConnectionLike,\n signature: string\n): Promise<number> => {\n logger.debug('Waiting for Solana confirmation for deposit', { signature });\n const deadline = Date.now() + SLOT_LOOKUP_TIMEOUT_MS;\n\n while (Date.now() < deadline) {\n const status = await connection.getSignatureStatuses([signature], {\n searchTransactionHistory: true,\n });\n const info = status.value?.[0];\n\n if (info?.err) {\n throw new Error('Deposit transaction failed to confirm on Solana.');\n }\n\n if (info && typeof info.slot === 'number') {\n return info.slot;\n }\n\n await delay(2_000);\n }\n\n throw new Error('Timed out waiting for Solana confirmation of the deposit.');\n};\n\nexport const waitForDepositEventIndex = async (\n protonClient: ProtonClientLike,\n recipient: PublicKey,\n slot: number\n): Promise<number> => {\n logger.debug('Polling Proton for deposit entry', { slot });\n const deadline = Date.now() + DEPOSIT_EVENT_TIMEOUT_MS;\n\n while (Date.now() < deadline) {\n const deposits = await protonClient.depositsForRecipient(recipient, {\n startSlot: slot,\n order: 'desc',\n });\n\n if (Array.isArray(deposits)) {\n const matchingDeposit = deposits.find((deposit) => {\n const depositSlot =\n typeof deposit.createdAtSlot === 'string'\n ? Number(deposit.createdAtSlot)\n : deposit.createdAtSlot;\n return Number.isFinite(depositSlot) && depositSlot === slot;\n });\n\n if (matchingDeposit) {\n const rawEventIndex =\n matchingDeposit.eventIndex === undefined ||\n matchingDeposit.eventIndex === null\n ? null\n : Number(matchingDeposit.eventIndex);\n\n if (Number.isFinite(rawEventIndex)) {\n return rawEventIndex as number;\n }\n }\n }\n\n await delay(DEPOSIT_POLL_INTERVAL_MS);\n }\n\n throw new Error('Timed out waiting for Nord to index the deposit event.');\n};\n\nexport const waitForNordAcknowledgement = async (\n nord: { getActionNonce: () => Promise<number | string | bigint> },\n targetEventIndex: number\n): Promise<void> => {\n logger.debug('Polling Nord for deposit acknowledgement', {\n targetEventIndex,\n });\n const deadline = Date.now() + NORD_ACK_TIMEOUT_MS;\n\n while (Date.now() < deadline) {\n const nonce = await nord.getActionNonce();\n const normalized =\n typeof nonce === 'bigint'\n ? Number(nonce)\n : typeof nonce === 'string'\n ? Number(nonce)\n : nonce;\n\n if (Number.isFinite(normalized) && normalized >= targetEventIndex) {\n return;\n }\n\n await delay(DEPOSIT_POLL_INTERVAL_MS);\n }\n\n throw new Error('Timed out waiting for N1 to process the deposit.');\n};\n\n"]}
|
|
@@ -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 @@
|
|
|
1
|
+
{"version":3,"file":"walletUtils.js","sourceRoot":"","sources":["../../../../../src/features/onboarding-flow/utils/deposit/walletUtils.ts"],"names":[],"mappings":"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","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"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"depositPolling.js","sourceRoot":"","sources":["../../../../src/features/onboarding-flow/utils/depositPolling.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC","sourcesContent":["// Convenience re-export for backwards compatibility with older imports/tests.\nexport { createDepositPoller } from './deposit/depositPolling';\n\n\n\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"explorerUrl.js","sourceRoot":"","sources":["../../../../src/features/onboarding-flow/utils/explorerUrl.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,CAAC,IAAM,gBAAgB,GAAG,UAAC,OAAkC,EAAE,EAA6B;IAChG,IAAI,CAAC,OAAO,IAAI,CAAC,EAAE,EAAE,CAAC;QACpB,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAM,OAAO,GAAG,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;IACvE,OAAO,UAAG,OAAO,cAAI,EAAE,CAAE,CAAC;AAC5B,CAAC,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,IAAM,eAAe,GAAG,UAC7B,QAAwB,EACxB,YAA4B,EAC5B,EAAkB;IAElB,IAAI,QAAQ;QAAE,OAAO,QAAQ,CAAC;IAC9B,OAAO,gBAAgB,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC;AAC5C,CAAC,CAAC;AAEF;;;GAGG;AACH,MAAM,CAAC,IAAM,oBAAoB,GAAG,UAAC,KAAgC;;IACnE,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC;IACxB,QAAQ,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;QAC5B,KAAK,UAAU,CAAC;QAChB,KAAK,KAAK;YACR,OAAO,MAAA,OAAO,CAAC,GAAG,CAAC,0BAA0B,mCAAI,IAAI,CAAC;QACxD,KAAK,UAAU,CAAC;QAChB,KAAK,KAAK,CAAC;QACX,KAAK,cAAc;YACjB,OAAO,MAAA,MAAA,OAAO,CAAC,GAAG,CAAC,kCAAkC,mCAAI,OAAO,CAAC,GAAG,CAAC,0BAA0B,mCAAI,IAAI,CAAC;QAC1G,KAAK,MAAM;YACT,OAAO,MAAA,MAAA,OAAO,CAAC,GAAG,CAAC,8BAA8B,mCAAI,OAAO,CAAC,GAAG,CAAC,0BAA0B,mCAAI,IAAI,CAAC;QACtG,KAAK,QAAQ;YACX,OAAO,MAAA,OAAO,CAAC,GAAG,CAAC,gCAAgC,mCAAI,IAAI,CAAC;QAC9D;YACE,OAAO,IAAI,CAAC;IAChB,CAAC;AACH,CAAC,CAAC","sourcesContent":["/**\n * Builds an explorer URL by appending transaction hash to base URL.\n * Normalizes trailing slashes to prevent double slashes.\n */\nexport const buildExplorerUrl = (baseUrl: string | null | undefined, tx: string | null | undefined): string | null => {\n if (!baseUrl || !tx) {\n return null;\n }\n const trimmed = baseUrl.endsWith('/') ? baseUrl.slice(0, -1) : baseUrl;\n return `${trimmed}/${tx}`;\n};\n\n/**\n * Selects explorer URL: uses provided URL if available, otherwise builds from fallback base.\n */\nexport const pickExplorerUrl = (\n provided?: string | null,\n fallbackBase?: string | null,\n tx?: string | null\n): string | null => {\n if (provided) return provided;\n return buildExplorerUrl(fallbackBase, tx);\n};\n\n/**\n * Returns the explorer base URL for a given chain, reading from environment variables.\n * Falls back to Etherscan for EVM chains if chain-specific explorer is not configured.\n */\nexport const explorerBaseForChain = (chain: string | null | undefined): string | null => {\n if (!chain) return null;\n switch (chain.toLowerCase()) {\n case 'ethereum':\n case 'evm':\n return process.env.NEXT_PUBLIC_ETHERSCAN_BASE ?? null;\n case 'arbitrum':\n case 'arb':\n case 'arbitrum-one':\n return process.env.NEXT_PUBLIC_ARBITRUM_EXPLORER_BASE ?? process.env.NEXT_PUBLIC_ETHERSCAN_BASE ?? null;\n case 'base':\n return process.env.NEXT_PUBLIC_BASE_EXPLORER_BASE ?? process.env.NEXT_PUBLIC_ETHERSCAN_BASE ?? null;\n case 'solana':\n return process.env.NEXT_PUBLIC_SOLANA_EXPLORER_BASE ?? null;\n default:\n return null;\n }\n};\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nordUtils.js","sourceRoot":"","sources":["../../../../src/features/onboarding-flow/utils/nordUtils.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEA;;;;;GAKG;AACH,MAAM,UAAU,gBAAgB,CAAC,IAA6B;IAC5D,OAAO,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,CAAC,YAAY,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,gBAAgB,IAAI,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;AAC3F,CAAC;AAED;;;GAGG;AACH,IAAI,mBAA6C,CAAC;AAElD,MAAM,UAAgB,qBAAqB;;;YACzC,IAAI,CAAC,mBAAmB,EAAE,CAAC;gBACzB,mBAAmB,GAAG,MAAM,CAAC,gBAAgB,CAAC,CAAC,IAAI,CAAC,UAAC,MAAM,IAAK,OAAA,MAAM,CAAC,QAAQ,EAAf,CAAe,CAAC,CAAC;YACnF,CAAC;YACD,sBAAO,mBAAmB,EAAC;;;CAC5B","sourcesContent":["import type { Nord } from '@n1xyz/nord-ts';\n\n/**\n * Check if Nord is properly configured\n *\n * @param nord Nord instance\n * @returns Whether Nord is properly configured\n */\nexport function isNordConfigured(nord: Nord | null | undefined): boolean {\n return !!nord && !!nord.webServerUrl && (!!nord.solanaConnection || !!nord.protonClient);\n}\n\n/**\n * Lazy-loads the NordUser class from @n1xyz/nord-ts.\n * Caches the promise to avoid multiple imports.\n */\nlet nordUserCtorPromise: Promise<any> | undefined;\n\nexport async function dynamicImportNordUser() {\n if (!nordUserCtorPromise) {\n nordUserCtorPromise = import('@n1xyz/nord-ts').then((module) => module.NordUser);\n }\n return nordUserCtorPromise;\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pendingDepositCookie.js","sourceRoot":"","sources":["../../../../src/features/onboarding-flow/utils/pendingDepositCookie.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,EACL,qBAAqB,EACrB,mBAAmB,EACnB,yBAAyB,EAGzB,kBAAkB,EAClB,eAAe,GAChB,MAAM,mBAAmB,CAAC;AAI3B,MAAM,CAAC,IAAM,yBAAyB,GAAG,cAAY,OAAA,mBAAmB,EAAE,EAArB,CAAqB,CAAC;AAE3E,MAAM,CAAC,IAAM,wBAAwB,GAAG,UAAC,GAAY;IACnD,OAAA,kBAAkB,CAAC,GAAG,CAAC;AAAvB,CAAuB,CAAC;AAE1B,OAAO,EAAE,yBAAyB,EAAE,qBAAqB,EAAE,eAAe,EAAE,CAAC","sourcesContent":["/**\n * Legacy compatibility layer for older tests and callers.\n *\n * The widget now standardizes pending deposit persistence via `utils/deposit/storage.ts`\n * (localStorage in browser + in-memory fallback in Node/test).\n *\n * These exports keep the previous API surface so existing tests keep working.\n */\nimport {\n advancePendingDeposit,\n clearPendingDeposit,\n createPendingDepositDraft,\n PendingDepositStage,\n PendingDepositState,\n readPendingDeposit,\n reconcileStages,\n} from './deposit/storage';\n\nexport type { PendingDepositStage, PendingDepositState };\n\nexport const clearPendingDepositCookie = (): void => clearPendingDeposit();\n\nexport const readPendingDepositCookie = (now?: number): PendingDepositState | null =>\n readPendingDeposit(now);\n\nexport { createPendingDepositDraft, advancePendingDeposit, reconcileStages };\n\n\n\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pendingDepositStorage.js","sourceRoot":"","sources":["../../../../src/features/onboarding-flow/utils/pendingDepositStorage.ts"],"names":[],"mappings":"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","sourcesContent":["import { logger } from '../../../utils/logger';\nimport { createDepositError } from '../../../utils/errors';\n\nconst PENDING_META_KEY = 'n1_pending_deposits';\n\nexport interface PendingDeposit {\n depositId: string;\n bridgeTx: string;\n amount: string;\n timestamp: number;\n status: 'pending' | 'submitted' | 'completed' | 'failed';\n attestationId?: string | null;\n sourceChain?: string;\n destinationChain?: string;\n}\n\nexport const readPendingDeposits = (): PendingDeposit[] => {\n if (typeof window === 'undefined') return [];\n const raw = window.localStorage.getItem(PENDING_META_KEY);\n if (!raw) return [];\n try {\n const parsed = JSON.parse(raw);\n if (Array.isArray(parsed)) {\n return parsed as PendingDeposit[];\n }\n return [];\n } catch {\n return [];\n }\n};\n\nexport const addPendingDeposit = (deposit: PendingDeposit) => {\n if (typeof window === 'undefined') return;\n const current = readPendingDeposits();\n // Avoid duplicates\n if (current.some(d => d.bridgeTx === deposit.bridgeTx)) return;\n \n const updated = [...current, deposit];\n try {\n window.localStorage.setItem(PENDING_META_KEY, JSON.stringify(updated));\n } catch (e) {\n logger.logError(createDepositError('BRIDGE_FAILED', 'Failed to save pending deposit', {\n cause: e instanceof Error ? e : undefined,\n }));\n }\n};\n\nexport const updatePendingDeposit = (bridgeTx: string, updates: Partial<PendingDeposit>) => {\n if (typeof window === 'undefined') return;\n const current = readPendingDeposits();\n const index = current.findIndex(d => d.bridgeTx === bridgeTx);\n if (index === -1) return;\n\n current[index] = { ...current[index], ...updates };\n try {\n window.localStorage.setItem(PENDING_META_KEY, JSON.stringify(current));\n } catch (e) {\n logger.logError(createDepositError('BRIDGE_FAILED', 'Failed to update pending deposit', {\n cause: e instanceof Error ? e : undefined,\n }));\n }\n};\n\nexport const removePendingDeposit = (bridgeTx: string) => {\n if (typeof window === 'undefined') return;\n const current = readPendingDeposits();\n const updated = current.filter(d => d.bridgeTx !== bridgeTx);\n try {\n window.localStorage.setItem(PENDING_META_KEY, JSON.stringify(updated));\n } catch (e) {\n logger.logError(createDepositError('BRIDGE_FAILED', 'Failed to remove pending deposit', {\n cause: e instanceof Error ? e : undefined,\n }));\n }\n};\n\nexport const clearAllPendingDeposits = () => {\n if (typeof window === 'undefined') return;\n window.localStorage.removeItem(PENDING_META_KEY);\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../../src/features/onboarding-flow/utils/utils.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n generateEd25519KeyPair,\n} from '../../../utils/ed25519';\n\nexport const generateSessionKeyPair = generateEd25519KeyPair;\n\nexport function arrayBufferToBase64(buffer: Uint8Array) {\n let binary = '';\n const bytes = new Uint8Array(buffer);\n for (let i = 0; i < bytes.length; i++) {\n binary += String.fromCharCode(bytes[i]);\n }\n return btoa(binary);\n}\n\n// Convert Base64 string back to Uint8Array\nexport function base64ToUint8Array(base64String: string) {\n const binaryString = atob(base64String);\n const length = binaryString.length;\n const bytes = new Uint8Array(length);\n for (let i = 0; i < length; i++) {\n bytes[i] = binaryString.charCodeAt(i);\n }\n return bytes;\n}\n\n/**\n * Stores Ed25519 session key pair in localStorage, keyed by wallet address.\n * Keys are base64-encoded for storage. Used to persist session keys across page reloads.\n */\nexport function storeSessionKeysInLocalStorage({\n privKey,\n publicKey,\n walletPublicKey,\n chainName,\n}: {\n privKey: Uint8Array;\n publicKey: Uint8Array;\n walletPublicKey: string;\n chainName: string;\n}) {\n const storageKey = `n1_sessionKey_${walletPublicKey}`;\n\n const data = {\n ed25519PrivateKey: arrayBufferToBase64(privKey),\n ed25519PublicKey: arrayBufferToBase64(publicKey),\n walletPublicKey,\n chainName,\n createdAt: new Date().toISOString(),\n };\n\n localStorage.setItem(storageKey, JSON.stringify(data));\n}\n\n/**\n * Retrieves and decodes session keys from localStorage.\n * Validates that public key is 32 bytes. Throws if keys are missing or invalid.\n */\nexport function getSessionKeysFromLocalStorage(walletPublicKey: string): {\n ed25519PrivateKey: Uint8Array;\n ed25519PublicKey: Uint8Array | null;\n walletPublicKey: string;\n chainName: string;\n createdAt: string;\n} | null {\n const storageKey = `n1_sessionKey_${walletPublicKey}`;\n\n const data = localStorage.getItem(storageKey);\n if (data) {\n const parsedData = JSON.parse(data);\n if (parsedData.ed25519PrivateKey) {\n parsedData.ed25519PrivateKey = base64ToUint8Array(\n parsedData.ed25519PrivateKey\n );\n } else {\n throw new Error('Missing ed25519PrivateKey in session storage');\n }\n if (parsedData.ed25519PublicKey) {\n parsedData.ed25519PublicKey = base64ToUint8Array(\n parsedData.ed25519PublicKey\n );\n } else {\n throw new Error('Missing ed25519PublicKey in session storage');\n }\n // Validate keys: check that public key is present and is Uint8Array of length 32\n if (!parsedData.ed25519PublicKey || !(parsedData.ed25519PublicKey instanceof Uint8Array) || parsedData.ed25519PublicKey.length !== 32) {\n throw new Error('Invalid public key in session storage');\n }\n return parsedData;\n }\n return null;\n}\n\n// Function to remove data from local storage by wallet key\nexport function removeKeysFromLocalStorage(walletPublicKey: string) {\n const storageKey = `n1_sessionKey_${walletPublicKey}`;\n\n localStorage.removeItem(storageKey);\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"withImageFallback.js","sourceRoot":"","sources":["../../../../src/features/onboarding-flow/utils/withImageFallback.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAAA,OAAO,KAAwB,MAAM,OAAO,CAAC;AAC7C,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAElD;;;GAGG;AACH,MAAM,UAAU,iBAAiB,CAC/B,gBAAkC;IAElC,2DAA2D;IAC3D,IAAM,iBAAiB,GAAgB,UAAC,KAAK;QAC3C,iDAAiD;QACjD,IAAM,WAAW,GAAG,UAAC,IAAqB;YACxC,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC;gBAChC,OAAO,IAAI,CAAC;YACd,CAAC;YAED,IAAM,OAAO,GAAG,IAA+B,CAAC;YAEhD,4DAA4D;YAC5D,IAAI,OAAO,CAAC,IAAI,KAAK,KAAK,EAAE,CAAC;gBAC3B,IAAM,KAAkD,OAAO,CAAC,KAA4B,EAApF,GAAG,SAAA,EAAE,GAAG,SAAA,EAAE,KAAK,WAAA,EAAE,MAAM,YAAA,EAAE,SAAS,eAAA,EAAK,IAAI,cAA7C,8CAA+C,CAAuC,CAAC;gBAE7F,OAAO,CACL,KAAC,iBAAiB,aAChB,GAAG,EAAE,GAAG,EACR,GAAG,EAAE,GAAG,IAAI,OAAO,EACnB,KAAK,EAAE,KAAK,EACZ,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,SAAS,IAChB,IAAI,EACR,CACH,CAAC;YACJ,CAAC;YAED,+CAA+C;YAC/C,IAAI,OAAO,CAAC,KAAK,IAAI,OAAO,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;gBAC5C,IAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC,GAAG,CACjC,OAAO,CAAC,KAAK,CAAC,QAAQ,EACtB,WAAW,CACZ,CAAC;gBAEF,OAAO,KAAK,CAAC,YAAY,CAAC,OAAO,eAAO,OAAO,CAAC,KAAK,GAAI,QAAQ,CAAC,CAAC;YACrE,CAAC;YAED,OAAO,OAAO,CAAC;QACjB,CAAC,CAAC;QAEF,sDAAsD;QACtD,IAAM,iBAAiB,GAAG,KAAC,gBAAgB,eAAK,KAAK,EAAI,CAAC;QAC1D,OAAO,WAAW,CAAC,iBAAiB,CAAuB,CAAC;IAC9D,CAAC,CAAC;IAEF,iCAAiC;IACjC,IAAM,oBAAoB,GACxB,gBAAgB,CAAC,WAAW,IAAI,gBAAgB,CAAC,IAAI,IAAI,WAAW,CAAC;IACvE,iBAAiB,CAAC,WAAW,GAAG,4BAAqB,oBAAoB,MAAG,CAAC;IAE7E,OAAO,iBAAiB,CAAC;AAC3B,CAAC","sourcesContent":["import React, { ComponentType } from 'react';\nimport { ImageWithFallback } from '../components';\n\n/**\n * HOC that recursively replaces all <img> elements in a component's render tree\n * with ImageWithFallback components to handle broken image URLs gracefully.\n */\nexport function withImageFallback<P extends object>(\n WrappedComponent: ComponentType<P>\n): React.FC<P> {\n // Create a new component that wraps the original component\n const WithImageFallback: React.FC<P> = (props) => {\n // Function to recursively process React elements\n const processNode = (node: React.ReactNode): React.ReactNode => {\n if (!React.isValidElement(node)) {\n return node;\n }\n\n const element = node as React.ReactElement<any>;\n\n // If it's an img element, replace it with ImageWithFallback\n if (element.type === 'img') {\n const { src, alt, width, height, className, ...rest } = element.props as Record<string, any>;\n\n return (\n <ImageWithFallback\n src={src}\n alt={alt || 'Image'}\n width={width}\n height={height}\n className={className}\n {...rest}\n />\n );\n }\n\n // If it has children, process them recursively\n if (element.props && element.props.children) {\n const children = React.Children.map(\n element.props.children,\n processNode\n );\n\n return React.cloneElement(element, { ...element.props }, children);\n }\n\n return element;\n };\n\n // Render the wrapped component and process its output\n const renderedComponent = <WrappedComponent {...props} />;\n return processNode(renderedComponent) as React.ReactElement;\n };\n\n // Set display name for debugging\n const wrappedComponentName =\n WrappedComponent.displayName || WrappedComponent.name || 'Component';\n WithImageFallback.displayName = `withImageFallback(${wrappedComponentName})`;\n\n return WithImageFallback;\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/hooks/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAC;AAC9B,cAAc,6BAA6B,CAAC","sourcesContent":["export * from './useN1Wallet';\nexport * from './useNordUserInitialization';\n\n\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useN1Wallet.js","sourceRoot":"","sources":["../../src/hooks/useN1Wallet.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AACnC,OAAO,EAAE,eAAe,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AAExF;;;;GAIG;AACH,MAAM,UAAU,kBAAkB;IAChC,IAAM,OAAO,GAAG,UAAU,CAAC,eAAe,CAAC,CAAC;IAC5C,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QAC1B,MAAM,IAAI,KAAK,CACb,2DAA2D,CAC5D,CAAC;IACJ,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,0BAA0B;IACxC,IAAM,OAAO,GAAG,UAAU,CAAC,uBAAuB,CAAC,CAAC;IACpD,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QAC1B,MAAM,IAAI,KAAK,CACb,mEAAmE,CACpE,CAAC;IACJ,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC","sourcesContent":["import { useContext } from 'react';\nimport { N1WalletContext, N1InternalWalletContext } from '../context/n1-wallet-context';\n\n/**\n * Hook to access the public N1 wallet context.\n * Provides wallet state, connection status, and user-facing actions.\n * Throws if used outside N1WalletProvider.\n */\nexport function useN1WalletContext() {\n const context = useContext(N1WalletContext);\n if (context === undefined) {\n throw new Error(\n 'useN1WalletContext must be used within a N1WalletProvider'\n );\n }\n return context;\n}\n\n/**\n * Hook to access the internal N1 wallet context.\n * Provides internal state and setters for Dynamic SDK integration.\n * Should only be used by internal components within the widget.\n */\nexport function useN1WalletInternalContext() {\n const context = useContext(N1InternalWalletContext);\n if (context === undefined) {\n throw new Error(\n 'useN1WalletInternalContext must be used within a N1WalletProvider'\n );\n }\n return context;\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useNordUserInitialization.js","sourceRoot":"","sources":["../../src/hooks/useNordUserInitialization.ts"],"names":[],"mappings":"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","sourcesContent":["import { useEffect, useRef } from 'react';\nimport { PublicKey } from '@solana/web3.js';\nimport { signEd25519Message } from '../utils/ed25519';\nimport { WalletError, WalletErrorCode } from '../errors/types';\nimport { logger } from '../utils/logger';\nimport { N1SessionMode } from '../types/wallet';\nimport { useN1WalletContext } from './useN1Wallet';\nimport { useNetwork } from '../providers/N1WalletProvider/NetworkProvider';\nimport { useSession, useSessionActions } from '../providers/N1WalletProvider/SessionProvider';\nimport { useSigning, useSigningActions, type SigningFunction } from '../providers/N1WalletProvider/SigningProvider';\nimport { generateSessionKeyPair, getSessionKeysFromLocalStorage, storeSessionKeysInLocalStorage } from '../features/onboarding-flow/utils/utils';\nimport { dynamicImportNordUser } from '../features/onboarding-flow/utils/nordUtils';\n\n\n\n/**\n * Hook that initializes NordUser and signing functions when a wallet is connected.\n *\n * Sets up:\n * - Session key pair generation/storage\n * - Wallet message signing (Solana)\n * - Wallet transaction signing (Solana)\n * - NordUser instance creation with session keys\n *\n * Runs automatically when address and solanaWallet are available.\n */\nexport function useNordUserInitialization() {\n // Network state\n const { solanaWallet, solanaAddress: address } = useNetwork();\n\n // Session state and actions\n const { nordUser, sessionPubKey } = useSession();\n const { setNordUser, setSessionPubKey } = useSessionActions();\n\n // Signing state and actions\n const { signMessageWithSessionKey, signMessageWithWalletKey, signTransactionWithWalletKey } = useSigning();\n const { setSignMessageWithSessionKey, setSignMessageWithWalletKey, setSignTransactionWithWalletKey } = useSigningActions();\n\n // Legacy context for nord and sessionMode (still passed as props)\n const { sessionMode, nord } = useN1WalletContext();\n\n // Track if we've already initialized signing functions for this address\n // This prevents the circular dependency where the effect sets values that are in its deps\n const initializedForAddressRef = useRef<string | null>(null);\n\n // Reset the initialization guard when address is cleared (disconnect)\n // This ensures signing functions are re-created on reconnect with the same address\n useEffect(() => {\n if (address === null || address === '') {\n initializedForAddressRef.current = null;\n }\n }, [address]);\n\n // Initialize signing functions when wallet connects\n useEffect(() => {\n if (sessionMode !== N1SessionMode.Nord || address === null || address === '') {\n return;\n }\n\n // Skip if we've already initialized for this address\n if (initializedForAddressRef.current === address) {\n return;\n }\n\n const createTransactionSignFunction = () => {\n if (!solanaWallet) {\n return null;\n }\n\n const signTransactionWithWallet = async (\n transaction: any\n ): Promise<any> => {\n try {\n if (solanaWallet.chain === 'SOL') {\n const signedTransaction = await (\n await solanaWallet.getSigner()\n ).signTransaction(transaction);\n logger.debug('Solana transaction signature received');\n return signedTransaction;\n }\n\n throw new WalletError(\n WalletErrorCode.USER_REJECTED,\n 'Unsupported chain',\n { originalError: new Error('Unsupported chain') }\n );\n } catch (error) {\n logger.error('Error signing transaction with wallet:', error);\n throw new WalletError(\n WalletErrorCode.USER_REJECTED,\n 'Failed to sign transaction with wallet',\n { originalError: error }\n );\n }\n };\n\n setSignTransactionWithWalletKey(() => signTransactionWithWallet as SigningFunction);\n return signTransactionWithWallet;\n };\n\n const createWalletMessageSignFunction = () => {\n if (!solanaWallet) {\n return null;\n }\n\n const signMessageWithWallet = async (\n message: Uint8Array\n ): Promise<Uint8Array> => {\n try {\n if (solanaWallet.chain === 'SOL') {\n const signer = await solanaWallet.getSigner();\n if (!signer?.signMessage) {\n throw new Error('signMessage is not supported by this wallet');\n }\n const result = await signer.signMessage(message);\n if (!result?.signature) {\n throw new Error('Wallet did not return a signature');\n }\n logger.debug('Solana message signature received');\n return result.signature;\n }\n\n throw new WalletError(\n WalletErrorCode.USER_REJECTED,\n 'Unsupported chain',\n { originalError: new Error('Unsupported chain') }\n );\n } catch (error) {\n logger.error('Error signing message with wallet:', error);\n throw new WalletError(\n WalletErrorCode.USER_REJECTED,\n 'Failed to sign message with wallet',\n { originalError: error }\n );\n }\n };\n\n setSignMessageWithWalletKey(() => signMessageWithWallet as SigningFunction);\n return signMessageWithWallet;\n };\n\n const createSession = async () => {\n try {\n let sessionKeyPair: { privateKey: Uint8Array; publicKey: Uint8Array } | null = null;\n if (address) {\n try {\n const storedKeys = getSessionKeysFromLocalStorage(address);\n if (storedKeys && storedKeys.ed25519PublicKey) {\n sessionKeyPair = {\n privateKey: storedKeys.ed25519PrivateKey,\n publicKey: storedKeys.ed25519PublicKey,\n };\n }\n } catch (error) {\n logger.error(\n 'Error reconstructing key pair from stored keys:',\n error\n );\n sessionKeyPair = null;\n }\n }\n\n if (!sessionKeyPair) {\n sessionKeyPair = await generateSessionKeyPair();\n }\n\n const signFn = async (message: any): Promise<any> => {\n try {\n if (!sessionKeyPair) {\n throw new Error('Session key pair is not available');\n }\n return await signEd25519Message(message, sessionKeyPair.privateKey);\n } catch (error) {\n logger.error('Error signing with session key:', error);\n throw error;\n }\n };\n\n if (!sessionKeyPair) {\n throw new Error('Session key pair is not available');\n }\n\n storeSessionKeysInLocalStorage({\n privKey: sessionKeyPair.privateKey,\n publicKey: sessionKeyPair.publicKey,\n walletPublicKey: address,\n chainName: solanaWallet?.chain || 'SOL',\n });\n\n setSessionPubKey(sessionKeyPair.publicKey);\n setSignMessageWithSessionKey(() => signFn as SigningFunction);\n return signFn;\n } catch (error) {\n logger.error('Error creating session:', error);\n return null;\n }\n };\n\n // Initialize all signing functions\n const initSigningFunctions = async () => {\n logger.debug('Initializing signing functions for address', { address });\n\n if (solanaWallet) {\n createTransactionSignFunction();\n createWalletMessageSignFunction();\n }\n\n await createSession();\n\n // Mark this address as initialized\n initializedForAddressRef.current = address;\n };\n\n // Call async function and handle any unexpected errors\n initSigningFunctions().catch((error) => {\n logger.error('Failed to initialize signing functions:', error);\n });\n }, [\n solanaWallet,\n address,\n sessionMode,\n setSessionPubKey,\n setSignMessageWithSessionKey,\n setSignMessageWithWalletKey,\n setSignTransactionWithWalletKey,\n ]);\n\n // Initialize NordUser once signing functions are ready\n useEffect(() => {\n if (sessionMode !== N1SessionMode.Nord) {\n return;\n }\n\n const createNordUser = async () => {\n try {\n if (!nord || !address || !sessionPubKey || !signMessageWithSessionKey || !signMessageWithWalletKey || !signTransactionWithWalletKey) {\n return null;\n }\n\n let sessionId: bigint | undefined = undefined;\n if (address) {\n try {\n const sessionKeyData = getSessionKeysFromLocalStorage(address);\n if (sessionKeyData) {\n const sessionIdKey = `n1_sessionId_${address}`;\n const storedSessionId = localStorage.getItem(sessionIdKey);\n if (storedSessionId !== null) {\n sessionId = BigInt(storedSessionId);\n logger.debug('Found existing sessionId in localStorage', {\n sessionId: storedSessionId,\n });\n }\n }\n } catch (error) {\n logger.error('Error retrieving sessionId from localStorage:', error);\n }\n }\n\n const NordUser = await dynamicImportNordUser();\n const user = await NordUser.new({\n nord,\n walletPubkey: new PublicKey(address),\n sessionPubkey: sessionPubKey,\n sessionId,\n signSessionFn: signMessageWithSessionKey,\n signTransactionFn: signTransactionWithWalletKey,\n signMessageFn: signMessageWithWalletKey,\n });\n\n // Update account ID if available (may fail for new accounts)\n try {\n await user.updateAccountId();\n logger.debug('NordUser account ID updated');\n } catch (_) {\n logger.debug('NordUser account ID update skipped (likely new account)');\n }\n\n logger.debug('NordUser initialized', { hasSessionId: Boolean(sessionId) });\n setNordUser(user);\n return user;\n } catch (error) {\n logger.error('Error creating NordUser:', error);\n setNordUser(null);\n return null;\n }\n };\n\n // Only create NordUser when all dependencies are available and nordUser is null\n if (\n signMessageWithSessionKey &&\n signMessageWithWalletKey &&\n signTransactionWithWalletKey &&\n sessionPubKey &&\n nordUser === null\n ) {\n logger.debug('Dependencies available, initializing NordUser');\n createNordUser();\n }\n }, [\n sessionMode,\n nord,\n address,\n signMessageWithSessionKey,\n signMessageWithWalletKey,\n signTransactionWithWalletKey,\n sessionPubKey,\n nordUser,\n setNordUser\n ]);\n} \n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,gBAAgB;AAChB,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAEhE,QAAQ;AACR,OAAO,EACL,eAAe,EACf,aAAa,GAEd,MAAM,gBAAgB,CAAC;AAExB,aAAa;AACb,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAC/D,OAAO,EAAE,OAAO,IAAI,IAAI,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAE9D,4CAA4C;AAC5C,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAEzD,sCAAsC;AACtC,OAAO,EACL,UAAU,EACV,eAAe,EACf,iBAAiB,EACjB,UAAU,EACV,eAAe,EACf,iBAAiB,EACjB,QAAQ,EACR,aAAa,EACb,eAAe,EACf,UAAU,EACV,eAAe,EACf,iBAAiB,EACjB,UAAU,EACV,cAAc,GAUf,MAAM,oCAAoC,CAAC;AAE5C,uCAAuC;AACvC,OAAO,EACL,cAAc,EACd,aAAa,EACb,sBAAsB,EACtB,kBAAkB,EAClB,cAAc,EACd,gBAAgB,EAChB,kBAAkB,EAClB,eAAe,GAChB,MAAM,SAAS,CAAC","sourcesContent":["// Main provider\nexport { N1WalletProvider } from './providers/N1WalletProvider';\n\n// Types\nexport {\n N1ModalViewMode,\n N1SessionMode,\n type N1NordFunctions,\n} from './types/wallet';\n\n// Components\nexport { N1ConnectButton } from './components/N1ConnectButton';\nexport { default as Logo } from './components/Logo';\nexport { N1LoaderAnimation } from './animations/N1Loader';\nexport { ProcessingAnimation } from './animations/Processing';\n\n// Legacy hook (for backwards compatibility)\nexport { useN1WalletContext } from './hooks/useN1Wallet';\n\n// Modern provider hooks (recommended)\nexport {\n useNetwork,\n useNetworkState,\n useNetworkActions,\n useSession,\n useSessionState,\n useSessionActions,\n useModal,\n useModalState,\n useModalActions,\n useSigning,\n useSigningState,\n useSigningActions,\n useTheming,\n useInjectedCss,\n type NetworkState,\n type NetworkActions,\n type SessionState,\n type SessionActions,\n type ModalStateValues,\n type ModalActions,\n type SigningState,\n type SigningActions,\n type ThemingState,\n} from './providers/N1WalletProvider/index';\n\n// Store selectors (for advanced usage)\nexport {\n useWalletStore,\n selectIsReady,\n selectHasActiveSession,\n selectHasAnyWallet,\n selectCanTrade,\n selectCanDeposit,\n selectModalVisible,\n selectModalOpen,\n} from './store';\n"]}
|