Skip to content

Conversation

@joaquim-verges
Copy link
Member

@joaquim-verges joaquim-verges commented Dec 3, 2025


PR-Codex overview

This PR focuses on enhancing wallet balance retrieval and payment execution tracking in the thirdweb package, particularly by improving how wallet addresses are managed and adding event tracking for payment execution states.

Detailed summary

  • Fixed getWalletBalance to compare token addresses using getAddress.
  • Updated various components to include the walletAddress and walletType in payment-related functions.
  • Added tracking events for payment execution start, success, and error in useStepExecutor.

✨ Ask PR-Codex anything about this PR by commenting with /codex {your question}

Summary by CodeRabbit

  • Chores
    • Improved payment analytics: richer tracking for payment flows (start, success, error) now includes wallet and token/chain context to help monitor payment behavior.
  • Bug Fixes
    • Fixed wallet balance detection when the native token address is provided, ensuring correct balance display for native vs. token wallets.

✏️ Tip: You can customize this high-level summary in your review settings.

@vercel
Copy link

vercel bot commented Dec 3, 2025

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Preview Comments Updated (UTC)
docs-v2 Ready Ready Preview Comment Dec 3, 2025 9:01am
nebula Ready Ready Preview Comment Dec 3, 2025 9:01am
thirdweb_playground Ready Ready Preview Comment Dec 3, 2025 9:01am
thirdweb-www Error Error Dec 3, 2025 9:01am
wallet-ui Ready Ready Preview Comment Dec 3, 2025 9:01am

@changeset-bot
Copy link

changeset-bot bot commented Dec 3, 2025

🦋 Changeset detected

Latest commit: 66e3f43

The changes in this PR will be included in the next version bump.

This PR includes changesets to release 4 packages
Name Type
thirdweb Patch
@thirdweb-dev/nebula Patch
@thirdweb-dev/wagmi-adapter Patch
wagmi-inapp Patch

Not sure what this means? Click here to learn what changesets are.

Click here if you're a maintainer who wants to add another changeset to this PR

@coderabbitai
Copy link
Contributor

coderabbitai bot commented Dec 3, 2025

Walkthrough

Adds analytics tracking calls across the Bridge UI and the useStepExecutor hook, includes wallet info in several tracking payloads, normalizes token address comparison in getWalletBalance, and adds a changeset entry for a patch release. No public API signatures were changed.

Changes

Cohort / File(s) Summary
useStepExecutor analytics
packages/thirdweb/src/react/core/hooks/useStepExecutor.ts
Added imports trackPayEvent and stringify; added tracking calls for execution start, success, and error (including stringified error payload) and included client/preparedQuote token & chain details in analytics payloads.
Bridge UI — Quote loading
packages/thirdweb/src/react/web/ui/Bridge/QuoteLoader.tsx
Added walletAddress: sender to the trackPayEvent payload within the quote query function.
Bridge UI — Payment details
packages/thirdweb/src/react/web/ui/Bridge/payment-details/PaymentDetails.tsx
Extended payment tracking payloads to include walletAddress and walletType from paymentMethod.payerWallet for buy/sell/transfer flows.
Bridge UI — Payment selection
packages/thirdweb/src/react/web/ui/Bridge/payment-selection/PaymentSelection.tsx
Added walletAddress (from payerWallet?.getAccount()?.address) and walletType (from payerWallet?.id) to trackPayEvent payload for payment selection events.
Bridge UI — Success screen
packages/thirdweb/src/react/web/ui/Bridge/payment-success/SuccessScreen.tsx
Added walletAddress (from preparedQuote.intent.sender) to success analytics payloads for buy/sell and transfer flows.
Wallet utils — address normalization
packages/thirdweb/src/wallets/utils/getWalletBalance.ts
Import getAddress and compare canonicalized addresses (getAddress(tokenAddress) !== getAddress(NATIVE_TOKEN_ADDRESS)) when deciding ERC20 vs native balance retrieval.
Release metadata
.changeset/fifty-moons-punch.md
New changeset file added marking a patch release for the thirdweb package with note "Fix getWalletBalance with native token address."

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

  • Review analytics payload fields for consistency and PII concerns (wallet addresses) across the Bridge UI and useStepExecutor.
  • Verify trackPayEvent parameter order and expected types (especially when passing client and stringified errors).
  • Confirm stringify usage produces safe/expected output and doesn't leak sensitive data.
  • Check getAddress import path and behavior when tokenAddress may be undefined/null to avoid runtime errors.

Pre-merge checks and finishing touches

❌ Failed checks (1 warning, 1 inconclusive)
Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 33.33% which is insufficient. The required threshold is 80.00%. You can run @coderabbitai generate docstrings to improve docstring coverage.
Description check ❓ Inconclusive The PR description includes a PR-Codex overview summarizing the changes, but lacks required template sections: no Linear issue tag, minimal reviewer notes, and testing instructions are vague. Add the Linear issue tag (TEAM-0000 format), provide explicit reviewer notes about key changes, and detail specific testing steps (unit tests, playground scenarios, etc.).
✅ Passed checks (1 passed)
Check name Status Explanation
Title check ✅ Passed The title accurately reflects the main changes: adding error tracking for payment execution failures via trackPayEvent calls in useStepExecutor and related components.
✨ Finishing touches
  • 📝 Generate docstrings
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch _SDK_Add_error_tracking_for_payment_execution_failures

Warning

Review ran into problems

🔥 Problems

Errors were encountered while retrieving linked issues.

Errors (1)
  • TEAM-0000: Entity not found: Issue - Could not find referenced Issue.

Comment @coderabbitai help to get the list of available commands and usage tips.

@github-actions github-actions bot added packages SDK Involves changes to the thirdweb SDK labels Dec 3, 2025
@joaquim-verges joaquim-verges marked this pull request as ready for review December 3, 2025 02:45
@joaquim-verges joaquim-verges requested review from a team as code owners December 3, 2025 02:45
Copy link
Member Author


How to use the Graphite Merge Queue

Add either label to this PR to merge it via the merge queue:

  • merge-queue - adds this PR to the back of the merge queue
  • hotfix - for urgent hot fixes, skip the queue and merge this PR next

You must have a Graphite account in order to use the merge queue. Sign up using this link.

An organization admin has enabled the Graphite Merge Queue in this repository.

Please do not merge from GitHub as this will restart CI on PRs being processed by the merge queue.

This stack of pull requests is managed by Graphite. Learn more about stacking.

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 0

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
packages/thirdweb/src/react/core/hooks/useStepExecutor.ts (1)

631-647: Isolate analytics failures so they never break payment error handling

Right now, if trackPayEvent or stringify were to throw synchronously, it would short‑circuit the rest of this catch block and potentially prevent setError(...) from running. Given this runs in the failure path, the analytics call should be best‑effort and never affect user‑visible error handling.

Consider wrapping the tracking call in its own try/catch:

-    } catch (err) {
-      console.error("Error executing payment", err);
-      trackPayEvent({
-        client,
-        error: err instanceof Error ? err.message : stringify(err),
-        event: "ub:ui:error",
-      });
+    } catch (err) {
+      console.error("Error executing payment", err);
+      try {
+        trackPayEvent({
+          client,
+          error: err instanceof Error ? err.message : stringify(err),
+          event: "ub:ui:error",
+        });
+      } catch (trackingError) {
+        console.error("Failed to track payment error", trackingError);
+      }

This keeps analytics robust without risking changes to the existing error UX.

🧹 Nitpick comments (1)
packages/thirdweb/src/react/core/hooks/useStepExecutor.ts (1)

653-665: Add client to execute’s dependency array

execute now closes over client (via trackPayEvent), but client is not listed in the dependency array. For correctness and to satisfy React hook linting, it should typically be included:

   }, [
     executionState,
     wallet,
     currentTxIndex,
     flatTxs,
     executeSingleTx,
     executeBatch,
     executeSendCalls,
     onrampStatus,
     executeOnramp,
     onComplete,
-    preparedQuote,
+    preparedQuote,
+    client,
   ]);

Assuming client is stable in practice, this is mostly about keeping dependencies accurate and avoiding future surprises.

📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

Disabled knowledge base sources:

  • Linear integration is disabled by default for public repositories

You can enable these sources in your CodeRabbit configuration.

📥 Commits

Reviewing files that changed from the base of the PR and between 4c5696e and a8140e8.

📒 Files selected for processing (1)
  • packages/thirdweb/src/react/core/hooks/useStepExecutor.ts (2 hunks)
🧰 Additional context used
📓 Path-based instructions (4)
**/*.{ts,tsx}

📄 CodeRabbit inference engine (CLAUDE.md)

**/*.{ts,tsx}: Write idiomatic TypeScript with explicit function declarations and return types
Limit each TypeScript file to one stateless, single-responsibility function for clarity
Re-use shared types from @/types or local types.ts barrels
Prefer type aliases over interface except for nominal shapes in TypeScript
Avoid any and unknown in TypeScript unless unavoidable; narrow generics when possible
Choose composition over inheritance; leverage utility types (Partial, Pick, etc.) in TypeScript

**/*.{ts,tsx}: Write idiomatic TypeScript with explicit function declarations and return types
Limit each file to one stateless, single-responsibility function for clarity and testability
Re-use shared types from @/types or local types.ts barrel exports
Prefer type aliases over interface except for nominal shapes
Avoid any and unknown unless unavoidable; narrow generics whenever possible
Choose composition over inheritance; leverage utility types (Partial, Pick, etc.)
Comment only ambiguous logic in TypeScript files; avoid restating TypeScript types and signatures in prose

Files:

  • packages/thirdweb/src/react/core/hooks/useStepExecutor.ts
packages/thirdweb/src/**/*.{ts,tsx}

📄 CodeRabbit inference engine (CLAUDE.md)

packages/thirdweb/src/**/*.{ts,tsx}: Comment only ambiguous logic in SDK code; avoid restating TypeScript in prose
Load heavy dependencies inside async paths to keep initial bundle lean (e.g. const { jsPDF } = await import("jspdf");)

Lazy-load heavy dependencies inside async paths to keep the initial bundle lean (e.g., const { jsPDF } = await import('jspdf');)

Files:

  • packages/thirdweb/src/react/core/hooks/useStepExecutor.ts
**/*.{js,jsx,ts,tsx,json}

📄 CodeRabbit inference engine (AGENTS.md)

Biome governs formatting and linting; its rules live in biome.json. Run pnpm fix & pnpm lint before committing, ensure there are no linting errors

Files:

  • packages/thirdweb/src/react/core/hooks/useStepExecutor.ts
**/*.{ts,tsx,js,jsx}

📄 CodeRabbit inference engine (AGENTS.md)

Lazy-import optional features; avoid top-level side-effects

Files:

  • packages/thirdweb/src/react/core/hooks/useStepExecutor.ts
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (9)
  • GitHub Check: Vercel Agent Review
  • GitHub Check: Lint Packages
  • GitHub Check: Size
  • GitHub Check: E2E Tests (pnpm, webpack)
  • GitHub Check: E2E Tests (pnpm, esbuild)
  • GitHub Check: E2E Tests (pnpm, vite)
  • GitHub Check: Unit Tests
  • GitHub Check: Build Packages
  • GitHub Check: Analyze (javascript)
🔇 Additional comments (1)
packages/thirdweb/src/react/core/hooks/useStepExecutor.ts (1)

16-17: Analytics and JSON helper imports look correct

The new imports for trackPayEvent and stringify are consistent with existing relative .js imports and are used appropriately in the error path. No changes needed here.

@codecov
Copy link

codecov bot commented Dec 3, 2025

Codecov Report

❌ Patch coverage is 11.47541% with 54 lines in your changes missing coverage. Please review.
✅ Project coverage is 54.67%. Comparing base (4c5696e) to head (66e3f43).
⚠️ Report is 1 commits behind head on main.

Files with missing lines Patch % Lines
...s/thirdweb/src/react/core/hooks/useStepExecutor.ts 4.08% 47 Missing ⚠️
...t/web/ui/Bridge/payment-details/PaymentDetails.tsx 0.00% 2 Missing ⚠️
...b/ui/Bridge/payment-selection/PaymentSelection.tsx 0.00% 2 Missing ⚠️
...ct/web/ui/Bridge/payment-success/SuccessScreen.tsx 0.00% 2 Missing ⚠️
...s/thirdweb/src/react/web/ui/Bridge/QuoteLoader.tsx 0.00% 1 Missing ⚠️
Additional details and impacted files
@@            Coverage Diff             @@
##             main    #8486      +/-   ##
==========================================
- Coverage   54.70%   54.67%   -0.04%     
==========================================
  Files         920      920              
  Lines       61046    61106      +60     
  Branches     4143     4143              
==========================================
+ Hits        33398    33408      +10     
- Misses      27546    27596      +50     
  Partials      102      102              
Flag Coverage Δ
packages 54.67% <11.47%> (-0.04%) ⬇️
Files with missing lines Coverage Δ
...ges/thirdweb/src/wallets/utils/getWalletBalance.ts 100.00% <100.00%> (ø)
...s/thirdweb/src/react/web/ui/Bridge/QuoteLoader.tsx 6.89% <0.00%> (-0.05%) ⬇️
...t/web/ui/Bridge/payment-details/PaymentDetails.tsx 3.93% <0.00%> (-0.03%) ⬇️
...b/ui/Bridge/payment-selection/PaymentSelection.tsx 7.21% <0.00%> (-0.08%) ⬇️
...ct/web/ui/Bridge/payment-success/SuccessScreen.tsx 9.09% <0.00%> (-0.14%) ⬇️
...s/thirdweb/src/react/core/hooks/useStepExecutor.ts 1.51% <4.08%> (+0.23%) ⬆️

... and 3 files with indirect coverage changes

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

@github-actions
Copy link
Contributor

github-actions bot commented Dec 3, 2025

size-limit report 📦

Path Size
@thirdweb-dev/nexus (esm) 104.88 KB (0%)
@thirdweb-dev/nexus (cjs) 316.6 KB (0%)

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 0

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
packages/thirdweb/src/react/core/hooks/useStepExecutor.ts (1)

2-14: Use origin chain for chainId in all execution tracking events

The execution tracking events (ub:ui:execution:start, ub:ui:execution:success, ub:ui:execution:error) are inconsistent with the rest of the Bridge analytics layer:

  • Currently: chainId: preparedQuote.steps[0]?.destinationToken.chainId
  • Should be: chainId: preparedQuote.steps[0]?.originToken.chainId

Across QuoteLoader, PaymentDetails, and SuccessScreen, chainId consistently represents the origin chain while toChainId represents the destination. Using destinationToken.chainId for chainId here creates an inconsistent (fromToken, chainId) pair and will skew analytics downstream.

Apply this fix to all three events:

-      chainId: preparedQuote.steps[0]?.destinationToken.chainId,
+      chainId: preparedQuote.steps[0]?.originToken.chainId,

This applies to the start event (line ~496), success event (line ~657), and error event (line ~676).

🧹 Nitpick comments (2)
packages/thirdweb/src/react/web/ui/Bridge/payment-selection/PaymentSelection.tsx (1)

132-145: Payment-selection analytics now capture wallet context (note snapshot timing)

Using payerWallet?.getAccount()?.address / payerWallet?.id for walletAddress and walletType is sound and avoids runtime issues with the later declaration of payerWallet. Do note this event only runs for the static ["payment_selection"] key, so it captures whatever wallet is active on initial mount rather than tracking later wallet/step changes; if you ever need per-wallet granular analytics, you’d want to key or enable the query off payerWallet as well.

If you intend this event to reflect only first-load state, no change is needed; otherwise, consider:

-  useQuery({
+  useQuery({
     queryFn: () => {
       trackPayEvent({
         client,
         event: "payment_selection",
         toChainId: destinationToken.chainId,
         toToken: destinationToken.address,
         walletAddress: payerWallet?.getAccount()?.address,
         walletType: payerWallet?.id,
       });
       return true;
     },
-    queryKey: ["payment_selection"],
+    queryKey: ["payment_selection", payerWallet?.id],
   });

Also applies to: 147-160

packages/thirdweb/src/wallets/utils/getWalletBalance.ts (1)

13-14: Canonical address comparison fix is correct (with slightly earlier failure on invalid input)

Normalizing both tokenAddress and NATIVE_TOKEN_ADDRESS via getAddress before comparing correctly fixes the “native token passed via address” bug and aligns with case-insensitive address semantics. Note this will now throw immediately for malformed addresses instead of failing later during ERC20 calls, which is generally preferable but is a small behaviour change for callers passing invalid input.

If you prefer to treat malformed tokenAddress as “native” instead of erroring, you could defensively wrap the comparison:

let isErc20 = false;
if (tokenAddress) {
  try {
    isErc20 =
      getAddress(tokenAddress) !== getAddress(NATIVE_TOKEN_ADDRESS);
  } catch {
    isErc20 = false; // fall back to native path on invalid address
  }
}

if (isErc20) {
  // ERC20 branch ...
}

Also applies to: 48-51

📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

Disabled knowledge base sources:

  • Linear integration is disabled by default for public repositories

You can enable these sources in your CodeRabbit configuration.

📥 Commits

Reviewing files that changed from the base of the PR and between a8140e8 and 66e3f43.

📒 Files selected for processing (7)
  • .changeset/fifty-moons-punch.md (1 hunks)
  • packages/thirdweb/src/react/core/hooks/useStepExecutor.ts (5 hunks)
  • packages/thirdweb/src/react/web/ui/Bridge/QuoteLoader.tsx (1 hunks)
  • packages/thirdweb/src/react/web/ui/Bridge/payment-details/PaymentDetails.tsx (1 hunks)
  • packages/thirdweb/src/react/web/ui/Bridge/payment-selection/PaymentSelection.tsx (1 hunks)
  • packages/thirdweb/src/react/web/ui/Bridge/payment-success/SuccessScreen.tsx (2 hunks)
  • packages/thirdweb/src/wallets/utils/getWalletBalance.ts (2 hunks)
✅ Files skipped from review due to trivial changes (1)
  • .changeset/fifty-moons-punch.md
🧰 Additional context used
📓 Path-based instructions (4)
**/*.{ts,tsx}

📄 CodeRabbit inference engine (CLAUDE.md)

**/*.{ts,tsx}: Write idiomatic TypeScript with explicit function declarations and return types
Limit each TypeScript file to one stateless, single-responsibility function for clarity
Re-use shared types from @/types or local types.ts barrels
Prefer type aliases over interface except for nominal shapes in TypeScript
Avoid any and unknown in TypeScript unless unavoidable; narrow generics when possible
Choose composition over inheritance; leverage utility types (Partial, Pick, etc.) in TypeScript

**/*.{ts,tsx}: Write idiomatic TypeScript with explicit function declarations and return types
Limit each file to one stateless, single-responsibility function for clarity and testability
Re-use shared types from @/types or local types.ts barrel exports
Prefer type aliases over interface except for nominal shapes
Avoid any and unknown unless unavoidable; narrow generics whenever possible
Choose composition over inheritance; leverage utility types (Partial, Pick, etc.)
Comment only ambiguous logic in TypeScript files; avoid restating TypeScript types and signatures in prose

Files:

  • packages/thirdweb/src/react/web/ui/Bridge/payment-details/PaymentDetails.tsx
  • packages/thirdweb/src/react/web/ui/Bridge/payment-success/SuccessScreen.tsx
  • packages/thirdweb/src/react/web/ui/Bridge/QuoteLoader.tsx
  • packages/thirdweb/src/react/web/ui/Bridge/payment-selection/PaymentSelection.tsx
  • packages/thirdweb/src/wallets/utils/getWalletBalance.ts
  • packages/thirdweb/src/react/core/hooks/useStepExecutor.ts
packages/thirdweb/src/**/*.{ts,tsx}

📄 CodeRabbit inference engine (CLAUDE.md)

packages/thirdweb/src/**/*.{ts,tsx}: Comment only ambiguous logic in SDK code; avoid restating TypeScript in prose
Load heavy dependencies inside async paths to keep initial bundle lean (e.g. const { jsPDF } = await import("jspdf");)

Lazy-load heavy dependencies inside async paths to keep the initial bundle lean (e.g., const { jsPDF } = await import('jspdf');)

Files:

  • packages/thirdweb/src/react/web/ui/Bridge/payment-details/PaymentDetails.tsx
  • packages/thirdweb/src/react/web/ui/Bridge/payment-success/SuccessScreen.tsx
  • packages/thirdweb/src/react/web/ui/Bridge/QuoteLoader.tsx
  • packages/thirdweb/src/react/web/ui/Bridge/payment-selection/PaymentSelection.tsx
  • packages/thirdweb/src/wallets/utils/getWalletBalance.ts
  • packages/thirdweb/src/react/core/hooks/useStepExecutor.ts
**/*.{js,jsx,ts,tsx,json}

📄 CodeRabbit inference engine (AGENTS.md)

Biome governs formatting and linting; its rules live in biome.json. Run pnpm fix & pnpm lint before committing, ensure there are no linting errors

Files:

  • packages/thirdweb/src/react/web/ui/Bridge/payment-details/PaymentDetails.tsx
  • packages/thirdweb/src/react/web/ui/Bridge/payment-success/SuccessScreen.tsx
  • packages/thirdweb/src/react/web/ui/Bridge/QuoteLoader.tsx
  • packages/thirdweb/src/react/web/ui/Bridge/payment-selection/PaymentSelection.tsx
  • packages/thirdweb/src/wallets/utils/getWalletBalance.ts
  • packages/thirdweb/src/react/core/hooks/useStepExecutor.ts
**/*.{ts,tsx,js,jsx}

📄 CodeRabbit inference engine (AGENTS.md)

Lazy-import optional features; avoid top-level side-effects

Files:

  • packages/thirdweb/src/react/web/ui/Bridge/payment-details/PaymentDetails.tsx
  • packages/thirdweb/src/react/web/ui/Bridge/payment-success/SuccessScreen.tsx
  • packages/thirdweb/src/react/web/ui/Bridge/QuoteLoader.tsx
  • packages/thirdweb/src/react/web/ui/Bridge/payment-selection/PaymentSelection.tsx
  • packages/thirdweb/src/wallets/utils/getWalletBalance.ts
  • packages/thirdweb/src/react/core/hooks/useStepExecutor.ts
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (9)
  • GitHub Check: E2E Tests (pnpm, esbuild)
  • GitHub Check: E2E Tests (pnpm, vite)
  • GitHub Check: Size
  • GitHub Check: E2E Tests (pnpm, webpack)
  • GitHub Check: Unit Tests
  • GitHub Check: Lint Packages
  • GitHub Check: Build Packages
  • GitHub Check: Vercel Agent Review
  • GitHub Check: Analyze (javascript)
🔇 Additional comments (3)
packages/thirdweb/src/react/web/ui/Bridge/payment-success/SuccessScreen.tsx (1)

66-88: Success-screen tracking payload extension looks consistent

Including walletAddress: preparedQuote.intent.sender for both buy/sell and transfer events is consistent with how the rest of the Bridge flow models the sender and doesn’t affect control flow. No issues from a correctness or typing perspective.

packages/thirdweb/src/react/web/ui/Bridge/payment-details/PaymentDetails.tsx (1)

85-118: Payment-details analytics enrichment is safe and consistent

Adding walletAddress / walletType from paymentMethod.payerWallet to the payment_details event fits the existing typing and matches how payer wallet is used later (e.g., in sender fallback). Optional chaining keeps this from impacting error paths.

packages/thirdweb/src/react/web/ui/Bridge/QuoteLoader.tsx (1)

110-127: Quote-loader analytics enrichment is straightforward

Including walletAddress: sender in the ub:ui:loading_quote:${mode} payload reuses an existing, already-validated prop and doesn’t alter the request/quote flow. No correctness issues here.

@joaquim-verges joaquim-verges merged commit 3ebca18 into main Dec 3, 2025
22 of 25 checks passed
@joaquim-verges joaquim-verges deleted the _SDK_Add_error_tracking_for_payment_execution_failures branch December 3, 2025 08:55
@joaquim-verges joaquim-verges mentioned this pull request Dec 3, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

packages SDK Involves changes to the thirdweb SDK

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants