@n1xyz/wallet-widget 0.0.35-alpha.2 → 0.0.35-alpha.20

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (608) hide show
  1. package/dist/adapters/evm.js.map +1 -0
  2. package/dist/adapters/factory.js.map +1 -0
  3. package/dist/adapters/index.js.map +1 -0
  4. package/dist/adapters/solana.js.map +1 -0
  5. package/dist/adapters/types.js.map +1 -0
  6. package/dist/animations/N1Loader.js.map +1 -0
  7. package/dist/animations/Processing.js.map +1 -0
  8. package/dist/bridge-assist/cctp-solana.d.ts +1 -0
  9. package/dist/bridge-assist/cctp-solana.js +12 -6
  10. package/dist/bridge-assist/cctp-solana.js.map +1 -1
  11. package/dist/components/LoadingFallback.js.map +1 -0
  12. package/dist/components/Logo.js.map +1 -0
  13. package/dist/components/N1ConnectButton.js.map +1 -0
  14. package/dist/components/logos/ArbitrumLogo.js.map +1 -0
  15. package/dist/components/logos/BaseLogo.js.map +1 -0
  16. package/dist/components/logos/BeraLogo.js.map +1 -0
  17. package/dist/components/logos/BitcoinLogo.js.map +1 -0
  18. package/dist/components/logos/EthereumLogo.js.map +1 -0
  19. package/dist/components/logos/HyperliquidLogo.js.map +1 -0
  20. package/dist/components/logos/OptimismLogo.js.map +1 -0
  21. package/dist/components/logos/SolanaLogo.js.map +1 -0
  22. package/dist/components/logos/ZeroOneLogo.js.map +1 -0
  23. package/dist/components/logos/index.js.map +1 -0
  24. package/dist/{src/config → config}/chains.js +45 -15
  25. package/dist/config/chains.js.map +1 -0
  26. package/dist/config/dynamic.js.map +1 -0
  27. package/dist/config/solana.js.map +1 -0
  28. package/dist/config/turnkey.js.map +1 -0
  29. package/dist/context/n1-wallet-context.js.map +1 -0
  30. package/dist/errors/types.js.map +1 -0
  31. package/dist/features/onboarding-flow/N1WalletModal.js.map +1 -0
  32. package/dist/features/onboarding-flow/OnboardingFlow.js.map +1 -0
  33. package/dist/{src/features → features}/onboarding-flow/bridge-assist/client.js +0 -1
  34. package/dist/features/onboarding-flow/bridge-assist/client.js.map +1 -0
  35. package/dist/features/onboarding-flow/bridge-assist/config.js.map +1 -0
  36. package/dist/features/onboarding-flow/bridge-assist/index.js.map +1 -0
  37. package/dist/features/onboarding-flow/bridge-assist/types.js.map +1 -0
  38. package/dist/{src/features → features}/onboarding-flow/cctp/bridgeKitClient.d.ts +1 -0
  39. package/dist/{src/features → features}/onboarding-flow/cctp/bridgeKitClient.js +71 -12
  40. package/dist/features/onboarding-flow/cctp/bridgeKitClient.js.map +1 -0
  41. package/dist/features/onboarding-flow/cctp/clientFactory.js.map +1 -0
  42. package/dist/features/onboarding-flow/cctp/config.js.map +1 -0
  43. package/dist/features/onboarding-flow/cctp/mockCctpClient.js.map +1 -0
  44. package/dist/{src/features → features}/onboarding-flow/cctp/solanaClaim.d.ts +1 -1
  45. package/dist/features/onboarding-flow/cctp/solanaClaim.js +2 -0
  46. package/dist/features/onboarding-flow/cctp/solanaClaim.js.map +1 -0
  47. package/dist/features/onboarding-flow/cctp/types.js.map +1 -0
  48. package/dist/features/onboarding-flow/components/ChainButton.js.map +1 -0
  49. package/dist/features/onboarding-flow/components/Header.js.map +1 -0
  50. package/dist/features/onboarding-flow/components/ImageWithFallback.js.map +1 -0
  51. package/dist/{src/features → features}/onboarding-flow/components/TransactionTable.js +6 -1
  52. package/dist/features/onboarding-flow/components/TransactionTable.js.map +1 -0
  53. package/dist/features/onboarding-flow/components/WaitingMessage.js.map +1 -0
  54. package/dist/features/onboarding-flow/components/index.js.map +1 -0
  55. package/dist/features/onboarding-flow/errors/depositError.js.map +1 -0
  56. package/dist/{src/features → features}/onboarding-flow/hooks/useBridgeDeposit.js +60 -15
  57. package/dist/features/onboarding-flow/hooks/useBridgeDeposit.js.map +1 -0
  58. package/dist/features/onboarding-flow/hooks/useDepositAuth.js.map +1 -0
  59. package/dist/features/onboarding-flow/hooks/useDepositHydration.js.map +1 -0
  60. package/dist/{src/features → features}/onboarding-flow/hooks/usePendingDepositState.js +27 -2
  61. package/dist/features/onboarding-flow/hooks/usePendingDepositState.js.map +1 -0
  62. package/dist/{src/features → features}/onboarding-flow/hooks/useSolanaDeposit.js +1 -1
  63. package/dist/features/onboarding-flow/hooks/useSolanaDeposit.js.map +1 -0
  64. package/dist/features/onboarding-flow/index.js.map +1 -0
  65. package/dist/{src/features → features}/onboarding-flow/providers/DepositFlowProvider.js +9 -4
  66. package/dist/features/onboarding-flow/providers/DepositFlowProvider.js.map +1 -0
  67. package/dist/{src/features → features}/onboarding-flow/providers/OnboardingStateProvider.js +2 -4
  68. package/dist/features/onboarding-flow/providers/OnboardingStateProvider.js.map +1 -0
  69. package/dist/features/onboarding-flow/providers/StateProvider.js.map +1 -0
  70. package/dist/{src/features → features}/onboarding-flow/providers/WalletConnectionProvider.js +136 -74
  71. package/dist/features/onboarding-flow/providers/WalletConnectionProvider.js.map +1 -0
  72. package/dist/{src/features → features}/onboarding-flow/providers/debug.js +14 -1
  73. package/dist/features/onboarding-flow/providers/debug.js.map +1 -0
  74. package/dist/features/onboarding-flow/providers/index.js.map +1 -0
  75. package/dist/features/onboarding-flow/providers/onboardingStateMachine.js.map +1 -0
  76. package/dist/features/onboarding-flow/screens/00-EntrySelectionScreen.js.map +1 -0
  77. package/dist/features/onboarding-flow/screens/01-ConnectWalletScreen.js.map +1 -0
  78. package/dist/features/onboarding-flow/screens/02-TurnkeyAuthScreen.js.map +1 -0
  79. package/dist/features/onboarding-flow/screens/03-TurnkeyPreparingScreen.js.map +1 -0
  80. package/dist/features/onboarding-flow/screens/04-ChainSelectionScreen.js.map +1 -0
  81. package/dist/{src/features → features}/onboarding-flow/screens/05-AmountInputScreen.d.ts +1 -1
  82. package/dist/{src/features → features}/onboarding-flow/screens/05-AmountInputScreen.js +25 -6
  83. package/dist/features/onboarding-flow/screens/05-AmountInputScreen.js.map +1 -0
  84. package/dist/{src/features → features}/onboarding-flow/screens/06-DepositProgressScreen.js +12 -21
  85. package/dist/features/onboarding-flow/screens/06-DepositProgressScreen.js.map +1 -0
  86. package/dist/features/onboarding-flow/screens/07-DepositSuccessScreen.js.map +1 -0
  87. package/dist/features/onboarding-flow/screens/08-AuthLoadingScreen.js.map +1 -0
  88. package/dist/features/onboarding-flow/screens/09-ErrorScreen.js.map +1 -0
  89. package/dist/features/onboarding-flow/screens/index.js.map +1 -0
  90. package/dist/features/onboarding-flow/turnkey/turnkeySessionMachine.js.map +1 -0
  91. package/dist/features/onboarding-flow/types.js.map +1 -0
  92. package/dist/features/onboarding-flow/utils/bridgeUtils.js.map +1 -0
  93. package/dist/features/onboarding-flow/utils/deposit/attestationUtils.js.map +1 -0
  94. package/dist/features/onboarding-flow/utils/deposit/bridgeUtils.js.map +1 -0
  95. package/dist/{src/features → features}/onboarding-flow/utils/deposit/claimConfirmation.js +41 -7
  96. package/dist/features/onboarding-flow/utils/deposit/claimConfirmation.js.map +1 -0
  97. package/dist/{src/features → features}/onboarding-flow/utils/deposit/claimSubmission.d.ts +1 -1
  98. package/dist/{src/features → features}/onboarding-flow/utils/deposit/claimSubmission.js +58 -37
  99. package/dist/features/onboarding-flow/utils/deposit/claimSubmission.js.map +1 -0
  100. package/dist/features/onboarding-flow/utils/deposit/depositPolling.js.map +1 -0
  101. package/dist/features/onboarding-flow/utils/deposit/evmTxInterceptor.js.map +1 -0
  102. package/dist/features/onboarding-flow/utils/deposit/nonceUtils.js.map +1 -0
  103. package/dist/{src/features → features}/onboarding-flow/utils/deposit/solanaDepositTransaction.d.ts +2 -1
  104. package/dist/features/onboarding-flow/utils/deposit/solanaDepositTransaction.js +14 -0
  105. package/dist/features/onboarding-flow/utils/deposit/solanaDepositTransaction.js.map +1 -0
  106. package/dist/features/onboarding-flow/utils/deposit/solanaUtils.js.map +1 -0
  107. package/dist/features/onboarding-flow/utils/deposit/storage.js.map +1 -0
  108. package/dist/features/onboarding-flow/utils/deposit/walletUtils.js.map +1 -0
  109. package/dist/features/onboarding-flow/utils/depositPolling.js.map +1 -0
  110. package/dist/features/onboarding-flow/utils/explorerUrl.js.map +1 -0
  111. package/dist/features/onboarding-flow/utils/nordUtils.js.map +1 -0
  112. package/dist/features/onboarding-flow/utils/pendingDepositCookie.js.map +1 -0
  113. package/dist/features/onboarding-flow/utils/pendingDepositStorage.js.map +1 -0
  114. package/dist/features/onboarding-flow/utils/utils.js.map +1 -0
  115. package/dist/features/onboarding-flow/utils/withImageFallback.js.map +1 -0
  116. package/dist/hooks/index.js.map +1 -0
  117. package/dist/hooks/useN1Wallet.js.map +1 -0
  118. package/dist/hooks/useNordUserInitialization.js.map +1 -0
  119. package/dist/index.js.map +1 -0
  120. package/dist/main.css +1 -1
  121. package/dist/{src/providers → providers}/LazyWalletProvider.js +105 -57
  122. package/dist/providers/LazyWalletProvider.js.map +1 -0
  123. package/dist/providers/N1WalletProvider/ContextBridge.js.map +1 -0
  124. package/dist/providers/N1WalletProvider/ModalProvider.js.map +1 -0
  125. package/dist/providers/N1WalletProvider/NetworkProvider.js.map +1 -0
  126. package/dist/providers/N1WalletProvider/SessionProvider.js.map +1 -0
  127. package/dist/providers/N1WalletProvider/SigningProvider.js.map +1 -0
  128. package/dist/providers/N1WalletProvider/ThemingProvider.js.map +1 -0
  129. package/dist/providers/N1WalletProvider/index.js.map +1 -0
  130. package/dist/providers/N1WalletProvider.js.map +1 -0
  131. package/dist/providers/ShadowRootWrapper.js.map +1 -0
  132. package/dist/providers/WalletErrorBoundary.js.map +1 -0
  133. package/dist/services/bootstrap/DepositRecoveryService.js.map +1 -0
  134. package/dist/services/bootstrap/DynamicSdkService.js.map +1 -0
  135. package/dist/services/bootstrap/SessionBootstrapService.js.map +1 -0
  136. package/dist/services/bootstrap/TurnkeyBootstrapService.js.map +1 -0
  137. package/dist/services/bootstrap/index.js.map +1 -0
  138. package/dist/services/bootstrap/types.js.map +1 -0
  139. package/dist/services/storage/StorageService.js.map +1 -0
  140. package/dist/services/storage/index.js.map +1 -0
  141. package/dist/services/storage/keys.js.map +1 -0
  142. package/dist/services/storage/types.js.map +1 -0
  143. package/dist/store/index.js.map +1 -0
  144. package/dist/store/selectors.js.map +1 -0
  145. package/dist/store/slices/bootstrapSlice.js.map +1 -0
  146. package/dist/store/slices/configSlice.js.map +1 -0
  147. package/dist/store/slices/index.js.map +1 -0
  148. package/dist/store/slices/sessionSlice.js.map +1 -0
  149. package/dist/store/slices/signingSlice.js.map +1 -0
  150. package/dist/store/slices/uiSlice.js.map +1 -0
  151. package/dist/store/slices/walletSlice.js.map +1 -0
  152. package/dist/store/store.js.map +1 -0
  153. package/dist/store/subscriptions/depositPersistence.js.map +1 -0
  154. package/dist/store/subscriptions/index.js.map +1 -0
  155. package/dist/store/subscriptions/turnkeyPersistence.js.map +1 -0
  156. package/dist/store/types.js.map +1 -0
  157. package/dist/styles/cdn-fonts.js.map +1 -0
  158. package/dist/styles/embedded-main-css.js.map +1 -0
  159. package/dist/turnkey/TurnkeyProvider.js.map +1 -0
  160. package/dist/turnkey/createTurnkeyWallet.js.map +1 -0
  161. package/dist/turnkey/createWalletProvider.js.map +1 -0
  162. package/dist/turnkey/index.js.map +1 -0
  163. package/dist/turnkey/turnkeySessionMachine.js.map +1 -0
  164. package/dist/turnkey/turnkeySessionStorage.js.map +1 -0
  165. package/dist/turnkey/types.js.map +1 -0
  166. package/dist/types/wallet.js.map +1 -0
  167. package/dist/utils/address.js.map +1 -0
  168. package/dist/utils/chain.js.map +1 -0
  169. package/dist/utils/ed25519.js.map +1 -0
  170. package/dist/utils/errors.js.map +1 -0
  171. package/dist/utils/events.js.map +1 -0
  172. package/dist/utils/formatAmount.js.map +1 -0
  173. package/dist/utils/logger.js.map +1 -0
  174. package/dist/utils/shortenString.js.map +1 -0
  175. package/package.json +16 -34
  176. package/LICENSE +0 -44
  177. package/README.md +0 -197
  178. package/dist/src/adapters/evm.js.map +0 -1
  179. package/dist/src/adapters/factory.js.map +0 -1
  180. package/dist/src/adapters/index.js.map +0 -1
  181. package/dist/src/adapters/solana.js.map +0 -1
  182. package/dist/src/adapters/types.js.map +0 -1
  183. package/dist/src/animations/N1Loader.js.map +0 -1
  184. package/dist/src/animations/N1Loader.json +0 -1
  185. package/dist/src/animations/Processing.js.map +0 -1
  186. package/dist/src/animations/Processing.json +0 -1
  187. package/dist/src/components/LoadingFallback.js.map +0 -1
  188. package/dist/src/components/Logo.js.map +0 -1
  189. package/dist/src/components/N1ConnectButton.js.map +0 -1
  190. package/dist/src/components/logos/ArbitrumLogo.js.map +0 -1
  191. package/dist/src/components/logos/BaseLogo.js.map +0 -1
  192. package/dist/src/components/logos/BeraLogo.js.map +0 -1
  193. package/dist/src/components/logos/BitcoinLogo.js.map +0 -1
  194. package/dist/src/components/logos/EthereumLogo.js.map +0 -1
  195. package/dist/src/components/logos/HyperliquidLogo.js.map +0 -1
  196. package/dist/src/components/logos/OptimismLogo.js.map +0 -1
  197. package/dist/src/components/logos/SolanaLogo.js.map +0 -1
  198. package/dist/src/components/logos/ZeroOneLogo.js.map +0 -1
  199. package/dist/src/components/logos/index.js.map +0 -1
  200. package/dist/src/config/chains.js.map +0 -1
  201. package/dist/src/config/dynamic.js.map +0 -1
  202. package/dist/src/config/solana.js.map +0 -1
  203. package/dist/src/config/turnkey.js.map +0 -1
  204. package/dist/src/context/n1-wallet-context.js.map +0 -1
  205. package/dist/src/errors/types.js.map +0 -1
  206. package/dist/src/features/onboarding-flow/N1WalletModal.js.map +0 -1
  207. package/dist/src/features/onboarding-flow/OnboardingFlow.js.map +0 -1
  208. package/dist/src/features/onboarding-flow/bridge-assist/client.js.map +0 -1
  209. package/dist/src/features/onboarding-flow/bridge-assist/config.js.map +0 -1
  210. package/dist/src/features/onboarding-flow/bridge-assist/index.js.map +0 -1
  211. package/dist/src/features/onboarding-flow/bridge-assist/types.js.map +0 -1
  212. package/dist/src/features/onboarding-flow/cctp/bridgeKitClient.js.map +0 -1
  213. package/dist/src/features/onboarding-flow/cctp/clientFactory.js.map +0 -1
  214. package/dist/src/features/onboarding-flow/cctp/config.js.map +0 -1
  215. package/dist/src/features/onboarding-flow/cctp/mockCctpClient.js.map +0 -1
  216. package/dist/src/features/onboarding-flow/cctp/solanaClaim.js +0 -2
  217. package/dist/src/features/onboarding-flow/cctp/solanaClaim.js.map +0 -1
  218. package/dist/src/features/onboarding-flow/cctp/types.js.map +0 -1
  219. package/dist/src/features/onboarding-flow/components/ChainButton.js.map +0 -1
  220. package/dist/src/features/onboarding-flow/components/Header.js.map +0 -1
  221. package/dist/src/features/onboarding-flow/components/ImageWithFallback.js.map +0 -1
  222. package/dist/src/features/onboarding-flow/components/TransactionTable.js.map +0 -1
  223. package/dist/src/features/onboarding-flow/components/WaitingMessage.js.map +0 -1
  224. package/dist/src/features/onboarding-flow/components/index.js.map +0 -1
  225. package/dist/src/features/onboarding-flow/errors/depositError.js.map +0 -1
  226. package/dist/src/features/onboarding-flow/hooks/useBridgeDeposit.js.map +0 -1
  227. package/dist/src/features/onboarding-flow/hooks/useDepositAuth.js.map +0 -1
  228. package/dist/src/features/onboarding-flow/hooks/useDepositHydration.js.map +0 -1
  229. package/dist/src/features/onboarding-flow/hooks/usePendingDepositState.js.map +0 -1
  230. package/dist/src/features/onboarding-flow/hooks/useSolanaDeposit.js.map +0 -1
  231. package/dist/src/features/onboarding-flow/index.js.map +0 -1
  232. package/dist/src/features/onboarding-flow/providers/DepositFlowProvider.js.map +0 -1
  233. package/dist/src/features/onboarding-flow/providers/OnboardingStateProvider.js.map +0 -1
  234. package/dist/src/features/onboarding-flow/providers/StateProvider.js.map +0 -1
  235. package/dist/src/features/onboarding-flow/providers/WalletConnectionProvider.js.map +0 -1
  236. package/dist/src/features/onboarding-flow/providers/debug.js.map +0 -1
  237. package/dist/src/features/onboarding-flow/providers/index.js.map +0 -1
  238. package/dist/src/features/onboarding-flow/providers/onboardingStateMachine.js.map +0 -1
  239. package/dist/src/features/onboarding-flow/screens/00-EntrySelectionScreen.js.map +0 -1
  240. package/dist/src/features/onboarding-flow/screens/01-ConnectWalletScreen.js.map +0 -1
  241. package/dist/src/features/onboarding-flow/screens/02-TurnkeyAuthScreen.js.map +0 -1
  242. package/dist/src/features/onboarding-flow/screens/03-TurnkeyPreparingScreen.js.map +0 -1
  243. package/dist/src/features/onboarding-flow/screens/04-ChainSelectionScreen.js.map +0 -1
  244. package/dist/src/features/onboarding-flow/screens/05-AmountInputScreen.js.map +0 -1
  245. package/dist/src/features/onboarding-flow/screens/06-DepositProgressScreen.js.map +0 -1
  246. package/dist/src/features/onboarding-flow/screens/07-DepositSuccessScreen.js.map +0 -1
  247. package/dist/src/features/onboarding-flow/screens/08-AuthLoadingScreen.js.map +0 -1
  248. package/dist/src/features/onboarding-flow/screens/09-ErrorScreen.js.map +0 -1
  249. package/dist/src/features/onboarding-flow/screens/index.js.map +0 -1
  250. package/dist/src/features/onboarding-flow/turnkey/turnkeySessionMachine.js.map +0 -1
  251. package/dist/src/features/onboarding-flow/types.js.map +0 -1
  252. package/dist/src/features/onboarding-flow/utils/bridgeUtils.js.map +0 -1
  253. package/dist/src/features/onboarding-flow/utils/deposit/attestationUtils.js.map +0 -1
  254. package/dist/src/features/onboarding-flow/utils/deposit/bridgeUtils.js.map +0 -1
  255. package/dist/src/features/onboarding-flow/utils/deposit/claimConfirmation.js.map +0 -1
  256. package/dist/src/features/onboarding-flow/utils/deposit/claimSubmission.js.map +0 -1
  257. package/dist/src/features/onboarding-flow/utils/deposit/depositPolling.js.map +0 -1
  258. package/dist/src/features/onboarding-flow/utils/deposit/evmTxInterceptor.js.map +0 -1
  259. package/dist/src/features/onboarding-flow/utils/deposit/nonceUtils.js.map +0 -1
  260. package/dist/src/features/onboarding-flow/utils/deposit/solanaDepositTransaction.js +0 -8
  261. package/dist/src/features/onboarding-flow/utils/deposit/solanaDepositTransaction.js.map +0 -1
  262. package/dist/src/features/onboarding-flow/utils/deposit/solanaUtils.js.map +0 -1
  263. package/dist/src/features/onboarding-flow/utils/deposit/storage.js.map +0 -1
  264. package/dist/src/features/onboarding-flow/utils/deposit/walletUtils.js.map +0 -1
  265. package/dist/src/features/onboarding-flow/utils/depositPolling.js.map +0 -1
  266. package/dist/src/features/onboarding-flow/utils/explorerUrl.js.map +0 -1
  267. package/dist/src/features/onboarding-flow/utils/nordUtils.js.map +0 -1
  268. package/dist/src/features/onboarding-flow/utils/pendingDepositCookie.js.map +0 -1
  269. package/dist/src/features/onboarding-flow/utils/pendingDepositStorage.js.map +0 -1
  270. package/dist/src/features/onboarding-flow/utils/utils.js.map +0 -1
  271. package/dist/src/features/onboarding-flow/utils/withImageFallback.js.map +0 -1
  272. package/dist/src/hooks/index.js.map +0 -1
  273. package/dist/src/hooks/useN1Wallet.js.map +0 -1
  274. package/dist/src/hooks/useNordUserInitialization.js.map +0 -1
  275. package/dist/src/index.js.map +0 -1
  276. package/dist/src/providers/LazyWalletProvider.js.map +0 -1
  277. package/dist/src/providers/N1WalletProvider/ContextBridge.js.map +0 -1
  278. package/dist/src/providers/N1WalletProvider/ModalProvider.js.map +0 -1
  279. package/dist/src/providers/N1WalletProvider/NetworkProvider.js.map +0 -1
  280. package/dist/src/providers/N1WalletProvider/SessionProvider.js.map +0 -1
  281. package/dist/src/providers/N1WalletProvider/SigningProvider.js.map +0 -1
  282. package/dist/src/providers/N1WalletProvider/ThemingProvider.js.map +0 -1
  283. package/dist/src/providers/N1WalletProvider/index.js.map +0 -1
  284. package/dist/src/providers/N1WalletProvider.js.map +0 -1
  285. package/dist/src/providers/N1WalletProviderTemp.d.ts +0 -0
  286. package/dist/src/providers/N1WalletProviderTemp.js +0 -184
  287. package/dist/src/providers/N1WalletProviderTemp.js.map +0 -1
  288. package/dist/src/providers/ShadowRootWrapper.js.map +0 -1
  289. package/dist/src/providers/WalletErrorBoundary.js.map +0 -1
  290. package/dist/src/services/bootstrap/DepositRecoveryService.js.map +0 -1
  291. package/dist/src/services/bootstrap/DynamicSdkService.js.map +0 -1
  292. package/dist/src/services/bootstrap/SessionBootstrapService.js.map +0 -1
  293. package/dist/src/services/bootstrap/TurnkeyBootstrapService.js.map +0 -1
  294. package/dist/src/services/bootstrap/index.js.map +0 -1
  295. package/dist/src/services/bootstrap/types.js.map +0 -1
  296. package/dist/src/services/storage/StorageService.js.map +0 -1
  297. package/dist/src/services/storage/index.js.map +0 -1
  298. package/dist/src/services/storage/keys.js.map +0 -1
  299. package/dist/src/services/storage/types.js.map +0 -1
  300. package/dist/src/store/index.js.map +0 -1
  301. package/dist/src/store/selectors.js.map +0 -1
  302. package/dist/src/store/slices/bootstrapSlice.js.map +0 -1
  303. package/dist/src/store/slices/configSlice.js.map +0 -1
  304. package/dist/src/store/slices/index.js.map +0 -1
  305. package/dist/src/store/slices/sessionSlice.js.map +0 -1
  306. package/dist/src/store/slices/signingSlice.js.map +0 -1
  307. package/dist/src/store/slices/uiSlice.js.map +0 -1
  308. package/dist/src/store/slices/walletSlice.js.map +0 -1
  309. package/dist/src/store/store.js.map +0 -1
  310. package/dist/src/store/subscriptions/depositPersistence.js.map +0 -1
  311. package/dist/src/store/subscriptions/fontInjection.d.ts +0 -18
  312. package/dist/src/store/subscriptions/fontInjection.js +0 -90
  313. package/dist/src/store/subscriptions/fontInjection.js.map +0 -1
  314. package/dist/src/store/subscriptions/index.js.map +0 -1
  315. package/dist/src/store/subscriptions/turnkeyPersistence.js.map +0 -1
  316. package/dist/src/store/types.js.map +0 -1
  317. package/dist/src/styles/cdn-fonts.js.map +0 -1
  318. package/dist/src/styles/embedded-main-css.js.map +0 -1
  319. package/dist/src/turnkey/TurnkeyProvider.js.map +0 -1
  320. package/dist/src/turnkey/createTurnkeyWallet.js.map +0 -1
  321. package/dist/src/turnkey/createWalletProvider.js.map +0 -1
  322. package/dist/src/turnkey/index.js.map +0 -1
  323. package/dist/src/turnkey/turnkeySessionMachine.js.map +0 -1
  324. package/dist/src/turnkey/turnkeySessionStorage.js.map +0 -1
  325. package/dist/src/turnkey/types.js.map +0 -1
  326. package/dist/src/types/dynamic-wallets.d.ts +0 -104
  327. package/dist/src/types/dynamic-wallets.js +0 -8
  328. package/dist/src/types/dynamic-wallets.js.map +0 -1
  329. package/dist/src/types/wallet.js.map +0 -1
  330. package/dist/src/utils/address.js.map +0 -1
  331. package/dist/src/utils/chain.js.map +0 -1
  332. package/dist/src/utils/ed25519.js.map +0 -1
  333. package/dist/src/utils/errors.js.map +0 -1
  334. package/dist/src/utils/events.js.map +0 -1
  335. package/dist/src/utils/formatAmount.js.map +0 -1
  336. package/dist/src/utils/logger.js.map +0 -1
  337. package/dist/src/utils/shortenString.js.map +0 -1
  338. /package/dist/{src/adapters → adapters}/evm.d.ts +0 -0
  339. /package/dist/{src/adapters → adapters}/evm.js +0 -0
  340. /package/dist/{src/adapters → adapters}/factory.d.ts +0 -0
  341. /package/dist/{src/adapters → adapters}/factory.js +0 -0
  342. /package/dist/{src/adapters → adapters}/index.d.ts +0 -0
  343. /package/dist/{src/adapters → adapters}/index.js +0 -0
  344. /package/dist/{src/adapters → adapters}/solana.d.ts +0 -0
  345. /package/dist/{src/adapters → adapters}/solana.js +0 -0
  346. /package/dist/{src/adapters → adapters}/types.d.ts +0 -0
  347. /package/dist/{src/adapters → adapters}/types.js +0 -0
  348. /package/dist/{src/animations → animations}/N1Loader.d.ts +0 -0
  349. /package/dist/{src/animations → animations}/N1Loader.js +0 -0
  350. /package/dist/{src/animations → animations}/Processing.d.ts +0 -0
  351. /package/dist/{src/animations → animations}/Processing.js +0 -0
  352. /package/dist/{src/components → components}/LoadingFallback.d.ts +0 -0
  353. /package/dist/{src/components → components}/LoadingFallback.js +0 -0
  354. /package/dist/{src/components → components}/Logo.d.ts +0 -0
  355. /package/dist/{src/components → components}/Logo.js +0 -0
  356. /package/dist/{src/components → components}/N1ConnectButton.d.ts +0 -0
  357. /package/dist/{src/components → components}/N1ConnectButton.js +0 -0
  358. /package/dist/{src/components → components}/logos/ArbitrumLogo.d.ts +0 -0
  359. /package/dist/{src/components → components}/logos/ArbitrumLogo.js +0 -0
  360. /package/dist/{src/components → components}/logos/BaseLogo.d.ts +0 -0
  361. /package/dist/{src/components → components}/logos/BaseLogo.js +0 -0
  362. /package/dist/{src/components → components}/logos/BeraLogo.d.ts +0 -0
  363. /package/dist/{src/components → components}/logos/BeraLogo.js +0 -0
  364. /package/dist/{src/components → components}/logos/BitcoinLogo.d.ts +0 -0
  365. /package/dist/{src/components → components}/logos/BitcoinLogo.js +0 -0
  366. /package/dist/{src/components → components}/logos/EthereumLogo.d.ts +0 -0
  367. /package/dist/{src/components → components}/logos/EthereumLogo.js +0 -0
  368. /package/dist/{src/components → components}/logos/HyperliquidLogo.d.ts +0 -0
  369. /package/dist/{src/components → components}/logos/HyperliquidLogo.js +0 -0
  370. /package/dist/{src/components → components}/logos/OptimismLogo.d.ts +0 -0
  371. /package/dist/{src/components → components}/logos/OptimismLogo.js +0 -0
  372. /package/dist/{src/components → components}/logos/SolanaLogo.d.ts +0 -0
  373. /package/dist/{src/components → components}/logos/SolanaLogo.js +0 -0
  374. /package/dist/{src/components → components}/logos/ZeroOneLogo.d.ts +0 -0
  375. /package/dist/{src/components → components}/logos/ZeroOneLogo.js +0 -0
  376. /package/dist/{src/components → components}/logos/index.d.ts +0 -0
  377. /package/dist/{src/components → components}/logos/index.js +0 -0
  378. /package/dist/{src/config → config}/chains.d.ts +0 -0
  379. /package/dist/{src/config → config}/dynamic.d.ts +0 -0
  380. /package/dist/{src/config → config}/dynamic.js +0 -0
  381. /package/dist/{src/config → config}/solana.d.ts +0 -0
  382. /package/dist/{src/config → config}/solana.js +0 -0
  383. /package/dist/{src/config → config}/turnkey.d.ts +0 -0
  384. /package/dist/{src/config → config}/turnkey.js +0 -0
  385. /package/dist/{src/context → context}/n1-wallet-context.d.ts +0 -0
  386. /package/dist/{src/context → context}/n1-wallet-context.js +0 -0
  387. /package/dist/{src/errors → errors}/types.d.ts +0 -0
  388. /package/dist/{src/errors → errors}/types.js +0 -0
  389. /package/dist/{src/features → features}/onboarding-flow/N1WalletModal.d.ts +0 -0
  390. /package/dist/{src/features → features}/onboarding-flow/N1WalletModal.js +0 -0
  391. /package/dist/{src/features → features}/onboarding-flow/OnboardingFlow.d.ts +0 -0
  392. /package/dist/{src/features → features}/onboarding-flow/OnboardingFlow.js +0 -0
  393. /package/dist/{src/features → features}/onboarding-flow/bridge-assist/client.d.ts +0 -0
  394. /package/dist/{src/features → features}/onboarding-flow/bridge-assist/config.d.ts +0 -0
  395. /package/dist/{src/features → features}/onboarding-flow/bridge-assist/config.js +0 -0
  396. /package/dist/{src/features → features}/onboarding-flow/bridge-assist/index.d.ts +0 -0
  397. /package/dist/{src/features → features}/onboarding-flow/bridge-assist/index.js +0 -0
  398. /package/dist/{src/features → features}/onboarding-flow/bridge-assist/types.d.ts +0 -0
  399. /package/dist/{src/features → features}/onboarding-flow/bridge-assist/types.js +0 -0
  400. /package/dist/{src/features → features}/onboarding-flow/cctp/clientFactory.d.ts +0 -0
  401. /package/dist/{src/features → features}/onboarding-flow/cctp/clientFactory.js +0 -0
  402. /package/dist/{src/features → features}/onboarding-flow/cctp/config.d.ts +0 -0
  403. /package/dist/{src/features → features}/onboarding-flow/cctp/config.js +0 -0
  404. /package/dist/{src/features → features}/onboarding-flow/cctp/mockCctpClient.d.ts +0 -0
  405. /package/dist/{src/features → features}/onboarding-flow/cctp/mockCctpClient.js +0 -0
  406. /package/dist/{src/features → features}/onboarding-flow/cctp/types.d.ts +0 -0
  407. /package/dist/{src/features → features}/onboarding-flow/cctp/types.js +0 -0
  408. /package/dist/{src/features → features}/onboarding-flow/components/ChainButton.d.ts +0 -0
  409. /package/dist/{src/features → features}/onboarding-flow/components/ChainButton.js +0 -0
  410. /package/dist/{src/features → features}/onboarding-flow/components/Header.d.ts +0 -0
  411. /package/dist/{src/features → features}/onboarding-flow/components/Header.js +0 -0
  412. /package/dist/{src/features → features}/onboarding-flow/components/ImageWithFallback.d.ts +0 -0
  413. /package/dist/{src/features → features}/onboarding-flow/components/ImageWithFallback.js +0 -0
  414. /package/dist/{src/features → features}/onboarding-flow/components/TransactionTable.d.ts +0 -0
  415. /package/dist/{src/features → features}/onboarding-flow/components/WaitingMessage.d.ts +0 -0
  416. /package/dist/{src/features → features}/onboarding-flow/components/WaitingMessage.js +0 -0
  417. /package/dist/{src/features → features}/onboarding-flow/components/index.d.ts +0 -0
  418. /package/dist/{src/features → features}/onboarding-flow/components/index.js +0 -0
  419. /package/dist/{src/features → features}/onboarding-flow/errors/depositError.d.ts +0 -0
  420. /package/dist/{src/features → features}/onboarding-flow/errors/depositError.js +0 -0
  421. /package/dist/{src/features → features}/onboarding-flow/hooks/useBridgeDeposit.d.ts +0 -0
  422. /package/dist/{src/features → features}/onboarding-flow/hooks/useDepositAuth.d.ts +0 -0
  423. /package/dist/{src/features → features}/onboarding-flow/hooks/useDepositAuth.js +0 -0
  424. /package/dist/{src/features → features}/onboarding-flow/hooks/useDepositHydration.d.ts +0 -0
  425. /package/dist/{src/features → features}/onboarding-flow/hooks/useDepositHydration.js +0 -0
  426. /package/dist/{src/features → features}/onboarding-flow/hooks/usePendingDepositState.d.ts +0 -0
  427. /package/dist/{src/features → features}/onboarding-flow/hooks/useSolanaDeposit.d.ts +0 -0
  428. /package/dist/{src/features → features}/onboarding-flow/index.d.ts +0 -0
  429. /package/dist/{src/features → features}/onboarding-flow/index.js +0 -0
  430. /package/dist/{src/features → features}/onboarding-flow/providers/DepositFlowProvider.d.ts +0 -0
  431. /package/dist/{src/features → features}/onboarding-flow/providers/OnboardingStateProvider.d.ts +0 -0
  432. /package/dist/{src/features → features}/onboarding-flow/providers/StateProvider.d.ts +0 -0
  433. /package/dist/{src/features → features}/onboarding-flow/providers/StateProvider.js +0 -0
  434. /package/dist/{src/features → features}/onboarding-flow/providers/WalletConnectionProvider.d.ts +0 -0
  435. /package/dist/{src/features → features}/onboarding-flow/providers/debug.d.ts +0 -0
  436. /package/dist/{src/features → features}/onboarding-flow/providers/index.d.ts +0 -0
  437. /package/dist/{src/features → features}/onboarding-flow/providers/index.js +0 -0
  438. /package/dist/{src/features → features}/onboarding-flow/providers/onboardingStateMachine.d.ts +0 -0
  439. /package/dist/{src/features → features}/onboarding-flow/providers/onboardingStateMachine.js +0 -0
  440. /package/dist/{src/features → features}/onboarding-flow/screens/00-EntrySelectionScreen.d.ts +0 -0
  441. /package/dist/{src/features → features}/onboarding-flow/screens/00-EntrySelectionScreen.js +0 -0
  442. /package/dist/{src/features → features}/onboarding-flow/screens/01-ConnectWalletScreen.d.ts +0 -0
  443. /package/dist/{src/features → features}/onboarding-flow/screens/01-ConnectWalletScreen.js +0 -0
  444. /package/dist/{src/features → features}/onboarding-flow/screens/02-TurnkeyAuthScreen.d.ts +0 -0
  445. /package/dist/{src/features → features}/onboarding-flow/screens/02-TurnkeyAuthScreen.js +0 -0
  446. /package/dist/{src/features → features}/onboarding-flow/screens/03-TurnkeyPreparingScreen.d.ts +0 -0
  447. /package/dist/{src/features → features}/onboarding-flow/screens/03-TurnkeyPreparingScreen.js +0 -0
  448. /package/dist/{src/features → features}/onboarding-flow/screens/04-ChainSelectionScreen.d.ts +0 -0
  449. /package/dist/{src/features → features}/onboarding-flow/screens/04-ChainSelectionScreen.js +0 -0
  450. /package/dist/{src/features → features}/onboarding-flow/screens/06-DepositProgressScreen.d.ts +0 -0
  451. /package/dist/{src/features → features}/onboarding-flow/screens/07-DepositSuccessScreen.d.ts +0 -0
  452. /package/dist/{src/features → features}/onboarding-flow/screens/07-DepositSuccessScreen.js +0 -0
  453. /package/dist/{src/features → features}/onboarding-flow/screens/08-AuthLoadingScreen.d.ts +0 -0
  454. /package/dist/{src/features → features}/onboarding-flow/screens/08-AuthLoadingScreen.js +0 -0
  455. /package/dist/{src/features → features}/onboarding-flow/screens/09-ErrorScreen.d.ts +0 -0
  456. /package/dist/{src/features → features}/onboarding-flow/screens/09-ErrorScreen.js +0 -0
  457. /package/dist/{src/features → features}/onboarding-flow/screens/index.d.ts +0 -0
  458. /package/dist/{src/features → features}/onboarding-flow/screens/index.js +0 -0
  459. /package/dist/{src/features → features}/onboarding-flow/turnkey/turnkeySessionMachine.d.ts +0 -0
  460. /package/dist/{src/features → features}/onboarding-flow/turnkey/turnkeySessionMachine.js +0 -0
  461. /package/dist/{src/features → features}/onboarding-flow/types.d.ts +0 -0
  462. /package/dist/{src/features → features}/onboarding-flow/types.js +0 -0
  463. /package/dist/{src/features → features}/onboarding-flow/utils/bridgeUtils.d.ts +0 -0
  464. /package/dist/{src/features → features}/onboarding-flow/utils/bridgeUtils.js +0 -0
  465. /package/dist/{src/features → features}/onboarding-flow/utils/deposit/attestationUtils.d.ts +0 -0
  466. /package/dist/{src/features → features}/onboarding-flow/utils/deposit/attestationUtils.js +0 -0
  467. /package/dist/{src/features → features}/onboarding-flow/utils/deposit/bridgeUtils.d.ts +0 -0
  468. /package/dist/{src/features → features}/onboarding-flow/utils/deposit/bridgeUtils.js +0 -0
  469. /package/dist/{src/features → features}/onboarding-flow/utils/deposit/claimConfirmation.d.ts +0 -0
  470. /package/dist/{src/features → features}/onboarding-flow/utils/deposit/depositPolling.d.ts +0 -0
  471. /package/dist/{src/features → features}/onboarding-flow/utils/deposit/depositPolling.js +0 -0
  472. /package/dist/{src/features → features}/onboarding-flow/utils/deposit/evmTxInterceptor.d.ts +0 -0
  473. /package/dist/{src/features → features}/onboarding-flow/utils/deposit/evmTxInterceptor.js +0 -0
  474. /package/dist/{src/features → features}/onboarding-flow/utils/deposit/nonceUtils.d.ts +0 -0
  475. /package/dist/{src/features → features}/onboarding-flow/utils/deposit/nonceUtils.js +0 -0
  476. /package/dist/{src/features → features}/onboarding-flow/utils/deposit/solanaUtils.d.ts +0 -0
  477. /package/dist/{src/features → features}/onboarding-flow/utils/deposit/solanaUtils.js +0 -0
  478. /package/dist/{src/features → features}/onboarding-flow/utils/deposit/storage.d.ts +0 -0
  479. /package/dist/{src/features → features}/onboarding-flow/utils/deposit/storage.js +0 -0
  480. /package/dist/{src/features → features}/onboarding-flow/utils/deposit/walletUtils.d.ts +0 -0
  481. /package/dist/{src/features → features}/onboarding-flow/utils/deposit/walletUtils.js +0 -0
  482. /package/dist/{src/features → features}/onboarding-flow/utils/depositPolling.d.ts +0 -0
  483. /package/dist/{src/features → features}/onboarding-flow/utils/depositPolling.js +0 -0
  484. /package/dist/{src/features → features}/onboarding-flow/utils/explorerUrl.d.ts +0 -0
  485. /package/dist/{src/features → features}/onboarding-flow/utils/explorerUrl.js +0 -0
  486. /package/dist/{src/features → features}/onboarding-flow/utils/nordUtils.d.ts +0 -0
  487. /package/dist/{src/features → features}/onboarding-flow/utils/nordUtils.js +0 -0
  488. /package/dist/{src/features → features}/onboarding-flow/utils/pendingDepositCookie.d.ts +0 -0
  489. /package/dist/{src/features → features}/onboarding-flow/utils/pendingDepositCookie.js +0 -0
  490. /package/dist/{src/features → features}/onboarding-flow/utils/pendingDepositStorage.d.ts +0 -0
  491. /package/dist/{src/features → features}/onboarding-flow/utils/pendingDepositStorage.js +0 -0
  492. /package/dist/{src/features → features}/onboarding-flow/utils/utils.d.ts +0 -0
  493. /package/dist/{src/features → features}/onboarding-flow/utils/utils.js +0 -0
  494. /package/dist/{src/features → features}/onboarding-flow/utils/withImageFallback.d.ts +0 -0
  495. /package/dist/{src/features → features}/onboarding-flow/utils/withImageFallback.js +0 -0
  496. /package/dist/{src/hooks → hooks}/index.d.ts +0 -0
  497. /package/dist/{src/hooks → hooks}/index.js +0 -0
  498. /package/dist/{src/hooks → hooks}/useN1Wallet.d.ts +0 -0
  499. /package/dist/{src/hooks → hooks}/useN1Wallet.js +0 -0
  500. /package/dist/{src/hooks → hooks}/useNordUserInitialization.d.ts +0 -0
  501. /package/dist/{src/hooks → hooks}/useNordUserInitialization.js +0 -0
  502. /package/dist/{src/index.d.ts → index.d.ts} +0 -0
  503. /package/dist/{src/index.js → index.js} +0 -0
  504. /package/dist/{src/providers → providers}/LazyWalletProvider.d.ts +0 -0
  505. /package/dist/{src/providers → providers}/N1WalletProvider/ContextBridge.d.ts +0 -0
  506. /package/dist/{src/providers → providers}/N1WalletProvider/ContextBridge.js +0 -0
  507. /package/dist/{src/providers → providers}/N1WalletProvider/ModalProvider.d.ts +0 -0
  508. /package/dist/{src/providers → providers}/N1WalletProvider/ModalProvider.js +0 -0
  509. /package/dist/{src/providers → providers}/N1WalletProvider/NetworkProvider.d.ts +0 -0
  510. /package/dist/{src/providers → providers}/N1WalletProvider/NetworkProvider.js +0 -0
  511. /package/dist/{src/providers → providers}/N1WalletProvider/SessionProvider.d.ts +0 -0
  512. /package/dist/{src/providers → providers}/N1WalletProvider/SessionProvider.js +0 -0
  513. /package/dist/{src/providers → providers}/N1WalletProvider/SigningProvider.d.ts +0 -0
  514. /package/dist/{src/providers → providers}/N1WalletProvider/SigningProvider.js +0 -0
  515. /package/dist/{src/providers → providers}/N1WalletProvider/ThemingProvider.d.ts +0 -0
  516. /package/dist/{src/providers → providers}/N1WalletProvider/ThemingProvider.js +0 -0
  517. /package/dist/{src/providers → providers}/N1WalletProvider/index.d.ts +0 -0
  518. /package/dist/{src/providers → providers}/N1WalletProvider/index.js +0 -0
  519. /package/dist/{src/providers → providers}/N1WalletProvider.d.ts +0 -0
  520. /package/dist/{src/providers → providers}/N1WalletProvider.js +0 -0
  521. /package/dist/{src/providers → providers}/ShadowRootWrapper.d.ts +0 -0
  522. /package/dist/{src/providers → providers}/ShadowRootWrapper.js +0 -0
  523. /package/dist/{src/providers → providers}/WalletErrorBoundary.d.ts +0 -0
  524. /package/dist/{src/providers → providers}/WalletErrorBoundary.js +0 -0
  525. /package/dist/{src/services → services}/bootstrap/DepositRecoveryService.d.ts +0 -0
  526. /package/dist/{src/services → services}/bootstrap/DepositRecoveryService.js +0 -0
  527. /package/dist/{src/services → services}/bootstrap/DynamicSdkService.d.ts +0 -0
  528. /package/dist/{src/services → services}/bootstrap/DynamicSdkService.js +0 -0
  529. /package/dist/{src/services → services}/bootstrap/SessionBootstrapService.d.ts +0 -0
  530. /package/dist/{src/services → services}/bootstrap/SessionBootstrapService.js +0 -0
  531. /package/dist/{src/services → services}/bootstrap/TurnkeyBootstrapService.d.ts +0 -0
  532. /package/dist/{src/services → services}/bootstrap/TurnkeyBootstrapService.js +0 -0
  533. /package/dist/{src/services → services}/bootstrap/index.d.ts +0 -0
  534. /package/dist/{src/services → services}/bootstrap/index.js +0 -0
  535. /package/dist/{src/services → services}/bootstrap/types.d.ts +0 -0
  536. /package/dist/{src/services → services}/bootstrap/types.js +0 -0
  537. /package/dist/{src/services → services}/storage/StorageService.d.ts +0 -0
  538. /package/dist/{src/services → services}/storage/StorageService.js +0 -0
  539. /package/dist/{src/services → services}/storage/index.d.ts +0 -0
  540. /package/dist/{src/services → services}/storage/index.js +0 -0
  541. /package/dist/{src/services → services}/storage/keys.d.ts +0 -0
  542. /package/dist/{src/services → services}/storage/keys.js +0 -0
  543. /package/dist/{src/services → services}/storage/types.d.ts +0 -0
  544. /package/dist/{src/services → services}/storage/types.js +0 -0
  545. /package/dist/{src/store → store}/index.d.ts +0 -0
  546. /package/dist/{src/store → store}/index.js +0 -0
  547. /package/dist/{src/store → store}/selectors.d.ts +0 -0
  548. /package/dist/{src/store → store}/selectors.js +0 -0
  549. /package/dist/{src/store → store}/slices/bootstrapSlice.d.ts +0 -0
  550. /package/dist/{src/store → store}/slices/bootstrapSlice.js +0 -0
  551. /package/dist/{src/store → store}/slices/configSlice.d.ts +0 -0
  552. /package/dist/{src/store → store}/slices/configSlice.js +0 -0
  553. /package/dist/{src/store → store}/slices/index.d.ts +0 -0
  554. /package/dist/{src/store → store}/slices/index.js +0 -0
  555. /package/dist/{src/store → store}/slices/sessionSlice.d.ts +0 -0
  556. /package/dist/{src/store → store}/slices/sessionSlice.js +0 -0
  557. /package/dist/{src/store → store}/slices/signingSlice.d.ts +0 -0
  558. /package/dist/{src/store → store}/slices/signingSlice.js +0 -0
  559. /package/dist/{src/store → store}/slices/uiSlice.d.ts +0 -0
  560. /package/dist/{src/store → store}/slices/uiSlice.js +0 -0
  561. /package/dist/{src/store → store}/slices/walletSlice.d.ts +0 -0
  562. /package/dist/{src/store → store}/slices/walletSlice.js +0 -0
  563. /package/dist/{src/store → store}/store.d.ts +0 -0
  564. /package/dist/{src/store → store}/store.js +0 -0
  565. /package/dist/{src/store → store}/subscriptions/depositPersistence.d.ts +0 -0
  566. /package/dist/{src/store → store}/subscriptions/depositPersistence.js +0 -0
  567. /package/dist/{src/store → store}/subscriptions/index.d.ts +0 -0
  568. /package/dist/{src/store → store}/subscriptions/index.js +0 -0
  569. /package/dist/{src/store → store}/subscriptions/turnkeyPersistence.d.ts +0 -0
  570. /package/dist/{src/store → store}/subscriptions/turnkeyPersistence.js +0 -0
  571. /package/dist/{src/store → store}/types.d.ts +0 -0
  572. /package/dist/{src/store → store}/types.js +0 -0
  573. /package/dist/{src/styles → styles}/cdn-fonts.d.ts +0 -0
  574. /package/dist/{src/styles → styles}/cdn-fonts.js +0 -0
  575. /package/dist/{src/styles → styles}/embedded-main-css.d.ts +0 -0
  576. /package/dist/{src/styles → styles}/embedded-main-css.js +0 -0
  577. /package/dist/{src/turnkey → turnkey}/TurnkeyProvider.d.ts +0 -0
  578. /package/dist/{src/turnkey → turnkey}/TurnkeyProvider.js +0 -0
  579. /package/dist/{src/turnkey → turnkey}/createTurnkeyWallet.d.ts +0 -0
  580. /package/dist/{src/turnkey → turnkey}/createTurnkeyWallet.js +0 -0
  581. /package/dist/{src/turnkey → turnkey}/createWalletProvider.d.ts +0 -0
  582. /package/dist/{src/turnkey → turnkey}/createWalletProvider.js +0 -0
  583. /package/dist/{src/turnkey → turnkey}/index.d.ts +0 -0
  584. /package/dist/{src/turnkey → turnkey}/index.js +0 -0
  585. /package/dist/{src/turnkey → turnkey}/turnkeySessionMachine.d.ts +0 -0
  586. /package/dist/{src/turnkey → turnkey}/turnkeySessionMachine.js +0 -0
  587. /package/dist/{src/turnkey → turnkey}/turnkeySessionStorage.d.ts +0 -0
  588. /package/dist/{src/turnkey → turnkey}/turnkeySessionStorage.js +0 -0
  589. /package/dist/{src/turnkey → turnkey}/types.d.ts +0 -0
  590. /package/dist/{src/turnkey → turnkey}/types.js +0 -0
  591. /package/dist/{src/types → types}/wallet.d.ts +0 -0
  592. /package/dist/{src/types → types}/wallet.js +0 -0
  593. /package/dist/{src/utils → utils}/address.d.ts +0 -0
  594. /package/dist/{src/utils → utils}/address.js +0 -0
  595. /package/dist/{src/utils → utils}/chain.d.ts +0 -0
  596. /package/dist/{src/utils → utils}/chain.js +0 -0
  597. /package/dist/{src/utils → utils}/ed25519.d.ts +0 -0
  598. /package/dist/{src/utils → utils}/ed25519.js +0 -0
  599. /package/dist/{src/utils → utils}/errors.d.ts +0 -0
  600. /package/dist/{src/utils → utils}/errors.js +0 -0
  601. /package/dist/{src/utils → utils}/events.d.ts +0 -0
  602. /package/dist/{src/utils → utils}/events.js +0 -0
  603. /package/dist/{src/utils → utils}/formatAmount.d.ts +0 -0
  604. /package/dist/{src/utils → utils}/formatAmount.js +0 -0
  605. /package/dist/{src/utils → utils}/logger.d.ts +0 -0
  606. /package/dist/{src/utils → utils}/logger.js +0 -0
  607. /package/dist/{src/utils → utils}/shortenString.d.ts +0 -0
  608. /package/dist/{src/utils → utils}/shortenString.js +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ModalProvider.js","sourceRoot":"","sources":["../../../src/providers/N1WalletProvider/ModalProvider.tsx"],"names":[],"mappings":"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","sourcesContent":["'use client';\n\nimport React, {\n createContext,\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport { N1ModalViewMode } from '../../types/wallet';\nimport { logger } from '../../utils/logger';\nimport { EVENTS, createModalEvent } from '../../utils/events';\nimport { useWalletStore, getWalletActions, WalletStore } from '../../store';\nimport { MODAL_COOLDOWN_MS } from '../../store/slices/uiSlice';\nimport type { ModalState, ShowDynamicWidgetFn, DynamicLogoutFn, DisconnectWalletFn, WalletConnectCancelledFn } from '../../store/types';\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\nexport interface ModalStateValues {\n /** Whether the modal is visible (opening, open, or closing) */\n showLogin: boolean;\n /** Whether the modal is fully open and interactive */\n isOpen: boolean;\n /** Whether the modal is in the process of closing (for animations) */\n isClosing: boolean;\n /** Current view mode for the modal (debug override or Automatic) */\n viewMode: N1ModalViewMode;\n /** Monotonically increasing ID to trigger deposit-only flows */\n depositFlowRequestId: number;\n /** Raw modal state for advanced use cases */\n modalState: ModalState;\n /** Function to show/hide the Dynamic SDK wallet widget */\n showDynamicWidget: ShowDynamicWidgetFn;\n /** Function to handle Dynamic SDK logout */\n dynamicHandleLogOut: DynamicLogoutFn;\n /** Handler called when wallet is disconnected */\n disconnectWalletHandler: DisconnectWalletFn;\n /** Handler called when wallet connection is cancelled */\n walletConnectCancelledHandler: WalletConnectCancelledFn;\n}\n\nexport interface ModalActions {\n /**\n * Opens the modal (transitions: closed → opening → open).\n * Subject to cooldown and SDK readiness checks.\n */\n openModal: () => void;\n /**\n * Closes the modal (transitions: open → closing → closed).\n * Triggers exit animation and cooldown.\n */\n closeModal: () => void;\n /**\n * Called when close animation completes.\n * Transitions: closing → closed, starts cooldown.\n */\n onCloseComplete: () => void;\n /**\n * Sets the view mode for debug overrides.\n * Use N1ModalViewMode.Automatic for normal operation.\n */\n setViewMode: (mode: N1ModalViewMode) => void;\n /**\n * Initiates a deposit-only flow for authenticated users.\n * Returns true if the flow was started, false if fallback to regular flow.\n */\n startDepositFlow: () => boolean;\n /**\n * Register the Dynamic SDK widget show function.\n */\n setShowDynamicWidget: (fn: ShowDynamicWidgetFn) => void;\n /**\n * Register the Dynamic SDK logout function.\n */\n setDynamicHandleLogOut: (fn: DynamicLogoutFn) => void;\n /**\n * Register the disconnect wallet handler.\n */\n setDisconnectWalletHandler: (fn: DisconnectWalletFn) => void;\n /**\n * Register the wallet connect cancelled handler.\n */\n setWalletConnectCancelledHandler: (fn: WalletConnectCancelledFn) => void;\n}\n\nexport interface ModalContextValue extends ModalStateValues, ModalActions {}\n\nexport interface ModalProviderProps {\n children: React.ReactNode;\n}\n\n// ---------------------------------------------------------------------------\n// Context\n// ---------------------------------------------------------------------------\n\nconst ModalContext = createContext<ModalContextValue | null>(null);\n\n// ---------------------------------------------------------------------------\n// Hooks\n// ---------------------------------------------------------------------------\n\n/**\n * Hook to access modal state and actions.\n * Must be used within a ModalProvider.\n */\nexport function useModal(): ModalContextValue {\n const context = useContext(ModalContext);\n if (!context) {\n throw new Error('useModal must be used within a ModalProvider');\n }\n return context;\n}\n\n/**\n * Hook to access modal state only (no actions).\n * Useful for components that only need to read state.\n */\nexport function useModalState(): ModalStateValues {\n const { showLogin, isOpen, isClosing, viewMode, depositFlowRequestId, modalState, showDynamicWidget, dynamicHandleLogOut, disconnectWalletHandler, walletConnectCancelledHandler } = useModal();\n return { showLogin, isOpen, isClosing, viewMode, depositFlowRequestId, modalState, showDynamicWidget, dynamicHandleLogOut, disconnectWalletHandler, walletConnectCancelledHandler };\n}\n\n/**\n * Hook to access modal actions only (no state).\n * Useful for components that only need to trigger actions.\n */\nexport function useModalActions(): ModalActions {\n const { openModal, closeModal, onCloseComplete, setViewMode, startDepositFlow, setShowDynamicWidget, setDynamicHandleLogOut, setDisconnectWalletHandler, setWalletConnectCancelledHandler } = useModal();\n return { openModal, closeModal, onCloseComplete, setViewMode, startDepositFlow, setShowDynamicWidget, setDynamicHandleLogOut, setDisconnectWalletHandler, setWalletConnectCancelledHandler };\n}\n\n// ---------------------------------------------------------------------------\n// State Machine Helpers\n// ---------------------------------------------------------------------------\n\n/**\n * Valid state transitions for the modal state machine.\n */\nconst VALID_TRANSITIONS: Record<ModalState, ModalState[]> = {\n closed: ['opening'],\n opening: ['open', 'closed'],\n open: ['closing'],\n closing: ['closed'],\n};\n\n/**\n * Check if a transition is valid.\n */\nfunction isValidTransition(from: ModalState, to: ModalState): boolean {\n return VALID_TRANSITIONS[from]?.includes(to) ?? false;\n}\n\n// ---------------------------------------------------------------------------\n// Provider\n// ---------------------------------------------------------------------------\n\n/**\n * ModalProvider manages all modal-related state via a state machine.\n *\n * State Machine:\n * closed → opening (user clicks connect)\n * opening → open (SDK ready)\n * opening → closed (cancelled before ready)\n * open → closing (user closes modal)\n * closing → closed (animation complete, cooldown starts)\n *\n * Responsibilities:\n * - Modal state machine transitions\n * - Cooldown protection between open/close cycles\n * - Deposit-only flow initiation\n * - Deferred modal open until Dynamic SDK is ready\n *\n * Does NOT handle:\n * - Wallet connection state\n * - Session/signing state\n * - Network/chain state\n * - Theming/styling\n */\nexport function ModalProvider({ children }: ModalProviderProps) {\n // -------------------------------------------------------------------------\n // State from Store (UI slice)\n // -------------------------------------------------------------------------\n\n const modalState = useWalletStore((state: WalletStore) => state.ui.modalState);\n const viewMode = useWalletStore((state: WalletStore) => state.ui.viewMode);\n const depositFlowRequestId = useWalletStore((state: WalletStore) => state.ui.depositFlowRequestId);\n const modalCooldownUntil = useWalletStore((state: WalletStore) => state.ui.modalCooldownUntil);\n const showDynamicWidget = useWalletStore((state: WalletStore) => state.ui.showDynamicWidget);\n const dynamicHandleLogOut = useWalletStore((state: WalletStore) => state.ui.dynamicHandleLogOut);\n const disconnectWalletHandler = useWalletStore((state: WalletStore) => state.ui.disconnectWalletHandler);\n const walletConnectCancelledHandler = useWalletStore((state: WalletStore) => state.ui.walletConnectCancelledHandler);\n\n // -------------------------------------------------------------------------\n // Dependencies from Store (session slice) - no more prop drilling!\n // -------------------------------------------------------------------------\n\n const dynamicSdkHasLoaded = useWalletStore((state: WalletStore) => state.session.dynamicSdkLoaded);\n const nordUser = useWalletStore((state: WalletStore) => state.session.nordUser);\n\n // Derived state for backwards compatibility\n const showLogin = modalState !== 'closed';\n const isOpen = modalState === 'open';\n const isClosing = modalState === 'closing';\n\n // Get stable action references\n const storeActions = getWalletActions().ui;\n\n // Ref for pending open requests (when SDK not ready)\n const pendingOpenRef = useRef(false);\n\n // -------------------------------------------------------------------------\n // State Machine Transitions\n // -------------------------------------------------------------------------\n\n /**\n * Transition to a new modal state with validation.\n */\n const transition = useCallback(\n (to: ModalState) => {\n const from = useWalletStore.getState().ui.modalState;\n\n if (!isValidTransition(from, to)) {\n logger.warn('[ModalProvider] Invalid transition', { from, to });\n return false;\n }\n\n logger.debug('[ModalProvider] Transition', { from, to });\n storeActions.setModalState(to);\n\n // Log events for analytics\n if (to === 'open') {\n logger.event(createModalEvent(EVENTS.MODAL.OPEN, {}));\n } else if (to === 'closed' && from === 'closing') {\n logger.event(createModalEvent(EVENTS.MODAL.CLOSE, {}));\n }\n\n return true;\n },\n [storeActions]\n );\n\n // -------------------------------------------------------------------------\n // Modal Actions\n // -------------------------------------------------------------------------\n\n /**\n * Opens the modal. Handles cooldown and SDK readiness.\n */\n const openModal = useCallback(() => {\n const currentState = useWalletStore.getState().ui.modalState;\n const cooldownUntil = useWalletStore.getState().ui.modalCooldownUntil;\n\n logger.debug('[ModalProvider] openModal called', {\n currentState,\n dynamicSdkHasLoaded,\n cooldownUntil,\n now: Date.now(),\n });\n\n // Already open or opening\n if (currentState !== 'closed') {\n logger.debug('[ModalProvider] openModal ignored - not in closed state');\n return;\n }\n\n // Check cooldown\n if (Date.now() < cooldownUntil) {\n logger.debug('[ModalProvider] openModal blocked by cooldown');\n return;\n }\n\n // Defer if SDK not ready\n if (!dynamicSdkHasLoaded) {\n logger.debug('[ModalProvider] openModal deferred - SDK not ready');\n pendingOpenRef.current = true;\n transition('opening');\n return;\n }\n\n // Transition to opening, then immediately to open\n transition('opening');\n // Since SDK is ready, go directly to open\n transition('open');\n }, [dynamicSdkHasLoaded, transition]);\n\n /**\n * Effect: When Dynamic SDK becomes ready, complete pending open.\n */\n useEffect(() => {\n const currentState = useWalletStore.getState().ui.modalState;\n\n if (dynamicSdkHasLoaded && currentState === 'opening') {\n logger.debug('[ModalProvider] SDK ready, completing open transition');\n pendingOpenRef.current = false;\n transition('open');\n }\n }, [dynamicSdkHasLoaded, transition]);\n\n /**\n * Closes the modal (starts closing animation).\n */\n const closeModal = useCallback(() => {\n const currentState = useWalletStore.getState().ui.modalState;\n\n logger.debug('[ModalProvider] closeModal called', { currentState });\n\n if (currentState === 'opening') {\n // Cancel before fully open\n transition('closed');\n return;\n }\n\n if (currentState === 'open') {\n transition('closing');\n return;\n }\n\n logger.debug('[ModalProvider] closeModal ignored - not in open/opening state');\n }, [transition]);\n\n /**\n * Called when close animation completes.\n */\n const onCloseComplete = useCallback(() => {\n const currentState = useWalletStore.getState().ui.modalState;\n\n if (currentState !== 'closing') {\n logger.debug('[ModalProvider] onCloseComplete ignored - not in closing state');\n return;\n }\n\n // Start cooldown\n const cooldownUntil = Date.now() + MODAL_COOLDOWN_MS;\n storeActions.setModalCooldownUntil(cooldownUntil);\n logger.debug('[ModalProvider] Cooldown started', { cooldownUntil });\n\n // Complete transition\n transition('closed');\n }, [storeActions, transition]);\n\n /**\n * Sets the view mode for debug overrides.\n */\n const setViewMode = useCallback(\n (mode: N1ModalViewMode) => {\n storeActions.setViewMode(mode);\n },\n [storeActions]\n );\n\n /**\n * Register the Dynamic SDK widget show function.\n */\n const setShowDynamicWidget = useCallback(\n (fn: ShowDynamicWidgetFn) => {\n storeActions.setShowDynamicWidget(fn);\n },\n [storeActions]\n );\n\n /**\n * Register the Dynamic SDK logout function.\n */\n const setDynamicHandleLogOut = useCallback(\n (fn: DynamicLogoutFn) => {\n storeActions.setDynamicHandleLogOut(fn);\n },\n [storeActions]\n );\n\n /**\n * Register the disconnect wallet handler.\n */\n const setDisconnectWalletHandler = useCallback(\n (fn: DisconnectWalletFn) => {\n storeActions.setDisconnectWalletHandler(fn);\n },\n [storeActions]\n );\n\n /**\n * Register the wallet connect cancelled handler.\n */\n const setWalletConnectCancelledHandler = useCallback(\n (fn: WalletConnectCancelledFn) => {\n storeActions.setWalletConnectCancelledHandler(fn);\n },\n [storeActions]\n );\n\n // -------------------------------------------------------------------------\n // Deposit-Only Flow\n // -------------------------------------------------------------------------\n\n /**\n * Initiates a deposit-only flow for users with active sessions.\n * Returns false if no authenticated session exists, triggering fallback to regular flow.\n */\n const startDepositFlow = useCallback(() => {\n if (!nordUser || !nordUser.sessionId) {\n logger.warn(\n '[ModalProvider] startDepositFlow called without authenticated session; falling back to regular flow'\n );\n openModal();\n return false;\n }\n\n const currentRequestId = useWalletStore.getState().ui.depositFlowRequestId;\n\n logger.debug('[ModalProvider] starting deposit-only flow', {\n hasSession: Boolean(nordUser.sessionId),\n });\n\n storeActions.setDepositFlowRequestId(currentRequestId + 1);\n openModal();\n return true;\n }, [nordUser, openModal, storeActions]);\n\n // -------------------------------------------------------------------------\n // Context Value\n // -------------------------------------------------------------------------\n\n const value = useMemo<ModalContextValue>(\n () => ({\n // Derived state\n showLogin,\n isOpen,\n isClosing,\n viewMode,\n depositFlowRequestId,\n modalState,\n showDynamicWidget,\n dynamicHandleLogOut,\n disconnectWalletHandler,\n walletConnectCancelledHandler,\n // Actions\n openModal,\n closeModal,\n onCloseComplete,\n setViewMode,\n startDepositFlow,\n setShowDynamicWidget,\n setDynamicHandleLogOut,\n setDisconnectWalletHandler,\n setWalletConnectCancelledHandler,\n }),\n [\n showLogin,\n isOpen,\n isClosing,\n viewMode,\n depositFlowRequestId,\n modalState,\n showDynamicWidget,\n dynamicHandleLogOut,\n disconnectWalletHandler,\n walletConnectCancelledHandler,\n openModal,\n closeModal,\n onCloseComplete,\n setViewMode,\n startDepositFlow,\n setShowDynamicWidget,\n setDynamicHandleLogOut,\n setDisconnectWalletHandler,\n setWalletConnectCancelledHandler,\n ]\n );\n\n return <ModalContext.Provider value={value}>{children}</ModalContext.Provider>;\n}\n\n// ---------------------------------------------------------------------------\n// Exports\n// ---------------------------------------------------------------------------\n\nexport { ModalContext };\n"]}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NetworkProvider.js","sourceRoot":"","sources":["../../../src/providers/N1WalletProvider/NetworkProvider.tsx"],"names":[],"mappings":"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","sourcesContent":["'use client';\n\nimport React, {\n createContext,\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useRef,\n} from 'react';\nimport { logger } from '../../utils/logger';\nimport { useWalletStore, getWalletActions, WalletStore } from '../../store';\nimport { createSolanaAdapter, createEVMAdapter } from '../../adapters';\nimport type { SolanaWalletAdapter, EVMWalletAdapter } from '../../adapters';\nimport type { Balance } from '../../types/wallet';\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\nexport type WalletNetworkType = 'solana' | 'evm' | null;\n\nexport interface NetworkState {\n /** Current active wallet network */\n walletNetwork: WalletNetworkType;\n /** Whether the wallet is in Solana mode */\n isSolanaMode: boolean;\n /** Whether the wallet is in EVM mode */\n isEvmMode: boolean;\n /** Solana wallet address */\n solanaAddress: string;\n /** EVM wallet address */\n evmAddress: string | null;\n /** Current EVM chain identifier */\n evmChain: string | null;\n /** User's preferred wallet network (before wallet connects) */\n preferredWalletNetwork: WalletNetworkType;\n /** The connected Solana wallet instance */\n solanaWallet: any;\n /** The connected EVM wallet instance */\n evmWallet: any;\n /** Unified Solana wallet adapter (null if not connected) */\n solanaAdapter: SolanaWalletAdapter | null;\n /** Unified EVM wallet adapter (null if not connected) */\n evmAdapter: EVMWalletAdapter | null;\n /** Token balances from the wallet */\n balances: Balance[];\n}\n\nexport interface NetworkActions {\n /** Set the Solana wallet address */\n setSolanaAddress: (address: string) => void;\n /** Set the EVM wallet address */\n setEvmAddress: React.Dispatch<React.SetStateAction<string | null>>;\n /** Set the current EVM chain */\n setEvmChain: React.Dispatch<React.SetStateAction<string | null>>;\n /** Set the preferred wallet network */\n setPreferredWalletNetwork: (network: WalletNetworkType) => void;\n /** Set the Solana wallet instance */\n setSolanaWallet: (wallet: any) => void;\n /** Set the EVM wallet instance */\n setEvmWallet: (wallet: any) => void;\n /** Set the token balances */\n setBalances: (balances: Balance[]) => void;\n}\n\nexport interface NetworkContextValue extends NetworkState, NetworkActions { }\n\nexport interface NetworkProviderProps {\n children: React.ReactNode;\n}\n\n// ---------------------------------------------------------------------------\n// Context\n// ---------------------------------------------------------------------------\n\nconst NetworkContext = createContext<NetworkContextValue | null>(null);\n\n// ---------------------------------------------------------------------------\n// Hooks\n// ---------------------------------------------------------------------------\n\n/**\n * Hook to access network state and actions.\n * Must be used within a NetworkProvider.\n */\nexport function useNetwork(): NetworkContextValue {\n const context = useContext(NetworkContext);\n if (!context) {\n throw new Error('useNetwork must be used within a NetworkProvider');\n }\n return context;\n}\n\n/**\n * Hook to access network state only (no actions).\n * Useful for components that only need to read state.\n */\nexport function useNetworkState(): NetworkState {\n const {\n walletNetwork,\n isSolanaMode,\n isEvmMode,\n solanaAddress,\n evmAddress,\n evmChain,\n preferredWalletNetwork,\n solanaWallet,\n evmWallet,\n solanaAdapter,\n evmAdapter,\n balances,\n } = useNetwork();\n\n return {\n walletNetwork,\n isSolanaMode,\n isEvmMode,\n solanaAddress,\n evmAddress,\n evmChain,\n preferredWalletNetwork,\n solanaWallet,\n evmWallet,\n solanaAdapter,\n evmAdapter,\n balances,\n };\n}\n\n/**\n * Hook to access network actions only (no state).\n * Useful for components that only need to trigger actions.\n */\nexport function useNetworkActions(): NetworkActions {\n const {\n setSolanaAddress,\n setEvmAddress,\n setEvmChain,\n setPreferredWalletNetwork,\n setSolanaWallet,\n setEvmWallet,\n setBalances,\n } = useNetwork();\n\n return {\n setSolanaAddress,\n setEvmAddress,\n setEvmChain,\n setPreferredWalletNetwork,\n setSolanaWallet,\n setEvmWallet,\n setBalances,\n };\n}\n\n// ---------------------------------------------------------------------------\n// Provider\n// ---------------------------------------------------------------------------\n\n/**\n * NetworkProvider manages wallet network state.\n *\n * Responsibilities:\n * - Track which network is active (Solana vs EVM)\n * - Store wallet addresses for both networks\n * - Store wallet instances\n * - Derive isSolanaMode/isEvmMode from walletNetwork\n * - Auto-detect network from connected wallet\n *\n * Does NOT handle:\n * - Modal state\n * - Session/authentication state\n * - Signing functions\n * - Theming\n *\n * NOTE: Uses clean Zustand approach - reads/writes directly from store.\n * TurnkeyProvider was fixed to not reset during bootstrap, preventing race conditions.\n */\nexport function NetworkProvider({ children }: NetworkProviderProps) {\n // -------------------------------------------------------------------------\n // State from Store\n // -------------------------------------------------------------------------\n\n const solanaAddress = useWalletStore((state: WalletStore) => state.wallet.solanaAddress);\n const evmAddress = useWalletStore((state: WalletStore) => state.wallet.evmAddress);\n const evmChain = useWalletStore((state: WalletStore) => state.wallet.evmChain);\n const preferredWalletNetwork = useWalletStore((state: WalletStore) => state.wallet.preferredNetwork);\n const solanaWallet = useWalletStore((state: WalletStore) => state.wallet.solanaWallet);\n const evmWallet = useWalletStore((state: WalletStore) => state.wallet.evmWallet);\n const walletNetwork = useWalletStore((state: WalletStore) => state.wallet.network);\n const balances = useWalletStore((state: WalletStore) => state.wallet.balances);\n\n // Get stable action references\n const storeActions = getWalletActions().wallet;\n\n // -------------------------------------------------------------------------\n // Network Detection\n // -------------------------------------------------------------------------\n\n /**\n * Auto-detect wallet network based on which wallet is connected.\n * Priority: Solana wallet > EVM wallet > preferred network\n */\n useEffect(() => {\n if (solanaWallet) {\n logger.debug('[NetworkProvider] Detected Solana wallet, setting network to solana');\n storeActions.setNetwork('solana');\n return;\n }\n if (evmWallet) {\n logger.debug('[NetworkProvider] Detected EVM wallet, setting network to evm');\n storeActions.setNetwork('evm');\n return;\n }\n logger.debug('[NetworkProvider] No wallet connected, using preferred network', {\n preferredWalletNetwork,\n });\n storeActions.setNetwork(preferredWalletNetwork);\n }, [solanaWallet, evmWallet, preferredWalletNetwork, storeActions]);\n\n // -------------------------------------------------------------------------\n // Derived State\n // -------------------------------------------------------------------------\n\n const isSolanaMode = walletNetwork === 'solana';\n const isEvmMode = walletNetwork === 'evm';\n\n // -------------------------------------------------------------------------\n // Action Wrappers\n // -------------------------------------------------------------------------\n\n const setSolanaAddress = useCallback(\n (address: string) => storeActions.setSolanaAddress(address),\n [storeActions]\n );\n\n const setEvmAddress = useCallback(\n (address: string | null | ((prev: string | null) => string | null)) => {\n if (typeof address === 'function') {\n const currentAddress = useWalletStore.getState().wallet.evmAddress;\n storeActions.setEvmAddress(address(currentAddress));\n } else {\n storeActions.setEvmAddress(address);\n }\n },\n [storeActions]\n );\n\n const setEvmChain = useCallback(\n (chain: string | null | ((prev: string | null) => string | null)) => {\n if (typeof chain === 'function') {\n const currentChain = useWalletStore.getState().wallet.evmChain;\n storeActions.setEvmChain(chain(currentChain));\n } else {\n storeActions.setEvmChain(chain);\n }\n },\n [storeActions]\n );\n\n const setPreferredWalletNetwork = useCallback(\n (network: WalletNetworkType) => storeActions.setPreferredNetwork(network),\n [storeActions]\n );\n\n const setSolanaWallet = useCallback(\n (wallet: any) => storeActions.setSolanaWallet(wallet),\n [storeActions]\n );\n\n const setEvmWallet = useCallback(\n (wallet: any) => storeActions.setEvmWallet(wallet),\n [storeActions]\n );\n\n const setBalances = useCallback(\n (newBalances: Balance[]) => storeActions.setBalances(newBalances),\n [storeActions]\n );\n\n // -------------------------------------------------------------------------\n // Wallet Adapters\n // -------------------------------------------------------------------------\n\n // Read adapters from store\n const solanaAdapter = useWalletStore((state: WalletStore) => state.wallet.solanaAdapter);\n const evmAdapter = useWalletStore((state: WalletStore) => state.wallet.evmAdapter);\n\n // Track the wallet instance used to create the adapter to avoid recreating\n const solanaWalletRef = useRef<any>(null);\n const evmWalletRef = useRef<any>(null);\n\n // Create/update Solana adapter when wallet changes and store it\n useEffect(() => {\n if (!solanaWallet) {\n if (solanaWalletRef.current !== null) {\n logger.debug('[NetworkProvider] Clearing Solana adapter');\n storeActions.setSolanaAdapter(null);\n solanaWalletRef.current = null;\n }\n return;\n }\n\n // Only recreate if wallet instance changed\n if (solanaWalletRef.current === solanaWallet) {\n return;\n }\n\n logger.debug('[NetworkProvider] Creating Solana adapter');\n const adapter = createSolanaAdapter(solanaWallet);\n storeActions.setSolanaAdapter(adapter);\n solanaWalletRef.current = solanaWallet;\n }, [solanaWallet, storeActions]);\n\n // Create/update EVM adapter when wallet changes and store it\n useEffect(() => {\n if (!evmWallet) {\n if (evmWalletRef.current !== null) {\n logger.debug('[NetworkProvider] Clearing EVM adapter');\n storeActions.setEvmAdapter(null);\n evmWalletRef.current = null;\n }\n return;\n }\n\n // Only recreate if wallet instance changed\n if (evmWalletRef.current === evmWallet) {\n return;\n }\n\n logger.debug('[NetworkProvider] Creating EVM adapter');\n const adapter = createEVMAdapter(evmWallet);\n storeActions.setEvmAdapter(adapter);\n evmWalletRef.current = evmWallet;\n }, [evmWallet, storeActions]);\n\n // -------------------------------------------------------------------------\n // Context Value\n // -------------------------------------------------------------------------\n\n const value = useMemo<NetworkContextValue>(\n () => ({\n // State\n walletNetwork,\n isSolanaMode,\n isEvmMode,\n solanaAddress,\n evmAddress,\n evmChain,\n preferredWalletNetwork,\n solanaWallet,\n evmWallet,\n solanaAdapter,\n evmAdapter,\n balances,\n // Actions\n setSolanaAddress,\n setEvmAddress,\n setEvmChain,\n setPreferredWalletNetwork,\n setSolanaWallet,\n setEvmWallet,\n setBalances,\n }),\n [\n walletNetwork,\n isSolanaMode,\n isEvmMode,\n solanaAddress,\n evmAddress,\n evmChain,\n preferredWalletNetwork,\n solanaWallet,\n evmWallet,\n solanaAdapter,\n evmAdapter,\n balances,\n setSolanaAddress,\n setEvmAddress,\n setEvmChain,\n setPreferredWalletNetwork,\n setSolanaWallet,\n setEvmWallet,\n setBalances,\n ]\n );\n\n return <NetworkContext.Provider value={value}>{children}</NetworkContext.Provider>;\n}\n\n// ---------------------------------------------------------------------------\n// Exports\n// ---------------------------------------------------------------------------\n\nexport { NetworkContext };\n"]}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SessionProvider.js","sourceRoot":"","sources":["../../../src/providers/N1WalletProvider/SessionProvider.tsx"],"names":[],"mappings":"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","sourcesContent":["'use client';\n\nimport React, {\n createContext,\n useCallback,\n useContext,\n useMemo,\n} from 'react';\nimport { useWalletStore, getWalletActions, WalletStore } from '../../store';\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\nexport interface SessionState {\n /** Whether a wallet is currently connected */\n isConnected: boolean;\n /** Session public key for signing */\n sessionPubKey: Uint8Array | null;\n /** Wallet public key */\n walletPubKey: Uint8Array | null;\n /** Nord user object containing session info */\n nordUser: any;\n /** Whether the provider is in a loading state */\n loading: boolean;\n /** Whether the Dynamic SDK has loaded */\n dynamicSdkHasLoaded: boolean;\n /** Whether Turnkey is enabled for this deployment */\n turnkeyEnabled: boolean;\n}\n\nexport interface SessionActions {\n /** Set the connected state */\n setIsConnected: React.Dispatch<React.SetStateAction<boolean>>;\n /** Set the session public key */\n setSessionPubKey: React.Dispatch<React.SetStateAction<Uint8Array | null>>;\n /** Set the wallet public key */\n setWalletPubKey: React.Dispatch<React.SetStateAction<Uint8Array | null>>;\n /** Set the Nord user object */\n setNordUser: React.Dispatch<React.SetStateAction<any>>;\n /** Set the loading state */\n setLoading: React.Dispatch<React.SetStateAction<boolean>>;\n /** Set whether Dynamic SDK has loaded */\n setDynamicSdkHasLoaded: React.Dispatch<React.SetStateAction<boolean>>;\n}\n\nexport interface SessionContextValue extends SessionState, SessionActions { }\n\nexport interface SessionProviderProps {\n children: React.ReactNode;\n}\n\n// ---------------------------------------------------------------------------\n// Context\n// ---------------------------------------------------------------------------\n\nconst SessionContext = createContext<SessionContextValue | null>(null);\n\n// ---------------------------------------------------------------------------\n// Hooks\n// ---------------------------------------------------------------------------\n\n/**\n * Hook to access session state and actions.\n * Must be used within a SessionProvider.\n */\nexport function useSession(): SessionContextValue {\n const context = useContext(SessionContext);\n if (!context) {\n throw new Error('useSession must be used within a SessionProvider');\n }\n return context;\n}\n\n/**\n * Hook to access session state only (no actions).\n * Useful for components that only need to read state.\n */\nexport function useSessionState(): SessionState {\n const {\n isConnected,\n sessionPubKey,\n walletPubKey,\n nordUser,\n loading,\n dynamicSdkHasLoaded,\n turnkeyEnabled,\n } = useSession();\n\n return {\n isConnected,\n sessionPubKey,\n walletPubKey,\n nordUser,\n loading,\n dynamicSdkHasLoaded,\n turnkeyEnabled,\n };\n}\n\n/**\n * Hook to access session actions only (no state).\n * Useful for components that only need to trigger actions.\n */\nexport function useSessionActions(): SessionActions {\n const {\n setIsConnected,\n setSessionPubKey,\n setWalletPubKey,\n setNordUser,\n setLoading,\n setDynamicSdkHasLoaded,\n } = useSession();\n\n return {\n setIsConnected,\n setSessionPubKey,\n setWalletPubKey,\n setNordUser,\n setLoading,\n setDynamicSdkHasLoaded,\n };\n}\n\n// ---------------------------------------------------------------------------\n// Provider\n// ---------------------------------------------------------------------------\n\n/**\n * SessionProvider manages authentication and session state.\n *\n * Uses clean Zustand approach - reads/writes directly from store.\n *\n * Responsibilities:\n * - Track wallet connection status\n * - Store session and wallet public keys\n * - Manage Nord user object\n * - Track SDK loading state\n *\n * Does NOT handle:\n * - Modal state\n * - Network/chain state\n * - Signing functions\n * - Theming\n */\nexport function SessionProvider({ children }: SessionProviderProps) {\n // -------------------------------------------------------------------------\n // State from Store (individual selectors for optimal re-renders)\n // -------------------------------------------------------------------------\n\n const isConnected = useWalletStore((state: WalletStore) => state.session.isConnected);\n const sessionPubKey = useWalletStore((state: WalletStore) => state.session.sessionPubKey);\n const walletPubKey = useWalletStore((state: WalletStore) => state.session.walletPubKey);\n const nordUser = useWalletStore((state: WalletStore) => state.session.nordUser);\n const loading = useWalletStore((state: WalletStore) => state.session.loading);\n const dynamicSdkLoaded = useWalletStore((state: WalletStore) => state.session.dynamicSdkLoaded);\n const turnkeyEnabled = useWalletStore((state: WalletStore) => state.config.turnkeyEnabled);\n\n // -------------------------------------------------------------------------\n // Store Actions (stable references via getWalletActions)\n // -------------------------------------------------------------------------\n\n const storeActions = getWalletActions().session;\n\n // -------------------------------------------------------------------------\n // Action Wrappers (compatible with React.Dispatch signature)\n // -------------------------------------------------------------------------\n\n const setIsConnected = useCallback<React.Dispatch<React.SetStateAction<boolean>>>(\n (valueOrUpdater) => {\n if (typeof valueOrUpdater === 'function') {\n const currentValue = useWalletStore.getState().session.isConnected;\n storeActions.setIsConnected(valueOrUpdater(currentValue));\n } else {\n storeActions.setIsConnected(valueOrUpdater);\n }\n },\n [storeActions]\n );\n\n const setSessionPubKey = useCallback<React.Dispatch<React.SetStateAction<Uint8Array | null>>>(\n (valueOrUpdater) => {\n if (typeof valueOrUpdater === 'function') {\n const currentValue = useWalletStore.getState().session.sessionPubKey;\n storeActions.setSessionPubKey(valueOrUpdater(currentValue));\n } else {\n storeActions.setSessionPubKey(valueOrUpdater);\n }\n },\n [storeActions]\n );\n\n const setWalletPubKey = useCallback<React.Dispatch<React.SetStateAction<Uint8Array | null>>>(\n (valueOrUpdater) => {\n if (typeof valueOrUpdater === 'function') {\n const currentValue = useWalletStore.getState().session.walletPubKey;\n storeActions.setWalletPubKey(valueOrUpdater(currentValue));\n } else {\n storeActions.setWalletPubKey(valueOrUpdater);\n }\n },\n [storeActions]\n );\n\n const setNordUser = useCallback<React.Dispatch<React.SetStateAction<any>>>(\n (valueOrUpdater) => {\n if (typeof valueOrUpdater === 'function') {\n const currentValue = useWalletStore.getState().session.nordUser;\n storeActions.setNordUser(valueOrUpdater(currentValue));\n } else {\n storeActions.setNordUser(valueOrUpdater);\n }\n },\n [storeActions]\n );\n\n const setLoading = useCallback<React.Dispatch<React.SetStateAction<boolean>>>(\n (valueOrUpdater) => {\n if (typeof valueOrUpdater === 'function') {\n const currentValue = useWalletStore.getState().session.loading;\n storeActions.setLoading(valueOrUpdater(currentValue));\n } else {\n storeActions.setLoading(valueOrUpdater);\n }\n },\n [storeActions]\n );\n\n const setDynamicSdkHasLoaded = useCallback<React.Dispatch<React.SetStateAction<boolean>>>(\n (valueOrUpdater) => {\n if (typeof valueOrUpdater === 'function') {\n const currentValue = useWalletStore.getState().session.dynamicSdkLoaded;\n storeActions.setDynamicSdkLoaded(valueOrUpdater(currentValue));\n } else {\n storeActions.setDynamicSdkLoaded(valueOrUpdater);\n }\n },\n [storeActions]\n );\n\n // -------------------------------------------------------------------------\n // Context Value\n // -------------------------------------------------------------------------\n\n const value = useMemo<SessionContextValue>(\n () => ({\n // State\n isConnected,\n sessionPubKey,\n walletPubKey,\n nordUser,\n loading,\n dynamicSdkHasLoaded: dynamicSdkLoaded,\n turnkeyEnabled,\n // Actions\n setIsConnected,\n setSessionPubKey,\n setWalletPubKey,\n setNordUser,\n setLoading,\n setDynamicSdkHasLoaded,\n }),\n [\n isConnected,\n sessionPubKey,\n walletPubKey,\n nordUser,\n loading,\n dynamicSdkLoaded,\n turnkeyEnabled,\n setIsConnected,\n setSessionPubKey,\n setWalletPubKey,\n setNordUser,\n setLoading,\n setDynamicSdkHasLoaded,\n ]\n );\n\n return <SessionContext.Provider value={value}>{children}</SessionContext.Provider>;\n}\n\n// ---------------------------------------------------------------------------\n// Exports\n// ---------------------------------------------------------------------------\n\nexport { SessionContext };\n"]}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SigningProvider.js","sourceRoot":"","sources":["../../../src/providers/N1WalletProvider/SigningProvider.tsx"],"names":[],"mappings":"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","sourcesContent":["'use client';\n\nimport React, {\n createContext,\n useCallback,\n useContext,\n useMemo,\n} from 'react';\nimport { useWalletStore, getWalletActions, WalletStore } from '../../store';\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\n/** Generic signing function type */\nexport type SigningFunction<T = unknown, R = unknown> = ((input: T) => Promise<R>) | null;\n\nexport interface SigningState {\n /** Function to sign messages with the session key */\n signMessageWithSessionKey: SigningFunction;\n /** Function to sign messages with the wallet key */\n signMessageWithWalletKey: SigningFunction;\n /** Function to sign transactions with the wallet key */\n signTransactionWithWalletKey: SigningFunction;\n}\n\nexport interface SigningActions {\n /** Set the session key signing function */\n setSignMessageWithSessionKey: React.Dispatch<React.SetStateAction<SigningFunction>>;\n /** Set the wallet key message signing function */\n setSignMessageWithWalletKey: React.Dispatch<React.SetStateAction<SigningFunction>>;\n /** Set the wallet key transaction signing function */\n setSignTransactionWithWalletKey: React.Dispatch<React.SetStateAction<SigningFunction>>;\n}\n\nexport interface SigningContextValue extends SigningState, SigningActions { }\n\nexport interface SigningProviderProps {\n children: React.ReactNode;\n}\n\n// ---------------------------------------------------------------------------\n// Context\n// ---------------------------------------------------------------------------\n\nconst SigningContext = createContext<SigningContextValue | null>(null);\n\n// ---------------------------------------------------------------------------\n// Hooks\n// ---------------------------------------------------------------------------\n\n/**\n * Hook to access signing state and actions.\n * Must be used within a SigningProvider.\n */\nexport function useSigning(): SigningContextValue {\n const context = useContext(SigningContext);\n if (!context) {\n throw new Error('useSigning must be used within a SigningProvider');\n }\n return context;\n}\n\n/**\n * Hook to access signing functions only (no setters).\n * Useful for components that only need to sign.\n */\nexport function useSigningState(): SigningState {\n const {\n signMessageWithSessionKey,\n signMessageWithWalletKey,\n signTransactionWithWalletKey,\n } = useSigning();\n\n return {\n signMessageWithSessionKey,\n signMessageWithWalletKey,\n signTransactionWithWalletKey,\n };\n}\n\n/**\n * Hook to access signing setters only (no functions).\n * Useful for components that register signing functions.\n */\nexport function useSigningActions(): SigningActions {\n const {\n setSignMessageWithSessionKey,\n setSignMessageWithWalletKey,\n setSignTransactionWithWalletKey,\n } = useSigning();\n\n return {\n setSignMessageWithSessionKey,\n setSignMessageWithWalletKey,\n setSignTransactionWithWalletKey,\n };\n}\n\n// ---------------------------------------------------------------------------\n// Provider\n// ---------------------------------------------------------------------------\n\n/**\n * SigningProvider manages signing functions for wallet operations.\n *\n * Uses clean Zustand approach - reads/writes directly from store.\n *\n * Responsibilities:\n * - Store and provide signing functions\n * - Support session key signing\n * - Support wallet key signing (messages and transactions)\n *\n * Does NOT handle:\n * - Modal state\n * - Network/chain state\n * - Session/authentication state\n * - Theming\n */\nexport function SigningProvider({ children }: SigningProviderProps) {\n // -------------------------------------------------------------------------\n // State from Store (individual selectors for optimal re-renders)\n // -------------------------------------------------------------------------\n\n const signMessageWithSessionKey = useWalletStore((state: WalletStore) => state.signing.signMessageWithSessionKey);\n const signMessageWithWalletKey = useWalletStore((state: WalletStore) => state.signing.signMessageWithWalletKey);\n const signTransactionWithWalletKey = useWalletStore((state: WalletStore) => state.signing.signTransactionWithWalletKey);\n\n // -------------------------------------------------------------------------\n // Store Actions (stable references via getWalletActions)\n // -------------------------------------------------------------------------\n\n const storeActions = getWalletActions().signing;\n\n // -------------------------------------------------------------------------\n // Action Wrappers (compatible with React.Dispatch signature)\n // -------------------------------------------------------------------------\n\n const setSignMessageWithSessionKey = useCallback<React.Dispatch<React.SetStateAction<SigningFunction>>>(\n (valueOrUpdater) => {\n if (typeof valueOrUpdater === 'function') {\n const currentValue = useWalletStore.getState().signing.signMessageWithSessionKey;\n storeActions.setSignMessageWithSessionKey(valueOrUpdater(currentValue) as SigningFunction);\n } else {\n storeActions.setSignMessageWithSessionKey(valueOrUpdater);\n }\n },\n [storeActions]\n );\n\n const setSignMessageWithWalletKey = useCallback<React.Dispatch<React.SetStateAction<SigningFunction>>>(\n (valueOrUpdater) => {\n if (typeof valueOrUpdater === 'function') {\n const currentValue = useWalletStore.getState().signing.signMessageWithWalletKey;\n storeActions.setSignMessageWithWalletKey(valueOrUpdater(currentValue) as SigningFunction);\n } else {\n storeActions.setSignMessageWithWalletKey(valueOrUpdater);\n }\n },\n [storeActions]\n );\n\n const setSignTransactionWithWalletKey = useCallback<React.Dispatch<React.SetStateAction<SigningFunction>>>(\n (valueOrUpdater) => {\n if (typeof valueOrUpdater === 'function') {\n const currentValue = useWalletStore.getState().signing.signTransactionWithWalletKey;\n storeActions.setSignTransactionWithWalletKey(valueOrUpdater(currentValue) as SigningFunction);\n } else {\n storeActions.setSignTransactionWithWalletKey(valueOrUpdater);\n }\n },\n [storeActions]\n );\n\n // -------------------------------------------------------------------------\n // Context Value\n // -------------------------------------------------------------------------\n\n const value = useMemo<SigningContextValue>(\n () => ({\n // State\n signMessageWithSessionKey,\n signMessageWithWalletKey,\n signTransactionWithWalletKey,\n // Actions\n setSignMessageWithSessionKey,\n setSignMessageWithWalletKey,\n setSignTransactionWithWalletKey,\n }),\n [\n signMessageWithSessionKey,\n signMessageWithWalletKey,\n signTransactionWithWalletKey,\n setSignMessageWithSessionKey,\n setSignMessageWithWalletKey,\n setSignTransactionWithWalletKey,\n ]\n );\n\n return <SigningContext.Provider value={value}>{children}</SigningContext.Provider>;\n}\n\n// ---------------------------------------------------------------------------\n// Exports\n// ---------------------------------------------------------------------------\n\nexport { SigningContext };\n"]}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ThemingProvider.js","sourceRoot":"","sources":["../../../src/providers/N1WalletProvider/ThemingProvider.tsx"],"names":[],"mappings":"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","sourcesContent":["'use client';\n\nimport React, {\n createContext,\n useContext,\n useEffect,\n useMemo,\n} from 'react';\nimport mainCss from '../../styles/embedded-main-css';\nimport { getWalletActions } from '../../store';\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\nexport interface ColorOverride {\n color: string;\n replacement: string;\n}\n\nexport interface ThemingState {\n /** The processed CSS with color overrides applied (without @font-face rules) */\n injectedCss: string;\n /** The original color overrides */\n colorOverrides: ColorOverride[];\n}\n\nexport interface ThemingContextValue extends ThemingState {}\n\nexport interface ThemingProviderProps {\n children: React.ReactNode;\n /** Color overrides to apply to the CSS */\n colorOverrides?: ColorOverride[];\n}\n\n// ---------------------------------------------------------------------------\n// Context\n// ---------------------------------------------------------------------------\n\nconst ThemingContext = createContext<ThemingContextValue | null>(null);\n\n// ---------------------------------------------------------------------------\n// Hooks\n// ---------------------------------------------------------------------------\n\n/**\n * Hook to access theming state.\n * Must be used within a ThemingProvider.\n */\nexport function useTheming(): ThemingContextValue {\n const context = useContext(ThemingContext);\n if (!context) {\n throw new Error('useTheming must be used within a ThemingProvider');\n }\n return context;\n}\n\n/**\n * Hook to get the processed CSS string.\n * Convenience hook for components that only need the CSS.\n */\nexport function useInjectedCss(): string {\n return useTheming().injectedCss;\n}\n\n// ---------------------------------------------------------------------------\n// Helper\n// ---------------------------------------------------------------------------\n\n/**\n * Apply color overrides to the base CSS string.\n * Replaces all instances of each color with its replacement (case-insensitive).\n */\nfunction applyColorOverrides(baseCss: string, overrides: ColorOverride[]): string {\n if (!Array.isArray(overrides) || overrides.length === 0) {\n return baseCss;\n }\n\n let result = baseCss;\n overrides.forEach(({ color, replacement }) => {\n if (color && replacement) {\n // Escape special regex characters and replace all instances case-insensitively\n const regex = new RegExp(color.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&'), 'gi');\n result = result.replace(regex, replacement);\n }\n });\n\n return result;\n}\n\n// ---------------------------------------------------------------------------\n// Provider\n// ---------------------------------------------------------------------------\n\n/**\n * ThemingProvider manages CSS injection and color overrides.\n *\n * NOTE: This provider's state comes from props (not internal state).\n * The store is synced for external observers but props are the source of truth.\n * We don't subscribe to the store (no useWalletStore) to avoid infinite loops.\n *\n * Responsibilities:\n * - Process base CSS with color overrides\n * - Provide processed CSS to components\n * - Handle theme customization\n * - Sync to store for external access\n *\n * Does NOT handle:\n * - Modal state\n * - Network/chain state\n * - Session/authentication state\n * - Signing functions\n */\nexport function ThemingProvider({ children, colorOverrides = [] }: ThemingProviderProps) {\n // -------------------------------------------------------------------------\n // Derived State (from props - props are source of truth)\n // -------------------------------------------------------------------------\n\n const injectedCss = useMemo(\n () => applyColorOverrides(mainCss, colorOverrides),\n [colorOverrides]\n );\n\n // -------------------------------------------------------------------------\n // Store Sync (write-only, no subscription to avoid infinite loop)\n // -------------------------------------------------------------------------\n\n const storeActions = getWalletActions().config;\n\n useEffect(() => {\n storeActions.setInjectedCss(injectedCss);\n storeActions.setColorOverrides(colorOverrides);\n }, [injectedCss, colorOverrides, storeActions]);\n\n // -------------------------------------------------------------------------\n // Context Value\n // -------------------------------------------------------------------------\n\n const value = useMemo<ThemingContextValue>(\n () => ({\n injectedCss,\n colorOverrides,\n }),\n [injectedCss, colorOverrides]\n );\n\n return <ThemingContext.Provider value={value}>{children}</ThemingContext.Provider>;\n}\n\n// ---------------------------------------------------------------------------\n// Exports\n// ---------------------------------------------------------------------------\n\nexport { ThemingContext };\n"]}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/providers/N1WalletProvider/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,gBAAgB;AAChB,OAAO,EACL,aAAa,EACb,YAAY,EACZ,QAAQ,EACR,aAAa,EACb,eAAe,GAKhB,MAAM,iBAAiB,CAAC;AAKzB,kBAAkB;AAClB,OAAO,EACL,eAAe,EACf,cAAc,EACd,UAAU,EACV,eAAe,EACf,iBAAiB,GAMlB,MAAM,mBAAmB,CAAC;AAE3B,kBAAkB;AAClB,OAAO,EACL,eAAe,EACf,cAAc,EACd,UAAU,EACV,eAAe,EACf,iBAAiB,GAKlB,MAAM,mBAAmB,CAAC;AAE3B,kBAAkB;AAClB,OAAO,EACL,eAAe,EACf,cAAc,EACd,UAAU,EACV,eAAe,EACf,iBAAiB,GAMlB,MAAM,mBAAmB,CAAC;AAE3B,kBAAkB;AAClB,OAAO,EACL,eAAe,EACf,cAAc,EACd,UAAU,EACV,cAAc,GAKf,MAAM,mBAAmB,CAAC;AAE3B,gBAAgB;AAChB,OAAO,EACL,aAAa,GAEd,MAAM,iBAAiB,CAAC","sourcesContent":["/**\n * N1WalletProvider sub-providers\n *\n * These providers split the monolithic N1WalletProvider into focused,\n * single-responsibility providers for better maintainability and testing.\n *\n * Provider hierarchy:\n * - ThemingProvider: CSS injection, color overrides (outermost)\n * - NetworkProvider: Wallet network, chain, address normalization\n * - SessionProvider: Session keys, nordUser, authentication state\n * - SigningProvider: Signing functions with unified interface\n * - ModalProvider: Modal visibility, cooldown, deposit-only flow\n * - ContextBridge: Maps sub-providers to legacy N1WalletContext/N1InternalWalletContext\n */\n\n// ModalProvider\nexport {\n ModalProvider,\n ModalContext,\n useModal,\n useModalState,\n useModalActions,\n type ModalStateValues,\n type ModalActions,\n type ModalContextValue,\n type ModalProviderProps,\n} from './ModalProvider';\n\n// Re-export ModalState from store types for convenience\nexport type { ModalState } from '../../store/types';\n\n// NetworkProvider\nexport {\n NetworkProvider,\n NetworkContext,\n useNetwork,\n useNetworkState,\n useNetworkActions,\n type WalletNetworkType,\n type NetworkState,\n type NetworkActions,\n type NetworkContextValue,\n type NetworkProviderProps,\n} from './NetworkProvider';\n\n// SessionProvider\nexport {\n SessionProvider,\n SessionContext,\n useSession,\n useSessionState,\n useSessionActions,\n type SessionState,\n type SessionActions,\n type SessionContextValue,\n type SessionProviderProps,\n} from './SessionProvider';\n\n// SigningProvider\nexport {\n SigningProvider,\n SigningContext,\n useSigning,\n useSigningState,\n useSigningActions,\n type SigningFunction,\n type SigningState,\n type SigningActions,\n type SigningContextValue,\n type SigningProviderProps,\n} from './SigningProvider';\n\n// ThemingProvider\nexport {\n ThemingProvider,\n ThemingContext,\n useTheming,\n useInjectedCss,\n type ColorOverride,\n type ThemingState,\n type ThemingContextValue,\n type ThemingProviderProps,\n} from './ThemingProvider';\n\n// ContextBridge\nexport {\n ContextBridge,\n type ContextBridgeProps,\n} from './ContextBridge';\n"]}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"N1WalletProvider.js","sourceRoot":"","sources":["../../src/providers/N1WalletProvider.tsx"],"names":[],"mappings":"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","sourcesContent":["'use client';\n\nimport React, { Suspense, useCallback, useEffect, useMemo } from 'react';\nimport root from 'react-shadow';\nimport { N1WalletModal } from '../features/onboarding-flow/N1WalletModal';\nimport { OnboardingProvider } from '../features/onboarding-flow/providers';\nimport { logger } from '../utils/logger';\nimport { createBootstrapError } from '../utils/errors';\nimport WalletErrorBoundary from './WalletErrorBoundary';\nimport { useNordUserInitialization } from '../hooks/useNordUserInitialization';\nimport { N1SessionMode, N1WalletProviderProps } from '../types/wallet';\nimport { TurnkeyProvider } from '../turnkey';\nimport { getDynamicEnvironmentId } from '../config/dynamic';\nimport {\n ThemingProvider,\n NetworkProvider,\n SessionProvider,\n SigningProvider,\n ModalProvider,\n ContextBridge,\n useInjectedCss,\n useSession,\n} from './N1WalletProvider/index';\nimport { WalletError, N1Error } from '../errors/types';\nimport {\n initializeSubscriptions,\n cleanupSubscriptions,\n} from '../store/subscriptions';\nimport { ensureCdnFontsLoaded } from '../styles/cdn-fonts';\n\nconst LazyWalletProvider = React.lazy(() =>\n import('./LazyWalletProvider').then((mod) => ({\n default: mod.LazyWalletProvider,\n }))\n);\n\n/**\n * ModalContent renders the modal with CSS from ThemingProvider.\n * Must be rendered inside ThemingProvider.\n *\n * NOTE: Fonts are loaded via CDN using the FontFace API (see cdn-fonts.ts).\n * This works regardless of Shadow DOM since fonts are registered globally.\n */\nconst ModalContent = React.memo(() => {\n const css = useInjectedCss();\n\n // Load CDN fonts on mount\n useEffect(() => {\n void ensureCdnFontsLoaded();\n }, []);\n\n return (\n <root.div>\n <style>{css}</style>\n <N1WalletModal />\n </root.div>\n );\n});\n\nconst DynamicBridge = React.memo(() => null);\n\n/**\n * Wrapper component that initializes NordUser when the provider mounts.\n * This ensures session keys and signing functions are set up before the widget is used.\n */\nfunction NordWrapper({ children }: { children: React.ReactNode }) {\n useNordUserInitialization();\n return <>{children}</>;\n}\n\n/**\n * Inner component that sets up ModalProvider with session dependencies.\n * Must be rendered inside SessionProvider to access session state.\n */\nfunction ModalProviderWrapper({\n children,\n nord,\n handleError,\n skipFinalScreen,\n turnkeyEnabled,\n dynamicEnvironmentId,\n}: {\n children: React.ReactNode;\n nord: N1WalletProviderProps['nord'];\n handleError: (error: WalletError | N1Error) => void;\n skipFinalScreen: N1WalletProviderProps['skipFinalScreen'];\n turnkeyEnabled: boolean;\n dynamicEnvironmentId: string;\n}) {\n const { dynamicSdkHasLoaded, setLoading } = useSession();\n\n // Update loading state based on SDK readiness\n useEffect(() => {\n const isDynamicReady = Boolean(dynamicSdkHasLoaded);\n setLoading(!isDynamicReady);\n }, [dynamicSdkHasLoaded, setLoading]);\n\n const body = (\n <NordWrapper>\n <>\n <OnboardingProvider>\n <>\n {children}\n <ModalContent />\n </>\n </OnboardingProvider>\n <Suspense fallback={null}>\n <LazyWalletProvider dynamicEnvironmentId={dynamicEnvironmentId}>\n <DynamicBridge />\n </LazyWalletProvider>\n </Suspense>\n </>\n </NordWrapper>\n );\n\n return (\n <ModalProvider>\n <ContextBridge\n nord={nord}\n handleError={handleError}\n skipFinalScreen={skipFinalScreen}\n turnkeyEnabled={turnkeyEnabled}\n >\n {turnkeyEnabled ? <TurnkeyProvider>{body}</TurnkeyProvider> : body}\n </ContextBridge>\n </ModalProvider>\n );\n}\n\n/**\n * Main provider component for the N1 wallet widget.\n *\n * Coordinates sub-providers for clean separation of concerns:\n * - ThemingProvider: CSS injection and color overrides\n * - NetworkProvider: Wallet network, chain, and address state\n * - SessionProvider: Connection status, keys, and Nord user\n * - SigningProvider: Message and transaction signing functions\n * - ModalProvider: Modal visibility and flow control\n * - ContextBridge: Legacy context compatibility layer\n *\n * External integrations:\n * - Dynamic SDK for wallet connection (lazy loaded)\n * - Optional Turnkey support for additional wallet features\n */\nexport function N1WalletProvider({\n children,\n providedSessionMode,\n onError,\n nord,\n colorOverrides,\n skipFinalScreen,\n dynamicEnvironmentId,\n enableTurnkey,\n}: N1WalletProviderProps) {\n const resolvedDynamicEnvironmentId = useMemo(\n () => dynamicEnvironmentId ?? getDynamicEnvironmentId(),\n [dynamicEnvironmentId]\n );\n\n const turnkeyEnabled = enableTurnkey !== false;\n\n const handleError = useCallback(\n (error: WalletError | N1Error) => {\n onError?.(error);\n },\n [onError]\n );\n\n// Initialize store subscriptions on mount\n useEffect(() => {\n initializeSubscriptions();\n return () => {\n cleanupSubscriptions();\n };\n }, []);\n\n useEffect(() => {\n if (providedSessionMode !== N1SessionMode.Nord) {\n logger.warn(\n `Only Nord session mode is supported. Received ${providedSessionMode}, defaulting to Nord.`\n );\n }\n }, [providedSessionMode]);\n\n if (!resolvedDynamicEnvironmentId) {\n logger.logError(createBootstrapError(\n 'CONFIG_MISSING',\n 'Dynamic environment ID is required. Provide it via dynamicEnvironmentId prop or NEXT_PUBLIC_DYNAMIC_ENVIRONMENT_ID.'\n ));\n return null;\n }\n\n return (\n <WalletErrorBoundary onError={handleError}>\n <ThemingProvider colorOverrides={colorOverrides}>\n <NetworkProvider>\n <SessionProvider>\n <SigningProvider>\n <ModalProviderWrapper\n nord={nord}\n handleError={handleError}\n skipFinalScreen={skipFinalScreen}\n turnkeyEnabled={turnkeyEnabled}\n dynamicEnvironmentId={resolvedDynamicEnvironmentId}\n >\n {children}\n </ModalProviderWrapper>\n </SigningProvider>\n </SessionProvider>\n </NetworkProvider>\n </ThemingProvider>\n </WalletErrorBoundary>\n );\n}\n"]}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ShadowRootWrapper.js","sourceRoot":"","sources":["../../src/providers/ShadowRootWrapper.tsx"],"names":[],"mappings":";AACA,OAAO,IAAI,MAAM,cAAc,CAAC;AAOhC;;;GAGG;AACH,MAAM,UAAU,iBAAiB,CAAC,EAAiD;QAA/C,QAAQ,cAAA,EAAE,WAAW,iBAAA;IACvD,OAAO,CACL,MAAC,IAAI,CAAC,GAAG,eACP,0BAAQ,WAAW,GAAS,EAC3B,QAAQ,IACA,CACZ,CAAC;AACJ,CAAC","sourcesContent":["import React from 'react';\nimport root from 'react-shadow';\n\ninterface ShadowRootWrapperProps {\n children: React.ReactNode;\n injectedCss: string;\n}\n\n/**\n * Wraps children in a shadow DOM root to isolate styles from host application.\n * Used for the connect button to prevent CSS conflicts.\n */\nexport function ShadowRootWrapper({ children, injectedCss }: ShadowRootWrapperProps) {\n return (\n <root.div>\n <style>{injectedCss}</style>\n {children}\n </root.div>\n );\n} \n"]}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WalletErrorBoundary.js","sourceRoot":"","sources":["../../src/providers/WalletErrorBoundary.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,WAAW,EAAE,eAAe,EAAW,MAAM,iBAAiB,CAAC;AACxE,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAWzC;;;;GAIG;AACH;IAAkC,uCAGjC;IAHD;;QAIE,WAAK,GAA6B;YAChC,QAAQ,EAAE,KAAK;SAChB,CAAC;;IAuCJ,CAAC;IArCQ,4CAAwB,GAA/B;QACE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;IAC5B,CAAC;IAED,+CAAiB,GAAjB,UAAkB,KAAY;QAC5B,MAAM,CAAC,KAAK,CAAC,kDAAkD,EAAE,KAAK,CAAC,CAAC;QACxE,IAAI,KAAK,YAAY,WAAW,EAAE,CAAC;YACjC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAC5B,CAAC;aAAM,CAAC;YACN,wCAAwC;YACxC,IAAI,CAAC,KAAK,CAAC,OAAO,CAChB,IAAI,WAAW,CACb,eAAe,CAAC,OAAO,EACvB,KAAK,CAAC,OAAO,IAAI,8BAA8B,EAC/C,EAAE,aAAa,EAAE,KAAK,EAAE,CACzB,CACF,CAAC;QACJ,CAAC;IACH,CAAC;IAED,gDAAkB,GAAlB,UACE,SAAmC,EACnC,SAAmC;QAEnC,IAAI,SAAS,CAAC,QAAQ,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,IAAI,SAAS,CAAC,QAAQ,KAAK,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;YAC5F,wDAAwD;YACxD,yDAAyD;YACzD,IAAI,CAAC,QAAQ,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC;QACrC,CAAC;IACH,CAAC;IAED,oCAAM,GAAN;QACE,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;YACxB,OAAO,IAAI,CAAC;QACd,CAAC;QACD,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC;IAC7B,CAAC;IACH,0BAAC;AAAD,CAAC,AA7CD,CAAkC,KAAK,CAAC,SAAS,GA6ChD;AAED,eAAe,mBAAmB,CAAC","sourcesContent":["import React from 'react';\nimport { WalletError, WalletErrorCode, N1Error } from '../errors/types';\nimport { logger } from '../utils/logger';\n\ntype WalletErrorBoundaryProps = {\n children: React.ReactNode;\n onError: (error: WalletError | N1Error) => void;\n};\n\ntype WalletErrorBoundaryState = {\n hasError: boolean;\n};\n\n/**\n * React error boundary that catches WalletErrors and unhandled exceptions.\n * Converts unknown errors to WalletError format and calls onError callback.\n * Resets error state when children change after an error.\n */\nclass WalletErrorBoundary extends React.Component<\n WalletErrorBoundaryProps,\n WalletErrorBoundaryState\n> {\n state: WalletErrorBoundaryState = {\n hasError: false,\n };\n\n static getDerivedStateFromError(): WalletErrorBoundaryState {\n return { hasError: true };\n }\n\n componentDidCatch(error: Error) {\n logger.error('Unhandled error captured by WalletErrorBoundary:', error);\n if (error instanceof WalletError) {\n this.props.onError(error);\n } else {\n // Convert unknown errors to WalletError\n this.props.onError(\n new WalletError(\n WalletErrorCode.UNKNOWN,\n error.message || 'An unexpected error occurred',\n { originalError: error }\n )\n );\n }\n }\n\n componentDidUpdate(\n prevProps: WalletErrorBoundaryProps,\n prevState: WalletErrorBoundaryState\n ) {\n if (prevState.hasError && this.state.hasError && prevProps.children !== this.props.children) {\n // reset error state when children change after an error\n // eslint-disable-next-line react/no-did-update-set-state\n this.setState({ hasError: false });\n }\n }\n\n render() {\n if (this.state.hasError) {\n return null;\n }\n return this.props.children;\n }\n}\n\nexport default WalletErrorBoundary;\n"]}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DepositRecoveryService.js","sourceRoot":"","sources":["../../../src/services/bootstrap/DepositRecoveryService.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAI5C,+CAA+C;AAC/C,oBAAoB;AACpB,+CAA+C;AAE/C;;GAEG;AACH,MAAM,UAAU,0BAA0B;IACxC,IAAM,OAAO,GAAG,cAAc,CAAC,kBAAkB,EAAE,CAAC;IAEpD,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,EAAE,cAAc,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IAClD,CAAC;IAED,6CAA6C;IAC7C,IAAM,iBAAiB,GAA0B;QAC/C,WAAW;QACX,kBAAkB;QAClB,kBAAkB;QAClB,kBAAkB;KACnB,CAAC;IAEF,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QAC/C,MAAM,CAAC,KAAK,CAAC,2DAA2D,EAAE;YACxE,KAAK,EAAE,OAAO,CAAC,KAAK;SACrB,CAAC,CAAC;QACH,OAAO,EAAE,cAAc,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IAClD,CAAC;IAED,IAAM,OAAO,GAAuB;QAClC,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,EAAE,EAAE,OAAO,CAAC,EAAE;QACd,aAAa,EAAE,OAAO,CAAC,aAAa;KACrC,CAAC;IAEF,MAAM,CAAC,KAAK,CAAC,oDAAoD,EAAE;QACjE,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,KAAK,EAAE,OAAO,CAAC,KAAK;KACrB,CAAC,CAAC;IAEH,OAAO,EAAE,cAAc,EAAE,IAAI,EAAE,OAAO,SAAA,EAAE,CAAC;AAC3C,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,kBAAkB,CAAC,aAAqB;IACtD,IAAM,OAAO,GAAG,cAAc,CAAC,kBAAkB,EAAE,CAAC;IACpD,IAAI,CAAC,OAAO;QAAE,OAAO,KAAK,CAAC;IAE3B,OAAO,OAAO,CAAC,MAAM,CAAC,WAAW,EAAE,KAAK,aAAa,CAAC,WAAW,EAAE,CAAC;AACtE,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,iBAAiB;IAC/B,OAAO,cAAc,CAAC,kBAAkB,EAAE,CAAC;AAC7C,CAAC;AAED,+CAA+C;AAC/C,wBAAwB;AACxB,+CAA+C;AAE/C;;GAEG;AACH,MAAM,UAAU,eAAe,CAAC,KAA0B;IACxD,QAAQ,KAAK,EAAE,CAAC;QACd,KAAK,WAAW;YACd,OAAO,YAAY,CAAC;QACtB,KAAK,kBAAkB;YACrB,OAAO,QAAQ,CAAC;QAClB,KAAK,kBAAkB;YACrB,OAAO,OAAO,CAAC;QACjB,KAAK,kBAAkB;YACrB,OAAO,QAAQ,CAAC;QAClB,KAAK,kBAAkB;YACrB,OAAO,UAAU,CAAC;QACpB,KAAK,QAAQ;YACX,OAAO,QAAQ,CAAC;QAClB;YACE,OAAO,SAAS,CAAC;IACrB,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,uBAAuB,CAAC,OAA2B;IAQjE,QAAQ,OAAO,CAAC,KAAK,EAAE,CAAC;QACtB,KAAK,WAAW;YACd,6CAA6C;YAC7C,OAAO,eAAe,CAAC;QAEzB,KAAK,kBAAkB;YACrB,4DAA4D;YAC5D,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC;gBAC1B,OAAO,cAAc,CAAC;YACxB,CAAC;YACD,OAAO,kBAAkB,CAAC;QAE5B,KAAK,kBAAkB;YACrB,4CAA4C;YAC5C,OAAO,cAAc,CAAC;QAExB,KAAK,kBAAkB;YACrB,gDAAgD;YAChD,OAAO,aAAa,CAAC;QAEvB;YACE,OAAO,MAAM,CAAC;IAClB,CAAC;AACH,CAAC;AAED,+CAA+C;AAC/C,kBAAkB;AAClB,+CAA+C;AAE/C;;GAEG;AACH,MAAM,UAAU,mBAAmB;IACjC,cAAc,CAAC,mBAAmB,EAAE,CAAC;IACrC,MAAM,CAAC,KAAK,CAAC,kDAAkD,CAAC,CAAC;AACnE,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAC,aAAqB;IACpD,cAAc,CAAC,gBAAgB,CAAC,aAAa,CAAC,CAAC;IAC/C,MAAM,CAAC,KAAK,CAAC,sDAAsD,CAAC,CAAC;AACvE,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,mBAAmB,CAAC,aAAqB;IACvD,mBAAmB,EAAE,CAAC;IACtB,gBAAgB,CAAC,aAAa,CAAC,CAAC;IAChC,MAAM,CAAC,KAAK,CAAC,mDAAmD,CAAC,CAAC;AACpE,CAAC;AAED,+CAA+C;AAC/C,qBAAqB;AACrB,+CAA+C;AAE/C;;GAEG;AACH,MAAM,UAAU,0BAA0B,CACxC,OAA2B,EAC3B,aAAqB;IAErB,qBAAqB;IACrB,IAAI,OAAO,CAAC,MAAM,CAAC,WAAW,EAAE,KAAK,aAAa,CAAC,WAAW,EAAE,EAAE,CAAC;QACjE,OAAO;YACL,KAAK,EAAE,KAAK;YACZ,MAAM,EAAE,uCAAuC;SAChD,CAAC;IACJ,CAAC;IAED,yCAAyC;IACzC,IAAI,OAAO,CAAC,KAAK,KAAK,kBAAkB,IAAI,CAAC,OAAO,CAAC,EAAE,EAAE,CAAC;QACxD,OAAO;YACL,KAAK,EAAE,KAAK;YACZ,MAAM,EAAE,iCAAiC;SAC1C,CAAC;IACJ,CAAC;IAED,IAAI,OAAO,CAAC,KAAK,KAAK,kBAAkB,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,CAAC;QACnE,OAAO;YACL,KAAK,EAAE,KAAK;YACZ,MAAM,EAAE,kCAAkC;SAC3C,CAAC;IACJ,CAAC;IAED,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;AACzB,CAAC;AAED,+CAA+C;AAC/C,yBAAyB;AACzB,+CAA+C;AAE/C;;GAEG;AACH,MAAM,UAAU,sBAAsB,CAAC,aAAqB;IAMpD,IAAA,KAA8B,0BAA0B,EAAE,EAAxD,cAAc,oBAAA,EAAE,OAAO,aAAiC,CAAC;IAEjE,IAAI,CAAC,cAAc,IAAI,CAAC,OAAO,EAAE,CAAC;QAChC,OAAO;YACL,aAAa,EAAE,KAAK;YACpB,OAAO,EAAE,IAAI;YACb,MAAM,EAAE,MAAM;SACf,CAAC;IACJ,CAAC;IAED,IAAM,UAAU,GAAG,0BAA0B,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC;IACtE,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;QACtB,OAAO;YACL,aAAa,EAAE,KAAK;YACpB,OAAO,EAAE,IAAI;YACb,MAAM,EAAE,MAAM;YACd,KAAK,EAAE,UAAU,CAAC,MAAM;SACzB,CAAC;IACJ,CAAC;IAED,IAAM,MAAM,GAAG,uBAAuB,CAAC,OAAO,CAAC,CAAC;IAEhD,OAAO;QACL,aAAa,EAAE,IAAI;QACnB,OAAO,SAAA;QACP,MAAM,QAAA;KACP,CAAC;AACJ,CAAC;AAED,+CAA+C;AAC/C,mBAAmB;AACnB,+CAA+C;AAE/C;;;GAGG;AACH,MAAM,UAAU,qBAAqB;;IACnC,IAAM,MAAM,GAAG,cAAc,CAAC,yBAAyB,EAAE,CAAC;IAE1D,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxB,OAAO;IACT,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,2DAA2D,EAAE;QACxE,KAAK,EAAE,MAAM,CAAC,MAAM;KACrB,CAAC,CAAC;IAEH,2BAA2B;IAC3B,IAAM,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC,UAAC,MAAM,EAAE,OAAO;;QAC/C,OAAO,OAAO,CAAC,SAAS,GAAG,CAAC,MAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,SAAS,mCAAI,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC;IACzE,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;IAEd,IAAI,UAAU,IAAI,UAAU,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;QAClD,iCAAiC;QACjC,IAAM,KAAK,GAAwB,UAAU,CAAC,aAAa;YACzD,CAAC,CAAC,kBAAkB;YACpB,CAAC,CAAC,kBAAkB,CAAC;QAEvB,cAAc,CAAC,mBAAmB,CAAC;YACjC,SAAS,EAAE,UAAU,CAAC,SAAS;YAC/B,MAAM,EAAE,EAAE,EAAE,0CAA0C;YACtD,KAAK,EAAE,MAAA,UAAU,CAAC,WAAW,mCAAI,EAAE;YACnC,MAAM,EAAE,UAAU,CAAC,MAAM;YACzB,KAAK,OAAA;YACL,EAAE,EAAE,UAAU,CAAC,QAAQ;YACvB,aAAa,EAAE,UAAU,CAAC,aAAa;YACvC,MAAM,EAAE,IAAI;YACZ,WAAW,EAAE,IAAI;YACjB,MAAM,EAAE,IAAI;YACZ,SAAS,EAAE,UAAU,CAAC,SAAS;SAChC,CAAC,CAAC;QAEH,MAAM,CAAC,KAAK,CAAC,kDAAkD,EAAE;YAC/D,SAAS,EAAE,UAAU,CAAC,SAAS;SAChC,CAAC,CAAC;IACL,CAAC;IAED,uBAAuB;IACvB,cAAc,CAAC,0BAA0B,EAAE,CAAC;AAC9C,CAAC","sourcesContent":["/**\n * Deposit Recovery Service\n *\n * Handles detection and recovery of pending deposits.\n * Extracted from WalletConnectionProvider to enable:\n * - Testable pure functions\n * - Clear separation from React lifecycle\n * - Reusable deposit recovery logic\n */\n\nimport { logger } from '../../utils/logger';\nimport { StorageService } from '../storage';\nimport type { PendingDepositState, PendingDepositStage } from '../storage';\nimport type { RecoverableDeposit, DepositRecoveryResult } from './types';\n\n// ============================================\n// DEPOSIT DETECTION\n// ============================================\n\n/**\n * Check if there's a recoverable pending deposit.\n */\nexport function checkForRecoverableDeposit(): DepositRecoveryResult {\n const pending = StorageService.readPendingDeposit();\n\n if (!pending) {\n return { hasRecoverable: false, deposit: null };\n }\n\n // Check if deposit is in a recoverable state\n const recoverableStages: PendingDepositStage[] = [\n 'initiated',\n 'bridge_submitted',\n 'bridge_confirmed',\n 'solana_submitted',\n ];\n\n if (!recoverableStages.includes(pending.stage)) {\n logger.debug('[DepositRecoveryService] Deposit not in recoverable state', {\n stage: pending.stage,\n });\n return { hasRecoverable: false, deposit: null };\n }\n\n const deposit: RecoverableDeposit = {\n depositId: pending.depositId,\n wallet: pending.wallet,\n chain: pending.chain,\n amount: pending.amount,\n stage: pending.stage,\n tx: pending.tx,\n attestationId: pending.attestationId,\n };\n\n logger.debug('[DepositRecoveryService] Found recoverable deposit', {\n depositId: deposit.depositId,\n stage: deposit.stage,\n });\n\n return { hasRecoverable: true, deposit };\n}\n\n/**\n * Check if a pending deposit belongs to the given wallet address.\n */\nexport function isDepositForWallet(walletAddress: string): boolean {\n const pending = StorageService.readPendingDeposit();\n if (!pending) return false;\n\n return pending.wallet.toLowerCase() === walletAddress.toLowerCase();\n}\n\n/**\n * Get the current pending deposit if any.\n */\nexport function getPendingDeposit(): PendingDepositState | null {\n return StorageService.readPendingDeposit();\n}\n\n// ============================================\n// DEPOSIT STATE MAPPING\n// ============================================\n\n/**\n * Map storage stage to UI phase for display.\n */\nexport function mapStageToPhase(stage: PendingDepositStage): string {\n switch (stage) {\n case 'initiated':\n return 'initiating';\n case 'bridge_submitted':\n return 'bridge';\n case 'bridge_confirmed':\n return 'claim';\n case 'solana_submitted':\n return 'solana';\n case 'solana_confirmed':\n return 'complete';\n case 'failed':\n return 'failed';\n default:\n return 'unknown';\n }\n}\n\n/**\n * Determine recovery action based on deposit state.\n */\nexport function determineRecoveryAction(deposit: RecoverableDeposit):\n | 'resume_bridge'\n | 'wait_attestation'\n | 'resume_claim'\n | 'wait_solana'\n | 'complete'\n | 'none' {\n\n switch (deposit.stage) {\n case 'initiated':\n // Bridge not submitted yet - need to restart\n return 'resume_bridge';\n\n case 'bridge_submitted':\n // Bridge TX submitted, waiting for confirmation/attestation\n if (deposit.attestationId) {\n return 'resume_claim';\n }\n return 'wait_attestation';\n\n case 'bridge_confirmed':\n // Bridge confirmed, need to claim on Solana\n return 'resume_claim';\n\n case 'solana_submitted':\n // Solana TX submitted, waiting for confirmation\n return 'wait_solana';\n\n default:\n return 'none';\n }\n}\n\n// ============================================\n// DEPOSIT CLEANUP\n// ============================================\n\n/**\n * Clear pending deposit from storage.\n */\nexport function clearPendingDeposit(): void {\n StorageService.clearPendingDeposit();\n logger.debug('[DepositRecoveryService] Pending deposit cleared');\n}\n\n/**\n * Clear last deposit record for a wallet.\n */\nexport function clearLastDeposit(walletAddress: string): void {\n StorageService.clearLastDeposit(walletAddress);\n logger.debug('[DepositRecoveryService] Last deposit record cleared');\n}\n\n/**\n * Clear all deposit data for a wallet.\n */\nexport function clearAllDepositData(walletAddress: string): void {\n clearPendingDeposit();\n clearLastDeposit(walletAddress);\n logger.debug('[DepositRecoveryService] All deposit data cleared');\n}\n\n// ============================================\n// DEPOSIT VALIDATION\n// ============================================\n\n/**\n * Validate that a pending deposit is still valid for recovery.\n */\nexport function validateDepositForRecovery(\n deposit: RecoverableDeposit,\n currentWallet: string\n): { valid: boolean; reason?: string } {\n // Check wallet match\n if (deposit.wallet.toLowerCase() !== currentWallet.toLowerCase()) {\n return {\n valid: false,\n reason: 'Deposit belongs to a different wallet',\n };\n }\n\n // Check for required data based on stage\n if (deposit.stage === 'bridge_submitted' && !deposit.tx) {\n return {\n valid: false,\n reason: 'Missing bridge transaction hash',\n };\n }\n\n if (deposit.stage === 'bridge_confirmed' && !deposit.attestationId) {\n return {\n valid: false,\n reason: 'Missing attestation ID for claim',\n };\n }\n\n return { valid: true };\n}\n\n// ============================================\n// RECOVERY ORCHESTRATION\n// ============================================\n\n/**\n * Prepare deposit for recovery by validating and returning recovery info.\n */\nexport function prepareDepositRecovery(currentWallet: string): {\n shouldRecover: boolean;\n deposit: RecoverableDeposit | null;\n action: ReturnType<typeof determineRecoveryAction>;\n error?: string;\n} {\n const { hasRecoverable, deposit } = checkForRecoverableDeposit();\n\n if (!hasRecoverable || !deposit) {\n return {\n shouldRecover: false,\n deposit: null,\n action: 'none',\n };\n }\n\n const validation = validateDepositForRecovery(deposit, currentWallet);\n if (!validation.valid) {\n return {\n shouldRecover: false,\n deposit: null,\n action: 'none',\n error: validation.reason,\n };\n }\n\n const action = determineRecoveryAction(deposit);\n\n return {\n shouldRecover: true,\n deposit,\n action,\n };\n}\n\n// ============================================\n// LEGACY MIGRATION\n// ============================================\n\n/**\n * Migrate legacy pending deposits to new format.\n * Call this once at startup to clean up old data.\n */\nexport function migrateLegacyDeposits(): void {\n const legacy = StorageService.readLegacyPendingDeposits();\n\n if (legacy.length === 0) {\n return;\n }\n\n logger.debug('[DepositRecoveryService] Found legacy deposits to migrate', {\n count: legacy.length,\n });\n\n // Take the most recent one\n const mostRecent = legacy.reduce((latest, current) => {\n return current.timestamp > (latest?.timestamp ?? 0) ? current : latest;\n }, legacy[0]);\n\n if (mostRecent && mostRecent.status === 'pending') {\n // Map legacy status to new stage\n const stage: PendingDepositStage = mostRecent.attestationId\n ? 'bridge_confirmed'\n : 'bridge_submitted';\n\n StorageService.writePendingDeposit({\n depositId: mostRecent.depositId,\n wallet: '', // Legacy format didn't always have wallet\n chain: mostRecent.sourceChain ?? '',\n amount: mostRecent.amount,\n stage,\n tx: mostRecent.bridgeTx,\n attestationId: mostRecent.attestationId,\n mintTx: null,\n explorerUrl: null,\n reason: null,\n updatedAt: mostRecent.timestamp,\n });\n\n logger.debug('[DepositRecoveryService] Migrated legacy deposit', {\n depositId: mostRecent.depositId,\n });\n }\n\n // Clear legacy storage\n StorageService.clearLegacyPendingDeposits();\n}\n"]}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DynamicSdkService.js","sourceRoot":"","sources":["../../../src/services/bootstrap/DynamicSdkService.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Dynamic SDK Service\n *\n * Handles loading and configuration of the Dynamic Labs SDK.\n * Extracted from LazyWalletProvider to enable:\n * - Testable pure functions\n * - Centralized proxy configuration\n * - Clear separation from React lifecycle\n */\n\nimport { logger } from '../../utils/logger';\nimport type { DynamicSdkConfig, DynamicSdkLoadResult, ProxyConfig } from './types';\n\n// ============================================\n// CONSTANTS\n// ============================================\n\nconst DEFAULT_PROXY_CONFIG: ProxyConfig = {\n proxyBase: '/api/dynamic',\n targetDomains: ['app.dynamicauth.com', 'logs.dynamicauth.com'],\n};\n\n// ============================================\n// PROXY PATCHING\n// ============================================\n\n/** Track if proxy has been applied */\nlet isProxyPatched = false;\n\n/**\n * Check if we're running on localhost (development).\n */\nexport function isLocalhost(): boolean {\n if (typeof window === 'undefined') return false;\n const hostname = window.location.hostname;\n return hostname === 'localhost' || hostname === '127.0.0.1';\n}\n\n/**\n * Patch fetch and XMLHttpRequest to proxy Dynamic Auth requests.\n * Only applies on localhost for development.\n *\n * This is idempotent - safe to call multiple times.\n */\nexport function patchFetchForProxy(config: ProxyConfig = DEFAULT_PROXY_CONFIG): boolean {\n if (typeof window === 'undefined') return false;\n if (!isLocalhost()) return false;\n if (isProxyPatched) return true;\n\n const { proxyBase, targetDomains } = config;\n\n // Helper to rewrite URL\n const rewriteUrl = (originalUrl: string): string | null => {\n if (!targetDomains.some((domain) => originalUrl.includes(domain))) {\n return null;\n }\n\n try {\n const urlObj = new URL(originalUrl);\n const path = urlObj.pathname;\n const search = urlObj.search;\n\n // Remove /api/ prefix if present, then prepend with proxy base\n const cleanPath = path.startsWith('/api/')\n ? path.slice(4)\n : path.startsWith('/')\n ? path.slice(1)\n : path;\n\n return `${proxyBase}/${cleanPath}${search}`;\n } catch (e) {\n logger.warn('[DynamicSdkService] Failed to rewrite URL', { originalUrl, error: e });\n return null;\n }\n };\n\n // Patch fetch\n const originalFetch = window.fetch;\n window.fetch = async (input: RequestInfo | URL, init?: RequestInit) => {\n let url: string;\n if (typeof input === 'string') {\n url = input;\n } else if (input instanceof URL) {\n url = input.href;\n } else {\n url = input.url;\n }\n\n const proxyUrl = rewriteUrl(url);\n if (proxyUrl) {\n logger.debug('[DynamicSdkService] Proxying fetch', { from: url, to: proxyUrl });\n return originalFetch(proxyUrl, init);\n }\n\n return originalFetch(input, init);\n };\n\n // Patch XMLHttpRequest\n const originalOpen = XMLHttpRequest.prototype.open;\n XMLHttpRequest.prototype.open = function (\n method: string,\n url: string | URL,\n ...args: any[]\n ) {\n const urlStr = url.toString();\n const proxyUrl = rewriteUrl(urlStr);\n\n if (proxyUrl) {\n logger.debug('[DynamicSdkService] Proxying XHR', { from: urlStr, to: proxyUrl });\n return originalOpen.call(\n this,\n method,\n proxyUrl,\n ...(args as [boolean, string | null | undefined, string | null | undefined])\n );\n }\n\n return originalOpen.call(\n this,\n method,\n urlStr,\n ...(args as [boolean, string | null | undefined, string | null | undefined])\n );\n };\n\n isProxyPatched = true;\n logger.debug('[DynamicSdkService] Proxy patching complete');\n return true;\n}\n\n// ============================================\n// SDK LOADING\n// ============================================\n\n/** Cache loaded SDK components */\nlet cachedSdkResult: DynamicSdkLoadResult | null = null;\nlet loadPromise: Promise<DynamicSdkLoadResult> | null = null;\n\n/**\n * Load Dynamic SDK dependencies.\n *\n * This is memoized - subsequent calls return the cached result.\n */\nexport async function loadDynamicSdk(): Promise<DynamicSdkLoadResult> {\n // Return cached if available\n if (cachedSdkResult) {\n return cachedSdkResult;\n }\n\n // Return in-flight promise if loading\n if (loadPromise) {\n return loadPromise;\n }\n\n loadPromise = (async () => {\n logger.debug('[DynamicSdkService] Loading SDK dependencies');\n\n try {\n const [\n { DynamicContextProvider, DynamicWidget },\n { SolanaWalletConnectors },\n { EthereumWalletConnectors },\n ] = await Promise.all([\n import('@dynamic-labs/sdk-react-core'),\n import('@dynamic-labs/solana'),\n import('@dynamic-labs/ethereum'),\n ]);\n\n const result: DynamicSdkLoadResult = {\n provider: DynamicContextProvider,\n widget: DynamicWidget,\n solanaConnector: SolanaWalletConnectors,\n evmConnector: EthereumWalletConnectors,\n };\n\n cachedSdkResult = result;\n logger.debug('[DynamicSdkService] SDK loaded successfully');\n return result;\n } catch (error) {\n loadPromise = null; // Allow retry on failure\n logger.error('[DynamicSdkService] Failed to load SDK', { error });\n throw error;\n }\n })();\n\n return loadPromise;\n}\n\n/**\n * Check if SDK is already loaded.\n */\nexport function isSdkLoaded(): boolean {\n return cachedSdkResult !== null;\n}\n\n/**\n * Get cached SDK result (or null if not loaded).\n */\nexport function getCachedSdk(): DynamicSdkLoadResult | null {\n return cachedSdkResult;\n}\n\n// ============================================\n// SDK CONFIGURATION\n// ============================================\n\n/**\n * Build Dynamic SDK settings object.\n */\nexport function buildSdkSettings(\n config: DynamicSdkConfig,\n evmNetworksFn?: (networks?: any[]) => any[]\n): Record<string, any> {\n return {\n initialAuthenticationMode: 'connect-only',\n environmentId: config.environmentId,\n silentAuthentication: true,\n silentAuth: true,\n theme: {\n mode: 'dark',\n },\n overrides: evmNetworksFn\n ? {\n evmNetworks: evmNetworksFn,\n }\n : undefined,\n events: {\n onAuthSuccess: (args: any) => {\n logger.debug('[DynamicSdkService] onAuthSuccess', args);\n },\n },\n };\n}\n\n/**\n * Build Solana network configuration for Dynamic SDK.\n */\nexport function buildSolanaNetworks(rpcUrl: string): any[] {\n\n return [\n {\n chainId: 101, // Solana mainnet\n networkId: 101,\n name: 'Solana',\n vanityName: 'Solana Mainnet',\n rpcUrls: [rpcUrl],\n privateCustomerRpcUrls: [],\n blockExplorerUrls: ['https://explorer.solana.com'],\n },\n ];\n}\n\n/**\n * Create wallet connectors array based on preferred network.\n */\nexport function buildWalletConnectors(\n sdk: DynamicSdkLoadResult,\n preferredNetwork: 'solana' | 'evm' | null,\n solanaNetworks: any[]\n): any[] {\n // Wrap Solana connector with network config\n const solanaConnector = (opts: any) =>\n sdk.solanaConnector({\n ...opts,\n solNetworks: solanaNetworks,\n });\n\n if (preferredNetwork === 'solana') {\n return [solanaConnector];\n }\n\n if (preferredNetwork === 'evm') {\n return [sdk.evmConnector];\n }\n\n // Both connectors\n return [solanaConnector, sdk.evmConnector];\n}\n\n// ============================================\n// WALLET STATE HELPERS\n// ============================================\n\n/**\n * Determine if a wallet is a Solana wallet based on chain.\n */\nexport function isSolanaWallet(wallet: { chain?: string } | null): boolean {\n if (!wallet?.chain) return false;\n return String(wallet.chain).toUpperCase().startsWith('SOL');\n}\n\n/**\n * Check if wallet address changed since last session.\n * Returns true if address changed (requires logout).\n */\nexport function hasWalletAddressChanged(currentAddress: string): boolean {\n if (typeof window === 'undefined') return false;\n\n const lastConnectedAddress = window.localStorage.getItem('n1_last_connected_address');\n if (!lastConnectedAddress) return false;\n\n return lastConnectedAddress.toLowerCase() !== currentAddress.toLowerCase();\n}\n\n/**\n * Store the current wallet address for session continuity check.\n */\nexport function storeWalletAddress(address: string): void {\n if (typeof window === 'undefined') return;\n window.localStorage.setItem('n1_last_connected_address', address);\n}\n"]}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SessionBootstrapService.js","sourceRoot":"","sources":["../../../src/services/bootstrap/SessionBootstrapService.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Session Bootstrap Service\n *\n * Handles session key generation, storage, and signing function creation.\n * Extracted from useNordUserInitialization to enable:\n * - Testable pure functions\n * - Clear separation from React lifecycle\n * - Reusable session logic\n */\n\nimport { logger } from '../../utils/logger';\n\n// ============================================\n// CONSTANTS\n// ============================================\n\nconst SESSION_KEYS_PREFIX = 'n1_session_keys_';\nconst SESSION_ID_PREFIX = 'n1_sessionId_';\n\n// ============================================\n// STORAGE HELPERS\n// ============================================\n\n/**\n * Generate storage key for session keys.\n */\nfunction getSessionKeysStorageKey(address: string): string {\n return `${SESSION_KEYS_PREFIX}${address}`;\n}\n\n/**\n * Generate storage key for session ID.\n */\nfunction getSessionIdStorageKey(address: string): string {\n return `${SESSION_ID_PREFIX}${address}`;\n}\n\n// ============================================\n// SESSION KEY TYPES\n// ============================================\n\nexport interface StoredSessionKeys {\n ed25519PrivateKey: Uint8Array;\n ed25519PublicKey: Uint8Array;\n walletPublicKey: string;\n chainName: string;\n}\n\nexport interface SessionKeyPair {\n privateKey: Uint8Array;\n publicKey: Uint8Array;\n}\n\n// ============================================\n// SESSION KEY MANAGEMENT\n// ============================================\n\n/**\n * Check if session keys exist for an address.\n */\nexport function hasStoredSessionKeys(address: string): boolean {\n if (typeof localStorage === 'undefined') return false;\n\n try {\n const key = getSessionKeysStorageKey(address);\n const stored = localStorage.getItem(key);\n if (!stored) return false;\n\n const parsed = JSON.parse(stored);\n return !!(parsed?.ed25519PublicKey && parsed?.ed25519PrivateKey);\n } catch {\n return false;\n }\n}\n\n/**\n * Read stored session keys for an address.\n */\nexport function readSessionKeys(address: string): StoredSessionKeys | null {\n if (typeof localStorage === 'undefined') return null;\n\n try {\n const key = getSessionKeysStorageKey(address);\n const stored = localStorage.getItem(key);\n if (!stored) return null;\n\n const parsed = JSON.parse(stored);\n if (!parsed?.ed25519PublicKey || !parsed?.ed25519PrivateKey) {\n return null;\n }\n\n // Convert arrays back to Uint8Array\n return {\n ed25519PrivateKey: new Uint8Array(Object.values(parsed.ed25519PrivateKey)),\n ed25519PublicKey: new Uint8Array(Object.values(parsed.ed25519PublicKey)),\n walletPublicKey: parsed.walletPublicKey,\n chainName: parsed.chainName,\n };\n } catch (error) {\n logger.warn('[SessionBootstrapService] Failed to read session keys', { error });\n return null;\n }\n}\n\n/**\n * Store session keys for an address.\n */\nexport function storeSessionKeys(params: {\n address: string;\n privateKey: Uint8Array;\n publicKey: Uint8Array;\n chainName?: string;\n}): void {\n if (typeof localStorage === 'undefined') return;\n\n try {\n const key = getSessionKeysStorageKey(params.address);\n const data = {\n ed25519PrivateKey: Array.from(params.privateKey),\n ed25519PublicKey: Array.from(params.publicKey),\n walletPublicKey: params.address,\n chainName: params.chainName ?? 'SOL',\n };\n localStorage.setItem(key, JSON.stringify(data));\n logger.debug('[SessionBootstrapService] Session keys stored');\n } catch (error) {\n logger.warn('[SessionBootstrapService] Failed to store session keys', { error });\n }\n}\n\n/**\n * Clear session keys for an address.\n */\nexport function clearSessionKeys(address: string): void {\n if (typeof localStorage === 'undefined') return;\n\n try {\n const key = getSessionKeysStorageKey(address);\n localStorage.removeItem(key);\n logger.debug('[SessionBootstrapService] Session keys cleared');\n } catch {\n // Ignore\n }\n}\n\n// ============================================\n// SESSION ID MANAGEMENT\n// ============================================\n\n/**\n * Read stored session ID for an address.\n */\nexport function readSessionId(address: string): bigint | null {\n if (typeof localStorage === 'undefined') return null;\n\n try {\n const key = getSessionIdStorageKey(address);\n const stored = localStorage.getItem(key);\n if (!stored) return null;\n\n return BigInt(stored);\n } catch {\n return null;\n }\n}\n\n/**\n * Store session ID for an address.\n */\nexport function storeSessionId(address: string, sessionId: bigint): void {\n if (typeof localStorage === 'undefined') return;\n\n try {\n const key = getSessionIdStorageKey(address);\n localStorage.setItem(key, sessionId.toString());\n } catch {\n // Ignore\n }\n}\n\n/**\n * Clear session ID for an address.\n */\nexport function clearSessionId(address: string): void {\n if (typeof localStorage === 'undefined') return;\n\n try {\n const key = getSessionIdStorageKey(address);\n localStorage.removeItem(key);\n } catch {\n // Ignore\n }\n}\n\n// ============================================\n// SESSION INITIALIZATION\n// ============================================\n\n/**\n * Get or create session key pair for an address.\n *\n * This function:\n * 1. Checks for existing stored keys\n * 2. If found, returns them\n * 3. If not found, generates new keys (caller must provide generator)\n */\nexport async function getOrCreateSessionKeyPair(\n address: string,\n generateKeyPair: () => Promise<SessionKeyPair>\n): Promise<SessionKeyPair> {\n // Check for existing keys\n const stored = readSessionKeys(address);\n if (stored) {\n logger.debug('[SessionBootstrapService] Using stored session keys');\n return {\n privateKey: stored.ed25519PrivateKey,\n publicKey: stored.ed25519PublicKey,\n };\n }\n\n // Generate new keys\n logger.debug('[SessionBootstrapService] Generating new session keys');\n const keyPair = await generateKeyPair();\n\n // Store for future use\n storeSessionKeys({\n address,\n privateKey: keyPair.privateKey,\n publicKey: keyPair.publicKey,\n });\n\n return keyPair;\n}\n\n// ============================================\n// SESSION STATE HELPERS\n// ============================================\n\n/**\n * Check if a session is fully initialized.\n */\nexport function isSessionReady(params: {\n sessionPubKey: Uint8Array | null;\n signMessageWithSessionKey: unknown;\n signMessageWithWalletKey: unknown;\n signTransactionWithWalletKey: unknown;\n}): boolean {\n return !!(\n params.sessionPubKey &&\n params.signMessageWithSessionKey &&\n params.signMessageWithWalletKey &&\n params.signTransactionWithWalletKey\n );\n}\n\n/**\n * Clear all session data for an address.\n */\nexport function clearAllSessionData(address: string): void {\n clearSessionKeys(address);\n clearSessionId(address);\n logger.debug('[SessionBootstrapService] All session data cleared');\n}\n\n// ============================================\n// VALIDATION\n// ============================================\n\n/**\n * Validate session keys are usable.\n */\nexport function validateSessionKeys(keys: StoredSessionKeys): boolean {\n // Check key lengths\n if (keys.ed25519PrivateKey.length !== 64) {\n logger.warn('[SessionBootstrapService] Invalid private key length');\n return false;\n }\n\n if (keys.ed25519PublicKey.length !== 32) {\n logger.warn('[SessionBootstrapService] Invalid public key length');\n return false;\n }\n\n return true;\n}\n"]}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TurnkeyBootstrapService.js","sourceRoot":"","sources":["../../../src/services/bootstrap/TurnkeyBootstrapService.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAG5C,+CAA+C;AAC/C,YAAY;AACZ,+CAA+C;AAE/C,MAAM,CAAC,IAAM,mBAAmB,GAAG,qBAAqB,CAAC;AACzD,MAAM,CAAC,IAAM,qBAAqB,GAAG,uBAAuB,CAAC;AAE7D,+CAA+C;AAC/C,oBAAoB;AACpB,+CAA+C;AAE/C;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAC,OAAuB;IACtD,IAAI,CAAC,OAAO;QAAE,OAAO,IAAI,CAAC;IAC1B,OAAO,OAAO,CAAC,WAAW,EAAE,CAAC;AAC/B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,mBAAmB,CAAC,KAAc;;IAChD,IAAM,QAAQ,GAAG,KAAoE,CAAC;IACtF,IAAM,IAAI,GAAG,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,IAAI,CAAC;IAC5B,IAAM,OAAO,GAAG,MAAA,MAAA,MAAA,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,OAAO,0CAAE,WAAW,kDAAI,mCAAI,EAAE,CAAC;IACzD,IAAM,IAAI,GAAG,MAAA,MAAA,MAAA,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,IAAI,0CAAE,WAAW,kDAAI,mCAAI,EAAE,CAAC;IAEnD,gEAAgE;IAChE,IACE,IAAI,KAAK,eAAe;QACxB,IAAI,KAAK,IAAI;QACb,IAAI,KAAK,eAAe;QACxB,IAAI,KAAK,gBAAgB,EACzB,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,kDAAkD;IAClD,IACE,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC;QAC9B,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC;QAC9B,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,EAC/B,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,sDAAsD;IACtD,IAAI,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,2BAA2B,CAAC,EAAE,CAAC;QACvF,OAAO,IAAI,CAAC;IACd,CAAC;IAED,qEAAqE;IACrE,IAAM,gBAAgB,GACpB,OAAO,CAAC,QAAQ,CAAC,2BAA2B,CAAC;QAC7C,OAAO,CAAC,QAAQ,CAAC,oCAAoC,CAAC,CAAC;IACzD,IAAI,gBAAgB,EAAE,CAAC;QACrB,IACE,IAAI,KAAK,IAAI;YACb,IAAI,KAAK,eAAe;YACxB,IAAI,KAAK,eAAe;YACxB,IAAI,KAAK,gBAAgB,EACzB,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED,+CAA+C;AAC/C,qBAAqB;AACrB,+CAA+C;AAE/C;;;GAGG;AACH,MAAM,UAAU,yBAAyB,CAAC,aAAqB;IAC7D,IAAM,mBAAmB,GAAG,cAAc,CAAC,wBAAwB,EAAE,CAAC;IACtE,IAAI,CAAC,mBAAmB;QAAE,OAAO,KAAK,CAAC;IAEvC,OAAO,mBAAmB,CAAC,WAAW,EAAE,KAAK,aAAa,CAAC,WAAW,EAAE,CAAC;AAC3E,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAC,aAAqB;IACpD,IAAM,OAAO,GAAG,cAAc,CAAC,kBAAkB,CAAC,aAAa,CAAC,CAAC;IACjE,OAAO,OAAO,KAAK,IAAI,IAAI,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC;AAClD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAC,aAAqB;IACpD,IAAM,aAAa,GAAG,cAAc,CAAC,kBAAkB,CAAC,aAAa,CAAC,CAAC;IACvE,IAAI,CAAC,CAAA,aAAa,aAAb,aAAa,uBAAb,aAAa,CAAE,UAAU,CAAA;QAAE,OAAO,IAAI,CAAC;IAE5C,OAAO;QACL,UAAU,EAAE,aAAa,CAAC,UAAU;QACpC,UAAU,EAAE,aAAa,CAAC,UAAU;QACpC,aAAa,EAAE,aAAa,CAAC,aAAa;QAC1C,OAAO,EAAE,aAAa,CAAC,OAAO;KAC/B,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,YAAY,CAC1B,aAAqB,EACrB,UAAkB,EAClB,OAIC;;IAED,cAAc,CAAC,mBAAmB,CAAC;QACjC,UAAU,YAAA;QACV,UAAU,EAAE,MAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,UAAU,mCAAI,aAAa;QAChD,aAAa,EAAE,MAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,aAAa,mCAAI,IAAI;QAC7C,OAAO,EAAE,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,OAAO;KAC1B,CAAC,CAAC;IACH,cAAc,CAAC,yBAAyB,CAAC,aAAa,CAAC,CAAC;AAC1D,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,0BAA0B,CACxC,aAAqB,EACrB,aAA+D;IAE/D,cAAc,CAAC,0BAA0B,CAAC,aAAa,EAAE,aAAa,CAAC,CAAC;AAC1E,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,YAAY,CAAC,aAA6B;IACxD,cAAc,CAAC,mBAAmB,CAAC,aAAa,CAAC,CAAC;IAClD,MAAM,CAAC,KAAK,CAAC,2CAA2C,CAAC,CAAC;AAC5D,CAAC;AAED,+CAA+C;AAC/C,iBAAiB;AACjB,+CAA+C;AAE/C;;GAEG;AACH,MAAM,UAAU,wBAAwB,CAAC,OAAc;;IACrD,OAAO,CACL,MAAA,OAAO,CAAC,IAAI,CACV,UAAC,CAAC;;QACA,OAAA,CAAC,CAAC,UAAU,KAAK,mBAAmB;aACpC,MAAA,CAAC,CAAC,QAAQ,0CAAE,IAAI,CAAC,UAAC,CAAM,IAAK,OAAA,CAAC,CAAC,aAAa,KAAK,qBAAqB,EAAzC,CAAyC,CAAC,CAAA,CAAA;KAAA,CAC1E,mCAAI,IAAI,CACV,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,oBAAoB,CAAC,MAAW;;IAC9C,IAAI,CAAC,CAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,QAAQ,CAAA;QAAE,OAAO,IAAI,CAAC;IACnC,OAAO,MAAA,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAC,CAAM,IAAK,OAAA,CAAC,CAAC,aAAa,KAAK,qBAAqB,EAAzC,CAAyC,CAAC,mCAAI,IAAI,CAAC;AAC7F,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,sBAAsB,CAAC,aAAqB;;IAC1D,IAAM,OAAO,GAAG,cAAc,CAAC,kBAAkB,CAAC,aAAa,CAAC,CAAC;IACjE,OAAO,CAAC,CAAC,CAAA,MAAA,MAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,aAAa,0CAAE,OAAO,0CAAE,OAAO,CAAA,CAAC;AACpD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,sBAAsB,CACpC,aAAqB;;IAErB,IAAM,OAAO,GAAG,cAAc,CAAC,kBAAkB,CAAC,aAAa,CAAC,CAAC;IACjE,OAAO,MAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,aAAa,mCAAI,IAAI,CAAC;AACxC,CAAC;AAED,+CAA+C;AAC/C,0BAA0B;AAC1B,+CAA+C;AAE/C;;;;;GAKG;AACH,MAAM,UAAU,wBAAwB,CAAC,MAKxC;IACS,IAAA,aAAa,GAAoD,MAAM,cAA1D,EAAE,aAAa,GAAqC,MAAM,cAA3C,EAAE,YAAY,GAAuB,MAAM,aAA7B,EAAE,gBAAgB,GAAK,MAAM,iBAAX,CAAY;IAEhF,oBAAoB;IACpB,IAAI,CAAC,gBAAgB,IAAI,aAAa,KAAK,KAAK,IAAI,CAAC,YAAY,IAAI,CAAC,aAAa,EAAE,CAAC;QACpF,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,kCAAkC;IAClC,IAAI,yBAAyB,CAAC,aAAa,CAAC,EAAE,CAAC;QAC7C,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,oCAAoC;IACpC,IAAI,gBAAgB,CAAC,aAAa,CAAC,EAAE,CAAC;QACpC,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,mBAAmB;IACnB,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,8BAA8B,CAAC,MAG9C;IACS,IAAA,aAAa,GAAsB,MAAM,cAA5B,EAAE,eAAe,GAAK,MAAM,gBAAX,CAAY;IAElD,oBAAoB;IACpB,IAAI,sBAAsB,CAAC,aAAa,CAAC,EAAE,CAAC;QAC1C,OAAO,YAAY,CAAC;IACtB,CAAC;IAED,yBAAyB;IACzB,IAAM,QAAQ,GAAG,wBAAwB,CAAC,eAAe,CAAC,CAAC;IAC3D,IAAI,QAAQ,IAAI,oBAAoB,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC/C,OAAO,cAAc,CAAC;IACxB,CAAC;IAED,iBAAiB;IACjB,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,+CAA+C;AAC/C,iBAAiB;AACjB,+CAA+C;AAE/C;;GAEG;AACH,MAAM,UAAU,sBAAsB,CAAC,KAAc;;IAKnD,IAAI,mBAAmB,CAAC,KAAK,CAAC,EAAE,CAAC;QAC/B,OAAO;YACL,IAAI,EAAE,eAAe;YACrB,OAAO,EAAE,2BAA2B;YACpC,WAAW,EAAE,IAAI;SAClB,CAAC;IACJ,CAAC;IAED,IAAM,QAAQ,GAAG,KAAqD,CAAC;IACvE,IAAM,OAAO,GAAG,MAAA,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,OAAO,mCAAI,MAAM,CAAC,KAAK,CAAC,CAAC;IAEnD,kBAAkB;IAClB,IACE,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAC;QACnC,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAC;QACnC,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAC,EACrC,CAAC;QACD,OAAO;YACL,IAAI,EAAE,iBAAiB;YACvB,OAAO,EAAE,mCAAmC;YAC5C,WAAW,EAAE,IAAI;SAClB,CAAC;IACJ,CAAC;IAED,iBAAiB;IACjB,IACE,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC;QAC3B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC;QACzB,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,EAC3B,CAAC;QACD,OAAO;YACL,IAAI,EAAE,SAAS;YACf,OAAO,EAAE,iCAAiC;YAC1C,WAAW,EAAE,IAAI;SAClB,CAAC;IACJ,CAAC;IAED,OAAO;QACL,IAAI,EAAE,SAAS;QACf,OAAO,EAAE,OAAO,IAAI,2BAA2B;QAC/C,WAAW,EAAE,KAAK;KACnB,CAAC;AACJ,CAAC","sourcesContent":["/**\n * Turnkey Bootstrap Service\n *\n * Handles Turnkey authentication and wallet provisioning.\n * Extracted from TurnkeyProvider to enable:\n * - Testable pure functions\n * - Clear separation from React lifecycle\n * - Reusable bootstrap logic\n */\n\nimport { logger } from '../../utils/logger';\nimport { StorageService } from '../storage';\nimport type { TurnkeyBootstrapConfig, TurnkeySessionData } from './types';\n\n// ============================================\n// CONSTANTS\n// ============================================\n\nexport const TURNKEY_WALLET_NAME = 'Nord Turnkey Wallet';\nexport const SOLANA_ADDRESS_FORMAT = 'ADDRESS_FORMAT_SOLANA';\n\n// ============================================\n// ADDRESS UTILITIES\n// ============================================\n\n/**\n * Normalize EVM address to lowercase for consistent comparison.\n */\nexport function normalizeAddress(address?: string | null): string | null {\n if (!address) return null;\n return address.toLowerCase();\n}\n\n/**\n * Check if error indicates user rejected the action.\n */\nexport function isUserRejectedError(error: unknown): boolean {\n const errorObj = error as { code?: string | number; message?: string; name?: string };\n const code = errorObj?.code;\n const message = errorObj?.message?.toLowerCase?.() ?? '';\n const name = errorObj?.name?.toLowerCase?.() ?? '';\n\n // Check for explicit user rejection codes first (most reliable)\n if (\n code === 'USER_REJECTED' ||\n code === 4001 ||\n code === 'USER_CANCELED' ||\n code === 'USER_CANCELLED'\n ) {\n return true;\n }\n\n // Check for explicit user rejection in error name\n if (\n name.includes('user_rejected') ||\n name.includes('user_canceled') ||\n name.includes('user_cancelled')\n ) {\n return true;\n }\n\n // Check message for explicit \"user rejected\" patterns\n if (message.includes('user rejected') || message.includes('user rejected the request')) {\n return true;\n }\n\n // \"wallet auth was cancelled\" needs BOTH message AND code to be safe\n const cancelledMessage =\n message.includes('wallet auth was cancelled') ||\n message.includes('wallet authorization was cancelled');\n if (cancelledMessage) {\n if (\n code === 4001 ||\n code === 'USER_REJECTED' ||\n code === 'USER_CANCELED' ||\n code === 'USER_CANCELLED'\n ) {\n return true;\n }\n return false;\n }\n\n return false;\n}\n\n// ============================================\n// SESSION MANAGEMENT\n// ============================================\n\n/**\n * Check if the stored session belongs to a different user.\n * Returns true if we need to clear the session for the new user.\n */\nexport function isSessionForDifferentUser(targetAddress: string): boolean {\n const storedClientAddress = StorageService.readTurnkeyClientAddress();\n if (!storedClientAddress) return false;\n\n return storedClientAddress.toLowerCase() !== targetAddress.toLowerCase();\n}\n\n/**\n * Check if we have a valid stored session for the target address.\n */\nexport function hasStoredSession(targetAddress: string): boolean {\n const session = StorageService.readTurnkeySession(targetAddress);\n return session !== null && !!session.sessionKey;\n}\n\n/**\n * Get stored session data for the target address.\n */\nexport function getStoredSession(targetAddress: string): TurnkeySessionData | null {\n const storedSession = StorageService.readTurnkeySession(targetAddress);\n if (!storedSession?.sessionKey) return null;\n\n return {\n sessionKey: storedSession.sessionKey,\n evmAddress: storedSession.evmAddress,\n solanaAccount: storedSession.solanaAccount,\n session: storedSession.session,\n };\n}\n\n/**\n * Store session data after successful login.\n */\nexport function storeSession(\n targetAddress: string,\n sessionKey: string,\n options?: {\n evmAddress?: string | null;\n solanaAccount?: TurnkeySessionData['solanaAccount'];\n session?: unknown;\n }\n): void {\n StorageService.writeTurnkeySession({\n sessionKey,\n evmAddress: options?.evmAddress ?? targetAddress,\n solanaAccount: options?.solanaAccount ?? null,\n session: options?.session,\n });\n StorageService.writeTurnkeyClientAddress(targetAddress);\n}\n\n/**\n * Update the Solana account for an existing session.\n */\nexport function updateSessionSolanaAccount(\n targetAddress: string,\n solanaAccount: NonNullable<TurnkeySessionData['solanaAccount']>\n): void {\n StorageService.updateTurnkeySolanaAccount(targetAddress, solanaAccount);\n}\n\n/**\n * Clear session for logout or user switch.\n */\nexport function clearSession(targetAddress?: string | null): void {\n StorageService.clearTurnkeySession(targetAddress);\n logger.debug('[TurnkeyBootstrapService] Session cleared');\n}\n\n// ============================================\n// WALLET HELPERS\n// ============================================\n\n/**\n * Find an existing Solana wallet in the list of Turnkey wallets.\n */\nexport function findExistingSolanaWallet(wallets: any[]): any | null {\n return (\n wallets.find(\n (w) =>\n w.walletName === TURNKEY_WALLET_NAME &&\n w.accounts?.some((a: any) => a.addressFormat === SOLANA_ADDRESS_FORMAT)\n ) ?? null\n );\n}\n\n/**\n * Extract Solana account from a wallet.\n */\nexport function extractSolanaAccount(wallet: any): any | null {\n if (!wallet?.accounts) return null;\n return wallet.accounts.find((a: any) => a.addressFormat === SOLANA_ADDRESS_FORMAT) ?? null;\n}\n\n/**\n * Check if stored session has Solana account cached.\n */\nexport function hasCachedSolanaAccount(targetAddress: string): boolean {\n const session = StorageService.readTurnkeySession(targetAddress);\n return !!session?.solanaAccount?.account?.address;\n}\n\n/**\n * Get cached Solana account from stored session.\n */\nexport function getCachedSolanaAccount(\n targetAddress: string\n): TurnkeySessionData['solanaAccount'] | null {\n const session = StorageService.readTurnkeySession(targetAddress);\n return session?.solanaAccount ?? null;\n}\n\n// ============================================\n// BOOTSTRAP ORCHESTRATION\n// ============================================\n\n/**\n * Determine next action for Turnkey bootstrap.\n *\n * This is a pure function that determines what should happen next\n * without actually performing the action.\n */\nexport function determineBootstrapAction(params: {\n targetAddress: string | null;\n walletNetwork: 'solana' | 'evm' | null;\n hasEvmWallet: boolean;\n hasTurnkeyConfig: boolean;\n}): 'skip' | 'reset' | 'hydrate' | 'login' {\n const { targetAddress, walletNetwork, hasEvmWallet, hasTurnkeyConfig } = params;\n\n // Pre-flight checks\n if (!hasTurnkeyConfig || walletNetwork !== 'evm' || !hasEvmWallet || !targetAddress) {\n return 'skip';\n }\n\n // Check if user switched accounts\n if (isSessionForDifferentUser(targetAddress)) {\n return 'reset';\n }\n\n // Check if we have a stored session\n if (hasStoredSession(targetAddress)) {\n return 'hydrate';\n }\n\n // Need fresh login\n return 'login';\n}\n\n/**\n * Determine next action for Solana wallet provisioning.\n */\nexport function determineSolanaProvisionAction(params: {\n targetAddress: string;\n existingWallets: any[];\n}): 'use_cached' | 'use_existing' | 'create' {\n const { targetAddress, existingWallets } = params;\n\n // Check cache first\n if (hasCachedSolanaAccount(targetAddress)) {\n return 'use_cached';\n }\n\n // Check existing wallets\n const existing = findExistingSolanaWallet(existingWallets);\n if (existing && extractSolanaAccount(existing)) {\n return 'use_existing';\n }\n\n // Need to create\n return 'create';\n}\n\n// ============================================\n// ERROR HANDLING\n// ============================================\n\n/**\n * Categorize a Turnkey error for appropriate handling.\n */\nexport function categorizeTurnkeyError(error: unknown): {\n type: 'user_rejected' | 'network' | 'session_expired' | 'unknown';\n message: string;\n recoverable: boolean;\n} {\n if (isUserRejectedError(error)) {\n return {\n type: 'user_rejected',\n message: 'User rejected the request',\n recoverable: true,\n };\n }\n\n const errorObj = error as { message?: string; code?: string | number };\n const message = errorObj?.message ?? String(error);\n\n // Session expired\n if (\n message.includes('session expired') ||\n message.includes('invalid session') ||\n message.includes('no active session')\n ) {\n return {\n type: 'session_expired',\n message: 'Session expired, please reconnect',\n recoverable: true,\n };\n }\n\n // Network errors\n if (\n message.includes('network') ||\n message.includes('fetch') ||\n message.includes('timeout')\n ) {\n return {\n type: 'network',\n message: 'Network error, please try again',\n recoverable: true,\n };\n }\n\n return {\n type: 'unknown',\n message: message || 'An unknown error occurred',\n recoverable: false,\n };\n}\n"]}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/services/bootstrap/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,sBAAsB;AACtB,OAAO,EACL,WAAW,EACX,kBAAkB,EAClB,cAAc,EACd,WAAW,EACX,YAAY,EACZ,gBAAgB,EAChB,mBAAmB,EACnB,qBAAqB,EACrB,cAAc,EACd,uBAAuB,EACvB,kBAAkB,GACnB,MAAM,qBAAqB,CAAC;AAE7B,4BAA4B;AAC5B,OAAO,EACL,mBAAmB,EACnB,qBAAqB,EACrB,gBAAgB,EAChB,mBAAmB,EACnB,yBAAyB,EACzB,gBAAgB,EAChB,gBAAgB,EAChB,YAAY,EACZ,0BAA0B,EAC1B,YAAY,EACZ,wBAAwB,EACxB,oBAAoB,EACpB,sBAAsB,EACtB,sBAAsB,EACtB,wBAAwB,EACxB,8BAA8B,EAC9B,sBAAsB,GACvB,MAAM,2BAA2B,CAAC;AAEnC,4BAA4B;AAC5B,OAAO,EACL,oBAAoB,EACpB,eAAe,EACf,gBAAgB,EAChB,gBAAgB,EAChB,aAAa,EACb,cAAc,EACd,cAAc,EACd,yBAAyB,EACzB,cAAc,EACd,mBAAmB,EACnB,mBAAmB,GACpB,MAAM,2BAA2B,CAAC;AAGnC,2BAA2B;AAC3B,OAAO,EACL,0BAA0B,EAC1B,kBAAkB,EAClB,iBAAiB,EACjB,eAAe,EACf,uBAAuB,EACvB,mBAAmB,EACnB,gBAAgB,EAChB,mBAAmB,EACnB,0BAA0B,EAC1B,sBAAsB,EACtB,qBAAqB,GACtB,MAAM,0BAA0B,CAAC","sourcesContent":["/**\n * Bootstrap Services\n *\n * Services for handling widget initialization and bootstrap logic.\n * These are pure functions extracted from React providers to enable\n * testability and clear separation of concerns.\n */\n\n// Dynamic SDK Service\nexport {\n isLocalhost,\n patchFetchForProxy,\n loadDynamicSdk,\n isSdkLoaded,\n getCachedSdk,\n buildSdkSettings,\n buildSolanaNetworks,\n buildWalletConnectors,\n isSolanaWallet,\n hasWalletAddressChanged,\n storeWalletAddress,\n} from './DynamicSdkService';\n\n// Turnkey Bootstrap Service\nexport {\n TURNKEY_WALLET_NAME,\n SOLANA_ADDRESS_FORMAT,\n normalizeAddress,\n isUserRejectedError,\n isSessionForDifferentUser,\n hasStoredSession,\n getStoredSession,\n storeSession,\n updateSessionSolanaAccount,\n clearSession,\n findExistingSolanaWallet,\n extractSolanaAccount,\n hasCachedSolanaAccount,\n getCachedSolanaAccount,\n determineBootstrapAction,\n determineSolanaProvisionAction,\n categorizeTurnkeyError,\n} from './TurnkeyBootstrapService';\n\n// Session Bootstrap Service\nexport {\n hasStoredSessionKeys,\n readSessionKeys,\n storeSessionKeys,\n clearSessionKeys,\n readSessionId,\n storeSessionId,\n clearSessionId,\n getOrCreateSessionKeyPair,\n isSessionReady,\n clearAllSessionData,\n validateSessionKeys,\n} from './SessionBootstrapService';\nexport type { StoredSessionKeys, SessionKeyPair } from './SessionBootstrapService';\n\n// Deposit Recovery Service\nexport {\n checkForRecoverableDeposit,\n isDepositForWallet,\n getPendingDeposit,\n mapStageToPhase,\n determineRecoveryAction,\n clearPendingDeposit,\n clearLastDeposit,\n clearAllDepositData,\n validateDepositForRecovery,\n prepareDepositRecovery,\n migrateLegacyDeposits,\n} from './DepositRecoveryService';\n\n// Types\nexport type {\n DynamicSdkConfig,\n DynamicSdkLoadResult,\n ProxyConfig,\n TurnkeyBootstrapConfig,\n TurnkeySessionData,\n TurnkeyBootstrapResult,\n SessionInitParams,\n SessionInitResult,\n RecoverableDeposit,\n DepositRecoveryResult,\n BootstrapState,\n BootstrapError,\n} from './types';\n"]}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/services/bootstrap/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG","sourcesContent":["/**\n * Bootstrap Service Types\n *\n * Types used by bootstrap services for initialization logic.\n */\n\n// ============================================\n// DYNAMIC SDK TYPES\n// ============================================\n\n/** Configuration for Dynamic SDK loading */\nexport interface DynamicSdkConfig {\n environmentId: string;\n preferredNetwork?: 'solana' | 'evm' | null;\n solanaRpcUrl?: string;\n}\n\n/** Result of Dynamic SDK loading */\nexport interface DynamicSdkLoadResult {\n provider: any;\n widget: any;\n solanaConnector: any;\n evmConnector: any;\n}\n\n/** Proxy configuration for localhost development */\nexport interface ProxyConfig {\n proxyBase: string;\n targetDomains: string[];\n}\n\n// ============================================\n// TURNKEY TYPES\n// ============================================\n\n/** Configuration for Turnkey bootstrap */\nexport interface TurnkeyBootstrapConfig {\n organizationId: string;\n authProxyConfigId: string;\n authProxyUrl: string;\n apiBaseUrl: string;\n sessionExpirationSeconds?: number;\n}\n\n/** Turnkey session data */\nexport interface TurnkeySessionData {\n sessionKey: string;\n evmAddress?: string | null;\n solanaAccount?: {\n walletId: string;\n account: {\n address: string;\n addressFormat?: string;\n };\n } | null;\n /** Full Turnkey session payload (userId, organizationId, expiry, etc.) */\n session?: unknown;\n}\n\n/** Result of Turnkey bootstrap */\nexport interface TurnkeyBootstrapResult {\n session: TurnkeySessionData;\n solanaAddress: string;\n walletId: string;\n}\n\n// ============================================\n// SESSION TYPES\n// ============================================\n\n/** Session initialization parameters */\nexport interface SessionInitParams {\n evmAddress: string;\n solanaAddress: string;\n sessionMode: 'Nord' | 'NTS';\n}\n\n/** Session initialization result */\nexport interface SessionInitResult {\n sessionPubKey: Uint8Array;\n walletPubKey: Uint8Array;\n nordUser: any;\n}\n\n// ============================================\n// DEPOSIT RECOVERY TYPES\n// ============================================\n\n/** Pending deposit to recover */\nexport interface RecoverableDeposit {\n depositId: string;\n wallet: string;\n chain: string;\n amount: string;\n stage: string;\n tx?: string | null;\n attestationId?: string | null;\n}\n\n/** Result of deposit recovery check */\nexport interface DepositRecoveryResult {\n hasRecoverable: boolean;\n deposit: RecoverableDeposit | null;\n}\n\n// ============================================\n// BOOTSTRAP ORCHESTRATION\n// ============================================\n\n/** Overall bootstrap state */\nexport interface BootstrapState {\n dynamicSdk: 'idle' | 'loading' | 'ready' | 'error';\n turnkey: 'idle' | 'authenticating' | 'creating' | 'ready' | 'error';\n session: 'idle' | 'hydrating' | 'ready' | 'error';\n depositRecovery: 'idle' | 'checking' | 'recovering' | 'ready';\n}\n\n/** Bootstrap error info */\nexport interface BootstrapError {\n phase: keyof BootstrapState;\n message: string;\n code?: string | number;\n recoverable: boolean;\n}\n"]}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"StorageService.js","sourceRoot":"","sources":["../../../src/services/storage/StorageService.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Storage Service\n *\n * Unified abstraction for localStorage operations.\n * Handles browser/server environments, provides typed getters/setters,\n * and centralizes all storage logic.\n */\n\nimport { logger } from '../../utils/logger';\nimport {\n ACTIVE_PENDING_DEPOSIT_KEY,\n TURNKEY_SESSION_KEY,\n TURNKEY_CLIENT_WALLET_KEY,\n PENDING_DEPOSITS_META_KEY,\n getLastDepositKey,\n} from './keys';\nimport type {\n PendingDepositState,\n StoredPendingDeposit,\n StoredDepositRecord,\n StoredTurnkeySession,\n LegacyPendingDeposit,\n PendingDepositStage,\n} from './types';\nimport { DEPOSIT_STAGE_ORDER, getStageRank } from './types';\n\n// ============================================\n// STORAGE BACKEND\n// ============================================\n\ntype StorageLike = Pick<Storage, 'getItem' | 'setItem' | 'removeItem'>;\n\n/** In-memory fallback for Node/test environments */\nconst memoryStorage: StorageLike = (() => {\n const map = new Map<string, string>();\n return {\n getItem: (k: string) => (map.has(k) ? (map.get(k) as string) : null),\n setItem: (k: string, v: string) => {\n map.set(k, v);\n },\n removeItem: (k: string) => {\n map.delete(k);\n },\n };\n})();\n\n/** Get the appropriate storage backend */\nconst getStorage = (): StorageLike => {\n if (typeof globalThis !== 'undefined' && typeof (globalThis as any).localStorage !== 'undefined') {\n const ls = (globalThis as any).localStorage as Storage;\n if (ls && typeof ls.getItem === 'function') {\n return ls;\n }\n }\n return memoryStorage;\n};\n\n// ============================================\n// DEPOSIT TTL CONSTANTS\n// ============================================\n\nconst MAX_DEPOSIT_TTL_MS = 48 * 60 * 60 * 1000; // 48 hours\nconst FAILED_DEPOSIT_TTL_MS = 30 * 60 * 1000; // 30 minutes\n\n// ============================================\n// STORAGE SERVICE\n// ============================================\n\nexport const StorageService = {\n // ============================================\n // PENDING DEPOSIT OPERATIONS\n // ============================================\n\n /**\n * Read the active pending deposit from storage.\n * Returns null if expired or invalid.\n */\n readPendingDeposit(now: number = Date.now()): PendingDepositState | null {\n const storage = getStorage();\n const raw = storage.getItem(ACTIVE_PENDING_DEPOSIT_KEY);\n if (!raw) return null;\n\n try {\n const parsed = JSON.parse(raw) as StoredPendingDeposit;\n if (!parsed || typeof parsed !== 'object') return null;\n if (!parsed.depositId || !parsed.wallet) return null;\n\n const stage: PendingDepositStage =\n parsed.stage && DEPOSIT_STAGE_ORDER.includes(parsed.stage) ? parsed.stage : 'initiated';\n\n const updatedAt = parsed.updatedAt ?? now;\n const ttl = stage === 'failed' ? FAILED_DEPOSIT_TTL_MS : MAX_DEPOSIT_TTL_MS;\n\n if (now - updatedAt > ttl) {\n this.clearPendingDeposit();\n return null;\n }\n\n return {\n depositId: parsed.depositId,\n wallet: parsed.wallet,\n chain: parsed.chain || '',\n amount: parsed.amount ?? '',\n stage,\n tx: parsed.tx ?? null,\n mintTx: parsed.mintTx ?? null,\n attestationId: parsed.attestationId ?? null,\n explorerUrl: parsed.explorerUrl ?? null,\n reason: parsed.reason ?? null,\n updatedAt,\n };\n } catch {\n this.clearPendingDeposit();\n return null;\n }\n },\n\n /**\n * Write a pending deposit to storage.\n */\n writePendingDeposit(state: PendingDepositState, now: number = Date.now()): PendingDepositState {\n const storage = getStorage();\n\n const stored: StoredPendingDeposit = {\n depositId: state.depositId,\n wallet: state.wallet,\n chain: state.chain,\n amount: state.amount,\n stage: state.stage,\n tx: state.tx ?? null,\n mintTx: state.mintTx ?? null,\n attestationId: state.attestationId ?? null,\n explorerUrl: state.explorerUrl ?? null,\n reason: state.reason ?? null,\n updatedAt: now,\n };\n\n try {\n storage.setItem(ACTIVE_PENDING_DEPOSIT_KEY, JSON.stringify(stored));\n } catch (e) {\n logger.warn('[StorageService] Failed to write pending deposit', { error: e });\n }\n\n return { ...state, updatedAt: now };\n },\n\n /**\n * Clear the active pending deposit.\n */\n clearPendingDeposit(): void {\n const storage = getStorage();\n storage.removeItem(ACTIVE_PENDING_DEPOSIT_KEY);\n },\n\n // ============================================\n // COMPLETED DEPOSIT OPERATIONS\n // ============================================\n\n /**\n * Save a completed deposit record for a wallet address.\n */\n saveLastDeposit(address: string | null | undefined, record: StoredDepositRecord): void {\n if (!address || !record || !record.transactionId) return;\n const storage = getStorage();\n\n try {\n storage.setItem(getLastDepositKey(address), JSON.stringify(record));\n } catch (e) {\n logger.warn('[StorageService] Failed to save last deposit', { error: e });\n }\n },\n\n /**\n * Read the last completed deposit for a wallet address.\n */\n readLastDeposit(address: string | null | undefined): StoredDepositRecord | null {\n if (!address) return null;\n const storage = getStorage();\n\n try {\n const raw = storage.getItem(getLastDepositKey(address));\n if (!raw) return null;\n return JSON.parse(raw) as StoredDepositRecord;\n } catch {\n storage.removeItem(getLastDepositKey(address));\n return null;\n }\n },\n\n /**\n * Clear the last deposit record for a wallet address.\n */\n clearLastDeposit(address: string | null | undefined): void {\n if (!address) return;\n const storage = getStorage();\n storage.removeItem(getLastDepositKey(address));\n },\n\n // ============================================\n // TURNKEY SESSION OPERATIONS\n // ============================================\n\n /**\n * Read the stored Turnkey session.\n */\n readTurnkeySession(address?: string | null): StoredTurnkeySession | null {\n const storage = getStorage();\n\n try {\n const raw = storage.getItem(TURNKEY_SESSION_KEY);\n if (!raw) return null;\n\n const parsed = JSON.parse(raw) as StoredTurnkeySession;\n if (!parsed || typeof parsed !== 'object' || !parsed.sessionKey) {\n return null;\n }\n\n // If address provided, validate it matches\n if (address) {\n const normalized = address.toLowerCase();\n const sessionAddress = parsed.evmAddress?.toLowerCase();\n if (sessionAddress && sessionAddress !== normalized) {\n return null;\n }\n }\n\n return parsed;\n } catch (e) {\n logger.warn('[StorageService] Failed to read Turnkey session', { error: e });\n return null;\n }\n },\n\n /**\n * Write a Turnkey session to storage.\n */\n writeTurnkeySession(session: StoredTurnkeySession): void {\n const storage = getStorage();\n\n try {\n storage.setItem(TURNKEY_SESSION_KEY, JSON.stringify(session));\n } catch (e) {\n logger.warn('[StorageService] Failed to write Turnkey session', { error: e });\n }\n },\n\n /**\n * Clear the stored Turnkey session and client address.\n * If address is provided, only clears if it matches the stored session.\n * If no address is provided, unconditionally clears both.\n */\n clearTurnkeySession(address?: string | null): void {\n const storage = getStorage();\n\n // If address provided, only clear if it matches\n if (address) {\n const session = this.readTurnkeySession();\n if (session && session.evmAddress?.toLowerCase() !== address.toLowerCase()) {\n return;\n }\n }\n\n storage.removeItem(TURNKEY_SESSION_KEY);\n storage.removeItem(TURNKEY_CLIENT_WALLET_KEY);\n },\n\n /**\n * Read the stored Turnkey client wallet address.\n */\n readTurnkeyClientAddress(): string | null {\n const storage = getStorage();\n try {\n const raw = storage.getItem(TURNKEY_CLIENT_WALLET_KEY);\n return raw ? raw.toLowerCase() : null;\n } catch {\n return null;\n }\n },\n\n /**\n * Write the Turnkey client wallet address.\n * Pass null to clear the stored address.\n */\n writeTurnkeyClientAddress(address: string | null): void {\n const storage = getStorage();\n\n try {\n if (address) {\n storage.setItem(TURNKEY_CLIENT_WALLET_KEY, address.toLowerCase());\n } else {\n storage.removeItem(TURNKEY_CLIENT_WALLET_KEY);\n }\n } catch {\n // ignore\n }\n },\n\n /**\n * Update the Solana account for an existing Turnkey session.\n */\n updateTurnkeySolanaAccount(\n address: string,\n solanaAccount: { walletId: string; account: { address: string; addressFormat?: string } }\n ): void {\n const session = this.readTurnkeySession(address);\n if (!session) return;\n\n session.solanaAccount = solanaAccount;\n this.writeTurnkeySession(session);\n },\n\n // ============================================\n // LEGACY PENDING DEPOSITS (for migration)\n // ============================================\n\n /**\n * Read legacy pending deposits array.\n */\n readLegacyPendingDeposits(): LegacyPendingDeposit[] {\n const storage = getStorage();\n\n try {\n const raw = storage.getItem(PENDING_DEPOSITS_META_KEY);\n if (!raw) return [];\n const parsed = JSON.parse(raw);\n return Array.isArray(parsed) ? parsed : [];\n } catch {\n return [];\n }\n },\n\n /**\n * Clear legacy pending deposits array.\n */\n clearLegacyPendingDeposits(): void {\n const storage = getStorage();\n storage.removeItem(PENDING_DEPOSITS_META_KEY);\n },\n\n // ============================================\n // UTILITIES\n // ============================================\n\n /**\n * Reconcile local and remote deposit stages.\n * Returns the more advanced stage (unless remote is 'failed').\n */\n reconcileStages(\n localStage: PendingDepositStage,\n remoteStage: PendingDepositStage | null | undefined\n ): PendingDepositStage {\n if (!remoteStage) return localStage;\n if (remoteStage === 'failed') return 'failed';\n const localRank = getStageRank(localStage);\n const remoteRank = getStageRank(remoteStage);\n return remoteRank > localRank ? remoteStage : localStage;\n },\n\n /**\n * Advance a pending deposit to a new stage.\n * Prevents stage regression (except to 'failed').\n */\n advancePendingDeposit(\n previous: PendingDepositState,\n updates: Partial<Omit<PendingDepositState, 'depositId' | 'wallet' | 'chain'>> & {\n stage: PendingDepositStage;\n },\n now: number = Date.now()\n ): PendingDepositState {\n const prevRank = getStageRank(previous.stage);\n const nextRank = getStageRank(updates.stage);\n\n if (updates.stage !== 'failed' && nextRank < prevRank) {\n throw new Error(`Cannot regress pending deposit stage from ${previous.stage} to ${updates.stage}`);\n }\n\n const merged: PendingDepositState = {\n ...previous,\n ...updates,\n tx: updates.tx ?? previous.tx ?? null,\n mintTx: updates.mintTx ?? previous.mintTx ?? null,\n attestationId: updates.attestationId ?? previous.attestationId ?? null,\n explorerUrl: updates.explorerUrl ?? previous.explorerUrl ?? null,\n reason: updates.reason ?? previous.reason ?? null,\n stage: updates.stage,\n updatedAt: now,\n };\n\n return this.writePendingDeposit(merged, now);\n },\n\n /**\n * Create a new pending deposit draft.\n */\n createPendingDepositDraft(params: {\n depositId: string;\n wallet: string;\n chain: string;\n amount: string;\n now?: number;\n }): PendingDepositState {\n const now = params.now ?? Date.now();\n return this.writePendingDeposit(\n {\n depositId: params.depositId,\n wallet: params.wallet,\n chain: params.chain,\n amount: params.amount,\n stage: 'initiated',\n tx: null,\n mintTx: null,\n attestationId: null,\n explorerUrl: null,\n reason: null,\n updatedAt: now,\n },\n now\n );\n },\n};\n"]}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/services/storage/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAElD,0CAA0C;AAC1C,OAAO,EACL,uBAAuB,EACvB,0BAA0B,EAC1B,0BAA0B,EAC1B,yBAAyB,EACzB,mBAAmB,EACnB,yBAAyB,EACzB,uBAAuB,EACvB,iBAAiB,EACjB,oBAAoB,GACrB,MAAM,QAAQ,CAAC;AAahB,OAAO,EAAE,mBAAmB,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC","sourcesContent":["/**\n * Storage Service Exports\n *\n * Public API for the storage abstraction layer.\n */\n\nexport { StorageService } from './StorageService';\n\n// Export keys for direct access if needed\nexport {\n LAST_DEPOSIT_KEY_PREFIX,\n PENDING_DEPOSIT_KEY_PREFIX,\n ACTIVE_PENDING_DEPOSIT_KEY,\n PENDING_DEPOSITS_META_KEY,\n TURNKEY_SESSION_KEY,\n TURNKEY_CLIENT_WALLET_KEY,\n SESSION_INITIALIZED_KEY,\n getLastDepositKey,\n getPendingDepositKey,\n} from './keys';\n\n// Export types\nexport type {\n PendingDepositStage,\n PendingDepositState,\n StoredPendingDeposit,\n StoredDepositRecord,\n LegacyPendingDeposit,\n StoredSolanaAccount,\n StoredTurnkeySession,\n} from './types';\n\nexport { DEPOSIT_STAGE_ORDER, getStageRank } from './types';\n"]}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"keys.js","sourceRoot":"","sources":["../../../src/services/storage/keys.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,+CAA+C;AAC/C,eAAe;AACf,+CAA+C;AAE/C,2DAA2D;AAC3D,MAAM,CAAC,IAAM,uBAAuB,GAAG,kBAAkB,CAAC;AAE1D,qDAAqD;AACrD,MAAM,CAAC,IAAM,0BAA0B,GAAG,qBAAqB,CAAC;AAEhE,6CAA6C;AAC7C,MAAM,CAAC,IAAM,0BAA0B,GAAG,2BAA2B,CAAC;AAEtE,oCAAoC;AACpC,MAAM,CAAC,IAAM,yBAAyB,GAAG,qBAAqB,CAAC;AAE/D,+CAA+C;AAC/C,uBAAuB;AACvB,+CAA+C;AAE/C,0CAA0C;AAC1C,MAAM,CAAC,IAAM,mBAAmB,GAAG,uBAAuB,CAAC;AAE3D,oCAAoC;AACpC,MAAM,CAAC,IAAM,yBAAyB,GAAG,0BAA0B,CAAC;AAEpE,+CAA+C;AAC/C,eAAe;AACf,+CAA+C;AAE/C,kCAAkC;AAClC,MAAM,CAAC,IAAM,uBAAuB,GAAG,wBAAwB,CAAC;AAEhE,+CAA+C;AAC/C,iBAAiB;AACjB,+CAA+C;AAE/C;;GAEG;AACH,MAAM,CAAC,IAAM,iBAAiB,GAAG,UAAC,OAAe;IAC/C,OAAA,UAAG,uBAAuB,SAAG,OAAO,CAAC,WAAW,EAAE,CAAE;AAApD,CAAoD,CAAC;AAEvD;;GAEG;AACH,MAAM,CAAC,IAAM,oBAAoB,GAAG,UAAC,MAAc;IACjD,OAAA,UAAG,0BAA0B,SAAG,MAAM,CAAC,WAAW,EAAE,CAAE;AAAtD,CAAsD,CAAC","sourcesContent":["/**\n * Storage Keys\n *\n * All localStorage key constants used throughout the wallet widget.\n * Centralizing keys here prevents typos and makes it easy to track storage usage.\n */\n\n// ============================================\n// DEPOSIT KEYS\n// ============================================\n\n/** Prefix for last completed deposit per wallet address */\nexport const LAST_DEPOSIT_KEY_PREFIX = 'n1_last_deposit_';\n\n/** Prefix for pending deposit per wallet (legacy) */\nexport const PENDING_DEPOSIT_KEY_PREFIX = 'n1_pending_deposit_';\n\n/** Single active pending deposit (global) */\nexport const ACTIVE_PENDING_DEPOSIT_KEY = 'n1_active_pending_deposit';\n\n/** Legacy pending deposits array */\nexport const PENDING_DEPOSITS_META_KEY = 'n1_pending_deposits';\n\n// ============================================\n// TURNKEY SESSION KEYS\n// ============================================\n\n/** Turnkey session storage (v1 format) */\nexport const TURNKEY_SESSION_KEY = 'n1_turnkey_session_v1';\n\n/** Turnkey client wallet address */\nexport const TURNKEY_CLIENT_WALLET_KEY = 'n1_turnkey_client_wallet';\n\n// ============================================\n// SESSION KEYS\n// ============================================\n\n/** Session initialization flag */\nexport const SESSION_INITIALIZED_KEY = 'n1_session_initialized';\n\n// ============================================\n// KEY GENERATORS\n// ============================================\n\n/**\n * Generate the storage key for a wallet's last completed deposit.\n */\nexport const getLastDepositKey = (address: string): string =>\n `${LAST_DEPOSIT_KEY_PREFIX}${address.toLowerCase()}`;\n\n/**\n * Generate the storage key for a wallet's pending deposit (legacy).\n */\nexport const getPendingDepositKey = (wallet: string): string =>\n `${PENDING_DEPOSIT_KEY_PREFIX}${wallet.toLowerCase()}`;\n"]}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/services/storage/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAuFH,+CAA+C;AAC/C,kBAAkB;AAClB,+CAA+C;AAE/C,oDAAoD;AACpD,MAAM,CAAC,IAAM,mBAAmB,GAA0B;IACxD,WAAW;IACX,kBAAkB;IAClB,kBAAkB;IAClB,kBAAkB;IAClB,kBAAkB;IAClB,QAAQ;CACT,CAAC;AAEF,0CAA0C;AAC1C,MAAM,CAAC,IAAM,YAAY,GAAG,UAAC,KAA0B;IACrD,IAAM,KAAK,GAAG,mBAAmB,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IACjD,OAAO,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;AAClC,CAAC,CAAC","sourcesContent":["/**\n * Storage Types\n *\n * TypeScript types for all data stored in localStorage.\n */\n\n// ============================================\n// DEPOSIT TYPES\n// ============================================\n\n/** Stages of a pending deposit */\nexport type PendingDepositStage =\n | 'initiated'\n | 'bridge_submitted'\n | 'bridge_confirmed'\n | 'solana_submitted'\n | 'solana_confirmed'\n | 'failed';\n\n/** Pending deposit state (full runtime representation) */\nexport interface PendingDepositState {\n depositId: string;\n wallet: string;\n chain: string;\n amount: string;\n stage: PendingDepositStage;\n tx?: string | null;\n mintTx?: string | null;\n attestationId?: string | null;\n explorerUrl?: string | null;\n reason?: string | null;\n updatedAt: number;\n}\n\n/** Stored format for pending deposit (persisted to localStorage) */\nexport interface StoredPendingDeposit {\n depositId: string;\n wallet: string;\n chain?: string;\n amount?: string;\n stage?: PendingDepositStage;\n tx?: string | null;\n mintTx?: string | null;\n attestationId?: string | null;\n explorerUrl?: string | null;\n reason?: string | null;\n updatedAt?: number;\n}\n\n/** Record of a completed deposit */\nexport interface StoredDepositRecord {\n transactionId: string;\n amount: string;\n timestamp: number;\n chain?: string;\n explorerUrl?: string;\n}\n\n/** Legacy pending deposit format (from pendingDepositStorage.ts) */\nexport interface LegacyPendingDeposit {\n depositId: string;\n bridgeTx: string;\n amount: string;\n timestamp: number;\n status: 'pending' | 'submitted' | 'completed' | 'failed';\n attestationId?: string | null;\n sourceChain?: string;\n destinationChain?: string;\n}\n\n// ============================================\n// TURNKEY SESSION TYPES\n// ============================================\n\n/** Solana account info stored with Turnkey session */\nexport interface StoredSolanaAccount {\n walletId: string;\n account: {\n address: string;\n addressFormat?: string;\n };\n}\n\n/** Turnkey session entry stored in localStorage */\nexport interface StoredTurnkeySession {\n sessionKey: string;\n evmAddress?: string | null;\n solanaAccount?: StoredSolanaAccount | null;\n session?: unknown;\n}\n\n// ============================================\n// STAGE UTILITIES\n// ============================================\n\n/** Ordered list of deposit stages for comparison */\nexport const DEPOSIT_STAGE_ORDER: PendingDepositStage[] = [\n 'initiated',\n 'bridge_submitted',\n 'bridge_confirmed',\n 'solana_submitted',\n 'solana_confirmed',\n 'failed',\n];\n\n/** Get numeric rank of a deposit stage */\nexport const getStageRank = (stage: PendingDepositStage): number => {\n const index = DEPOSIT_STAGE_ORDER.indexOf(stage);\n return index === -1 ? 0 : index;\n};\n"]}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/store/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,kBAAkB;AAClB,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAE3D,qCAAqC;AACrC,OAAO;AACH,sBAAsB;AACtB,qBAAqB,EACrB,uBAAuB,EACvB,aAAa,EACb,qBAAqB;AACrB,oBAAoB;AACpB,sBAAsB,EACtB,oBAAoB,EACpB,yBAAyB;AACzB,2BAA2B;AAC3B,qBAAqB,EACrB,kBAAkB,EAClB,kBAAkB,EAClB,kBAAkB,EAClB,eAAe,EACf,oBAAoB;AACpB,kBAAkB;AAClB,kBAAkB,EAClB,eAAe,EACf,kBAAkB,EAClB,kBAAkB;AAClB,oBAAoB;AACpB,kBAAkB;AAClB,mBAAmB;AACnB,oBAAoB;AACpB,sBAAsB;AACtB,cAAc,EACd,gBAAgB,GACnB,MAAM,aAAa,CAAC","sourcesContent":["/**\n * N1 Wallet Store - Public API\n *\n * This is the main entry point for the store module.\n */\n\n// Main store hook\nexport { useWalletStore, getWalletActions } from './store';\n\n// Selectors for common derived state\nexport {\n // Bootstrap selectors\n selectDynamicSdkReady,\n selectBootstrapComplete,\n selectIsReady,\n selectIsBootstrapping,\n // Session selectors\n selectHasActiveSession,\n selectHasSessionKeys,\n selectNeedsAuthentication,\n // Wallet/Network selectors\n selectHasSolanaWallet,\n selectHasEvmWallet,\n selectHasAnyWallet,\n selectIsSolanaMode,\n selectIsEvmMode,\n selectPrimaryAddress,\n // Modal selectors\n selectModalVisible,\n selectModalOpen,\n selectModalClosing,\n selectCanOpenModal,\n // Signing selectors\n selectSigningReady,\n // Config selectors\n selectTurnkeyEnabled,\n // Composite selectors\n selectCanTrade,\n selectCanDeposit,\n} from './selectors';\n\n// Types\nexport type {\n WalletStore,\n WalletStoreState,\n WalletStoreActions,\n SigningSlice,\n SigningActions,\n SessionSlice,\n SessionActions,\n SigningFunction,\n WalletSlice,\n WalletActions,\n WalletNetwork,\n UISlice,\n UIActions,\n ConfigSlice,\n ConfigActions,\n ColorOverride,\n} from './types';\n"]}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"selectors.js","sourceRoot":"","sources":["../../src/store/selectors.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Store Selectors\n *\n * Reusable selector functions for common state derivations.\n * These help reduce duplication and ensure consistent logic across the app.\n *\n * Usage:\n * ```ts\n * import { useWalletStore } from './store';\n * import { selectIsReady, selectHasActiveSession } from './selectors';\n *\n * function MyComponent() {\n * const isReady = useWalletStore(selectIsReady);\n * const hasSession = useWalletStore(selectHasActiveSession);\n * }\n * ```\n */\n\nimport type { WalletStore } from './types';\n\n// ============================================\n// BOOTSTRAP SELECTORS\n// ============================================\n\n/**\n * Check if the Dynamic SDK has fully loaded and is ready.\n */\nexport const selectDynamicSdkReady = (state: WalletStore): boolean =>\n state.session.dynamicSdkLoaded === true;\n\n/**\n * Check if bootstrap process has completed (all services ready).\n */\nexport const selectBootstrapComplete = (state: WalletStore): boolean =>\n state.bootstrap.bootstrapCompletedAt !== null;\n\n/**\n * Check if the widget is fully ready for user interaction.\n * Requires: Dynamic SDK loaded AND bootstrap complete.\n */\nexport const selectIsReady = (state: WalletStore): boolean =>\n selectDynamicSdkReady(state) && selectBootstrapComplete(state);\n\n/**\n * Check if bootstrap is currently in progress.\n */\nexport const selectIsBootstrapping = (state: WalletStore): boolean =>\n state.bootstrap.bootstrapStartedAt !== null &&\n state.bootstrap.bootstrapCompletedAt === null;\n\n// ============================================\n// SESSION SELECTORS\n// ============================================\n\n/**\n * Check if user has an active authenticated session.\n */\nexport const selectHasActiveSession = (state: WalletStore): boolean =>\n state.session.isConnected === true &&\n state.session.nordUser !== null &&\n state.session.nordUser.sessionId !== undefined;\n\n/**\n * Check if session keys are available for signing.\n */\nexport const selectHasSessionKeys = (state: WalletStore): boolean =>\n state.session.sessionPubKey !== null;\n\n/**\n * Check if user is connected but not yet authenticated (needs to complete auth flow).\n */\nexport const selectNeedsAuthentication = (state: WalletStore): boolean =>\n state.session.isConnected === true &&\n (state.session.nordUser === null || state.session.nordUser.sessionId === undefined);\n\n// ============================================\n// WALLET/NETWORK SELECTORS\n// ============================================\n\n/**\n * Check if a Solana wallet is connected.\n */\nexport const selectHasSolanaWallet = (state: WalletStore): boolean =>\n state.wallet.solanaWallet !== null && state.wallet.solanaAddress !== '';\n\n/**\n * Check if an EVM wallet is connected.\n */\nexport const selectHasEvmWallet = (state: WalletStore): boolean =>\n state.wallet.evmWallet !== null && state.wallet.evmAddress !== null;\n\n/**\n * Check if any wallet is connected (Solana or EVM).\n */\nexport const selectHasAnyWallet = (state: WalletStore): boolean =>\n selectHasSolanaWallet(state) || selectHasEvmWallet(state);\n\n/**\n * Check if wallet is in Solana mode.\n */\nexport const selectIsSolanaMode = (state: WalletStore): boolean =>\n state.wallet.network === 'solana';\n\n/**\n * Check if wallet is in EVM mode.\n */\nexport const selectIsEvmMode = (state: WalletStore): boolean =>\n state.wallet.network === 'evm';\n\n/**\n * Get the primary wallet address (Solana if available, otherwise EVM).\n */\nexport const selectPrimaryAddress = (state: WalletStore): string | null => {\n if (state.wallet.solanaAddress) return state.wallet.solanaAddress;\n if (state.wallet.evmAddress) return state.wallet.evmAddress;\n return null;\n};\n\n// ============================================\n// MODAL SELECTORS\n// ============================================\n\n/**\n * Check if modal is currently visible (any non-closed state).\n */\nexport const selectModalVisible = (state: WalletStore): boolean =>\n state.ui.modalState !== 'closed';\n\n/**\n * Check if modal is fully open and interactive.\n */\nexport const selectModalOpen = (state: WalletStore): boolean =>\n state.ui.modalState === 'open';\n\n/**\n * Check if modal is in closing animation.\n */\nexport const selectModalClosing = (state: WalletStore): boolean =>\n state.ui.modalState === 'closing';\n\n/**\n * Check if modal can be opened (not in cooldown).\n */\nexport const selectCanOpenModal = (state: WalletStore): boolean =>\n state.ui.modalState === 'closed' &&\n Date.now() >= state.ui.modalCooldownUntil;\n\n// ============================================\n// SIGNING SELECTORS\n// ============================================\n\n/**\n * Check if all signing functions are available.\n */\nexport const selectSigningReady = (state: WalletStore): boolean =>\n state.signing.signMessageWithSessionKey !== null &&\n state.signing.signMessageWithWalletKey !== null &&\n state.signing.signTransactionWithWalletKey !== null;\n\n// ============================================\n// CONFIG SELECTORS\n// ============================================\n\n/**\n * Check if Turnkey is enabled for this deployment.\n */\nexport const selectTurnkeyEnabled = (state: WalletStore): boolean =>\n state.config.turnkeyEnabled === true;\n\n// ============================================\n// COMPOSITE SELECTORS\n// ============================================\n\n/**\n * Check if user can perform trading operations.\n * Requires: Ready, has session, and signing functions available.\n */\nexport const selectCanTrade = (state: WalletStore): boolean =>\n selectIsReady(state) &&\n selectHasActiveSession(state) &&\n selectSigningReady(state);\n\n/**\n * Check if user can initiate a deposit flow.\n * Requires: Ready, has wallet, and modal is not in cooldown.\n */\nexport const selectCanDeposit = (state: WalletStore): boolean =>\n selectIsReady(state) &&\n selectHasAnyWallet(state) &&\n selectCanOpenModal(state);\n"]}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bootstrapSlice.js","sourceRoot":"","sources":["../../../src/store/slices/bootstrapSlice.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAyEH,+CAA+C;AAC/C,gBAAgB;AAChB,+CAA+C;AAE/C,MAAM,CAAC,IAAM,qBAAqB,GAAmB;IACnD,gBAAgB,EAAE,MAAM;IACxB,eAAe,EAAE,IAAI;IAErB,aAAa,EAAE,MAAM;IACrB,YAAY,EAAE,IAAI;IAElB,aAAa,EAAE,MAAM;IACrB,YAAY,EAAE,IAAI;IAElB,qBAAqB,EAAE,MAAM;IAE7B,kBAAkB,EAAE,IAAI;IACxB,oBAAoB,EAAE,IAAI;CAC3B,CAAC","sourcesContent":["/**\n * Bootstrap Slice\n *\n * Tracks the initialization status of all major subsystems.\n * Provides a single source of truth for \"is the widget ready?\"\n */\n\n// ============================================\n// STATUS TYPES\n// ============================================\n\n/** Dynamic SDK loading status */\nexport type DynamicSdkStatus = 'idle' | 'loading' | 'ready' | 'error';\n\n/** Turnkey authentication status */\nexport type TurnkeyStatus = 'idle' | 'authenticating' | 'creating' | 'ready' | 'error';\n\n/** Session hydration status */\nexport type SessionStatus = 'idle' | 'hydrating' | 'ready' | 'error';\n\n/** Deposit recovery status */\nexport type DepositRecoveryStatus = 'idle' | 'checking' | 'recovering' | 'ready';\n\n// ============================================\n// SLICE STATE\n// ============================================\n\nexport interface BootstrapSlice {\n /** Dynamic SDK loading status */\n dynamicSdkStatus: DynamicSdkStatus;\n /** Error message if Dynamic SDK failed to load */\n dynamicSdkError: string | null;\n\n /** Turnkey authentication status */\n turnkeyStatus: TurnkeyStatus;\n /** Error message if Turnkey auth failed */\n turnkeyError: string | null;\n\n /** Session hydration status */\n sessionStatus: SessionStatus;\n /** Error message if session hydration failed */\n sessionError: string | null;\n\n /** Deposit recovery status */\n depositRecoveryStatus: DepositRecoveryStatus;\n\n /** Timestamp when bootstrap started */\n bootstrapStartedAt: number | null;\n /** Timestamp when bootstrap completed */\n bootstrapCompletedAt: number | null;\n}\n\n// ============================================\n// SLICE ACTIONS\n// ============================================\n\nexport interface BootstrapActions {\n // Dynamic SDK\n setDynamicSdkStatus: (status: DynamicSdkStatus) => void;\n setDynamicSdkError: (error: string | null) => void;\n\n // Turnkey\n setTurnkeyStatus: (status: TurnkeyStatus) => void;\n setTurnkeyError: (error: string | null) => void;\n\n // Session\n setSessionStatus: (status: SessionStatus) => void;\n setSessionError: (error: string | null) => void;\n\n // Deposit Recovery\n setDepositRecoveryStatus: (status: DepositRecoveryStatus) => void;\n\n // Lifecycle\n markBootstrapStarted: () => void;\n markBootstrapCompleted: () => void;\n resetBootstrap: () => void;\n}\n\n// ============================================\n// INITIAL STATE\n// ============================================\n\nexport const initialBootstrapSlice: BootstrapSlice = {\n dynamicSdkStatus: 'idle',\n dynamicSdkError: null,\n\n turnkeyStatus: 'idle',\n turnkeyError: null,\n\n sessionStatus: 'idle',\n sessionError: null,\n\n depositRecoveryStatus: 'idle',\n\n bootstrapStartedAt: null,\n bootstrapCompletedAt: null,\n};\n"]}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"configSlice.js","sourceRoot":"","sources":["../../../src/store/slices/configSlice.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,+CAA+C;AAC/C,gBAAgB;AAChB,+CAA+C;AAE/C,MAAM,CAAC,IAAM,kBAAkB,GAAgB;IAC3C,WAAW,EAAE,EAAE;IACf,cAAc,EAAE,EAAE;IAClB,cAAc,EAAE,KAAK;CACxB,CAAC","sourcesContent":["/**\n * Config Slice\n *\n * Initial state for theming/configuration state.\n */\n\nimport type { ConfigSlice } from '../types';\n\n// ============================================\n// INITIAL STATE\n// ============================================\n\nexport const initialConfigSlice: ConfigSlice = {\n injectedCss: '',\n colorOverrides: [],\n turnkeyEnabled: false,\n};\n"]}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/store/slices/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AACrD,OAAO,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AACrD,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAC","sourcesContent":["/**\n * Slice Exports\n */\n\nexport { initialSigningSlice } from './signingSlice';\nexport { initialSessionSlice } from './sessionSlice';\nexport { initialWalletSlice } from './walletSlice';\nexport { initialUISlice } from './uiSlice';\nexport { initialConfigSlice } from './configSlice';\nexport { initialBootstrapSlice } from './bootstrapSlice';\nexport type {\n BootstrapSlice,\n BootstrapActions,\n DynamicSdkStatus,\n TurnkeyStatus,\n SessionStatus,\n DepositRecoveryStatus,\n} from './bootstrapSlice';\n"]}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sessionSlice.js","sourceRoot":"","sources":["../../../src/store/slices/sessionSlice.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,+CAA+C;AAC/C,gBAAgB;AAChB,+CAA+C;AAE/C,MAAM,CAAC,IAAM,mBAAmB,GAAiB;IAC7C,WAAW,EAAE,KAAK;IAClB,aAAa,EAAE,IAAI;IACnB,YAAY,EAAE,IAAI;IAClB,QAAQ,EAAE,IAAI;IACd,OAAO,EAAE,KAAK;IACd,gBAAgB,EAAE,KAAK;CAC1B,CAAC","sourcesContent":["/**\n * Session Slice\n *\n * Initial state for session/auth state.\n */\n\nimport type { SessionSlice } from '../types';\n\n// ============================================\n// INITIAL STATE\n// ============================================\n\nexport const initialSessionSlice: SessionSlice = {\n isConnected: false,\n sessionPubKey: null,\n walletPubKey: null,\n nordUser: null,\n loading: false,\n dynamicSdkLoaded: false,\n};\n"]}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"signingSlice.js","sourceRoot":"","sources":["../../../src/store/slices/signingSlice.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,+CAA+C;AAC/C,gBAAgB;AAChB,+CAA+C;AAE/C,MAAM,CAAC,IAAM,mBAAmB,GAAiB;IAC7C,yBAAyB,EAAE,IAAI;IAC/B,wBAAwB,EAAE,IAAI;IAC9B,4BAA4B,EAAE,IAAI;CACrC,CAAC","sourcesContent":["/**\n * Signing Slice\n *\n * Initial state for signing functions.\n */\n\nimport type { SigningSlice } from '../types';\n\n// ============================================\n// INITIAL STATE\n// ============================================\n\nexport const initialSigningSlice: SigningSlice = {\n signMessageWithSessionKey: null,\n signMessageWithWalletKey: null,\n signTransactionWithWalletKey: null,\n};\n"]}