@b3dotfun/sdk 0.0.88-alpha.5 → 0.0.88-alpha.7

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 (198) hide show
  1. package/dist/cjs/anyspend/react/components/AnySpend.d.ts +6 -0
  2. package/dist/cjs/anyspend/react/components/AnySpend.js +5 -5
  3. package/dist/cjs/anyspend/react/components/AnySpendCustomExactIn.d.ts +6 -0
  4. package/dist/cjs/anyspend/react/components/AnySpendCustomExactIn.js +3 -3
  5. package/dist/cjs/anyspend/react/components/AnySpendDeposit.d.ts +7 -1
  6. package/dist/cjs/anyspend/react/components/AnySpendDeposit.js +2 -2
  7. package/dist/cjs/anyspend/react/components/AnyspendDepositHype.d.ts +4 -0
  8. package/dist/cjs/anyspend/react/components/common/CryptoReceiveSection.d.ts +3 -1
  9. package/dist/cjs/anyspend/react/components/common/CryptoReceiveSection.js +3 -2
  10. package/dist/cjs/anyspend/react/components/common/OrderDetails.d.ts +4 -0
  11. package/dist/cjs/anyspend/react/components/common/OrderDetails.js +33 -5
  12. package/dist/cjs/anyspend/react/components/common/PanelOnramp.d.ts +3 -1
  13. package/dist/cjs/anyspend/react/components/common/PanelOnramp.js +3 -2
  14. package/dist/cjs/anyspend/react/components/common/PaymentStripeWeb2.js +3 -4
  15. package/dist/cjs/anyspend/react/hooks/useAnyspendCreateOnrampOrder.js +1 -1
  16. package/dist/cjs/anyspend/react/hooks/useAnyspendCreateOrder.js +1 -1
  17. package/dist/cjs/anyspend/react/hooks/useCreateDepositFirstOrder.js +1 -1
  18. package/dist/cjs/anyspend/react/hooks/useValidatedClientReferenceId.js +1 -1
  19. package/dist/cjs/global-account/react/components/B3DynamicModal.js +2 -3
  20. package/dist/cjs/global-account/react/components/B3Provider/AuthenticationProvider.d.ts +5 -0
  21. package/dist/cjs/global-account/react/components/B3Provider/AuthenticationProvider.js +12 -0
  22. package/dist/cjs/global-account/react/components/B3Provider/B3Provider.d.ts +2 -18
  23. package/dist/cjs/global-account/react/components/B3Provider/B3Provider.js +23 -57
  24. package/dist/cjs/global-account/react/components/B3Provider/B3Provider.native.d.ts +5 -5
  25. package/dist/cjs/global-account/react/components/B3Provider/B3Provider.native.js +38 -35
  26. package/dist/cjs/global-account/react/components/B3Provider/useB3.d.ts +14 -4
  27. package/dist/cjs/global-account/react/components/B3Provider/useB3.js +4 -11
  28. package/dist/cjs/global-account/react/components/B3Provider/useB3Account.js +5 -2
  29. package/dist/cjs/global-account/react/components/B3Provider/useB3Config.d.ts +10 -2
  30. package/dist/cjs/global-account/react/components/B3Provider/useB3Config.js +18 -17
  31. package/dist/cjs/global-account/react/components/ManageAccount/ProfileSection.js +1 -2
  32. package/dist/cjs/global-account/react/components/ManageAccount/channels/DiscordChannel.js +6 -6
  33. package/dist/cjs/global-account/react/components/ManageAccount/channels/EmailChannel.js +7 -7
  34. package/dist/cjs/global-account/react/components/ManageAccount/channels/PhoneChannel.js +7 -7
  35. package/dist/cjs/global-account/react/components/ManageAccount/channels/TelegramChannel.js +5 -5
  36. package/dist/cjs/global-account/react/components/RequestPermissions/RequestPermissions.js +8 -9
  37. package/dist/cjs/global-account/react/components/SignInWithB3/SignIn.js +1 -1
  38. package/dist/cjs/global-account/react/components/SignInWithB3/SignInWithB3Privy.js +1 -1
  39. package/dist/cjs/global-account/react/components/SignInWithB3/steps/LoginStep.js +1 -1
  40. package/dist/cjs/global-account/react/components/SignInWithB3/steps/LoginStepCustom.js +1 -1
  41. package/dist/cjs/global-account/react/components/StyleRoot.js +3 -3
  42. package/dist/cjs/global-account/react/components/custom/ManageAccountButton.js +1 -2
  43. package/dist/cjs/global-account/react/components/index.d.ts +1 -2
  44. package/dist/cjs/global-account/react/components/index.js +3 -6
  45. package/dist/cjs/global-account/react/hooks/index.d.ts +1 -0
  46. package/dist/cjs/global-account/react/hooks/index.js +3 -1
  47. package/dist/cjs/global-account/react/hooks/useAuth.js +1 -2
  48. package/dist/cjs/global-account/react/hooks/useClient.js +1 -1
  49. package/dist/cjs/global-account/react/hooks/useHandleConnectWithPrivy.js +1 -1
  50. package/dist/cjs/global-account/react/hooks/useNotifications.js +14 -14
  51. package/dist/cjs/global-account/react/hooks/useTokenBalance.js +5 -5
  52. package/dist/cjs/global-account/react/hooks/useUser.d.ts +60 -0
  53. package/dist/cjs/global-account/react/hooks/useUser.js +20 -0
  54. package/dist/cjs/global-account/react/hooks/useUserQuery.js +9 -35
  55. package/dist/cjs/global-account/react/index.native.d.ts +0 -2
  56. package/dist/cjs/global-account/react/index.native.js +1 -5
  57. package/dist/cjs/global-account/react/stores/configStore.d.ts +24 -0
  58. package/dist/cjs/global-account/react/stores/configStore.js +30 -0
  59. package/dist/cjs/global-account/react/stores/index.d.ts +1 -0
  60. package/dist/cjs/global-account/react/stores/index.js +3 -1
  61. package/dist/cjs/global-account/react/stores/useModalStore.d.ts +6 -0
  62. package/dist/cjs/global-account/react/stores/userStore.d.ts +22 -0
  63. package/dist/cjs/global-account/react/stores/userStore.js +30 -0
  64. package/dist/esm/anyspend/react/components/AnySpend.d.ts +6 -0
  65. package/dist/esm/anyspend/react/components/AnySpend.js +6 -6
  66. package/dist/esm/anyspend/react/components/AnySpendCustomExactIn.d.ts +6 -0
  67. package/dist/esm/anyspend/react/components/AnySpendCustomExactIn.js +3 -3
  68. package/dist/esm/anyspend/react/components/AnySpendDeposit.d.ts +7 -1
  69. package/dist/esm/anyspend/react/components/AnySpendDeposit.js +2 -2
  70. package/dist/esm/anyspend/react/components/AnyspendDepositHype.d.ts +4 -0
  71. package/dist/esm/anyspend/react/components/common/CryptoReceiveSection.d.ts +3 -1
  72. package/dist/esm/anyspend/react/components/common/CryptoReceiveSection.js +3 -2
  73. package/dist/esm/anyspend/react/components/common/OrderDetails.d.ts +4 -0
  74. package/dist/esm/anyspend/react/components/common/OrderDetails.js +35 -7
  75. package/dist/esm/anyspend/react/components/common/PanelOnramp.d.ts +3 -1
  76. package/dist/esm/anyspend/react/components/common/PanelOnramp.js +3 -2
  77. package/dist/esm/anyspend/react/components/common/PaymentStripeWeb2.js +3 -4
  78. package/dist/esm/anyspend/react/hooks/useAnyspendCreateOnrampOrder.js +2 -2
  79. package/dist/esm/anyspend/react/hooks/useAnyspendCreateOrder.js +2 -2
  80. package/dist/esm/anyspend/react/hooks/useCreateDepositFirstOrder.js +2 -2
  81. package/dist/esm/anyspend/react/hooks/useValidatedClientReferenceId.js +2 -2
  82. package/dist/esm/global-account/react/components/B3DynamicModal.js +3 -4
  83. package/dist/esm/global-account/react/components/B3Provider/AuthenticationProvider.d.ts +5 -0
  84. package/dist/esm/global-account/react/components/B3Provider/AuthenticationProvider.js +10 -0
  85. package/dist/esm/global-account/react/components/B3Provider/B3Provider.d.ts +2 -18
  86. package/dist/esm/global-account/react/components/B3Provider/B3Provider.js +22 -58
  87. package/dist/esm/global-account/react/components/B3Provider/B3Provider.native.d.ts +5 -5
  88. package/dist/esm/global-account/react/components/B3Provider/B3Provider.native.js +36 -36
  89. package/dist/esm/global-account/react/components/B3Provider/useB3.d.ts +14 -4
  90. package/dist/esm/global-account/react/components/B3Provider/useB3.js +4 -11
  91. package/dist/esm/global-account/react/components/B3Provider/useB3Account.js +5 -2
  92. package/dist/esm/global-account/react/components/B3Provider/useB3Config.d.ts +10 -2
  93. package/dist/esm/global-account/react/components/B3Provider/useB3Config.js +18 -17
  94. package/dist/esm/global-account/react/components/ManageAccount/ProfileSection.js +2 -3
  95. package/dist/esm/global-account/react/components/ManageAccount/channels/DiscordChannel.js +2 -2
  96. package/dist/esm/global-account/react/components/ManageAccount/channels/EmailChannel.js +2 -2
  97. package/dist/esm/global-account/react/components/ManageAccount/channels/PhoneChannel.js +2 -2
  98. package/dist/esm/global-account/react/components/ManageAccount/channels/TelegramChannel.js +2 -2
  99. package/dist/esm/global-account/react/components/RequestPermissions/RequestPermissions.js +2 -3
  100. package/dist/esm/global-account/react/components/SignInWithB3/SignIn.js +2 -2
  101. package/dist/esm/global-account/react/components/SignInWithB3/SignInWithB3Privy.js +2 -2
  102. package/dist/esm/global-account/react/components/SignInWithB3/steps/LoginStep.js +2 -2
  103. package/dist/esm/global-account/react/components/SignInWithB3/steps/LoginStepCustom.js +2 -2
  104. package/dist/esm/global-account/react/components/StyleRoot.js +3 -3
  105. package/dist/esm/global-account/react/components/custom/ManageAccountButton.js +2 -3
  106. package/dist/esm/global-account/react/components/index.d.ts +1 -2
  107. package/dist/esm/global-account/react/components/index.js +1 -2
  108. package/dist/esm/global-account/react/hooks/index.d.ts +1 -0
  109. package/dist/esm/global-account/react/hooks/index.js +1 -0
  110. package/dist/esm/global-account/react/hooks/useAuth.js +2 -3
  111. package/dist/esm/global-account/react/hooks/useClient.js +2 -2
  112. package/dist/esm/global-account/react/hooks/useHandleConnectWithPrivy.js +2 -2
  113. package/dist/esm/global-account/react/hooks/useNotifications.js +2 -2
  114. package/dist/esm/global-account/react/hooks/useTokenBalance.js +6 -6
  115. package/dist/esm/global-account/react/hooks/useUser.d.ts +60 -0
  116. package/dist/esm/global-account/react/hooks/useUser.js +17 -0
  117. package/dist/esm/global-account/react/hooks/useUserQuery.js +1 -27
  118. package/dist/esm/global-account/react/index.native.d.ts +0 -2
  119. package/dist/esm/global-account/react/index.native.js +0 -2
  120. package/dist/esm/global-account/react/stores/configStore.d.ts +24 -0
  121. package/dist/esm/global-account/react/stores/configStore.js +27 -0
  122. package/dist/esm/global-account/react/stores/index.d.ts +1 -0
  123. package/dist/esm/global-account/react/stores/index.js +1 -0
  124. package/dist/esm/global-account/react/stores/useModalStore.d.ts +6 -0
  125. package/dist/esm/global-account/react/stores/userStore.d.ts +22 -0
  126. package/dist/esm/global-account/react/stores/userStore.js +27 -0
  127. package/dist/types/anyspend/react/components/AnySpend.d.ts +6 -0
  128. package/dist/types/anyspend/react/components/AnySpendCustomExactIn.d.ts +6 -0
  129. package/dist/types/anyspend/react/components/AnySpendDeposit.d.ts +7 -1
  130. package/dist/types/anyspend/react/components/AnyspendDepositHype.d.ts +4 -0
  131. package/dist/types/anyspend/react/components/common/CryptoReceiveSection.d.ts +3 -1
  132. package/dist/types/anyspend/react/components/common/OrderDetails.d.ts +4 -0
  133. package/dist/types/anyspend/react/components/common/PanelOnramp.d.ts +3 -1
  134. package/dist/types/global-account/react/components/B3Provider/AuthenticationProvider.d.ts +5 -0
  135. package/dist/types/global-account/react/components/B3Provider/B3Provider.d.ts +2 -18
  136. package/dist/types/global-account/react/components/B3Provider/B3Provider.native.d.ts +5 -5
  137. package/dist/types/global-account/react/components/B3Provider/useB3.d.ts +14 -4
  138. package/dist/types/global-account/react/components/B3Provider/useB3Config.d.ts +10 -2
  139. package/dist/types/global-account/react/components/index.d.ts +1 -2
  140. package/dist/types/global-account/react/hooks/index.d.ts +1 -0
  141. package/dist/types/global-account/react/hooks/useUser.d.ts +60 -0
  142. package/dist/types/global-account/react/index.native.d.ts +0 -2
  143. package/dist/types/global-account/react/stores/configStore.d.ts +24 -0
  144. package/dist/types/global-account/react/stores/index.d.ts +1 -0
  145. package/dist/types/global-account/react/stores/useModalStore.d.ts +6 -0
  146. package/dist/types/global-account/react/stores/userStore.d.ts +22 -0
  147. package/package.json +1 -1
  148. package/src/anyspend/react/components/AnySpend.tsx +18 -2
  149. package/src/anyspend/react/components/AnySpendCustomExactIn.tsx +13 -0
  150. package/src/anyspend/react/components/AnySpendDeposit.tsx +15 -0
  151. package/src/anyspend/react/components/AnyspendDepositHype.tsx +4 -0
  152. package/src/anyspend/react/components/common/CryptoReceiveSection.tsx +5 -1
  153. package/src/anyspend/react/components/common/OrderDetails.tsx +54 -42
  154. package/src/anyspend/react/components/common/PanelOnramp.tsx +5 -1
  155. package/src/anyspend/react/components/common/PaymentStripeWeb2.tsx +3 -4
  156. package/src/anyspend/react/hooks/useAnyspendCreateOnrampOrder.ts +2 -2
  157. package/src/anyspend/react/hooks/useAnyspendCreateOrder.ts +2 -2
  158. package/src/anyspend/react/hooks/useCreateDepositFirstOrder.ts +2 -2
  159. package/src/anyspend/react/hooks/useValidatedClientReferenceId.ts +2 -2
  160. package/src/global-account/react/components/B3DynamicModal.tsx +3 -4
  161. package/src/global-account/react/components/B3Provider/AuthenticationProvider.tsx +19 -0
  162. package/src/global-account/react/components/B3Provider/B3Provider.native.tsx +43 -54
  163. package/src/global-account/react/components/B3Provider/B3Provider.tsx +32 -117
  164. package/src/global-account/react/components/B3Provider/useB3.ts +4 -13
  165. package/src/global-account/react/components/B3Provider/useB3Account.ts +6 -2
  166. package/src/global-account/react/components/B3Provider/useB3Config.ts +18 -31
  167. package/src/global-account/react/components/ManageAccount/ProfileSection.tsx +2 -4
  168. package/src/global-account/react/components/ManageAccount/channels/DiscordChannel.tsx +2 -2
  169. package/src/global-account/react/components/ManageAccount/channels/EmailChannel.tsx +2 -2
  170. package/src/global-account/react/components/ManageAccount/channels/PhoneChannel.tsx +2 -2
  171. package/src/global-account/react/components/ManageAccount/channels/TelegramChannel.tsx +2 -2
  172. package/src/global-account/react/components/RequestPermissions/RequestPermissions.tsx +4 -4
  173. package/src/global-account/react/components/SignInWithB3/SignIn.tsx +2 -2
  174. package/src/global-account/react/components/SignInWithB3/SignInWithB3Privy.tsx +2 -2
  175. package/src/global-account/react/components/SignInWithB3/steps/LoginStep.tsx +2 -2
  176. package/src/global-account/react/components/SignInWithB3/steps/LoginStepCustom.tsx +2 -2
  177. package/src/global-account/react/components/StyleRoot.tsx +3 -3
  178. package/src/global-account/react/components/custom/ManageAccountButton.tsx +2 -3
  179. package/src/global-account/react/components/index.ts +1 -2
  180. package/src/global-account/react/hooks/index.ts +1 -0
  181. package/src/global-account/react/hooks/useAuth.ts +2 -3
  182. package/src/global-account/react/hooks/useClient.ts +2 -2
  183. package/src/global-account/react/hooks/useHandleConnectWithPrivy.tsx +2 -2
  184. package/src/global-account/react/hooks/useNotifications.ts +2 -2
  185. package/src/global-account/react/hooks/useTokenBalance.tsx +8 -7
  186. package/src/global-account/react/hooks/useUser.ts +20 -0
  187. package/src/global-account/react/hooks/useUserQuery.ts +1 -40
  188. package/src/global-account/react/index.native.ts +0 -2
  189. package/src/global-account/react/stores/configStore.ts +51 -0
  190. package/src/global-account/react/stores/index.ts +1 -0
  191. package/src/global-account/react/stores/useModalStore.ts +6 -0
  192. package/src/global-account/react/stores/userStore.ts +41 -0
  193. package/dist/cjs/global-account/react/components/B3Provider/types.d.ts +0 -27
  194. package/dist/cjs/global-account/react/components/B3Provider/types.js +0 -24
  195. package/dist/esm/global-account/react/components/B3Provider/types.d.ts +0 -27
  196. package/dist/esm/global-account/react/components/B3Provider/types.js +0 -21
  197. package/dist/types/global-account/react/components/B3Provider/types.d.ts +0 -27
  198. package/src/global-account/react/components/B3Provider/types.ts +0 -50
@@ -2,7 +2,7 @@
2
2
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
3
  import { eqci, getDefaultToken, getHyperliquidUSDCToken, HYPERLIQUID_CHAIN_ID, HYPERLIQUID_USDC_ADDRESS, USDC_BASE, ZERO_ADDRESS, } from "../../../anyspend/index.js";
4
4
  import { useAnyspendCreateOnrampOrder, useAnyspendCreateOrder, useAnyspendOrderAndTransactions, useAnyspendQuote, useGeoOnrampOptions, } from "../../../anyspend/react/index.js";
5
- import { Button, ShinyButton, StyleRoot, TabsPrimitive, toast, TransitionPanel, useAccountWallet, useB3, useModalStore, useProfile, useRouter, useSearchParamsSSR, useTokenBalanceDirect, useTokenData, useTokenFromUrl, } from "../../../global-account/react/index.js";
5
+ import { Button, ShinyButton, StyleRoot, TabsPrimitive, toast, TransitionPanel, useAccountWallet, useB3Config, useModalStore, useProfile, useRouter, useSearchParamsSSR, useTokenBalanceDirect, useTokenData, useTokenFromUrl, } from "../../../global-account/react/index.js";
6
6
  import BottomNavigation from "../../../global-account/react/components/ManageAccount/BottomNavigation.js";
7
7
  import { useAccountWalletImage } from "../../../global-account/react/hooks/useAccountWallet.js";
8
8
  import { getThirdwebChain } from "../../../shared/constants/chains/supported.js";
@@ -50,10 +50,10 @@ export function AnySpend(props) {
50
50
  const fingerprintConfig = getFingerprintConfig();
51
51
  return (_jsx(AnySpendFingerprintWrapper, { fingerprint: fingerprintConfig, children: _jsx(AnySpendInner, { ...props }) }));
52
52
  }
53
- function AnySpendInner({ sourceChainId, destinationTokenAddress, destinationTokenChainId, mode = "modal", defaultActiveTab = "crypto", loadOrder, hideTransactionHistoryButton, recipientAddress: recipientAddressFromProps, onTokenSelect, onSuccess, customUsdInputValues, hideHeader, hideBottomNavigation = false, disableUrlParamManagement = false, }) {
53
+ function AnySpendInner({ sourceChainId, destinationTokenAddress, destinationTokenChainId, mode = "modal", defaultActiveTab = "crypto", loadOrder, hideTransactionHistoryButton, recipientAddress: recipientAddressFromProps, onTokenSelect, onSuccess, customUsdInputValues, hideHeader, hideBottomNavigation = false, disableUrlParamManagement = false, returnToHomeUrl, customRecipientLabel, returnHomeLabel, }) {
54
54
  const searchParams = useSearchParamsSSR();
55
55
  const router = useRouter();
56
- const { partnerId } = useB3();
56
+ const { partnerId } = useB3Config();
57
57
  const setB3ModalContentType = useModalStore(state => state.setB3ModalContentType);
58
58
  // Determine if we're in "buy mode" based on whether destination token props are provided
59
59
  const isBuyMode = !!(destinationTokenAddress && destinationTokenChainId);
@@ -818,7 +818,7 @@ function AnySpendInner({ sourceChainId, destinationTokenAddress, destinationToke
818
818
  navigateBack();
819
819
  // Reset payment methods when going back
820
820
  resetPaymentMethods();
821
- } })) }) }));
821
+ }, returnToHomeUrl: returnToHomeUrl, returnHomeLabel: returnHomeLabel })) }) }));
822
822
  const mainView = (_jsxs("div", { className: "mx-auto flex w-[460px] max-w-full flex-col items-center gap-2 pt-5", children: [_jsxs("div", { className: "flex w-full max-w-full flex-col items-center gap-2 px-5", children: [isBuyMode && !hideHeader && (_jsxs("div", { className: "mb-4 flex flex-col items-center gap-3 text-center", children: [selectedDstToken.metadata?.logoURI && (_jsx("div", { className: "relative", children: _jsx("img", { src: selectedDstToken.metadata.logoURI, alt: selectedDstToken.symbol, className: "border-as-stroke h-12 w-12 rounded-full border-2 shadow-md" }) })), _jsx("div", { children: _jsxs("h1", { className: "text-as-primary text-xl font-bold", children: ["Buy ", selectedDstToken.symbol] }) })] })), _jsx(TabSection, { activeTab: activeTab, setActiveTab: tab => {
823
823
  setActiveTab(tab);
824
824
  // Reset payment methods when switching tabs
@@ -833,7 +833,7 @@ function AnySpendInner({ sourceChainId, destinationTokenAddress, destinationToke
833
833
  else {
834
834
  setActivePanel(panelIndex);
835
835
  }
836
- }, _recipientAddress: effectiveRecipientAddress, destinationToken: selectedDstToken, destinationChainId: selectedDstChainId, destinationAmount: dstAmount, onDestinationTokenChange: setSelectedDstToken, onDestinationChainChange: setSelectedDstChainId, fiatPaymentMethodIndex: PanelView.FIAT_PAYMENT_METHOD, recipientSelectionPanelIndex: PanelView.RECIPIENT_SELECTION, hideDstToken: isBuyMode, anyspendQuote: anyspendQuote, onShowPointsDetail: () => navigateToPanel(PanelView.POINTS_DETAIL, "forward"), onShowFeeDetail: () => navigateToPanel(PanelView.FEE_DETAIL, "forward"), customUsdInputValues: customUsdInputValues }) })), activeTab === "crypto" && (_jsx("div", { className: "z-10 -my-6 flex justify-center", children: _jsx(Button, { variant: "ghost", className: cn("border-as-stroke bg-as-surface-primary h-10 w-10 rounded-xl border-2 sm:h-8 sm:w-8 sm:rounded-xl", isBuyMode && "cursor-default", selectedDstChainId === HYPERLIQUID_CHAIN_ID && "cursor-not-allowed opacity-50"), onClick: () => {
836
+ }, _recipientAddress: effectiveRecipientAddress, destinationToken: selectedDstToken, destinationChainId: selectedDstChainId, destinationAmount: dstAmount, onDestinationTokenChange: setSelectedDstToken, onDestinationChainChange: setSelectedDstChainId, fiatPaymentMethodIndex: PanelView.FIAT_PAYMENT_METHOD, recipientSelectionPanelIndex: PanelView.RECIPIENT_SELECTION, hideDstToken: isBuyMode, anyspendQuote: anyspendQuote, onShowPointsDetail: () => navigateToPanel(PanelView.POINTS_DETAIL, "forward"), onShowFeeDetail: () => navigateToPanel(PanelView.FEE_DETAIL, "forward"), customUsdInputValues: customUsdInputValues, customRecipientLabel: customRecipientLabel }) })), activeTab === "crypto" && (_jsx("div", { className: "z-10 -my-6 flex justify-center", children: _jsx(Button, { variant: "ghost", className: cn("border-as-stroke bg-as-surface-primary h-10 w-10 rounded-xl border-2 sm:h-8 sm:w-8 sm:rounded-xl", isBuyMode && "cursor-default", selectedDstChainId === HYPERLIQUID_CHAIN_ID && "cursor-not-allowed opacity-50"), onClick: () => {
837
837
  if (isBuyMode) {
838
838
  return;
839
839
  }
@@ -850,7 +850,7 @@ function AnySpendInner({ sourceChainId, destinationTokenAddress, destinationToke
850
850
  // Swap amounts
851
851
  setSrcAmount(dstAmount);
852
852
  setDstAmount(srcAmount);
853
- }, children: _jsx("div", { className: "relative flex items-center justify-center transition-opacity", children: _jsx(ArrowDown, { className: "text-as-primary/50 h-5 w-5" }) }) }) })), activeTab === "crypto" && (_jsx(CryptoReceiveSection, { isDepositMode: false, isBuyMode: isBuyMode, effectiveRecipientAddress: effectiveRecipientAddress, recipientName: recipientName || undefined, onSelectRecipient: () => navigateToPanel(PanelView.RECIPIENT_SELECTION, "forward"), dstAmount: dstAmount, dstToken: selectedDstToken, selectedDstChainId: selectedDstChainId, setSelectedDstChainId: setSelectedDstChainId, setSelectedDstToken: setSelectedDstToken, isSrcInputDirty: isSrcInputDirty, onChangeDstAmount: value => {
853
+ }, children: _jsx("div", { className: "relative flex items-center justify-center transition-opacity", children: _jsx(ArrowDown, { className: "text-as-primary/50 h-5 w-5" }) }) }) })), activeTab === "crypto" && (_jsx(CryptoReceiveSection, { isDepositMode: false, isBuyMode: isBuyMode, effectiveRecipientAddress: effectiveRecipientAddress, recipientName: recipientName || undefined, customRecipientLabel: customRecipientLabel, onSelectRecipient: () => navigateToPanel(PanelView.RECIPIENT_SELECTION, "forward"), dstAmount: dstAmount, dstToken: selectedDstToken, selectedDstChainId: selectedDstChainId, setSelectedDstChainId: setSelectedDstChainId, setSelectedDstToken: setSelectedDstToken, isSrcInputDirty: isSrcInputDirty, onChangeDstAmount: value => {
854
854
  setIsSrcInputDirty(false);
855
855
  setDstAmount(value);
856
856
  }, anyspendQuote: anyspendQuote, onShowPointsDetail: () => navigateToPanel(PanelView.POINTS_DETAIL, "forward"), onShowFeeDetail: () => navigateToPanel(PanelView.FEE_DETAIL, "forward") }))] }), _jsxs(motion.div, { initial: { opacity: 0, y: 20, filter: "blur(10px)" }, animate: { opacity: 1, y: 0, filter: "blur(0px)" }, transition: { duration: 0.3, delay: 0.2, ease: "easeInOut" }, className: cn("mt-4 flex w-full max-w-[460px] flex-col gap-2"), children: [_jsx(ShinyButton, { accentColor: "hsl(var(--as-brand))", disabled: btnInfo.disable, onClick: onMainButtonClick, className: cn("as-main-button relative w-full", btnInfo.error ? "!bg-as-red" : btnInfo.disable ? "!bg-as-on-surface-2" : "!bg-as-brand"), textClassName: cn(btnInfo.error ? "text-white" : btnInfo.disable ? "text-as-secondary" : "text-white"), children: _jsxs("div", { className: "flex items-center justify-center gap-2", children: [btnInfo.loading && _jsx(Loader2, { className: "h-4 w-4 animate-spin" }), btnInfo.text] }) }), !hideTransactionHistoryButton && (globalAddress || effectiveRecipientAddress) ? (_jsxs(Button, { variant: "link", onClick: onClickHistory, className: "text-as-primary/50 hover:text-as-primary flex items-center gap-1 transition-colors", children: [_jsx(HistoryIcon, { className: "h-4 w-4" }), " ", _jsx("span", { className: "pr-4", children: "Transaction History" })] })) : null] })] }), _jsx("div", { className: "w-full", children: _jsx(TabsPrimitive, { defaultValue: "swap", onValueChange: value => {
@@ -32,6 +32,12 @@ export interface AnySpendCustomExactInProps {
32
32
  anyspendPrice: GetQuoteResponse | undefined;
33
33
  isLoadingAnyspendPrice: boolean;
34
34
  }) => React.JSX.Element;
35
+ /** Custom URL to redirect to when clicking "Return to Home" on complete order screen */
36
+ returnToHomeUrl?: string;
37
+ /** Custom label for recipient display (e.g., "OBSN Telegram Bot") */
38
+ customRecipientLabel?: string;
39
+ /** Custom label for the return home button (overrides "Return to Home" / "Close") */
40
+ returnHomeLabel?: string;
35
41
  }
36
42
  export declare function AnySpendCustomExactIn(props: AnySpendCustomExactInProps): import("react/jsx-runtime").JSX.Element;
37
43
  export {};
@@ -25,7 +25,7 @@ export function AnySpendCustomExactIn(props) {
25
25
  const fingerprintConfig = getFingerprintConfig();
26
26
  return (_jsx(AnySpendFingerprintWrapper, { fingerprint: fingerprintConfig, children: _jsx(AnySpendCustomExactInInner, { ...props }) }));
27
27
  }
28
- function AnySpendCustomExactInInner({ loadOrder, mode = "modal", recipientAddress, paymentType = "crypto", sourceTokenAddress, sourceTokenChainId, destinationToken, destinationChainId, onSuccess, onOpenCustomModal, mainFooter, onTokenSelect, customUsdInputValues, preferEoa, customExactInConfig, orderType = "custom_exact_in", minDestinationAmount, header, }) {
28
+ function AnySpendCustomExactInInner({ loadOrder, mode = "modal", recipientAddress, paymentType = "crypto", sourceTokenAddress, sourceTokenChainId, destinationToken, destinationChainId, onSuccess, onOpenCustomModal, mainFooter, onTokenSelect, customUsdInputValues, preferEoa, customExactInConfig, orderType = "custom_exact_in", minDestinationAmount, header, returnToHomeUrl, customRecipientLabel, returnHomeLabel, }) {
29
29
  const actionLabel = customExactInConfig?.action ?? "Custom Execution";
30
30
  const DESTINATION_TOKEN_DETAILS = {
31
31
  SYMBOL: destinationToken.symbol ?? "TOKEN",
@@ -175,7 +175,7 @@ function AnySpendCustomExactInInner({ loadOrder, mode = "modal", recipientAddres
175
175
  }
176
176
  };
177
177
  const headerContent = header ? (header({ anyspendPrice: anyspendQuote, isLoadingAnyspendPrice: isLoadingAnyspendQuote })) : (_jsx("div", { className: "mb-4 flex flex-col items-center gap-3 text-center", children: _jsxs("div", { children: [_jsx("h1", { className: "text-as-primary text-xl font-bold", children: actionLabel }), _jsx("p", { className: "text-as-secondary text-sm", children: "Pay from any token to execute a custom exact-in transaction." })] }) }));
178
- const mainView = (_jsxs("div", { className: "anyspend-custom-exact-in-container mx-auto flex w-[460px] max-w-full flex-col items-center gap-2", children: [headerContent, _jsx("div", { className: "relative flex w-full max-w-[calc(100vw-32px)] flex-col gap-2", children: _jsxs("div", { className: "relative flex w-full max-w-[calc(100vw-32px)] flex-col gap-2", children: [paymentType === "crypto" ? (_jsx(CryptoPaySection, { selectedSrcChainId: selectedSrcChainId, setSelectedSrcChainId: setSelectedSrcChainId, selectedSrcToken: selectedSrcToken, setSelectedSrcToken: setSelectedSrcToken, srcAmount: srcAmount, setSrcAmount: setSrcAmount, isSrcInputDirty: isSrcInputDirty, setIsSrcInputDirty: setIsSrcInputDirty, selectedCryptoPaymentMethod: effectiveCryptoPaymentMethod, onSelectCryptoPaymentMethod: () => setActivePanel(PanelView.CRYPTO_PAYMENT_METHOD), anyspendQuote: anyspendQuote, onTokenSelect: onTokenSelect })) : (_jsx(motion.div, { initial: { opacity: 0, y: 20, filter: "blur(10px)" }, animate: { opacity: 1, y: 0, filter: "blur(0px)" }, transition: { duration: 0.3, delay: 0, ease: "easeInOut" }, children: _jsx(PanelOnramp, { srcAmountOnRamp: srcAmount, setSrcAmountOnRamp: setSrcAmount, selectedPaymentMethod: selectedFiatPaymentMethod, setActivePanel: setActivePanel, _recipientAddress: selectedRecipientOrDefault, destinationToken: selectedDstToken, destinationChainId: selectedDstChainId, dstTokenSymbol: DESTINATION_TOKEN_DETAILS.SYMBOL, hideDstToken: true, destinationAmount: dstAmount, onDestinationTokenChange: () => { }, onDestinationChainChange: () => { }, fiatPaymentMethodIndex: PanelView.FIAT_PAYMENT_METHOD, recipientSelectionPanelIndex: PanelView.RECIPIENT_SELECTION, anyspendQuote: anyspendQuote, onShowPointsDetail: () => setActivePanel(PanelView.POINTS_DETAIL), onShowFeeDetail: () => setActivePanel(PanelView.FEE_DETAIL), customUsdInputValues: customUsdInputValues }) })), _jsx("div", { className: cn("relative -my-1 flex h-0 items-center justify-center", paymentType === "fiat" && "hidden"), children: _jsx(Button, { variant: "ghost", className: cn("swap-direction-button border-as-stroke bg-as-surface-primary z-10 h-10 w-10 cursor-default rounded-xl border-2 sm:h-8 sm:w-8 sm:rounded-xl"), children: _jsx("div", { className: "relative flex items-center justify-center transition-opacity", children: _jsx(ArrowDown, { className: "text-as-primary/50 h-5 w-5" }) }) }) }), paymentType === "crypto" && (_jsx(CryptoReceiveSection, { isDepositMode: false, isBuyMode: true, effectiveRecipientAddress: selectedRecipientOrDefault, recipientName: recipientName || undefined, onSelectRecipient: () => setActivePanel(PanelView.RECIPIENT_SELECTION), dstAmount: dstAmount, dstToken: selectedDstToken, dstTokenSymbol: DESTINATION_TOKEN_DETAILS.SYMBOL, dstTokenLogoURI: DESTINATION_TOKEN_DETAILS.LOGO_URI, selectedDstChainId: selectedDstChainId, setSelectedDstChainId: () => { }, setSelectedDstToken: () => { }, isSrcInputDirty: isSrcInputDirty, onChangeDstAmount: value => {
178
+ const mainView = (_jsxs("div", { className: "anyspend-custom-exact-in-container mx-auto flex w-[460px] max-w-full flex-col items-center gap-2", children: [headerContent, _jsx("div", { className: "relative flex w-full max-w-[calc(100vw-32px)] flex-col gap-2", children: _jsxs("div", { className: "relative flex w-full max-w-[calc(100vw-32px)] flex-col gap-2", children: [paymentType === "crypto" ? (_jsx(CryptoPaySection, { selectedSrcChainId: selectedSrcChainId, setSelectedSrcChainId: setSelectedSrcChainId, selectedSrcToken: selectedSrcToken, setSelectedSrcToken: setSelectedSrcToken, srcAmount: srcAmount, setSrcAmount: setSrcAmount, isSrcInputDirty: isSrcInputDirty, setIsSrcInputDirty: setIsSrcInputDirty, selectedCryptoPaymentMethod: effectiveCryptoPaymentMethod, onSelectCryptoPaymentMethod: () => setActivePanel(PanelView.CRYPTO_PAYMENT_METHOD), anyspendQuote: anyspendQuote, onTokenSelect: onTokenSelect })) : (_jsx(motion.div, { initial: { opacity: 0, y: 20, filter: "blur(10px)" }, animate: { opacity: 1, y: 0, filter: "blur(0px)" }, transition: { duration: 0.3, delay: 0, ease: "easeInOut" }, children: _jsx(PanelOnramp, { srcAmountOnRamp: srcAmount, setSrcAmountOnRamp: setSrcAmount, selectedPaymentMethod: selectedFiatPaymentMethod, setActivePanel: setActivePanel, _recipientAddress: selectedRecipientOrDefault, destinationToken: selectedDstToken, destinationChainId: selectedDstChainId, dstTokenSymbol: DESTINATION_TOKEN_DETAILS.SYMBOL, hideDstToken: true, destinationAmount: dstAmount, onDestinationTokenChange: () => { }, onDestinationChainChange: () => { }, fiatPaymentMethodIndex: PanelView.FIAT_PAYMENT_METHOD, recipientSelectionPanelIndex: PanelView.RECIPIENT_SELECTION, anyspendQuote: anyspendQuote, onShowPointsDetail: () => setActivePanel(PanelView.POINTS_DETAIL), onShowFeeDetail: () => setActivePanel(PanelView.FEE_DETAIL), customUsdInputValues: customUsdInputValues, customRecipientLabel: customRecipientLabel }) })), _jsx("div", { className: cn("relative -my-1 flex h-0 items-center justify-center", paymentType === "fiat" && "hidden"), children: _jsx(Button, { variant: "ghost", className: cn("swap-direction-button border-as-stroke bg-as-surface-primary z-10 h-10 w-10 cursor-default rounded-xl border-2 sm:h-8 sm:w-8 sm:rounded-xl"), children: _jsx("div", { className: "relative flex items-center justify-center transition-opacity", children: _jsx(ArrowDown, { className: "text-as-primary/50 h-5 w-5" }) }) }) }), paymentType === "crypto" && (_jsx(CryptoReceiveSection, { isDepositMode: false, isBuyMode: true, effectiveRecipientAddress: selectedRecipientOrDefault, recipientName: recipientName || undefined, customRecipientLabel: customRecipientLabel, onSelectRecipient: () => setActivePanel(PanelView.RECIPIENT_SELECTION), dstAmount: dstAmount, dstToken: selectedDstToken, dstTokenSymbol: DESTINATION_TOKEN_DETAILS.SYMBOL, dstTokenLogoURI: DESTINATION_TOKEN_DETAILS.LOGO_URI, selectedDstChainId: selectedDstChainId, setSelectedDstChainId: () => { }, setSelectedDstToken: () => { }, isSrcInputDirty: isSrcInputDirty, onChangeDstAmount: value => {
179
179
  setIsSrcInputDirty(false);
180
180
  setSrcAmount(value);
181
181
  }, anyspendQuote: anyspendQuote, onShowPointsDetail: () => setActivePanel(PanelView.POINTS_DETAIL), onShowFeeDetail: () => setActivePanel(PanelView.FEE_DETAIL) }))] }) }), _jsx(motion.div, { initial: { opacity: 0, y: 20, filter: "blur(10px)" }, animate: { opacity: 1, y: 0, filter: "blur(0px)" }, transition: { duration: 0.3, delay: 0.2, ease: "easeInOut" }, className: cn("mt-4 flex w-full max-w-[460px] flex-col gap-2"), children: _jsx(ShinyButton, { accentColor: "hsl(var(--as-brand))", disabled: btnInfo.disable, onClick: onMainButtonClick, className: cn("as-main-button relative w-full", btnInfo.error ? "!bg-as-red" : btnInfo.disable ? "!bg-as-on-surface-2" : "!bg-as-brand"), textClassName: cn(btnInfo.error ? "text-white" : btnInfo.disable ? "text-as-secondary" : "text-white"), children: _jsxs("div", { className: "flex items-center justify-center gap-2", children: [btnInfo.loading && _jsx(Loader2, { className: "h-4 w-4 animate-spin" }), btnInfo.text] }) }) }), mainFooter ? mainFooter : null] }));
@@ -258,7 +258,7 @@ function AnySpendCustomExactInInner({ loadOrder, mode = "modal", recipientAddres
258
258
  const orderDetailsView = (_jsx("div", { className: "mx-auto w-[460px] max-w-full", children: _jsx("div", { className: "relative flex flex-col gap-4", children: oat && (_jsx(OrderDetails, { mode: mode, order: oat.data.order, depositTxs: oat.data.depositTxs, relayTxs: oat.data.relayTxs, executeTx: oat.data.executeTx, refundTxs: oat.data.refundTxs, cryptoPaymentMethod: paymentType === "fiat" ? CryptoPaymentMethodType.NONE : effectiveCryptoPaymentMethod, selectedCryptoPaymentMethod: effectiveCryptoPaymentMethod, onPaymentMethodChange: setSelectedCryptoPaymentMethod, onBack: () => {
259
259
  setOrderId(undefined);
260
260
  setActivePanel(PanelView.MAIN);
261
- }, disableUrlParamManagement: true, points: oat.data.points || undefined })) }) }));
261
+ }, disableUrlParamManagement: true, points: oat.data.points || undefined, returnToHomeUrl: returnToHomeUrl, returnHomeLabel: returnHomeLabel })) }) }));
262
262
  const loadingView = (_jsx("div", { className: "mx-auto flex w-full flex-col items-center gap-4 p-5", children: _jsx("div", { className: "text-as-primary", children: "Loading order details..." }) }));
263
263
  const recipientSelectionView = (_jsx(RecipientSelection, { initialValue: selectedRecipientOrDefault || "", onBack: () => setActivePanel(PanelView.MAIN), onConfirm: address => {
264
264
  setSelectedRecipientAddress(address);
@@ -83,6 +83,12 @@ export interface AnySpendDepositProps {
83
83
  topChainsCount?: number;
84
84
  /** Callback when close button is clicked */
85
85
  onClose?: () => void;
86
+ /** Custom URL to redirect to when clicking "Return to Home" on complete order screen */
87
+ returnToHomeUrl?: string;
88
+ /** Custom label for recipient display (e.g., "OBSN Telegram Bot") */
89
+ customRecipientLabel?: string;
90
+ /** Custom label for the return home button (overrides "Return to Home" / "Close") */
91
+ returnHomeLabel?: string;
86
92
  }
87
93
  /**
88
94
  * A flexible deposit component that wraps AnySpendCustomExactIn with optional chain selection.
@@ -119,4 +125,4 @@ export interface AnySpendDepositProps {
119
125
  * onSuccess={(amount) => console.log(`Deposited ${amount}`)}
120
126
  * />
121
127
  */
122
- export declare function AnySpendDeposit({ loadOrder, mode, recipientAddress, paymentType: initialPaymentType, sourceTokenAddress, sourceTokenChainId: initialSourceChainId, destinationToken, destinationChainId, onSuccess, onOpenCustomModal, mainFooter, onTokenSelect, customUsdInputValues, preferEoa, minDestinationAmount, header, orderType, depositContractConfig, showChainSelection, supportedChains, minPoolSize, topChainsCount, onClose, }: AnySpendDepositProps): import("react/jsx-runtime").JSX.Element | null;
128
+ export declare function AnySpendDeposit({ loadOrder, mode, recipientAddress, paymentType: initialPaymentType, sourceTokenAddress, sourceTokenChainId: initialSourceChainId, destinationToken, destinationChainId, onSuccess, onOpenCustomModal, mainFooter, onTokenSelect, customUsdInputValues, preferEoa, minDestinationAmount, header, orderType, depositContractConfig, showChainSelection, supportedChains, minPoolSize, topChainsCount, onClose, returnToHomeUrl, customRecipientLabel, returnHomeLabel, }: AnySpendDepositProps): import("react/jsx-runtime").JSX.Element | null;
@@ -95,7 +95,7 @@ function ChainIcon({ chainId, className }) {
95
95
  * onSuccess={(amount) => console.log(`Deposited ${amount}`)}
96
96
  * />
97
97
  */
98
- export function AnySpendDeposit({ loadOrder, mode = "modal", recipientAddress, paymentType: initialPaymentType, sourceTokenAddress, sourceTokenChainId: initialSourceChainId, destinationToken, destinationChainId, onSuccess, onOpenCustomModal, mainFooter, onTokenSelect, customUsdInputValues, preferEoa, minDestinationAmount, header, orderType, depositContractConfig, showChainSelection, supportedChains = DEFAULT_SUPPORTED_CHAINS, minPoolSize = DEFAULT_MIN_POOL_SIZE, topChainsCount = 3, onClose, }) {
98
+ export function AnySpendDeposit({ loadOrder, mode = "modal", recipientAddress, paymentType: initialPaymentType, sourceTokenAddress, sourceTokenChainId: initialSourceChainId, destinationToken, destinationChainId, onSuccess, onOpenCustomModal, mainFooter, onTokenSelect, customUsdInputValues, preferEoa, minDestinationAmount, header, orderType, depositContractConfig, showChainSelection, supportedChains = DEFAULT_SUPPORTED_CHAINS, minPoolSize = DEFAULT_MIN_POOL_SIZE, topChainsCount = 3, onClose, returnToHomeUrl, customRecipientLabel, returnHomeLabel, }) {
99
99
  const { connectedEOAWallet } = useAccountWallet();
100
100
  const eoaAddress = connectedEOAWallet?.getAccount()?.address;
101
101
  // Determine if we should show chain selection
@@ -183,5 +183,5 @@ export function AnySpendDeposit({ loadOrder, mode = "modal", recipientAddress, p
183
183
  // Check if destination is Hyperliquid
184
184
  const isHyperliquidDeposit = destinationChainId === HYPERLIQUID_CHAIN_ID;
185
185
  // Deposit view
186
- return (_jsxs("div", { className: "anyspend-deposit anyspend-deposit-form relative", children: [shouldShowChainSelection && (_jsxs("button", { onClick: handleBack, className: "anyspend-deposit-back-button text-as-secondary hover:text-as-primary absolute left-4 top-4 z-10 flex items-center gap-1", children: [_jsx("svg", { className: "anyspend-deposit-back-icon h-5 w-5", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", children: _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M15 19l-7-7 7-7" }) }), _jsx("span", { className: "anyspend-deposit-back-text text-sm", children: "Back" })] })), onClose && (_jsx("button", { onClick: onClose, className: "anyspend-deposit-close-button text-as-secondary hover:text-as-primary absolute right-4 top-4 z-10", children: _jsx("svg", { className: "h-6 w-6", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", children: _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M6 18L18 6M6 6l12 12" }) }) })), _jsx("div", { className: cn("anyspend-deposit-form-content", shouldShowChainSelection && "pt-8"), children: isHyperliquidDeposit ? (_jsx(AnySpend, { loadOrder: loadOrder, mode: mode, defaultActiveTab: paymentType, recipientAddress: recipientAddress, sourceChainId: selectedChainId, destinationTokenAddress: destinationToken.address, destinationTokenChainId: destinationChainId, onSuccess: txHash => onSuccess?.(txHash ?? ""), onTokenSelect: onTokenSelect, customUsdInputValues: customUsdInputValues, hideHeader: true, hideBottomNavigation: true, disableUrlParamManagement: true }, selectedChainId)) : (_jsx(AnySpendCustomExactIn, { loadOrder: loadOrder, mode: mode, recipientAddress: recipientAddress, paymentType: paymentType, sourceTokenAddress: sourceTokenAddress, sourceTokenChainId: selectedChainId, destinationToken: destinationToken, destinationChainId: destinationChainId, orderType: effectiveOrderType, minDestinationAmount: minDestinationAmount, header: header ?? defaultHeader, onSuccess: onSuccess, onOpenCustomModal: onOpenCustomModal, mainFooter: mainFooter, onTokenSelect: onTokenSelect, customUsdInputValues: customUsdInputValues, preferEoa: preferEoa, customExactInConfig: depositContractConfig }, selectedChainId)) }), _jsx(ChainWarningText, { chainId: destinationChainId, className: "px-4 pb-4" })] }));
186
+ return (_jsxs("div", { className: "anyspend-deposit anyspend-deposit-form relative", children: [shouldShowChainSelection && (_jsxs("button", { onClick: handleBack, className: "anyspend-deposit-back-button text-as-secondary hover:text-as-primary absolute left-4 top-4 z-10 flex items-center gap-1", children: [_jsx("svg", { className: "anyspend-deposit-back-icon h-5 w-5", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", children: _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M15 19l-7-7 7-7" }) }), _jsx("span", { className: "anyspend-deposit-back-text text-sm", children: "Back" })] })), onClose && (_jsx("button", { onClick: onClose, className: "anyspend-deposit-close-button text-as-secondary hover:text-as-primary absolute right-4 top-4 z-10", children: _jsx("svg", { className: "h-6 w-6", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", children: _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M6 18L18 6M6 6l12 12" }) }) })), _jsx("div", { className: cn("anyspend-deposit-form-content", shouldShowChainSelection && "pt-8"), children: isHyperliquidDeposit ? (_jsx(AnySpend, { loadOrder: loadOrder, mode: mode, defaultActiveTab: paymentType, recipientAddress: recipientAddress, sourceChainId: selectedChainId, destinationTokenAddress: destinationToken.address, destinationTokenChainId: destinationChainId, onSuccess: txHash => onSuccess?.(txHash ?? ""), onTokenSelect: onTokenSelect, customUsdInputValues: customUsdInputValues, hideHeader: true, hideBottomNavigation: true, disableUrlParamManagement: true, returnToHomeUrl: returnToHomeUrl, customRecipientLabel: customRecipientLabel, returnHomeLabel: returnHomeLabel }, selectedChainId)) : (_jsx(AnySpendCustomExactIn, { loadOrder: loadOrder, mode: mode, recipientAddress: recipientAddress, paymentType: paymentType, sourceTokenAddress: sourceTokenAddress, sourceTokenChainId: selectedChainId, destinationToken: destinationToken, destinationChainId: destinationChainId, orderType: effectiveOrderType, minDestinationAmount: minDestinationAmount, header: header ?? defaultHeader, onSuccess: onSuccess, onOpenCustomModal: onOpenCustomModal, mainFooter: mainFooter, onTokenSelect: onTokenSelect, customUsdInputValues: customUsdInputValues, preferEoa: preferEoa, customExactInConfig: depositContractConfig, returnToHomeUrl: returnToHomeUrl, customRecipientLabel: customRecipientLabel, returnHomeLabel: returnHomeLabel }, selectedChainId)) }), _jsx(ChainWarningText, { chainId: destinationChainId, className: "px-4 pb-4" })] }));
187
187
  }
@@ -22,5 +22,9 @@ export interface AnySpendDepositHypeProps {
22
22
  }) => void;
23
23
  customUsdInputValues?: string[];
24
24
  preferEoa?: boolean;
25
+ /** Custom URL to redirect to when clicking "Return to Home" on complete order screen */
26
+ returnToHomeUrl?: string;
27
+ /** Custom label for recipient display (e.g., "OBSN Telegram Bot") */
28
+ customRecipientLabel?: string;
25
29
  }
26
30
  export declare function AnySpendDepositHype({ loadOrder, mode, recipientAddress, paymentType, sourceTokenAddress, sourceTokenChainId, onSuccess, onOpenCustomModal, mainFooter, onTokenSelect, customUsdInputValues, preferEoa, }: AnySpendDepositHypeProps): import("react/jsx-runtime").JSX.Element | null;
@@ -4,6 +4,8 @@ interface CryptoReceiveSectionProps {
4
4
  isBuyMode?: boolean;
5
5
  effectiveRecipientAddress?: string;
6
6
  recipientName?: string;
7
+ /** Custom label for recipient display (overrides recipientName) */
8
+ customRecipientLabel?: string;
7
9
  onSelectRecipient: () => void;
8
10
  dstAmount: string;
9
11
  dstToken: components["schemas"]["Token"];
@@ -18,5 +20,5 @@ interface CryptoReceiveSectionProps {
18
20
  onShowPointsDetail?: () => void;
19
21
  onShowFeeDetail?: () => void;
20
22
  }
21
- export declare function CryptoReceiveSection({ isDepositMode, isBuyMode, effectiveRecipientAddress, recipientName, onSelectRecipient, dstAmount, dstToken, selectedDstChainId, setSelectedDstChainId, setSelectedDstToken, isSrcInputDirty, onChangeDstAmount, anyspendQuote, dstTokenSymbol, dstTokenLogoURI, onShowPointsDetail, onShowFeeDetail, }: CryptoReceiveSectionProps): import("react/jsx-runtime").JSX.Element;
23
+ export declare function CryptoReceiveSection({ isDepositMode, isBuyMode, effectiveRecipientAddress, recipientName, customRecipientLabel, onSelectRecipient, dstAmount, dstToken, selectedDstChainId, setSelectedDstChainId, setSelectedDstToken, isSrcInputDirty, onChangeDstAmount, anyspendQuote, dstTokenSymbol, dstTokenLogoURI, onShowPointsDetail, onShowFeeDetail, }: CryptoReceiveSectionProps): import("react/jsx-runtime").JSX.Element;
22
24
  export {};
@@ -8,8 +8,9 @@ import { ChevronRight, Info } from "lucide-react";
8
8
  import { motion } from "motion/react";
9
9
  import { OrderTokenAmount } from "./OrderTokenAmount.js";
10
10
  import { PointsBadge } from "./PointsBadge.js";
11
- export function CryptoReceiveSection({ isDepositMode = false, isBuyMode = false, effectiveRecipientAddress, recipientName, onSelectRecipient, dstAmount, dstToken, selectedDstChainId, setSelectedDstChainId, setSelectedDstToken, isSrcInputDirty, onChangeDstAmount, anyspendQuote, dstTokenSymbol, dstTokenLogoURI, onShowPointsDetail, onShowFeeDetail, }) {
12
- return (_jsxs(motion.div, { initial: { opacity: 0, y: 20, filter: "blur(10px)" }, animate: { opacity: 1, y: 0, filter: "blur(0px)" }, transition: { duration: 0.3, delay: 0.1, ease: "easeInOut" }, className: "receive-section bg-as-surface-secondary border-as-border-secondary relative flex w-full flex-col gap-2 rounded-2xl border p-4 sm:p-6", children: [_jsxs("div", { className: "flex w-full items-center justify-between", children: [_jsxs("div", { className: "text-as-primary/50 flex h-7 items-center gap-1.5 text-sm", children: [isDepositMode ? "Deposit" : "Receive", isSrcInputDirty && anyspendQuote?.data?.fee && onShowFeeDetail && (_jsx("button", { onClick: onShowFeeDetail, className: "text-as-primary/40 hover:text-as-primary/60 transition-colors", children: _jsx(Info, { className: "h-4 w-4" }) }))] }), effectiveRecipientAddress ? (_jsx("button", { className: cn("text-as-tertiarry flex h-7 items-center gap-2 rounded-lg"), onClick: onSelectRecipient, children: _jsxs(_Fragment, { children: [_jsx("span", { className: "text-as-tertiarry flex items-center gap-1 text-sm", children: recipientName ? formatUsername(recipientName) : shortenAddress(effectiveRecipientAddress || "") }), _jsx(ChevronRight, { className: "h-4 w-4" })] }) })) : (_jsx("button", { className: "text-as-primary/70 flex items-center gap-1 rounded-lg", onClick: onSelectRecipient, children: _jsx("div", { className: "text-sm font-medium", children: "Select recipient" }) }))] }), isBuyMode || isDepositMode ? (
11
+ export function CryptoReceiveSection({ isDepositMode = false, isBuyMode = false, effectiveRecipientAddress, recipientName, customRecipientLabel, onSelectRecipient, dstAmount, dstToken, selectedDstChainId, setSelectedDstChainId, setSelectedDstToken, isSrcInputDirty, onChangeDstAmount, anyspendQuote, dstTokenSymbol, dstTokenLogoURI, onShowPointsDetail, onShowFeeDetail, }) {
12
+ return (_jsxs(motion.div, { initial: { opacity: 0, y: 20, filter: "blur(10px)" }, animate: { opacity: 1, y: 0, filter: "blur(0px)" }, transition: { duration: 0.3, delay: 0.1, ease: "easeInOut" }, className: "receive-section bg-as-surface-secondary border-as-border-secondary relative flex w-full flex-col gap-2 rounded-2xl border p-4 sm:p-6", children: [_jsxs("div", { className: "flex w-full items-center justify-between", children: [_jsxs("div", { className: "text-as-primary/50 flex h-7 items-center gap-1.5 text-sm", children: [isDepositMode ? "Deposit" : "Receive", isSrcInputDirty && anyspendQuote?.data?.fee && onShowFeeDetail && (_jsx("button", { onClick: onShowFeeDetail, className: "text-as-primary/40 hover:text-as-primary/60 transition-colors", children: _jsx(Info, { className: "h-4 w-4" }) }))] }), effectiveRecipientAddress ? (_jsx("button", { className: cn("text-as-tertiarry flex h-7 items-center gap-2 rounded-lg"), onClick: onSelectRecipient, children: _jsxs(_Fragment, { children: [_jsx("span", { className: "text-as-tertiarry flex items-center gap-1 text-sm", children: customRecipientLabel ||
13
+ (recipientName ? formatUsername(recipientName) : shortenAddress(effectiveRecipientAddress || "")) }), _jsx(ChevronRight, { className: "h-4 w-4" })] }) })) : (_jsx("button", { className: "text-as-primary/70 flex items-center gap-1 rounded-lg", onClick: onSelectRecipient, children: _jsx("div", { className: "text-sm font-medium", children: "Select recipient" }) }))] }), isBuyMode || isDepositMode ? (
13
14
  // Fixed destination token display for buy mode and deposit mode
14
15
  _jsxs("div", { className: "flex items-center justify-between", children: [_jsx("div", { className: "text-as-primary text-2xl font-bold", children: dstAmount || "0" }), _jsxs("div", { className: "bg-as-brand/10 border-as-brand/30 flex items-center gap-3 rounded-xl border px-4 py-3", children: [(dstTokenLogoURI || dstToken.metadata?.logoURI) && (_jsxs("div", { className: "relative", children: [_jsx("img", { src: dstTokenLogoURI || dstToken.metadata?.logoURI, alt: dstTokenSymbol || dstToken.symbol, className: "h-8 w-8 rounded-full" }), ALL_CHAINS[dstToken.chainId]?.logoUrl && (_jsx("img", { src: ALL_CHAINS[dstToken.chainId].logoUrl, alt: "Chain", className: "absolute -bottom-1 -right-1 h-4 w-4 rounded-full border border-white" }))] })), _jsx("span", { className: "text-as-brand text-lg font-bold", children: dstTokenSymbol || dstToken.symbol })] })] })) : (
15
16
  // Token selection for regular swap mode
@@ -13,6 +13,10 @@ interface OrderDetailsProps {
13
13
  onBack?: () => void;
14
14
  disableUrlParamManagement?: boolean;
15
15
  points?: number | undefined;
16
+ /** Custom URL to redirect to when clicking "Return to Home" on complete order screen */
17
+ returnToHomeUrl?: string;
18
+ /** Custom label for the return home button (overrides "Return to Home" / "Close") */
19
+ returnHomeLabel?: string;
16
20
  }
17
21
  export declare const OrderDetails: import("react").NamedExoticComponent<OrderDetailsProps>;
18
22
  export declare const OrderDetailsLoadingView: import("react/jsx-runtime").JSX.Element;
@@ -1,7 +1,7 @@
1
1
  "use client";
2
- import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
+ import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
3
3
  import { ALL_CHAINS, getChainName, getErrorDisplay, getExplorerTxUrl, getPaymentUrl, getStatusDisplay, isNativeToken, RELAY_SOLANA_MAINNET_CHAIN_ID, ZERO_ADDRESS, } from "../../../../anyspend/index.js";
4
- import { Badge, Button, CopyToClipboard, ShinyButton, Skeleton, TextLoop, TextShimmer, useAccountWallet, useB3, useModalStore, useProfile, useUnifiedChainSwitchAndExecute, } from "../../../../global-account/react/index.js";
4
+ import { Badge, Button, CopyToClipboard, ShinyButton, Skeleton, TextLoop, TextShimmer, useAccountWallet, useB3Config, useModalStore, useProfile, useUnifiedChainSwitchAndExecute, } from "../../../../global-account/react/index.js";
5
5
  import { useRouter, useSearchParams } from "../../../../shared/react/hooks/index.js";
6
6
  import { cn } from "../../../../shared/utils/index.js";
7
7
  import centerTruncate from "../../../../shared/utils/centerTruncate.js";
@@ -131,11 +131,11 @@ function roundTokenAmount(amount) {
131
131
  const roundedDecimalPart = digits.join("");
132
132
  return `${wholePart}.${roundedDecimalPart}`;
133
133
  }
134
- export const OrderDetails = memo(function OrderDetails({ mode = "modal", order, depositTxs, relayTxs, executeTx, refundTxs, cryptoPaymentMethod, selectedCryptoPaymentMethod, onPaymentMethodChange, onBack, disableUrlParamManagement = false, points, }) {
134
+ export const OrderDetails = memo(function OrderDetails({ mode = "modal", order, depositTxs, relayTxs, executeTx, refundTxs, cryptoPaymentMethod, selectedCryptoPaymentMethod, onPaymentMethodChange, onBack, disableUrlParamManagement = false, points, returnToHomeUrl, returnHomeLabel, }) {
135
135
  const router = useRouter();
136
136
  const searchParams = useSearchParams();
137
137
  // Get theme from B3Provider context
138
- const { theme } = useB3();
138
+ const { theme } = useB3Config();
139
139
  const colorMode = theme || "light";
140
140
  // Read crypto payment method from URL parameters
141
141
  const cryptoPaymentMethodFromUrl = searchParams.get("cryptoPaymentMethod");
@@ -265,6 +265,34 @@ export const OrderDetails = memo(function OrderDetails({ mode = "modal", order,
265
265
  cleanupUrlParams();
266
266
  onBack?.();
267
267
  }, [cleanupUrlParams, onBack]);
268
+ // Handle "Return to Home" click - redirects to custom URL if provided
269
+ const handleReturnToHome = useCallback(() => {
270
+ if (returnToHomeUrl) {
271
+ // Validate URL to prevent Open Redirect / XSS attacks
272
+ try {
273
+ const url = new URL(returnToHomeUrl, window.location.origin);
274
+ // Only allow http/https protocols
275
+ if (url.protocol === "http:" || url.protocol === "https:") {
276
+ window.location.href = url.href;
277
+ return;
278
+ }
279
+ }
280
+ catch {
281
+ // If URL parsing fails, check if it's a safe relative URL
282
+ if (returnToHomeUrl.startsWith("/") && !returnToHomeUrl.startsWith("//")) {
283
+ window.location.href = returnToHomeUrl;
284
+ return;
285
+ }
286
+ }
287
+ // Fallback to handleBack if URL is not safe
288
+ handleBack();
289
+ }
290
+ else {
291
+ handleBack();
292
+ }
293
+ }, [returnToHomeUrl, handleBack]);
294
+ // Reusable "Return to Home" / "Close" button
295
+ const returnHomeOrCloseButton = (_jsx("button", { className: "order-close-button order-details-close-btn bg-as-brand flex w-full items-center justify-center gap-2 rounded-lg p-2 font-semibold text-white", onClick: returnToHomeUrl ? handleReturnToHome : mode === "page" ? handleBack : handleCloseModal, children: returnHomeLabel ? (returnHomeLabel) : mode === "page" ? (_jsxs(_Fragment, { children: ["Return to Home ", _jsx(Home, { className: "ml-2 h-4 w-4" })] })) : ("Close") }));
268
296
  useEffect(() => {
269
297
  if (txSuccess) {
270
298
  toast.success("Transaction successful! We are processing your order.", { duration: 10000 });
@@ -338,7 +366,7 @@ export const OrderDetails = memo(function OrderDetails({ mode = "modal", order,
338
366
  : `Received ${formatTokenAmount(BigInt(dTx.amount), srcToken.decimals)} ${srcToken.symbol}`, chainId: order.srcChain, tx: dTx, isProcessing: false }, dTx.txHash)))
339
367
  : null, refundTxs
340
368
  ? refundTxs.map(rTx => (_jsx(TransactionDetails, { title: `Refunded ${formatTokenAmount(BigInt(rTx.amount), srcToken.decimals)} ${srcToken.symbol}`, chainId: order.srcChain, tx: rTx, isProcessing: false }, rTx.txHash)))
341
- : null] }) })] }) }), order.errorDetails && (_jsx("div", { className: "flex justify-center", children: _jsx("span", { className: "text-as-primary/50 text-center text-sm", style: { maxWidth: "40ch" }, children: getErrorDisplay(order.errorDetails) }) })), _jsx("button", { className: "order-close-button order-details-close-btn bg-as-brand flex w-full items-center justify-center gap-2 rounded-lg p-2 font-semibold text-white", onClick: mode === "page" ? handleBack : handleCloseModal, children: mode === "page" ? (_jsxs(_Fragment, { children: ["Return to Home ", _jsx(Home, { className: "ml-2 h-4 w-4" })] })) : ("Close") })] }));
369
+ : null] }) })] }) }), order.errorDetails && (_jsx("div", { className: "flex justify-center", children: _jsx("span", { className: "text-as-primary/50 text-center text-sm", style: { maxWidth: "40ch" }, children: getErrorDisplay(order.errorDetails) }) })), returnHomeOrCloseButton] }));
342
370
  }
343
371
  if (executeTx) {
344
372
  return (_jsxs(_Fragment, { children: [_jsx(OrderStatus, { order: order, selectedCryptoPaymentMethod: effectiveCryptoPaymentMethod }), _jsx(OrderDetailsCollapsible, { order: order, dstToken: dstToken, tournament: tournament, nft: nft, recipientName: recipientName, formattedExpectedDstAmount: formattedExpectedDstAmount, points: points, isOpen: orderDetailsOpen, onOpenChange: setOrderDetailsOpen }), _jsx(Accordion, { type: "single", collapsible: true, className: "order-details-accordion w-full", children: _jsxs(AccordionItem, { value: "execute-details", className: "order-details-execute-item", children: [_jsx(AccordionTrigger, { className: "accordion-trigger", children: "Transaction Details" }), _jsx(AccordionContent, { className: "accordion-content pl-2", children: _jsxs("div", { className: "relative flex w-full flex-col gap-4", children: [_jsx("div", { className: "bg-as-surface-secondary absolute bottom-2 left-4 top-2 z-[5] w-2", children: _jsx(motion.div, { className: "bg-as-border-primary absolute left-[2px] top-0 z-10 w-[3px]", initial: { height: "0%" }, animate: { height: "100%" }, transition: { duration: 1.5, ease: "easeInOut" } }) }), depositTxs
@@ -363,7 +391,7 @@ export const OrderDetails = memo(function OrderDetails({ mode = "modal", order,
363
391
  dstToken,
364
392
  recipientName,
365
393
  centerTruncate,
366
- }), _jsx(ExternalLink, { className: "ml-2 h-4 w-4" })] }) }) }), order.type === "join_tournament" && order.status === "executed" && (_jsxs(ShinyButton, { accentColor: "hsl(var(--as-brand))", textColor: "text-white", className: "flex w-full items-center gap-2", disabled: txLoading || isSwitchingOrExecuting, onClick: handleCloseModal, children: [_jsx("span", { className: "pl-4", children: "Continue to Tournament" }), _jsx(ChevronRight, { className: "h-4 w-4" })] })), order.status === "executed" && (_jsx("button", { className: "order-close-button order-details-close-btn bg-as-brand flex w-full items-center justify-center gap-2 rounded-lg p-2 font-semibold text-white", onClick: mode === "page" ? handleBack : handleCloseModal, children: mode === "page" ? (_jsxs(_Fragment, { children: ["Return to Home ", _jsx(Home, { className: "ml-2 h-4 w-4" })] })) : ("Close") }))] }));
394
+ }), _jsx(ExternalLink, { className: "ml-2 h-4 w-4" })] }) }) }), order.type === "join_tournament" && order.status === "executed" && (_jsxs(ShinyButton, { accentColor: "hsl(var(--as-brand))", textColor: "text-white", className: "flex w-full items-center gap-2", disabled: txLoading || isSwitchingOrExecuting, onClick: handleCloseModal, children: [_jsx("span", { className: "pl-4", children: "Continue to Tournament" }), _jsx(ChevronRight, { className: "h-4 w-4" })] })), order.status === "executed" && returnHomeOrCloseButton] }));
367
395
  }
368
396
  if (relayTxs.length > 0 && relayTxs.every(tx => tx.status === "success")) {
369
397
  return (_jsxs(_Fragment, { children: [_jsx(OrderStatus, { order: order, selectedCryptoPaymentMethod: effectiveCryptoPaymentMethod }), _jsx(OrderDetailsCollapsible, { order: order, dstToken: dstToken, tournament: tournament, nft: nft, recipientName: recipientName, formattedExpectedDstAmount: formattedExpectedDstAmount, points: points, isOpen: orderDetailsOpen, onOpenChange: setOrderDetailsOpen }), _jsx(Accordion, { type: "single", collapsible: true, className: "order-details-accordion w-full", children: _jsxs(AccordionItem, { value: "more-details", className: "order-details-more-item", children: [_jsx(AccordionTrigger, { className: "accordion-trigger", children: "More Details" }), _jsx(AccordionContent, { className: "accordion-content pl-2", children: _jsxs("div", { className: "relative flex w-full flex-col gap-4", children: [_jsx("div", { className: "bg-as-surface-secondary absolute bottom-2 left-4 top-2 z-[5] w-2", children: _jsx(motion.div, { className: "bg-as-border-primary absolute left-[2px] top-0 z-10 w-[3px]", initial: { height: "0%" }, animate: { height: "100%" }, transition: { duration: 1.5, ease: "easeInOut" } }) }), depositTxs
@@ -384,7 +412,7 @@ export const OrderDetails = memo(function OrderDetails({ mode = "modal", order,
384
412
  ? "Depositing Hype Duel"
385
413
  : order.type === "custom" || order.type === "custom_exact_in"
386
414
  ? "Executing Contract"
387
- : "Processing Bridge", chainId: order.dstChain, isProcessing: true, tx: null, delay: 1 }))] }) })] }) }), order.type === "join_tournament" && order.status === "executed" && (_jsxs(ShinyButton, { accentColor: "hsl(var(--as-brand))", textColor: "text-white", className: "flex w-full items-center gap-2", disabled: txLoading || isSwitchingOrExecuting, onClick: handleCloseModal, children: [_jsx("span", { className: "pl-4", children: "Continue to Tournament" }), _jsx(ChevronRight, { className: "h-4 w-4" })] })), order.status === "executed" && (_jsx("button", { className: "order-close-button order-details-close-btn bg-as-brand flex w-full items-center justify-center gap-2 rounded-lg p-2 font-semibold text-white", onClick: mode === "page" ? handleBack : handleCloseModal, children: mode === "page" ? (_jsxs(_Fragment, { children: ["Return to Home ", _jsx(Home, { className: "ml-2 h-4 w-4" })] })) : ("Close") }))] }));
415
+ : "Processing Bridge", chainId: order.dstChain, isProcessing: true, tx: null, delay: 1 }))] }) })] }) }), order.type === "join_tournament" && order.status === "executed" && (_jsxs(ShinyButton, { accentColor: "hsl(var(--as-brand))", textColor: "text-white", className: "flex w-full items-center gap-2", disabled: txLoading || isSwitchingOrExecuting, onClick: handleCloseModal, children: [_jsx("span", { className: "pl-4", children: "Continue to Tournament" }), _jsx(ChevronRight, { className: "h-4 w-4" })] })), order.status === "executed" && returnHomeOrCloseButton] }));
388
416
  }
389
417
  // This boolean indicates that user finish payment, and waiting for the deposit to be confirmed. We get this from query params (waitingForDeposit=true)
390
418
  const waitingForDeposit = new URLSearchParams(window.location.search).get("waitingForDeposit") === "true";
@@ -1,7 +1,7 @@
1
1
  import { components } from "../../../../anyspend/types/api";
2
2
  import { GetQuoteResponse } from "../../../../anyspend/types/api_req_res";
3
3
  import { FiatPaymentMethod } from "./FiatPaymentMethod";
4
- export declare function PanelOnramp({ srcAmountOnRamp, setSrcAmountOnRamp, selectedPaymentMethod, setActivePanel, _recipientAddress, destinationToken, destinationChainId, destinationAmount, onDestinationTokenChange, onDestinationChainChange, fiatPaymentMethodIndex, recipientSelectionPanelIndex, dstTokenSymbol, hideDstToken, anyspendQuote, onShowPointsDetail, onShowFeeDetail, customUsdInputValues, }: {
4
+ export declare function PanelOnramp({ srcAmountOnRamp, setSrcAmountOnRamp, selectedPaymentMethod, setActivePanel, _recipientAddress, destinationToken, destinationChainId, destinationAmount, onDestinationTokenChange, onDestinationChainChange, fiatPaymentMethodIndex, recipientSelectionPanelIndex, dstTokenSymbol, hideDstToken, anyspendQuote, onShowPointsDetail, onShowFeeDetail, customUsdInputValues, customRecipientLabel, }: {
5
5
  srcAmountOnRamp: string;
6
6
  setSrcAmountOnRamp: (amount: string) => void;
7
7
  selectedPaymentMethod?: FiatPaymentMethod;
@@ -20,4 +20,6 @@ export declare function PanelOnramp({ srcAmountOnRamp, setSrcAmountOnRamp, selec
20
20
  onShowPointsDetail?: () => void;
21
21
  onShowFeeDetail?: () => void;
22
22
  customUsdInputValues?: string[];
23
+ /** Custom label for recipient display (overrides recipientName) */
24
+ customRecipientLabel?: string;
23
25
  }): import("react/jsx-runtime").JSX.Element;
@@ -10,7 +10,7 @@ import { FIAT_PAYMENT_METHOD_DISPLAY, FiatPaymentMethod } from "./FiatPaymentMet
10
10
  import { OrderTokenAmountFiat } from "./OrderTokenAmountFiat.js";
11
11
  import { PointsBadge } from "./PointsBadge.js";
12
12
  const ONE_CHAR_WIDTH = 30;
13
- export function PanelOnramp({ srcAmountOnRamp, setSrcAmountOnRamp, selectedPaymentMethod, setActivePanel, _recipientAddress, destinationToken, destinationChainId, destinationAmount, onDestinationTokenChange, onDestinationChainChange, fiatPaymentMethodIndex, recipientSelectionPanelIndex, dstTokenSymbol, hideDstToken = false, anyspendQuote, onShowPointsDetail, onShowFeeDetail, customUsdInputValues = ["5", "10", "20", "25"], }) {
13
+ export function PanelOnramp({ srcAmountOnRamp, setSrcAmountOnRamp, selectedPaymentMethod, setActivePanel, _recipientAddress, destinationToken, destinationChainId, destinationAmount, onDestinationTokenChange, onDestinationChainChange, fiatPaymentMethodIndex, recipientSelectionPanelIndex, dstTokenSymbol, hideDstToken = false, anyspendQuote, onShowPointsDetail, onShowFeeDetail, customUsdInputValues = ["5", "10", "20", "25"], customRecipientLabel, }) {
14
14
  // Helper function to get fees from anyspend quote
15
15
  const getFeeFromApi = (paymentMethod) => {
16
16
  // Try to get fee from anyspend quote first (most accurate)
@@ -87,7 +87,8 @@ export function PanelOnramp({ srcAmountOnRamp, setSrcAmountOnRamp, selectedPayme
87
87
  .filter(v => !isNaN(Number(v)))
88
88
  .map(value => (_jsxs("button", { onClick: () => handleQuickAmount(value), className: `bg-as-surface-secondary border-as-border-secondary hover:border-as-border-secondary h-7 w-14 rounded-lg border text-sm font-medium transition-all duration-200 ${srcAmountOnRamp === value
89
89
  ? "border-as-border-secondary bg-as-surface-secondary"
90
- : "bg-as-surface-secondary hover:bg-as-surface-secondary"}`, children: ["$", value] }, value))) }), destinationToken && destinationChainId && !hideDstToken && (_jsx(OrderTokenAmountFiat, { address: _recipientAddress, context: "to", inputValue: destinationAmount || "0", onChangeInput: () => { }, chainId: destinationChainId, setChainId: onDestinationChainChange || (() => { }), token: destinationToken, setToken: onDestinationTokenChange || (() => { }) }))] }), _jsxs("div", { className: "border-as-border-secondary bg-as-surface-secondary mt-4 flex w-full flex-col gap-3 rounded-xl border p-4", children: [_jsxs("div", { className: "flex w-full items-center justify-between gap-2", children: [_jsx("span", { className: "text-as-tertiarry flex items-center text-sm", children: "Recipient" }), _recipientAddress ? (_jsxs("button", { className: "text-as-tertiarry flex h-7 items-center gap-1 text-sm transition-colors hover:text-blue-700", onClick: () => setActivePanel(recipientSelectionPanelIndex), children: [_jsx("span", { className: "text-sm", children: recipientName ? formatUsername(recipientName) : formatAddress(_recipientAddress) }), _jsx(ChevronRight, { size: 16 })] })) : (_jsxs("button", { className: "text-as-tertiarry flex h-7 items-center gap-1 text-sm transition-colors hover:text-blue-700", onClick: () => setActivePanel(5), children: [_jsx(Wallet, { className: "text-as-brand", size: 16 }), "Select recipient", _jsx(ChevronRight, { size: 16 })] }))] }), _jsx("div", { className: "divider w-full" }), _jsxs("div", { className: "flex items-center justify-between gap-4", children: [_jsx("span", { className: "text-as-tertiarry text-sm", children: "Expected to receive" }), _jsxs("div", { className: "flex flex-wrap items-center justify-end gap-1", children: [_jsxs("span", { className: "text-as-primary font-semibold", children: [destinationAmount || "0", " ", dstTokenSymbol || destinationToken?.symbol || ""] }), _jsxs("div", { className: "flex items-center gap-1", children: [_jsxs("span", { className: "text-as-tertiarry text-sm", children: ["on ", destinationChainId ? ALL_CHAINS[destinationChainId]?.name : ""] }), destinationToken && destinationChainId && destinationToken.metadata?.logoURI && (_jsx("img", { src: ALL_CHAINS[destinationChainId]?.logoUrl, alt: "Chain", className: "h-4 w-4 rounded-full" }))] })] })] }), _jsx("div", { className: "divider w-full" }), _jsx("div", { className: "", children: _jsxs("div", { className: "flex items-center justify-between", children: [_jsxs("div", { className: "flex items-center gap-1.5", children: [_jsx("span", { className: "text-as-tertiarry text-sm", children: "Total" }), anyspendQuote?.data?.fee && onShowFeeDetail && (_jsx("button", { onClick: onShowFeeDetail, className: "text-as-primary/40 hover:text-as-primary/60 transition-colors", children: _jsx(Info, { className: "h-4 w-4" }) })), anyspendQuote?.data?.pointsAmount && anyspendQuote?.data?.pointsAmount > 0 && (_jsx(PointsBadge, { pointsAmount: anyspendQuote.data.pointsAmount, pointsMultiplier: anyspendQuote.data.pointsMultiplier, onClick: () => onShowPointsDetail?.() }))] }), _jsxs("div", { className: "flex flex-col items-end gap-0.5", children: [_jsxs("span", { className: "text-as-primary font-semibold", children: ["$", getTotalAmount(selectedPaymentMethod || FiatPaymentMethod.NONE).toFixed(2)] }), (() => {
90
+ : "bg-as-surface-secondary hover:bg-as-surface-secondary"}`, children: ["$", value] }, value))) }), destinationToken && destinationChainId && !hideDstToken && (_jsx(OrderTokenAmountFiat, { address: _recipientAddress, context: "to", inputValue: destinationAmount || "0", onChangeInput: () => { }, chainId: destinationChainId, setChainId: onDestinationChainChange || (() => { }), token: destinationToken, setToken: onDestinationTokenChange || (() => { }) }))] }), _jsxs("div", { className: "border-as-border-secondary bg-as-surface-secondary mt-4 flex w-full flex-col gap-3 rounded-xl border p-4", children: [_jsxs("div", { className: "flex w-full items-center justify-between gap-2", children: [_jsx("span", { className: "text-as-tertiarry flex items-center text-sm", children: "Recipient" }), _recipientAddress ? (_jsxs("button", { className: "text-as-tertiarry flex h-7 items-center gap-1 text-sm transition-colors hover:text-blue-700", onClick: () => setActivePanel(recipientSelectionPanelIndex), children: [_jsx("span", { className: "text-sm", children: customRecipientLabel ||
91
+ (recipientName ? formatUsername(recipientName) : formatAddress(_recipientAddress)) }), _jsx(ChevronRight, { size: 16 })] })) : (_jsxs("button", { className: "text-as-tertiarry flex h-7 items-center gap-1 text-sm transition-colors hover:text-blue-700", onClick: () => setActivePanel(5), children: [_jsx(Wallet, { className: "text-as-brand", size: 16 }), "Select recipient", _jsx(ChevronRight, { size: 16 })] }))] }), _jsx("div", { className: "divider w-full" }), _jsxs("div", { className: "flex items-center justify-between gap-4", children: [_jsx("span", { className: "text-as-tertiarry text-sm", children: "Expected to receive" }), _jsxs("div", { className: "flex flex-wrap items-center justify-end gap-1", children: [_jsxs("span", { className: "text-as-primary font-semibold", children: [destinationAmount || "0", " ", dstTokenSymbol || destinationToken?.symbol || ""] }), _jsxs("div", { className: "flex items-center gap-1", children: [_jsxs("span", { className: "text-as-tertiarry text-sm", children: ["on ", destinationChainId ? ALL_CHAINS[destinationChainId]?.name : ""] }), destinationToken && destinationChainId && destinationToken.metadata?.logoURI && (_jsx("img", { src: ALL_CHAINS[destinationChainId]?.logoUrl, alt: "Chain", className: "h-4 w-4 rounded-full" }))] })] })] }), _jsx("div", { className: "divider w-full" }), _jsx("div", { className: "", children: _jsxs("div", { className: "flex items-center justify-between", children: [_jsxs("div", { className: "flex items-center gap-1.5", children: [_jsx("span", { className: "text-as-tertiarry text-sm", children: "Total" }), anyspendQuote?.data?.fee && onShowFeeDetail && (_jsx("button", { onClick: onShowFeeDetail, className: "text-as-primary/40 hover:text-as-primary/60 transition-colors", children: _jsx(Info, { className: "h-4 w-4" }) })), anyspendQuote?.data?.pointsAmount && anyspendQuote?.data?.pointsAmount > 0 && (_jsx(PointsBadge, { pointsAmount: anyspendQuote.data.pointsAmount, pointsMultiplier: anyspendQuote.data.pointsMultiplier, onClick: () => onShowPointsDetail?.() }))] }), _jsxs("div", { className: "flex flex-col items-end gap-0.5", children: [_jsxs("span", { className: "text-as-primary font-semibold", children: ["$", getTotalAmount(selectedPaymentMethod || FiatPaymentMethod.NONE).toFixed(2)] }), (() => {
91
92
  // For fiat payments, show the fee from the payment method
92
93
  const fiatFee = getFeeFromApi(selectedPaymentMethod || FiatPaymentMethod.NONE);
93
94
  if (fiatFee !== null && fiatFee > 0) {
@@ -1,9 +1,8 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { getStripePromise } from "../../../../shared/utils/payment.utils.js";
3
2
  import { OrderDetailsCollapsible, useStripeClientSecret } from "../../../../anyspend/react/index.js";
4
- import { ShinyButton, useB3, useModalStore, useProfile } from "../../../../global-account/react/index.js";
3
+ import { ShinyButton, useB3Config, useModalStore, useProfile } from "../../../../global-account/react/index.js";
5
4
  import { formatTokenAmount } from "../../../../shared/utils/number.js";
6
- import { formatStripeAmount } from "../../../../shared/utils/payment.utils.js";
5
+ import { formatStripeAmount, getStripePromise } from "../../../../shared/utils/payment.utils.js";
7
6
  import { AddressElement, Elements, PaymentElement, useElements, useStripe } from "@stripe/react-stripe-js";
8
7
  import { X } from "lucide-react";
9
8
  import { useEffect, useState } from "react";
@@ -11,7 +10,7 @@ import { AnySpendFingerprintWrapper, getFingerprintConfig } from "../AnySpendFin
11
10
  import HowItWorks from "./HowItWorks.js";
12
11
  import PaymentMethodIcons from "./PaymentMethodIcons.js";
13
12
  export default function PaymentStripeWeb2({ order, stripePaymentIntentId, onPaymentSuccess }) {
14
- const { theme, stripePublishableKey } = useB3();
13
+ const { theme, stripePublishableKey } = useB3Config();
15
14
  const fingerprintConfig = getFingerprintConfig();
16
15
  const { clientSecret, isLoadingStripeClientSecret, stripeClientSecretError } = useStripeClientSecret(stripePaymentIntentId);
17
16
  if (isLoadingStripeClientSecret) {
@@ -1,7 +1,7 @@
1
1
  import { USDC_BASE } from "../../../anyspend/constants/index.js";
2
2
  import { anyspendService } from "../../../anyspend/services/anyspend.js";
3
3
  import { buildMetadata, buildPayload, normalizeAddress } from "../../../anyspend/utils/index.js";
4
- import { useB3 } from "../../../global-account/react/index.js";
4
+ import { useB3Config } from "../../../global-account/react/index.js";
5
5
  import { useVisitorData } from "@fingerprintjs/fingerprintjs-pro-react";
6
6
  import { useMutation } from "@tanstack/react-query";
7
7
  import { useMemo } from "react";
@@ -14,7 +14,7 @@ import { useValidatedClientReferenceId } from "./useValidatedClientReferenceId.j
14
14
  */
15
15
  export function useAnyspendCreateOnrampOrder({ onSuccess, onError } = {}) {
16
16
  // Get B3 context values
17
- const { partnerId } = useB3();
17
+ const { partnerId } = useB3Config();
18
18
  // Get validated client reference ID from B3 context
19
19
  const createValidatedClientReferenceId = useValidatedClientReferenceId();
20
20
  // Get fingerprint data
@@ -1,6 +1,6 @@
1
1
  import { anyspendService } from "../../../anyspend/services/anyspend.js";
2
2
  import { buildMetadata, buildPayload, normalizeAddress } from "../../../anyspend/utils/index.js";
3
- import { useB3 } from "../../../global-account/react/index.js";
3
+ import { useB3Config } from "../../../global-account/react/index.js";
4
4
  import { useVisitorData } from "@fingerprintjs/fingerprintjs-pro-react";
5
5
  import { useMutation } from "@tanstack/react-query";
6
6
  import { useMemo } from "react";
@@ -12,7 +12,7 @@ import { useValidatedClientReferenceId } from "./useValidatedClientReferenceId.j
12
12
  */
13
13
  export function useAnyspendCreateOrder({ onSuccess, onError } = {}) {
14
14
  // Get B3 context values
15
- const { partnerId } = useB3();
15
+ const { partnerId } = useB3Config();
16
16
  // Get validated client reference ID from B3 context
17
17
  const createValidatedClientReferenceId = useValidatedClientReferenceId();
18
18
  // Get fingerprint data
@@ -1,6 +1,6 @@
1
1
  import { anyspendService } from "../../../anyspend/services/anyspend.js";
2
2
  import { normalizeAddress } from "../../../anyspend/utils/index.js";
3
- import { useB3 } from "../../../global-account/react/index.js";
3
+ import { useB3Config } from "../../../global-account/react/index.js";
4
4
  import { useVisitorData } from "@fingerprintjs/fingerprintjs-pro-react";
5
5
  import { useMutation } from "@tanstack/react-query";
6
6
  import { useMemo } from "react";
@@ -9,7 +9,7 @@ import { useMemo } from "react";
9
9
  * This order type doesn't require srcAmount - the user deposits tokens after the order is created.
10
10
  */
11
11
  export function useCreateDepositFirstOrder({ onSuccess, onError } = {}) {
12
- const { partnerId } = useB3();
12
+ const { partnerId } = useB3Config();
13
13
  const { data: fpData } = useVisitorData({ extendedResult: true }, { immediate: true });
14
14
  const visitorData = fpData && {
15
15
  requestId: fpData.requestId,
@@ -1,12 +1,12 @@
1
1
  import { Validators } from "../../../anyspend/utils/validation.js";
2
- import { useB3 } from "../../../global-account/react/index.js";
2
+ import { useB3Config } from "../../../global-account/react/index.js";
3
3
  import { useCallback } from "react";
4
4
  /**
5
5
  * Hook that provides a validated client reference ID
6
6
  * Gets the createClientReferenceId function from B3 context and validates the result
7
7
  */
8
8
  export function useValidatedClientReferenceId() {
9
- const { createClientReferenceId } = useB3();
9
+ const { createClientReferenceId } = useB3Config();
10
10
  const createValidatedClientReferenceId = useCallback(async (params) => {
11
11
  // If no function provided, return undefined
12
12
  if (!createClientReferenceId) {
@@ -4,14 +4,13 @@ import { AnySpendDepositHype } from "../../../anyspend/react/components/Anyspend
4
4
  import { AnySpendDepositUpside } from "../../../anyspend/react/components/AnySpendDepositUpside.js";
5
5
  import { AnySpendStakeUpside } from "../../../anyspend/react/components/AnySpendStakeUpside.js";
6
6
  import { AnySpendStakeUpsideExactIn } from "../../../anyspend/react/components/AnySpendStakeUpsideExactIn.js";
7
- import { useGlobalAccount, useIsMobile, useModalStore } from "../../../global-account/react/index.js";
7
+ import { useB3Config, useGlobalAccount, useIsMobile, useModalStore } from "../../../global-account/react/index.js";
8
8
  import { cn } from "../../../shared/utils/cn.js";
9
9
  import { debugB3React } from "../../../shared/utils/debug.js";
10
10
  import { AnimatePresence, motion } from "framer-motion";
11
11
  import { useEffect, useRef } from "react";
12
12
  import { useSetActiveWallet } from "thirdweb/react";
13
13
  import { AvatarEditor } from "./AvatarEditor/AvatarEditor.js";
14
- import { useB3 } from "./B3Provider/useB3.js";
15
14
  import { Deposit } from "./Deposit/Deposit.js";
16
15
  import { LinkAccount } from "./LinkAccount/LinkAccount.js";
17
16
  import { LinkNewAccount } from "./LinkAccount/LinkNewAccount.js";
@@ -20,8 +19,8 @@ import NotificationsContent from "./ManageAccount/NotificationsContent.js";
20
19
  import { RequestPermissions } from "./RequestPermissions/RequestPermissions.js";
21
20
  import { Send } from "./Send/Send.js";
22
21
  import { SignInWithB3Flow } from "./SignInWithB3/SignInWithB3Flow.js";
23
- import { TurnkeyAuthModal } from "./TurnkeyAuthModal.js";
24
22
  import { ToastContainer, useToastContext } from "./Toast/index.js";
23
+ import { TurnkeyAuthModal } from "./TurnkeyAuthModal.js";
25
24
  import { Dialog, DialogContent, DialogDescription, DialogTitle } from "./ui/dialog.js";
26
25
  import { Drawer, DrawerContent, DrawerDescription, DrawerTitle } from "./ui/drawer.js";
27
26
  const debug = debugB3React("B3DynamicModal");
@@ -30,7 +29,7 @@ export function B3DynamicModal() {
30
29
  const setB3ModalOpen = useModalStore(state => state.setB3ModalOpen);
31
30
  const contentType = useModalStore(state => state.contentType);
32
31
  const navigateBack = useModalStore(state => state.navigateBack);
33
- const { theme } = useB3();
32
+ const { theme } = useB3Config();
34
33
  const isMobile = useIsMobile();
35
34
  const prevIsOpenRef = useRef(isOpen);
36
35
  const { wallet } = useGlobalAccount();
@@ -0,0 +1,5 @@
1
+ declare const AuthenticationProvider: ({ partnerId, automaticallySetFirstEoa, }: {
2
+ partnerId: string;
3
+ automaticallySetFirstEoa: boolean;
4
+ }) => null;
5
+ export default AuthenticationProvider;
@@ -0,0 +1,10 @@
1
+ import { useAuthentication } from "../../hooks/index.js";
2
+ import { useAutoSelectWallet } from "../../hooks/useAutoSelectWallet.js";
3
+ const AuthenticationProvider = ({ partnerId, automaticallySetFirstEoa, }) => {
4
+ useAuthentication(partnerId);
5
+ useAutoSelectWallet({
6
+ enabled: automaticallySetFirstEoa,
7
+ });
8
+ return null;
9
+ };
10
+ export default AuthenticationProvider;
@@ -5,15 +5,14 @@ import "@relayprotocol/relay-kit-ui/styles.css";
5
5
  import { Account, Wallet } from "thirdweb/wallets";
6
6
  import { CreateConnectorFn } from "wagmi";
7
7
  import { ClientType } from "../../../client-manager";
8
- import { B3ContextType } from "./types";
9
8
  /**
10
9
  * Main B3Provider component
11
10
  */
12
- export declare function B3Provider({ theme, children, accountOverride, environment, automaticallySetFirstEoa, simDuneApiKey, toaster: _toaster, clientType, rpcUrls, partnerId, stripePublishableKey, onConnect, connectors, overrideDefaultConnectors, createClientReferenceId, enableTurnkey, }: {
11
+ export declare function B3Provider({ theme, children, accountOverride, environment, automaticallySetFirstEoa, simDuneApiKey, toaster: _toaster, clientType, rpcUrls, partnerId, stripePublishableKey, onConnect, connectors, overrideDefaultConnectors, createClientReferenceId, enableTurnkey, defaultPermissions, }: {
13
12
  theme: "light" | "dark";
14
13
  children: React.ReactNode;
15
14
  accountOverride?: Account;
16
- environment: B3ContextType["environment"];
15
+ environment?: "development" | "production";
17
16
  automaticallySetFirstEoa?: boolean;
18
17
  simDuneApiKey?: string;
19
18
  toaster?: {
@@ -30,20 +29,5 @@ export declare function B3Provider({ theme, children, accountOverride, environme
30
29
  overrideDefaultConnectors?: boolean;
31
30
  createClientReferenceId?: (params: CreateOrderParams | CreateOnrampOrderParams) => Promise<string>;
32
31
  enableTurnkey?: boolean;
33
- }): import("react/jsx-runtime").JSX.Element;
34
- /**
35
- * Inner provider component that provides the actual B3Context
36
- */
37
- export declare function InnerProvider({ children, accountOverride, environment, defaultPermissions, automaticallySetFirstEoa, theme, clientType, partnerId, stripePublishableKey, createClientReferenceId, enableTurnkey, }: {
38
- children: React.ReactNode;
39
- accountOverride?: Account;
40
- environment: B3ContextType["environment"];
41
32
  defaultPermissions?: PermissionsConfig;
42
- automaticallySetFirstEoa: boolean;
43
- theme: "light" | "dark";
44
- clientType?: ClientType;
45
- partnerId: string;
46
- stripePublishableKey?: string;
47
- createClientReferenceId?: (params: CreateOrderParams | CreateOnrampOrderParams) => Promise<string>;
48
- enableTurnkey?: boolean;
49
33
  }): import("react/jsx-runtime").JSX.Element;