@b3dotfun/sdk 0.1.69-alpha.15 → 0.1.69-alpha.17

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 (70) hide show
  1. package/dist/cjs/anyspend/constants/rpc.d.ts +1 -1
  2. package/dist/cjs/anyspend/constants/rpc.js +1 -1
  3. package/dist/cjs/anyspend/react/components/AnySpendNFT.js +2 -2
  4. package/dist/cjs/anyspend/react/components/checkout/AnySpendCheckout.js +5 -1
  5. package/dist/cjs/anyspend/react/components/checkout/CheckoutSuccess.js +3 -3
  6. package/dist/cjs/anyspend/react/components/checkout/CryptoPayPanel.js +43 -23
  7. package/dist/cjs/anyspend/react/components/common/CryptoPaymentMethod.d.ts +8 -0
  8. package/dist/cjs/anyspend/react/components/common/CryptoPaymentMethod.js +10 -9
  9. package/dist/cjs/anyspend/react/components/common/InsufficientDepositPayment.js +2 -2
  10. package/dist/cjs/anyspend/react/components/common/OrderDetails.js +2 -2
  11. package/dist/cjs/anyspend/react/components/common/OrderDetailsCollapsible.js +2 -2
  12. package/dist/cjs/anyspend/react/components/common/TransferCryptoDetails.js +2 -2
  13. package/dist/cjs/anyspend/utils/chain.js +8 -7
  14. package/dist/cjs/global-account/react/components/custom/Button.d.ts +1 -1
  15. package/dist/cjs/global-account/react/components/ui/button.d.ts +1 -1
  16. package/dist/cjs/shared/constants/chains/b3Chain.d.ts +7 -7
  17. package/dist/cjs/shared/constants/chains/b3Chain.js +4 -4
  18. package/dist/cjs/shared/constants/chains/b3Viem.d.ts +6 -0
  19. package/dist/cjs/shared/constants/chains/b3Viem.js +19 -0
  20. package/dist/cjs/shared/constants/chains/supported.d.ts +1 -1
  21. package/dist/cjs/shared/generated/chain-networks.json +2 -2
  22. package/dist/cjs/shared/utils/chains.d.ts +1 -1
  23. package/dist/cjs/shared/utils/chains.js +2 -2
  24. package/dist/esm/anyspend/constants/rpc.d.ts +1 -1
  25. package/dist/esm/anyspend/constants/rpc.js +1 -1
  26. package/dist/esm/anyspend/react/components/AnySpendNFT.js +2 -2
  27. package/dist/esm/anyspend/react/components/checkout/AnySpendCheckout.js +5 -1
  28. package/dist/esm/anyspend/react/components/checkout/CheckoutSuccess.js +3 -3
  29. package/dist/esm/anyspend/react/components/checkout/CryptoPayPanel.js +44 -24
  30. package/dist/esm/anyspend/react/components/common/CryptoPaymentMethod.d.ts +8 -0
  31. package/dist/esm/anyspend/react/components/common/CryptoPaymentMethod.js +9 -8
  32. package/dist/esm/anyspend/react/components/common/InsufficientDepositPayment.js +2 -2
  33. package/dist/esm/anyspend/react/components/common/OrderDetails.js +2 -2
  34. package/dist/esm/anyspend/react/components/common/OrderDetailsCollapsible.js +2 -2
  35. package/dist/esm/anyspend/react/components/common/TransferCryptoDetails.js +2 -2
  36. package/dist/esm/anyspend/utils/chain.js +10 -9
  37. package/dist/esm/global-account/react/components/custom/Button.d.ts +1 -1
  38. package/dist/esm/global-account/react/components/ui/button.d.ts +1 -1
  39. package/dist/esm/shared/constants/chains/b3Chain.d.ts +7 -7
  40. package/dist/esm/shared/constants/chains/b3Chain.js +4 -4
  41. package/dist/esm/shared/constants/chains/b3Viem.d.ts +6 -0
  42. package/dist/esm/shared/constants/chains/b3Viem.js +16 -0
  43. package/dist/esm/shared/constants/chains/supported.d.ts +1 -1
  44. package/dist/esm/shared/generated/chain-networks.json +2 -2
  45. package/dist/esm/shared/utils/chains.d.ts +1 -1
  46. package/dist/esm/shared/utils/chains.js +2 -2
  47. package/dist/types/anyspend/constants/rpc.d.ts +1 -1
  48. package/dist/types/anyspend/react/components/common/CryptoPaymentMethod.d.ts +8 -0
  49. package/dist/types/global-account/react/components/custom/Button.d.ts +1 -1
  50. package/dist/types/global-account/react/components/ui/button.d.ts +1 -1
  51. package/dist/types/shared/constants/chains/b3Chain.d.ts +7 -7
  52. package/dist/types/shared/constants/chains/b3Viem.d.ts +6 -0
  53. package/dist/types/shared/constants/chains/supported.d.ts +1 -1
  54. package/dist/types/shared/utils/chains.d.ts +1 -1
  55. package/package.json +1 -1
  56. package/src/anyspend/constants/rpc.ts +2 -1
  57. package/src/anyspend/react/components/AnySpendNFT.tsx +2 -2
  58. package/src/anyspend/react/components/checkout/AnySpendCheckout.tsx +9 -1
  59. package/src/anyspend/react/components/checkout/CheckoutSuccess.tsx +3 -3
  60. package/src/anyspend/react/components/checkout/CryptoPayPanel.tsx +45 -27
  61. package/src/anyspend/react/components/common/CryptoPaymentMethod.tsx +10 -8
  62. package/src/anyspend/react/components/common/InsufficientDepositPayment.tsx +2 -2
  63. package/src/anyspend/react/components/common/OrderDetails.tsx +2 -2
  64. package/src/anyspend/react/components/common/OrderDetailsCollapsible.tsx +4 -4
  65. package/src/anyspend/react/components/common/TransferCryptoDetails.tsx +2 -2
  66. package/src/anyspend/utils/chain.ts +9 -8
  67. package/src/shared/constants/chains/b3Chain.ts +5 -5
  68. package/src/shared/constants/chains/b3Viem.ts +18 -0
  69. package/src/shared/generated/chain-networks.json +2 -2
  70. package/src/shared/utils/chains.ts +3 -2
@@ -1,8 +1,9 @@
1
1
  import { RELAY_SOLANA_MAINNET_CHAIN_ID } from "../../anyspend/constants/index.js";
2
- import { ABSTRACT_PUBLIC_RPC, ARBITRUM_PUBLIC_RPC, AVALANCHE_PUBLIC_RPC, B3_PUBLIC_RPC, BASE_PUBLIC_RPC, BSC_PUBLIC_RPC, ETHEREUM_PUBLIC_RPC, HYPEREVM_PUBLIC_RPC, OPTIMISM_PUBLIC_RPC, POLYGON_PUBLIC_RPC, } from "../../anyspend/constants/rpc.js";
2
+ import { ABSTRACT_PUBLIC_RPC, ARBITRUM_PUBLIC_RPC, AVALANCHE_PUBLIC_RPC, BASE_PUBLIC_RPC, BSC_PUBLIC_RPC, ETHEREUM_PUBLIC_RPC, HYPEREVM_PUBLIC_RPC, OPTIMISM_PUBLIC_RPC, POLYGON_PUBLIC_RPC, } from "../../anyspend/constants/rpc.js";
3
3
  import invariant from "invariant";
4
4
  import { createPublicClient, createWalletClient, defineChain, http, parseEther, } from "viem";
5
- import { abstract, arbitrum, avalanche, b3, base, bsc, mainnet, optimism, polygon } from "viem/chains";
5
+ import { b3Viem } from "../../shared/constants/chains/b3Viem.js";
6
+ import { abstract, arbitrum, avalanche, base, bsc, mainnet, optimism, polygon } from "viem/chains";
6
7
  import { ChainType } from "../types/chain.js";
7
8
  import { getAvaxToken, getBnbToken, getEthToken, getHyperEVMNativeToken, getHyperliquidUSDCToken, getPolToken, getSolanaToken, HYPEREVM_CHAIN_ID, HYPERLIQUID_CHAIN_ID, } from "./token.js";
8
9
  function getCustomEvmChain(chain, rpcUrl) {
@@ -162,16 +163,16 @@ export const EVM_MAINNET = {
162
163
  coingeckoName: "bsc",
163
164
  wethAddress: "0xbb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c",
164
165
  },
165
- [b3.id]: {
166
- id: b3.id,
167
- name: b3.name,
166
+ [b3Viem.id]: {
167
+ id: b3Viem.id,
168
+ name: b3Viem.name,
168
169
  logoUrl: "https://assets.relay.link/icons/square/8333/light.png",
169
170
  type: ChainType.EVM,
170
171
  nativeRequired: parseEther("0.0001"),
171
172
  canDepositNative: true,
172
- defaultToken: getEthToken(b3.id),
173
- nativeToken: getEthToken(b3.id),
174
- viem: getCustomEvmChain(b3, B3_PUBLIC_RPC),
173
+ defaultToken: getEthToken(b3Viem.id),
174
+ nativeToken: getEthToken(b3Viem.id),
175
+ viem: b3Viem,
175
176
  pollingInterval: 1000, // 1 second for B3
176
177
  zapperEnum: "B3_MAINNET",
177
178
  coingeckoName: "b3",
@@ -517,7 +518,7 @@ export function getPaymentUrl(address, amount, currency, chainId, decimals) {
517
518
  }
518
519
  }
519
520
  export function getExplorerTxUrl(chainId, txHash) {
520
- if (chainId === b3.id) {
521
+ if (chainId === b3Viem.id) {
521
522
  return "https://explorer.b3.fun/b3/tx/" + txHash;
522
523
  }
523
524
  if (EVM_CHAINS[chainId]) {
@@ -1,6 +1,6 @@
1
1
  import * as React from "react";
2
2
  declare const buttonVariants: (props?: ({
3
- variant?: "link" | "default" | "b3" | "destructive" | "outline" | "secondary" | "ghost" | null | undefined;
3
+ variant?: "default" | "link" | "b3" | "destructive" | "outline" | "secondary" | "ghost" | null | undefined;
4
4
  size?: "default" | "icon" | "sm" | "lg" | null | undefined;
5
5
  } & import("class-variance-authority/dist/types").ClassProp) | undefined) => string;
6
6
  interface ButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {
@@ -1,7 +1,7 @@
1
1
  import { type VariantProps } from "class-variance-authority";
2
2
  import * as React from "react";
3
3
  declare const buttonVariants: (props?: ({
4
- variant?: "link" | "default" | "destructive" | "outline" | "secondary" | "ghost" | null | undefined;
4
+ variant?: "default" | "link" | "destructive" | "outline" | "secondary" | "ghost" | null | undefined;
5
5
  size?: "default" | "icon" | "sm" | "lg" | null | undefined;
6
6
  } & import("class-variance-authority/dist/types").ClassProp) | undefined) => string;
7
7
  export interface ButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement>, VariantProps<typeof buttonVariants> {
@@ -1,6 +1,6 @@
1
+ import { ChainNetworks } from "../../../global-account/types/chain-networks";
1
2
  import { Chain as ThirdwebChain } from "thirdweb";
2
3
  import { Chain } from "viem";
3
- import { ChainNetworks } from "../../../global-account/types/chain-networks";
4
4
  export declare const nullAddress = "0x0000000000000000000000000000000000000000";
5
5
  export declare const avatarsNFTCollectionAddress = "0x658E2F67D3121A0eA81e5854be0b7539be27Aeb0";
6
6
  export declare const viemToThirdwebChain: (chain: Chain) => ThirdwebChain;
@@ -33,8 +33,8 @@ export declare const b3Mainnet: {
33
33
  experimental_preconfirmationTime?: number | undefined | undefined;
34
34
  rpcUrls: {
35
35
  readonly default: {
36
- readonly http: readonly ["https://mainnet-rpc.b3.fun"];
37
- readonly ws: readonly ["wss://mainnet-rpc.b3.fun/ws"];
36
+ readonly http: readonly ["https://late-dimensional-yard.b3-mainnet.quiknode.pro/461dbdbd44158cd7a7a764a58ffb01a67eef77f2"];
37
+ readonly ws: readonly ["wss://late-dimensional-yard.b3-mainnet.quiknode.pro/461dbdbd44158cd7a7a764a58ffb01a67eef77f2"];
38
38
  };
39
39
  };
40
40
  sourceId?: number | undefined | undefined;
@@ -43,7 +43,7 @@ export declare const b3Mainnet: {
43
43
  fees?: import("viem").ChainFees<undefined> | undefined;
44
44
  formatters?: undefined;
45
45
  serializers?: import("viem").ChainSerializers<undefined, import("viem").TransactionSerializable> | undefined;
46
- readonly rpc: "https://mainnet-rpc.b3.fun";
46
+ readonly rpc: "https://late-dimensional-yard.b3-mainnet.quiknode.pro/461dbdbd44158cd7a7a764a58ffb01a67eef77f2";
47
47
  readonly icon: {
48
48
  readonly url: "https://cdn.b3.fun/b3_logo.svg";
49
49
  readonly width: 32;
@@ -128,8 +128,8 @@ export declare const b3Chain: Chain | {
128
128
  experimental_preconfirmationTime?: number | undefined | undefined;
129
129
  rpcUrls: {
130
130
  readonly default: {
131
- readonly http: readonly ["https://mainnet-rpc.b3.fun"];
132
- readonly ws: readonly ["wss://mainnet-rpc.b3.fun/ws"];
131
+ readonly http: readonly ["https://late-dimensional-yard.b3-mainnet.quiknode.pro/461dbdbd44158cd7a7a764a58ffb01a67eef77f2"];
132
+ readonly ws: readonly ["wss://late-dimensional-yard.b3-mainnet.quiknode.pro/461dbdbd44158cd7a7a764a58ffb01a67eef77f2"];
133
133
  };
134
134
  };
135
135
  sourceId?: number | undefined | undefined;
@@ -138,7 +138,7 @@ export declare const b3Chain: Chain | {
138
138
  fees?: import("viem").ChainFees<undefined> | undefined;
139
139
  formatters?: undefined;
140
140
  serializers?: import("viem").ChainSerializers<undefined, import("viem").TransactionSerializable> | undefined;
141
- readonly rpc: "https://mainnet-rpc.b3.fun";
141
+ readonly rpc: "https://late-dimensional-yard.b3-mainnet.quiknode.pro/461dbdbd44158cd7a7a764a58ffb01a67eef77f2";
142
142
  readonly icon: {
143
143
  readonly url: "https://cdn.b3.fun/b3_logo.svg";
144
144
  readonly width: 32;
@@ -52,11 +52,11 @@ export const b3Testnet = defineChain({
52
52
  export const b3Mainnet = defineChain({
53
53
  id: 8333,
54
54
  name: "B3",
55
- rpc: "https://mainnet-rpc.b3.fun",
55
+ rpc: "https://late-dimensional-yard.b3-mainnet.quiknode.pro/461dbdbd44158cd7a7a764a58ffb01a67eef77f2",
56
56
  rpcUrls: {
57
57
  default: {
58
- http: ["https://mainnet-rpc.b3.fun"],
59
- ws: ["wss://mainnet-rpc.b3.fun/ws"],
58
+ http: ["https://late-dimensional-yard.b3-mainnet.quiknode.pro/461dbdbd44158cd7a7a764a58ffb01a67eef77f2"],
59
+ ws: ["wss://late-dimensional-yard.b3-mainnet.quiknode.pro/461dbdbd44158cd7a7a764a58ffb01a67eef77f2"],
60
60
  },
61
61
  },
62
62
  icon: {
@@ -123,7 +123,7 @@ export const thirdwebB3Testnet = defineThirdwebChain({
123
123
  export const thirdwebB3Mainnet = defineThirdwebChain({
124
124
  id: 8333,
125
125
  name: "B3",
126
- rpc: "https://mainnet-rpc.b3.fun/http",
126
+ rpc: "https://late-dimensional-yard.b3-mainnet.quiknode.pro/461dbdbd44158cd7a7a764a58ffb01a67eef77f2/",
127
127
  icon: {
128
128
  url: "https://cdn.b3.fun/b3_logo.svg",
129
129
  width: 32,
@@ -0,0 +1,6 @@
1
+ import type { Chain } from "viem";
2
+ /**
3
+ * Viem's built-in `b3` chain points at mainnet-rpc.b3.fun; we spread it and override
4
+ * RPC URLs so all SDK call sites stay aligned with {@link B3_PUBLIC_RPC}.
5
+ */
6
+ export declare const b3Viem: Chain;
@@ -0,0 +1,16 @@
1
+ import { B3_PUBLIC_RPC } from "../../../anyspend/constants/rpc.js";
2
+ import { b3 as viemB3 } from "viem/chains";
3
+ /**
4
+ * Viem's built-in `b3` chain points at mainnet-rpc.b3.fun; we spread it and override
5
+ * RPC URLs so all SDK call sites stay aligned with {@link B3_PUBLIC_RPC}.
6
+ */
7
+ export const b3Viem = {
8
+ ...viemB3,
9
+ rpcUrls: {
10
+ ...viemB3.rpcUrls,
11
+ default: {
12
+ ...viemB3.rpcUrls.default,
13
+ http: [B3_PUBLIC_RPC],
14
+ },
15
+ },
16
+ };
@@ -2,6 +2,7 @@ import type { Chain as ThirdwebChain } from "thirdweb";
2
2
  export declare const supportedChains: import("viem").Chain[];
3
3
  export declare const supportedChainsTW: ThirdwebChain[];
4
4
  export declare const supportedChainNetworks: {
5
+ formatters?: Record<string, any> | undefined;
5
6
  contracts?: Record<string, {
6
7
  blockCreated?: number | undefined;
7
8
  address: string;
@@ -9,7 +10,6 @@ export declare const supportedChainNetworks: {
9
10
  sourceId?: number | undefined;
10
11
  testnet?: boolean | undefined;
11
12
  fees?: Record<string, any> | undefined;
12
- formatters?: Record<string, any> | undefined;
13
13
  color?: string | undefined;
14
14
  testnetConfigID?: number | undefined;
15
15
  badge?: string | undefined;
@@ -5,8 +5,8 @@
5
5
  "name": "B3",
6
6
  "rpcUrls": {
7
7
  "default": {
8
- "http": "https://mainnet-rpc.b3.fun",
9
- "ws": "wss://mainnet-rpc.b3.fun/ws"
8
+ "http": "https://late-dimensional-yard.b3-mainnet.quiknode.pro/461dbdbd44158cd7a7a764a58ffb01a67eef77f2/",
9
+ "ws": "wss://late-dimensional-yard.b3-mainnet.quiknode.pro/461dbdbd44158cd7a7a764a58ffb01a67eef77f2/"
10
10
  },
11
11
  "backups": []
12
12
  },
@@ -1,4 +1,4 @@
1
- import { Chain } from "viem/chains";
1
+ import type { Chain } from "viem";
2
2
  export declare function getChainById(id: number): Chain | undefined;
3
3
  export declare function chainIdToName(id: number): string | undefined;
4
4
  export declare function getExplorerUrl(chain: Chain, txHash: string): string;
@@ -1,5 +1,5 @@
1
+ import { b3Viem } from "../../shared/constants/chains/b3Viem.js";
1
2
  import { supportedChains } from "../../shared/constants/chains/supported.js";
2
- import { b3 } from "viem/chains";
3
3
  const baseChainBaseUrl = "https://basescan.org";
4
4
  export function getChainById(id) {
5
5
  return Object.values(supportedChains).find(chain => chain.id === id);
@@ -9,7 +9,7 @@ export function chainIdToName(id) {
9
9
  return name === "Base Mainnet" ? "Base" : name === "The Open Network" ? "Open Network" : name;
10
10
  }
11
11
  export function getExplorerUrl(chain, txHash) {
12
- if (chain.id === b3.id) {
12
+ if (chain.id === b3Viem.id) {
13
13
  return "https://explorer.b3.fun/b3/tx/" + txHash;
14
14
  }
15
15
  let baseUrl = chain.blockExplorers?.default.url;
@@ -13,7 +13,7 @@ export declare const OPTIMISM_PUBLIC_RPC = "https://optimism-rpc.publicnode.com"
13
13
  export declare const POLYGON_PUBLIC_RPC = "https://polygon-bor-rpc.publicnode.com";
14
14
  export declare const AVALANCHE_PUBLIC_RPC = "https://avalanche-c-chain-rpc.publicnode.com";
15
15
  export declare const BSC_PUBLIC_RPC = "https://bsc-rpc.publicnode.com";
16
- export declare const B3_PUBLIC_RPC = "https://mainnet-rpc.b3.fun/http";
16
+ export declare const B3_PUBLIC_RPC = "https://late-dimensional-yard.b3-mainnet.quiknode.pro/461dbdbd44158cd7a7a764a58ffb01a67eef77f2/";
17
17
  export declare const ABSTRACT_PUBLIC_RPC = "https://api.mainnet.abs.xyz";
18
18
  export declare const HYPEREVM_PUBLIC_RPC = "https://rpc.hyperliquid.xyz/evm";
19
19
  /**
@@ -5,6 +5,14 @@ export declare enum CryptoPaymentMethodType {
5
5
  GLOBAL_WALLET = "global_wallet",
6
6
  TRANSFER_CRYPTO = "transfer_crypto"
7
7
  }
8
+ export declare const recommendWallets: (import("thirdweb/wallets").Wallet<"io.metamask"> | import("thirdweb/wallets").Wallet<"com.coinbase.wallet"> | import("thirdweb/wallets").Wallet<"me.rainbow"> | import("thirdweb/wallets").Wallet<"io.rabby">)[];
9
+ export declare const connectModalConfig: {
10
+ client: import("thirdweb").ThirdwebClient;
11
+ setActive: false;
12
+ size: "compact";
13
+ showThirdwebBranding: boolean;
14
+ wallets: (import("thirdweb/wallets").Wallet<"io.metamask"> | import("thirdweb/wallets").Wallet<"com.coinbase.wallet"> | import("thirdweb/wallets").Wallet<"me.rainbow"> | import("thirdweb/wallets").Wallet<"io.rabby">)[];
15
+ };
8
16
  interface CryptoPaymentMethodProps {
9
17
  selectedPaymentMethod: CryptoPaymentMethodType;
10
18
  setSelectedPaymentMethod: (method: CryptoPaymentMethodType) => void;
@@ -1,6 +1,6 @@
1
1
  import * as React from "react";
2
2
  declare const buttonVariants: (props?: ({
3
- variant?: "link" | "default" | "b3" | "destructive" | "outline" | "secondary" | "ghost" | null | undefined;
3
+ variant?: "default" | "link" | "b3" | "destructive" | "outline" | "secondary" | "ghost" | null | undefined;
4
4
  size?: "default" | "icon" | "sm" | "lg" | null | undefined;
5
5
  } & import("class-variance-authority/dist/types").ClassProp) | undefined) => string;
6
6
  interface ButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {
@@ -1,7 +1,7 @@
1
1
  import { type VariantProps } from "class-variance-authority";
2
2
  import * as React from "react";
3
3
  declare const buttonVariants: (props?: ({
4
- variant?: "link" | "default" | "destructive" | "outline" | "secondary" | "ghost" | null | undefined;
4
+ variant?: "default" | "link" | "destructive" | "outline" | "secondary" | "ghost" | null | undefined;
5
5
  size?: "default" | "icon" | "sm" | "lg" | null | undefined;
6
6
  } & import("class-variance-authority/dist/types").ClassProp) | undefined) => string;
7
7
  export interface ButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement>, VariantProps<typeof buttonVariants> {
@@ -1,6 +1,6 @@
1
+ import { ChainNetworks } from "@b3dotfun/sdk/global-account/types/chain-networks";
1
2
  import { Chain as ThirdwebChain } from "thirdweb";
2
3
  import { Chain } from "viem";
3
- import { ChainNetworks } from "@b3dotfun/sdk/global-account/types/chain-networks";
4
4
  export declare const nullAddress = "0x0000000000000000000000000000000000000000";
5
5
  export declare const avatarsNFTCollectionAddress = "0x658E2F67D3121A0eA81e5854be0b7539be27Aeb0";
6
6
  export declare const viemToThirdwebChain: (chain: Chain) => ThirdwebChain;
@@ -33,8 +33,8 @@ export declare const b3Mainnet: {
33
33
  experimental_preconfirmationTime?: number | undefined | undefined;
34
34
  rpcUrls: {
35
35
  readonly default: {
36
- readonly http: readonly ["https://mainnet-rpc.b3.fun"];
37
- readonly ws: readonly ["wss://mainnet-rpc.b3.fun/ws"];
36
+ readonly http: readonly ["https://late-dimensional-yard.b3-mainnet.quiknode.pro/461dbdbd44158cd7a7a764a58ffb01a67eef77f2"];
37
+ readonly ws: readonly ["wss://late-dimensional-yard.b3-mainnet.quiknode.pro/461dbdbd44158cd7a7a764a58ffb01a67eef77f2"];
38
38
  };
39
39
  };
40
40
  sourceId?: number | undefined | undefined;
@@ -43,7 +43,7 @@ export declare const b3Mainnet: {
43
43
  fees?: import("viem").ChainFees<undefined> | undefined;
44
44
  formatters?: undefined;
45
45
  serializers?: import("viem").ChainSerializers<undefined, import("viem").TransactionSerializable> | undefined;
46
- readonly rpc: "https://mainnet-rpc.b3.fun";
46
+ readonly rpc: "https://late-dimensional-yard.b3-mainnet.quiknode.pro/461dbdbd44158cd7a7a764a58ffb01a67eef77f2";
47
47
  readonly icon: {
48
48
  readonly url: "https://cdn.b3.fun/b3_logo.svg";
49
49
  readonly width: 32;
@@ -128,8 +128,8 @@ export declare const b3Chain: Chain | {
128
128
  experimental_preconfirmationTime?: number | undefined | undefined;
129
129
  rpcUrls: {
130
130
  readonly default: {
131
- readonly http: readonly ["https://mainnet-rpc.b3.fun"];
132
- readonly ws: readonly ["wss://mainnet-rpc.b3.fun/ws"];
131
+ readonly http: readonly ["https://late-dimensional-yard.b3-mainnet.quiknode.pro/461dbdbd44158cd7a7a764a58ffb01a67eef77f2"];
132
+ readonly ws: readonly ["wss://late-dimensional-yard.b3-mainnet.quiknode.pro/461dbdbd44158cd7a7a764a58ffb01a67eef77f2"];
133
133
  };
134
134
  };
135
135
  sourceId?: number | undefined | undefined;
@@ -138,7 +138,7 @@ export declare const b3Chain: Chain | {
138
138
  fees?: import("viem").ChainFees<undefined> | undefined;
139
139
  formatters?: undefined;
140
140
  serializers?: import("viem").ChainSerializers<undefined, import("viem").TransactionSerializable> | undefined;
141
- readonly rpc: "https://mainnet-rpc.b3.fun";
141
+ readonly rpc: "https://late-dimensional-yard.b3-mainnet.quiknode.pro/461dbdbd44158cd7a7a764a58ffb01a67eef77f2";
142
142
  readonly icon: {
143
143
  readonly url: "https://cdn.b3.fun/b3_logo.svg";
144
144
  readonly width: 32;
@@ -0,0 +1,6 @@
1
+ import type { Chain } from "viem";
2
+ /**
3
+ * Viem's built-in `b3` chain points at mainnet-rpc.b3.fun; we spread it and override
4
+ * RPC URLs so all SDK call sites stay aligned with {@link B3_PUBLIC_RPC}.
5
+ */
6
+ export declare const b3Viem: Chain;
@@ -2,6 +2,7 @@ import type { Chain as ThirdwebChain } from "thirdweb";
2
2
  export declare const supportedChains: import("viem").Chain[];
3
3
  export declare const supportedChainsTW: ThirdwebChain[];
4
4
  export declare const supportedChainNetworks: {
5
+ formatters?: Record<string, any> | undefined;
5
6
  contracts?: Record<string, {
6
7
  blockCreated?: number | undefined;
7
8
  address: string;
@@ -9,7 +10,6 @@ export declare const supportedChainNetworks: {
9
10
  sourceId?: number | undefined;
10
11
  testnet?: boolean | undefined;
11
12
  fees?: Record<string, any> | undefined;
12
- formatters?: Record<string, any> | undefined;
13
13
  color?: string | undefined;
14
14
  testnetConfigID?: number | undefined;
15
15
  badge?: string | undefined;
@@ -1,4 +1,4 @@
1
- import { Chain } from "viem/chains";
1
+ import type { Chain } from "viem";
2
2
  export declare function getChainById(id: number): Chain | undefined;
3
3
  export declare function chainIdToName(id: number): string | undefined;
4
4
  export declare function getExplorerUrl(chain: Chain, txHash: string): string;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@b3dotfun/sdk",
3
- "version": "0.1.69-alpha.15",
3
+ "version": "0.1.69-alpha.17",
4
4
  "source": "src/index.ts",
5
5
  "main": "./dist/cjs/index.js",
6
6
  "react-native": "./dist/cjs/index.native.js",
@@ -17,7 +17,8 @@ export const AVALANCHE_PUBLIC_RPC = "https://avalanche-c-chain-rpc.publicnode.co
17
17
  export const BSC_PUBLIC_RPC = "https://bsc-rpc.publicnode.com";
18
18
 
19
19
  // Chain-specific public endpoints
20
- export const B3_PUBLIC_RPC = "https://mainnet-rpc.b3.fun/http";
20
+ export const B3_PUBLIC_RPC =
21
+ "https://late-dimensional-yard.b3-mainnet.quiknode.pro/461dbdbd44158cd7a7a764a58ffb01a67eef77f2/";
21
22
  export const ABSTRACT_PUBLIC_RPC = "https://api.mainnet.abs.xyz";
22
23
  export const HYPEREVM_PUBLIC_RPC = "https://rpc.hyperliquid.xyz/evm";
23
24
 
@@ -8,7 +8,7 @@ import { formatDisplayNumber, formatTokenAmount } from "@b3dotfun/sdk/shared/uti
8
8
  import { MoreVertical } from "lucide-react";
9
9
  import { AnimatePresence } from "motion/react";
10
10
  import { useCallback, useEffect, useRef, useState } from "react";
11
- import { b3 } from "viem/chains";
11
+ import { b3Viem } from "@b3dotfun/sdk/shared/constants/chains/b3Viem";
12
12
  import { GetQuoteResponse } from "../../types/api_req_res";
13
13
  import { AnySpendCustom } from "./AnySpendCustom";
14
14
  import type { AnySpendContent, AnySpendSlots, AnySpendTheme } from "./types/customization";
@@ -215,7 +215,7 @@ function DropdownMenu({ nftContract }: { nftContract: components["schemas"]["Nft
215
215
  </div>
216
216
 
217
217
  <div className="hover:bg-as-on-surface-3 flex cursor-default items-center gap-2 rounded px-2">
218
- <img src={chain?.logoUrl} className={cn("h-5 w-5", nftContract.chainId !== b3.id && "rounded-full")} />
218
+ <img src={chain?.logoUrl} className={cn("h-5 w-5", nftContract.chainId !== b3Viem.id && "rounded-full")} />
219
219
  <span className="text-sm">
220
220
  Minted on <span className="font-semibold">{chain ? getChainName(nftContract.chainId) : "Unknown"}</span>
221
221
  </span>
@@ -377,7 +377,15 @@ export function AnySpendCheckout({
377
377
 
378
378
  return (
379
379
  <AnySpendFingerprintWrapper fingerprint={fingerprint}>
380
- <AnySpendCustomizationProvider slots={slots} content={content} theme={theme}>
380
+ <AnySpendCustomizationProvider
381
+ slots={slots}
382
+ content={{
383
+ successTitle: "Payment Successful",
384
+ successDescription: "Your payment has been processed successfully.",
385
+ ...content,
386
+ }}
387
+ theme={theme}
388
+ >
381
389
  <CheckoutLayout
382
390
  mode={mode}
383
391
  paymentPanel={
@@ -1,7 +1,7 @@
1
1
  "use client";
2
2
 
3
3
  import { getExplorerTxUrl } from "@b3dotfun/sdk/anyspend";
4
- import { b3 } from "viem/chains";
4
+ import { b3Viem } from "@b3dotfun/sdk/shared/constants/chains/b3Viem";
5
5
  import { cn } from "@b3dotfun/sdk/shared/utils/cn";
6
6
  import { ExternalLink } from "lucide-react";
7
7
  import { motion } from "motion/react";
@@ -39,7 +39,7 @@ export function CheckoutSuccess({
39
39
  : "Your payment has been processed successfully.",
40
40
  txHash,
41
41
  orderId,
42
- explorerUrl: txHash ? getExplorerTxUrl(dstChainId ?? b3.id, txHash) : undefined,
42
+ explorerUrl: txHash ? getExplorerTxUrl(dstChainId ?? b3Viem.id, txHash) : undefined,
43
43
  onDone: () => {
44
44
  if (returnUrl) window.location.href = returnUrl;
45
45
  },
@@ -79,7 +79,7 @@ export function CheckoutSuccess({
79
79
  initial={{ opacity: 0 }}
80
80
  animate={{ opacity: 1 }}
81
81
  transition={{ duration: 0.3, delay: 0.5, ease: "easeOut" }}
82
- href={getExplorerTxUrl(dstChainId ?? b3.id, txHash)}
82
+ href={getExplorerTxUrl(dstChainId ?? b3Viem.id, txHash)}
83
83
  target="_blank"
84
84
  rel="noopener noreferrer"
85
85
  className="anyspend-success-tx-link mt-4 flex items-center gap-1.5 text-sm text-blue-600 hover:underline dark:text-blue-400"
@@ -11,15 +11,12 @@ import { getPaymentUrl } from "@b3dotfun/sdk/anyspend/utils/chain";
11
11
  import { isNativeToken } from "@b3dotfun/sdk/anyspend/utils/token";
12
12
  import {
13
13
  useAccountWallet,
14
- useB3Config,
15
14
  useIsMobile,
16
- useModalStore,
17
15
  useSimTokenBalance,
18
16
  useTokenData,
19
17
  useUnifiedChainSwitchAndExecute,
20
18
  } from "@b3dotfun/sdk/global-account/react";
21
19
  import { ShinyButton, TextShimmer } from "@b3dotfun/sdk/global-account/react";
22
- import { thirdwebB3Chain } from "@b3dotfun/sdk/shared/constants/chains/b3Chain";
23
20
  import { formatTokenAmount } from "@b3dotfun/sdk/shared/utils/number";
24
21
  import { cn } from "@b3dotfun/sdk/shared/utils/cn";
25
22
  import { Check, ChevronDown, ChevronsUpDown, Copy, Loader2, QrCode } from "lucide-react";
@@ -27,8 +24,10 @@ import { QRCodeSVG } from "qrcode.react";
27
24
  import { encodeFunctionData, erc20Abi } from "viem";
28
25
  import { AnimatePresence, motion } from "motion/react";
29
26
  import { useCallback, useEffect, useMemo, useRef, useState } from "react";
27
+ import { useConnectModal } from "thirdweb/react";
30
28
  import { TokenSelector } from "@relayprotocol/relay-kit-ui";
31
29
  import { ChainTokenIcon } from "../common/ChainTokenIcon";
30
+ import { connectModalConfig } from "../common/CryptoPaymentMethod";
32
31
  import type { AnySpendCheckoutClasses } from "./AnySpendCheckout";
33
32
 
34
33
  interface CryptoPayPanelProps {
@@ -76,11 +75,10 @@ export function CryptoPayPanel({
76
75
  const [selectedSrcToken, setSelectedSrcToken] = useState<components["schemas"]["Token"] | null>(null);
77
76
  const [copied, setCopied] = useState(false);
78
77
 
79
- const { address: walletAddress } = useAccountWallet();
80
- const effectiveAddress = senderAddress || walletAddress;
81
- const { partnerId } = useB3Config();
82
- const setB3ModalOpen = useModalStore(state => state.setB3ModalOpen);
83
- const setB3ModalContentType = useModalStore(state => state.setB3ModalContentType);
78
+ const { address: walletAddress, connectedEOAWallet } = useAccountWallet();
79
+ const connectedAddress = walletAddress || connectedEOAWallet?.getAccount()?.address;
80
+ const effectiveAddress = connectedAddress || senderAddress;
81
+ const { connect: openConnectModal } = useConnectModal();
84
82
 
85
83
  const { data: dstTokenData } = useTokenData(destinationTokenChainId, destinationTokenAddress);
86
84
 
@@ -235,9 +233,8 @@ export function CryptoPayPanel({
235
233
  /* ------------------------------------------------------------------ */
236
234
  const [walletOrderId, setWalletOrderId] = useState<string | undefined>();
237
235
  const [isSendingDeposit, setIsSendingDeposit] = useState(false);
238
- const [depositRejected, setDepositRejected] = useState(false);
239
236
  const depositSentRef = useRef(false);
240
- const { switchChainAndExecute } = useUnifiedChainSwitchAndExecute();
237
+ const { switchChainAndExecuteWithEOA } = useUnifiedChainSwitchAndExecute();
241
238
 
242
239
  const { createOrder: createSwapOrder, isCreatingOrder: isCreatingSwapOrder } = useAnyspendCreateOrder({
243
240
  onSuccess: data => {
@@ -254,7 +251,7 @@ export function CryptoPayPanel({
254
251
 
255
252
  // Auto-send deposit tx once swap order is ready
256
253
  useEffect(() => {
257
- if (!walletOat?.data?.order || depositSentRef.current || depositRejected) return;
254
+ if (!walletOat?.data?.order || depositSentRef.current) return;
258
255
  const order = walletOat.data.order;
259
256
  if (order.status !== "scanning_deposit_transaction") return;
260
257
  if (walletOat.data.depositTxs?.length) return;
@@ -264,8 +261,9 @@ export function CryptoPayPanel({
264
261
  try {
265
262
  setIsSendingDeposit(true);
266
263
  const amount = BigInt(order.srcAmount);
264
+ let txHash: string | undefined;
267
265
  if (isNativeToken(order.srcTokenAddress)) {
268
- await switchChainAndExecute(order.srcChain, {
266
+ txHash = await switchChainAndExecuteWithEOA(order.srcChain, {
269
267
  to: order.globalAddress as `0x${string}`,
270
268
  value: amount,
271
269
  });
@@ -275,30 +273,33 @@ export function CryptoPayPanel({
275
273
  functionName: "transfer",
276
274
  args: [order.globalAddress as `0x${string}`, amount],
277
275
  });
278
- await switchChainAndExecute(order.srcChain, {
276
+ txHash = await switchChainAndExecuteWithEOA(order.srcChain, {
279
277
  to: order.srcTokenAddress as `0x${string}`,
280
278
  data,
281
279
  value: BigInt(0),
282
280
  });
283
281
  }
282
+ if (!txHash) {
283
+ // User cancelled or tx failed — reset so they can retry
284
+ depositSentRef.current = false;
285
+ setWalletOrderId(undefined);
286
+ return;
287
+ }
284
288
  // Deposit sent — notify parent to transition to order lifecycle tracking
285
289
  if (walletOrderId) {
286
290
  onOrderCreatedRef.current?.(walletOrderId);
287
291
  }
288
292
  } catch (error: any) {
289
293
  depositSentRef.current = false;
290
- const isUserRejection =
291
- error?.code === 4001 || error?.message?.includes("rejected") || error?.message?.includes("denied");
292
- if (isUserRejection) {
293
- setDepositRejected(true);
294
- }
294
+ // Reset order so user can retry
295
+ setWalletOrderId(undefined);
295
296
  onErrorRef.current?.(error instanceof Error ? error : new Error(error?.message || "Transaction rejected"));
296
297
  } finally {
297
298
  setIsSendingDeposit(false);
298
299
  }
299
300
  };
300
301
  sendDeposit();
301
- }, [walletOat, switchChainAndExecute, walletOrderId, depositRejected]);
302
+ }, [walletOat, switchChainAndExecuteWithEOA, walletOrderId]);
302
303
 
303
304
  useOnOrderSuccess({
304
305
  orderData: walletOat,
@@ -309,8 +310,9 @@ export function CryptoPayPanel({
309
310
  const isWaitingForExecution = !!walletOrderId && walletOat?.data?.order.status !== "executed";
310
311
 
311
312
  const handleWalletPay = useCallback(() => {
312
- if (!selectedSrcToken || !walletAddress) return;
313
+ if (!selectedSrcToken || !connectedAddress) return;
313
314
  depositSentRef.current = false;
315
+ setWalletOrderId(undefined);
314
316
  createSwapOrder({
315
317
  recipientAddress,
316
318
  orderType: "swap",
@@ -325,7 +327,7 @@ export function CryptoPayPanel({
325
327
  });
326
328
  }, [
327
329
  selectedSrcToken,
328
- walletAddress,
330
+ connectedAddress,
329
331
  effectiveAddress,
330
332
  recipientAddress,
331
333
  selectedSrcChainId,
@@ -360,14 +362,30 @@ export function CryptoPayPanel({
360
362
  }
361
363
  };
362
364
 
363
- const handleConnectWallet = () => {
364
- setB3ModalContentType({ type: "signInWithB3", showBackButton: false, chain: thirdwebB3Chain, partnerId });
365
- setB3ModalOpen(true);
365
+ const [shouldAutoPay, setShouldAutoPay] = useState(false);
366
+
367
+ const handleConnectWallet = async () => {
368
+ try {
369
+ const wallet = await openConnectModal(connectModalConfig);
370
+ if (wallet) {
371
+ setShouldAutoPay(true);
372
+ }
373
+ } catch (error) {
374
+ console.error("Failed to connect wallet:", error);
375
+ }
366
376
  };
367
377
 
378
+ // Auto-trigger payment after wallet connect
379
+ useEffect(() => {
380
+ if (shouldAutoPay && connectedAddress && selectedSrcToken && hasEnoughBalance && !isLoadingAnyspendQuote) {
381
+ setShouldAutoPay(false);
382
+ handleWalletPay();
383
+ }
384
+ }, [shouldAutoPay, connectedAddress, selectedSrcToken, hasEnoughBalance, isLoadingAnyspendQuote, handleWalletPay]);
385
+
368
386
  const isLoading = isLoadingAnyspendQuote;
369
387
  const isPending = isCreatingSwapOrder || isSendingDeposit || isWaitingForExecution;
370
- const canPay = walletAddress && selectedSrcToken && hasEnoughBalance && !isLoading && !isPending;
388
+ const canPay = connectedAddress && selectedSrcToken && hasEnoughBalance && !isLoading && !isPending;
371
389
 
372
390
  const chainName = ALL_CHAINS[selectedSrcChainId]?.name || "the specified chain";
373
391
  const chainLogoUrl = ALL_CHAINS[selectedSrcChainId]?.logoUrl;
@@ -478,7 +496,7 @@ export function CryptoPayPanel({
478
496
 
479
497
  {/* ---- Insufficient balance warning ---- */}
480
498
  <AnimatePresence>
481
- {walletAddress && selectedSrcToken && !hasEnoughBalance && !isLoading && (
499
+ {connectedAddress && selectedSrcToken && !hasEnoughBalance && !isLoading && (
482
500
  <motion.p
483
501
  key="balance-warning"
484
502
  initial={{ opacity: 0, height: 0 }}
@@ -493,7 +511,7 @@ export function CryptoPayPanel({
493
511
  </AnimatePresence>
494
512
 
495
513
  {/* ---- Wallet Pay Button ---- */}
496
- {!walletAddress ? (
514
+ {!connectedAddress ? (
497
515
  <ShinyButton
498
516
  accentColor={themeColor || "hsl(var(--as-brand))"}
499
517
  onClick={handleConnectWallet}