@n1xyz/wallet-widget 0.0.33-alpha.1 → 0.0.33-alpha.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (137) hide show
  1. package/dist/animations/N1Loader.js +14 -8
  2. package/dist/animations/N1Loader.js.map +1 -1
  3. package/dist/animations/Processing.js +14 -8
  4. package/dist/animations/Processing.js.map +1 -1
  5. package/dist/components/LoadingFallback.js +6 -2
  6. package/dist/components/LoadingFallback.js.map +1 -1
  7. package/dist/components/Logo.js +25 -22
  8. package/dist/components/Logo.js.map +1 -1
  9. package/dist/components/N1ConnectButton.js +18 -12
  10. package/dist/components/N1ConnectButton.js.map +1 -1
  11. package/dist/components/logos/ArbitrumLogo.js +7 -3
  12. package/dist/components/logos/ArbitrumLogo.js.map +1 -1
  13. package/dist/components/logos/BaseLogo.js +7 -3
  14. package/dist/components/logos/BaseLogo.js.map +1 -1
  15. package/dist/components/logos/BeraLogo.js +7 -3
  16. package/dist/components/logos/BeraLogo.js.map +1 -1
  17. package/dist/components/logos/BitcoinLogo.js +7 -3
  18. package/dist/components/logos/BitcoinLogo.js.map +1 -1
  19. package/dist/components/logos/EthereumLogo.js +7 -3
  20. package/dist/components/logos/EthereumLogo.js.map +1 -1
  21. package/dist/components/logos/HyperliquidLogo.js +7 -3
  22. package/dist/components/logos/HyperliquidLogo.js.map +1 -1
  23. package/dist/components/logos/OptimismLogo.js +7 -3
  24. package/dist/components/logos/OptimismLogo.js.map +1 -1
  25. package/dist/components/logos/SolanaLogo.js +7 -3
  26. package/dist/components/logos/SolanaLogo.js.map +1 -1
  27. package/dist/components/logos/ZeroOneLogo.js +7 -3
  28. package/dist/components/logos/ZeroOneLogo.js.map +1 -1
  29. package/dist/components/logos/index.js +25 -9
  30. package/dist/components/logos/index.js.map +1 -1
  31. package/dist/config/solana.js +7 -3
  32. package/dist/config/solana.js.map +1 -1
  33. package/dist/config.js +5 -2
  34. package/dist/config.js.map +1 -1
  35. package/dist/context/n1-wallet-context.js +8 -4
  36. package/dist/context/n1-wallet-context.js.map +1 -1
  37. package/dist/errors/types.js +6 -3
  38. package/dist/errors/types.js.map +1 -1
  39. package/dist/features/onboarding-flow/N1WalletModal.js +59 -23
  40. package/dist/features/onboarding-flow/N1WalletModal.js.map +1 -1
  41. package/dist/features/onboarding-flow/OnboardingFlow.js +50 -46
  42. package/dist/features/onboarding-flow/OnboardingFlow.js.map +1 -1
  43. package/dist/features/onboarding-flow/components/ChainButton.js +7 -4
  44. package/dist/features/onboarding-flow/components/ChainButton.js.map +1 -1
  45. package/dist/features/onboarding-flow/components/Header.js +15 -11
  46. package/dist/features/onboarding-flow/components/Header.js.map +1 -1
  47. package/dist/features/onboarding-flow/components/ImageWithFallback.js +10 -6
  48. package/dist/features/onboarding-flow/components/ImageWithFallback.js.map +1 -1
  49. package/dist/features/onboarding-flow/components/TransactionTable.js +13 -10
  50. package/dist/features/onboarding-flow/components/TransactionTable.js.map +1 -1
  51. package/dist/features/onboarding-flow/components/WaitingMessage.js +14 -8
  52. package/dist/features/onboarding-flow/components/WaitingMessage.js.map +1 -1
  53. package/dist/features/onboarding-flow/components/index.js +21 -5
  54. package/dist/features/onboarding-flow/components/index.js.map +1 -1
  55. package/dist/features/onboarding-flow/index.js +5 -1
  56. package/dist/features/onboarding-flow/index.js.map +1 -1
  57. package/dist/features/onboarding-flow/providers/DepositFlowProvider.js +60 -55
  58. package/dist/features/onboarding-flow/providers/DepositFlowProvider.js.map +1 -1
  59. package/dist/features/onboarding-flow/providers/OnboardingStateProvider.js +48 -43
  60. package/dist/features/onboarding-flow/providers/OnboardingStateProvider.js.map +1 -1
  61. package/dist/features/onboarding-flow/providers/StateProvider.js +11 -7
  62. package/dist/features/onboarding-flow/providers/StateProvider.js.map +1 -1
  63. package/dist/features/onboarding-flow/providers/WalletConnectionProvider.js +74 -69
  64. package/dist/features/onboarding-flow/providers/WalletConnectionProvider.js.map +1 -1
  65. package/dist/features/onboarding-flow/providers/debug.js +21 -18
  66. package/dist/features/onboarding-flow/providers/debug.js.map +1 -1
  67. package/dist/features/onboarding-flow/providers/index.js +16 -5
  68. package/dist/features/onboarding-flow/providers/index.js.map +1 -1
  69. package/dist/features/onboarding-flow/providers/onboardingStateMachine.js +20 -15
  70. package/dist/features/onboarding-flow/providers/onboardingStateMachine.js.map +1 -1
  71. package/dist/features/onboarding-flow/screens/01-ConnectWalletScreen.js +11 -8
  72. package/dist/features/onboarding-flow/screens/01-ConnectWalletScreen.js.map +1 -1
  73. package/dist/features/onboarding-flow/screens/02-ChainSelectionScreen.js +38 -34
  74. package/dist/features/onboarding-flow/screens/02-ChainSelectionScreen.js.map +1 -1
  75. package/dist/features/onboarding-flow/screens/03-AmountInputScreen.js +51 -47
  76. package/dist/features/onboarding-flow/screens/03-AmountInputScreen.js.map +1 -1
  77. package/dist/features/onboarding-flow/screens/04-DepositProgressScreen.js +12 -8
  78. package/dist/features/onboarding-flow/screens/04-DepositProgressScreen.js.map +1 -1
  79. package/dist/features/onboarding-flow/screens/05-DepositSuccessScreen.js +28 -25
  80. package/dist/features/onboarding-flow/screens/05-DepositSuccessScreen.js.map +1 -1
  81. package/dist/features/onboarding-flow/screens/06-AuthLoadingScreen.js +13 -10
  82. package/dist/features/onboarding-flow/screens/06-AuthLoadingScreen.js.map +1 -1
  83. package/dist/features/onboarding-flow/screens/07-ErrorScreen.js +10 -7
  84. package/dist/features/onboarding-flow/screens/07-ErrorScreen.js.map +1 -1
  85. package/dist/features/onboarding-flow/screens/index.js +23 -7
  86. package/dist/features/onboarding-flow/screens/index.js.map +1 -1
  87. package/dist/features/onboarding-flow/types.js +6 -3
  88. package/dist/features/onboarding-flow/types.js.map +1 -1
  89. package/dist/features/onboarding-flow/utils/depositStorage.js +8 -3
  90. package/dist/features/onboarding-flow/utils/depositStorage.js.map +1 -1
  91. package/dist/features/onboarding-flow/utils/imageUtils.js +9 -3
  92. package/dist/features/onboarding-flow/utils/imageUtils.js.map +1 -1
  93. package/dist/features/onboarding-flow/utils/nordUser.js +38 -2
  94. package/dist/features/onboarding-flow/utils/nordUser.js.map +1 -1
  95. package/dist/features/onboarding-flow/utils/nordUtils.js +12 -5
  96. package/dist/features/onboarding-flow/utils/nordUtils.js.map +1 -1
  97. package/dist/features/onboarding-flow/utils/session.js +17 -14
  98. package/dist/features/onboarding-flow/utils/session.js.map +1 -1
  99. package/dist/features/onboarding-flow/utils/transaction.js +4 -1
  100. package/dist/features/onboarding-flow/utils/transaction.js.map +1 -1
  101. package/dist/features/onboarding-flow/utils/utils.js +16 -8
  102. package/dist/features/onboarding-flow/utils/utils.js.map +1 -1
  103. package/dist/features/onboarding-flow/utils/withImageFallback.js +15 -9
  104. package/dist/features/onboarding-flow/utils/withImageFallback.js.map +1 -1
  105. package/dist/hooks/index.js +18 -2
  106. package/dist/hooks/index.js.map +1 -1
  107. package/dist/hooks/useN1Wallet.js +10 -6
  108. package/dist/hooks/useN1Wallet.js.map +1 -1
  109. package/dist/hooks/useNordUserInitialization.js +34 -31
  110. package/dist/hooks/useNordUserInitialization.js.map +1 -1
  111. package/dist/index.js +21 -7
  112. package/dist/index.js.map +1 -1
  113. package/dist/polyfills/windowEthereumGuard.js +2 -1
  114. package/dist/polyfills/windowEthereumGuard.js.map +1 -1
  115. package/dist/providers/LazyWalletProvider.js +74 -38
  116. package/dist/providers/LazyWalletProvider.js.map +1 -1
  117. package/dist/providers/N1WalletProvider.js +109 -70
  118. package/dist/providers/N1WalletProvider.js.map +1 -1
  119. package/dist/providers/ShadowRootWrapper.js +10 -4
  120. package/dist/providers/ShadowRootWrapper.js.map +1 -1
  121. package/dist/providers/WalletErrorBoundary.js +11 -6
  122. package/dist/providers/WalletErrorBoundary.js.map +1 -1
  123. package/dist/styles/embedded-main-css.js +3 -1
  124. package/dist/styles/embedded-main-css.js.map +1 -1
  125. package/dist/types/wallet.js +7 -4
  126. package/dist/types/wallet.js.map +1 -1
  127. package/dist/utils/ed25519.js +20 -14
  128. package/dist/utils/ed25519.js.map +1 -1
  129. package/dist/utils/getPseudoName.js +10 -7
  130. package/dist/utils/getPseudoName.js.map +1 -1
  131. package/dist/utils/logger.js +5 -3
  132. package/dist/utils/logger.js.map +1 -1
  133. package/dist/utils/shortenString.js +6 -2
  134. package/dist/utils/shortenString.js.map +1 -1
  135. package/dist/utils/words.js +4 -1
  136. package/dist/utils/words.js.map +1 -1
  137. package/package.json +1 -2
@@ -1 +1 @@
1
- {"version":3,"file":"WaitingMessage.js","sourceRoot":"","sources":["../../../../src/features/onboarding-flow/components/WaitingMessage.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AACjE,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AACpE,OAAO,IAAI,MAAM,0BAA0B,CAAC;AAQ5C,MAAM,UAAU,cAAc,CAAC,EAIT;QAHpB,OAAO,aAAA,EACP,kBAAe,EAAf,UAAU,mBAAG,EAAE,KAAA,EACf,iBAAoB,EAApB,SAAS,mBAAG,QAAQ,KAAA;IAEpB,OAAO,CACL,eAAK,SAAS,EAAC,2CAA2C,aACvD,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,CACxB,KAAC,iBAAiB,IAAC,IAAI,EAAE,UAAU,GAAI,CACxC,CAAC,CAAC,CAAC,CACF,KAAC,qBAAqB,KAAG,CAC1B,EACD,eAAK,SAAS,EAAC,4BAA4B,aACzC,aAAI,SAAS,EAAC,mGAAmG,YAC/G,cAAK,SAAS,EAAC,UAAU,YACtB,OAAO,CAAC,OAAO,IAAI,OAAO,CAAC,KAAK,GAC7B,GACH,EACL,cAAK,SAAS,EAAC,mEAAmE,YAChF,cAAK,SAAS,EAAC,UAAU,YACtB,OAAO,CAAC,OAAO,IAAI,OAAO,CAAC,QAAQ,GAChC,GACF,IACF,IACF,CACP,CAAC;AACJ,CAAC;AAED,IAAM,WAAW,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,EAAE,UAAC,CAAC,EAAE,KAAK,IAAK,OAAA,KAAK,EAAL,CAAK,CAAC,CAAC;AAEnE,IAAM,YAAY,GAAG,cAAM,OAAA,CACzB,cAAK,SAAS,EAAC,6BAA6B,YACzC,WAAW,CAAC,GAAG,CAAC,UAAC,KAAK,IAAK,OAAA,CAC1B,eAEE,SAAS,EAAC,6EAA6E,EACvF,KAAK,EAAE;YACL,KAAK,EAAE,OAAO;YACd,MAAM,EAAE,OAAO;YACf,cAAc,EAAE,UAAG,KAAK,GAAG,IAAI,MAAG;YAClC,iBAAiB,EAAE,MAAM;SAC1B,iBACW,MAAM,IARb,mBAAY,KAAK,CAAE,CASxB,CACH,EAZ2B,CAY3B,CAAC,GACE,CACP,EAhB0B,CAgB1B,CAAC;AAEF,IAAM,qBAAqB,GAAG,cAAM,OAAA,CAClC,cACE,SAAS,EAAC,yCAAyC,gBACxC,sCAAsC,YAEjD,eAAK,SAAS,EAAC,yBAAyB,aACtC,cAAK,SAAS,EAAC,qIAAqI,YAClJ,cAAK,SAAS,EAAC,iFAAiF,YAC9F,KAAC,UAAU,IAAC,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,GAAI,GACjC,GACF,EACN,KAAC,YAAY,KAAG,EAChB,cAAK,SAAS,EAAC,8FAA8F,YAC3G,cAAK,SAAS,EAAC,0EAA0E,YACvF,KAAC,IAAI,IAAC,IAAI,EAAE,EAAE,EAAE,SAAS,EAAC,oBAAoB,GAAG,GAC7C,GACF,EACN,KAAC,YAAY,KAAG,EAChB,cAAK,SAAS,EAAC,8FAA8F,YAC3G,cAAK,SAAS,EAAC,0EAA0E,YACvF,KAAC,WAAW,IAAC,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,GAAI,GAClC,GACF,IACF,GACF,CACP,EAzBmC,CAyBnC,CAAC","sourcesContent":["import { WaitingMessageState } from '../types';\nimport { N1LoaderAnimation } from '../../../animations/N1Loader';\nimport { SolanaLogo, ZeroOneLogo } from '../../../components/logos';\nimport Logo from '../../../components/Logo';\n\ninterface WaitingMessageProps {\n message: WaitingMessageState;\n loaderSize?: number;\n animation?: 'loader' | 'transfer';\n}\n\nexport function WaitingMessage({\n message,\n loaderSize = 48,\n animation = 'loader',\n}: WaitingMessageProps) {\n return (\n <div className=\"flex flex-col items-center justify-center\">\n {animation === 'loader' ? (\n <N1LoaderAnimation size={loaderSize} />\n ) : (\n <TransferWaveAnimation />\n )}\n <div className=\"text-center w-[300px] my-4\">\n <h3 className=\"text-sm text-white transition-all duration-300 h-[32px] flex items-center justify-center relative\"> \n <div className=\"absolute\">\n {message.visible && message.title}\n </div>\n </h3>\n <div className=\"text-xs flex items-center justify-center relative mt-2 font-light\">\n <div className=\"absolute\">\n {message.visible && message.subtitle}\n </div>\n </div>\n </div>\n </div>\n );\n}\n\nconst DOT_INDICES = Array.from({ length: 7 }, (_, index) => index);\n\nconst TransferDots = () => (\n <div className=\"flex items-center gap-[3px]\">\n {DOT_INDICES.map((index) => (\n <span\n key={`wave-dot-${index}`}\n className=\"n1-ww-animate-transfer-dot n1-ww-force-motion rounded-full bg-n1-ww-main/90\"\n style={{\n width: '2.5px',\n height: '2.5px',\n animationDelay: `${index * 0.12}s`,\n animationDuration: '1.6s',\n }}\n aria-hidden=\"true\"\n />\n ))}\n </div>\n);\n\nconst TransferWaveAnimation = () => (\n <div\n className=\"flex w-full items-center justify-center\"\n aria-label=\"Solana deposit moving into N1 and 01\"\n >\n <div className=\"flex items-center gap-2\">\n <div className=\"relative h-7 w-7 rounded-full bg-gradient-to-br from-black via-neutral-900 to-neutral-800 p-px shadow-[0_12px_30px_rgba(0,0,0,0.6)]\">\n <div className=\"flex h-full w-full items-center justify-center rounded-full bg-black text-white\">\n <SolanaLogo width={14} height={14} />\n </div>\n </div>\n <TransferDots />\n <div className=\"relative h-7 w-7 rounded-full bg-n1-ww-gray-800/70 p-px shadow-[0_12px_30px_rgba(0,0,0,0.6)]\">\n <div className=\"flex h-full w-full items-center justify-center rounded-full bg-[#1b1b1b]\">\n <Logo size={12} className=\"text-n1-ww-main/90\" />\n </div>\n </div>\n <TransferDots />\n <div className=\"relative h-7 w-7 rounded-full bg-n1-ww-gray-800/70 p-px shadow-[0_12px_30px_rgba(0,0,0,0.6)]\">\n <div className=\"flex h-full w-full items-center justify-center rounded-full bg-[#1b1b1b]\">\n <ZeroOneLogo width={14} height={11} />\n </div>\n </div>\n </div>\n </div>\n);\n"]}
1
+ {"version":3,"file":"WaitingMessage.js","sourceRoot":"","sources":["../../../../src/features/onboarding-flow/components/WaitingMessage.tsx"],"names":[],"mappings":";;;;;AAWA,wCA0BC;;AApCD,yDAAiE;AACjE,mDAAoE;AACpE,kEAA4C;AAQ5C,SAAgB,cAAc,CAAC,EAIT;QAHpB,OAAO,aAAA,EACP,kBAAe,EAAf,UAAU,mBAAG,EAAE,KAAA,EACf,iBAAoB,EAApB,SAAS,mBAAG,QAAQ,KAAA;IAEpB,OAAO,CACL,iCAAK,SAAS,EAAC,2CAA2C,aACvD,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,CACxB,uBAAC,4BAAiB,IAAC,IAAI,EAAE,UAAU,GAAI,CACxC,CAAC,CAAC,CAAC,CACF,uBAAC,qBAAqB,KAAG,CAC1B,EACD,iCAAK,SAAS,EAAC,4BAA4B,aACzC,+BAAI,SAAS,EAAC,mGAAmG,YAC/G,gCAAK,SAAS,EAAC,UAAU,YACtB,OAAO,CAAC,OAAO,IAAI,OAAO,CAAC,KAAK,GAC7B,GACH,EACL,gCAAK,SAAS,EAAC,mEAAmE,YAChF,gCAAK,SAAS,EAAC,UAAU,YACtB,OAAO,CAAC,OAAO,IAAI,OAAO,CAAC,QAAQ,GAChC,GACF,IACF,IACF,CACP,CAAC;AACJ,CAAC;AAED,IAAM,WAAW,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,EAAE,UAAC,CAAC,EAAE,KAAK,IAAK,OAAA,KAAK,EAAL,CAAK,CAAC,CAAC;AAEnE,IAAM,YAAY,GAAG,cAAM,OAAA,CACzB,gCAAK,SAAS,EAAC,6BAA6B,YACzC,WAAW,CAAC,GAAG,CAAC,UAAC,KAAK,IAAK,OAAA,CAC1B,iCAEE,SAAS,EAAC,6EAA6E,EACvF,KAAK,EAAE;YACL,KAAK,EAAE,OAAO;YACd,MAAM,EAAE,OAAO;YACf,cAAc,EAAE,UAAG,KAAK,GAAG,IAAI,MAAG;YAClC,iBAAiB,EAAE,MAAM;SAC1B,iBACW,MAAM,IARb,mBAAY,KAAK,CAAE,CASxB,CACH,EAZ2B,CAY3B,CAAC,GACE,CACP,EAhB0B,CAgB1B,CAAC;AAEF,IAAM,qBAAqB,GAAG,cAAM,OAAA,CAClC,gCACE,SAAS,EAAC,yCAAyC,gBACxC,sCAAsC,YAEjD,iCAAK,SAAS,EAAC,yBAAyB,aACtC,gCAAK,SAAS,EAAC,qIAAqI,YAClJ,gCAAK,SAAS,EAAC,iFAAiF,YAC9F,uBAAC,kBAAU,IAAC,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,GAAI,GACjC,GACF,EACN,uBAAC,YAAY,KAAG,EAChB,gCAAK,SAAS,EAAC,8FAA8F,YAC3G,gCAAK,SAAS,EAAC,0EAA0E,YACvF,uBAAC,cAAI,IAAC,IAAI,EAAE,EAAE,EAAE,SAAS,EAAC,oBAAoB,GAAG,GAC7C,GACF,EACN,uBAAC,YAAY,KAAG,EAChB,gCAAK,SAAS,EAAC,8FAA8F,YAC3G,gCAAK,SAAS,EAAC,0EAA0E,YACvF,uBAAC,mBAAW,IAAC,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,GAAI,GAClC,GACF,IACF,GACF,CACP,EAzBmC,CAyBnC,CAAC","sourcesContent":["import { WaitingMessageState } from '../types';\nimport { N1LoaderAnimation } from '../../../animations/N1Loader';\nimport { SolanaLogo, ZeroOneLogo } from '../../../components/logos';\nimport Logo from '../../../components/Logo';\n\ninterface WaitingMessageProps {\n message: WaitingMessageState;\n loaderSize?: number;\n animation?: 'loader' | 'transfer';\n}\n\nexport function WaitingMessage({\n message,\n loaderSize = 48,\n animation = 'loader',\n}: WaitingMessageProps) {\n return (\n <div className=\"flex flex-col items-center justify-center\">\n {animation === 'loader' ? (\n <N1LoaderAnimation size={loaderSize} />\n ) : (\n <TransferWaveAnimation />\n )}\n <div className=\"text-center w-[300px] my-4\">\n <h3 className=\"text-sm text-white transition-all duration-300 h-[32px] flex items-center justify-center relative\"> \n <div className=\"absolute\">\n {message.visible && message.title}\n </div>\n </h3>\n <div className=\"text-xs flex items-center justify-center relative mt-2 font-light\">\n <div className=\"absolute\">\n {message.visible && message.subtitle}\n </div>\n </div>\n </div>\n </div>\n );\n}\n\nconst DOT_INDICES = Array.from({ length: 7 }, (_, index) => index);\n\nconst TransferDots = () => (\n <div className=\"flex items-center gap-[3px]\">\n {DOT_INDICES.map((index) => (\n <span\n key={`wave-dot-${index}`}\n className=\"n1-ww-animate-transfer-dot n1-ww-force-motion rounded-full bg-n1-ww-main/90\"\n style={{\n width: '2.5px',\n height: '2.5px',\n animationDelay: `${index * 0.12}s`,\n animationDuration: '1.6s',\n }}\n aria-hidden=\"true\"\n />\n ))}\n </div>\n);\n\nconst TransferWaveAnimation = () => (\n <div\n className=\"flex w-full items-center justify-center\"\n aria-label=\"Solana deposit moving into N1 and 01\"\n >\n <div className=\"flex items-center gap-2\">\n <div className=\"relative h-7 w-7 rounded-full bg-gradient-to-br from-black via-neutral-900 to-neutral-800 p-px shadow-[0_12px_30px_rgba(0,0,0,0.6)]\">\n <div className=\"flex h-full w-full items-center justify-center rounded-full bg-black text-white\">\n <SolanaLogo width={14} height={14} />\n </div>\n </div>\n <TransferDots />\n <div className=\"relative h-7 w-7 rounded-full bg-n1-ww-gray-800/70 p-px shadow-[0_12px_30px_rgba(0,0,0,0.6)]\">\n <div className=\"flex h-full w-full items-center justify-center rounded-full bg-[#1b1b1b]\">\n <Logo size={12} className=\"text-n1-ww-main/90\" />\n </div>\n </div>\n <TransferDots />\n <div className=\"relative h-7 w-7 rounded-full bg-n1-ww-gray-800/70 p-px shadow-[0_12px_30px_rgba(0,0,0,0.6)]\">\n <div className=\"flex h-full w-full items-center justify-center rounded-full bg-[#1b1b1b]\">\n <ZeroOneLogo width={14} height={11} />\n </div>\n </div>\n </div>\n </div>\n);\n"]}
@@ -1,6 +1,22 @@
1
- export * from './ImageWithFallback';
2
- export * from './ChainButton';
3
- export * from './TransactionTable';
4
- export * from './WaitingMessage';
5
- export * from './Header';
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./ImageWithFallback"), exports);
18
+ __exportStar(require("./ChainButton"), exports);
19
+ __exportStar(require("./TransactionTable"), exports);
20
+ __exportStar(require("./WaitingMessage"), exports);
21
+ __exportStar(require("./Header"), exports);
6
22
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/features/onboarding-flow/components/index.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAC;AACpC,cAAc,eAAe,CAAC;AAC9B,cAAc,oBAAoB,CAAC;AACnC,cAAc,kBAAkB,CAAC;AACjC,cAAc,UAAU,CAAC","sourcesContent":["export * from './ImageWithFallback';\nexport * from './ChainButton';\nexport * from './TransactionTable';\nexport * from './WaitingMessage';\nexport * from './Header';\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/features/onboarding-flow/components/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,sDAAoC;AACpC,gDAA8B;AAC9B,qDAAmC;AACnC,mDAAiC;AACjC,2CAAyB","sourcesContent":["export * from './ImageWithFallback';\nexport * from './ChainButton';\nexport * from './TransactionTable';\nexport * from './WaitingMessage';\nexport * from './Header';\n"]}
@@ -1,2 +1,6 @@
1
- export { OnboardingFlow } from './OnboardingFlow';
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.OnboardingFlow = void 0;
4
+ var OnboardingFlow_1 = require("./OnboardingFlow");
5
+ Object.defineProperty(exports, "OnboardingFlow", { enumerable: true, get: function () { return OnboardingFlow_1.OnboardingFlow; } });
2
6
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/features/onboarding-flow/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC","sourcesContent":["export { OnboardingFlow } from './OnboardingFlow';\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/features/onboarding-flow/index.ts"],"names":[],"mappings":";;;AAAA,mDAAkD;AAAzC,gHAAA,cAAc,OAAA","sourcesContent":["export { OnboardingFlow } from './OnboardingFlow';\n"]}
@@ -1,3 +1,4 @@
1
+ "use strict";
1
2
  var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
3
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
4
  return new (P || (P = Promise))(function (resolve, reject) {
@@ -34,57 +35,59 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
34
35
  if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
35
36
  }
36
37
  };
37
- import { jsx as _jsx } from "react/jsx-runtime";
38
- import { createContext, useCallback, useContext, useEffect, useRef, useState } from 'react';
39
- import { PublicKey } from '@solana/web3.js';
40
- import { getExplorerUrl, } from '../utils/transaction';
41
- import { useN1WalletContext } from '../../../hooks';
42
- import { logger } from '../../../utils/logger';
43
- import { OnboardingStep } from '../types';
44
- import { useOnboardingState } from './OnboardingStateProvider';
45
- import { clearLastDepositRecord, saveLastDepositRecord } from '../utils/depositStorage';
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.useDepositFlow = exports.DepositFlowProvider = void 0;
40
+ var jsx_runtime_1 = require("react/jsx-runtime");
41
+ var react_1 = require("react");
42
+ var web3_js_1 = require("@solana/web3.js");
43
+ var transaction_1 = require("../utils/transaction");
44
+ var hooks_1 = require("../../../hooks");
45
+ var logger_1 = require("../../../utils/logger");
46
+ var types_1 = require("../types");
47
+ var OnboardingStateProvider_1 = require("./OnboardingStateProvider");
48
+ var depositStorage_1 = require("../utils/depositStorage");
46
49
  var DEPOSIT_POLL_INTERVAL_MS = 5000;
47
50
  var SLOT_LOOKUP_TIMEOUT_MS = 2 * 60 * 1000;
48
51
  var DEPOSIT_EVENT_TIMEOUT_MS = 5 * 60 * 1000;
49
52
  var NORD_ACK_TIMEOUT_MS = 5 * 60 * 1000;
50
53
  // Create the context with a default value
51
- var DepositFlowContext = createContext(undefined);
54
+ var DepositFlowContext = (0, react_1.createContext)(undefined);
52
55
  /**
53
56
  * Provider component for the deposit flow state
54
57
  */
55
- export var DepositFlowProvider = function (_a) {
58
+ var DepositFlowProvider = function (_a) {
56
59
  var children = _a.children;
57
60
  // Get flow state context
58
- var _b = useOnboardingState(), state = _b.state, context = _b.context, flowActions = _b.actions, updateContext = _b.updateContext, isDebugOverride = _b.isDebugOverride;
61
+ var _b = (0, OnboardingStateProvider_1.useOnboardingState)(), state = _b.state, context = _b.context, flowActions = _b.actions, updateContext = _b.updateContext, isDebugOverride = _b.isDebugOverride;
59
62
  // Get wallet context
60
- var _c = useN1WalletContext(), address = _c.address, nord = _c.nord, nordUser = _c.nordUser;
63
+ var _c = (0, hooks_1.useN1WalletContext)(), address = _c.address, nord = _c.nord, nordUser = _c.nordUser;
61
64
  // chain
62
- var _d = useState(context.selectedChain), selectedChain = _d[0], setSelectedChain = _d[1];
65
+ var _d = (0, react_1.useState)(context.selectedChain), selectedChain = _d[0], setSelectedChain = _d[1];
63
66
  // transaction & deposit
64
- var _e = useState(context.amount), amount = _e[0], setAmount = _e[1];
65
- var _f = useState(false), isDepositing = _f[0], setIsDepositing = _f[1];
66
- var _g = useState('solana'), depositProgressPhase = _g[0], setDepositProgressPhase = _g[1];
67
- var _h = useState(context.transactionId), transactionId = _h[0], setTransactionId = _h[1];
68
- var _j = useState(null), transactionResult = _j[0], setTransactionResult = _j[1];
67
+ var _e = (0, react_1.useState)(context.amount), amount = _e[0], setAmount = _e[1];
68
+ var _f = (0, react_1.useState)(false), isDepositing = _f[0], setIsDepositing = _f[1];
69
+ var _g = (0, react_1.useState)('solana'), depositProgressPhase = _g[0], setDepositProgressPhase = _g[1];
70
+ var _h = (0, react_1.useState)(context.transactionId), transactionId = _h[0], setTransactionId = _h[1];
71
+ var _j = (0, react_1.useState)(null), transactionResult = _j[0], setTransactionResult = _j[1];
69
72
  // auth
70
- var _k = useState('loading'), authStatus = _k[0], setAuthStatus = _k[1];
71
- var _l = useState(null), authErrorMessage = _l[0], setAuthErrorMessage = _l[1];
72
- var _m = useState(null), authStatusMessage = _m[0], setAuthStatusMessage = _m[1];
73
+ var _k = (0, react_1.useState)('loading'), authStatus = _k[0], setAuthStatus = _k[1];
74
+ var _l = (0, react_1.useState)(null), authErrorMessage = _l[0], setAuthErrorMessage = _l[1];
75
+ var _m = (0, react_1.useState)(null), authStatusMessage = _m[0], setAuthStatusMessage = _m[1];
73
76
  // Use refs to track previous values
74
- var prevContextRef = useRef(context);
77
+ var prevContextRef = (0, react_1.useRef)(context);
75
78
  /**
76
79
  * Handle an error by transitioning to error state
77
80
  */
78
- var handleError = useCallback(function (error) {
79
- logger.error('Flow error:', error);
81
+ var handleError = (0, react_1.useCallback)(function (error) {
82
+ logger_1.logger.error('Flow error:', error);
80
83
  flowActions.setErrorState(error);
81
84
  }, [flowActions]);
82
- var authInFlightRef = useRef(false);
83
- var waitingForNordUserRef = useRef(false);
85
+ var authInFlightRef = (0, react_1.useRef)(false);
86
+ var waitingForNordUserRef = (0, react_1.useRef)(false);
84
87
  /**
85
88
  * Authenticate session
86
89
  */
87
- var performAuth = useCallback(function () { return __awaiter(void 0, void 0, void 0, function () {
90
+ var performAuth = (0, react_1.useCallback)(function () { return __awaiter(void 0, void 0, void 0, function () {
88
91
  var sessionPubKey, sessionId, sessionIdKey, error_1;
89
92
  return __generator(this, function (_a) {
90
93
  switch (_a.label) {
@@ -124,14 +127,14 @@ export var DepositFlowProvider = function (_a) {
124
127
  if (!sessionId) {
125
128
  throw new Error('Failed to get session ID after refresh');
126
129
  }
127
- logger.debug('Session refreshed successfully', {
130
+ logger_1.logger.debug('Session refreshed successfully', {
128
131
  sessionId: sessionId.toString(),
129
132
  });
130
133
  // Step 3: Store sessionId in localStorage
131
134
  if (address) {
132
135
  sessionIdKey = "n1_sessionId_".concat(address);
133
136
  localStorage.setItem(sessionIdKey, sessionId.toString());
134
- logger.debug('Stored sessionId in localStorage', { key: sessionIdKey });
137
+ logger_1.logger.debug('Stored sessionId in localStorage', { key: sessionIdKey });
135
138
  }
136
139
  // Step 4: Update status to success
137
140
  setAuthStatus('success');
@@ -162,7 +165,7 @@ export var DepositFlowProvider = function (_a) {
162
165
  setAuthStatusMessage,
163
166
  setAuthErrorMessage,
164
167
  ]);
165
- useEffect(function () {
168
+ (0, react_1.useEffect)(function () {
166
169
  if (waitingForNordUserRef.current && nordUser) {
167
170
  performAuth();
168
171
  }
@@ -170,14 +173,14 @@ export var DepositFlowProvider = function (_a) {
170
173
  /**
171
174
  * Update amount for deposit
172
175
  */
173
- var updateAmount = useCallback(function (newAmount) {
176
+ var updateAmount = (0, react_1.useCallback)(function (newAmount) {
174
177
  setAmount(newAmount);
175
178
  updateContext({ amount: newAmount });
176
179
  }, [updateContext]);
177
180
  /**
178
181
  * Start deposit process
179
182
  */
180
- var startDeposit = useCallback(function () { return __awaiter(void 0, void 0, void 0, function () {
183
+ var startDeposit = (0, react_1.useCallback)(function () { return __awaiter(void 0, void 0, void 0, function () {
181
184
  var protonClient, solanaConnection, recipientKey, usdcToken, normalizedAmount, txId, depositResponse, slot, eventIndex, result, depositRecord, depositError_1, errorMessage;
182
185
  var _a, _b, _c;
183
186
  return __generator(this, function (_d) {
@@ -185,7 +188,7 @@ export var DepositFlowProvider = function (_a) {
185
188
  case 0:
186
189
  if (isDepositing)
187
190
  return [2 /*return*/];
188
- logger.debug('Starting deposit process');
191
+ logger_1.logger.debug('Starting deposit process');
189
192
  if (!amount || parseFloat(amount) <= 0) {
190
193
  handleError(new Error('Invalid amount'));
191
194
  return [2 /*return*/];
@@ -208,7 +211,7 @@ export var DepositFlowProvider = function (_a) {
208
211
  handleError(new Error('Nord client is missing Solana or Proton configuration. Verify your Nord deployment.'));
209
212
  return [2 /*return*/];
210
213
  }
211
- recipientKey = new PublicKey(address);
214
+ recipientKey = new web3_js_1.PublicKey(address);
212
215
  usdcToken = Array.isArray(nord.tokens)
213
216
  ? nord.tokens.find(function (t) { return t.symbol === 'USDC'; })
214
217
  : null;
@@ -252,20 +255,20 @@ export var DepositFlowProvider = function (_a) {
252
255
  if (!txId) {
253
256
  throw new Error('Failed to submit deposit transaction.');
254
257
  }
255
- logger.debug('Deposit transaction submitted', { txId: txId });
258
+ logger_1.logger.debug('Deposit transaction submitted', { txId: txId });
256
259
  return [4 /*yield*/, waitForTransactionSlot(solanaConnection, txId)];
257
260
  case 6:
258
261
  slot = _d.sent();
259
- logger.debug('Solana slot detected for deposit', { slot: slot });
262
+ logger_1.logger.debug('Solana slot detected for deposit', { slot: slot });
260
263
  return [4 /*yield*/, waitForDepositEventIndex(protonClient, recipientKey, slot)];
261
264
  case 7:
262
265
  eventIndex = _d.sent();
263
- logger.debug('Deposit event indexed', { eventIndex: eventIndex });
266
+ logger_1.logger.debug('Deposit event indexed', { eventIndex: eventIndex });
264
267
  setDepositProgressPhase('nord');
265
268
  return [4 /*yield*/, waitForNordAcknowledgement(nord, eventIndex)];
266
269
  case 8:
267
270
  _d.sent();
268
- logger.debug('Nord acknowledged deposit event', { eventIndex: eventIndex });
271
+ logger_1.logger.debug('Nord acknowledged deposit event', { eventIndex: eventIndex });
269
272
  result = {
270
273
  success: true,
271
274
  transactionId: txId,
@@ -275,7 +278,7 @@ export var DepositFlowProvider = function (_a) {
275
278
  toAddress: 'Exchange Account',
276
279
  networkName: selectedChain,
277
280
  status: 'Completed',
278
- explorerUrl: getExplorerUrl(txId),
281
+ explorerUrl: (0, transaction_1.getExplorerUrl)(txId),
279
282
  };
280
283
  depositRecord = {
281
284
  transactionId: txId,
@@ -286,11 +289,11 @@ export var DepositFlowProvider = function (_a) {
286
289
  chainNetwork: (_c = context.selectedChainNetwork) !== null && _c !== void 0 ? _c : null,
287
290
  timestamp: Date.now(),
288
291
  };
289
- saveLastDepositRecord(address, depositRecord);
292
+ (0, depositStorage_1.saveLastDepositRecord)(address, depositRecord);
290
293
  // Update state with transaction result
291
294
  setTransactionId(txId);
292
295
  setTransactionResult(result);
293
- logger.debug('Transaction completed successfully');
296
+ logger_1.logger.debug('Transaction completed successfully');
294
297
  flowActions.markDepositSuccess({
295
298
  transactionId: txId,
296
299
  record: depositRecord,
@@ -298,7 +301,7 @@ export var DepositFlowProvider = function (_a) {
298
301
  return [3 /*break*/, 11];
299
302
  case 9:
300
303
  depositError_1 = _d.sent();
301
- logger.error('Deposit process failed', depositError_1);
304
+ logger_1.logger.error('Deposit process failed', depositError_1);
302
305
  errorMessage = depositError_1 instanceof Error
303
306
  ? depositError_1.message
304
307
  : 'Failed to process deposit';
@@ -326,8 +329,8 @@ export var DepositFlowProvider = function (_a) {
326
329
  /**
327
330
  * Complete the deposit process and move to the next screen
328
331
  */
329
- var completeDeposit = useCallback(function () {
330
- clearLastDepositRecord(address);
332
+ var completeDeposit = (0, react_1.useCallback)(function () {
333
+ (0, depositStorage_1.clearLastDepositRecord)(address);
331
334
  updateContext({ lastDeposit: null });
332
335
  if (context.isDepositOnlyFlow) {
333
336
  flowActions.completeFlow({
@@ -367,7 +370,7 @@ export var DepositFlowProvider = function (_a) {
367
370
  /**
368
371
  * Update state based on context changes
369
372
  */
370
- useEffect(function () {
373
+ (0, react_1.useEffect)(function () {
371
374
  var prevContext = prevContextRef.current;
372
375
  // Only update state if the relevant context values have actually changed
373
376
  if (context.selectedChain !== prevContext.selectedChain) {
@@ -382,9 +385,9 @@ export var DepositFlowProvider = function (_a) {
382
385
  // Update the ref to the current context
383
386
  prevContextRef.current = context;
384
387
  }, [context]);
385
- useEffect(function () {
388
+ (0, react_1.useEffect)(function () {
386
389
  var _a, _b;
387
- if (!isDebugOverride || state !== OnboardingStep.DEPOSIT_SUCCESS || transactionResult) {
390
+ if (!isDebugOverride || state !== types_1.OnboardingStep.DEPOSIT_SUCCESS || transactionResult) {
388
391
  return;
389
392
  }
390
393
  var mockTransactionId = (_a = context.transactionId) !== null && _a !== void 0 ? _a : 'debug-tx-12345';
@@ -399,11 +402,12 @@ export var DepositFlowProvider = function (_a) {
399
402
  toAddress: 'Nord Account',
400
403
  networkName: fallbackChain,
401
404
  status: 'Completed',
402
- explorerUrl: getExplorerUrl(mockTransactionId),
405
+ explorerUrl: (0, transaction_1.getExplorerUrl)(mockTransactionId),
403
406
  });
404
407
  }, [isDebugOverride, state, transactionResult, context, address]);
405
- return (_jsx(DepositFlowContext.Provider, { value: contextValue, children: children }));
408
+ return ((0, jsx_runtime_1.jsx)(DepositFlowContext.Provider, { value: contextValue, children: children }));
406
409
  };
410
+ exports.DepositFlowProvider = DepositFlowProvider;
407
411
  var delay = function (ms) {
408
412
  return new Promise(function (resolve) {
409
413
  setTimeout(resolve, ms);
@@ -415,7 +419,7 @@ var waitForTransactionSlot = function (connection, signature) { return __awaiter
415
419
  return __generator(this, function (_b) {
416
420
  switch (_b.label) {
417
421
  case 0:
418
- logger.debug('Waiting for Solana confirmation for deposit', { signature: signature });
422
+ logger_1.logger.debug('Waiting for Solana confirmation for deposit', { signature: signature });
419
423
  deadline = Date.now() + SLOT_LOOKUP_TIMEOUT_MS;
420
424
  _b.label = 1;
421
425
  case 1:
@@ -445,7 +449,7 @@ var waitForDepositEventIndex = function (protonClient, recipient, slot) { return
445
449
  return __generator(this, function (_a) {
446
450
  switch (_a.label) {
447
451
  case 0:
448
- logger.debug('Polling Proton for deposit entry', { slot: slot });
452
+ logger_1.logger.debug('Polling Proton for deposit entry', { slot: slot });
449
453
  deadline = Date.now() + DEPOSIT_EVENT_TIMEOUT_MS;
450
454
  _a.label = 1;
451
455
  case 1:
@@ -486,7 +490,7 @@ var waitForNordAcknowledgement = function (nord, targetEventIndex) { return __aw
486
490
  return __generator(this, function (_a) {
487
491
  switch (_a.label) {
488
492
  case 0:
489
- logger.debug('Polling Nord for deposit acknowledgement', {
493
+ logger_1.logger.debug('Polling Nord for deposit acknowledgement', {
490
494
  targetEventIndex: targetEventIndex,
491
495
  });
492
496
  deadline = Date.now() + NORD_ACK_TIMEOUT_MS;
@@ -515,11 +519,12 @@ var waitForNordAcknowledgement = function (nord, targetEventIndex) { return __aw
515
519
  /**
516
520
  * Hook to use the deposit flow context
517
521
  */
518
- export var useDepositFlow = function () {
519
- var context = useContext(DepositFlowContext);
522
+ var useDepositFlow = function () {
523
+ var context = (0, react_1.useContext)(DepositFlowContext);
520
524
  if (context === undefined) {
521
525
  throw new Error('useDepositFlow must be used within a DepositFlowProvider');
522
526
  }
523
527
  return context;
524
528
  };
529
+ exports.useDepositFlow = useDepositFlow;
525
530
  //# sourceMappingURL=DepositFlowProvider.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"DepositFlowProvider.js","sourceRoot":"","sources":["../../../../src/features/onboarding-flow/providers/DepositFlowProvider.tsx"],"names":[],"mappings":"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","sourcesContent":["import React, { createContext, useCallback, useContext, useEffect, useRef, useState } from 'react';\nimport { Connection, PublicKey } from '@solana/web3.js';\nimport {\n getExplorerUrl,\n TransactionResult,\n} from '../utils/transaction';\nimport { useN1WalletContext } from '../../../hooks';\nimport { logger } from '../../../utils/logger';\nimport { OnboardingStep } from '../types';\nimport { useOnboardingState } from './OnboardingStateProvider';\nimport { clearLastDepositRecord, saveLastDepositRecord } from '../utils/depositStorage';\n\nconst DEPOSIT_POLL_INTERVAL_MS = 5_000;\nconst SLOT_LOOKUP_TIMEOUT_MS = 2 * 60 * 1_000;\nconst DEPOSIT_EVENT_TIMEOUT_MS = 5 * 60 * 1_000;\nconst NORD_ACK_TIMEOUT_MS = 5 * 60 * 1_000;\n\ntype DepositProgressPhase = 'solana' | 'nord';\n\ninterface ProtonDepositRecord {\n eventIndex?: number | string | null;\n createdAtSlot: number;\n amount: number;\n depositorTokenAccount: string;\n bufferAccount: string;\n recipient: string;\n mint: string;\n}\n\ninterface ProtonClientLike {\n depositsForRecipient: (\n recipient: PublicKey,\n options: {\n startSlot?: number;\n order: 'desc' | 'asc';\n }\n ) => Promise<ProtonDepositRecord[]>;\n}\n\n// Define the shape of the deposit state value\nexport interface DepositFlowContextValue {\n amount: string;\n isDepositing: boolean;\n depositProgressPhase: DepositProgressPhase;\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 DepositFlowContext = createContext<DepositFlowContextValue | undefined>(undefined);\n\n// Props for the provider component\ninterface DepositFlowProviderProps {\n children: React.ReactNode;\n}\n\n/**\n * Provider component for the deposit flow state\n */\nexport const DepositFlowProvider: React.FC<DepositFlowProviderProps> = ({\n children,\n}) => {\n // Get flow state context\n const {\n state,\n context,\n actions: flowActions,\n updateContext,\n isDebugOverride,\n } = useOnboardingState();\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 [depositProgressPhase, setDepositProgressPhase] =\n useState<DepositProgressPhase>('solana');\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 flowActions.setErrorState(error);\n },\n [flowActions]\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 flowActions.completeFlow({\n hasActiveSession: true,\n hasNordAccount: true,\n });\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 flowActions,\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 updateContext({ amount: newAmount });\n },\n [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 if (!nord) {\n handleError(\n new Error(\n 'Nord client is unavailable. Please check your configuration and try again.'\n )\n );\n return;\n }\n\n if (!nordUser) {\n handleError(\n new Error(\n 'Your Nord session is not ready yet. Reconnect your wallet to retry.'\n )\n );\n return;\n }\n\n if (!address) {\n handleError(\n new Error(\n 'We were unable to determine your wallet address. Please reconnect your wallet and try again.'\n )\n );\n return;\n }\n\n const protonClient = nord.protonClient as ProtonClientLike | undefined;\n const solanaConnection = nord.solanaConnection as Connection | undefined;\n\n if (!protonClient || !solanaConnection) {\n handleError(\n new Error(\n 'Nord client is missing Solana or Proton configuration. Verify your Nord deployment.'\n )\n );\n return;\n }\n\n const recipientKey = new PublicKey(address);\n\n const usdcToken = Array.isArray(nord.tokens)\n ? nord.tokens.find((t: any) => t.symbol === 'USDC')\n : null;\n\n if (!usdcToken) {\n handleError(\n new Error(\n 'Nord token configuration is missing USDC. Verify your Nord deployment.'\n )\n );\n return;\n }\n\n setIsDepositing(true);\n setDepositProgressPhase('solana');\n flowActions.startDeposit();\n\n try {\n const normalizedAmount = parseFloat(amount);\n let txId: string | null = null;\n\n if (typeof nordUser.deposit === 'function') {\n const depositResponse = await nordUser.deposit({\n amount: normalizedAmount,\n tokenId: usdcToken.tokenId,\n });\n\n if (depositResponse) {\n if (typeof depositResponse === 'string') {\n txId = depositResponse;\n } else if (\n typeof depositResponse === 'object' &&\n 'signature' in depositResponse &&\n typeof depositResponse.signature === 'string'\n ) {\n txId = depositResponse.signature;\n }\n }\n }\n\n if (!txId) {\n txId = await nordUser.depositSpl(normalizedAmount, usdcToken.tokenId);\n }\n\n if (!txId) {\n throw new Error('Failed to submit deposit transaction.');\n }\n\n logger.debug('Deposit transaction submitted', { txId });\n\n const slot = await waitForTransactionSlot(solanaConnection, txId);\n logger.debug('Solana slot detected for deposit', { slot });\n\n const eventIndex = await waitForDepositEventIndex(\n protonClient,\n recipientKey,\n slot\n );\n\n logger.debug('Deposit event indexed', { eventIndex });\n setDepositProgressPhase('nord');\n\n await waitForNordAcknowledgement(nord, eventIndex);\n logger.debug('Nord acknowledged deposit event', { eventIndex });\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 flowActions.markDepositSuccess({\n transactionId: txId,\n record: depositRecord,\n });\n } catch (depositError) {\n logger.error('Deposit process failed', depositError);\n const errorMessage = depositError instanceof Error\n ? depositError.message\n : 'Failed to process deposit';\n\n flowActions.markDepositFailed(errorMessage);\n return; // Exit early\n } finally {\n setIsDepositing(false);\n }\n }, [\n isDepositing,\n selectedChain,\n amount,\n address,\n flowActions,\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 flowActions.completeFlow({\n hasNordAccount: true,\n hasActiveSession: true,\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 flowActions.completeFlow({\n hasNordAccount: true,\n hasActiveSession: true,\n });\n } else {\n // If user doesn't have an active session, go to authentication flow\n flowActions.requireAuth({ hasNordAccount: true });\n }\n }, [context.hasActiveSession, context.isDepositOnlyFlow, flowActions, address, updateContext]);\n\n\n\n\n\n // Create the context value\n const contextValue: DepositFlowContextValue = {\n amount,\n isDepositing,\n depositProgressPhase,\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 !== OnboardingStep.DEPOSIT_SUCCESS || transactionResult) {\n return;\n }\n\n const mockTransactionId = context.transactionId ?? 'debug-tx-12345';\n const fallbackChain = context.selectedChain ?? '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 <DepositFlowContext.Provider value={contextValue}>\n {children}\n </DepositFlowContext.Provider>\n );\n};\n\nconst delay = (ms: number) =>\n new Promise<void>((resolve) => {\n setTimeout(resolve, ms);\n });\n\nconst waitForTransactionSlot = async (\n connection: Connection,\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\nconst 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\nconst 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/**\n * Hook to use the deposit flow context\n */\nexport const useDepositFlow = (): DepositFlowContextValue => {\n const context = useContext(DepositFlowContext);\n if (context === undefined) {\n throw new Error('useDepositFlow must be used within a DepositFlowProvider');\n }\n return context;\n};\n"]}
1
+ {"version":3,"file":"DepositFlowProvider.js","sourceRoot":"","sources":["../../../../src/features/onboarding-flow/providers/DepositFlowProvider.tsx"],"names":[],"mappings":"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","sourcesContent":["import React, { createContext, useCallback, useContext, useEffect, useRef, useState } from 'react';\nimport { Connection, PublicKey } from '@solana/web3.js';\nimport {\n getExplorerUrl,\n TransactionResult,\n} from '../utils/transaction';\nimport { useN1WalletContext } from '../../../hooks';\nimport { logger } from '../../../utils/logger';\nimport { OnboardingStep } from '../types';\nimport { useOnboardingState } from './OnboardingStateProvider';\nimport { clearLastDepositRecord, saveLastDepositRecord } from '../utils/depositStorage';\n\nconst DEPOSIT_POLL_INTERVAL_MS = 5_000;\nconst SLOT_LOOKUP_TIMEOUT_MS = 2 * 60 * 1_000;\nconst DEPOSIT_EVENT_TIMEOUT_MS = 5 * 60 * 1_000;\nconst NORD_ACK_TIMEOUT_MS = 5 * 60 * 1_000;\n\ntype DepositProgressPhase = 'solana' | 'nord';\n\ninterface ProtonDepositRecord {\n eventIndex?: number | string | null;\n createdAtSlot: number;\n amount: number;\n depositorTokenAccount: string;\n bufferAccount: string;\n recipient: string;\n mint: string;\n}\n\ninterface ProtonClientLike {\n depositsForRecipient: (\n recipient: PublicKey,\n options: {\n startSlot?: number;\n order: 'desc' | 'asc';\n }\n ) => Promise<ProtonDepositRecord[]>;\n}\n\n// Define the shape of the deposit state value\nexport interface DepositFlowContextValue {\n amount: string;\n isDepositing: boolean;\n depositProgressPhase: DepositProgressPhase;\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 DepositFlowContext = createContext<DepositFlowContextValue | undefined>(undefined);\n\n// Props for the provider component\ninterface DepositFlowProviderProps {\n children: React.ReactNode;\n}\n\n/**\n * Provider component for the deposit flow state\n */\nexport const DepositFlowProvider: React.FC<DepositFlowProviderProps> = ({\n children,\n}) => {\n // Get flow state context\n const {\n state,\n context,\n actions: flowActions,\n updateContext,\n isDebugOverride,\n } = useOnboardingState();\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 [depositProgressPhase, setDepositProgressPhase] =\n useState<DepositProgressPhase>('solana');\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 flowActions.setErrorState(error);\n },\n [flowActions]\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 flowActions.completeFlow({\n hasActiveSession: true,\n hasNordAccount: true,\n });\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 flowActions,\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 updateContext({ amount: newAmount });\n },\n [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 if (!nord) {\n handleError(\n new Error(\n 'Nord client is unavailable. Please check your configuration and try again.'\n )\n );\n return;\n }\n\n if (!nordUser) {\n handleError(\n new Error(\n 'Your Nord session is not ready yet. Reconnect your wallet to retry.'\n )\n );\n return;\n }\n\n if (!address) {\n handleError(\n new Error(\n 'We were unable to determine your wallet address. Please reconnect your wallet and try again.'\n )\n );\n return;\n }\n\n const protonClient = nord.protonClient as ProtonClientLike | undefined;\n const solanaConnection = nord.solanaConnection as Connection | undefined;\n\n if (!protonClient || !solanaConnection) {\n handleError(\n new Error(\n 'Nord client is missing Solana or Proton configuration. Verify your Nord deployment.'\n )\n );\n return;\n }\n\n const recipientKey = new PublicKey(address);\n\n const usdcToken = Array.isArray(nord.tokens)\n ? nord.tokens.find((t: any) => t.symbol === 'USDC')\n : null;\n\n if (!usdcToken) {\n handleError(\n new Error(\n 'Nord token configuration is missing USDC. Verify your Nord deployment.'\n )\n );\n return;\n }\n\n setIsDepositing(true);\n setDepositProgressPhase('solana');\n flowActions.startDeposit();\n\n try {\n const normalizedAmount = parseFloat(amount);\n let txId: string | null = null;\n\n if (typeof nordUser.deposit === 'function') {\n const depositResponse = await nordUser.deposit({\n amount: normalizedAmount,\n tokenId: usdcToken.tokenId,\n });\n\n if (depositResponse) {\n if (typeof depositResponse === 'string') {\n txId = depositResponse;\n } else if (\n typeof depositResponse === 'object' &&\n 'signature' in depositResponse &&\n typeof depositResponse.signature === 'string'\n ) {\n txId = depositResponse.signature;\n }\n }\n }\n\n if (!txId) {\n txId = await nordUser.depositSpl(normalizedAmount, usdcToken.tokenId);\n }\n\n if (!txId) {\n throw new Error('Failed to submit deposit transaction.');\n }\n\n logger.debug('Deposit transaction submitted', { txId });\n\n const slot = await waitForTransactionSlot(solanaConnection, txId);\n logger.debug('Solana slot detected for deposit', { slot });\n\n const eventIndex = await waitForDepositEventIndex(\n protonClient,\n recipientKey,\n slot\n );\n\n logger.debug('Deposit event indexed', { eventIndex });\n setDepositProgressPhase('nord');\n\n await waitForNordAcknowledgement(nord, eventIndex);\n logger.debug('Nord acknowledged deposit event', { eventIndex });\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 flowActions.markDepositSuccess({\n transactionId: txId,\n record: depositRecord,\n });\n } catch (depositError) {\n logger.error('Deposit process failed', depositError);\n const errorMessage = depositError instanceof Error\n ? depositError.message\n : 'Failed to process deposit';\n\n flowActions.markDepositFailed(errorMessage);\n return; // Exit early\n } finally {\n setIsDepositing(false);\n }\n }, [\n isDepositing,\n selectedChain,\n amount,\n address,\n flowActions,\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 flowActions.completeFlow({\n hasNordAccount: true,\n hasActiveSession: true,\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 flowActions.completeFlow({\n hasNordAccount: true,\n hasActiveSession: true,\n });\n } else {\n // If user doesn't have an active session, go to authentication flow\n flowActions.requireAuth({ hasNordAccount: true });\n }\n }, [context.hasActiveSession, context.isDepositOnlyFlow, flowActions, address, updateContext]);\n\n\n\n\n\n // Create the context value\n const contextValue: DepositFlowContextValue = {\n amount,\n isDepositing,\n depositProgressPhase,\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 !== OnboardingStep.DEPOSIT_SUCCESS || transactionResult) {\n return;\n }\n\n const mockTransactionId = context.transactionId ?? 'debug-tx-12345';\n const fallbackChain = context.selectedChain ?? '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 <DepositFlowContext.Provider value={contextValue}>\n {children}\n </DepositFlowContext.Provider>\n );\n};\n\nconst delay = (ms: number) =>\n new Promise<void>((resolve) => {\n setTimeout(resolve, ms);\n });\n\nconst waitForTransactionSlot = async (\n connection: Connection,\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\nconst 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\nconst 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/**\n * Hook to use the deposit flow context\n */\nexport const useDepositFlow = (): DepositFlowContextValue => {\n const context = useContext(DepositFlowContext);\n if (context === undefined) {\n throw new Error('useDepositFlow must be used within a DepositFlowProvider');\n }\n return context;\n};\n"]}