diff --git a/.changeset/dirty-cougars-teach.md b/.changeset/dirty-cougars-teach.md new file mode 100644 index 00000000000..311826abb1d --- /dev/null +++ b/.changeset/dirty-cougars-teach.md @@ -0,0 +1,5 @@ +--- +"thirdweb": patch +--- + +Fix use of purchaseData in payment links diff --git a/apps/dashboard/src/@/api/universal-bridge/links.ts b/apps/dashboard/src/@/api/universal-bridge/links.ts index 68e5011c18f..47977c3a2a1 100644 --- a/apps/dashboard/src/@/api/universal-bridge/links.ts +++ b/apps/dashboard/src/@/api/universal-bridge/links.ts @@ -15,7 +15,7 @@ type PaymentLink = { chainId: number; }; amount: bigint | undefined; - purchaseData: unknown; + purchaseData: Record | undefined; }; export async function getPaymentLink(props: { diff --git a/apps/dashboard/src/app/pay/[id]/page.tsx b/apps/dashboard/src/app/pay/[id]/page.tsx index 77543f9818a..0d748c11d84 100644 --- a/apps/dashboard/src/app/pay/[id]/page.tsx +++ b/apps/dashboard/src/app/pay/[id]/page.tsx @@ -65,6 +65,7 @@ export default async function PayPage({ name={paymentLink.title} image={paymentLink.imageUrl} theme={theme} + purchaseData={paymentLink.purchaseData} /> ); } diff --git a/apps/dashboard/src/app/pay/components/client/PayPageEmbed.client.tsx b/apps/dashboard/src/app/pay/components/client/PayPageEmbed.client.tsx index ac565320564..937e92274f7 100644 --- a/apps/dashboard/src/app/pay/components/client/PayPageEmbed.client.tsx +++ b/apps/dashboard/src/app/pay/components/client/PayPageEmbed.client.tsx @@ -16,6 +16,7 @@ export function PayPageEmbed({ image, redirectUri, theme, + purchaseData, }: { chainId: number; recipientAddress: string; @@ -27,6 +28,7 @@ export function PayPageEmbed({ redirectUri?: string; clientId: string; theme?: "light" | "dark"; + purchaseData: Record | undefined; }) { const { theme: browserTheme, setTheme } = useTheme(); @@ -51,6 +53,7 @@ export function PayPageEmbed({ image, }, mode: "direct_payment", + purchaseData, paymentInfo: { chain, sellerAddress: recipientAddress, diff --git a/apps/dashboard/src/app/pay/page.tsx b/apps/dashboard/src/app/pay/page.tsx index 03169ea5489..0d15715801a 100644 --- a/apps/dashboard/src/app/pay/page.tsx +++ b/apps/dashboard/src/app/pay/page.tsx @@ -92,6 +92,7 @@ export default async function PayPage({ name={params.name} image={params.image} theme={params.theme} + purchaseData={undefined} /> ); } diff --git a/packages/thirdweb/src/bridge/Webhook.test.ts b/packages/thirdweb/src/bridge/Webhook.test.ts index 79cfd34b905..37f5f8b38b5 100644 --- a/packages/thirdweb/src/bridge/Webhook.test.ts +++ b/packages/thirdweb/src/bridge/Webhook.test.ts @@ -52,8 +52,14 @@ describe("parseIncomingWebhook", () => { receiver: "0x1234567890123456789012345678901234567890", type: "transfer", transactions: [ - "0x1234567890123456789012345678901234567890", - "0x1234567890123456789012345678901234567890", + { + chainId: 1, + transactionHash: "0x1234567890123456789012345678901234567890", + }, + { + chainId: 1, + transactionHash: "0x1234567890123456789012345678901234567890", + }, ], developerFeeBps: 100, developerFeeRecipient: "0x1234567890123456789012345678901234567890", diff --git a/packages/thirdweb/src/bridge/Webhook.ts b/packages/thirdweb/src/bridge/Webhook.ts index deebb88aa73..7bf379ad974 100644 --- a/packages/thirdweb/src/bridge/Webhook.ts +++ b/packages/thirdweb/src/bridge/Webhook.ts @@ -46,10 +46,15 @@ const webhookSchema = z.union([ sender: addressSchema, receiver: addressSchema, type: z.string(), - transactions: z.array(hexSchema), + transactions: z.array( + z.object({ + chainId: z.coerce.number(), + transactionHash: hexSchema, + }), + ), developerFeeBps: z.coerce.number(), developerFeeRecipient: addressSchema, - purchaseData: z.record(z.string(), z.unknown()), + purchaseData: z.optional(z.record(z.string(), z.unknown())), }), }), ]);