Skip to content

Commit 86070fa

Browse files
[Pay] Add feePayer option for direct_payment mode in PayEmbed (#6695)
1 parent c5bf5a8 commit 86070fa

File tree

5 files changed

+42
-0
lines changed

5 files changed

+42
-0
lines changed

.changeset/brave-wombats-smoke.md

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
---
2+
"thirdweb": minor
3+
---
4+
5+
Add feePayer option for direct_payment mode of PayEmbed
6+
7+
For direct payments via the PayEmbed, you can now specify the payer of the protocol fee for direct transfers. Can be "sender" or "receiver", defaults to "sender".
8+
9+
```ts
10+
<PayEmbed
11+
client={THIRDWEB_CLIENT}
12+
payOptions={{
13+
mode: "direct_payment",
14+
paymentInfo: {
15+
amount: "2",
16+
chain: base,
17+
token: getDefaultToken(base, "USDC"),
18+
sellerAddress: "0x...",
19+
feePayer: "receiver", // <-- transfer fee paid by the receiver
20+
},
21+
metadata: {
22+
name: "Black Hoodie (Size L)",
23+
image: "/drip-hoodie.png",
24+
},
25+
}}
26+
/>
27+
```

apps/playground-web/src/components/pay/direct-payment.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ export function BuyMerchPreview() {
1919
chain: base,
2020
token: getDefaultToken(base, "USDC"),
2121
sellerAddress: "0xEb0effdFB4dC5b3d5d3aC6ce29F3ED213E95d675",
22+
feePayer: "receiver",
2223
},
2324
metadata: {
2425
name: "Black Hoodie (Size L)",

packages/thirdweb/src/pay/buyWithCrypto/getTransfer.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,11 @@ export type GetBuyWithCryptoTransferParams = {
5959
* This details will be stored with the purchase and can be retrieved later via the status API or Webhook
6060
*/
6161
purchaseData?: object;
62+
63+
/**
64+
* For direct transfers, specify who will pay for the transfer fee. Can be "sender" or "receiver".
65+
*/
66+
feePayer?: "sender" | "receiver";
6267
};
6368

6469
/**
@@ -135,6 +140,7 @@ export async function getBuyWithCryptoTransfer(
135140
tokenAddress: params.tokenAddress,
136141
amount: params.amount,
137142
purchaseData: params.purchaseData,
143+
feePayer: params.feePayer,
138144
}),
139145
});
140146

packages/thirdweb/src/react/core/hooks/connection/ConnectButtonProps.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,10 @@ export type PaymentInfo = {
3939
* If not provided, the native token will be used.
4040
*/
4141
token?: TokenInfo;
42+
/**
43+
* For direct transfers, specify who will pay the transfer fee. Can be "sender" or "receiver".
44+
*/
45+
feePayer?: "sender" | "receiver";
4246
} & (
4347
| {
4448
/**

packages/thirdweb/src/react/web/ui/ConnectWallet/screens/Buy/swap/TransferConfirmationScreen.tsx

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -99,6 +99,10 @@ export function TransferConfirmationScreen(
9999
: token.address,
100100
amount: tokenAmount,
101101
purchaseData: payOptions?.purchaseData,
102+
feePayer:
103+
payOptions?.mode === "direct_payment"
104+
? payOptions.paymentInfo.feePayer
105+
: undefined,
102106
});
103107
return transferResponse;
104108
},

0 commit comments

Comments
 (0)