@b3dotfun/sdk 0.1.69 → 0.1.70-alpha.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (481) hide show
  1. package/dist/cjs/anyspend/constants/rpc.d.ts +1 -1
  2. package/dist/cjs/anyspend/constants/rpc.js +1 -1
  3. package/dist/cjs/anyspend/react/components/AnySpend.d.ts +2 -0
  4. package/dist/cjs/anyspend/react/components/AnySpend.js +12 -4
  5. package/dist/cjs/anyspend/react/components/AnySpendCollectorClubPurchase.d.ts +5 -1
  6. package/dist/cjs/anyspend/react/components/AnySpendCollectorClubPurchase.js +2 -2
  7. package/dist/cjs/anyspend/react/components/AnySpendCustom.d.ts +2 -0
  8. package/dist/cjs/anyspend/react/components/AnySpendCustom.js +7 -3
  9. package/dist/cjs/anyspend/react/components/AnySpendDeposit.d.ts +3 -1
  10. package/dist/cjs/anyspend/react/components/AnySpendDeposit.js +3 -3
  11. package/dist/cjs/anyspend/react/components/AnySpendNFT.d.ts +3 -1
  12. package/dist/cjs/anyspend/react/components/AnySpendNFT.js +4 -4
  13. package/dist/cjs/anyspend/react/components/AnySpendStakeB3.js +1 -1
  14. package/dist/cjs/anyspend/react/components/AnySpendStakeB3ExactIn.js +1 -1
  15. package/dist/cjs/anyspend/react/components/AnySpendStakeUpside.d.ts +3 -1
  16. package/dist/cjs/anyspend/react/components/AnySpendStakeUpside.js +2 -2
  17. package/dist/cjs/anyspend/react/components/checkout/AnySpendCheckout.d.ts +3 -1
  18. package/dist/cjs/anyspend/react/components/checkout/AnySpendCheckout.js +15 -6
  19. package/dist/cjs/anyspend/react/components/checkout/CartItemRow.d.ts +2 -1
  20. package/dist/cjs/anyspend/react/components/checkout/CartSummary.d.ts +6 -4
  21. package/dist/cjs/anyspend/react/components/checkout/CartSummary.js +13 -11
  22. package/dist/cjs/anyspend/react/components/checkout/CheckoutCartPanel.d.ts +3 -1
  23. package/dist/cjs/anyspend/react/components/checkout/CheckoutCartPanel.js +5 -4
  24. package/dist/cjs/anyspend/react/components/checkout/CheckoutFormPanel.d.ts +3 -1
  25. package/dist/cjs/anyspend/react/components/checkout/CheckoutFormPanel.js +2 -2
  26. package/dist/cjs/anyspend/react/components/checkout/CheckoutPaymentPanel.js +2 -4
  27. package/dist/cjs/anyspend/react/components/checkout/CheckoutSuccess.d.ts +2 -1
  28. package/dist/cjs/anyspend/react/components/checkout/CheckoutSuccess.js +5 -3
  29. package/dist/cjs/anyspend/react/components/checkout/CryptoPayPanel.js +43 -23
  30. package/dist/cjs/anyspend/react/components/checkout/DiscountCodeInput.d.ts +3 -1
  31. package/dist/cjs/anyspend/react/components/checkout/DiscountCodeInput.js +3 -6
  32. package/dist/cjs/anyspend/react/components/checkout/FiatCheckoutPanel.js +1 -2
  33. package/dist/cjs/anyspend/react/components/checkout/KycGate.js +1 -2
  34. package/dist/cjs/anyspend/react/components/checkout/PriceSkeleton.d.ts +5 -0
  35. package/dist/cjs/anyspend/react/components/checkout/PriceSkeleton.js +9 -0
  36. package/dist/cjs/anyspend/react/components/checkout/ShippingSelector.d.ts +3 -1
  37. package/dist/cjs/anyspend/react/components/checkout/ShippingSelector.js +3 -2
  38. package/dist/cjs/anyspend/react/components/common/CryptoPaymentMethod.d.ts +8 -0
  39. package/dist/cjs/anyspend/react/components/common/CryptoPaymentMethod.js +10 -9
  40. package/dist/cjs/anyspend/react/components/common/InsufficientDepositPayment.js +2 -2
  41. package/dist/cjs/anyspend/react/components/common/OrderDetails.js +7 -2
  42. package/dist/cjs/anyspend/react/components/common/OrderDetailsCollapsible.js +2 -2
  43. package/dist/cjs/anyspend/react/components/common/OrderStatus.js +37 -6
  44. package/dist/cjs/anyspend/react/components/common/StepProgress.d.ts +2 -0
  45. package/dist/cjs/anyspend/react/components/common/StepProgress.js +7 -2
  46. package/dist/cjs/anyspend/react/components/common/TransferCryptoDetails.js +2 -2
  47. package/dist/cjs/anyspend/react/hooks/useAnyspendCreateOnrampOrder.js +4 -6
  48. package/dist/cjs/anyspend/react/hooks/useKycStatus.d.ts +3 -1
  49. package/dist/cjs/anyspend/react/hooks/useKycStatus.js +11 -7
  50. package/dist/cjs/anyspend/utils/chain.js +8 -7
  51. package/dist/cjs/app.shared.js +9 -7
  52. package/dist/cjs/global-account/better-auth-client.d.ts +1883 -0
  53. package/dist/cjs/global-account/better-auth-client.js +17 -0
  54. package/dist/cjs/global-account/bsmnt.d.ts +0 -1
  55. package/dist/cjs/global-account/bsmnt.js +0 -6
  56. package/dist/cjs/global-account/react/components/AvatarEditor/AvatarEditor.js +3 -1
  57. package/dist/cjs/global-account/react/components/B3DynamicModal.js +5 -2
  58. package/dist/cjs/global-account/react/components/B3Provider/AuthenticationProvider.d.ts +3 -1
  59. package/dist/cjs/global-account/react/components/B3Provider/AuthenticationProvider.js +2 -1
  60. package/dist/cjs/global-account/react/components/B3Provider/B3ConfigProvider.d.ts +8 -1
  61. package/dist/cjs/global-account/react/components/B3Provider/B3ConfigProvider.js +3 -1
  62. package/dist/cjs/global-account/react/components/B3Provider/B3Provider.d.ts +27 -2
  63. package/dist/cjs/global-account/react/components/B3Provider/B3Provider.js +11 -13
  64. package/dist/cjs/global-account/react/components/B3Provider/B3Provider.native.js +6 -8
  65. package/dist/cjs/global-account/react/components/B3Provider/BetterAuthClientProvider.d.ts +17 -0
  66. package/dist/cjs/global-account/react/components/B3Provider/BetterAuthClientProvider.js +31 -0
  67. package/dist/cjs/global-account/react/components/B3Provider/BetterAuthProvider.d.ts +16 -0
  68. package/dist/cjs/global-account/react/components/B3Provider/BetterAuthProvider.js +121 -0
  69. package/dist/cjs/global-account/react/components/B3Provider/LocalSDKProvider.d.ts +3 -1
  70. package/dist/cjs/global-account/react/components/B3Provider/LocalSDKProvider.js +3 -1
  71. package/dist/cjs/global-account/react/components/IPFSMediaRenderer/IPFSMediaRenderer.d.ts +3 -1
  72. package/dist/cjs/global-account/react/components/IPFSMediaRenderer/IPFSMediaRenderer.js +4 -2
  73. package/dist/cjs/global-account/react/components/LinkAccount/LinkedAccountItem.js +2 -1
  74. package/dist/cjs/global-account/react/components/ManageAccount/BottomNavigation.js +4 -2
  75. package/dist/cjs/global-account/react/components/ManageAccount/Header.js +36 -4
  76. package/dist/cjs/global-account/react/components/ManageAccount/HomeContent.js +4 -1
  77. package/dist/cjs/global-account/react/components/ManageAccount/ManageAccount.js +6 -0
  78. package/dist/cjs/global-account/react/components/ManageAccount/ProfileSection.js +17 -6
  79. package/dist/cjs/global-account/react/components/ManageAccount/SessionDurationContent.d.ts +5 -0
  80. package/dist/cjs/global-account/react/components/ManageAccount/SessionDurationContent.js +57 -0
  81. package/dist/cjs/global-account/react/components/ManageAccount/SettingsContent.js +14 -29
  82. package/dist/cjs/global-account/react/components/ManageAccount/SettingsProfileCard.js +27 -16
  83. package/dist/cjs/global-account/react/components/Send/Send.js +5 -2
  84. package/dist/cjs/global-account/react/components/SignInWithB3/BetterAuthResetPassword.d.ts +21 -0
  85. package/dist/cjs/global-account/react/components/SignInWithB3/BetterAuthResetPassword.js +68 -0
  86. package/dist/cjs/global-account/react/components/SignInWithB3/BetterAuthSignIn.d.ts +39 -0
  87. package/dist/cjs/global-account/react/components/SignInWithB3/BetterAuthSignIn.js +173 -0
  88. package/dist/cjs/global-account/react/components/SignInWithB3/BetterAuthVerifyEmail.d.ts +37 -0
  89. package/dist/cjs/global-account/react/components/SignInWithB3/BetterAuthVerifyEmail.js +85 -0
  90. package/dist/cjs/global-account/react/components/SignInWithB3/SignIn.js +14 -4
  91. package/dist/cjs/global-account/react/components/SignInWithB3/SignInWithB3Flow.d.ts +1 -1
  92. package/dist/cjs/global-account/react/components/SignInWithB3/SignInWithB3Flow.js +14 -5
  93. package/dist/cjs/global-account/react/components/SignInWithB3/components/AuthButton.js +10 -1
  94. package/dist/cjs/global-account/react/components/SignInWithB3/components/PasswordInput.d.ts +10 -0
  95. package/dist/cjs/global-account/react/components/SignInWithB3/components/PasswordInput.js +10 -0
  96. package/dist/cjs/global-account/react/components/SignInWithB3/steps/LoginStepBetterAuth.d.ts +8 -0
  97. package/dist/cjs/global-account/react/components/SignInWithB3/steps/LoginStepBetterAuth.js +141 -0
  98. package/dist/cjs/global-account/react/components/SignInWithB3/steps/LoginStepCustom.js +96 -15
  99. package/dist/cjs/global-account/react/components/SignInWithB3/utils/signInUtils.d.ts +5 -3
  100. package/dist/cjs/global-account/react/components/SignInWithB3/utils/signInUtils.js +20 -3
  101. package/dist/cjs/global-account/react/components/SingleUserSearchSelector/SingleUserSearchSelector.js +2 -1
  102. package/dist/cjs/global-account/react/components/Toast/ToastContext.d.ts +3 -0
  103. package/dist/cjs/global-account/react/components/Toast/ToastContext.js +30 -7
  104. package/dist/cjs/global-account/react/components/UserAvatar/UserAvatar.d.ts +18 -0
  105. package/dist/cjs/global-account/react/components/UserAvatar/UserAvatar.js +27 -0
  106. package/dist/cjs/global-account/react/components/custom/Button.d.ts +1 -1
  107. package/dist/cjs/global-account/react/components/index.d.ts +6 -0
  108. package/dist/cjs/global-account/react/components/index.js +14 -3
  109. package/dist/cjs/global-account/react/components/ui/button.d.ts +1 -1
  110. package/dist/cjs/global-account/react/hooks/index.d.ts +1 -0
  111. package/dist/cjs/global-account/react/hooks/index.js +5 -2
  112. package/dist/cjs/global-account/react/hooks/useAuth.js +26 -15
  113. package/dist/cjs/global-account/react/hooks/useAuthentication.js +23 -12
  114. package/dist/cjs/global-account/react/hooks/useAutoSelectWallet.d.ts +6 -3
  115. package/dist/cjs/global-account/react/hooks/useAutoSelectWallet.js +31 -3
  116. package/dist/cjs/global-account/react/hooks/useBetterAuth.d.ts +973 -0
  117. package/dist/cjs/global-account/react/hooks/useBetterAuth.js +159 -0
  118. package/dist/cjs/global-account/react/hooks/useConnect.d.ts +2 -2
  119. package/dist/cjs/global-account/react/hooks/useFirstEOA.d.ts +8 -8
  120. package/dist/cjs/global-account/react/hooks/useTWAuth.js +0 -1
  121. package/dist/cjs/global-account/react/stores/useModalStore.d.ts +14 -1
  122. package/dist/cjs/global-account/react/utils/createWagmiConfig.d.ts +4 -31
  123. package/dist/cjs/global-account/react/utils/createWagmiConfig.js +5 -24
  124. package/dist/cjs/global-account/react/utils/index.d.ts +0 -1
  125. package/dist/cjs/global-account/react/utils/index.js +0 -1
  126. package/dist/cjs/global-account/react/utils/profileDisplay.js +17 -18
  127. package/dist/cjs/shared/constants/chains/b3Chain.d.ts +7 -7
  128. package/dist/cjs/shared/constants/chains/b3Chain.js +4 -4
  129. package/dist/cjs/shared/constants/chains/b3Viem.d.ts +6 -0
  130. package/dist/cjs/shared/constants/chains/b3Viem.js +19 -0
  131. package/dist/cjs/shared/constants/chains/supported.d.ts +1 -1
  132. package/dist/cjs/shared/constants/index.d.ts +1 -0
  133. package/dist/cjs/shared/constants/index.js +2 -1
  134. package/dist/cjs/shared/generated/chain-networks.json +2 -2
  135. package/dist/cjs/shared/utils/chains.d.ts +1 -1
  136. package/dist/cjs/shared/utils/chains.js +2 -2
  137. package/dist/cjs/shared/utils/session-duration.d.ts +15 -0
  138. package/dist/cjs/shared/utils/session-duration.js +69 -0
  139. package/dist/cjs/wallet/react/components/ConnectWallet.d.ts +11 -0
  140. package/dist/cjs/wallet/react/components/ConnectWallet.js +467 -0
  141. package/dist/cjs/wallet/react/components/WalletProvider.d.ts +35 -0
  142. package/dist/cjs/wallet/react/components/WalletProvider.js +20 -0
  143. package/dist/cjs/wallet/react/hooks/useWalletDisconnect.d.ts +13 -0
  144. package/dist/cjs/wallet/react/hooks/useWalletDisconnect.js +22 -0
  145. package/dist/cjs/wallet/react/hooks/useWalletState.d.ts +31 -0
  146. package/dist/cjs/wallet/react/hooks/useWalletState.js +63 -0
  147. package/dist/cjs/wallet/react/index.d.ts +5 -0
  148. package/dist/cjs/wallet/react/index.js +16 -0
  149. package/dist/cjs/wallet/utils/createWalletConfig.d.ts +21 -0
  150. package/dist/cjs/wallet/utils/createWalletConfig.js +24 -0
  151. package/dist/esm/anyspend/constants/rpc.d.ts +1 -1
  152. package/dist/esm/anyspend/constants/rpc.js +1 -1
  153. package/dist/esm/anyspend/react/components/AnySpend.d.ts +2 -0
  154. package/dist/esm/anyspend/react/components/AnySpend.js +12 -4
  155. package/dist/esm/anyspend/react/components/AnySpendCollectorClubPurchase.d.ts +5 -1
  156. package/dist/esm/anyspend/react/components/AnySpendCollectorClubPurchase.js +2 -2
  157. package/dist/esm/anyspend/react/components/AnySpendCustom.d.ts +2 -0
  158. package/dist/esm/anyspend/react/components/AnySpendCustom.js +7 -3
  159. package/dist/esm/anyspend/react/components/AnySpendDeposit.d.ts +3 -1
  160. package/dist/esm/anyspend/react/components/AnySpendDeposit.js +3 -3
  161. package/dist/esm/anyspend/react/components/AnySpendNFT.d.ts +3 -1
  162. package/dist/esm/anyspend/react/components/AnySpendNFT.js +4 -4
  163. package/dist/esm/anyspend/react/components/AnySpendStakeB3.js +2 -2
  164. package/dist/esm/anyspend/react/components/AnySpendStakeB3ExactIn.js +2 -2
  165. package/dist/esm/anyspend/react/components/AnySpendStakeUpside.d.ts +3 -1
  166. package/dist/esm/anyspend/react/components/AnySpendStakeUpside.js +2 -2
  167. package/dist/esm/anyspend/react/components/checkout/AnySpendCheckout.d.ts +3 -1
  168. package/dist/esm/anyspend/react/components/checkout/AnySpendCheckout.js +15 -6
  169. package/dist/esm/anyspend/react/components/checkout/CartItemRow.d.ts +2 -1
  170. package/dist/esm/anyspend/react/components/checkout/CartSummary.d.ts +6 -4
  171. package/dist/esm/anyspend/react/components/checkout/CartSummary.js +13 -11
  172. package/dist/esm/anyspend/react/components/checkout/CheckoutCartPanel.d.ts +3 -1
  173. package/dist/esm/anyspend/react/components/checkout/CheckoutCartPanel.js +5 -4
  174. package/dist/esm/anyspend/react/components/checkout/CheckoutFormPanel.d.ts +3 -1
  175. package/dist/esm/anyspend/react/components/checkout/CheckoutFormPanel.js +2 -2
  176. package/dist/esm/anyspend/react/components/checkout/CheckoutPaymentPanel.js +2 -4
  177. package/dist/esm/anyspend/react/components/checkout/CheckoutSuccess.d.ts +2 -1
  178. package/dist/esm/anyspend/react/components/checkout/CheckoutSuccess.js +5 -3
  179. package/dist/esm/anyspend/react/components/checkout/CryptoPayPanel.js +44 -24
  180. package/dist/esm/anyspend/react/components/checkout/DiscountCodeInput.d.ts +3 -1
  181. package/dist/esm/anyspend/react/components/checkout/DiscountCodeInput.js +3 -6
  182. package/dist/esm/anyspend/react/components/checkout/FiatCheckoutPanel.js +2 -3
  183. package/dist/esm/anyspend/react/components/checkout/KycGate.js +2 -3
  184. package/dist/esm/anyspend/react/components/checkout/PriceSkeleton.d.ts +5 -0
  185. package/dist/esm/anyspend/react/components/checkout/PriceSkeleton.js +6 -0
  186. package/dist/esm/anyspend/react/components/checkout/ShippingSelector.d.ts +3 -1
  187. package/dist/esm/anyspend/react/components/checkout/ShippingSelector.js +3 -2
  188. package/dist/esm/anyspend/react/components/common/CryptoPaymentMethod.d.ts +8 -0
  189. package/dist/esm/anyspend/react/components/common/CryptoPaymentMethod.js +9 -8
  190. package/dist/esm/anyspend/react/components/common/InsufficientDepositPayment.js +2 -2
  191. package/dist/esm/anyspend/react/components/common/OrderDetails.js +8 -3
  192. package/dist/esm/anyspend/react/components/common/OrderDetailsCollapsible.js +2 -2
  193. package/dist/esm/anyspend/react/components/common/OrderStatus.js +34 -3
  194. package/dist/esm/anyspend/react/components/common/StepProgress.d.ts +2 -0
  195. package/dist/esm/anyspend/react/components/common/StepProgress.js +4 -2
  196. package/dist/esm/anyspend/react/components/common/TransferCryptoDetails.js +2 -2
  197. package/dist/esm/anyspend/react/hooks/useAnyspendCreateOnrampOrder.js +5 -7
  198. package/dist/esm/anyspend/react/hooks/useKycStatus.d.ts +3 -1
  199. package/dist/esm/anyspend/react/hooks/useKycStatus.js +9 -5
  200. package/dist/esm/anyspend/utils/chain.js +10 -9
  201. package/dist/esm/app.shared.js +9 -7
  202. package/dist/esm/global-account/better-auth-client.d.ts +1883 -0
  203. package/dist/esm/global-account/better-auth-client.js +13 -0
  204. package/dist/esm/global-account/bsmnt.d.ts +0 -1
  205. package/dist/esm/global-account/bsmnt.js +0 -5
  206. package/dist/esm/global-account/react/components/AvatarEditor/AvatarEditor.js +3 -1
  207. package/dist/esm/global-account/react/components/B3DynamicModal.js +5 -2
  208. package/dist/esm/global-account/react/components/B3Provider/AuthenticationProvider.d.ts +3 -1
  209. package/dist/esm/global-account/react/components/B3Provider/AuthenticationProvider.js +2 -1
  210. package/dist/esm/global-account/react/components/B3Provider/B3ConfigProvider.d.ts +8 -1
  211. package/dist/esm/global-account/react/components/B3Provider/B3ConfigProvider.js +3 -1
  212. package/dist/esm/global-account/react/components/B3Provider/B3Provider.d.ts +27 -2
  213. package/dist/esm/global-account/react/components/B3Provider/B3Provider.js +6 -8
  214. package/dist/esm/global-account/react/components/B3Provider/B3Provider.native.js +4 -6
  215. package/dist/esm/global-account/react/components/B3Provider/BetterAuthClientProvider.d.ts +17 -0
  216. package/dist/esm/global-account/react/components/B3Provider/BetterAuthClientProvider.js +27 -0
  217. package/dist/esm/global-account/react/components/B3Provider/BetterAuthProvider.d.ts +16 -0
  218. package/dist/esm/global-account/react/components/B3Provider/BetterAuthProvider.js +116 -0
  219. package/dist/esm/global-account/react/components/B3Provider/LocalSDKProvider.d.ts +3 -1
  220. package/dist/esm/global-account/react/components/B3Provider/LocalSDKProvider.js +3 -1
  221. package/dist/esm/global-account/react/components/IPFSMediaRenderer/IPFSMediaRenderer.d.ts +3 -1
  222. package/dist/esm/global-account/react/components/IPFSMediaRenderer/IPFSMediaRenderer.js +4 -2
  223. package/dist/esm/global-account/react/components/LinkAccount/LinkedAccountItem.js +2 -1
  224. package/dist/esm/global-account/react/components/ManageAccount/BottomNavigation.js +5 -3
  225. package/dist/esm/global-account/react/components/ManageAccount/Header.js +37 -5
  226. package/dist/esm/global-account/react/components/ManageAccount/HomeContent.js +4 -1
  227. package/dist/esm/global-account/react/components/ManageAccount/ManageAccount.js +7 -1
  228. package/dist/esm/global-account/react/components/ManageAccount/ProfileSection.js +16 -8
  229. package/dist/esm/global-account/react/components/ManageAccount/SessionDurationContent.d.ts +5 -0
  230. package/dist/esm/global-account/react/components/ManageAccount/SessionDurationContent.js +52 -0
  231. package/dist/esm/global-account/react/components/ManageAccount/SettingsContent.js +16 -31
  232. package/dist/esm/global-account/react/components/ManageAccount/SettingsProfileCard.js +27 -16
  233. package/dist/esm/global-account/react/components/Send/Send.js +5 -2
  234. package/dist/esm/global-account/react/components/SignInWithB3/BetterAuthResetPassword.d.ts +21 -0
  235. package/dist/esm/global-account/react/components/SignInWithB3/BetterAuthResetPassword.js +65 -0
  236. package/dist/esm/global-account/react/components/SignInWithB3/BetterAuthSignIn.d.ts +39 -0
  237. package/dist/esm/global-account/react/components/SignInWithB3/BetterAuthSignIn.js +170 -0
  238. package/dist/esm/global-account/react/components/SignInWithB3/BetterAuthVerifyEmail.d.ts +37 -0
  239. package/dist/esm/global-account/react/components/SignInWithB3/BetterAuthVerifyEmail.js +82 -0
  240. package/dist/esm/global-account/react/components/SignInWithB3/SignIn.js +15 -5
  241. package/dist/esm/global-account/react/components/SignInWithB3/SignInWithB3Flow.d.ts +1 -1
  242. package/dist/esm/global-account/react/components/SignInWithB3/SignInWithB3Flow.js +14 -5
  243. package/dist/esm/global-account/react/components/SignInWithB3/components/AuthButton.js +11 -2
  244. package/dist/esm/global-account/react/components/SignInWithB3/components/PasswordInput.d.ts +10 -0
  245. package/dist/esm/global-account/react/components/SignInWithB3/components/PasswordInput.js +7 -0
  246. package/dist/esm/global-account/react/components/SignInWithB3/steps/LoginStepBetterAuth.d.ts +8 -0
  247. package/dist/esm/global-account/react/components/SignInWithB3/steps/LoginStepBetterAuth.js +138 -0
  248. package/dist/esm/global-account/react/components/SignInWithB3/steps/LoginStepCustom.js +100 -19
  249. package/dist/esm/global-account/react/components/SignInWithB3/utils/signInUtils.d.ts +5 -3
  250. package/dist/esm/global-account/react/components/SignInWithB3/utils/signInUtils.js +19 -2
  251. package/dist/esm/global-account/react/components/SingleUserSearchSelector/SingleUserSearchSelector.js +2 -1
  252. package/dist/esm/global-account/react/components/Toast/ToastContext.d.ts +3 -0
  253. package/dist/esm/global-account/react/components/Toast/ToastContext.js +30 -7
  254. package/dist/esm/global-account/react/components/UserAvatar/UserAvatar.d.ts +18 -0
  255. package/dist/esm/global-account/react/components/UserAvatar/UserAvatar.js +21 -0
  256. package/dist/esm/global-account/react/components/custom/Button.d.ts +1 -1
  257. package/dist/esm/global-account/react/components/index.d.ts +6 -0
  258. package/dist/esm/global-account/react/components/index.js +6 -0
  259. package/dist/esm/global-account/react/components/ui/button.d.ts +1 -1
  260. package/dist/esm/global-account/react/hooks/index.d.ts +1 -0
  261. package/dist/esm/global-account/react/hooks/index.js +1 -0
  262. package/dist/esm/global-account/react/hooks/useAuth.js +28 -17
  263. package/dist/esm/global-account/react/hooks/useAuthentication.js +24 -13
  264. package/dist/esm/global-account/react/hooks/useAutoSelectWallet.d.ts +6 -3
  265. package/dist/esm/global-account/react/hooks/useAutoSelectWallet.js +33 -5
  266. package/dist/esm/global-account/react/hooks/useBetterAuth.d.ts +973 -0
  267. package/dist/esm/global-account/react/hooks/useBetterAuth.js +151 -0
  268. package/dist/esm/global-account/react/hooks/useConnect.d.ts +2 -2
  269. package/dist/esm/global-account/react/hooks/useFirstEOA.d.ts +8 -8
  270. package/dist/esm/global-account/react/hooks/useTWAuth.js +0 -1
  271. package/dist/esm/global-account/react/stores/useModalStore.d.ts +14 -1
  272. package/dist/esm/global-account/react/utils/createWagmiConfig.d.ts +4 -31
  273. package/dist/esm/global-account/react/utils/createWagmiConfig.js +5 -23
  274. package/dist/esm/global-account/react/utils/index.d.ts +0 -1
  275. package/dist/esm/global-account/react/utils/index.js +0 -1
  276. package/dist/esm/global-account/react/utils/profileDisplay.js +17 -18
  277. package/dist/esm/shared/constants/chains/b3Chain.d.ts +7 -7
  278. package/dist/esm/shared/constants/chains/b3Chain.js +4 -4
  279. package/dist/esm/shared/constants/chains/b3Viem.d.ts +6 -0
  280. package/dist/esm/shared/constants/chains/b3Viem.js +16 -0
  281. package/dist/esm/shared/constants/chains/supported.d.ts +1 -1
  282. package/dist/esm/shared/constants/index.d.ts +1 -0
  283. package/dist/esm/shared/constants/index.js +1 -0
  284. package/dist/esm/shared/generated/chain-networks.json +2 -2
  285. package/dist/esm/shared/utils/chains.d.ts +1 -1
  286. package/dist/esm/shared/utils/chains.js +2 -2
  287. package/dist/esm/shared/utils/session-duration.d.ts +15 -0
  288. package/dist/esm/shared/utils/session-duration.js +64 -0
  289. package/dist/esm/wallet/react/components/ConnectWallet.d.ts +11 -0
  290. package/dist/esm/wallet/react/components/ConnectWallet.js +431 -0
  291. package/dist/esm/wallet/react/components/WalletProvider.d.ts +35 -0
  292. package/dist/esm/wallet/react/components/WalletProvider.js +17 -0
  293. package/dist/esm/wallet/react/hooks/useWalletDisconnect.d.ts +13 -0
  294. package/dist/esm/wallet/react/hooks/useWalletDisconnect.js +19 -0
  295. package/dist/esm/wallet/react/hooks/useWalletState.d.ts +31 -0
  296. package/dist/esm/wallet/react/hooks/useWalletState.js +60 -0
  297. package/dist/esm/wallet/react/index.d.ts +5 -0
  298. package/dist/esm/wallet/react/index.js +8 -0
  299. package/dist/esm/wallet/utils/createWalletConfig.d.ts +21 -0
  300. package/dist/esm/wallet/utils/createWalletConfig.js +21 -0
  301. package/dist/styles/index.css +1 -1
  302. package/dist/types/anyspend/constants/rpc.d.ts +1 -1
  303. package/dist/types/anyspend/react/components/AnySpend.d.ts +2 -0
  304. package/dist/types/anyspend/react/components/AnySpendCollectorClubPurchase.d.ts +5 -1
  305. package/dist/types/anyspend/react/components/AnySpendCustom.d.ts +2 -0
  306. package/dist/types/anyspend/react/components/AnySpendDeposit.d.ts +3 -1
  307. package/dist/types/anyspend/react/components/AnySpendNFT.d.ts +3 -1
  308. package/dist/types/anyspend/react/components/AnySpendStakeUpside.d.ts +3 -1
  309. package/dist/types/anyspend/react/components/checkout/AnySpendCheckout.d.ts +3 -1
  310. package/dist/types/anyspend/react/components/checkout/CartItemRow.d.ts +2 -1
  311. package/dist/types/anyspend/react/components/checkout/CartSummary.d.ts +6 -4
  312. package/dist/types/anyspend/react/components/checkout/CheckoutCartPanel.d.ts +3 -1
  313. package/dist/types/anyspend/react/components/checkout/CheckoutFormPanel.d.ts +3 -1
  314. package/dist/types/anyspend/react/components/checkout/CheckoutSuccess.d.ts +2 -1
  315. package/dist/types/anyspend/react/components/checkout/DiscountCodeInput.d.ts +3 -1
  316. package/dist/types/anyspend/react/components/checkout/PriceSkeleton.d.ts +5 -0
  317. package/dist/types/anyspend/react/components/checkout/ShippingSelector.d.ts +3 -1
  318. package/dist/types/anyspend/react/components/common/CryptoPaymentMethod.d.ts +8 -0
  319. package/dist/types/anyspend/react/components/common/StepProgress.d.ts +2 -0
  320. package/dist/types/anyspend/react/hooks/useKycStatus.d.ts +3 -1
  321. package/dist/types/global-account/better-auth-client.d.ts +1883 -0
  322. package/dist/types/global-account/bsmnt.d.ts +0 -1
  323. package/dist/types/global-account/react/components/B3Provider/AuthenticationProvider.d.ts +3 -1
  324. package/dist/types/global-account/react/components/B3Provider/B3ConfigProvider.d.ts +8 -1
  325. package/dist/types/global-account/react/components/B3Provider/B3Provider.d.ts +27 -2
  326. package/dist/types/global-account/react/components/B3Provider/BetterAuthClientProvider.d.ts +17 -0
  327. package/dist/types/global-account/react/components/B3Provider/BetterAuthProvider.d.ts +16 -0
  328. package/dist/types/global-account/react/components/B3Provider/LocalSDKProvider.d.ts +3 -1
  329. package/dist/types/global-account/react/components/IPFSMediaRenderer/IPFSMediaRenderer.d.ts +3 -1
  330. package/dist/types/global-account/react/components/ManageAccount/SessionDurationContent.d.ts +5 -0
  331. package/dist/types/global-account/react/components/SignInWithB3/BetterAuthResetPassword.d.ts +21 -0
  332. package/dist/types/global-account/react/components/SignInWithB3/BetterAuthSignIn.d.ts +39 -0
  333. package/dist/types/global-account/react/components/SignInWithB3/BetterAuthVerifyEmail.d.ts +37 -0
  334. package/dist/types/global-account/react/components/SignInWithB3/SignInWithB3Flow.d.ts +1 -1
  335. package/dist/types/global-account/react/components/SignInWithB3/components/PasswordInput.d.ts +10 -0
  336. package/dist/types/global-account/react/components/SignInWithB3/steps/LoginStepBetterAuth.d.ts +8 -0
  337. package/dist/types/global-account/react/components/SignInWithB3/utils/signInUtils.d.ts +5 -3
  338. package/dist/types/global-account/react/components/Toast/ToastContext.d.ts +3 -0
  339. package/dist/types/global-account/react/components/UserAvatar/UserAvatar.d.ts +18 -0
  340. package/dist/types/global-account/react/components/custom/Button.d.ts +1 -1
  341. package/dist/types/global-account/react/components/index.d.ts +6 -0
  342. package/dist/types/global-account/react/components/ui/button.d.ts +1 -1
  343. package/dist/types/global-account/react/hooks/index.d.ts +1 -0
  344. package/dist/types/global-account/react/hooks/useAutoSelectWallet.d.ts +6 -3
  345. package/dist/types/global-account/react/hooks/useBetterAuth.d.ts +973 -0
  346. package/dist/types/global-account/react/hooks/useConnect.d.ts +2 -2
  347. package/dist/types/global-account/react/hooks/useFirstEOA.d.ts +8 -8
  348. package/dist/types/global-account/react/stores/useModalStore.d.ts +14 -1
  349. package/dist/types/global-account/react/utils/createWagmiConfig.d.ts +4 -31
  350. package/dist/types/global-account/react/utils/index.d.ts +0 -1
  351. package/dist/types/shared/constants/chains/b3Chain.d.ts +7 -7
  352. package/dist/types/shared/constants/chains/b3Viem.d.ts +6 -0
  353. package/dist/types/shared/constants/chains/supported.d.ts +1 -1
  354. package/dist/types/shared/constants/index.d.ts +1 -0
  355. package/dist/types/shared/utils/chains.d.ts +1 -1
  356. package/dist/types/shared/utils/session-duration.d.ts +15 -0
  357. package/dist/types/wallet/react/components/ConnectWallet.d.ts +11 -0
  358. package/dist/types/wallet/react/components/WalletProvider.d.ts +35 -0
  359. package/dist/types/wallet/react/hooks/useWalletDisconnect.d.ts +13 -0
  360. package/dist/types/wallet/react/hooks/useWalletState.d.ts +31 -0
  361. package/dist/types/wallet/react/index.d.ts +5 -0
  362. package/dist/types/wallet/utils/createWalletConfig.d.ts +21 -0
  363. package/package.json +15 -6
  364. package/src/anyspend/constants/rpc.ts +2 -1
  365. package/src/anyspend/react/components/AnySpend.tsx +24 -12
  366. package/src/anyspend/react/components/AnySpendCollectorClubPurchase.tsx +6 -0
  367. package/src/anyspend/react/components/AnySpendCustom.tsx +12 -2
  368. package/src/anyspend/react/components/AnySpendDeposit.tsx +38 -31
  369. package/src/anyspend/react/components/AnySpendNFT.tsx +6 -2
  370. package/src/anyspend/react/components/AnySpendStakeB3.tsx +2 -2
  371. package/src/anyspend/react/components/AnySpendStakeB3ExactIn.tsx +2 -2
  372. package/src/anyspend/react/components/AnySpendStakeUpside.tsx +4 -0
  373. package/src/anyspend/react/components/checkout/AnySpendCheckout.tsx +25 -5
  374. package/src/anyspend/react/components/checkout/CartItemRow.tsx +2 -1
  375. package/src/anyspend/react/components/checkout/CartSummary.tsx +24 -20
  376. package/src/anyspend/react/components/checkout/CheckoutCartPanel.tsx +12 -3
  377. package/src/anyspend/react/components/checkout/CheckoutFormPanel.tsx +5 -0
  378. package/src/anyspend/react/components/checkout/CheckoutPaymentPanel.tsx +2 -4
  379. package/src/anyspend/react/components/checkout/CheckoutSuccess.tsx +13 -3
  380. package/src/anyspend/react/components/checkout/CryptoPayPanel.tsx +45 -27
  381. package/src/anyspend/react/components/checkout/DiscountCodeInput.tsx +15 -5
  382. package/src/anyspend/react/components/checkout/FiatCheckoutPanel.tsx +9 -3
  383. package/src/anyspend/react/components/checkout/KycGate.tsx +8 -3
  384. package/src/anyspend/react/components/checkout/PriceSkeleton.tsx +19 -0
  385. package/src/anyspend/react/components/checkout/ShippingSelector.tsx +5 -1
  386. package/src/anyspend/react/components/common/CryptoPaymentMethod.tsx +10 -8
  387. package/src/anyspend/react/components/common/InsufficientDepositPayment.tsx +2 -2
  388. package/src/anyspend/react/components/common/OrderDetails.tsx +10 -2
  389. package/src/anyspend/react/components/common/OrderDetailsCollapsible.tsx +4 -4
  390. package/src/anyspend/react/components/common/OrderStatus.tsx +38 -3
  391. package/src/anyspend/react/components/common/StepProgress.tsx +15 -5
  392. package/src/anyspend/react/components/common/TransferCryptoDetails.tsx +2 -2
  393. package/src/anyspend/react/hooks/useAnyspendCreateOnrampOrder.ts +5 -7
  394. package/src/anyspend/react/hooks/useKycStatus.ts +8 -5
  395. package/src/anyspend/utils/chain.ts +9 -9
  396. package/src/app.shared.ts +9 -8
  397. package/src/global-account/better-auth-client.ts +17 -0
  398. package/src/global-account/bsmnt.ts +0 -6
  399. package/src/global-account/react/components/AvatarEditor/AvatarEditor.tsx +3 -1
  400. package/src/global-account/react/components/B3DynamicModal.tsx +5 -2
  401. package/src/global-account/react/components/B3Provider/AuthenticationProvider.tsx +4 -0
  402. package/src/global-account/react/components/B3Provider/B3ConfigProvider.tsx +12 -0
  403. package/src/global-account/react/components/B3Provider/B3Provider.native.tsx +16 -21
  404. package/src/global-account/react/components/B3Provider/B3Provider.tsx +78 -38
  405. package/src/global-account/react/components/B3Provider/BetterAuthClientProvider.tsx +40 -0
  406. package/src/global-account/react/components/B3Provider/BetterAuthProvider.tsx +128 -0
  407. package/src/global-account/react/components/B3Provider/LocalSDKProvider.tsx +5 -0
  408. package/src/global-account/react/components/IPFSMediaRenderer/IPFSMediaRenderer.tsx +17 -10
  409. package/src/global-account/react/components/LinkAccount/LinkedAccountItem.tsx +2 -1
  410. package/src/global-account/react/components/ManageAccount/BottomNavigation.tsx +18 -14
  411. package/src/global-account/react/components/ManageAccount/Header.tsx +71 -4
  412. package/src/global-account/react/components/ManageAccount/HomeContent.tsx +25 -19
  413. package/src/global-account/react/components/ManageAccount/ManageAccount.tsx +13 -0
  414. package/src/global-account/react/components/ManageAccount/ProfileSection.tsx +40 -15
  415. package/src/global-account/react/components/ManageAccount/SessionDurationContent.tsx +107 -0
  416. package/src/global-account/react/components/ManageAccount/SettingsContent.tsx +35 -54
  417. package/src/global-account/react/components/ManageAccount/SettingsProfileCard.tsx +31 -22
  418. package/src/global-account/react/components/Send/Send.tsx +8 -5
  419. package/src/global-account/react/components/SignInWithB3/BetterAuthResetPassword.tsx +145 -0
  420. package/src/global-account/react/components/SignInWithB3/BetterAuthSignIn.tsx +446 -0
  421. package/src/global-account/react/components/SignInWithB3/BetterAuthVerifyEmail.tsx +155 -0
  422. package/src/global-account/react/components/SignInWithB3/SignIn.tsx +42 -13
  423. package/src/global-account/react/components/SignInWithB3/SignInWithB3Flow.tsx +20 -4
  424. package/src/global-account/react/components/SignInWithB3/components/AuthButton.tsx +21 -2
  425. package/src/global-account/react/components/SignInWithB3/components/PasswordInput.tsx +62 -0
  426. package/src/global-account/react/components/SignInWithB3/steps/LoginStepBetterAuth.tsx +315 -0
  427. package/src/global-account/react/components/SignInWithB3/steps/LoginStepCustom.tsx +207 -54
  428. package/src/global-account/react/components/SignInWithB3/utils/signInUtils.ts +24 -4
  429. package/src/global-account/react/components/SingleUserSearchSelector/SingleUserSearchSelector.tsx +2 -1
  430. package/src/global-account/react/components/Toast/ToastContext.tsx +39 -7
  431. package/src/global-account/react/components/UserAvatar/UserAvatar.tsx +45 -0
  432. package/src/global-account/react/components/index.ts +12 -0
  433. package/src/global-account/react/hooks/index.ts +1 -0
  434. package/src/global-account/react/hooks/useAuth.ts +28 -17
  435. package/src/global-account/react/hooks/useAuthentication.ts +24 -13
  436. package/src/global-account/react/hooks/useAutoSelectWallet.ts +40 -6
  437. package/src/global-account/react/hooks/useBetterAuth.ts +193 -0
  438. package/src/global-account/react/hooks/useConnect.tsx +2 -2
  439. package/src/global-account/react/hooks/useTWAuth.tsx +0 -1
  440. package/src/global-account/react/stores/useModalStore.ts +15 -0
  441. package/src/global-account/react/utils/createWagmiConfig.tsx +6 -25
  442. package/src/global-account/react/utils/index.ts +0 -1
  443. package/src/global-account/react/utils/profileDisplay.ts +21 -19
  444. package/src/shared/constants/chains/b3Chain.ts +5 -5
  445. package/src/shared/constants/chains/b3Viem.ts +18 -0
  446. package/src/shared/constants/index.ts +2 -0
  447. package/src/shared/generated/chain-networks.json +2 -2
  448. package/src/shared/utils/chains.ts +3 -2
  449. package/src/shared/utils/session-duration.ts +64 -0
  450. package/src/types/torph.d.ts +4 -0
  451. package/src/wallet/__tests__/createWalletConfig.test.ts +39 -0
  452. package/src/wallet/react/components/ConnectWallet.tsx +665 -0
  453. package/src/wallet/react/components/WalletProvider.tsx +64 -0
  454. package/src/wallet/react/hooks/useWalletDisconnect.ts +22 -0
  455. package/src/wallet/react/hooks/useWalletState.ts +93 -0
  456. package/src/wallet/react/index.ts +10 -0
  457. package/src/wallet/utils/createWalletConfig.ts +39 -0
  458. package/dist/cjs/global-account/react/components/AvatarCreator/AvatarCreator.d.ts +0 -6
  459. package/dist/cjs/global-account/react/components/AvatarCreator/AvatarCreator.js +0 -54
  460. package/dist/cjs/global-account/react/components/ProfileAvatar.d.ts +0 -0
  461. package/dist/cjs/global-account/react/components/ProfileAvatar.js +0 -127
  462. package/dist/cjs/global-account/react/hooks/useRPMToken.d.ts +0 -7
  463. package/dist/cjs/global-account/react/hooks/useRPMToken.js +0 -11
  464. package/dist/cjs/global-account/react/utils/updateAvatar.d.ts +0 -4
  465. package/dist/cjs/global-account/react/utils/updateAvatar.js +0 -54
  466. package/dist/esm/global-account/react/components/AvatarCreator/AvatarCreator.d.ts +0 -6
  467. package/dist/esm/global-account/react/components/AvatarCreator/AvatarCreator.js +0 -51
  468. package/dist/esm/global-account/react/components/ProfileAvatar.d.ts +0 -0
  469. package/dist/esm/global-account/react/components/ProfileAvatar.js +0 -127
  470. package/dist/esm/global-account/react/hooks/useRPMToken.d.ts +0 -7
  471. package/dist/esm/global-account/react/hooks/useRPMToken.js +0 -8
  472. package/dist/esm/global-account/react/utils/updateAvatar.d.ts +0 -4
  473. package/dist/esm/global-account/react/utils/updateAvatar.js +0 -18
  474. package/dist/types/global-account/react/components/AvatarCreator/AvatarCreator.d.ts +0 -6
  475. package/dist/types/global-account/react/components/ProfileAvatar.d.ts +0 -0
  476. package/dist/types/global-account/react/hooks/useRPMToken.d.ts +0 -7
  477. package/dist/types/global-account/react/utils/updateAvatar.d.ts +0 -4
  478. package/src/global-account/react/components/AvatarCreator/AvatarCreator.tsx +0 -90
  479. package/src/global-account/react/components/ProfileAvatar.tsx +0 -138
  480. package/src/global-account/react/hooks/useRPMToken.ts +0 -17
  481. package/src/global-account/react/utils/updateAvatar.ts +0 -21
@@ -0,0 +1,39 @@
1
+ import { type BetterAuthSocialProvider } from "../../hooks/useBetterAuth";
2
+ export interface BetterAuthSignInProps {
3
+ /** Title displayed above the form. Default: "Welcome back" for sign-in, "Create an account" for sign-up */
4
+ title?: string;
5
+ /** Subtitle displayed below the title */
6
+ subtitle?: string;
7
+ /** Which social providers to show. Defaults to all. Pass empty array to hide. */
8
+ socialProviders?: BetterAuthSocialProvider[];
9
+ /** Show email/password form. Default: true */
10
+ showEmail?: boolean;
11
+ /** URL to redirect to after password reset link is clicked. Token is appended as ?token=... */
12
+ passwordResetRedirectTo?: string;
13
+ /**
14
+ * URL Better Auth redirects to after server-side email verification. Render
15
+ * `BetterAuthVerifyEmail` at this route so the user gets a confirmation page.
16
+ */
17
+ verifyEmailRedirectTo?: string;
18
+ /** Called after successful authentication */
19
+ onSuccess?: () => void;
20
+ /** Called on authentication error */
21
+ onError?: (error: Error) => void;
22
+ /** Optional class name for the root container */
23
+ className?: string;
24
+ }
25
+ /**
26
+ * Standalone inline sign-in component for Better Auth.
27
+ *
28
+ * Renders directly — no modal, no button wrapper. Designed for full-page
29
+ * sign-in layouts (e.g., B3OS web with branding on the left, form on the right).
30
+ *
31
+ * Usage:
32
+ * ```tsx
33
+ * <BetterAuthSignIn
34
+ * socialProviders={["google", "github"]}
35
+ * onSuccess={() => router.push("/dashboard")}
36
+ * />
37
+ * ```
38
+ */
39
+ export declare function BetterAuthSignIn({ title, subtitle, socialProviders, showEmail, passwordResetRedirectTo, verifyEmailRedirectTo, onSuccess, onError, className, }: BetterAuthSignInProps): import("react/jsx-runtime").JSX.Element | null;
@@ -0,0 +1,173 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.BetterAuthSignIn = BetterAuthSignIn;
4
+ const jsx_runtime_1 = require("react/jsx-runtime");
5
+ const react_1 = require("../../../../global-account/react");
6
+ const debug_1 = require("../../../../shared/utils/debug");
7
+ const react_2 = require("react");
8
+ const useBetterAuth_1 = require("../../hooks/useBetterAuth");
9
+ const PasswordInput_1 = require("./components/PasswordInput");
10
+ const signInUtils_1 = require("./utils/signInUtils");
11
+ const debug = (0, debug_1.debugB3React)("BetterAuthSignIn");
12
+ const EMAIL_REGEX = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
13
+ const DEFAULT_SOCIAL_PROVIDERS = [
14
+ { id: "google", label: "Google" },
15
+ { id: "github", label: "GitHub" },
16
+ { id: "discord", label: "Discord" },
17
+ { id: "microsoft", label: "Microsoft" },
18
+ { id: "slack", label: "Slack" },
19
+ ];
20
+ /**
21
+ * Standalone inline sign-in component for Better Auth.
22
+ *
23
+ * Renders directly — no modal, no button wrapper. Designed for full-page
24
+ * sign-in layouts (e.g., B3OS web with branding on the left, form on the right).
25
+ *
26
+ * Usage:
27
+ * ```tsx
28
+ * <BetterAuthSignIn
29
+ * socialProviders={["google", "github"]}
30
+ * onSuccess={() => router.push("/dashboard")}
31
+ * />
32
+ * ```
33
+ */
34
+ function BetterAuthSignIn({ title, subtitle = "Enter your credentials to access your account", socialProviders = DEFAULT_SOCIAL_PROVIDERS.map(p => p.id), showEmail = true, passwordResetRedirectTo, verifyEmailRedirectTo, onSuccess, onError, className, }) {
35
+ const { signInWithEmail, signUpWithEmail, signInWithSocial, requestPasswordReset } = (0, useBetterAuth_1.useBetterAuth)();
36
+ const isAuthenticated = (0, react_1.useAuthStore)(state => state.isAuthenticated);
37
+ const isAuthenticating = (0, react_1.useAuthStore)(state => state.isAuthenticating);
38
+ const hasStartedConnecting = (0, react_1.useAuthStore)(state => state.hasStartedConnecting);
39
+ const [mode, setMode] = (0, react_2.useState)("sign-in");
40
+ const [email, setEmail] = (0, react_2.useState)("");
41
+ const [password, setPassword] = (0, react_2.useState)("");
42
+ const [name, setName] = (0, react_2.useState)("");
43
+ const [isLoading, setIsLoading] = (0, react_2.useState)(false);
44
+ const [loadingProvider, setLoadingProvider] = (0, react_2.useState)(null);
45
+ const [error, setError] = (0, react_2.useState)(null);
46
+ const [resetEmailSent, setResetEmailSent] = (0, react_2.useState)(false);
47
+ const [verificationSent, setVerificationSent] = (0, react_2.useState)(false);
48
+ const resolvedTitle = title ||
49
+ (mode === "forgot-password" ? "Reset password" : mode === "sign-in" ? "Welcome back" : "Create an account");
50
+ const resolvedSubtitle = mode === "forgot-password"
51
+ ? resetEmailSent
52
+ ? "We've sent a password reset link to your email"
53
+ : "Enter your email and we'll send you a reset link"
54
+ : subtitle || "Enter your credentials to access your account";
55
+ const handleForgotPassword = async () => {
56
+ const normalizedEmail = email.trim().toLowerCase();
57
+ if (!EMAIL_REGEX.test(normalizedEmail)) {
58
+ setError("Please enter a valid email address");
59
+ return;
60
+ }
61
+ try {
62
+ setIsLoading(true);
63
+ setError(null);
64
+ await requestPasswordReset(normalizedEmail, passwordResetRedirectTo);
65
+ setResetEmailSent(true);
66
+ }
67
+ catch (err) {
68
+ const message = err instanceof Error ? err.message : "Failed to send reset email";
69
+ setError(message);
70
+ }
71
+ finally {
72
+ setIsLoading(false);
73
+ }
74
+ };
75
+ const providers = socialProviders
76
+ .map(id => DEFAULT_SOCIAL_PROVIDERS.find(p => p.id === id))
77
+ .filter((p) => !!p);
78
+ // Show loading during session restore (before any user interaction) to prevent
79
+ // the login form from flashing briefly after OAuth redirect.
80
+ if (isAuthenticating && !hasStartedConnecting) {
81
+ return ((0, jsx_runtime_1.jsx)("div", { className: `flex w-full max-w-[400px] items-center justify-center px-6 py-20 ${className || ""}`, children: (0, jsx_runtime_1.jsx)(react_1.Loading, { variant: "primary", size: "lg" }) }));
82
+ }
83
+ if (isAuthenticated) {
84
+ return null;
85
+ }
86
+ const handleEmailSubmit = async () => {
87
+ const normalizedEmail = email.trim().toLowerCase();
88
+ if (!EMAIL_REGEX.test(normalizedEmail)) {
89
+ setError("Please enter a valid email address");
90
+ return;
91
+ }
92
+ if (!password) {
93
+ setError("Please enter a password");
94
+ return;
95
+ }
96
+ if (mode === "sign-up" && !name.trim()) {
97
+ setError("Please enter your name");
98
+ return;
99
+ }
100
+ try {
101
+ setIsLoading(true);
102
+ setError(null);
103
+ if (mode === "sign-up") {
104
+ await signUpWithEmail(normalizedEmail, password, name.trim(), verifyEmailRedirectTo);
105
+ }
106
+ else {
107
+ await signInWithEmail(normalizedEmail, password);
108
+ }
109
+ debug("Auth successful");
110
+ onSuccess?.();
111
+ }
112
+ catch (err) {
113
+ if (err instanceof useBetterAuth_1.EmailVerificationRequiredError) {
114
+ setVerificationSent(true);
115
+ setError(null);
116
+ }
117
+ else {
118
+ const message = err instanceof Error ? err.message : "Authentication failed";
119
+ setError(message);
120
+ onError?.(err);
121
+ }
122
+ debug("Auth failed", err);
123
+ }
124
+ finally {
125
+ setPassword("");
126
+ setIsLoading(false);
127
+ }
128
+ };
129
+ const handleSocialSignIn = async (provider) => {
130
+ try {
131
+ setIsLoading(true);
132
+ setLoadingProvider(provider);
133
+ setError(null);
134
+ await signInWithSocial(provider);
135
+ }
136
+ catch (err) {
137
+ const message = err instanceof Error ? err.message : `Sign in failed`;
138
+ setError(message);
139
+ onError?.(err);
140
+ setIsLoading(false);
141
+ setLoadingProvider(null);
142
+ }
143
+ };
144
+ if (verificationSent) {
145
+ return ((0, jsx_runtime_1.jsx)("div", { className: `w-full max-w-[400px] px-6 ${className || ""}`, children: (0, jsx_runtime_1.jsxs)("div", { className: "flex flex-col items-center gap-6 text-center", children: [(0, jsx_runtime_1.jsx)("div", { className: "flex h-14 w-14 shrink-0 items-center justify-center rounded-full bg-green-100", children: (0, jsx_runtime_1.jsx)("svg", { className: "h-7 w-7 shrink-0 text-green-600", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", width: 28, height: 28, children: (0, jsx_runtime_1.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M3 8l7.89 5.26a2 2 0 002.22 0L21 8M5 19h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v10a2 2 0 002 2z" }) }) }), (0, jsx_runtime_1.jsx)("h2", { className: "text-[22px] font-semibold text-gray-900 dark:text-gray-100", children: "Check your email" }), (0, jsx_runtime_1.jsxs)("p", { className: "text-[15px] text-gray-500 dark:text-gray-400", children: ["We sent a verification link to ", (0, jsx_runtime_1.jsx)("span", { className: "font-medium text-gray-700 dark:text-gray-200", children: email }), ". Click the link to verify your account, then come back and sign in."] }), (0, jsx_runtime_1.jsx)("button", { onClick: () => {
146
+ setVerificationSent(false);
147
+ setMode("sign-in");
148
+ setPassword("");
149
+ }, className: "text-[14px] font-medium text-blue-600 hover:text-blue-500 dark:text-blue-400", children: "Back to sign in" })] }) }));
150
+ }
151
+ return ((0, jsx_runtime_1.jsxs)("div", { className: `w-full max-w-[400px] px-6 ${className || ""}`, children: [(0, jsx_runtime_1.jsxs)("div", { className: "mb-10 text-center", children: [(0, jsx_runtime_1.jsx)("h1", { className: "text-[28px] font-semibold tracking-tight text-gray-900 dark:text-gray-100", children: resolvedTitle }), (0, jsx_runtime_1.jsx)("p", { className: "mt-3 text-[15px] text-gray-500 dark:text-gray-400", children: resolvedSubtitle })] }), mode === "forgot-password" && ((0, jsx_runtime_1.jsxs)("div", { className: "space-y-5", children: [resetEmailSent ? ((0, jsx_runtime_1.jsxs)("div", { className: "space-y-4 text-center", children: [(0, jsx_runtime_1.jsx)("div", { className: "mx-auto flex h-12 w-12 items-center justify-center rounded-full bg-green-100", children: (0, jsx_runtime_1.jsx)("svg", { className: "h-6 w-6 text-green-600", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", children: (0, jsx_runtime_1.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M5 13l4 4L19 7" }) }) }), (0, jsx_runtime_1.jsx)("p", { className: "text-[15px] text-gray-600 dark:text-gray-300", children: "Check your email for a reset link." })] })) : ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsxs)("div", { children: [(0, jsx_runtime_1.jsx)("label", { className: "mb-2 block text-xs font-medium uppercase tracking-wide text-gray-700 dark:text-gray-300", children: "Email" }), (0, jsx_runtime_1.jsx)(react_1.Input, { type: "email", placeholder: "name@company.com", value: email, onChange: e => setEmail(e.target.value), disabled: isLoading, onKeyDown: e => {
152
+ if (e.key === "Enter")
153
+ handleForgotPassword();
154
+ }, className: "h-11 px-4 text-[15px]" })] }), error && (0, jsx_runtime_1.jsx)("p", { className: "text-sm text-red-500", children: error }), (0, jsx_runtime_1.jsx)(react_1.Button, { onClick: handleForgotPassword, disabled: isLoading, className: "h-11 w-full bg-gray-900 text-[15px] font-medium text-white hover:bg-gray-800 dark:bg-white dark:text-gray-900 dark:hover:bg-gray-100", children: isLoading ? "Sending..." : "Send reset link" })] })), (0, jsx_runtime_1.jsx)("p", { className: "mt-8 text-center text-[14px] text-gray-500 dark:text-gray-400", children: (0, jsx_runtime_1.jsx)("button", { onClick: () => {
155
+ setMode("sign-in");
156
+ setError(null);
157
+ setResetEmailSent(false);
158
+ }, className: "font-medium text-blue-600 hover:text-blue-500 dark:text-blue-400", children: "Back to sign in" }) })] })), showEmail && mode !== "forgot-password" && ((0, jsx_runtime_1.jsxs)("div", { className: "space-y-5", children: [mode === "sign-up" && ((0, jsx_runtime_1.jsxs)("div", { children: [(0, jsx_runtime_1.jsx)("label", { className: "mb-2 block text-xs font-medium uppercase tracking-wide text-gray-700 dark:text-gray-300", children: "Name" }), (0, jsx_runtime_1.jsx)(react_1.Input, { type: "text", placeholder: "Your name", value: name, onChange: e => setName(e.target.value), disabled: isLoading, className: "h-11 px-4 text-[15px]" })] })), (0, jsx_runtime_1.jsxs)("div", { children: [(0, jsx_runtime_1.jsx)("label", { className: "mb-2 block text-xs font-medium uppercase tracking-wide text-gray-700 dark:text-gray-300", children: "Email" }), (0, jsx_runtime_1.jsx)(react_1.Input, { type: "email", placeholder: "name@company.com", value: email, onChange: e => setEmail(e.target.value), disabled: isLoading, className: "h-11 px-4 text-[15px]" })] }), (0, jsx_runtime_1.jsxs)("div", { children: [(0, jsx_runtime_1.jsxs)("div", { className: "mb-2 flex items-center justify-between", children: [(0, jsx_runtime_1.jsx)("label", { className: "block text-xs font-medium uppercase tracking-wide text-gray-700 dark:text-gray-300", children: "Password" }), mode === "sign-in" && ((0, jsx_runtime_1.jsx)("button", { type: "button", onClick: () => {
159
+ setMode("forgot-password");
160
+ setError(null);
161
+ }, className: "text-xs font-medium text-blue-600 hover:text-blue-500 dark:text-blue-400", children: "Forgot password?" }))] }), (0, jsx_runtime_1.jsx)(PasswordInput_1.PasswordInput, { value: password, onChange: e => setPassword(e.target.value), disabled: isLoading, onKeyDown: e => {
162
+ if (e.key === "Enter")
163
+ handleEmailSubmit();
164
+ }, className: "h-11 px-4 pr-11 text-[15px]" }, mode)] }), error && (0, jsx_runtime_1.jsx)("p", { className: "text-sm text-red-500", children: error }), (0, jsx_runtime_1.jsx)(react_1.Button, { onClick: handleEmailSubmit, disabled: isLoading, className: "h-11 w-full bg-gray-900 text-[15px] font-medium text-white hover:bg-gray-800 dark:bg-white dark:text-gray-900 dark:hover:bg-gray-100", children: isLoading ? "Loading..." : mode === "sign-in" ? "Sign in" : "Sign up" })] })), providers.length > 0 && mode !== "forgot-password" && ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [showEmail && ((0, jsx_runtime_1.jsxs)("div", { className: "my-8 flex items-center gap-4", children: [(0, jsx_runtime_1.jsx)("div", { className: "h-px flex-1 bg-gray-200 dark:bg-gray-700" }), (0, jsx_runtime_1.jsx)("span", { className: "text-xs text-gray-400", children: "Or continue with" }), (0, jsx_runtime_1.jsx)("div", { className: "h-px flex-1 bg-gray-200 dark:bg-gray-700" })] })), (0, jsx_runtime_1.jsx)("div", { className: "space-y-4", children: providers.map(provider => {
165
+ const icon = signInUtils_1.strategyIcons[provider.id];
166
+ const label = signInUtils_1.strategyLabels[provider.id] || provider.label;
167
+ const isProviderLoading = loadingProvider === provider.id;
168
+ return ((0, jsx_runtime_1.jsxs)("button", { onClick: () => handleSocialSignIn(provider.id), disabled: isLoading, style: { paddingTop: "12px", paddingBottom: "12px" }, className: "flex w-full items-center justify-center gap-3 rounded-lg border border-gray-200 bg-white px-4 text-[14px] font-medium text-gray-700 transition-colors hover:bg-gray-50 disabled:opacity-50 dark:border-gray-700 dark:bg-gray-800 dark:text-gray-200 dark:hover:bg-gray-700", children: [isProviderLoading ? ((0, jsx_runtime_1.jsxs)("svg", { className: "h-5 w-5 animate-spin text-gray-400", viewBox: "0 0 24 24", fill: "none", children: [(0, jsx_runtime_1.jsx)("circle", { className: "opacity-25", cx: "12", cy: "12", r: "10", stroke: "currentColor", strokeWidth: "4" }), (0, jsx_runtime_1.jsx)("path", { className: "opacity-75", fill: "currentColor", d: "M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4z" })] })) : (icon && (0, jsx_runtime_1.jsx)("img", { src: icon, alt: "", className: "h-5 w-5" })), (0, jsx_runtime_1.jsx)("span", { children: isProviderLoading ? "Redirecting..." : label })] }, provider.id));
169
+ }) })] })), showEmail && mode !== "forgot-password" && ((0, jsx_runtime_1.jsxs)("p", { className: "mt-8 text-center text-[14px] text-gray-500 dark:text-gray-400", children: [mode === "sign-in" ? "Don't have an account? " : "Already have an account? ", (0, jsx_runtime_1.jsx)("button", { onClick: () => {
170
+ setMode(mode === "sign-in" ? "sign-up" : "sign-in");
171
+ setError(null);
172
+ }, disabled: isLoading, className: "font-medium text-blue-600 hover:text-blue-500 dark:text-blue-400", children: mode === "sign-in" ? "Sign up" : "Sign in" })] }))] }));
173
+ }
@@ -0,0 +1,37 @@
1
+ export type BetterAuthVerifyEmailState = "success" | "expired" | "invalid" | "already-verified" | "error";
2
+ export interface BetterAuthVerifyEmailProps {
3
+ /**
4
+ * Error code from the callback URL's `?error=` query param. Pass `null` /
5
+ * `undefined` when the user landed here cleanly (successful verification).
6
+ * Better Auth appends this param when server-side verification fails.
7
+ */
8
+ errorCode?: string | null;
9
+ /** Called when the user clicks the "Go to sign in" button. */
10
+ onGoToSignIn?: () => void;
11
+ /** Fallback href used when `onGoToSignIn` is not provided. Defaults to "/login". */
12
+ signInHref?: string;
13
+ /** Optional override for the success headline. */
14
+ successTitle?: string;
15
+ /** Optional override for the success body text. */
16
+ successMessage?: string;
17
+ /** Optional class name for the root container. */
18
+ className?: string;
19
+ }
20
+ /**
21
+ * Standalone email-verification confirmation page. Render on the route you
22
+ * set as `callbackURL` when calling `betterAuthClient.sendVerificationEmail`
23
+ * (or the `verifyCallbackURL` arg on `useBetterAuth().signUpWithEmail`).
24
+ *
25
+ * Better Auth verifies the token server-side before redirecting here. This
26
+ * component only displays the outcome based on the `?error=` query param.
27
+ *
28
+ * Usage:
29
+ * ```tsx
30
+ * const error = new URLSearchParams(window.location.search).get("error");
31
+ * <BetterAuthVerifyEmail
32
+ * errorCode={error}
33
+ * onGoToSignIn={() => router.push("/login")}
34
+ * />
35
+ * ```
36
+ */
37
+ export declare function BetterAuthVerifyEmail({ errorCode, onGoToSignIn, signInHref, successTitle, successMessage, className, }: BetterAuthVerifyEmailProps): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,85 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.BetterAuthVerifyEmail = BetterAuthVerifyEmail;
4
+ const jsx_runtime_1 = require("react/jsx-runtime");
5
+ const react_1 = require("../../../../global-account/react");
6
+ const debug_1 = require("../../../../shared/utils/debug");
7
+ const debug = (0, debug_1.debugB3React)("BetterAuthVerifyEmail");
8
+ function classifyError(code) {
9
+ if (!code)
10
+ return "success";
11
+ const normalized = code.toLowerCase();
12
+ // Exact matches for Better Auth's documented verification error codes.
13
+ if (normalized === "expired_token")
14
+ return "expired";
15
+ if (normalized === "invalid_token")
16
+ return "invalid";
17
+ if (normalized === "already_verified" || normalized === "email_already_verified")
18
+ return "already-verified";
19
+ // Loose fallbacks for close variants. Order matters — check "already" before
20
+ // "verified" so `email_already_verified` maps to already-verified, not invalid.
21
+ if (normalized.includes("expired"))
22
+ return "expired";
23
+ if (normalized.includes("already"))
24
+ return "already-verified";
25
+ if (normalized.includes("invalid"))
26
+ return "invalid";
27
+ return "error";
28
+ }
29
+ const COPY = {
30
+ success: {
31
+ title: "Email verified",
32
+ message: "Your email is confirmed. You can now sign in to your account.",
33
+ },
34
+ expired: {
35
+ title: "Link expired",
36
+ message: "This verification link has expired. Request a new one from the sign-in page.",
37
+ },
38
+ invalid: {
39
+ title: "Invalid link",
40
+ message: "This verification link is invalid or has already been used. Try signing in or request a new link.",
41
+ },
42
+ "already-verified": {
43
+ title: "Already verified",
44
+ message: "Your email was already confirmed. You can sign in now.",
45
+ },
46
+ error: {
47
+ title: "Verification failed",
48
+ message: "We couldn't verify your email. Request a new link from the sign-in page.",
49
+ },
50
+ };
51
+ /**
52
+ * Standalone email-verification confirmation page. Render on the route you
53
+ * set as `callbackURL` when calling `betterAuthClient.sendVerificationEmail`
54
+ * (or the `verifyCallbackURL` arg on `useBetterAuth().signUpWithEmail`).
55
+ *
56
+ * Better Auth verifies the token server-side before redirecting here. This
57
+ * component only displays the outcome based on the `?error=` query param.
58
+ *
59
+ * Usage:
60
+ * ```tsx
61
+ * const error = new URLSearchParams(window.location.search).get("error");
62
+ * <BetterAuthVerifyEmail
63
+ * errorCode={error}
64
+ * onGoToSignIn={() => router.push("/login")}
65
+ * />
66
+ * ```
67
+ */
68
+ function BetterAuthVerifyEmail({ errorCode, onGoToSignIn, signInHref = "/login", successTitle, successMessage, className, }) {
69
+ const state = classifyError(errorCode);
70
+ const isSuccess = state === "success" || state === "already-verified";
71
+ const copy = COPY[state];
72
+ const title = isSuccess && successTitle ? successTitle : copy.title;
73
+ const message = isSuccess && successMessage ? successMessage : copy.message;
74
+ debug("Rendering verify-email state", { state, errorCode });
75
+ const handleClick = () => {
76
+ if (onGoToSignIn) {
77
+ onGoToSignIn();
78
+ return;
79
+ }
80
+ if (typeof window !== "undefined") {
81
+ window.location.href = signInHref;
82
+ }
83
+ };
84
+ return ((0, jsx_runtime_1.jsx)("div", { className: `w-full max-w-[400px] px-6 ${className || ""}`, children: (0, jsx_runtime_1.jsxs)("div", { className: "space-y-6 text-center", children: [(0, jsx_runtime_1.jsx)("div", { className: `mx-auto flex h-12 w-12 items-center justify-center rounded-full ${isSuccess ? "bg-green-100" : "bg-red-100"}`, children: isSuccess ? ((0, jsx_runtime_1.jsx)("svg", { className: "h-6 w-6 text-green-600", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", "aria-hidden": "true", children: (0, jsx_runtime_1.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M5 13l4 4L19 7" }) })) : ((0, jsx_runtime_1.jsx)("svg", { className: "h-6 w-6 text-red-600", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", "aria-hidden": "true", children: (0, jsx_runtime_1.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M6 18L18 6M6 6l12 12" }) })) }), (0, jsx_runtime_1.jsxs)("div", { children: [(0, jsx_runtime_1.jsx)("h1", { className: "text-[28px] font-semibold tracking-tight text-gray-900 dark:text-gray-100", children: title }), (0, jsx_runtime_1.jsx)("p", { className: "mt-3 text-[15px] text-gray-500 dark:text-gray-400", children: message })] }), (0, jsx_runtime_1.jsx)(react_1.Button, { onClick: handleClick, className: "h-11 w-full bg-gray-900 text-[15px] font-medium text-white hover:bg-gray-800 dark:bg-white dark:text-gray-900 dark:hover:bg-gray-100", children: isSuccess ? "Go to sign in" : "Back to sign in" })] }) }));
85
+ }
@@ -12,10 +12,13 @@ const utils_1 = require("../../../../shared/utils");
12
12
  const react_2 = require("@headlessui/react");
13
13
  const react_3 = require("react");
14
14
  const react_4 = require("thirdweb/react");
15
+ const useUser_1 = require("../../hooks/useUser");
16
+ const UserAvatar_1 = require("../UserAvatar/UserAvatar");
15
17
  const ManageAccountButton_1 = require("../custom/ManageAccountButton");
16
18
  function SignIn(props) {
17
19
  const { className } = props;
18
- const { automaticallySetFirstEoa, partnerId } = (0, react_1.useB3Config)();
20
+ const { automaticallySetFirstEoa, partnerId, authStrategy } = (0, react_1.useB3Config)();
21
+ const isBetterAuth = authStrategy === "better-auth";
19
22
  const { address: globalAddress, ensName, connectedSmartWallet, connectedEOAWallet, isActiveSmartWallet, isActiveEOAWallet, smartWalletIcon, } = (0, react_1.useAccountWallet)();
20
23
  const { data: walletImage } = (0, react_4.useWalletImage)(connectedEOAWallet?.id);
21
24
  const isMobile = (0, react_1.useIsMobile)();
@@ -25,6 +28,10 @@ function SignIn(props) {
25
28
  };
26
29
  const connectedWallets = (0, react_4.useConnectedWallets)();
27
30
  const setActiveWallet = (0, react_4.useSetActiveWallet)();
31
+ // Better Auth state
32
+ const isAuthenticated = (0, react_1.useAuthStore)(state => state.isAuthenticated);
33
+ const { user } = (0, useUser_1.useUser)();
34
+ const userDisplayName = user?.username || user?.email || "Account";
28
35
  const handleSetActiveAccount = (selectedWalletId) => {
29
36
  if (!selectedWalletId ||
30
37
  !connectedWallets ||
@@ -40,12 +47,15 @@ function SignIn(props) {
40
47
  setActiveWallet(connectedEOAWallet);
41
48
  }
42
49
  }, [connectedEOAWallet, isActiveEOAWallet, setActiveWallet, automaticallySetFirstEoa]);
50
+ const isLoggedIn = isBetterAuth ? isAuthenticated : !!globalAddress;
43
51
  // Desktop version - original dropdown menu
44
- return ((0, jsx_runtime_1.jsx)(react_1.StyleRoot, { children: (0, jsx_runtime_1.jsx)(react_2.Menu, { className: `relative flex items-center ${className || ""}`, as: "div", children: globalAddress ? ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsxs)(react_2.MenuButton, { className: "bg-b3-react-background group flex h-10 items-center gap-1 rounded-xl px-3 focus:outline-none", children: [!!walletImage && ((0, jsx_runtime_1.jsx)(react_1.IPFSMediaRenderer, { src: walletImage, alt: "Wallet Image", className: "bg-b3-react-primary h-6 w-6 rounded-full object-cover opacity-100" })), (0, jsx_runtime_1.jsx)("div", { className: "text-as-primary", children: ensName ? ensName : (0, utils_1.truncateAddress)(globalAddress) })] }), (0, jsx_runtime_1.jsx)(react_2.Transition, { enter: "duration-200 ease-out", enterFrom: "scale-95 opacity-0", enterTo: "scale-100 opacity-100", leave: "duration-300 ease-out", leaveFrom: "scale-100 opacity-100", leaveTo: "scale-95 opacity-0", children: (0, jsx_runtime_1.jsx)(react_2.MenuItems, { className: "b3-root absolute -right-4 top-full min-w-64 rounded-2xl border focus:outline-none lg:right-0", modal: false,
52
+ return ((0, jsx_runtime_1.jsx)(react_1.StyleRoot, { children: (0, jsx_runtime_1.jsx)(react_2.Menu, { className: `relative flex items-center ${className || ""}`, as: "div", children: isLoggedIn ? ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsxs)(react_2.MenuButton, { className: "bg-b3-react-background group flex h-10 items-center gap-1 rounded-xl px-3 focus:outline-none", children: [isBetterAuth ? ((0, jsx_runtime_1.jsx)(UserAvatar_1.UserAvatar, { avatarUrl: user?.avatar, name: userDisplayName, size: 24 })) : (!!walletImage && ((0, jsx_runtime_1.jsx)(react_1.IPFSMediaRenderer, { src: walletImage, alt: "Wallet Image", className: "bg-b3-react-primary h-6 w-6 rounded-full object-cover opacity-100" }))), (0, jsx_runtime_1.jsx)("div", { className: "text-as-primary", children: isBetterAuth ? userDisplayName : ensName ? ensName : (0, utils_1.truncateAddress)(globalAddress ?? "") })] }), (0, jsx_runtime_1.jsx)(react_2.Transition, { enter: "duration-200 ease-out", enterFrom: "scale-95 opacity-0", enterTo: "scale-100 opacity-100", leave: "duration-300 ease-out", leaveFrom: "scale-100 opacity-100", leaveTo: "scale-95 opacity-0", children: (0, jsx_runtime_1.jsx)(react_2.MenuItems, { className: "b3-root absolute -right-4 top-full min-w-64 rounded-2xl border focus:outline-none lg:right-0", modal: false,
45
53
  // TODO: Figure out why setting anchor on mobile causes z-index issues where it appears under elements
46
- anchor: isMobile ? "top end" : undefined, children: (0, jsx_runtime_1.jsxs)("div", { className: "bg-b3-react-background", children: [connectedEOAWallet ? ((0, jsx_runtime_1.jsxs)("div", { className: (0, utils_1.cn)("border-b3-react-subtle bg-b3-react-background flex cursor-pointer items-center justify-between rounded-xl p-3"), onClick: () => handleSetActiveAccount(connectedEOAWallet?.id), children: [(0, jsx_runtime_1.jsxs)("div", { className: "flex items-center", children: [(0, jsx_runtime_1.jsx)("img", { className: "bg-b3-react-primary h-16 w-16 rounded-full opacity-100", src: walletImage, alt: connectedEOAWallet?.id }), (0, jsx_runtime_1.jsxs)("div", { className: "ml-4 grow", children: [ensName && (0, jsx_runtime_1.jsx)("div", { children: ensName }), (0, jsx_runtime_1.jsx)("div", { children: (0, utils_1.truncateAddress)(globalAddress) })] })] }), isActiveEOAWallet && (0, jsx_runtime_1.jsx)(Icon_1.default, { className: "fill-b3-react-primary", name: "check" })] })) : (connectedSmartWallet && ((0, jsx_runtime_1.jsxs)("div", { className: (0, utils_1.cn)("mb-2 flex cursor-pointer items-center justify-between rounded-xl p-3", isActiveSmartWallet
54
+ anchor: isMobile ? "top end" : undefined, children: (0, jsx_runtime_1.jsxs)("div", { className: "bg-b3-react-background", children: [isBetterAuth ? (
55
+ /* Better Auth: show user info instead of wallet switching */
56
+ (0, jsx_runtime_1.jsxs)("div", { className: "flex items-center gap-3 rounded-xl p-3", children: [(0, jsx_runtime_1.jsx)(UserAvatar_1.UserAvatar, { avatarUrl: user?.avatar, name: userDisplayName, size: 48 }), (0, jsx_runtime_1.jsxs)("div", { className: "flex flex-col gap-0.5", children: [user?.username && (0, jsx_runtime_1.jsx)("div", { className: "text-b3-react-primary font-semibold", children: user.username }), user?.email && (0, jsx_runtime_1.jsx)("div", { className: "text-b3-react-secondary text-sm", children: user.email })] })] })) : connectedEOAWallet ? ((0, jsx_runtime_1.jsxs)("div", { className: (0, utils_1.cn)("border-b3-react-subtle bg-b3-react-background flex cursor-pointer items-center justify-between rounded-xl p-3"), onClick: () => handleSetActiveAccount(connectedEOAWallet?.id), children: [(0, jsx_runtime_1.jsxs)("div", { className: "flex items-center", children: [(0, jsx_runtime_1.jsx)("img", { className: "bg-b3-react-primary h-16 w-16 rounded-full opacity-100", src: walletImage, alt: connectedEOAWallet?.id }), (0, jsx_runtime_1.jsxs)("div", { className: "ml-4 grow", children: [ensName && (0, jsx_runtime_1.jsx)("div", { children: ensName }), (0, jsx_runtime_1.jsx)("div", { children: (0, utils_1.truncateAddress)(globalAddress ?? "") })] })] }), isActiveEOAWallet && (0, jsx_runtime_1.jsx)(Icon_1.default, { className: "fill-b3-react-primary", name: "check" })] })) : (connectedSmartWallet && ((0, jsx_runtime_1.jsxs)("div", { className: (0, utils_1.cn)("mb-2 flex cursor-pointer items-center justify-between rounded-xl p-3", isActiveSmartWallet
47
57
  ? "bg-b3-react-background"
48
- : "bg-b3-react-background hover:bg-b3-react-background"), onClick: () => handleSetActiveAccount(connectedSmartWallet?.id), children: [(0, jsx_runtime_1.jsxs)("div", { className: "flex items-center", children: [(0, jsx_runtime_1.jsx)("img", { className: "bg-b3-react-primary h-16 w-16 rounded-full opacity-100", src: smartWalletIcon, alt: connectedSmartWallet?.id }), (0, jsx_runtime_1.jsxs)("div", { className: "grow pl-4", children: [ensName && (0, jsx_runtime_1.jsx)("div", { children: ensName }), (0, jsx_runtime_1.jsx)("div", { children: (0, utils_1.truncateAddress)(globalAddress) }), (0, jsx_runtime_1.jsx)("div", { children: "Smart wallet" })] })] }), isActiveSmartWallet && (0, jsx_runtime_1.jsx)(Icon_1.default, { className: "fill-b3-react-primary", name: "check" })] }))), (0, jsx_runtime_1.jsx)("div", { className: "ml-3", children: (0, jsx_runtime_1.jsx)(ManageAccountButton_1.ManageAccountButton, { ...props, className: "w-[calc(100%-12px)]" }) }), (0, jsx_runtime_1.jsx)("button", { className: "mb-2 w-full space-y-1", onClick: onDisconnect, children: (0, jsx_runtime_1.jsxs)("div", { className: "hover:bg-b3-react-background group flex h-12 items-center rounded-xl px-4 transition-colors", children: [(0, jsx_runtime_1.jsx)(Icon_1.default, { className: "fill-b3-react-primary mr-4 shrink-0 transition-colors", name: "logout" }), (0, jsx_runtime_1.jsx)("div", { className: "text-b3-react-primary mr-auto transition-colors", children: "Disconnect" })] }) })] }) }) })] })) : ((0, jsx_runtime_1.jsx)(react_1.SignInWithB3, { closeAfterLogin: true, onLoginSuccess: async (globalAccount) => {
58
+ : "bg-b3-react-background hover:bg-b3-react-background"), onClick: () => handleSetActiveAccount(connectedSmartWallet?.id), children: [(0, jsx_runtime_1.jsxs)("div", { className: "flex items-center", children: [(0, jsx_runtime_1.jsx)("img", { className: "bg-b3-react-primary h-16 w-16 rounded-full opacity-100", src: smartWalletIcon, alt: connectedSmartWallet?.id }), (0, jsx_runtime_1.jsxs)("div", { className: "grow pl-4", children: [ensName && (0, jsx_runtime_1.jsx)("div", { children: ensName }), (0, jsx_runtime_1.jsx)("div", { children: (0, utils_1.truncateAddress)(globalAddress ?? "") }), (0, jsx_runtime_1.jsx)("div", { children: "Smart wallet" })] })] }), isActiveSmartWallet && (0, jsx_runtime_1.jsx)(Icon_1.default, { className: "fill-b3-react-primary", name: "check" })] }))), (0, jsx_runtime_1.jsx)("div", { className: "ml-3", children: (0, jsx_runtime_1.jsx)(ManageAccountButton_1.ManageAccountButton, { ...props, className: "w-[calc(100%-12px)]" }) }), (0, jsx_runtime_1.jsx)("button", { className: "mb-2 w-full space-y-1", onClick: onDisconnect, children: (0, jsx_runtime_1.jsxs)("div", { className: "hover:bg-b3-react-background group flex h-12 items-center rounded-xl px-4 transition-colors", children: [(0, jsx_runtime_1.jsx)(Icon_1.default, { className: "fill-b3-react-primary mr-4 shrink-0 transition-colors", name: "logout" }), (0, jsx_runtime_1.jsx)("div", { className: "text-b3-react-primary mr-auto transition-colors", children: isBetterAuth ? "Sign out" : "Disconnect" })] }) })] }) }) })] })) : ((0, jsx_runtime_1.jsx)(react_1.SignInWithB3, { closeAfterLogin: true, onLoginSuccess: async (globalAccount) => {
49
59
  console.log("User authenticated with Global Account!", globalAccount);
50
60
  }, ...props })) }) }));
51
61
  }
@@ -3,4 +3,4 @@ import { SignInWithB3ModalProps } from "../../../../global-account/react";
3
3
  * Component that manages the authentication flow for Sign In With B3
4
4
  * Handles different login providers, authentication steps, and session key management
5
5
  */
6
- export declare function SignInWithB3Flow({ strategies, onLoginSuccess, onSessionKeySuccess, onError, chain, sessionKeyAddress, partnerId, closeAfterLogin, source, signersEnabled, }: SignInWithB3ModalProps): import("react/jsx-runtime").JSX.Element | null;
6
+ export declare function SignInWithB3Flow({ strategies, onLoginSuccess, onSessionKeySuccess, onError, chain, sessionKeyAddress, partnerId, closeAfterLogin, source, signersEnabled, verifyEmailRedirectTo, }: SignInWithB3ModalProps): import("react/jsx-runtime").JSX.Element | null;
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.SignInWithB3Flow = SignInWithB3Flow;
4
4
  const jsx_runtime_1 = require("react/jsx-runtime");
5
5
  const react_1 = require("../../../../global-account/react");
6
+ const LoginStepBetterAuth_1 = require("./steps/LoginStepBetterAuth");
6
7
  const debug_1 = require("../../../../shared/utils/debug");
7
8
  const react_2 = require("react");
8
9
  const react_3 = require("thirdweb/react");
@@ -15,19 +16,21 @@ const MAX_REFETCH_ATTEMPTS = 20;
15
16
  * Component that manages the authentication flow for Sign In With B3
16
17
  * Handles different login providers, authentication steps, and session key management
17
18
  */
18
- function SignInWithB3Flow({ strategies, onLoginSuccess, onSessionKeySuccess, onError, chain, sessionKeyAddress, partnerId, closeAfterLogin = false, source = "signInWithB3Button", signersEnabled = false, }) {
19
- const { automaticallySetFirstEoa } = (0, react_1.useB3Config)();
19
+ function SignInWithB3Flow({ strategies, onLoginSuccess, onSessionKeySuccess, onError, chain, sessionKeyAddress, partnerId, closeAfterLogin = false, source = "signInWithB3Button", signersEnabled = false, verifyEmailRedirectTo, }) {
20
+ const { automaticallySetFirstEoa, authStrategy } = (0, react_1.useB3Config)();
20
21
  // skipAutoConnect: this component intentionally logs out on mount to show a fresh login screen.
21
22
  // AuthenticationProvider is the sole owner of useAutoConnect to avoid competing auth cycles.
22
23
  const { user, logout } = (0, react_1.useAuthentication)(partnerId, { skipAutoConnect: true });
23
24
  // Tracks whether the pre-login logout has finished.
24
25
  // We must not render ConnectEmbed until logout (wallet disconnect) completes,
25
26
  // otherwise the wallet state disrupts ConnectEmbed causing a blank modal.
26
- const [readyToShowLogin, setReadyToShowLogin] = (0, react_2.useState)(source === "requestPermissions");
27
+ const [readyToShowLogin, setReadyToShowLogin] = (0, react_2.useState)(source === "requestPermissions" || authStrategy === "better-auth");
27
28
  const hasLoggedOutRef = (0, react_2.useRef)(false);
28
29
  (0, react_2.useEffect)(() => {
29
30
  if (hasLoggedOutRef.current)
30
31
  return;
32
+ if (authStrategy === "better-auth")
33
+ return;
31
34
  if (source !== "requestPermissions") {
32
35
  debug("Logging out before login");
33
36
  hasLoggedOutRef.current = true;
@@ -35,7 +38,7 @@ function SignInWithB3Flow({ strategies, onLoginSuccess, onSessionKeySuccess, onE
35
38
  setReadyToShowLogin(true);
36
39
  });
37
40
  }
38
- }, [source, logout]);
41
+ }, [source, logout, authStrategy]);
39
42
  const [step, setStep] = (0, react_2.useState)(source === "requestPermissions" ? null : "login");
40
43
  const [sessionKeyAdded, setSessionKeyAdded] = (0, react_2.useState)(source === "requestPermissions" ? true : false);
41
44
  const { setB3ModalContentType, setB3ModalOpen, isOpen, contentType } = (0, react_1.useModalStore)();
@@ -240,7 +243,13 @@ function SignInWithB3Flow({ strategies, onLoginSuccess, onSessionKeySuccess, onE
240
243
  else if (step === "login") {
241
244
  // Show loading spinner while: authenticating, waiting for pre-login logout to finish,
242
245
  // or fetching signers.
243
- if (!readyToShowLogin || isAuthenticating || isFetchingSigners) {
246
+ if (authStrategy === "better-auth") {
247
+ // Better Auth manages its own loading/verification states internally.
248
+ // Don't gate on isAuthenticating — it would unmount the component
249
+ // and lose verification state when setIsAuthenticating(false) fires.
250
+ content = ((0, jsx_runtime_1.jsx)(LoginStepBetterAuth_1.LoginStepBetterAuth, { onSuccess: () => handleLoginSuccess({}), onError: onError, verifyEmailRedirectTo: verifyEmailRedirectTo }));
251
+ }
252
+ else if (!readyToShowLogin || isAuthenticating || isFetchingSigners) {
244
253
  content = ((0, jsx_runtime_1.jsx)(LoginStep_1.LoginStepContainer, { partnerId: partnerId, children: (0, jsx_runtime_1.jsx)("div", { className: "my-8 flex min-h-[350px] items-center justify-center", children: (0, jsx_runtime_1.jsx)(react_1.Loading, { variant: "white", size: "lg" }) }) }));
245
254
  }
246
255
  else {
@@ -3,7 +3,16 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.AuthButton = AuthButton;
4
4
  const jsx_runtime_1 = require("react/jsx-runtime");
5
5
  const Button_1 = require("../../custom/Button");
6
+ const lucide_react_1 = require("lucide-react");
6
7
  const signInUtils_1 = require("../utils/signInUtils");
8
+ const fallbackIcons = {
9
+ github: lucide_react_1.Github,
10
+ email: lucide_react_1.Mail,
11
+ };
7
12
  function AuthButton({ strategy, onClick, isLoading, }) {
8
- return ((0, jsx_runtime_1.jsx)(Button_1.Button, { onClick: onClick, disabled: isLoading, className: "flex w-full items-center justify-center bg-gray-100 px-2 py-3 hover:bg-gray-200 dark:bg-gray-800 dark:hover:bg-gray-700", children: (0, jsx_runtime_1.jsx)("img", { src: signInUtils_1.strategyIcons[strategy], className: "h-9 w-9" }) }, strategy));
13
+ const strategyIcon = signInUtils_1.strategyIcons[strategy];
14
+ const strategyLabel = signInUtils_1.strategyLabels[strategy] || strategy;
15
+ const FallbackIcon = fallbackIcons[strategy];
16
+ const buttonLabel = `Sign in with ${strategyLabel}`;
17
+ return ((0, jsx_runtime_1.jsx)(Button_1.Button, { onClick: onClick, disabled: isLoading, "aria-label": buttonLabel, title: buttonLabel, className: "flex w-full items-center justify-center bg-gray-100 px-2 py-3 hover:bg-gray-200 dark:bg-gray-800 dark:hover:bg-gray-700", children: strategyIcon ? ((0, jsx_runtime_1.jsx)("img", { src: strategyIcon, alt: `${strategyLabel} icon`, className: "h-9 w-9" })) : FallbackIcon ? ((0, jsx_runtime_1.jsx)(FallbackIcon, { className: "h-9 w-9 text-gray-900 dark:text-gray-100" })) : ((0, jsx_runtime_1.jsx)("span", { className: "text-sm font-semibold text-gray-900 dark:text-gray-100", children: strategyLabel.charAt(0) })) }, strategy));
9
18
  }
@@ -0,0 +1,10 @@
1
+ interface PasswordInputProps {
2
+ value: string;
3
+ onChange: (e: React.ChangeEvent<HTMLInputElement>) => void;
4
+ disabled?: boolean;
5
+ placeholder?: string;
6
+ onKeyDown?: (e: React.KeyboardEvent<HTMLInputElement>) => void;
7
+ className?: string;
8
+ }
9
+ export declare function PasswordInput({ value, onChange, disabled, placeholder, onKeyDown, className, }: PasswordInputProps): import("react/jsx-runtime").JSX.Element;
10
+ export {};
@@ -0,0 +1,10 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PasswordInput = PasswordInput;
4
+ const jsx_runtime_1 = require("react/jsx-runtime");
5
+ const react_1 = require("../../../../../global-account/react");
6
+ const react_2 = require("react");
7
+ function PasswordInput({ value, onChange, disabled, placeholder = "Password", onKeyDown, className, }) {
8
+ const [showPassword, setShowPassword] = (0, react_2.useState)(false);
9
+ return ((0, jsx_runtime_1.jsxs)("div", { className: "relative", children: [(0, jsx_runtime_1.jsx)(react_1.Input, { type: showPassword ? "text" : "password", placeholder: placeholder, value: value, onChange: onChange, disabled: disabled, onKeyDown: onKeyDown, className: className }), (0, jsx_runtime_1.jsx)("button", { type: "button", onClick: () => setShowPassword(!showPassword), "aria-label": showPassword ? "Hide password" : "Show password", className: "absolute right-3 top-1/2 -translate-y-1/2 text-gray-400 hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-300", tabIndex: -1, children: showPassword ? ((0, jsx_runtime_1.jsx)("svg", { className: "h-5 w-5", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.5, children: (0, jsx_runtime_1.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M3.98 8.223A10.477 10.477 0 001.934 12C3.226 16.338 7.244 19.5 12 19.5c.993 0 1.953-.138 2.863-.395M6.228 6.228A10.45 10.45 0 0112 4.5c4.756 0 8.773 3.162 10.065 7.498a10.523 10.523 0 01-4.293 5.774M6.228 6.228L3 3m3.228 3.228l3.65 3.65m7.894 7.894L21 21m-3.228-3.228l-3.65-3.65m0 0a3 3 0 10-4.243-4.243m4.242 4.242L9.88 9.88" }) })) : ((0, jsx_runtime_1.jsxs)("svg", { className: "h-5 w-5", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 1.5, children: [(0, jsx_runtime_1.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M2.036 12.322a1.012 1.012 0 010-.639C3.423 7.51 7.36 4.5 12 4.5c4.638 0 8.573 3.007 9.963 7.178.07.207.07.431 0 .639C20.577 16.49 16.64 19.5 12 19.5c-4.638 0-8.573-3.007-9.963-7.178z" }), (0, jsx_runtime_1.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M15 12a3 3 0 11-6 0 3 3 0 016 0z" })] })) })] }));
10
+ }
@@ -0,0 +1,8 @@
1
+ interface LoginStepBetterAuthProps {
2
+ onSuccess?: () => void;
3
+ onError?: (error: Error) => Promise<void>;
4
+ /** URL Better Auth redirects to after server-side email verification. */
5
+ verifyEmailRedirectTo?: string;
6
+ }
7
+ export declare function LoginStepBetterAuth({ onSuccess, onError, verifyEmailRedirectTo }: LoginStepBetterAuthProps): import("react/jsx-runtime").JSX.Element;
8
+ export {};