thirdweb 5.105.46 → 5.105.48

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 (55) hide show
  1. package/dist/cjs/react/core/hooks/useStepExecutor.js +73 -51
  2. package/dist/cjs/react/core/hooks/useStepExecutor.js.map +1 -1
  3. package/dist/cjs/react/web/ui/Bridge/BridgeOrchestrator.js +1 -2
  4. package/dist/cjs/react/web/ui/Bridge/BridgeOrchestrator.js.map +1 -1
  5. package/dist/cjs/react/web/ui/Bridge/BuyWidget.js +1 -1
  6. package/dist/cjs/react/web/ui/Bridge/BuyWidget.js.map +1 -1
  7. package/dist/cjs/react/web/ui/Bridge/QuoteLoader.js +1 -0
  8. package/dist/cjs/react/web/ui/Bridge/QuoteLoader.js.map +1 -1
  9. package/dist/cjs/react/web/ui/Bridge/payment-details/PaymentDetails.js +2 -1
  10. package/dist/cjs/react/web/ui/Bridge/payment-details/PaymentDetails.js.map +1 -1
  11. package/dist/cjs/react/web/ui/Bridge/payment-selection/PaymentSelection.js +6 -5
  12. package/dist/cjs/react/web/ui/Bridge/payment-selection/PaymentSelection.js.map +1 -1
  13. package/dist/cjs/react/web/ui/ConnectWallet/screens/Buy/swap/FiatValue.js +1 -0
  14. package/dist/cjs/react/web/ui/ConnectWallet/screens/Buy/swap/FiatValue.js.map +1 -1
  15. package/dist/cjs/version.js +1 -1
  16. package/dist/esm/react/core/hooks/useStepExecutor.js +73 -51
  17. package/dist/esm/react/core/hooks/useStepExecutor.js.map +1 -1
  18. package/dist/esm/react/web/ui/Bridge/BridgeOrchestrator.js +1 -2
  19. package/dist/esm/react/web/ui/Bridge/BridgeOrchestrator.js.map +1 -1
  20. package/dist/esm/react/web/ui/Bridge/BuyWidget.js +1 -1
  21. package/dist/esm/react/web/ui/Bridge/BuyWidget.js.map +1 -1
  22. package/dist/esm/react/web/ui/Bridge/QuoteLoader.js +1 -0
  23. package/dist/esm/react/web/ui/Bridge/QuoteLoader.js.map +1 -1
  24. package/dist/esm/react/web/ui/Bridge/payment-details/PaymentDetails.js +2 -1
  25. package/dist/esm/react/web/ui/Bridge/payment-details/PaymentDetails.js.map +1 -1
  26. package/dist/esm/react/web/ui/Bridge/payment-selection/PaymentSelection.js +6 -5
  27. package/dist/esm/react/web/ui/Bridge/payment-selection/PaymentSelection.js.map +1 -1
  28. package/dist/esm/react/web/ui/ConnectWallet/screens/Buy/swap/FiatValue.js +1 -0
  29. package/dist/esm/react/web/ui/ConnectWallet/screens/Buy/swap/FiatValue.js.map +1 -1
  30. package/dist/esm/version.js +1 -1
  31. package/dist/types/react/core/hooks/useStepExecutor.d.ts +1 -1
  32. package/dist/types/react/core/hooks/useStepExecutor.d.ts.map +1 -1
  33. package/dist/types/react/core/machines/paymentMachine.d.ts +1 -1
  34. package/dist/types/react/core/machines/paymentMachine.d.ts.map +1 -1
  35. package/dist/types/react/web/ui/Bridge/BridgeOrchestrator.d.ts.map +1 -1
  36. package/dist/types/react/web/ui/Bridge/BuyWidget.d.ts +4 -0
  37. package/dist/types/react/web/ui/Bridge/BuyWidget.d.ts.map +1 -1
  38. package/dist/types/react/web/ui/Bridge/QuoteLoader.d.ts.map +1 -1
  39. package/dist/types/react/web/ui/Bridge/StepRunner.d.ts +1 -1
  40. package/dist/types/react/web/ui/Bridge/StepRunner.d.ts.map +1 -1
  41. package/dist/types/react/web/ui/Bridge/payment-details/PaymentDetails.d.ts.map +1 -1
  42. package/dist/types/react/web/ui/Bridge/payment-selection/PaymentSelection.d.ts.map +1 -1
  43. package/dist/types/react/web/ui/ConnectWallet/screens/Buy/swap/FiatValue.d.ts.map +1 -1
  44. package/dist/types/version.d.ts +1 -1
  45. package/package.json +1 -1
  46. package/src/react/core/hooks/useStepExecutor.ts +93 -71
  47. package/src/react/core/machines/paymentMachine.ts +1 -1
  48. package/src/react/web/ui/Bridge/BridgeOrchestrator.tsx +1 -2
  49. package/src/react/web/ui/Bridge/BuyWidget.tsx +6 -1
  50. package/src/react/web/ui/Bridge/QuoteLoader.tsx +1 -0
  51. package/src/react/web/ui/Bridge/StepRunner.tsx +1 -1
  52. package/src/react/web/ui/Bridge/payment-details/PaymentDetails.tsx +2 -1
  53. package/src/react/web/ui/Bridge/payment-selection/PaymentSelection.tsx +9 -5
  54. package/src/react/web/ui/ConnectWallet/screens/Buy/swap/FiatValue.tsx +1 -0
  55. package/src/version.ts +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"StepRunner.d.ts","sourceRoot":"","sources":["../../../../../../src/react/web/ui/Bridge/StepRunner.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AACnE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,0CAA0C,CAAC;AACvE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yCAAyC,CAAC;AAO7E,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,yCAAyC,CAAC;AACpF,OAAO,EACL,KAAK,qBAAqB,EAE3B,MAAM,wCAAwC,CAAC;AAQhD,UAAU,eAAe;IACvB,OAAO,EAAE,oBAAoB,CAAC;IAE9B;;OAEG;IACH,MAAM,EAAE,MAAM,CAAC;IAEf;;OAEG;IACH,MAAM,EAAE,cAAc,CAAC;IAEvB;;OAEG;IACH,aAAa,EAAE,aAAa,CAAC;IAE7B;;OAEG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IAEpB;;OAEG;IACH,UAAU,EAAE,CAAC,iBAAiB,EAAE,qBAAqB,EAAE,KAAK,IAAI,CAAC;IAEjE;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;IAEtB;;OAEG;IACH,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;CACrB;AAED,wBAAgB,UAAU,CAAC,EACzB,OAAO,EACP,MAAM,EACN,MAAM,EACN,aAAa,EACb,UAAU,EACV,QAAQ,EACR,MAAM,EACN,SAAS,GACV,EAAE,eAAe,2CAyUjB"}
1
+ {"version":3,"file":"StepRunner.d.ts","sourceRoot":"","sources":["../../../../../../src/react/web/ui/Bridge/StepRunner.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AACnE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,0CAA0C,CAAC;AACvE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yCAAyC,CAAC;AAO7E,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,yCAAyC,CAAC;AACpF,OAAO,EACL,KAAK,qBAAqB,EAE3B,MAAM,wCAAwC,CAAC;AAQhD,UAAU,eAAe;IACvB,OAAO,EAAE,oBAAoB,CAAC;IAE9B;;OAEG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB;;OAEG;IACH,MAAM,EAAE,cAAc,CAAC;IAEvB;;OAEG;IACH,aAAa,EAAE,aAAa,CAAC;IAE7B;;OAEG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IAEpB;;OAEG;IACH,UAAU,EAAE,CAAC,iBAAiB,EAAE,qBAAqB,EAAE,KAAK,IAAI,CAAC;IAEjE;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;IAEtB;;OAEG;IACH,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;CACrB;AAED,wBAAgB,UAAU,CAAC,EACzB,OAAO,EACP,MAAM,EACN,MAAM,EACN,aAAa,EACb,UAAU,EACV,QAAQ,EACR,MAAM,EACN,SAAS,GACV,EAAE,eAAe,2CAyUjB"}
@@ -1 +1 @@
1
- {"version":3,"file":"PaymentDetails.d.ts","sourceRoot":"","sources":["../../../../../../../src/react/web/ui/Bridge/payment-details/PaymentDetails.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AAItE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,4CAA4C,CAAC;AACtF,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,6CAA6C,CAAC;AASjF,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAG1D,MAAM,WAAW,mBAAmB;IAClC;;OAEG;IACH,SAAS,EAAE,SAAS,CAAC;IACrB;;OAEG;IACH,MAAM,EAAE,cAAc,CAAC;IACvB;;OAEG;IACH,aAAa,EAAE,aAAa,CAAC;IAC7B;;OAEG;IACH,aAAa,EAAE,mBAAmB,CAAC;IAEnC;;OAEG;IACH,SAAS,EAAE,MAAM,IAAI,CAAC;IAEtB;;OAEG;IACH,MAAM,EAAE,MAAM,IAAI,CAAC;IAEnB;;OAEG;IACH,OAAO,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;CACjC;AAED,wBAAgB,cAAc,CAAC,EAC7B,SAAS,EACT,MAAM,EACN,aAAa,EACb,aAAa,EACb,SAAS,EACT,MAAM,EACN,OAAO,GACR,EAAE,mBAAmB,2CA6UrB"}
1
+ {"version":3,"file":"PaymentDetails.d.ts","sourceRoot":"","sources":["../../../../../../../src/react/web/ui/Bridge/payment-details/PaymentDetails.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AAItE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,4CAA4C,CAAC;AACtF,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,6CAA6C,CAAC;AASjF,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAG1D,MAAM,WAAW,mBAAmB;IAClC;;OAEG;IACH,SAAS,EAAE,SAAS,CAAC;IACrB;;OAEG;IACH,MAAM,EAAE,cAAc,CAAC;IACvB;;OAEG;IACH,aAAa,EAAE,aAAa,CAAC;IAC7B;;OAEG;IACH,aAAa,EAAE,mBAAmB,CAAC;IAEnC;;OAEG;IACH,SAAS,EAAE,MAAM,IAAI,CAAC;IAEtB;;OAEG;IACH,MAAM,EAAE,MAAM,IAAI,CAAC;IAEnB;;OAEG;IACH,OAAO,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;CACjC;AAED,wBAAgB,cAAc,CAAC,EAC7B,SAAS,EACT,MAAM,EACN,aAAa,EACb,aAAa,EACb,SAAS,EACT,MAAM,EACN,OAAO,GACR,EAAE,mBAAmB,2CA8UrB"}
@@ -1 +1 @@
1
- {"version":3,"file":"PaymentSelection.d.ts","sourceRoot":"","sources":["../../../../../../../src/react/web/ui/Bridge/payment-selection/PaymentSelection.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,sCAAsC,CAAC;AAElE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AACtE,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,oCAAoC,CAAC;AAChF,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,iCAAiC,CAAC;AAM/D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,6CAA6C,CAAC;AACjF,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,yCAAyC,CAAC;AAC/E,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qCAAqC,CAAC;AAIzE,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;AAKhE,MAAM,WAAW,qBAAqB;IACpC;;OAEG;IACH,gBAAgB,EAAE,KAAK,CAAC;IAExB;;OAEG;IACH,iBAAiB,EAAE,MAAM,CAAC;IAE1B;;OAEG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;IAE1B;;OAEG;IACH,MAAM,EAAE,cAAc,CAAC;IAEvB;;OAEG;IACH,uBAAuB,EAAE,CAAC,aAAa,EAAE,aAAa,KAAK,IAAI,CAAC;IAEhE;;OAEG;IACH,OAAO,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;IAEhC;;OAEG;IACH,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IAEpB;;OAEG;IACH,cAAc,CAAC,EAAE,sBAAsB,CAAC;IAExC;;OAEG;IACH,aAAa,EAAE,aAAa,CAAC;IAE7B;;OAEG;IACH,uBAAuB,CAAC,EAAE,OAAO,CAAC;IAElC;;;OAGG;IACH,cAAc,CAAC,EAAE,CAAC,QAAQ,GAAG,MAAM,CAAC,EAAE,CAAC;IAEvC;;OAEG;IACH,QAAQ,CAAC,EAAE,QAAQ,GAAG,UAAU,CAAC;IAEjC;;;OAGG;IACH,QAAQ,CAAC,EAAE,qBAAqB,CAAC;IAEjC;;OAEG;IACH,OAAO,EAAE,MAAM,GAAG,SAAS,CAAC;IAE5B,eAAe,CAAC,EAAE,eAAe,CAAC;CACnC;AAQD,wBAAgB,gBAAgB,CAAC,EAC/B,gBAAgB,EAChB,MAAM,EACN,iBAAiB,EACjB,eAAe,EACf,uBAAuB,EACvB,OAAO,EACP,MAAM,EACN,cAAc,EACd,aAAa,EACb,uBAAuB,EACvB,cAAmC,EACnC,eAAe,EACf,QAAQ,EACR,QAAQ,EACR,OAAO,GACR,EAAE,qBAAqB,2CAoMvB"}
1
+ {"version":3,"file":"PaymentSelection.d.ts","sourceRoot":"","sources":["../../../../../../../src/react/web/ui/Bridge/payment-selection/PaymentSelection.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,sCAAsC,CAAC;AAElE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AACtE,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,oCAAoC,CAAC;AAChF,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,iCAAiC,CAAC;AAM/D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,6CAA6C,CAAC;AACjF,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,yCAAyC,CAAC;AAC/E,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qCAAqC,CAAC;AAIzE,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;AAKhE,MAAM,WAAW,qBAAqB;IACpC;;OAEG;IACH,gBAAgB,EAAE,KAAK,CAAC;IAExB;;OAEG;IACH,iBAAiB,EAAE,MAAM,CAAC;IAE1B;;OAEG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;IAE1B;;OAEG;IACH,MAAM,EAAE,cAAc,CAAC;IAEvB;;OAEG;IACH,uBAAuB,EAAE,CAAC,aAAa,EAAE,aAAa,KAAK,IAAI,CAAC;IAEhE;;OAEG;IACH,OAAO,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;IAEhC;;OAEG;IACH,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IAEpB;;OAEG;IACH,cAAc,CAAC,EAAE,sBAAsB,CAAC;IAExC;;OAEG;IACH,aAAa,EAAE,aAAa,CAAC;IAE7B;;OAEG;IACH,uBAAuB,CAAC,EAAE,OAAO,CAAC;IAElC;;;OAGG;IACH,cAAc,CAAC,EAAE,CAAC,QAAQ,GAAG,MAAM,CAAC,EAAE,CAAC;IAEvC;;OAEG;IACH,QAAQ,CAAC,EAAE,QAAQ,GAAG,UAAU,CAAC;IAEjC;;;OAGG;IACH,QAAQ,CAAC,EAAE,qBAAqB,CAAC;IAEjC;;OAEG;IACH,OAAO,EAAE,MAAM,GAAG,SAAS,CAAC;IAE5B,eAAe,CAAC,EAAE,eAAe,CAAC;CACnC;AAQD,wBAAgB,gBAAgB,CAAC,EAC/B,gBAAgB,EAChB,MAAM,EACN,iBAAiB,EACjB,eAAe,EACf,uBAAuB,EACvB,OAAO,EACP,MAAM,EACN,cAAc,EACd,aAAa,EACb,uBAAuB,EACvB,cAAmC,EACnC,eAAe,EACf,QAAQ,EACR,QAAQ,EACR,OAAO,GACR,EAAE,qBAAqB,2CAwMvB"}
@@ -1 +1 @@
1
- {"version":3,"file":"FiatValue.d.ts","sourceRoot":"","sources":["../../../../../../../../../src/react/web/ui/ConnectWallet/screens/Buy/swap/FiatValue.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,sCAAsC,CAAC;AAClE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uCAAuC,CAAC;AAE5E,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,0CAA0C,CAAC;AAGtF,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gCAAgC,CAAC;AAIhE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAG/D,wBAAgB,SAAS,CACvB,KAAK,EAAE;IACL,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,kBAAkB,CAAC;IAC1B,KAAK,EAAE,KAAK,CAAC;IACb,MAAM,EAAE,cAAc,CAAC;IACvB,QAAQ,CAAC,EAAE,qBAAqB,CAAC;CAClC,GAAG,SAAS,kDAgCd"}
1
+ {"version":3,"file":"FiatValue.d.ts","sourceRoot":"","sources":["../../../../../../../../../src/react/web/ui/ConnectWallet/screens/Buy/swap/FiatValue.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,sCAAsC,CAAC;AAClE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uCAAuC,CAAC;AAE5E,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,0CAA0C,CAAC;AAGtF,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gCAAgC,CAAC;AAIhE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAG/D,wBAAgB,SAAS,CACvB,KAAK,EAAE;IACL,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,kBAAkB,CAAC;IAC1B,KAAK,EAAE,KAAK,CAAC;IACb,MAAM,EAAE,cAAc,CAAC;IACvB,QAAQ,CAAC,EAAE,qBAAqB,CAAC;CAClC,GAAG,SAAS,kDAiCd"}
@@ -1,2 +1,2 @@
1
- export declare const version = "5.105.46";
1
+ export declare const version = "5.105.48";
2
2
  //# sourceMappingURL=version.d.ts.map
package/package.json CHANGED
@@ -388,7 +388,7 @@
388
388
  }
389
389
  },
390
390
  "typings": "./dist/types/exports/thirdweb.d.ts",
391
- "version": "5.105.46",
391
+ "version": "5.105.48",
392
392
  "scripts": {
393
393
  "bench": "vitest -c ./test/vitest.config.ts bench",
394
394
  "bench:compare": "bun run ./benchmarks/run.ts",
@@ -38,7 +38,7 @@ interface StepExecutorOptions {
38
38
  /** Prepared quote returned by Bridge.prepare */
39
39
  request: BridgePrepareRequest;
40
40
  /** Wallet instance providing getAccount() & sendTransaction */
41
- wallet: Wallet;
41
+ wallet?: Wallet;
42
42
  /** Window adapter for opening on-ramp URLs (web / RN) */
43
43
  windowAdapter: WindowAdapter;
44
44
  /** Thirdweb client for API calls */
@@ -372,6 +372,11 @@ export function useStepExecutor(
372
372
 
373
373
  const status = statusResult.status;
374
374
  if (status === "COMPLETED") {
375
+ /*
376
+ * The occasional race condition can happen where the onramp provider gives us completed status before the token balance has updated in our RPC.
377
+ * We add this pause so the simulation doesn't fail on the next step.
378
+ */
379
+ await new Promise((resolve) => setTimeout(resolve, 2000));
375
380
  setOnrampStatus("completed");
376
381
  // Add type field for discriminated union
377
382
  const typedStatusResult = {
@@ -408,6 +413,14 @@ export function useStepExecutor(
408
413
  abortControllerRef.current = abortController;
409
414
 
410
415
  try {
416
+ if (flatTxs.length > 0 && !wallet) {
417
+ throw new ApiError({
418
+ code: "INVALID_INPUT",
419
+ message: "No wallet provided to execute transactions",
420
+ statusCode: 400,
421
+ });
422
+ }
423
+
411
424
  // Execute onramp first if configured and not already completed
412
425
  if (preparedQuote.type === "onramp" && onrampStatus === "pending") {
413
426
  await executeOnramp(
@@ -417,89 +430,98 @@ export function useStepExecutor(
417
430
  );
418
431
  }
419
432
 
420
- // Then execute transactions
421
- const account = wallet.getAccount();
422
- if (!account) {
423
- throw new ApiError({
424
- code: "INVALID_INPUT",
425
- message: "Wallet not connected",
426
- statusCode: 400,
427
- });
428
- }
429
-
430
- // Start from where we left off, or from the beginning
431
- const startIndex = currentTxIndex ?? 0;
432
-
433
- for (let i = startIndex; i < flatTxs.length; i++) {
434
- if (abortController.signal.aborted) {
435
- break;
433
+ if (flatTxs.length > 0) {
434
+ // Then execute transactions
435
+ if (!wallet) {
436
+ throw new ApiError({
437
+ code: "INVALID_INPUT",
438
+ message: "No wallet provided to execute transactions",
439
+ statusCode: 400,
440
+ });
436
441
  }
437
-
438
- const currentTx = flatTxs[i];
439
- if (!currentTx) {
440
- continue; // Skip invalid index
442
+ const account = wallet.getAccount();
443
+ if (!account) {
444
+ throw new ApiError({
445
+ code: "INVALID_INPUT",
446
+ message: "Wallet not connected",
447
+ statusCode: 400,
448
+ });
441
449
  }
442
450
 
443
- setCurrentTxIndex(i);
444
- const currentStepData = preparedQuote.steps[currentTx._stepIndex];
445
- if (!currentStepData) {
446
- throw new Error(`Invalid step index: ${currentTx._stepIndex}`);
447
- }
451
+ // Start from where we left off, or from the beginning
452
+ const startIndex = currentTxIndex ?? 0;
448
453
 
449
- // switch chain if needed
450
- if (currentTx.chainId !== wallet.getChain()?.id) {
451
- await wallet.switchChain(getCachedChain(currentTx.chainId));
452
- }
454
+ for (let i = startIndex; i < flatTxs.length; i++) {
455
+ if (abortController.signal.aborted) {
456
+ break;
457
+ }
453
458
 
454
- // Check if we can batch transactions
455
- const canBatch =
456
- account.sendBatchTransaction !== undefined && i < flatTxs.length - 1; // Not the last transaction
457
-
458
- if (canBatch) {
459
- // Find consecutive transactions on the same chain
460
- const batchTxs: FlattenedTx[] = [currentTx];
461
- let j = i + 1;
462
- while (j < flatTxs.length) {
463
- const nextTx = flatTxs[j];
464
- if (!nextTx || nextTx.chainId !== currentTx.chainId) {
465
- break;
466
- }
467
- batchTxs.push(nextTx);
468
- j++;
459
+ const currentTx = flatTxs[i];
460
+ if (!currentTx) {
461
+ continue; // Skip invalid index
462
+ }
463
+
464
+ setCurrentTxIndex(i);
465
+ const currentStepData = preparedQuote.steps[currentTx._stepIndex];
466
+ if (!currentStepData) {
467
+ throw new Error(`Invalid step index: ${currentTx._stepIndex}`);
468
+ }
469
+
470
+ // switch chain if needed
471
+ if (currentTx.chainId !== wallet.getChain()?.id) {
472
+ await wallet.switchChain(getCachedChain(currentTx.chainId));
469
473
  }
470
474
 
471
- // Execute batch if we have multiple transactions
472
- if (batchTxs.length > 1) {
473
- await executeBatch(
474
- batchTxs,
475
- account,
476
- completedStatusResults,
477
- abortController.signal,
478
- );
479
-
480
- // Mark all batched transactions as completed
481
- for (const tx of batchTxs) {
482
- setCompletedTxs((prev) => new Set(prev).add(tx._index));
475
+ // Check if we can batch transactions
476
+ const canBatch =
477
+ account.sendBatchTransaction !== undefined &&
478
+ i < flatTxs.length - 1; // Not the last transaction
479
+
480
+ if (canBatch) {
481
+ // Find consecutive transactions on the same chain
482
+ const batchTxs: FlattenedTx[] = [currentTx];
483
+ let j = i + 1;
484
+ while (j < flatTxs.length) {
485
+ const nextTx = flatTxs[j];
486
+ if (!nextTx || nextTx.chainId !== currentTx.chainId) {
487
+ break;
488
+ }
489
+ batchTxs.push(nextTx);
490
+ j++;
483
491
  }
484
492
 
485
- // Skip ahead
486
- i = j - 1;
487
- continue;
493
+ // Execute batch if we have multiple transactions
494
+ if (batchTxs.length > 1) {
495
+ await executeBatch(
496
+ batchTxs,
497
+ account,
498
+ completedStatusResults,
499
+ abortController.signal,
500
+ );
501
+
502
+ // Mark all batched transactions as completed
503
+ for (const tx of batchTxs) {
504
+ setCompletedTxs((prev) => new Set(prev).add(tx._index));
505
+ }
506
+
507
+ // Skip ahead
508
+ i = j - 1;
509
+ continue;
510
+ }
488
511
  }
489
- }
490
512
 
491
- // Execute single transaction
492
- await executeSingleTx(
493
- currentTx,
494
- account,
495
- completedStatusResults,
496
- abortController.signal,
497
- );
513
+ // Execute single transaction
514
+ await executeSingleTx(
515
+ currentTx,
516
+ account,
517
+ completedStatusResults,
518
+ abortController.signal,
519
+ );
498
520
 
499
- // Mark transaction as completed
500
- setCompletedTxs((prev) => new Set(prev).add(currentTx._index));
521
+ // Mark transaction as completed
522
+ setCompletedTxs((prev) => new Set(prev).add(currentTx._index));
523
+ }
501
524
  }
502
-
503
525
  // All done - check if we actually completed everything
504
526
  if (!abortController.signal.aborted) {
505
527
  setCurrentTxIndex(undefined);
@@ -29,7 +29,7 @@ export type PaymentMethod =
29
29
  }
30
30
  | {
31
31
  type: "fiat";
32
- payerWallet: Wallet;
32
+ payerWallet?: Wallet;
33
33
  currency: string;
34
34
  onramp: "stripe" | "coinbase" | "transak";
35
35
  };
@@ -369,8 +369,7 @@ export function BridgeOrchestrator({
369
369
 
370
370
  {state.value === "execute" &&
371
371
  state.context.quote &&
372
- state.context.request &&
373
- state.context.selectedPaymentMethod?.payerWallet && (
372
+ state.context.request && (
374
373
  <StepRunner
375
374
  autoStart={true}
376
375
  client={client}
@@ -193,6 +193,11 @@ export type BuyWidgetProps = {
193
193
  * Custom label for the main action button.
194
194
  */
195
195
  buttonLabel?: string;
196
+
197
+ /**
198
+ * The receiver address for the purchased funds.
199
+ */
200
+ receiverAddress?: Address;
196
201
  };
197
202
 
198
203
  // Enhanced UIOptions to handle unsupported token state
@@ -455,7 +460,7 @@ export function BuyWidget(props: BuyWidgetProps) {
455
460
  paymentMethods={props.paymentMethods}
456
461
  presetOptions={props.presetOptions}
457
462
  purchaseData={props.purchaseData}
458
- receiverAddress={undefined}
463
+ receiverAddress={props.receiverAddress}
459
464
  uiOptions={bridgeDataQuery.data.data}
460
465
  showThirdwebBranding={props.showThirdwebBranding}
461
466
  />
@@ -133,6 +133,7 @@ export function QuoteLoader({
133
133
  toChainId: destinationToken.chainId,
134
134
  toToken: destinationToken.address,
135
135
  });
136
+ return true;
136
137
  },
137
138
  queryKey: ["loading_quote", paymentMethod.type],
138
139
  });
@@ -30,7 +30,7 @@ interface StepRunnerProps {
30
30
  /**
31
31
  * Wallet instance for executing transactions
32
32
  */
33
- wallet: Wallet;
33
+ wallet?: Wallet;
34
34
 
35
35
  /**
36
36
  * Thirdweb client for API calls
@@ -101,6 +101,7 @@ export function PaymentDetails({
101
101
  : preparedQuote.intent.destinationTokenAddress,
102
102
  });
103
103
  }
104
+ return true;
104
105
  },
105
106
  queryKey: ["payment_details", preparedQuote.type],
106
107
  });
@@ -239,7 +240,7 @@ export function PaymentDetails({
239
240
  receiver={preparedQuote.intent.receiver}
240
241
  sender={
241
242
  preparedQuote.intent.sender ||
242
- paymentMethod.payerWallet.getAccount()?.address
243
+ paymentMethod.payerWallet?.getAccount()?.address
243
244
  }
244
245
  toAmount={displayData.destinationAmount}
245
246
  toToken={displayData.destinationToken}
@@ -196,15 +196,17 @@ export function PaymentSelection({
196
196
  const handleOnrampProviderSelected = (
197
197
  provider: "coinbase" | "stripe" | "transak",
198
198
  ) => {
199
- if (!payerWallet) {
200
- onError(new Error("No wallet available for fiat payment"));
199
+ const recipientAddress =
200
+ receiverAddress || payerWallet?.getAccount()?.address;
201
+ if (!recipientAddress) {
202
+ onError(new Error("No recipient address available for fiat payment"));
201
203
  return;
202
204
  }
203
205
 
204
206
  const fiatPaymentMethod: PaymentMethod = {
205
- currency: "USD",
207
+ currency: currency || "USD",
206
208
  onramp: provider,
207
- payerWallet, // Default to USD for now
209
+ payerWallet,
208
210
  type: "fiat",
209
211
  };
210
212
  handlePaymentMethodSelected(fiatPaymentMethod);
@@ -307,7 +309,9 @@ export function PaymentSelection({
307
309
  country={country}
308
310
  client={client}
309
311
  onProviderSelected={handleOnrampProviderSelected}
310
- toAddress={receiverAddress || ""}
312
+ toAddress={
313
+ receiverAddress || payerWallet?.getAccount()?.address || ""
314
+ }
311
315
  toAmount={destinationAmount}
312
316
  toChainId={destinationToken.chainId}
313
317
  toTokenAddress={destinationToken.address}
@@ -36,6 +36,7 @@ export function FiatValue(
36
36
  props.chain.id,
37
37
  getTokenAddress(props.token),
38
38
  deferredTokenAmount,
39
+ props.currency,
39
40
  ],
40
41
  });
41
42
 
package/src/version.ts CHANGED
@@ -1 +1 @@
1
- export const version = "5.105.46";
1
+ export const version = "5.105.48";