@b3dotfun/sdk 0.0.33 → 0.0.34-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 (95) hide show
  1. package/dist/cjs/anyspend/react/components/AnySpend.js +2 -2
  2. package/dist/cjs/anyspend/react/components/AnySpendCustom.js +1 -1
  3. package/dist/cjs/anyspend/react/components/AnyspendDepositHype.d.ts +0 -1
  4. package/dist/cjs/anyspend/react/components/AnyspendDepositHype.js +5 -36
  5. package/dist/cjs/anyspend/react/components/common/InsufficientDepositPayment.d.ts +12 -0
  6. package/dist/cjs/anyspend/react/components/common/InsufficientDepositPayment.js +25 -0
  7. package/dist/cjs/anyspend/react/components/common/OrderDetails.d.ts +3 -3
  8. package/dist/cjs/anyspend/react/components/common/OrderDetails.js +65 -60
  9. package/dist/cjs/anyspend/react/components/common/OrderStatus.js +2 -2
  10. package/dist/cjs/anyspend/react/hooks/useAnyspendFlow.d.ts +4 -4
  11. package/dist/cjs/anyspend/react/hooks/useAnyspendFlow.js +4 -2
  12. package/dist/cjs/anyspend/react/hooks/useAnyspendOrderAndTransactions.d.ts +6 -6
  13. package/dist/cjs/anyspend/react/hooks/useAnyspendOrderHistory.d.ts +54 -10
  14. package/dist/cjs/anyspend/react/hooks/useAnyspendQuote.js +1 -1
  15. package/dist/cjs/anyspend/types/api.d.ts +130 -14
  16. package/dist/cjs/anyspend/utils/chain.js +1 -1
  17. package/dist/cjs/anyspend/utils/format.js +1 -0
  18. package/dist/cjs/anyspend/utils/orderPayload.js +7 -0
  19. package/dist/cjs/global-account/react/components/B3DynamicModal.js +1 -4
  20. package/dist/cjs/global-account/react/components/LinkAccount/LinkAccount.js +14 -0
  21. package/dist/cjs/global-account/react/components/ManageAccount/BalanceContent.js +2 -2
  22. package/dist/cjs/global-account/react/components/ManageAccount/ManageAccount.js +17 -1
  23. package/dist/cjs/global-account/react/components/index.d.ts +8 -9
  24. package/dist/cjs/global-account/react/components/index.js +25 -28
  25. package/dist/cjs/global-account/react/index.native.d.ts +2 -1
  26. package/dist/cjs/global-account/react/index.native.js +5 -3
  27. package/dist/cjs/global-account/react/stores/index.d.ts +1 -1
  28. package/dist/cjs/global-account/react/stores/useModalStore.d.ts +2 -22
  29. package/dist/esm/anyspend/react/components/AnySpend.js +2 -2
  30. package/dist/esm/anyspend/react/components/AnySpendCustom.js +1 -1
  31. package/dist/esm/anyspend/react/components/AnyspendDepositHype.d.ts +0 -1
  32. package/dist/esm/anyspend/react/components/AnyspendDepositHype.js +6 -37
  33. package/dist/esm/anyspend/react/components/common/InsufficientDepositPayment.d.ts +12 -0
  34. package/dist/esm/anyspend/react/components/common/InsufficientDepositPayment.js +22 -0
  35. package/dist/esm/anyspend/react/components/common/OrderDetails.d.ts +3 -3
  36. package/dist/esm/anyspend/react/components/common/OrderDetails.js +48 -43
  37. package/dist/esm/anyspend/react/components/common/OrderStatus.js +2 -2
  38. package/dist/esm/anyspend/react/hooks/useAnyspendFlow.d.ts +4 -4
  39. package/dist/esm/anyspend/react/hooks/useAnyspendFlow.js +4 -2
  40. package/dist/esm/anyspend/react/hooks/useAnyspendOrderAndTransactions.d.ts +6 -6
  41. package/dist/esm/anyspend/react/hooks/useAnyspendOrderHistory.d.ts +54 -10
  42. package/dist/esm/anyspend/react/hooks/useAnyspendQuote.js +1 -1
  43. package/dist/esm/anyspend/types/api.d.ts +130 -14
  44. package/dist/esm/anyspend/utils/chain.js +1 -1
  45. package/dist/esm/anyspend/utils/format.js +1 -0
  46. package/dist/esm/anyspend/utils/orderPayload.js +7 -0
  47. package/dist/esm/global-account/react/components/B3DynamicModal.js +1 -4
  48. package/dist/esm/global-account/react/components/LinkAccount/LinkAccount.js +11 -0
  49. package/dist/esm/global-account/react/components/ManageAccount/BalanceContent.js +2 -2
  50. package/dist/esm/global-account/react/components/ManageAccount/ManageAccount.js +17 -1
  51. package/dist/esm/global-account/react/components/index.d.ts +8 -9
  52. package/dist/esm/global-account/react/components/index.js +8 -10
  53. package/dist/esm/global-account/react/index.native.d.ts +2 -1
  54. package/dist/esm/global-account/react/index.native.js +2 -1
  55. package/dist/esm/global-account/react/stores/index.d.ts +1 -1
  56. package/dist/esm/global-account/react/stores/useModalStore.d.ts +2 -22
  57. package/dist/styles/index.css +1 -1
  58. package/dist/types/anyspend/react/components/AnyspendDepositHype.d.ts +0 -1
  59. package/dist/types/anyspend/react/components/common/InsufficientDepositPayment.d.ts +12 -0
  60. package/dist/types/anyspend/react/components/common/OrderDetails.d.ts +3 -3
  61. package/dist/types/anyspend/react/hooks/useAnyspendFlow.d.ts +4 -4
  62. package/dist/types/anyspend/react/hooks/useAnyspendOrderAndTransactions.d.ts +6 -6
  63. package/dist/types/anyspend/react/hooks/useAnyspendOrderHistory.d.ts +54 -10
  64. package/dist/types/anyspend/types/api.d.ts +130 -14
  65. package/dist/types/global-account/react/components/index.d.ts +8 -9
  66. package/dist/types/global-account/react/index.native.d.ts +2 -1
  67. package/dist/types/global-account/react/stores/index.d.ts +1 -1
  68. package/dist/types/global-account/react/stores/useModalStore.d.ts +2 -22
  69. package/package.json +2 -4
  70. package/src/anyspend/react/components/AnySpend.tsx +2 -1
  71. package/src/anyspend/react/components/AnySpendCustom.tsx +1 -1
  72. package/src/anyspend/react/components/AnyspendDepositHype.tsx +5 -43
  73. package/src/anyspend/react/components/common/InsufficientDepositPayment.tsx +144 -0
  74. package/src/anyspend/react/components/common/OrderDetails.tsx +95 -71
  75. package/src/anyspend/react/components/common/OrderStatus.tsx +2 -2
  76. package/src/anyspend/react/hooks/useAnyspendFlow.ts +5 -3
  77. package/src/anyspend/react/hooks/useAnyspendQuote.ts +1 -1
  78. package/src/anyspend/types/api.ts +131 -11
  79. package/src/anyspend/utils/chain.ts +1 -1
  80. package/src/anyspend/utils/format.ts +1 -0
  81. package/src/anyspend/utils/orderPayload.ts +7 -0
  82. package/src/global-account/react/components/B3DynamicModal.tsx +0 -4
  83. package/src/global-account/react/components/LinkAccount/LinkAccount.tsx +10 -0
  84. package/src/global-account/react/components/ManageAccount/BalanceContent.tsx +6 -6
  85. package/src/global-account/react/components/ManageAccount/ManageAccount.tsx +17 -1
  86. package/src/global-account/react/components/index.ts +13 -16
  87. package/src/global-account/react/index.native.ts +2 -1
  88. package/src/global-account/react/stores/index.ts +1 -2
  89. package/src/global-account/react/stores/useModalStore.ts +1 -23
  90. package/dist/cjs/global-account/react/components/Transak/TransakModal.d.ts +0 -1
  91. package/dist/cjs/global-account/react/components/Transak/TransakModal.js +0 -110
  92. package/dist/esm/global-account/react/components/Transak/TransakModal.d.ts +0 -1
  93. package/dist/esm/global-account/react/components/Transak/TransakModal.js +0 -104
  94. package/dist/types/global-account/react/components/Transak/TransakModal.d.ts +0 -1
  95. package/src/global-account/react/components/Transak/TransakModal.tsx +0 -131
@@ -418,18 +418,23 @@ export interface paths {
418
418
  * }
419
419
  * ]
420
420
  */
421
- depositTxs: components["schemas"]["DepositTx"][] | null;
422
- /** @example {
423
- * "orderId": "5392f7a7-d472-4d6b-9848-bd07117fb82d",
424
- * "chain": 8453,
425
- * "txHash": "0x9df917e14bb089f74763d1d2662761d75c97a5a068b8a9e411c3d384c9c40d19",
426
- * "status": "success",
427
- * "createdAt": 1752505817654
428
- * } */
429
- relayTx: components["schemas"]["RelayTx"] | null;
421
+ depositTxs: components["schemas"]["DepositTx"][];
422
+ /**
423
+ * @description Cross-chain relay transactions
424
+ * @example [
425
+ * {
426
+ * "orderId": "5392f7a7-d472-4d6b-9848-bd07117fb82d",
427
+ * "chain": 8453,
428
+ * "txHash": "0x9df917e14bb089f74763d1d2662761d75c97a5a068b8a9e411c3d384c9c40d19",
429
+ * "status": "success",
430
+ * "createdAt": 1752505817654
431
+ * }
432
+ * ]
433
+ */
434
+ relayTxs: components["schemas"]["RelayTx"][];
430
435
  executeTx: components["schemas"]["ExecuteTx"] | null;
431
436
  /** @description Refund transactions if order failed */
432
- refundTxs: components["schemas"]["RefundTx"][] | null;
437
+ refundTxs: components["schemas"]["RefundTx"][];
433
438
  };
434
439
  /** @example 200 */
435
440
  statusCode: number;
@@ -468,7 +473,7 @@ export interface paths {
468
473
  "/orders/quote": {
469
474
  /**
470
475
  * Get anyspend quote
471
- * @description Retrieves a quote to swap or execute contract
476
+ * @description Retrieves a quote to swap, execute contract, or participate in HypeDuel
472
477
  */
473
478
  post: {
474
479
  requestBody: {
@@ -597,6 +602,43 @@ export interface paths {
597
602
  onrampVendor?: "coinbase" | "stripe" | "stripe-web2";
598
603
  contractAddress: string;
599
604
  fundAmount: string;
605
+ }
606
+ | {
607
+ /**
608
+ * @description Order type for HypeDuel
609
+ * @enum {string}
610
+ */
611
+ type: "hype_duel";
612
+ /**
613
+ * @description Source chain ID
614
+ * @example 1
615
+ */
616
+ srcChain: number;
617
+ /**
618
+ * @description Destination chain ID
619
+ * @example 8453
620
+ */
621
+ dstChain: number;
622
+ /**
623
+ * @description Source token contract address
624
+ * @example 0x0000000000000000000000000000000000000000
625
+ */
626
+ srcTokenAddress: string;
627
+ /**
628
+ * @description Destination token contract address
629
+ * @example 0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913
630
+ */
631
+ dstTokenAddress: string;
632
+ /**
633
+ * @description Amount to quote
634
+ * @example 1000000000000000000
635
+ */
636
+ amount: string;
637
+ /**
638
+ * @description Optional onramp vendor
639
+ * @enum {string}
640
+ */
641
+ onrampVendor?: "coinbase" | "stripe" | "stripe-web2";
600
642
  };
601
643
  };
602
644
  };
@@ -1043,6 +1085,19 @@ export interface components {
1043
1085
  */
1044
1086
  actualDstAmount: string | null;
1045
1087
  };
1088
+ /** @description HypeDuel-specific payload */
1089
+ HypeDuelPayload: {
1090
+ /**
1091
+ * @description Expected amount of destination tokens
1092
+ * @example 990000
1093
+ */
1094
+ expectedDstAmount: string;
1095
+ /**
1096
+ * @description Actual received amount (null for new orders)
1097
+ * @example 990000
1098
+ */
1099
+ actualDstAmount: string | null;
1100
+ };
1046
1101
  /** @description Custom execution payload */
1047
1102
  CustomPayload: {
1048
1103
  /**
@@ -1121,6 +1176,11 @@ export interface components {
1121
1176
  srcToken: components["schemas"]["Token"];
1122
1177
  dstToken: components["schemas"]["Token"];
1123
1178
  };
1179
+ /** @description HypeDuel metadata for display purposes */
1180
+ HypeDuelMetadata: {
1181
+ srcToken: components["schemas"]["Token"];
1182
+ dstToken: components["schemas"]["Token"];
1183
+ };
1124
1184
  /** @description Custom metadata for display purposes */
1125
1185
  CustomMetadata: {
1126
1186
  srcToken: components["schemas"]["Token"];
@@ -1197,6 +1257,7 @@ export interface components {
1197
1257
  | "expired"
1198
1258
  | "sending_token_from_vault"
1199
1259
  | "relay"
1260
+ | "executing"
1200
1261
  | "executed"
1201
1262
  | "refunding"
1202
1263
  | "refunded"
@@ -1239,6 +1300,15 @@ export interface components {
1239
1300
  payload: components["schemas"]["SwapPayload"];
1240
1301
  metadata: components["schemas"]["SwapMetadata"];
1241
1302
  };
1303
+ HypeDuelOrder: components["schemas"]["BaseOrder"] & {
1304
+ /**
1305
+ * @description Order type
1306
+ * @enum {string}
1307
+ */
1308
+ type: "hype_duel";
1309
+ payload: components["schemas"]["HypeDuelPayload"];
1310
+ metadata: components["schemas"]["HypeDuelMetadata"];
1311
+ };
1242
1312
  CustomOrder: components["schemas"]["BaseOrder"] & {
1243
1313
  /**
1244
1314
  * @description Order type
@@ -1277,6 +1347,7 @@ export interface components {
1277
1347
  };
1278
1348
  Order:
1279
1349
  | components["schemas"]["SwapOrder"]
1350
+ | components["schemas"]["HypeDuelOrder"]
1280
1351
  | components["schemas"]["CustomOrder"]
1281
1352
  | components["schemas"]["MintNftOrder"]
1282
1353
  | components["schemas"]["JoinTournamentOrder"]
@@ -1329,6 +1400,54 @@ export interface components {
1329
1400
  */
1330
1401
  creatorAddress?: string;
1331
1402
  };
1403
+ /** @description HypeDuel order request */
1404
+ HypeDuelOrderRequest: {
1405
+ /**
1406
+ * @description Order type
1407
+ * @enum {string}
1408
+ */
1409
+ type: "hype_duel";
1410
+ /**
1411
+ * @description Address to receive the destination tokens
1412
+ * @example 0x58241893EF1f86C9fBd8109Cd44Ea961fDb474e1
1413
+ */
1414
+ recipientAddress: string;
1415
+ /**
1416
+ * @description Source chain ID
1417
+ * @example 1
1418
+ */
1419
+ srcChain: number;
1420
+ /**
1421
+ * @description Destination chain ID
1422
+ * @example 8453
1423
+ */
1424
+ dstChain: number;
1425
+ /**
1426
+ * @description Source token contract address
1427
+ * @example 0xA0b86a33E6441E8A91DEF8f5663ACb4C9B4a1234
1428
+ */
1429
+ srcTokenAddress: string;
1430
+ /**
1431
+ * @description Destination token contract address
1432
+ * @example 0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913
1433
+ */
1434
+ dstTokenAddress: string;
1435
+ /**
1436
+ * @description Amount of source tokens for HypeDuel
1437
+ * @example 1000000
1438
+ */
1439
+ srcAmount: string;
1440
+ payload: components["schemas"]["HypeDuelPayload"];
1441
+ metadata: components["schemas"]["HypeDuelMetadata"];
1442
+ /** @description Optional partner identifier */
1443
+ partnerId?: string;
1444
+ onramp?: components["schemas"]["Onramp"];
1445
+ /**
1446
+ * @description Optional address of the order creator
1447
+ * @example 0x58241893EF1f86C9fBd8109Cd44Ea961fDb474e1
1448
+ */
1449
+ creatorAddress?: string;
1450
+ };
1332
1451
  /** @description Custom order request */
1333
1452
  CustomOrderRequest: {
1334
1453
  /**
@@ -1523,6 +1642,7 @@ export interface components {
1523
1642
  };
1524
1643
  OrderRequest:
1525
1644
  | components["schemas"]["SwapOrderRequest"]
1645
+ | components["schemas"]["HypeDuelOrderRequest"]
1526
1646
  | components["schemas"]["CustomOrderRequest"]
1527
1647
  | components["schemas"]["MintNftOrderRequest"]
1528
1648
  | components["schemas"]["JoinTournamentOrderRequest"]
@@ -64,7 +64,7 @@ export const EVM_MAINNET: Record<number, IEVMChain> = {
64
64
  name: "Arbitrum",
65
65
  type: ChainType.EVM,
66
66
  logoUrl: "https://assets.relay.link/icons/square/42161/light.png",
67
- nativeRequired: parseEther("0.0001"),
67
+ nativeRequired: parseEther("0.0003"),
68
68
  canDepositNative: true,
69
69
  defaultToken: getEthToken(arbitrum.id),
70
70
  nativeToken: getEthToken(arbitrum.id),
@@ -27,6 +27,7 @@ export const getStatusDisplay = (
27
27
  return { text: "Sending Token", status: "processing" };
28
28
 
29
29
  case "relay":
30
+ case "executing":
30
31
  return {
31
32
  text: "Executing Order",
32
33
  status: "processing",
@@ -48,6 +48,11 @@ export const buildPayload = (orderType: components["schemas"]["Order"]["type"],
48
48
  };
49
49
  case "custom":
50
50
  return { ...payload };
51
+ case "hype_duel":
52
+ return {
53
+ expectedDstAmount,
54
+ actualDstAmount: null,
55
+ };
51
56
  default:
52
57
  throw new Error(`Invalid order type: ${orderType}`);
53
58
  }
@@ -69,6 +74,8 @@ export const buildMetadata = (orderType: components["schemas"]["Order"]["type"],
69
74
  return { ...baseMetadata, tournament };
70
75
  case "custom":
71
76
  return { ...baseMetadata, action: payload.action };
77
+ case "hype_duel":
78
+ return { ...baseMetadata };
72
79
  default:
73
80
  throw new Error(`Invalid order type: ${orderType}`);
74
81
  }
@@ -17,7 +17,6 @@ import { LinkAccount } from "./LinkAccount/LinkAccount";
17
17
  import { ManageAccount } from "./ManageAccount/ManageAccount";
18
18
  import { RequestPermissions } from "./RequestPermissions/RequestPermissions";
19
19
  import { SignInWithB3Flow } from "./SignInWithB3/SignInWithB3Flow";
20
- import { TransakModal } from "./Transak/TransakModal";
21
20
  import { Dialog, DialogContent, DialogDescription, DialogTitle } from "./ui/dialog";
22
21
  import { Drawer, DrawerContent, DrawerDescription, DrawerTitle } from "./ui/drawer";
23
22
 
@@ -66,7 +65,6 @@ export function B3DynamicModal() {
66
65
  isFreestyleType && "b3-modal-freestyle",
67
66
  contentType?.type === "signInWithB3" && "p-0",
68
67
  contentType?.type === "anySpend" && "md:px-6",
69
- contentType?.type === "transak" && "transak-modal",
70
68
  );
71
69
 
72
70
  debug("contentType", contentType);
@@ -90,8 +88,6 @@ export function B3DynamicModal() {
90
88
  return <AnySpendTournament {...contentType} mode="modal" action="join" />;
91
89
  case "anySpendFundTournament":
92
90
  return <AnySpendTournament {...contentType} mode="modal" action="fund" />;
93
- case "transak":
94
- return <TransakModal />;
95
91
  case "anySpendOrderHistory":
96
92
  return <OrderHistory onBack={() => {}} mode="modal" />;
97
93
  case "anySpendStakeB3":
@@ -9,6 +9,7 @@ import { LinkAccountModalProps, useModalStore } from "../../stores/useModalStore
9
9
  import { getProfileDisplayInfo } from "../../utils/profileDisplay";
10
10
  import { useB3 } from "../B3Provider/useB3";
11
11
  import { Button } from "../ui/button";
12
+ import app from "@b3dotfun/sdk/global-account/app";
12
13
  type OTPStrategy = "email" | "phone";
13
14
  type SocialStrategy = "google" | "x" | "discord" | "apple" | "farcaster";
14
15
  type Strategy = OTPStrategy | SocialStrategy;
@@ -86,6 +87,15 @@ export function LinkAccount({
86
87
  setLinkingState(false);
87
88
  onError?.(error);
88
89
  },
90
+ onSuccess: async (data: any) => {
91
+ console.log("Raw Link Account Data:", data);
92
+ try {
93
+ console.log("Sync user data...");
94
+ await app.service("users").syncTwProfiles({});
95
+ } catch (refreshError) {
96
+ console.warn("⚠️ Could not sync user data:", refreshError);
97
+ }
98
+ },
89
99
  };
90
100
 
91
101
  const validateInput = () => {
@@ -96,8 +96,8 @@ export function BalanceContent({ onLogout, partnerId }: BalanceContentProps) {
96
96
  <div className="flex flex-col gap-6">
97
97
  {/* Profile Section */}
98
98
  <div className="flex items-center justify-between">
99
- <div className="flex items-center gap-4">
100
- <div className="relative">
99
+ <div className="global-account-profile flex items-center gap-4">
100
+ <div className="global-account-profile-avatar relative">
101
101
  {profile?.avatar ? (
102
102
  <img src={profile?.avatar} alt="Profile" className="size-24 rounded-full" />
103
103
  ) : (
@@ -107,11 +107,11 @@ export function BalanceContent({ onLogout, partnerId }: BalanceContentProps) {
107
107
  <Pencil size={16} className="text-b3-background" />
108
108
  </div>
109
109
  </div>
110
- <div>
110
+ <div className="global-account-profile-info">
111
111
  <h2 className="text-b3-grey text-xl font-semibold">
112
112
  {profile?.displayName || formatUsername(profile?.name || "")}
113
113
  </h2>
114
- <div className="border-b3-line bg-b3-line/20 hover:bg-b3-line/40 flex w-fit items-center gap-2 rounded-full border px-3 py-1 transition-colors">
114
+ <div className="address-button border-b3-line bg-b3-line/20 hover:bg-b3-line/40 flex w-fit items-center gap-2 rounded-full border px-3 py-1 transition-colors">
115
115
  <span className="text-b3-foreground-muted font-mono text-xs">
116
116
  {centerTruncate(account?.address || "", 6)}
117
117
  </span>
@@ -183,7 +183,7 @@ export function BalanceContent({ onLogout, partnerId }: BalanceContentProps) {
183
183
  <AccordionTrigger className="text-b3-grey font-neue-montreal-semibold py-2 hover:no-underline">
184
184
  <div className="flex items-center gap-3">
185
185
  <span>Connected {eoaInfo?.data?.name || "Wallet"}</span>
186
- <div className="border-b3-line bg-b3-line/20 hover:bg-b3-line/40 flex w-fit items-center gap-2 rounded-full border px-3 py-1 transition-colors">
186
+ <div className="address-button border-b3-line bg-b3-line/20 hover:bg-b3-line/40 flex w-fit items-center gap-2 rounded-full border px-3 py-1 transition-colors">
187
187
  <span className="text-b3-foreground-muted font-mono text-xs">{centerTruncate(eoaAddress, 6)}</span>
188
188
  <CopyToClipboard text={eoaAddress} />
189
189
  </div>
@@ -211,7 +211,7 @@ export function BalanceContent({ onLogout, partnerId }: BalanceContentProps) {
211
211
 
212
212
  {/* Sign Out */}
213
213
  <button
214
- className="border-b3-line hover:bg-b3-line relative flex w-full items-center justify-center rounded-2xl border p-4 transition-colors"
214
+ className="logout-button border-b3-line hover:bg-b3-line relative flex w-full items-center justify-center rounded-2xl border p-4 transition-colors"
215
215
  onClick={onLogoutEnhanced}
216
216
  >
217
217
  <span className="font-neue-montreal-semibold text-b3-grey">Sign out</span>
@@ -146,6 +146,22 @@ export function ManageAccount({
146
146
  !!user?.userId,
147
147
  );
148
148
 
149
+ const mutationOptions = {
150
+ onError: (error: Error) => {
151
+ console.error("Error Unlinking account:", error);
152
+ toast.error(error.message);
153
+ },
154
+ onSuccess: async (data: any) => {
155
+ console.log("Raw Link Account Data:", data);
156
+ try {
157
+ console.log("Sync user data...");
158
+ await app.service("users").syncTwProfiles({});
159
+ } catch (refreshError) {
160
+ console.warn("⚠️ Could not sync user data:", refreshError);
161
+ }
162
+ },
163
+ };
164
+
149
165
  // Fetch referred users
150
166
  const currentReferralCode = user?.referralCode || user?.userId || "";
151
167
 
@@ -189,7 +205,7 @@ export function ManageAccount({
189
205
  const handleUnlink = async (profile: any) => {
190
206
  setUnlinkingAccountId(profile.title);
191
207
  try {
192
- unlinkProfile({ client, profileToUnlink: profile.originalProfile });
208
+ unlinkProfile({ client, profileToUnlink: profile.originalProfile }, mutationOptions);
193
209
  } catch (error) {
194
210
  console.error("Error unlinking account:", error);
195
211
  } finally {
@@ -1,18 +1,18 @@
1
1
  // Core Components
2
- export { RelayKitProviderWrapper } from "./B3Provider/RelayKitProviderWrapper";
3
2
  export { B3DynamicModal } from "./B3DynamicModal";
4
3
  export { B3Provider, InnerProvider } from "./B3Provider/B3Provider";
4
+ export { RelayKitProviderWrapper } from "./B3Provider/RelayKitProviderWrapper";
5
5
  export { B3Context, type B3ContextType } from "./B3Provider/types";
6
6
  export { useB3 } from "./B3Provider/useB3";
7
7
  export { StyleRoot } from "./StyleRoot";
8
8
 
9
9
  // SignInWithB3 Components
10
- export { AuthButton } from "./SignInWithB3/components/AuthButton";
11
- export { PermissionItem } from "./SignInWithB3/components/PermissionItem";
12
- export { WalletRow } from "./SignInWithB3/components/WalletRow";
13
10
  export { SignInWithB3 } from "./SignInWithB3/SignInWithB3";
14
11
  export { SignInWithB3Flow } from "./SignInWithB3/SignInWithB3Flow";
15
12
  export { SignInWithB3Privy } from "./SignInWithB3/SignInWithB3Privy";
13
+ export { AuthButton } from "./SignInWithB3/components/AuthButton";
14
+ export { PermissionItem } from "./SignInWithB3/components/PermissionItem";
15
+ export { WalletRow } from "./SignInWithB3/components/WalletRow";
16
16
  export { LoginStepContainer } from "./SignInWithB3/steps/LoginStep";
17
17
  export { getConnectOptionsFromStrategy, isWalletType, type AllowedStrategy } from "./SignInWithB3/utils/signInUtils";
18
18
 
@@ -35,9 +35,6 @@ export { SendETHButton } from "./SendETHButton/SendETHButton";
35
35
  // SendERC20Button Components
36
36
  export { SendERC20Button } from "./SendERC20Button/SendERC20Button";
37
37
 
38
- // Transak Components
39
- export { TransakModal } from "./Transak/TransakModal";
40
-
41
38
  // Custom Components
42
39
  export { Button as CustomButton, buttonVariants as customButtonVariants } from "./custom/Button";
43
40
  export { ClientOnly } from "./custom/ClientOnly";
@@ -46,6 +43,15 @@ export { StaggeredFadeLoader } from "./custom/StaggeredFadeLoader";
46
43
  export { WalletConnectorIcon } from "./custom/WalletConnectorIcon";
47
44
 
48
45
  // UI Components
46
+ export { Loading } from "./ui/Loading";
47
+ export { ShinyButton } from "./ui/ShinyButton";
48
+ export { TabTrigger, Tabs, TabsContent, TabsList, TabsTransitionWrapper } from "./ui/TabSystem";
49
+ export {
50
+ TabTrigger as TabTriggerPrimitive,
51
+ TabsContent as TabsContentPrimitive,
52
+ TabsList as TabsListPrimitive,
53
+ Tabs as TabsPrimitive,
54
+ } from "./ui/Tabs";
49
55
  export { Badge, badgeVariants } from "./ui/badge";
50
56
  export { Button, buttonVariants } from "./ui/button";
51
57
  export {
@@ -86,18 +92,9 @@ export {
86
92
  export { GlareCard } from "./ui/glare-card";
87
93
  export { GlareCardRounded } from "./ui/glare-card-rounded";
88
94
  export { Input } from "./ui/input";
89
- export { Loading } from "./ui/Loading";
90
95
  export { Popover, PopoverContent, PopoverTrigger } from "./ui/popover";
91
96
  export { ScrollArea, ScrollBar } from "./ui/scroll-area";
92
- export { ShinyButton } from "./ui/ShinyButton";
93
97
  export { Skeleton } from "./ui/skeleton";
94
- export {
95
- TabsContent as TabsContentPrimitive,
96
- TabsList as TabsListPrimitive,
97
- Tabs as TabsPrimitive,
98
- TabTrigger as TabTriggerPrimitive,
99
- } from "./ui/Tabs";
100
- export { Tabs, TabsContent, TabsList, TabsTransitionWrapper, TabTrigger } from "./ui/TabSystem";
101
98
  export { TextLoop } from "./ui/text-loop";
102
99
  export { TextShimmer } from "./ui/text-shimmer";
103
100
  export { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from "./ui/tooltip";
@@ -6,9 +6,10 @@
6
6
 
7
7
  export { B3Provider } from "./components/B3Provider/B3Provider.native";
8
8
 
9
- export { useB3 } from "./components/B3Provider/useB3";
10
9
  export { B3Context, type B3ContextType } from "./components/B3Provider/types";
10
+ export { useB3 } from "./components/B3Provider/useB3";
11
11
  export { useAccountWallet } from "./hooks/useAccountWallet";
12
12
  export { useAuthentication } from "./hooks/useAuthentication";
13
+ export { useProfile } from "./hooks/useProfile";
13
14
  export { useSiwe } from "./hooks/useSiwe";
14
15
  export { useAuthStore } from "./stores/useAuthStore";
@@ -7,12 +7,11 @@ export type {
7
7
  AnySpendJoinTournamentProps,
8
8
  AnySpendModalProps,
9
9
  AnySpendNftProps,
10
- AnyspendOrderDetailsProps,
11
10
  AnySpendOrderHistoryProps,
12
11
  AnySpendStakeB3Props,
12
+ AnyspendOrderDetailsProps,
13
13
  ManageAccountModalProps,
14
14
  ModalContentType,
15
15
  RequestPermissionsModalProps,
16
16
  SignInWithB3ModalProps,
17
- TransakProps,
18
17
  } from "./useModalStore";
@@ -194,25 +194,6 @@ export interface AnyspendOrderDetailsProps extends BaseModalProps {
194
194
  showBackButton?: boolean;
195
195
  }
196
196
 
197
- /**
198
- * Props for the Transak modal
199
- * Handles Transak-specific on-ramping
200
- */
201
- export interface TransakProps extends BaseModalProps {
202
- /** Modal type identifier */
203
- type: "transak";
204
- /** Wallet address to receive the purchased crypto */
205
- destinationWalletAddress?: string;
206
- /** Default amount of crypto to purchase */
207
- defaultCryptoAmount?: number;
208
- /** Amount of fiat currency to spend */
209
- fiatAmount?: number;
210
- /** ISO country code for KYC and available payment methods */
211
- countryCode?: string;
212
- /** Callback function called when the purchase is successful */
213
- onSuccess?: () => void;
214
- }
215
-
216
197
  /**
217
198
  * Props for the AnySpend order history modal
218
199
  */
@@ -316,12 +297,10 @@ export interface AnySpendDepositHypeProps extends BaseModalProps {
316
297
  sourceTokenChainId?: number;
317
298
  /** Payment type - crypto or fiat */
318
299
  paymentType?: "crypto" | "fiat";
319
- /** Deposit contract address */
320
- depositContractAddress: string;
321
300
  /** Main footer */
322
301
  mainFooter?: React.ReactNode;
323
302
  /** Callback function called when the deposit is successful */
324
- onSuccess?: () => void;
303
+ onSuccess?: (amount?: string) => void;
325
304
  }
326
305
 
327
306
  /**
@@ -336,7 +315,6 @@ export type ModalContentType =
336
315
  | AnySpendNftProps
337
316
  | AnySpendJoinTournamentProps
338
317
  | AnySpendFundTournamentProps
339
- | TransakProps
340
318
  | AnySpendOrderHistoryProps
341
319
  | AnySpendStakeB3Props
342
320
  | AnySpendBuySpinProps
@@ -1 +0,0 @@
1
- export declare function TransakModal(): import("react/jsx-runtime").JSX.Element;
@@ -1,110 +0,0 @@
1
- "use strict";
2
- "use client";
3
- var __importDefault = (this && this.__importDefault) || function (mod) {
4
- return (mod && mod.__esModule) ? mod : { "default": mod };
5
- };
6
- Object.defineProperty(exports, "__esModule", { value: true });
7
- exports.TransakModal = TransakModal;
8
- const jsx_runtime_1 = require("react/jsx-runtime");
9
- const react_1 = require("../../../../global-account/react");
10
- const debug_1 = __importDefault(require("../../../../shared/utils/debug"));
11
- const transak_sdk_1 = require("@transak/transak-sdk");
12
- const lucide_react_1 = require("lucide-react");
13
- const react_2 = require("react");
14
- const sonner_1 = require("sonner");
15
- function TransakModal() {
16
- const [isLoading, setIsLoading] = (0, react_2.useState)(true);
17
- const [_error, setError] = (0, react_2.useState)(null);
18
- const account = (0, react_1.useAccountWallet)();
19
- const { environment } = (0, react_1.useB3)();
20
- console.log(`process.env.NEXT_PUBLIC_TRANSAK_API_KEY`, process.env.NEXT_PUBLIC_TRANSAK_API_KEY); // d1f4e8be-cacb-4cfa-b2cd-c591084b5ef6
21
- const transakConfig = (0, react_2.useMemo)(() => {
22
- return {
23
- apiKey: process.env.NEXT_PUBLIC_TRANSAK_API_KEY || "", // (Required)
24
- // Yes, I know it looks weird to use isDevelopment for staging, but this is how this was done on Basement. Leaving till confirming difference
25
- environment: environment === "development" ? transak_sdk_1.Transak.ENVIRONMENTS.STAGING : transak_sdk_1.Transak.ENVIRONMENTS.PRODUCTION, // (Required)
26
- containerId: "transakMount", // Id of the element where you want to initialize the iframe
27
- themeColor: "0c68e9",
28
- widgetHeight: "650px",
29
- productsAvailed: "BUY",
30
- hideMenu: true,
31
- colorMode: "DARK",
32
- backgroundColors: "000000", // TODO: figure out why this doesn't work
33
- exchangeScreenTitle: "Buy ETH on B3",
34
- isFeeCalculationHidden: true,
35
- cryptoCurrencyCode: "ETH",
36
- network: "b3",
37
- };
38
- }, [environment]);
39
- const { ready } = (0, react_1.useB3)();
40
- const modalOptions = (0, react_1.useModalStore)(state => state.contentType);
41
- const isOnRamp = modalOptions?.type === "transak";
42
- const destinationWalletAddress = isOnRamp ? modalOptions?.destinationWalletAddress : undefined;
43
- const defaultCryptoAmount = isOnRamp ? modalOptions?.defaultCryptoAmount : undefined;
44
- const onSuccess = isOnRamp ? modalOptions?.onSuccess : undefined;
45
- const fiatAmount = isOnRamp ? modalOptions?.fiatAmount : undefined;
46
- const countryCode = isOnRamp ? modalOptions?.countryCode : undefined;
47
- (0, react_2.useEffect)(() => {
48
- if (!ready || !isOnRamp)
49
- return;
50
- const config = {
51
- ...transakConfig,
52
- walletAddress: destinationWalletAddress || account?.address, // In the future, this should be set to the new global B3 SCW address
53
- defaultCryptoAmount,
54
- disableWalletAddressForm: !!destinationWalletAddress || !!account?.address, // Only disable the form if we have an address
55
- fiatAmount: fiatAmount,
56
- countryCode: countryCode,
57
- };
58
- const transak = new transak_sdk_1.Transak(config);
59
- try {
60
- transak.init();
61
- // Add event listeners
62
- transak_sdk_1.Transak.on("*", data => {
63
- (0, debug_1.default)("@@transak", data);
64
- });
65
- transak_sdk_1.Transak.on(transak_sdk_1.Transak.EVENTS.TRANSAK_WIDGET_CLOSE, () => {
66
- setIsLoading(false);
67
- (0, debug_1.default)("@@transak", "Transak SDK closed!");
68
- });
69
- transak_sdk_1.Transak.on(transak_sdk_1.Transak.EVENTS.TRANSAK_WIDGET_INITIALISED, () => {
70
- (0, debug_1.default)("@@transak", "Transak SDK initialized!");
71
- setIsLoading(false);
72
- });
73
- transak_sdk_1.Transak.on(transak_sdk_1.Transak.EVENTS.TRANSAK_ORDER_FAILED, orderData => {
74
- (0, debug_1.default)("@@transak", orderData);
75
- sonner_1.toast.error("Oh no! Something went wrong. Please try again.");
76
- });
77
- transak_sdk_1.Transak.on(transak_sdk_1.Transak.EVENTS.TRANSAK_ORDER_SUCCESSFUL, orderData => {
78
- (0, debug_1.default)("@@transak", orderData);
79
- sonner_1.toast.success("Successfully purchased ETH with credit card!");
80
- onSuccess?.();
81
- });
82
- }
83
- catch (err) {
84
- setError(err instanceof Error ? err : new Error("Failed to initialize Transak"));
85
- sonner_1.toast.error("Oh no! Something went wrong. Please try again.");
86
- setIsLoading(false);
87
- }
88
- // Cleanup code
89
- return () => {
90
- transak.close();
91
- };
92
- }, [
93
- ready,
94
- account?.address,
95
- destinationWalletAddress,
96
- defaultCryptoAmount,
97
- isOnRamp,
98
- onSuccess,
99
- fiatAmount,
100
- transakConfig,
101
- countryCode,
102
- ]);
103
- return ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [isLoading && ((0, jsx_runtime_1.jsxs)("div", { className: "flex h-full min-h-[650px] flex-col items-center justify-center gap-4", children: [(0, jsx_runtime_1.jsx)(lucide_react_1.Loader2, { className: "h-24 w-24 animate-spin opacity-10" }), (0, jsx_runtime_1.jsx)(react_1.TextShimmer, { children: "Powering up our credit card processor..." })] })), (0, jsx_runtime_1.jsx)("div", { id: "transakMount", style: {
104
- display: isLoading ? "none" : "block",
105
- width: "100%",
106
- height: "650px",
107
- borderRadius: "25px",
108
- overflow: "hidden",
109
- } })] }));
110
- }
@@ -1 +0,0 @@
1
- export declare function TransakModal(): import("react/jsx-runtime").JSX.Element;