@n1xyz/wallet-widget 0.0.28 → 0.0.30

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (169) hide show
  1. package/README.md +89 -11
  2. package/dist/Logic/sessionManager.js +8 -8
  3. package/dist/Logic/sessionManager.js.map +1 -1
  4. package/dist/Logic/transactionManager.d.ts +0 -22
  5. package/dist/Logic/transactionManager.js +0 -189
  6. package/dist/Logic/transactionManager.js.map +1 -1
  7. package/dist/Logic/utils.d.ts +3 -7
  8. package/dist/Logic/utils.js +3 -186
  9. package/dist/Logic/utils.js.map +1 -1
  10. package/dist/Modal/LoadingFallback.js +1 -1
  11. package/dist/Modal/LoadingFallback.js.map +1 -1
  12. package/dist/Modal/N1WalletModal.d.ts +1 -1
  13. package/dist/Modal/N1WalletModal.js +50 -205
  14. package/dist/Modal/N1WalletModal.js.map +1 -1
  15. package/dist/Modal/NTSFlow/views/CreateSessionView.d.ts +1 -1
  16. package/dist/Modal/NordFlow/NordFlow.js +44 -17
  17. package/dist/Modal/NordFlow/NordFlow.js.map +1 -1
  18. package/dist/Modal/NordFlow/components/ChainButton.d.ts +5 -2
  19. package/dist/Modal/NordFlow/components/ChainButton.js +16 -13
  20. package/dist/Modal/NordFlow/components/ChainButton.js.map +1 -1
  21. package/dist/Modal/NordFlow/components/EVMChainsButton.d.ts +2 -1
  22. package/dist/Modal/NordFlow/components/EVMChainsButton.js +11 -9
  23. package/dist/Modal/NordFlow/components/EVMChainsButton.js.map +1 -1
  24. package/dist/Modal/NordFlow/components/Header.d.ts +3 -1
  25. package/dist/Modal/NordFlow/components/Header.js +38 -4
  26. package/dist/Modal/NordFlow/components/Header.js.map +1 -1
  27. package/dist/Modal/NordFlow/components/ImageWithFallback.js +1 -1
  28. package/dist/Modal/NordFlow/components/ImageWithFallback.js.map +1 -1
  29. package/dist/Modal/NordFlow/components/MoreButton.d.ts +1 -1
  30. package/dist/Modal/NordFlow/components/MoreButton.js +4 -4
  31. package/dist/Modal/NordFlow/components/MoreButton.js.map +1 -1
  32. package/dist/Modal/NordFlow/components/TransactionTable.d.ts +1 -1
  33. package/dist/Modal/NordFlow/components/TransactionTable.js +11 -11
  34. package/dist/Modal/NordFlow/components/TransactionTable.js.map +1 -1
  35. package/dist/Modal/NordFlow/components/WaitingMessage.d.ts +3 -1
  36. package/dist/Modal/NordFlow/components/WaitingMessage.js +14 -3
  37. package/dist/Modal/NordFlow/components/WaitingMessage.js.map +1 -1
  38. package/dist/Modal/NordFlow/components/index.d.ts +0 -1
  39. package/dist/Modal/NordFlow/components/index.js +0 -1
  40. package/dist/Modal/NordFlow/components/index.js.map +1 -1
  41. package/dist/Modal/NordFlow/constants.js +12 -48
  42. package/dist/Modal/NordFlow/constants.js.map +1 -1
  43. package/dist/Modal/NordFlow/context/DepositContext.js +112 -41
  44. package/dist/Modal/NordFlow/context/DepositContext.js.map +1 -1
  45. package/dist/Modal/NordFlow/context/FlowContext.d.ts +1 -0
  46. package/dist/Modal/NordFlow/context/FlowContext.js +99 -6
  47. package/dist/Modal/NordFlow/context/FlowContext.js.map +1 -1
  48. package/dist/Modal/NordFlow/context/WalletConnectContext.js +76 -20
  49. package/dist/Modal/NordFlow/context/WalletConnectContext.js.map +1 -1
  50. package/dist/Modal/NordFlow/hoc/withImageFallback.js.map +1 -1
  51. package/dist/Modal/NordFlow/hooks/useTestnetFaucet.d.ts +18 -0
  52. package/dist/Modal/NordFlow/hooks/useTestnetFaucet.js +181 -0
  53. package/dist/Modal/NordFlow/hooks/useTestnetFaucet.js.map +1 -0
  54. package/dist/Modal/NordFlow/screens/01-ConnectWalletScreen.d.ts +1 -1
  55. package/dist/Modal/NordFlow/screens/01-ConnectWalletScreen.js +10 -15
  56. package/dist/Modal/NordFlow/screens/01-ConnectWalletScreen.js.map +1 -1
  57. package/dist/Modal/NordFlow/screens/02-ChainSelectionScreen.d.ts +1 -0
  58. package/dist/Modal/NordFlow/screens/02-ChainSelectionScreen.js +115 -0
  59. package/dist/Modal/NordFlow/screens/02-ChainSelectionScreen.js.map +1 -0
  60. package/dist/Modal/NordFlow/screens/03-AmountInputScreen.d.ts +4 -0
  61. package/dist/Modal/NordFlow/screens/03-AmountInputScreen.js +298 -0
  62. package/dist/Modal/NordFlow/screens/03-AmountInputScreen.js.map +1 -0
  63. package/dist/Modal/NordFlow/screens/04-DepositProgressScreen.d.ts +1 -0
  64. package/dist/Modal/NordFlow/screens/04-DepositProgressScreen.js +29 -0
  65. package/dist/Modal/NordFlow/screens/04-DepositProgressScreen.js.map +1 -0
  66. package/dist/Modal/NordFlow/screens/05-DepositSuccessScreen.d.ts +1 -0
  67. package/dist/Modal/NordFlow/screens/05-DepositSuccessScreen.js +131 -0
  68. package/dist/Modal/NordFlow/screens/05-DepositSuccessScreen.js.map +1 -0
  69. package/dist/Modal/NordFlow/screens/06-AuthLoadingScreen.d.ts +1 -0
  70. package/dist/Modal/NordFlow/screens/06-AuthLoadingScreen.js +37 -0
  71. package/dist/Modal/NordFlow/screens/06-AuthLoadingScreen.js.map +1 -0
  72. package/dist/Modal/NordFlow/screens/07-FinalSuccessScreen.d.ts +5 -0
  73. package/dist/Modal/NordFlow/screens/07-FinalSuccessScreen.js +39 -0
  74. package/dist/Modal/NordFlow/screens/07-FinalSuccessScreen.js.map +1 -0
  75. package/dist/Modal/NordFlow/screens/08-ErrorScreen.d.ts +1 -0
  76. package/dist/Modal/NordFlow/screens/08-ErrorScreen.js +68 -0
  77. package/dist/Modal/NordFlow/screens/08-ErrorScreen.js.map +1 -0
  78. package/dist/Modal/NordFlow/screens/index.d.ts +5 -9
  79. package/dist/Modal/NordFlow/screens/index.js +5 -9
  80. package/dist/Modal/NordFlow/screens/index.js.map +1 -1
  81. package/dist/Modal/NordFlow/types.d.ts +13 -3
  82. package/dist/Modal/NordFlow/types.js +4 -3
  83. package/dist/Modal/NordFlow/types.js.map +1 -1
  84. package/dist/Modal/NordFlow/utils/depositStorage.d.ts +4 -0
  85. package/dist/Modal/NordFlow/utils/depositStorage.js +48 -0
  86. package/dist/Modal/NordFlow/utils/depositStorage.js.map +1 -0
  87. package/dist/Modal/NordFlow/utils/nordUtils.d.ts +1 -1
  88. package/dist/Modal/NordFlow/utils/nordUtils.js +1 -1
  89. package/dist/Modal/NordFlow/utils/nordUtils.js.map +1 -1
  90. package/dist/Provider/LazyWalletProvider.d.ts +1 -1
  91. package/dist/Provider/LazyWalletProvider.js +38 -38
  92. package/dist/Provider/LazyWalletProvider.js.map +1 -1
  93. package/dist/Provider/N1WalletProvider.d.ts +2 -1
  94. package/dist/Provider/N1WalletProvider.js +85 -82
  95. package/dist/Provider/N1WalletProvider.js.map +1 -1
  96. package/dist/Provider/ShadowRootWrapper.d.ts +1 -1
  97. package/dist/Provider/WalletErrorBoundary.d.ts +9 -2
  98. package/dist/Provider/WalletErrorBoundary.js +19 -1
  99. package/dist/Provider/WalletErrorBoundary.js.map +1 -1
  100. package/dist/Provider/hooks/useNordUserInitialization.js +87 -35
  101. package/dist/Provider/hooks/useNordUserInitialization.js.map +1 -1
  102. package/dist/Provider/icons/CoinbaseWalletIcon.d.ts +1 -1
  103. package/dist/Provider/icons/ConnectionDotsSVG.d.ts +1 -1
  104. package/dist/Provider/icons/MetamaskIcon.d.ts +1 -1
  105. package/dist/Provider/icons/PhantomIcon.d.ts +1 -1
  106. package/dist/Provider/icons/UserIcon.d.ts +1 -1
  107. package/dist/Provider/icons/WalletConnectIcon.d.ts +1 -1
  108. package/dist/Provider/types.d.ts +18 -16
  109. package/dist/Provider/types.js +8 -2
  110. package/dist/Provider/types.js.map +1 -1
  111. package/dist/WidgetButton/N1ConnectButton.d.ts +1 -1
  112. package/dist/WidgetButton/N1ConnectButton.js +29 -10
  113. package/dist/WidgetButton/N1ConnectButton.js.map +1 -1
  114. package/dist/animations/N1Loader.d.ts +11 -0
  115. package/dist/animations/N1Loader.js +42 -0
  116. package/dist/animations/N1Loader.js.map +1 -0
  117. package/dist/animations/N1Loader.json +1 -0
  118. package/dist/animations/Processing.d.ts +11 -0
  119. package/dist/animations/Processing.js +42 -0
  120. package/dist/animations/Processing.js.map +1 -0
  121. package/dist/animations/Processing.json +1 -0
  122. package/dist/components/Logo.d.ts +2 -1
  123. package/dist/components/Logo.js +5 -2
  124. package/dist/components/Logo.js.map +1 -1
  125. package/dist/components/QRCodeLoader.d.ts +1 -1
  126. package/dist/components/QRCodeLoader.js +1 -1
  127. package/dist/components/QRCodeLoader.js.map +1 -1
  128. package/dist/components/logos/EVMChainsGroup.js +1 -1
  129. package/dist/components/logos/EVMChainsGroup.js.map +1 -1
  130. package/dist/components/logos/MoreChainsGroup.js +1 -1
  131. package/dist/components/logos/MoreChainsGroup.js.map +1 -1
  132. package/dist/components/logos/index.d.ts +0 -2
  133. package/dist/components/logos/index.js +0 -2
  134. package/dist/components/logos/index.js.map +1 -1
  135. package/dist/config/solana.d.ts +3 -15
  136. package/dist/config/solana.js +6 -29
  137. package/dist/config/solana.js.map +1 -1
  138. package/dist/embedded-main-css.d.ts +1 -1
  139. package/dist/embedded-main-css.js +1 -1
  140. package/dist/embedded-main-css.js.map +1 -1
  141. package/dist/fonts/apk-galeria/APK-Galeria-Bold-Italic-Trial.otf +0 -0
  142. package/dist/fonts/apk-galeria/APK-Galeria-Bold-Trial.otf +0 -0
  143. package/dist/fonts/apk-galeria/APK-Galeria-Extra-Bold-Italic-Trial.otf +0 -0
  144. package/dist/fonts/apk-galeria/APK-Galeria-Extra-Bold-Trial.otf +0 -0
  145. package/dist/fonts/apk-galeria/APK-Galeria-Light-Italic-Trial.otf +0 -0
  146. package/dist/fonts/apk-galeria/APK-Galeria-Light-Trial.otf +0 -0
  147. package/dist/fonts/apk-galeria/APK-Galeria-Medium-Italic-Trial.otf +0 -0
  148. package/dist/fonts/apk-galeria/APK-Galeria-Medium-Trial.otf +0 -0
  149. package/dist/fonts/apk-galeria/APK-Galeria-Regular-Italic-Trial.otf +0 -0
  150. package/dist/fonts/apk-galeria/APK-Galeria-Regular-Trial.otf +0 -0
  151. package/dist/fonts/apk-galeria/APK-Galeria-Semi-Bold-Italic-Trial.otf +0 -0
  152. package/dist/fonts/apk-galeria/APK-Galeria-Semi-Bold-Trial.otf +0 -0
  153. package/dist/fonts/apk-galeria/APK-Galeria-Thin-Italic-Trial.otf +0 -0
  154. package/dist/fonts/apk-galeria/APK-Galeria-Thin-Trial.otf +0 -0
  155. package/dist/index.d.ts +2 -0
  156. package/dist/index.js +2 -0
  157. package/dist/index.js.map +1 -1
  158. package/dist/main.css +2 -2
  159. package/dist/polyfills/windowEthereumGuard.d.ts +6 -0
  160. package/dist/polyfills/windowEthereumGuard.js +28 -0
  161. package/dist/polyfills/windowEthereumGuard.js.map +1 -0
  162. package/dist/utils/dynamicNord.d.ts +2 -0
  163. package/dist/utils/dynamicNord.js +59 -0
  164. package/dist/utils/dynamicNord.js.map +1 -0
  165. package/dist/utils/ed25519.d.ts +8 -0
  166. package/dist/utils/ed25519.js +87 -0
  167. package/dist/utils/ed25519.js.map +1 -0
  168. package/package.json +26 -11
  169. package/dist/utils/dynamicImports.d.ts +0 -25
@@ -1 +1 @@
1
- {"version":3,"file":"DepositContext.js","sourceRoot":"","sources":["../../../../src/Modal/NordFlow/context/DepositContext.tsx"],"names":[],"mappings":"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","sourcesContent":["import React, { createContext, useCallback, useContext, useEffect, useRef, useState } from 'react';\nimport {\n getExplorerUrl,\n TransactionResult,\n} from '../../../Logic/transactionManager';\nimport {\n useN1WalletContext,\n useN1WalletInternalContext,\n} from '../../../Provider/hooks';\nimport { N1SessionMode } from '../../../Provider/types';\nimport { logger } from '../../../utils/logger';\nimport { AVAILABLE_CHAINS } from '../constants';\nimport { FlowState } from '../types';\nimport { isNordConfigured } from '../utils/nordUtils';\nimport { useFlowStateContext } from './FlowContext';\n\n// Define the shape of the deposit context value\nexport interface DepositContextValue {\n amount: string;\n isDepositing: boolean;\n transactionId: string | null;\n transactionResult: TransactionResult | null;\n authStatus: 'loading' | 'success' | 'error';\n authErrorMessage: string | null;\n authStatusMessage: string | null;\n updateAmount: (newAmount: string) => void;\n startDeposit: () => Promise<void>;\n completeDeposit: () => void;\n performAuth: () => Promise<void>;\n}\n\n// Create the context with a default value\nconst DepositContext = createContext<DepositContextValue | undefined>(undefined);\n\n// Props for the provider component\ninterface DepositProviderProps {\n children: React.ReactNode;\n}\n\n/**\n * Provider component for the deposit context\n */\nexport const DepositProvider: React.FC<DepositProviderProps> = ({\n children,\n}) => {\n // Get flow state context\n const {\n state,\n context,\n transition,\n updateContext,\n } = useFlowStateContext();\n\n // Get wallet context\n const {\n address,\n nord,\n signMessageWithSessionKey,\n nordUser,\n } = useN1WalletContext();\n const { sessionMode } = useN1WalletInternalContext();\n\n // chain\n const [selectedChain, setSelectedChain] = useState<string | null>(\n context.selectedChain\n );\n\n // transaction & deposit\n const [amount, setAmount] = useState(context.amount);\n const [isDepositing, setIsDepositing] = useState(false);\n const [transactionId, setTransactionId] = useState<string | null>(context.transactionId);\n const [transactionResult, setTransactionResult] = useState<TransactionResult | null>(null);\n\n\n // auth\n const [authStatus, setAuthStatus] = useState<'loading' | 'success' | 'error'>('loading');\n const [authErrorMessage, setAuthErrorMessage] = useState<string | null>(null);\n const [authStatusMessage, setAuthStatusMessage] = useState<string | null>(null);\n\n // Use refs to track previous values\n const prevContextRef = useRef(context);\n\n\n /**\n * Handle an error by transitioning to error state\n */\n const handleError = useCallback(\n (error: Error) => {\n logger.error('Flow error:', error);\n transition(FlowState.ERROR, { error });\n },\n [transition]\n );\n\n /**\n * Authenticate session\n */\n const performAuth = useCallback(async () => {\n try {\n // Step 1: Tell user to sign transaction\n setAuthStatusMessage(\n 'Please sign the transaction to authenticate your session'\n );\n\n if (!nordUser) {\n throw new Error('Nord user is not initialized');\n }\n\n // Step 2: Call nordUser.refreshSession and get sessionId\n setAuthStatusMessage('Session is being authenticated...');\n\n // Get the session public key from the nordUser\n const sessionPubKey = nordUser.sessionPubKey;\n if (!sessionPubKey) {\n throw new Error('Session public key is not available');\n }\n\n // Refresh the session\n await nordUser.refreshSession(sessionPubKey);\n await nordUser.updateAccountId();\n\n // Get the sessionId after refresh\n const sessionId = nordUser.sessionId;\n if (!sessionId) {\n throw new Error('Failed to get session ID after refresh');\n }\n\n logger.debug('Session refreshed successfully', {\n sessionId: sessionId.toString(),\n });\n\n // Step 3: Store sessionId in localStorage\n if (address) {\n const sessionIdKey = `n1_sessionId_${address}`;\n localStorage.setItem(sessionIdKey, sessionId.toString());\n logger.debug('Stored sessionId in localStorage', { key: sessionIdKey });\n }\n\n // Step 4: Update status to success\n setAuthStatus('success');\n\n // updateContext({ hasActiveSession: true });\n setTimeout(() => {\n transition(FlowState.FINAL_SUCCESS, { hasActiveSession: true, hasNordAccount: true });\n }, 100);\n\n } catch (error) {\n console.error('Authentication error:', error);\n setAuthStatus('error');\n setAuthErrorMessage(\n error instanceof Error ? error.message : 'Unknown error occurred'\n );\n }\n }, [updateContext, transition, address, nordUser]);\n\n /**\n * Update amount for deposit\n */\n const updateAmount = useCallback(\n (newAmount: string) => {\n setAmount(newAmount);\n if (state === FlowState.AMOUNT_INPUT) {\n updateContext({ amount: newAmount });\n } else {\n transition(state, { amount: newAmount });\n }\n },\n [state, transition, updateContext]\n );\n\n /**\n * Start deposit process\n */\n const startDeposit = useCallback(async () => {\n if (isDepositing) return;\n\n logger.debug('Starting deposit process');\n\n if (!amount || parseFloat(amount) <= 0) {\n handleError(new Error('Invalid amount'));\n return;\n }\n\n setIsDepositing(true);\n transition(FlowState.DEPOSIT_PROGRESS);\n\n try {\n const usdcToken = nord!.tokens.find((t: any) => t.symbol === 'USDC');\n\n const txId = await nordUser.depositSpl(\n parseFloat(amount),\n usdcToken!.tokenId\n );\n\n let accountInitialized = false;\n for (let i = 0; i < 70; i++) {\n const exists = await nord?.getUser({ pubkey: address });\n if (exists) {\n accountInitialized = true;\n break;\n }\n await new Promise((resolve) => setTimeout(resolve, 5000));\n }\n\n if (!accountInitialized) {\n throw new Error('Account failed to intialize on N1.');\n }\n\n logger.debug('Deposit successful using Nord-TS', txId);\n\n // Create transaction result object immediately after successful deposit\n const result: TransactionResult = {\n success: true,\n transactionId: txId,\n amount,\n tokenSymbol: 'USDC',\n fromAddress: address || 'Your Wallet',\n toAddress: 'Exchange Account',\n networkName: selectedChain!,\n status: 'Completed',\n explorerUrl: getExplorerUrl(txId),\n };\n\n // Update state with transaction result\n setTransactionId(txId);\n setTransactionResult(result);\n logger.debug('Transaction completed successfully');\n transition(FlowState.DEPOSIT_SUCCESS, { transactionId: txId, hasNordAccount: true });\n } catch (depositError) {\n logger.warn('Error using depositSpl, falling back to mock implementation:', depositError);\n setIsDepositing(false);\n const errorMessage = depositError instanceof Error\n ? depositError.message\n : 'Failed to process deposit';\n\n transition(FlowState.AMOUNT_INPUT, {\n depositError: errorMessage\n });\n return; // Exit early\n }\n }, [\n isDepositing,\n selectedChain,\n amount,\n address,\n sessionMode,\n transition,\n handleError,\n nord,\n signMessageWithSessionKey,\n nordUser,\n ]);\n\n /**\n * Complete the deposit process and move to the next screen\n */\n const completeDeposit = useCallback(() => {\n // Check if user has an active session to determine the next state\n if (context.hasActiveSession) {\n // If user has an active session, go directly to FINAL_SUCCESS\n transition(FlowState.FINAL_SUCCESS, { hasNordAccount: true, hasActiveSession: true });\n } else {\n // Check if there's a sessionId stored in localStorage\n const sessionIdKey = `n1_sessionId_${address}`;\n const storedSessionId = localStorage.getItem(sessionIdKey);\n\n if (storedSessionId !== null) {\n // If we have a sessionId in localStorage (even if it's 0), go directly to FINAL_SUCCESS\n transition(FlowState.FINAL_SUCCESS, { hasNordAccount: true, hasActiveSession: true });\n } else {\n // If user doesn't have an active session and no sessionId in localStorage, go to NORD_AUTH\n transition(FlowState.AUTH_LOADING, { hasNordAccount: true });\n }\n }\n }, [context.hasActiveSession, transition, address]);\n\n\n\n\n\n // Create the context value\n const contextValue: DepositContextValue = {\n amount,\n isDepositing,\n transactionId,\n transactionResult,\n authStatus,\n authErrorMessage,\n authStatusMessage,\n updateAmount,\n startDeposit,\n completeDeposit,\n performAuth,\n };\n\n\n /**\n * Update state based on context changes\n */\n useEffect(() => {\n const prevContext = prevContextRef.current;\n\n // Only update state if the relevant context values have actually changed\n if (context.selectedChain !== prevContext.selectedChain) {\n setSelectedChain(context.selectedChain);\n }\n\n if (context.amount !== prevContext.amount) {\n setAmount(context.amount);\n }\n\n if (context.transactionId !== prevContext.transactionId) {\n setTransactionId(context.transactionId);\n }\n\n // Update the ref to the current context\n prevContextRef.current = context;\n }, [context]);\n\n\n\n return (\n <DepositContext.Provider value={contextValue}>\n {children}\n </DepositContext.Provider>\n );\n};\n\n/**\n * Hook to use the deposit context\n */\nexport const useDepositContext = (): DepositContextValue => {\n const context = useContext(DepositContext);\n if (context === undefined) {\n throw new Error('useDepositContext must be used within a DepositProvider');\n }\n return context;\n}; \n"]}
1
+ {"version":3,"file":"DepositContext.js","sourceRoot":"","sources":["../../../../src/Modal/NordFlow/context/DepositContext.tsx"],"names":[],"mappings":"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","sourcesContent":["import React, { createContext, useCallback, useContext, useEffect, useRef, useState } from 'react';\nimport {\n getExplorerUrl,\n TransactionResult,\n} from '../../../Logic/transactionManager';\nimport { useN1WalletContext } from '../../../Provider/hooks';\nimport { logger } from '../../../utils/logger';\nimport { AVAILABLE_CHAINS } from '../constants';\nimport { FlowState } from '../types';\nimport { useFlowStateContext } from './FlowContext';\nimport { clearLastDepositRecord, saveLastDepositRecord } from '../utils/depositStorage';\n\n// Define the shape of the deposit context value\nexport interface DepositContextValue {\n amount: string;\n isDepositing: boolean;\n transactionId: string | null;\n transactionResult: TransactionResult | null;\n authStatus: 'loading' | 'success' | 'error';\n authErrorMessage: string | null;\n authStatusMessage: string | null;\n updateAmount: (newAmount: string) => void;\n startDeposit: () => Promise<void>;\n completeDeposit: () => void;\n performAuth: () => Promise<void>;\n}\n\n// Create the context with a default value\nconst DepositContext = createContext<DepositContextValue | undefined>(undefined);\n\n// Props for the provider component\ninterface DepositProviderProps {\n children: React.ReactNode;\n}\n\n/**\n * Provider component for the deposit context\n */\nexport const DepositProvider: React.FC<DepositProviderProps> = ({\n children,\n}) => {\n // Get flow state context\n const {\n state,\n context,\n transition,\n updateContext,\n isDebugOverride,\n } = useFlowStateContext();\n\n // Get wallet context\n const {\n address,\n nord,\n nordUser,\n } = useN1WalletContext();\n\n // chain\n const [selectedChain, setSelectedChain] = useState<string | null>(\n context.selectedChain\n );\n\n // transaction & deposit\n const [amount, setAmount] = useState(context.amount);\n const [isDepositing, setIsDepositing] = useState(false);\n const [transactionId, setTransactionId] = useState<string | null>(context.transactionId);\n const [transactionResult, setTransactionResult] = useState<TransactionResult | null>(null);\n\n\n // auth\n const [authStatus, setAuthStatus] = useState<'loading' | 'success' | 'error'>('loading');\n const [authErrorMessage, setAuthErrorMessage] = useState<string | null>(null);\n const [authStatusMessage, setAuthStatusMessage] = useState<string | null>(null);\n\n // Use refs to track previous values\n const prevContextRef = useRef(context);\n\n\n /**\n * Handle an error by transitioning to error state\n */\n const handleError = useCallback(\n (error: Error) => {\n logger.error('Flow error:', error);\n transition(FlowState.ERROR, { error });\n },\n [transition]\n );\n\n const authInFlightRef = useRef(false);\n const waitingForNordUserRef = useRef(false);\n\n /**\n * Authenticate session\n */\n const performAuth = useCallback(async () => {\n if (authInFlightRef.current) {\n return;\n }\n\n authInFlightRef.current = true;\n try {\n // Step 1: Tell user to sign transaction\n setAuthStatusMessage(\n 'Please sign the transaction to authenticate your session'\n );\n\n if (!nordUser) {\n waitingForNordUserRef.current = true;\n setAuthStatus('loading');\n setAuthStatusMessage('Preparing your Nord session…');\n return;\n }\n\n waitingForNordUserRef.current = false;\n\n // Step 2: Call nordUser.refreshSession and get sessionId\n setAuthStatusMessage('Session is being authenticated...');\n\n // Get the session public key from the nordUser\n const sessionPubKey = nordUser.sessionPubKey;\n if (!sessionPubKey) {\n throw new Error('Session public key is not available');\n }\n\n // Refresh the session\n await nordUser.refreshSession();\n await nordUser.updateAccountId();\n\n console.log('nordUser', nordUser);\n\n // Get the sessionId after refresh\n const sessionId = nordUser.sessionId;\n if (!sessionId) {\n throw new Error('Failed to get session ID after refresh');\n }\n\n logger.debug('Session refreshed successfully', {\n sessionId: sessionId.toString(),\n });\n\n // Step 3: Store sessionId in localStorage\n if (address) {\n const sessionIdKey = `n1_sessionId_${address}`;\n localStorage.setItem(sessionIdKey, sessionId.toString());\n logger.debug('Stored sessionId in localStorage', { key: sessionIdKey });\n }\n\n // Step 4: Update status to success\n setAuthStatus('success');\n\n // updateContext({ hasActiveSession: true });\n setTimeout(() => {\n transition(FlowState.FINAL_SUCCESS, { hasActiveSession: true, hasNordAccount: true });\n }, 100);\n\n } catch (error) {\n console.error('Authentication error:', error);\n setAuthStatus('error');\n setAuthErrorMessage(\n error instanceof Error ? error.message : 'Unknown error occurred'\n );\n } finally {\n authInFlightRef.current = false;\n }\n }, [\n updateContext,\n transition,\n address,\n nordUser,\n setAuthStatus,\n setAuthStatusMessage,\n setAuthErrorMessage,\n ]);\n\n useEffect(() => {\n if (waitingForNordUserRef.current && nordUser) {\n performAuth();\n }\n }, [nordUser, performAuth]);\n\n /**\n * Update amount for deposit\n */\n const updateAmount = useCallback(\n (newAmount: string) => {\n setAmount(newAmount);\n if (state === FlowState.AMOUNT_INPUT) {\n updateContext({ amount: newAmount });\n } else {\n transition(state, { amount: newAmount });\n }\n },\n [state, transition, updateContext]\n );\n\n /**\n * Start deposit process\n */\n const startDeposit = useCallback(async () => {\n if (isDepositing) return;\n\n logger.debug('Starting deposit process');\n\n if (!amount || parseFloat(amount) <= 0) {\n handleError(new Error('Invalid amount'));\n return;\n }\n\n setIsDepositing(true);\n transition(FlowState.DEPOSIT_PROGRESS);\n\n try {\n const usdcToken = nord!.tokens.find((t: any) => t.symbol === 'USDC');\n\n const txId = await nordUser.depositSpl(\n parseFloat(amount),\n usdcToken!.tokenId\n );\n\n let accountInitialized = false;\n for (let i = 0; i < 70; i++) {\n const exists = await nord?.getUser({ pubkey: address });\n if (exists) {\n accountInitialized = true;\n break;\n }\n await new Promise((resolve) => setTimeout(resolve, 5000));\n }\n\n if (!accountInitialized) {\n throw new Error('Account failed to intialize on N1.');\n }\n\n logger.debug('Deposit successful using Nord-TS', txId);\n\n // Create transaction result object immediately after successful deposit\n const result: TransactionResult = {\n success: true,\n transactionId: txId,\n amount,\n tokenSymbol: 'USDC',\n fromAddress: address || 'Your Wallet',\n toAddress: 'Exchange Account',\n networkName: selectedChain!,\n status: 'Completed',\n explorerUrl: getExplorerUrl(txId),\n };\n\n const depositRecord = {\n transactionId: txId,\n amount,\n tokenSymbol: 'USDC',\n chainId: context.selectedChainId ?? (selectedChain ?? 'solana'),\n chainName: context.selectedChain ?? (selectedChain ?? 'Solana'),\n chainNetwork: context.selectedChainNetwork ?? null,\n timestamp: Date.now(),\n };\n\n saveLastDepositRecord(address, depositRecord);\n\n // Update state with transaction result\n setTransactionId(txId);\n setTransactionResult(result);\n logger.debug('Transaction completed successfully');\n transition(FlowState.DEPOSIT_SUCCESS, {\n transactionId: txId,\n hasNordAccount: true,\n lastDeposit: depositRecord,\n });\n } catch (depositError) {\n logger.warn('Error using depositSpl, falling back to mock implementation:', depositError);\n setIsDepositing(false);\n const errorMessage = depositError instanceof Error\n ? depositError.message\n : 'Failed to process deposit';\n\n transition(FlowState.AMOUNT_INPUT, {\n depositError: errorMessage\n });\n return; // Exit early\n }\n }, [\n isDepositing,\n selectedChain,\n amount,\n address,\n transition,\n handleError,\n nord,\n nordUser,\n context.selectedChain,\n context.selectedChainId,\n context.selectedChainNetwork,\n ]);\n\n /**\n * Complete the deposit process and move to the next screen\n */\n const completeDeposit = useCallback(() => {\n clearLastDepositRecord(address);\n updateContext({ lastDeposit: null });\n\n if (context.isDepositOnlyFlow) {\n transition(FlowState.FINAL_SUCCESS, {\n hasNordAccount: true,\n hasActiveSession: true,\n isDepositOnlyFlow: false,\n });\n return;\n }\n\n // Check if user has an active session to determine the next state\n if (context.hasActiveSession) {\n // If user has an active session, go directly to FINAL_SUCCESS\n transition(FlowState.FINAL_SUCCESS, {\n hasNordAccount: true,\n hasActiveSession: true,\n isDepositOnlyFlow: false,\n });\n } else {\n // If user doesn't have an active session, go to authentication flow\n transition(FlowState.AUTH_LOADING, { hasNordAccount: true });\n }\n }, [context.hasActiveSession, context.isDepositOnlyFlow, transition, address, updateContext]);\n\n\n\n\n\n // Create the context value\n const contextValue: DepositContextValue = {\n amount,\n isDepositing,\n transactionId,\n transactionResult,\n authStatus,\n authErrorMessage,\n authStatusMessage,\n updateAmount,\n startDeposit,\n completeDeposit,\n performAuth,\n };\n\n\n /**\n * Update state based on context changes\n */\n useEffect(() => {\n const prevContext = prevContextRef.current;\n\n // Only update state if the relevant context values have actually changed\n if (context.selectedChain !== prevContext.selectedChain) {\n setSelectedChain(context.selectedChain);\n }\n\n if (context.amount !== prevContext.amount) {\n setAmount(context.amount);\n }\n\n if (context.transactionId !== prevContext.transactionId) {\n setTransactionId(context.transactionId);\n }\n\n // Update the ref to the current context\n prevContextRef.current = context;\n }, [context]);\n\n useEffect(() => {\n if (!isDebugOverride || state !== FlowState.DEPOSIT_SUCCESS || transactionResult) {\n return;\n }\n\n const mockTransactionId = context.transactionId ?? 'debug-tx-12345';\n const fallbackChain = context.selectedChain ?? AVAILABLE_CHAINS[0]?.name ?? 'Solana';\n setTransactionId(mockTransactionId);\n setTransactionResult({\n success: true,\n transactionId: mockTransactionId,\n amount: context.amount || '1,250',\n tokenSymbol: 'USDC',\n fromAddress: address || 'Debug Wallet',\n toAddress: 'Nord Account',\n networkName: fallbackChain,\n status: 'Completed',\n explorerUrl: getExplorerUrl(mockTransactionId),\n });\n }, [isDebugOverride, state, transactionResult, context, address]);\n\n\n\n return (\n <DepositContext.Provider value={contextValue}>\n {children}\n </DepositContext.Provider>\n );\n};\n\n/**\n * Hook to use the deposit context\n */\nexport const useDepositContext = (): DepositContextValue => {\n const context = useContext(DepositContext);\n if (context === undefined) {\n throw new Error('useDepositContext must be used within a DepositProvider');\n }\n return context;\n}; \n"]}
@@ -4,6 +4,7 @@ export interface FlowStateContextValue {
4
4
  state: FlowState;
5
5
  context: FlowContextType;
6
6
  isClosing: boolean;
7
+ isDebugOverride: boolean;
7
8
  transition: (targetState: FlowState, contextUpdates?: Partial<FlowContextType>) => boolean;
8
9
  updateContext: (updates: Partial<FlowContextType>) => void;
9
10
  }
@@ -9,12 +9,53 @@ var __assign = (this && this.__assign) || function () {
9
9
  };
10
10
  return __assign.apply(this, arguments);
11
11
  };
12
+ var _a;
12
13
  import { jsx as _jsx } from "react/jsx-runtime";
13
- import { createContext, useCallback, useContext, useRef, useState } from 'react';
14
+ import { createContext, useCallback, useContext, useEffect, useRef, useState } from 'react';
14
15
  import { FlowState, initialFlowContext } from '../types';
15
16
  import { STATE_TRANSITIONS } from '../constants';
16
17
  import { logger } from '../../../utils/logger';
17
18
  import { useN1WalletContext, useN1WalletInternalContext } from '../../../Provider';
19
+ import { N1ModalViewMode } from '../../../Provider/types';
20
+ import { SolanaNetwork } from '../../../config/solana';
21
+ var buildDebugContext = function (overrides) {
22
+ if (overrides === void 0) { overrides = {}; }
23
+ return (__assign(__assign({}, initialFlowContext), overrides));
24
+ };
25
+ var DEBUG_VIEW_TO_FLOW = (_a = {},
26
+ _a[N1ModalViewMode.Connect] = {
27
+ state: FlowState.CONNECTING_WALLET,
28
+ context: buildDebugContext(),
29
+ },
30
+ _a[N1ModalViewMode.ChainSelection] = {
31
+ state: FlowState.CHAIN_SELECTION,
32
+ context: buildDebugContext({ selectedChain: null }),
33
+ },
34
+ _a[N1ModalViewMode.CreateSession] = {
35
+ state: FlowState.AUTH_LOADING,
36
+ context: buildDebugContext({ hasNordAccount: true, hasActiveSession: false }),
37
+ },
38
+ _a[N1ModalViewMode.Signing] = {
39
+ state: FlowState.DEPOSIT_PROGRESS,
40
+ context: buildDebugContext({ hasNordAccount: false, hasActiveSession: false }),
41
+ },
42
+ _a[N1ModalViewMode.CreatingUser] = {
43
+ state: FlowState.AMOUNT_INPUT,
44
+ context: buildDebugContext({ hasNordAccount: false, hasActiveSession: false }),
45
+ },
46
+ _a[N1ModalViewMode.DepositSuccess] = {
47
+ state: FlowState.DEPOSIT_SUCCESS,
48
+ context: buildDebugContext({
49
+ hasNordAccount: true,
50
+ hasActiveSession: true,
51
+ selectedChain: 'solana-mainnet',
52
+ selectedChainId: 'solana',
53
+ selectedChainNetwork: SolanaNetwork.MAINNET,
54
+ amount: '1,250',
55
+ transactionId: 'debug-tx-12345',
56
+ }),
57
+ },
58
+ _a);
18
59
  // Create the context with a default value
19
60
  var FlowStateContext = createContext(undefined);
20
61
  /**
@@ -23,12 +64,15 @@ var FlowStateContext = createContext(undefined);
23
64
  export var FlowStateProvider = function (_a) {
24
65
  var children = _a.children;
25
66
  // Flow state
26
- var _b = useState(FlowState.IDLE), state = _b[0], setState = _b[1];
67
+ var _b = useState(FlowState.CONNECTING_WALLET), state = _b[0], setState = _b[1];
27
68
  var _c = useState(initialFlowContext), context = _c[0], setContext = _c[1];
28
69
  var _d = useState(false), isClosing = _d[0], setIsClosing = _d[1];
29
- var nordUser = useN1WalletContext().nordUser;
30
- var dynamicSdkHasLoaded = useN1WalletInternalContext().dynamicSdkHasLoaded;
70
+ var _e = useState(false), isDebugOverride = _e[0], setIsDebugOverride = _e[1];
71
+ var _f = useN1WalletContext(), nordUser = _f.nordUser, viewMode = _f.viewMode;
72
+ var _g = useN1WalletInternalContext(), dynamicSdkHasLoaded = _g.dynamicSdkHasLoaded, depositFlowRequestId = _g.depositFlowRequestId;
31
73
  var prevContextRef = useRef(initialFlowContext);
74
+ var debugOverrideRef = useRef(false);
75
+ var lastDepositRequestRef = useRef(0);
32
76
  // Default handlers
33
77
  var handleStateChange = useCallback(function (newState, currState) {
34
78
  logger.debug("State changed from ".concat(currState, " to ").concat(newState));
@@ -37,6 +81,10 @@ export var FlowStateProvider = function (_a) {
37
81
  * Check if a transition is allowed based on current state and context
38
82
  */
39
83
  var canTransition = useCallback(function (targetState, contextData) {
84
+ if (isDebugOverride) {
85
+ logger.debug("Debug override active; blocking transition to ".concat(targetState));
86
+ return false;
87
+ }
40
88
  if (dynamicSdkHasLoaded)
41
89
  return STATE_TRANSITIONS.some(function (transition) {
42
90
  var fromMatches = Array.isArray(transition.from)
@@ -51,7 +99,7 @@ export var FlowStateProvider = function (_a) {
51
99
  return true;
52
100
  });
53
101
  return false;
54
- }, [state, nordUser, dynamicSdkHasLoaded]);
102
+ }, [state, nordUser, dynamicSdkHasLoaded, isDebugOverride]);
55
103
  /**
56
104
  * Transition to a new state if allowed
57
105
  */
@@ -61,6 +109,10 @@ export var FlowStateProvider = function (_a) {
61
109
  if (targetState === state && Object.keys(contextUpdates).length === 0) {
62
110
  return true;
63
111
  }
112
+ if (isDebugOverride) {
113
+ logger.debug("Transition suppressed (debug override \u2192 ".concat(N1ModalViewMode[viewMode], ")"));
114
+ return false;
115
+ }
64
116
  if (!canTransition(targetState, __assign(__assign({}, context), contextUpdates))) {
65
117
  logger.warn("Transition from ".concat(state, " to ").concat(targetState, " is not allowed"));
66
118
  return false;
@@ -73,7 +125,7 @@ export var FlowStateProvider = function (_a) {
73
125
  setState(targetState);
74
126
  handleStateChange(targetState, state);
75
127
  return true;
76
- }, [canTransition, state, context, handleStateChange]);
128
+ }, [canTransition, state, context, handleStateChange, isDebugOverride, viewMode]);
77
129
  /**
78
130
  * Update context without state transition
79
131
  */
@@ -100,11 +152,52 @@ export var FlowStateProvider = function (_a) {
100
152
  return newContext;
101
153
  });
102
154
  }, [state]);
155
+ useEffect(function () {
156
+ if (!depositFlowRequestId ||
157
+ depositFlowRequestId === lastDepositRequestRef.current) {
158
+ return;
159
+ }
160
+ lastDepositRequestRef.current = depositFlowRequestId;
161
+ if (!nordUser || !nordUser.sessionId) {
162
+ logger.warn('Ignoring deposit flow request without an active Nord session');
163
+ return;
164
+ }
165
+ var nextContext = __assign(__assign({}, initialFlowContext), { hasNordAccount: true, hasActiveSession: true, isDepositOnlyFlow: true });
166
+ prevContextRef.current = nextContext;
167
+ setIsDebugOverride(false);
168
+ setContext(nextContext);
169
+ setState(FlowState.CHAIN_SELECTION);
170
+ setIsClosing(false);
171
+ logger.debug('Deposit-only flow activated');
172
+ }, [depositFlowRequestId, nordUser]);
173
+ // Debug-only: allow external callers (e.g. UI playground) to jump to a specific view
174
+ useEffect(function () {
175
+ var debugTarget = viewMode === N1ModalViewMode.Automatic ? undefined : DEBUG_VIEW_TO_FLOW[viewMode];
176
+ if (debugTarget) {
177
+ debugOverrideRef.current = true;
178
+ setIsDebugOverride(true);
179
+ var nextContext = debugTarget.context;
180
+ prevContextRef.current = nextContext;
181
+ setContext(nextContext);
182
+ setState(debugTarget.state);
183
+ logger.debug("Debug view override: ".concat(N1ModalViewMode[viewMode], " \u2192 ").concat(debugTarget.state));
184
+ return;
185
+ }
186
+ if (debugOverrideRef.current) {
187
+ debugOverrideRef.current = false;
188
+ setIsDebugOverride(false);
189
+ setContext(initialFlowContext);
190
+ prevContextRef.current = initialFlowContext;
191
+ setState(FlowState.CONNECTING_WALLET);
192
+ logger.debug('Debug view override cleared; returning to state machine');
193
+ }
194
+ }, [viewMode]);
103
195
  // Create the context value
104
196
  var contextValue = {
105
197
  state: state,
106
198
  context: context,
107
199
  isClosing: isClosing,
200
+ isDebugOverride: isDebugOverride,
108
201
  transition: transition,
109
202
  updateContext: updateContext,
110
203
  };
@@ -1 +1 @@
1
- {"version":3,"file":"FlowContext.js","sourceRoot":"","sources":["../../../../src/Modal/NordFlow/context/FlowContext.tsx"],"names":[],"mappings":"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","sourcesContent":["import React, { createContext, useCallback, useContext, useEffect, useRef, useState } from 'react';\nimport { FlowContext as FlowContextType, FlowState, initialFlowContext } from '../types';\nimport { STATE_TRANSITIONS } from '../constants';\nimport { logger } from '../../../utils/logger';\nimport { useN1WalletContext, useN1WalletInternalContext } from '../../../Provider';\n\n// Define the shape of the context value\nexport interface FlowStateContextValue {\n state: FlowState;\n context: FlowContextType;\n isClosing: boolean;\n transition: (targetState: FlowState, contextUpdates?: Partial<FlowContextType>) => boolean;\n updateContext: (updates: Partial<FlowContextType>) => void;\n}\n\n// Create the context with a default value\nconst FlowStateContext = createContext<FlowStateContextValue | undefined>(undefined);\n\n// Props for the provider component\ninterface FlowStateProviderProps {\n children: React.ReactNode;\n}\n\n/**\n * Provider component for the flow state context\n */\nexport const FlowStateProvider: React.FC<FlowStateProviderProps> = ({\n children,\n}) => {\n // Flow state\n const [state, setState] = useState<FlowState>(FlowState.IDLE);\n const [context, setContext] = useState<FlowContextType>(initialFlowContext);\n const [isClosing, setIsClosing] = useState(false);\n\n const { nordUser } = useN1WalletContext();\n const { dynamicSdkHasLoaded } = useN1WalletInternalContext();\n const prevContextRef = useRef<FlowContextType>(initialFlowContext);\n\n\n // Default handlers\n const handleStateChange = useCallback((newState: FlowState, currState: FlowState | null) => {\n logger.debug(`State changed from ${currState} to ${newState}`);\n }, []);\n /**\n * Check if a transition is allowed based on current state and context\n */\n const canTransition = useCallback(\n (targetState: FlowState, contextData: FlowContextType): boolean => {\n if (dynamicSdkHasLoaded)\n return STATE_TRANSITIONS.some((transition) => {\n const fromMatches = Array.isArray(transition.from)\n ? transition.from.includes(state)\n : transition.from === state;\n\n if (!fromMatches || transition.to !== targetState) {\n return false;\n }\n\n if (transition.condition) {\n return transition.condition(contextData);\n }\n\n return true;\n });\n return false;\n },\n [state, nordUser, dynamicSdkHasLoaded]\n );\n\n /**\n * Transition to a new state if allowed\n */\n const transition = useCallback(\n (\n targetState: FlowState,\n contextUpdates: Partial<FlowContextType> = {}\n ): boolean => {\n // Skip if we're already in the target state and no context updates\n if (targetState === state && Object.keys(contextUpdates).length === 0) {\n return true;\n }\n\n if (!canTransition(targetState, { ...context, ...contextUpdates })) {\n logger.warn(\n `Transition from ${state} to ${targetState} is not allowed`\n );\n return false;\n }\n\n\n // Update context first\n setContext((prevContext) => {\n return { ...prevContext, ...contextUpdates };\n });\n\n logger.debug(`Transitioning from ${state} to ${targetState}`);\n setState(targetState);\n\n handleStateChange(targetState, state);\n return true;\n },\n [canTransition, state, context, handleStateChange]\n );\n\n\n\n /**\n * Update context without state transition\n */\n const updateContext = useCallback(\n (updates: Partial<FlowContextType>) => {\n // Skip if no actual updates\n if (Object.keys(updates).length === 0) {\n return;\n }\n\n setContext((prevContext) => {\n // Check if any values are actually changing\n let hasChanges = false;\n\n // Type-safe way to check for changes\n (Object.keys(updates) as Array<keyof Partial<FlowContextType>>).forEach(key => {\n if (updates[key] !== prevContext[key]) {\n hasChanges = true;\n }\n });\n\n // If nothing is changing, return the previous context\n if (!hasChanges) {\n return prevContext;\n }\n\n const newContext = { ...prevContext, ...updates };\n prevContextRef.current = newContext;\n return newContext;\n });\n },\n [state]\n );\n\n\n // Create the context value\n const contextValue: FlowStateContextValue = {\n state,\n context,\n isClosing,\n transition,\n updateContext,\n };\n\n\n\n return (\n <FlowStateContext.Provider value={contextValue}>\n {children}\n </FlowStateContext.Provider>\n );\n};\n\n/**\n * Custom hook to use the flow state context\n * @returns The flow state context value\n * @throws Error if used outside of a FlowStateProvider\n */\nexport const useFlowStateContext = (): FlowStateContextValue => {\n const context = useContext(FlowStateContext);\n\n if (context === undefined) {\n throw new Error('useFlowStateContext must be used within a FlowStateProvider');\n }\n\n return context;\n};\n"]}
1
+ {"version":3,"file":"FlowContext.js","sourceRoot":"","sources":["../../../../src/Modal/NordFlow/context/FlowContext.tsx"],"names":[],"mappings":"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","sourcesContent":["import React, { createContext, useCallback, useContext, useEffect, useRef, useState } from 'react';\nimport { FlowContext as FlowContextType, FlowState, initialFlowContext } from '../types';\nimport { STATE_TRANSITIONS } from '../constants';\nimport { logger } from '../../../utils/logger';\nimport { useN1WalletContext, useN1WalletInternalContext } from '../../../Provider';\nimport { N1ModalViewMode } from '../../../Provider/types';\nimport { SolanaNetwork } from '../../../config/solana';\n\nconst buildDebugContext = (overrides: Partial<FlowContextType> = {}) => ({\n ...initialFlowContext,\n ...overrides,\n});\n\nconst DEBUG_VIEW_TO_FLOW: Partial<\n Record<N1ModalViewMode, { state: FlowState; context: FlowContextType }>\n> = {\n [N1ModalViewMode.Connect]: {\n state: FlowState.CONNECTING_WALLET,\n context: buildDebugContext(),\n },\n [N1ModalViewMode.ChainSelection]: {\n state: FlowState.CHAIN_SELECTION,\n context: buildDebugContext({ selectedChain: null }),\n },\n [N1ModalViewMode.CreateSession]: {\n state: FlowState.AUTH_LOADING,\n context: buildDebugContext({ hasNordAccount: true, hasActiveSession: false }),\n },\n [N1ModalViewMode.Signing]: {\n state: FlowState.DEPOSIT_PROGRESS,\n context: buildDebugContext({ hasNordAccount: false, hasActiveSession: false }),\n },\n [N1ModalViewMode.CreatingUser]: {\n state: FlowState.AMOUNT_INPUT,\n context: buildDebugContext({ hasNordAccount: false, hasActiveSession: false }),\n },\n [N1ModalViewMode.DepositSuccess]: {\n state: FlowState.DEPOSIT_SUCCESS,\n context: buildDebugContext({\n hasNordAccount: true,\n hasActiveSession: true,\n selectedChain: 'solana-mainnet',\n selectedChainId: 'solana',\n selectedChainNetwork: SolanaNetwork.MAINNET,\n amount: '1,250',\n transactionId: 'debug-tx-12345',\n }),\n },\n};\n\n// Define the shape of the context value\nexport interface FlowStateContextValue {\n state: FlowState;\n context: FlowContextType;\n isClosing: boolean;\n isDebugOverride: boolean;\n transition: (targetState: FlowState, contextUpdates?: Partial<FlowContextType>) => boolean;\n updateContext: (updates: Partial<FlowContextType>) => void;\n}\n\n// Create the context with a default value\nconst FlowStateContext = createContext<FlowStateContextValue | undefined>(undefined);\n\n// Props for the provider component\ninterface FlowStateProviderProps {\n children: React.ReactNode;\n}\n\n/**\n * Provider component for the flow state context\n */\nexport const FlowStateProvider: React.FC<FlowStateProviderProps> = ({\n children,\n}) => {\n // Flow state\n const [state, setState] = useState<FlowState>(FlowState.CONNECTING_WALLET);\n const [context, setContext] = useState<FlowContextType>(initialFlowContext);\n const [isClosing, setIsClosing] = useState(false);\n const [isDebugOverride, setIsDebugOverride] = useState(false);\n\n const { nordUser, viewMode } = useN1WalletContext();\n const { dynamicSdkHasLoaded, depositFlowRequestId } = useN1WalletInternalContext();\n const prevContextRef = useRef<FlowContextType>(initialFlowContext);\n const debugOverrideRef = useRef(false);\n const lastDepositRequestRef = useRef(0);\n\n\n // Default handlers\n const handleStateChange = useCallback((newState: FlowState, currState: FlowState | null) => {\n logger.debug(`State changed from ${currState} to ${newState}`);\n }, []);\n /**\n * Check if a transition is allowed based on current state and context\n */\n const canTransition = useCallback(\n (targetState: FlowState, contextData: FlowContextType): boolean => {\n if (isDebugOverride) {\n logger.debug(\n `Debug override active; blocking transition to ${targetState}`\n );\n return false;\n }\n\n if (dynamicSdkHasLoaded)\n return STATE_TRANSITIONS.some((transition) => {\n const fromMatches = Array.isArray(transition.from)\n ? transition.from.includes(state)\n : transition.from === state;\n\n if (!fromMatches || transition.to !== targetState) {\n return false;\n }\n\n if (transition.condition) {\n return transition.condition(contextData);\n }\n\n return true;\n });\n return false;\n },\n [state, nordUser, dynamicSdkHasLoaded, isDebugOverride]\n );\n\n /**\n * Transition to a new state if allowed\n */\n const transition = useCallback(\n (\n targetState: FlowState,\n contextUpdates: Partial<FlowContextType> = {}\n ): boolean => {\n // Skip if we're already in the target state and no context updates\n if (targetState === state && Object.keys(contextUpdates).length === 0) {\n return true;\n }\n\n if (isDebugOverride) {\n logger.debug(\n `Transition suppressed (debug override → ${N1ModalViewMode[viewMode]})`\n );\n return false;\n }\n\n if (!canTransition(targetState, { ...context, ...contextUpdates })) {\n logger.warn(\n `Transition from ${state} to ${targetState} is not allowed`\n );\n return false;\n }\n\n\n // Update context first\n setContext((prevContext) => {\n return { ...prevContext, ...contextUpdates };\n });\n\n logger.debug(`Transitioning from ${state} to ${targetState}`);\n setState(targetState);\n\n handleStateChange(targetState, state);\n return true;\n },\n [canTransition, state, context, handleStateChange, isDebugOverride, viewMode]\n );\n\n\n\n /**\n * Update context without state transition\n */\n const updateContext = useCallback(\n (updates: Partial<FlowContextType>) => {\n // Skip if no actual updates\n if (Object.keys(updates).length === 0) {\n return;\n }\n\n setContext((prevContext) => {\n // Check if any values are actually changing\n let hasChanges = false;\n\n // Type-safe way to check for changes\n (Object.keys(updates) as Array<keyof Partial<FlowContextType>>).forEach(key => {\n if (updates[key] !== prevContext[key]) {\n hasChanges = true;\n }\n });\n\n // If nothing is changing, return the previous context\n if (!hasChanges) {\n return prevContext;\n }\n\n const newContext = { ...prevContext, ...updates };\n prevContextRef.current = newContext;\n return newContext;\n });\n },\n [state]\n );\n\n useEffect(() => {\n if (\n !depositFlowRequestId ||\n depositFlowRequestId === lastDepositRequestRef.current\n ) {\n return;\n }\n\n lastDepositRequestRef.current = depositFlowRequestId;\n\n if (!nordUser || !nordUser.sessionId) {\n logger.warn('Ignoring deposit flow request without an active Nord session');\n return;\n }\n\n const nextContext: FlowContextType = {\n ...initialFlowContext,\n hasNordAccount: true,\n hasActiveSession: true,\n isDepositOnlyFlow: true,\n };\n\n prevContextRef.current = nextContext;\n setIsDebugOverride(false);\n setContext(nextContext);\n setState(FlowState.CHAIN_SELECTION);\n setIsClosing(false);\n logger.debug('Deposit-only flow activated');\n }, [depositFlowRequestId, nordUser]);\n\n // Debug-only: allow external callers (e.g. UI playground) to jump to a specific view\n useEffect(() => {\n const debugTarget =\n viewMode === N1ModalViewMode.Automatic ? undefined : DEBUG_VIEW_TO_FLOW[viewMode];\n\n if (debugTarget) {\n debugOverrideRef.current = true;\n setIsDebugOverride(true);\n const nextContext = debugTarget.context;\n prevContextRef.current = nextContext;\n setContext(nextContext);\n setState(debugTarget.state);\n logger.debug(\n `Debug view override: ${N1ModalViewMode[viewMode]} → ${debugTarget.state}`\n );\n return;\n }\n\n if (debugOverrideRef.current) {\n debugOverrideRef.current = false;\n setIsDebugOverride(false);\n setContext(initialFlowContext);\n prevContextRef.current = initialFlowContext;\n setState(FlowState.CONNECTING_WALLET);\n logger.debug('Debug view override cleared; returning to state machine');\n }\n }, [viewMode]);\n\n\n // Create the context value\n const contextValue: FlowStateContextValue = {\n state,\n context,\n isClosing,\n isDebugOverride,\n transition,\n updateContext,\n };\n\n\n\n return (\n <FlowStateContext.Provider value={contextValue}>\n {children}\n </FlowStateContext.Provider>\n );\n};\n\n/**\n * Custom hook to use the flow state context\n * @returns The flow state context value\n * @throws Error if used outside of a FlowStateProvider\n */\nexport const useFlowStateContext = (): FlowStateContextValue => {\n const context = useContext(FlowStateContext);\n\n if (context === undefined) {\n throw new Error('useFlowStateContext must be used within a FlowStateProvider');\n }\n\n return context;\n};\n"]}
@@ -38,8 +38,11 @@ import { jsx as _jsx } from "react/jsx-runtime";
38
38
  import { createContext, useCallback, useContext, useEffect, useRef, useState } from 'react';
39
39
  import { useN1WalletContext, useN1WalletInternalContext } from '../../../Provider/hooks';
40
40
  import { logger } from '../../../utils/logger';
41
- import { FlowState } from '../types';
41
+ import { removeKeysFromLocalStorage } from '../../../Logic/utils';
42
+ import { FLOW_STATE_STORAGE_KEY } from '../constants';
43
+ import { FlowState, initialFlowContext } from '../types';
42
44
  import { useFlowStateContext } from './FlowContext';
45
+ import { readLastDepositRecord } from '../utils/depositStorage';
43
46
  // Create the context with a default value
44
47
  var WalletConnectContext = createContext(undefined);
45
48
  /**
@@ -47,32 +50,49 @@ var WalletConnectContext = createContext(undefined);
47
50
  */
48
51
  export var WalletConnectProvider = function (_a) {
49
52
  var children = _a.children;
50
- var _b = useN1WalletContext(), nord = _b.nord, nordUser = _b.nordUser;
53
+ var _b = useN1WalletContext(), nord = _b.nord, nordUser = _b.nordUser, address = _b.address;
51
54
  var _c = useN1WalletInternalContext(), showDynamicWidget = _c.showDynamicWidget, dynamicWallet = _c.dynamicWallet, setIsConnected = _c.setIsConnected, dynamicSdkHasLoaded = _c.dynamicSdkHasLoaded;
52
55
  var dynamicHandleLogOut = useN1WalletInternalContext().dynamicHandleLogOut;
53
56
  // Get flow context
54
- var _d = useFlowStateContext(), state = _d.state, transition = _d.transition, updateContext = _d.updateContext;
57
+ var _d = useFlowStateContext(), state = _d.state, context = _d.context, transition = _d.transition, updateContext = _d.updateContext;
55
58
  var _e = useState(false), isConnecting = _e[0], setIsConnecting = _e[1];
56
59
  // Use refs to track previous values
57
60
  var processedWalletAddressRef = useRef(null);
58
61
  var prevNordUserRef = useRef(nordUser);
59
62
  var prevStateRef = useRef(state);
63
+ var clearWalletCache = useCallback(function () {
64
+ if (typeof window === 'undefined') {
65
+ return;
66
+ }
67
+ try {
68
+ if (address) {
69
+ var sessionIdKey = "n1_sessionId_".concat(address);
70
+ window.localStorage.removeItem(sessionIdKey);
71
+ removeKeysFromLocalStorage(address);
72
+ }
73
+ window.localStorage.removeItem(FLOW_STATE_STORAGE_KEY);
74
+ updateContext(initialFlowContext);
75
+ logger.debug('Cleared wallet cache for address', { address: address });
76
+ }
77
+ catch (error) {
78
+ logger.warn('Failed to clear wallet cache', error);
79
+ }
80
+ }, [address, updateContext]);
60
81
  /**
61
82
  * Disconnect wallet
62
83
  */
63
84
  var disconnectWallet = useCallback(function () {
64
85
  logger.debug('Disconnecting wallet');
65
86
  try {
66
- dynamicHandleLogOut();
87
+ clearWalletCache();
88
+ dynamicHandleLogOut === null || dynamicHandleLogOut === void 0 ? void 0 : dynamicHandleLogOut();
67
89
  }
68
- catch (_) {
69
- //
90
+ catch (error) {
91
+ logger.warn('Error during wallet disconnect', error);
70
92
  }
71
93
  processedWalletAddressRef.current = null;
72
- updateContext({ walletType: null });
73
- // todo: delete sessionId from localStorage
74
94
  window.location.reload();
75
- }, [updateContext]);
95
+ }, [clearWalletCache, dynamicHandleLogOut]);
76
96
  /**
77
97
  * Connect wallet using Dynamic widget
78
98
  */
@@ -96,21 +116,60 @@ export var WalletConnectProvider = function (_a) {
96
116
  case 3:
97
117
  error_1 = _a.sent();
98
118
  setIsConnecting(false);
99
- updateContext({ walletType: null });
100
119
  logger.error('Error showing Dynamic widget:', error_1);
101
120
  return [3 /*break*/, 4];
102
121
  case 4: return [2 /*return*/];
103
122
  }
104
123
  });
105
- }); }, [isConnecting, showDynamicWidget, updateContext, dynamicSdkHasLoaded]);
124
+ }); }, [isConnecting, showDynamicWidget, dynamicSdkHasLoaded]);
106
125
  // Process nordUser changes
107
126
  useEffect(function () {
108
127
  if (!dynamicSdkHasLoaded)
109
128
  return;
129
+ // If the wallet is connected but NordUser hasn't been created yet,
130
+ // move the flow forward so the user can continue with onboarding.
131
+ if (dynamicWallet && !nordUser) {
132
+ logger.debug('Dynamic wallet detected but NordUser not ready yet, moving to chain selection flow');
133
+ updateContext({
134
+ hasNordAccount: false,
135
+ hasActiveSession: false,
136
+ });
137
+ if (state === FlowState.CONNECTING_WALLET) {
138
+ // Only force the transition while we are still on the initial connect screen
139
+ try {
140
+ var lastDepositRecord = context.isDepositOnlyFlow
141
+ ? null
142
+ : readLastDepositRecord(dynamicWallet.address);
143
+ if (lastDepositRecord) {
144
+ transition(FlowState.DEPOSIT_SUCCESS, {
145
+ hasNordAccount: true,
146
+ hasActiveSession: false,
147
+ selectedChain: lastDepositRecord.chainName,
148
+ selectedChainId: lastDepositRecord.chainId,
149
+ selectedChainNetwork: lastDepositRecord.chainNetwork,
150
+ transactionId: lastDepositRecord.transactionId,
151
+ amount: lastDepositRecord.amount,
152
+ lastDeposit: lastDepositRecord,
153
+ });
154
+ }
155
+ else {
156
+ transition(FlowState.CHAIN_SELECTION, {
157
+ hasNordAccount: false,
158
+ hasActiveSession: false,
159
+ });
160
+ }
161
+ }
162
+ catch (error) {
163
+ logger.error('Error transitioning while waiting for NordUser:', error);
164
+ }
165
+ }
166
+ setIsConnecting(false);
167
+ return;
168
+ }
110
169
  var currentNordUser = nordUser;
111
170
  var prevNordUser = prevNordUserRef.current;
112
171
  // Only run if nordUser has changed and we have processed a wallet
113
- if (currentNordUser && currentNordUser !== prevNordUser) {
172
+ if (currentNordUser && currentNordUser !== prevNordUser && dynamicWallet) {
114
173
  logger.debug('NordUser changed, checking account status');
115
174
  (function () { return __awaiter(void 0, void 0, void 0, function () {
116
175
  var nordAccount, hasNordAccount_1, sessionId, hasActiveSession_1, transitionDestination_1, error_2;
@@ -118,8 +177,6 @@ export var WalletConnectProvider = function (_a) {
118
177
  switch (_a.label) {
119
178
  case 0:
120
179
  _a.trys.push([0, 2, , 3]);
121
- if (!dynamicWallet)
122
- return [2 /*return*/];
123
180
  return [4 /*yield*/, nord.getUser({ pubkey: dynamicWallet.address })];
124
181
  case 1:
125
182
  nordAccount = _a.sent();
@@ -140,7 +197,6 @@ export var WalletConnectProvider = function (_a) {
140
197
  try {
141
198
  logger.debug('Attempting transition to ' + transitionDestination_1);
142
199
  transition(transitionDestination_1, {
143
- walletType: 'solana',
144
200
  hasNordAccount: hasNordAccount_1,
145
201
  hasActiveSession: hasActiveSession_1,
146
202
  });
@@ -164,17 +220,17 @@ export var WalletConnectProvider = function (_a) {
164
220
  });
165
221
  }); })();
166
222
  }
167
- else {
168
- transition(FlowState.CONNECTING_WALLET);
169
- }
170
- // Update ref
223
+ // Update ref so we don't re-run unless nordUser changes again
171
224
  prevNordUserRef.current = currentNordUser;
172
225
  }, [
173
226
  nordUser,
174
227
  dynamicWallet,
175
228
  updateContext,
176
229
  transition,
177
- setIsConnected
230
+ setIsConnected,
231
+ state,
232
+ dynamicSdkHasLoaded,
233
+ context.isDepositOnlyFlow,
178
234
  ]);
179
235
  // Handle connecting state changes in a separate effect
180
236
  useEffect(function () {
@@ -1 +1 @@
1
- {"version":3,"file":"WalletConnectContext.js","sourceRoot":"","sources":["../../../../src/Modal/NordFlow/context/WalletConnectContext.tsx"],"names":[],"mappings":"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","sourcesContent":["import React, { createContext, useCallback, useContext, useEffect, useRef, useState } from 'react';\nimport { useN1WalletContext, useN1WalletInternalContext } from '../../../Provider/hooks';\nimport { N1SessionMode } from '../../../Provider/types';\nimport { logger } from '../../../utils/logger';\nimport { FlowState, initialFlowContext } from '../types';\nimport { useFlowStateContext } from './FlowContext';\n\n// Define the shape of the context value\nexport interface WalletConnectContextValue {\n isConnecting: boolean;\n connectWallet: () => Promise<void>;\n disconnectWallet: () => void;\n}\n\n// Create the context with a default value\nconst WalletConnectContext = createContext<WalletConnectContextValue | undefined>(undefined);\n\n// Props for the provider component\ninterface WalletConnectProviderProps {\n children: React.ReactNode;\n}\n\n/**\n * Provider component for the wallet connect context\n */\nexport const WalletConnectProvider: React.FC<WalletConnectProviderProps> = ({\n children,\n}) => {\n const { nord, nordUser } = useN1WalletContext();\n const { showDynamicWidget, dynamicWallet, setIsConnected, dynamicSdkHasLoaded } = useN1WalletInternalContext();\n const { dynamicHandleLogOut } = useN1WalletInternalContext();\n\n // Get flow context\n const {\n state,\n transition,\n updateContext,\n } = useFlowStateContext();\n\n const [isConnecting, setIsConnecting] = useState(false);\n\n // Use refs to track previous values\n const processedWalletAddressRef = useRef<string | null>(null);\n const prevNordUserRef = useRef(nordUser);\n const prevStateRef = useRef(state);\n\n\n /**\n * Disconnect wallet\n */\n const disconnectWallet = useCallback(() => {\n logger.debug('Disconnecting wallet');\n try {\n dynamicHandleLogOut()\n } catch (_) {\n // \n }\n processedWalletAddressRef.current = null;\n updateContext({ walletType: null });\n // todo: delete sessionId from localStorage\n window.location.reload();\n }, [updateContext]);\n\n /**\n * Connect wallet using Dynamic widget\n */\n const connectWallet = useCallback(async () => {\n if (isConnecting || !showDynamicWidget || !dynamicSdkHasLoaded) return;\n\n setIsConnecting(true);\n logger.debug('Starting wallet connection process');\n\n try {\n await showDynamicWidget(true);\n logger.debug('Dynamic widget shown');\n } catch (error) {\n setIsConnecting(false);\n updateContext({ walletType: null });\n logger.error('Error showing Dynamic widget:', error);\n }\n }, [isConnecting, showDynamicWidget, updateContext, dynamicSdkHasLoaded]);\n\n // Process nordUser changes\n useEffect(() => {\n if (!dynamicSdkHasLoaded) return\n\n const currentNordUser = nordUser;\n const prevNordUser = prevNordUserRef.current;\n\n // Only run if nordUser has changed and we have processed a wallet\n if (currentNordUser && currentNordUser !== prevNordUser) {\n logger.debug('NordUser changed, checking account status');\n\n (async () => {\n try {\n if (!dynamicWallet) return;\n\n const nordAccount = await nord!.getUser({ pubkey: dynamicWallet.address });\n const hasNordAccount = nordAccount != null;\n const sessionId = currentNordUser.sessionId;\n const hasActiveSession = sessionId != null;\n\n updateContext({ hasNordAccount, hasActiveSession });\n\n const transitionDestination = hasNordAccount\n ? sessionId != null\n ? FlowState.FINAL_SUCCESS\n : FlowState.AUTH_LOADING\n : FlowState.CHAIN_SELECTION;\n\n if (hasNordAccount && sessionId != null) {\n setIsConnected(true);\n }\n\n // Force a small delay to ensure UI updates properly\n setTimeout(() => {\n try {\n logger.debug('Attempting transition to ' + transitionDestination);\n transition(transitionDestination, {\n walletType: 'solana',\n hasNordAccount,\n hasActiveSession,\n });\n logger.debug(\n 'Transition to ' + transitionDestination + ' completed'\n );\n } catch (error) {\n logger.error('Error during transition:', error);\n } finally {\n setIsConnecting(false);\n }\n }, 100);\n } catch (error) {\n logger.error('Error checking account status:', error);\n setIsConnecting(false);\n }\n })();\n }else{\n transition(FlowState.CONNECTING_WALLET)\n }\n\n // Update ref\n prevNordUserRef.current = currentNordUser;\n }, [\n nordUser,\n dynamicWallet,\n updateContext,\n transition,\n setIsConnected\n ]);\n\n\n\n\n // Handle connecting state changes in a separate effect\n useEffect(() => {\n const currentState = state;\n const prevState = prevStateRef.current;\n\n // Only run if state has changed\n if (currentState !== prevState) {\n if (currentState !== FlowState.CONNECTING_WALLET && isConnecting) {\n // If we're no longer in the connecting state, reset the connecting flag\n setIsConnecting(false);\n }\n\n // Update ref\n prevStateRef.current = currentState;\n }\n }, [state, isConnecting]);\n\n // Create the context value\n const contextValue: WalletConnectContextValue = {\n isConnecting,\n connectWallet,\n disconnectWallet,\n };\n\n return (\n <WalletConnectContext.Provider value={contextValue}>\n {children}\n </WalletConnectContext.Provider>\n );\n};\n\n/**\n * Custom hook to use the wallet connect context\n * @returns The wallet connect context value\n * @throws Error if used outside of a WalletConnectProvider\n */\nexport const useWalletConnectContext = (): WalletConnectContextValue => {\n const context = useContext(WalletConnectContext);\n\n if (context === undefined) {\n throw new Error('useWalletConnectContext must be used within a WalletConnectProvider');\n }\n\n return context;\n}; "]}
1
+ {"version":3,"file":"WalletConnectContext.js","sourceRoot":"","sources":["../../../../src/Modal/NordFlow/context/WalletConnectContext.tsx"],"names":[],"mappings":"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","sourcesContent":["import React, { createContext, useCallback, useContext, useEffect, useRef, useState } from 'react';\nimport { useN1WalletContext, useN1WalletInternalContext } from '../../../Provider/hooks';\nimport { logger } from '../../../utils/logger';\nimport { removeKeysFromLocalStorage } from '../../../Logic/utils';\nimport { FLOW_STATE_STORAGE_KEY } from '../constants';\nimport { FlowState, initialFlowContext } from '../types';\nimport { useFlowStateContext } from './FlowContext';\nimport { readLastDepositRecord } from '../utils/depositStorage';\n\n// Define the shape of the context value\nexport interface WalletConnectContextValue {\n isConnecting: boolean;\n connectWallet: () => Promise<void>;\n disconnectWallet: () => void;\n}\n\n// Create the context with a default value\nconst WalletConnectContext = createContext<WalletConnectContextValue | undefined>(undefined);\n\n// Props for the provider component\ninterface WalletConnectProviderProps {\n children: React.ReactNode;\n}\n\n/**\n * Provider component for the wallet connect context\n */\nexport const WalletConnectProvider: React.FC<WalletConnectProviderProps> = ({\n children,\n}) => {\n const { nord, nordUser, address } = useN1WalletContext();\n const { showDynamicWidget, dynamicWallet, setIsConnected, dynamicSdkHasLoaded } = useN1WalletInternalContext();\n const { dynamicHandleLogOut } = useN1WalletInternalContext();\n\n // Get flow context\n const {\n state,\n context,\n transition,\n updateContext,\n } = useFlowStateContext();\n\n const [isConnecting, setIsConnecting] = useState(false);\n\n // Use refs to track previous values\n const processedWalletAddressRef = useRef<string | null>(null);\n const prevNordUserRef = useRef(nordUser);\n const prevStateRef = useRef(state);\n\n\n const clearWalletCache = useCallback(() => {\n if (typeof window === 'undefined') {\n return;\n }\n\n try {\n if (address) {\n const sessionIdKey = `n1_sessionId_${address}`;\n window.localStorage.removeItem(sessionIdKey);\n removeKeysFromLocalStorage(address);\n }\n\n window.localStorage.removeItem(FLOW_STATE_STORAGE_KEY);\n updateContext(initialFlowContext);\n logger.debug('Cleared wallet cache for address', { address });\n } catch (error) {\n logger.warn('Failed to clear wallet cache', error);\n }\n }, [address, updateContext]);\n\n /**\n * Disconnect wallet\n */\n const disconnectWallet = useCallback(() => {\n logger.debug('Disconnecting wallet');\n try {\n clearWalletCache();\n dynamicHandleLogOut?.();\n } catch (error) {\n logger.warn('Error during wallet disconnect', error);\n }\n processedWalletAddressRef.current = null;\n window.location.reload();\n }, [clearWalletCache, dynamicHandleLogOut]);\n\n /**\n * Connect wallet using Dynamic widget\n */\n const connectWallet = useCallback(async () => {\n if (isConnecting || !showDynamicWidget || !dynamicSdkHasLoaded) return;\n\n setIsConnecting(true);\n logger.debug('Starting wallet connection process');\n\n try {\n await showDynamicWidget(true);\n logger.debug('Dynamic widget shown');\n } catch (error) {\n setIsConnecting(false);\n logger.error('Error showing Dynamic widget:', error);\n }\n }, [isConnecting, showDynamicWidget, dynamicSdkHasLoaded]);\n\n // Process nordUser changes\n useEffect(() => {\n if (!dynamicSdkHasLoaded) return;\n\n // If the wallet is connected but NordUser hasn't been created yet,\n // move the flow forward so the user can continue with onboarding.\n if (dynamicWallet && !nordUser) {\n logger.debug(\n 'Dynamic wallet detected but NordUser not ready yet, moving to chain selection flow'\n );\n updateContext({\n hasNordAccount: false,\n hasActiveSession: false,\n });\n if (state === FlowState.CONNECTING_WALLET) {\n // Only force the transition while we are still on the initial connect screen\n try {\n const lastDepositRecord = context.isDepositOnlyFlow\n ? null\n : readLastDepositRecord(dynamicWallet.address);\n\n if (lastDepositRecord) {\n transition(FlowState.DEPOSIT_SUCCESS, {\n hasNordAccount: true,\n hasActiveSession: false,\n selectedChain: lastDepositRecord.chainName,\n selectedChainId: lastDepositRecord.chainId,\n selectedChainNetwork: lastDepositRecord.chainNetwork,\n transactionId: lastDepositRecord.transactionId,\n amount: lastDepositRecord.amount,\n lastDeposit: lastDepositRecord,\n });\n } else {\n transition(FlowState.CHAIN_SELECTION, {\n hasNordAccount: false,\n hasActiveSession: false,\n });\n }\n } catch (error) {\n logger.error('Error transitioning while waiting for NordUser:', error);\n }\n }\n setIsConnecting(false);\n return;\n }\n\n const currentNordUser = nordUser;\n const prevNordUser = prevNordUserRef.current;\n\n // Only run if nordUser has changed and we have processed a wallet\n if (currentNordUser && currentNordUser !== prevNordUser && dynamicWallet) {\n logger.debug('NordUser changed, checking account status');\n\n (async () => {\n try {\n const nordAccount = await nord!.getUser({ pubkey: dynamicWallet.address });\n const hasNordAccount = nordAccount != null;\n const sessionId = currentNordUser.sessionId;\n const hasActiveSession = sessionId != null;\n\n updateContext({ hasNordAccount, hasActiveSession });\n\n const transitionDestination = hasNordAccount\n ? sessionId != null\n ? FlowState.FINAL_SUCCESS\n : FlowState.AUTH_LOADING\n : FlowState.CHAIN_SELECTION;\n\n if (hasNordAccount && sessionId != null) {\n setIsConnected(true);\n }\n\n // Force a small delay to ensure UI updates properly\n setTimeout(() => {\n try {\n logger.debug('Attempting transition to ' + transitionDestination);\n transition(transitionDestination, {\n hasNordAccount,\n hasActiveSession,\n });\n logger.debug(\n 'Transition to ' + transitionDestination + ' completed'\n );\n } catch (error) {\n logger.error('Error during transition:', error);\n } finally {\n setIsConnecting(false);\n }\n }, 100);\n } catch (error) {\n logger.error('Error checking account status:', error);\n setIsConnecting(false);\n }\n })();\n }\n\n // Update ref so we don't re-run unless nordUser changes again\n prevNordUserRef.current = currentNordUser;\n }, [\n nordUser,\n dynamicWallet,\n updateContext,\n transition,\n setIsConnected,\n state,\n dynamicSdkHasLoaded,\n context.isDepositOnlyFlow,\n ]);\n\n\n\n\n // Handle connecting state changes in a separate effect\n useEffect(() => {\n const currentState = state;\n const prevState = prevStateRef.current;\n\n // Only run if state has changed\n if (currentState !== prevState) {\n if (currentState !== FlowState.CONNECTING_WALLET && isConnecting) {\n // If we're no longer in the connecting state, reset the connecting flag\n setIsConnecting(false);\n }\n\n // Update ref\n prevStateRef.current = currentState;\n }\n }, [state, isConnecting]);\n\n // Create the context value\n const contextValue: WalletConnectContextValue = {\n isConnecting,\n connectWallet,\n disconnectWallet,\n };\n\n return (\n <WalletConnectContext.Provider value={contextValue}>\n {children}\n </WalletConnectContext.Provider>\n );\n};\n\n/**\n * Custom hook to use the wallet connect context\n * @returns The wallet connect context value\n * @throws Error if used outside of a WalletConnectProvider\n */\nexport const useWalletConnectContext = (): WalletConnectContextValue => {\n const context = useContext(WalletConnectContext);\n\n if (context === undefined) {\n throw new Error('useWalletConnectContext must be used within a WalletConnectProvider');\n }\n\n return context;\n}; \n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"withImageFallback.js","sourceRoot":"","sources":["../../../../src/Modal/NordFlow/hoc/withImageFallback.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAAA,OAAO,KAAoC,MAAM,OAAO,CAAC;AACzD,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAElD;;;;GAIG;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,IAA0B,CAAC;YAE3C,4DAA4D;YAC5D,IAAI,OAAO,CAAC,IAAI,KAAK,KAAK,EAAE,CAAC;gBAC3B,IAAM,KAAkD,OAAO,CAAC,KAAK,EAA7D,GAAG,SAAA,EAAE,GAAG,SAAA,EAAE,KAAK,WAAA,EAAE,MAAM,YAAA,EAAE,SAAS,eAAA,EAAK,IAAI,cAA7C,8CAA+C,CAAgB,CAAC;gBAEtE,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, forwardRef } from 'react';\nimport { ImageWithFallback } from '../components';\n\n/**\n * A Higher-Order Component (HOC) that adds image fallback functionality to a component\n * @param WrappedComponent The component to wrap\n * @returns A new component with image fallback functionality\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;\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;\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"]}
1
+ {"version":3,"file":"withImageFallback.js","sourceRoot":"","sources":["../../../../src/Modal/NordFlow/hoc/withImageFallback.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAAA,OAAO,KAAwB,MAAM,OAAO,CAAC;AAC7C,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAElD;;;;GAIG;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,IAA0B,CAAC;YAE3C,4DAA4D;YAC5D,IAAI,OAAO,CAAC,IAAI,KAAK,KAAK,EAAE,CAAC;gBAC3B,IAAM,KAAkD,OAAO,CAAC,KAAK,EAA7D,GAAG,SAAA,EAAE,GAAG,SAAA,EAAE,KAAK,WAAA,EAAE,MAAM,YAAA,EAAE,SAAS,eAAA,EAAK,IAAI,cAA7C,8CAA+C,CAAgB,CAAC;gBAEtE,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 * A Higher-Order Component (HOC) that adds image fallback functionality to a component\n * @param WrappedComponent The component to wrap\n * @returns A new component with image fallback functionality\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;\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;\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,18 @@
1
+ interface UseTestnetFaucetParams {
2
+ enabled: boolean;
3
+ balance: number;
4
+ minDeposit: number;
5
+ onBalanceRefresh?: () => Promise<void>;
6
+ }
7
+ interface UseTestnetFaucetResult {
8
+ isFaucetLoading: boolean;
9
+ faucetError: string | null;
10
+ showFaucetSuccess: boolean;
11
+ showFaucetOverlay: boolean;
12
+ requestTestnetTokens: () => Promise<void>;
13
+ }
14
+ /**
15
+ * Centralizes the faucet orchestration logic so it can be toggled from the widget entry point.
16
+ */
17
+ export declare function useTestnetFaucet({ enabled, balance, minDeposit, onBalanceRefresh, }: UseTestnetFaucetParams): UseTestnetFaucetResult;
18
+ export {};