@b3dotfun/sdk 0.0.12 → 0.0.13-alpha.0

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 (43) hide show
  1. package/dist/cjs/anyspend/react/components/AnySpend.js +2 -5
  2. package/dist/cjs/anyspend/react/components/AnySpendCustom.js +2 -2
  3. package/dist/cjs/anyspend/react/components/common/OrderDetails.js +2 -1
  4. package/dist/cjs/global-account/react/hooks/index.d.ts +0 -2
  5. package/dist/cjs/global-account/react/hooks/index.js +1 -5
  6. package/dist/cjs/global-account/react/hooks/useAccountWallet.js +2 -3
  7. package/dist/cjs/global-account/react/hooks/useProfile.d.ts +27 -0
  8. package/dist/cjs/global-account/react/hooks/useProfile.js +65 -0
  9. package/dist/esm/anyspend/react/components/AnySpend.js +3 -6
  10. package/dist/esm/anyspend/react/components/AnySpendCustom.js +3 -3
  11. package/dist/esm/anyspend/react/components/common/OrderDetails.js +3 -2
  12. package/dist/esm/global-account/react/hooks/index.d.ts +0 -2
  13. package/dist/esm/global-account/react/hooks/index.js +0 -2
  14. package/dist/esm/global-account/react/hooks/useAccountWallet.js +3 -4
  15. package/dist/esm/global-account/react/hooks/useProfile.d.ts +27 -0
  16. package/dist/esm/global-account/react/hooks/useProfile.js +63 -0
  17. package/dist/types/global-account/react/hooks/index.d.ts +0 -2
  18. package/dist/types/global-account/react/hooks/useProfile.d.ts +27 -0
  19. package/package.json +1 -1
  20. package/src/anyspend/react/components/AnySpend.tsx +3 -7
  21. package/src/anyspend/react/components/AnySpendCustom.tsx +3 -3
  22. package/src/anyspend/react/components/common/OrderDetails.tsx +4 -2
  23. package/src/global-account/react/hooks/index.ts +0 -2
  24. package/src/global-account/react/hooks/useAccountWallet.tsx +3 -4
  25. package/src/global-account/react/hooks/useProfile.ts +102 -0
  26. package/dist/cjs/global-account/react/hooks/useBsmntProfile.d.ts +0 -4
  27. package/dist/cjs/global-account/react/hooks/useBsmntProfile.js +0 -13
  28. package/dist/cjs/global-account/react/hooks/useOnchainName.d.ts +0 -19
  29. package/dist/cjs/global-account/react/hooks/useOnchainName.js +0 -193
  30. package/dist/cjs/shared/utils/fetchBsmntProfile.d.ts +0 -1
  31. package/dist/cjs/shared/utils/fetchBsmntProfile.js +0 -26
  32. package/dist/esm/global-account/react/hooks/useBsmntProfile.d.ts +0 -4
  33. package/dist/esm/global-account/react/hooks/useBsmntProfile.js +0 -9
  34. package/dist/esm/global-account/react/hooks/useOnchainName.d.ts +0 -19
  35. package/dist/esm/global-account/react/hooks/useOnchainName.js +0 -187
  36. package/dist/esm/shared/utils/fetchBsmntProfile.d.ts +0 -1
  37. package/dist/esm/shared/utils/fetchBsmntProfile.js +0 -23
  38. package/dist/types/global-account/react/hooks/useBsmntProfile.d.ts +0 -4
  39. package/dist/types/global-account/react/hooks/useOnchainName.d.ts +0 -19
  40. package/dist/types/shared/utils/fetchBsmntProfile.d.ts +0 -1
  41. package/src/global-account/react/hooks/useBsmntProfile.ts +0 -14
  42. package/src/global-account/react/hooks/useOnchainName.tsx +0 -198
  43. package/src/shared/utils/fetchBsmntProfile.ts +0 -29
@@ -306,11 +306,8 @@ function AnySpend({ destinationTokenAddress, destinationTokenChainId, isMainnet
306
306
  tradeType: "EXACT_INPUT",
307
307
  amount: srcAmountOnrampInWei,
308
308
  });
309
- // Replace the old ENS lookup with our new hooks
310
- const { name: recipientName } = (0, react_2.useOnchainName)(recipientAddress);
311
- // const { name: walletName } = useOnchainName(globalAddress);
312
- // Batch lookup for custom recipients
313
- // const { names: customRecipientNames } = useOnchainNames(customRecipients.map(r => r.address));
309
+ const recipientProfile = (0, react_2.useProfile)({ address: recipientAddress });
310
+ const recipientName = recipientProfile.data?.name?.replace(/\.b3\.fun/g, "");
314
311
  // Load custom recipients from local storage on mount
315
312
  (0, react_3.useEffect)(() => {
316
313
  try {
@@ -102,8 +102,8 @@ function AnySpendCustom({ isMainnet = true, loadOrder, mode = "modal", recipient
102
102
  const [customRecipientAddress, setCustomRecipientAddress] = (0, react_3.useState)(recipientAddressProps);
103
103
  // Update recipient logic to use custom recipient
104
104
  const recipientAddress = customRecipientAddress || currentWallet.address;
105
- const recipientPropsProfile = (0, react_2.useBsmntProfile)({ address: recipientAddress });
106
- const recipientEnsName = recipientPropsProfile.data?.username?.replace(/\.b3\.fun/g, "");
105
+ const recipientPropsProfile = (0, react_2.useProfile)({ address: recipientAddress });
106
+ const recipientEnsName = recipientPropsProfile.data?.name?.replace(/\.b3\.fun/g, "");
107
107
  const recipientImageUrl = recipientPropsProfile.data?.avatar || currentWallet.wallet.meta?.icon;
108
108
  const [orderId, setOrderId] = (0, react_3.useState)(loadOrder);
109
109
  const [srcChainId, setSrcChainId] = (0, react_3.useState)(isMainnet ? chains_1.base.id : chains_1.baseSepolia.id);
@@ -130,7 +130,8 @@ exports.OrderDetails = (0, react_4.memo)(function OrderDetails({ isMainnet, mode
130
130
  const dstToken = order.metadata.dstToken;
131
131
  const nft = order.type === "mint_nft" ? order.metadata.nft : undefined;
132
132
  const tournament = order.type === "join_tournament" || order.type === "fund_tournament" ? order.metadata.tournament : undefined;
133
- const { name: recipientName } = (0, react_1.useOnchainName)(order.recipientAddress);
133
+ const profile = (0, react_1.useProfile)({ address: order.recipientAddress });
134
+ const recipientName = profile.data?.name?.replace(/\.b3\.fun/g, "");
134
135
  const account = (0, react_1.useAccountWallet)();
135
136
  const { data: walletClient } = (0, wagmi_1.useWalletClient)();
136
137
  const [txHash, setTxHash] = (0, react_4.useState)();
@@ -5,7 +5,6 @@ export { useAuthentication } from "./useAuthentication";
5
5
  export { useB3BalanceFromAddresses } from "./useB3BalanceFromAddresses";
6
6
  export { useB3EnsName } from "./useB3EnsName";
7
7
  export { useBestTransactionPath } from "./useBestTransactionPath";
8
- export { useBsmntProfile } from "./useBsmntProfile";
9
8
  export { useChainSwitchWithAction } from "./useChainSwitchWithAction";
10
9
  export { useClaim } from "./useClaim";
11
10
  export { useConnect } from "./useConnect";
@@ -18,7 +17,6 @@ export { useIsMobile } from "./useIsMobile";
18
17
  export { useIsomorphicLayoutEffect } from "./useIsomorphicLayoutEffect";
19
18
  export { useMediaQuery } from "./useMediaQuery";
20
19
  export { useNativeBalance, useNativeBalanceFromRPC } from "./useNativeBalance";
21
- export { useOnchainName } from "./useOnchainName";
22
20
  export { useOneBalance } from "./useOneBalance";
23
21
  export { useProfile, useProfilePreference, type Profile, type CombinedProfile, type PreferenceRequestBody, } from "./useProfile";
24
22
  export { useQueryB3 } from "./useQueryB3";
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.useURLParams = exports.useTokensFromAddress = exports.useTokenPriceWithFallback = exports.useTokenPrice = exports.useTokenFromUrl = exports.useTokenData = exports.useTokenBalancesByChain = exports.useTokenBalance = exports.useSiwe = exports.useSearchParamsSSR = exports.useRouter = exports.useRemoveSessionKey = exports.useQueryBSMNT = exports.useQueryB3 = exports.useProfilePreference = exports.useProfile = exports.useOneBalance = exports.useOnchainName = exports.useNativeBalanceFromRPC = exports.useNativeBalance = exports.useMediaQuery = exports.useIsomorphicLayoutEffect = exports.useIsMobile = exports.useHasMounted = exports.useHandleConnectWithPrivy = exports.useGetGeo = exports.useGetAllTWSigners = exports.useExchangeRate = exports.useConnect = exports.useClaim = exports.useChainSwitchWithAction = exports.useBsmntProfile = exports.useBestTransactionPath = exports.useB3EnsName = exports.useB3BalanceFromAddresses = exports.useAuthentication = exports.useAddTWSessionKey = exports.useAccountWallet = exports.useAccountAssets = void 0;
3
+ exports.useURLParams = exports.useTokensFromAddress = exports.useTokenPriceWithFallback = exports.useTokenPrice = exports.useTokenFromUrl = exports.useTokenData = exports.useTokenBalancesByChain = exports.useTokenBalance = exports.useSiwe = exports.useSearchParamsSSR = exports.useRouter = exports.useRemoveSessionKey = exports.useQueryBSMNT = exports.useQueryB3 = exports.useProfilePreference = exports.useProfile = exports.useOneBalance = exports.useNativeBalanceFromRPC = exports.useNativeBalance = exports.useMediaQuery = exports.useIsomorphicLayoutEffect = exports.useIsMobile = exports.useHasMounted = exports.useHandleConnectWithPrivy = exports.useGetGeo = exports.useGetAllTWSigners = exports.useExchangeRate = exports.useConnect = exports.useClaim = exports.useChainSwitchWithAction = exports.useBestTransactionPath = exports.useB3EnsName = exports.useB3BalanceFromAddresses = exports.useAuthentication = exports.useAddTWSessionKey = exports.useAccountWallet = exports.useAccountAssets = void 0;
4
4
  var useAccountAssets_1 = require("./useAccountAssets");
5
5
  Object.defineProperty(exports, "useAccountAssets", { enumerable: true, get: function () { return useAccountAssets_1.useAccountAssets; } });
6
6
  var useAccountWallet_1 = require("./useAccountWallet");
@@ -15,8 +15,6 @@ var useB3EnsName_1 = require("./useB3EnsName");
15
15
  Object.defineProperty(exports, "useB3EnsName", { enumerable: true, get: function () { return useB3EnsName_1.useB3EnsName; } });
16
16
  var useBestTransactionPath_1 = require("./useBestTransactionPath");
17
17
  Object.defineProperty(exports, "useBestTransactionPath", { enumerable: true, get: function () { return useBestTransactionPath_1.useBestTransactionPath; } });
18
- var useBsmntProfile_1 = require("./useBsmntProfile");
19
- Object.defineProperty(exports, "useBsmntProfile", { enumerable: true, get: function () { return useBsmntProfile_1.useBsmntProfile; } });
20
18
  var useChainSwitchWithAction_1 = require("./useChainSwitchWithAction");
21
19
  Object.defineProperty(exports, "useChainSwitchWithAction", { enumerable: true, get: function () { return useChainSwitchWithAction_1.useChainSwitchWithAction; } });
22
20
  var useClaim_1 = require("./useClaim");
@@ -42,8 +40,6 @@ Object.defineProperty(exports, "useMediaQuery", { enumerable: true, get: functio
42
40
  var useNativeBalance_1 = require("./useNativeBalance");
43
41
  Object.defineProperty(exports, "useNativeBalance", { enumerable: true, get: function () { return useNativeBalance_1.useNativeBalance; } });
44
42
  Object.defineProperty(exports, "useNativeBalanceFromRPC", { enumerable: true, get: function () { return useNativeBalance_1.useNativeBalanceFromRPC; } });
45
- var useOnchainName_1 = require("./useOnchainName");
46
- Object.defineProperty(exports, "useOnchainName", { enumerable: true, get: function () { return useOnchainName_1.useOnchainName; } });
47
43
  var useOneBalance_1 = require("./useOneBalance");
48
44
  Object.defineProperty(exports, "useOneBalance", { enumerable: true, get: function () { return useOneBalance_1.useOneBalance; } });
49
45
  var useProfile_1 = require("./useProfile");
@@ -6,7 +6,6 @@ const constants_1 = require("../../../shared/constants");
6
6
  const react_2 = require("react");
7
7
  const react_3 = require("thirdweb/react");
8
8
  const in_app_1 = require("thirdweb/wallets/in-app");
9
- const useBsmntProfile_1 = require("./useBsmntProfile");
10
9
  function useLastAuthProvider() {
11
10
  const [lastAuthProvider, setLastAuthProvider] = (0, react_2.useState)(null);
12
11
  (0, react_2.useEffect)(() => {
@@ -32,8 +31,8 @@ function useAccountWallet() {
32
31
  const smartWalletIcon = lastAuthProvider && !connectedEOAWallet
33
32
  ? in_app_1.socialIcons[lastAuthProvider]
34
33
  : "https://gradvatar.com/0x0000000000000000000000000000000000000000"; // show smart wallet of eoa wallet is gradvatar
35
- const { data: profileData } = (0, useBsmntProfile_1.useBsmntProfile)({ address: account?.address });
36
- const ensName = profileData?.username?.replace(/\.b3\.fun/g, "");
34
+ const { data: profileData } = (0, react_1.useProfile)({ address: account?.address });
35
+ const ensName = profileData?.displayName?.replace(/\.b3\.fun/g, "");
37
36
  const avatarUrl = profileData?.avatar;
38
37
  const res = (0, react_2.useMemo)(() => ({
39
38
  wallet: {
@@ -21,6 +21,13 @@ export interface PreferenceRequestBody {
21
21
  signer: string;
22
22
  timestamp: number;
23
23
  }
24
+ export interface DisplayNameRequestBody {
25
+ key: string;
26
+ displayName: string;
27
+ signature: string;
28
+ signer: string;
29
+ timestamp: number;
30
+ }
24
31
  export declare function useProfile({ address, name, fresh, }: {
25
32
  address?: string;
26
33
  name?: string;
@@ -35,4 +42,24 @@ export declare function useProfilePreference(): {
35
42
  success: boolean;
36
43
  }>;
37
44
  };
45
+ export declare function useDisplayName(): {
46
+ setName: (key: string, displayName: string, signerAddress: string, signMessage: (message: string) => Promise<string>) => Promise<{
47
+ success: boolean;
48
+ }>;
49
+ };
50
+ export declare function useProfileSettings(): {
51
+ setPreference: (key: string, preferredType: string, signerAddress: string, signMessage: (message: string) => Promise<string>) => Promise<{
52
+ success: boolean;
53
+ }>;
54
+ setDisplayName: (key: string, displayName: string, signerAddress: string, signMessage: (message: string) => Promise<string>) => Promise<{
55
+ success: boolean;
56
+ }>;
57
+ updateSettings: (key: string, signerAddress: string, signMessage: (message: string) => Promise<string>, settings: {
58
+ preferredType?: string;
59
+ displayName?: string;
60
+ }) => Promise<{
61
+ preference?: any;
62
+ displayName?: any;
63
+ }>;
64
+ };
38
65
  export default useProfile;
@@ -2,6 +2,8 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.useProfile = useProfile;
4
4
  exports.useProfilePreference = useProfilePreference;
5
+ exports.useDisplayName = useDisplayName;
6
+ exports.useProfileSettings = useProfileSettings;
5
7
  const react_query_1 = require("@tanstack/react-query");
6
8
  const PROFILES_API_URL = "https://profiles.b3.fun";
7
9
  async function fetchProfile({ address, name, fresh = false, }) {
@@ -40,6 +42,25 @@ async function setProfilePreference({ key, preferredType, signature, signer, tim
40
42
  }
41
43
  return response.json();
42
44
  }
45
+ async function setDisplayName({ key, displayName, signature, signer, timestamp, }) {
46
+ const response = await fetch(`${PROFILES_API_URL}/display-name`, {
47
+ method: "POST",
48
+ headers: {
49
+ "Content-Type": "application/json",
50
+ },
51
+ body: JSON.stringify({
52
+ key,
53
+ displayName,
54
+ signature,
55
+ signer,
56
+ timestamp,
57
+ }),
58
+ });
59
+ if (!response.ok) {
60
+ throw new Error(`Failed to set display name: ${response.statusText}`);
61
+ }
62
+ return response.json();
63
+ }
43
64
  function useProfile({ address, name, fresh = false, }, options) {
44
65
  return (0, react_query_1.useQuery)({
45
66
  queryKey: ["profile", address || name, fresh],
@@ -69,4 +90,48 @@ function useProfilePreference() {
69
90
  };
70
91
  return { setPreference };
71
92
  }
93
+ function useDisplayName() {
94
+ const setName = async (key, displayName, signerAddress, signMessage) => {
95
+ const timestamp = Math.floor(Date.now() / 1000);
96
+ const message = `SetDisplayName:${key}:${displayName}:${timestamp}`;
97
+ try {
98
+ const signature = await signMessage(message);
99
+ return setDisplayName({
100
+ key,
101
+ displayName,
102
+ signature,
103
+ signer: signerAddress,
104
+ timestamp,
105
+ });
106
+ }
107
+ catch (error) {
108
+ throw new Error(`Failed to set display name: ${error}`);
109
+ }
110
+ };
111
+ return { setName };
112
+ }
113
+ function useProfileSettings() {
114
+ const { setPreference } = useProfilePreference();
115
+ const { setName } = useDisplayName();
116
+ const updateSettings = async (key, signerAddress, signMessage, settings) => {
117
+ const results = {};
118
+ try {
119
+ if (settings.preferredType) {
120
+ results.preference = await setPreference(key, settings.preferredType, signerAddress, signMessage);
121
+ }
122
+ if (settings.displayName) {
123
+ results.displayName = await setName(key, settings.displayName, signerAddress, signMessage);
124
+ }
125
+ return results;
126
+ }
127
+ catch (error) {
128
+ throw new Error(`Failed to update profile settings: ${error}`);
129
+ }
130
+ };
131
+ return {
132
+ setPreference,
133
+ setDisplayName: setName,
134
+ updateSettings,
135
+ };
136
+ }
72
137
  exports.default = useProfile;
@@ -2,7 +2,7 @@
2
2
  import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
3
3
  import { getDefaultToken, USDC_BASE } from "../../../anyspend/index.js";
4
4
  import { useAnyspendCreateOrder, useAnyspendOrderAndTransactions, useAnyspendQuote, } from "../../../anyspend/react/index.js";
5
- import { Button, ShinyButton, StyleRoot, TransitionPanel, useAccountWallet, useOnchainName, useRouter, useSearchParamsSSR, useTokenData, useTokenFromUrl, } from "../../../global-account/react/index.js";
5
+ import { Button, ShinyButton, StyleRoot, TransitionPanel, useAccountWallet, useProfile, useRouter, useSearchParamsSSR, useTokenData, useTokenFromUrl, } from "../../../global-account/react/index.js";
6
6
  import { cn } from "../../../shared/utils/cn.js";
7
7
  import { shortenAddress } from "../../../shared/utils/formatAddress.js";
8
8
  import { formatDisplayNumber, formatTokenAmount } from "../../../shared/utils/number.js";
@@ -299,11 +299,8 @@ export function AnySpend({ destinationTokenAddress, destinationTokenChainId, isM
299
299
  tradeType: "EXACT_INPUT",
300
300
  amount: srcAmountOnrampInWei,
301
301
  });
302
- // Replace the old ENS lookup with our new hooks
303
- const { name: recipientName } = useOnchainName(recipientAddress);
304
- // const { name: walletName } = useOnchainName(globalAddress);
305
- // Batch lookup for custom recipients
306
- // const { names: customRecipientNames } = useOnchainNames(customRecipients.map(r => r.address));
302
+ const recipientProfile = useProfile({ address: recipientAddress });
303
+ const recipientName = recipientProfile.data?.name?.replace(/\.b3\.fun/g, "");
307
304
  // Load custom recipients from local storage on mount
308
305
  useEffect(() => {
309
306
  try {
@@ -2,7 +2,7 @@ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-run
2
2
  import { eqci, getDefaultToken } from "../../../anyspend/index.js";
3
3
  import { RELAY_ETH_ADDRESS, USDC_BASE } from "../../../anyspend/constants/index.js";
4
4
  import { useAnyspendCreateOnrampOrder, useAnyspendCreateOrder, useAnyspendOrderAndTransactions, useAnyspendQuote, useAnyspendTokenList, useGeoOnrampOptions, } from "../../../anyspend/react/index.js";
5
- import { Badge, Button, Dialog, DialogContent, Input, ShinyButton, Skeleton, StyleRoot, Tabs, TabsContent, TabsList, TabTrigger, TextShimmer, Tooltip, TooltipContent, TooltipTrigger, TransitionPanel, useAccountWallet, useBsmntProfile, useHasMounted, useRouter, useSearchParamsSSR, useTokenBalancesByChain, } from "../../../global-account/react/index.js";
5
+ import { Badge, Button, Dialog, DialogContent, Input, ShinyButton, Skeleton, StyleRoot, Tabs, TabsContent, TabsList, TabTrigger, TextShimmer, Tooltip, TooltipContent, TooltipTrigger, TransitionPanel, useAccountWallet, useHasMounted, useProfile, useRouter, useSearchParamsSSR, useTokenBalancesByChain, } from "../../../global-account/react/index.js";
6
6
  import { cn } from "../../../shared/utils/index.js";
7
7
  import centerTruncate from "../../../shared/utils/centerTruncate.js";
8
8
  import { formatTokenAmount } from "../../../shared/utils/number.js";
@@ -96,8 +96,8 @@ export function AnySpendCustom({ isMainnet = true, loadOrder, mode = "modal", re
96
96
  const [customRecipientAddress, setCustomRecipientAddress] = useState(recipientAddressProps);
97
97
  // Update recipient logic to use custom recipient
98
98
  const recipientAddress = customRecipientAddress || currentWallet.address;
99
- const recipientPropsProfile = useBsmntProfile({ address: recipientAddress });
100
- const recipientEnsName = recipientPropsProfile.data?.username?.replace(/\.b3\.fun/g, "");
99
+ const recipientPropsProfile = useProfile({ address: recipientAddress });
100
+ const recipientEnsName = recipientPropsProfile.data?.name?.replace(/\.b3\.fun/g, "");
101
101
  const recipientImageUrl = recipientPropsProfile.data?.avatar || currentWallet.wallet.meta?.icon;
102
102
  const [orderId, setOrderId] = useState(loadOrder);
103
103
  const [srcChainId, setSrcChainId] = useState(isMainnet ? base.id : baseSepolia.id);
@@ -1,7 +1,7 @@
1
1
  "use client";
2
2
  import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
3
3
  import { ALL_CHAINS, capitalizeFirstLetter, EVM_CHAINS, getChainName, getErrorDisplay, getExplorerTxUrl, getPaymentUrl, getStatusDisplay, isNativeToken, RELAY_ETH_ADDRESS, RELAY_SOLANA_MAINNET_CHAIN_ID, } from "../../../../anyspend/index.js";
4
- import { Badge, Button, CopyToClipboard, ShinyButton, Skeleton, TextLoop, TextShimmer, useAccountWallet, useChainSwitchWithAction, useModalStore, useOnchainName, } from "../../../../global-account/react/index.js";
4
+ import { Badge, Button, CopyToClipboard, ShinyButton, Skeleton, TextLoop, TextShimmer, useAccountWallet, useChainSwitchWithAction, useModalStore, useProfile, } 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";
@@ -124,7 +124,8 @@ export const OrderDetails = memo(function OrderDetails({ isMainnet, mode = "moda
124
124
  const dstToken = order.metadata.dstToken;
125
125
  const nft = order.type === "mint_nft" ? order.metadata.nft : undefined;
126
126
  const tournament = order.type === "join_tournament" || order.type === "fund_tournament" ? order.metadata.tournament : undefined;
127
- const { name: recipientName } = useOnchainName(order.recipientAddress);
127
+ const profile = useProfile({ address: order.recipientAddress });
128
+ const recipientName = profile.data?.name?.replace(/\.b3\.fun/g, "");
128
129
  const account = useAccountWallet();
129
130
  const { data: walletClient } = useWalletClient();
130
131
  const [txHash, setTxHash] = useState();
@@ -5,7 +5,6 @@ export { useAuthentication } from "./useAuthentication";
5
5
  export { useB3BalanceFromAddresses } from "./useB3BalanceFromAddresses";
6
6
  export { useB3EnsName } from "./useB3EnsName";
7
7
  export { useBestTransactionPath } from "./useBestTransactionPath";
8
- export { useBsmntProfile } from "./useBsmntProfile";
9
8
  export { useChainSwitchWithAction } from "./useChainSwitchWithAction";
10
9
  export { useClaim } from "./useClaim";
11
10
  export { useConnect } from "./useConnect";
@@ -18,7 +17,6 @@ export { useIsMobile } from "./useIsMobile";
18
17
  export { useIsomorphicLayoutEffect } from "./useIsomorphicLayoutEffect";
19
18
  export { useMediaQuery } from "./useMediaQuery";
20
19
  export { useNativeBalance, useNativeBalanceFromRPC } from "./useNativeBalance";
21
- export { useOnchainName } from "./useOnchainName";
22
20
  export { useOneBalance } from "./useOneBalance";
23
21
  export { useProfile, useProfilePreference, type Profile, type CombinedProfile, type PreferenceRequestBody, } from "./useProfile";
24
22
  export { useQueryB3 } from "./useQueryB3";
@@ -5,7 +5,6 @@ export { useAuthentication } from "./useAuthentication.js";
5
5
  export { useB3BalanceFromAddresses } from "./useB3BalanceFromAddresses.js";
6
6
  export { useB3EnsName } from "./useB3EnsName.js";
7
7
  export { useBestTransactionPath } from "./useBestTransactionPath.js";
8
- export { useBsmntProfile } from "./useBsmntProfile.js";
9
8
  export { useChainSwitchWithAction } from "./useChainSwitchWithAction.js";
10
9
  export { useClaim } from "./useClaim.js";
11
10
  export { useConnect } from "./useConnect.js";
@@ -18,7 +17,6 @@ export { useIsMobile } from "./useIsMobile.js";
18
17
  export { useIsomorphicLayoutEffect } from "./useIsomorphicLayoutEffect.js";
19
18
  export { useMediaQuery } from "./useMediaQuery.js";
20
19
  export { useNativeBalance, useNativeBalanceFromRPC } from "./useNativeBalance.js";
21
- export { useOnchainName } from "./useOnchainName.js";
22
20
  export { useOneBalance } from "./useOneBalance.js";
23
21
  export { useProfile, useProfilePreference, } from "./useProfile.js";
24
22
  export { useQueryB3 } from "./useQueryB3.js";
@@ -1,9 +1,8 @@
1
- import { useB3 } from "../../../global-account/react/index.js";
1
+ import { useB3, useProfile } from "../../../global-account/react/index.js";
2
2
  import { ecosystemWalletId } from "../../../shared/constants/index.js";
3
3
  import { useEffect, useMemo, useState } from "react";
4
4
  import { getLastAuthProvider, useActiveWallet, useConnectedWallets, useWalletImage } from "thirdweb/react";
5
5
  import { socialIcons } from "thirdweb/wallets/in-app";
6
- import { useBsmntProfile } from "./useBsmntProfile.js";
7
6
  function useLastAuthProvider() {
8
7
  const [lastAuthProvider, setLastAuthProvider] = useState(null);
9
8
  useEffect(() => {
@@ -29,8 +28,8 @@ export function useAccountWallet() {
29
28
  const smartWalletIcon = lastAuthProvider && !connectedEOAWallet
30
29
  ? socialIcons[lastAuthProvider]
31
30
  : "https://gradvatar.com/0x0000000000000000000000000000000000000000"; // show smart wallet of eoa wallet is gradvatar
32
- const { data: profileData } = useBsmntProfile({ address: account?.address });
33
- const ensName = profileData?.username?.replace(/\.b3\.fun/g, "");
31
+ const { data: profileData } = useProfile({ address: account?.address });
32
+ const ensName = profileData?.displayName?.replace(/\.b3\.fun/g, "");
34
33
  const avatarUrl = profileData?.avatar;
35
34
  const res = useMemo(() => ({
36
35
  wallet: {
@@ -21,6 +21,13 @@ export interface PreferenceRequestBody {
21
21
  signer: string;
22
22
  timestamp: number;
23
23
  }
24
+ export interface DisplayNameRequestBody {
25
+ key: string;
26
+ displayName: string;
27
+ signature: string;
28
+ signer: string;
29
+ timestamp: number;
30
+ }
24
31
  export declare function useProfile({ address, name, fresh, }: {
25
32
  address?: string;
26
33
  name?: string;
@@ -35,4 +42,24 @@ export declare function useProfilePreference(): {
35
42
  success: boolean;
36
43
  }>;
37
44
  };
45
+ export declare function useDisplayName(): {
46
+ setName: (key: string, displayName: string, signerAddress: string, signMessage: (message: string) => Promise<string>) => Promise<{
47
+ success: boolean;
48
+ }>;
49
+ };
50
+ export declare function useProfileSettings(): {
51
+ setPreference: (key: string, preferredType: string, signerAddress: string, signMessage: (message: string) => Promise<string>) => Promise<{
52
+ success: boolean;
53
+ }>;
54
+ setDisplayName: (key: string, displayName: string, signerAddress: string, signMessage: (message: string) => Promise<string>) => Promise<{
55
+ success: boolean;
56
+ }>;
57
+ updateSettings: (key: string, signerAddress: string, signMessage: (message: string) => Promise<string>, settings: {
58
+ preferredType?: string;
59
+ displayName?: string;
60
+ }) => Promise<{
61
+ preference?: any;
62
+ displayName?: any;
63
+ }>;
64
+ };
38
65
  export default useProfile;
@@ -36,6 +36,25 @@ async function setProfilePreference({ key, preferredType, signature, signer, tim
36
36
  }
37
37
  return response.json();
38
38
  }
39
+ async function setDisplayName({ key, displayName, signature, signer, timestamp, }) {
40
+ const response = await fetch(`${PROFILES_API_URL}/display-name`, {
41
+ method: "POST",
42
+ headers: {
43
+ "Content-Type": "application/json",
44
+ },
45
+ body: JSON.stringify({
46
+ key,
47
+ displayName,
48
+ signature,
49
+ signer,
50
+ timestamp,
51
+ }),
52
+ });
53
+ if (!response.ok) {
54
+ throw new Error(`Failed to set display name: ${response.statusText}`);
55
+ }
56
+ return response.json();
57
+ }
39
58
  export function useProfile({ address, name, fresh = false, }, options) {
40
59
  return useQuery({
41
60
  queryKey: ["profile", address || name, fresh],
@@ -65,4 +84,48 @@ export function useProfilePreference() {
65
84
  };
66
85
  return { setPreference };
67
86
  }
87
+ export function useDisplayName() {
88
+ const setName = async (key, displayName, signerAddress, signMessage) => {
89
+ const timestamp = Math.floor(Date.now() / 1000);
90
+ const message = `SetDisplayName:${key}:${displayName}:${timestamp}`;
91
+ try {
92
+ const signature = await signMessage(message);
93
+ return setDisplayName({
94
+ key,
95
+ displayName,
96
+ signature,
97
+ signer: signerAddress,
98
+ timestamp,
99
+ });
100
+ }
101
+ catch (error) {
102
+ throw new Error(`Failed to set display name: ${error}`);
103
+ }
104
+ };
105
+ return { setName };
106
+ }
107
+ export function useProfileSettings() {
108
+ const { setPreference } = useProfilePreference();
109
+ const { setName } = useDisplayName();
110
+ const updateSettings = async (key, signerAddress, signMessage, settings) => {
111
+ const results = {};
112
+ try {
113
+ if (settings.preferredType) {
114
+ results.preference = await setPreference(key, settings.preferredType, signerAddress, signMessage);
115
+ }
116
+ if (settings.displayName) {
117
+ results.displayName = await setName(key, settings.displayName, signerAddress, signMessage);
118
+ }
119
+ return results;
120
+ }
121
+ catch (error) {
122
+ throw new Error(`Failed to update profile settings: ${error}`);
123
+ }
124
+ };
125
+ return {
126
+ setPreference,
127
+ setDisplayName: setName,
128
+ updateSettings,
129
+ };
130
+ }
68
131
  export default useProfile;
@@ -5,7 +5,6 @@ export { useAuthentication } from "./useAuthentication";
5
5
  export { useB3BalanceFromAddresses } from "./useB3BalanceFromAddresses";
6
6
  export { useB3EnsName } from "./useB3EnsName";
7
7
  export { useBestTransactionPath } from "./useBestTransactionPath";
8
- export { useBsmntProfile } from "./useBsmntProfile";
9
8
  export { useChainSwitchWithAction } from "./useChainSwitchWithAction";
10
9
  export { useClaim } from "./useClaim";
11
10
  export { useConnect } from "./useConnect";
@@ -18,7 +17,6 @@ export { useIsMobile } from "./useIsMobile";
18
17
  export { useIsomorphicLayoutEffect } from "./useIsomorphicLayoutEffect";
19
18
  export { useMediaQuery } from "./useMediaQuery";
20
19
  export { useNativeBalance, useNativeBalanceFromRPC } from "./useNativeBalance";
21
- export { useOnchainName } from "./useOnchainName";
22
20
  export { useOneBalance } from "./useOneBalance";
23
21
  export { useProfile, useProfilePreference, type Profile, type CombinedProfile, type PreferenceRequestBody, } from "./useProfile";
24
22
  export { useQueryB3 } from "./useQueryB3";
@@ -21,6 +21,13 @@ export interface PreferenceRequestBody {
21
21
  signer: string;
22
22
  timestamp: number;
23
23
  }
24
+ export interface DisplayNameRequestBody {
25
+ key: string;
26
+ displayName: string;
27
+ signature: string;
28
+ signer: string;
29
+ timestamp: number;
30
+ }
24
31
  export declare function useProfile({ address, name, fresh, }: {
25
32
  address?: string;
26
33
  name?: string;
@@ -35,4 +42,24 @@ export declare function useProfilePreference(): {
35
42
  success: boolean;
36
43
  }>;
37
44
  };
45
+ export declare function useDisplayName(): {
46
+ setName: (key: string, displayName: string, signerAddress: string, signMessage: (message: string) => Promise<string>) => Promise<{
47
+ success: boolean;
48
+ }>;
49
+ };
50
+ export declare function useProfileSettings(): {
51
+ setPreference: (key: string, preferredType: string, signerAddress: string, signMessage: (message: string) => Promise<string>) => Promise<{
52
+ success: boolean;
53
+ }>;
54
+ setDisplayName: (key: string, displayName: string, signerAddress: string, signMessage: (message: string) => Promise<string>) => Promise<{
55
+ success: boolean;
56
+ }>;
57
+ updateSettings: (key: string, signerAddress: string, signMessage: (message: string) => Promise<string>, settings: {
58
+ preferredType?: string;
59
+ displayName?: string;
60
+ }) => Promise<{
61
+ preference?: any;
62
+ displayName?: any;
63
+ }>;
64
+ };
38
65
  export default useProfile;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@b3dotfun/sdk",
3
- "version": "0.0.12",
3
+ "version": "0.0.13-alpha.0",
4
4
  "source": "src/index.ts",
5
5
  "main": "./dist/cjs/index.js",
6
6
  "react-native": "./dist/cjs/index.native.js",
@@ -12,7 +12,7 @@ import {
12
12
  StyleRoot,
13
13
  TransitionPanel,
14
14
  useAccountWallet,
15
- useOnchainName,
15
+ useProfile,
16
16
  useRouter,
17
17
  useSearchParamsSSR,
18
18
  useTokenData,
@@ -405,12 +405,8 @@ export function AnySpend({
405
405
  },
406
406
  );
407
407
 
408
- // Replace the old ENS lookup with our new hooks
409
- const { name: recipientName } = useOnchainName(recipientAddress);
410
- // const { name: walletName } = useOnchainName(globalAddress);
411
-
412
- // Batch lookup for custom recipients
413
- // const { names: customRecipientNames } = useOnchainNames(customRecipients.map(r => r.address));
408
+ const recipientProfile = useProfile({ address: recipientAddress });
409
+ const recipientName = recipientProfile.data?.name?.replace(/\.b3\.fun/g, "");
414
410
 
415
411
  // Load custom recipients from local storage on mount
416
412
  useEffect(() => {
@@ -30,8 +30,8 @@ import {
30
30
  TooltipTrigger,
31
31
  TransitionPanel,
32
32
  useAccountWallet,
33
- useBsmntProfile,
34
33
  useHasMounted,
34
+ useProfile,
35
35
  useRouter,
36
36
  useSearchParamsSSR,
37
37
  useTokenBalancesByChain,
@@ -201,8 +201,8 @@ export function AnySpendCustom({
201
201
 
202
202
  // Update recipient logic to use custom recipient
203
203
  const recipientAddress = customRecipientAddress || currentWallet.address;
204
- const recipientPropsProfile = useBsmntProfile({ address: recipientAddress });
205
- const recipientEnsName = recipientPropsProfile.data?.username?.replace(/\.b3\.fun/g, "");
204
+ const recipientPropsProfile = useProfile({ address: recipientAddress });
205
+ const recipientEnsName = recipientPropsProfile.data?.name?.replace(/\.b3\.fun/g, "");
206
206
  const recipientImageUrl = recipientPropsProfile.data?.avatar || currentWallet.wallet.meta?.icon;
207
207
 
208
208
  const [orderId, setOrderId] = useState<string | undefined>(loadOrder);
@@ -25,7 +25,7 @@ import {
25
25
  useAccountWallet,
26
26
  useChainSwitchWithAction,
27
27
  useModalStore,
28
- useOnchainName,
28
+ useProfile,
29
29
  } from "@b3dotfun/sdk/global-account/react";
30
30
  import { useRouter, useSearchParams } from "@b3dotfun/sdk/shared/react/hooks";
31
31
  import { cn } from "@b3dotfun/sdk/shared/utils";
@@ -218,7 +218,9 @@ export const OrderDetails = memo(function OrderDetails({
218
218
  const tournament =
219
219
  order.type === "join_tournament" || order.type === "fund_tournament" ? order.metadata.tournament : undefined;
220
220
 
221
- const { name: recipientName } = useOnchainName(order.recipientAddress);
221
+ const profile = useProfile({ address: order.recipientAddress });
222
+ const recipientName = profile.data?.name?.replace(/\.b3\.fun/g, "");
223
+
222
224
  const account = useAccountWallet();
223
225
 
224
226
  const { data: walletClient } = useWalletClient();
@@ -5,7 +5,6 @@ export { useAuthentication } from "./useAuthentication";
5
5
  export { useB3BalanceFromAddresses } from "./useB3BalanceFromAddresses";
6
6
  export { useB3EnsName } from "./useB3EnsName";
7
7
  export { useBestTransactionPath } from "./useBestTransactionPath";
8
- export { useBsmntProfile } from "./useBsmntProfile";
9
8
  export { useChainSwitchWithAction } from "./useChainSwitchWithAction";
10
9
  export { useClaim } from "./useClaim";
11
10
  export { useConnect } from "./useConnect";
@@ -18,7 +17,6 @@ export { useIsMobile } from "./useIsMobile";
18
17
  export { useIsomorphicLayoutEffect } from "./useIsomorphicLayoutEffect";
19
18
  export { useMediaQuery } from "./useMediaQuery";
20
19
  export { useNativeBalance, useNativeBalanceFromRPC } from "./useNativeBalance";
21
- export { useOnchainName } from "./useOnchainName";
22
20
  export { useOneBalance } from "./useOneBalance";
23
21
  export {
24
22
  useProfile,
@@ -1,10 +1,9 @@
1
- import { useB3 } from "@b3dotfun/sdk/global-account/react";
1
+ import { useB3, useProfile } from "@b3dotfun/sdk/global-account/react";
2
2
  import { ecosystemWalletId } from "@b3dotfun/sdk/shared/constants";
3
3
  import { useEffect, useMemo, useState } from "react";
4
4
  import { getLastAuthProvider, useActiveWallet, useConnectedWallets, useWalletImage } from "thirdweb/react";
5
5
  import { Account, Wallet } from "thirdweb/wallets";
6
6
  import { socialIcons } from "thirdweb/wallets/in-app";
7
- import { useBsmntProfile } from "./useBsmntProfile";
8
7
 
9
8
  function useLastAuthProvider(): string | null {
10
9
  const [lastAuthProvider, setLastAuthProvider] = useState<string | null>(null);
@@ -62,8 +61,8 @@ export function useAccountWallet(): {
62
61
  ? socialIcons[lastAuthProvider as keyof typeof socialIcons]
63
62
  : "https://gradvatar.com/0x0000000000000000000000000000000000000000"; // show smart wallet of eoa wallet is gradvatar
64
63
 
65
- const { data: profileData } = useBsmntProfile({ address: account?.address });
66
- const ensName = profileData?.username?.replace(/\.b3\.fun/g, "");
64
+ const { data: profileData } = useProfile({ address: account?.address });
65
+ const ensName = profileData?.displayName?.replace(/\.b3\.fun/g, "");
67
66
  const avatarUrl = profileData?.avatar;
68
67
 
69
68
  const res = useMemo(