thirdweb 5.105.20 → 5.105.22

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 (160) hide show
  1. package/dist/cjs/extensions/erc1155/read/getOwnedNFTs.js +1 -0
  2. package/dist/cjs/extensions/erc1155/read/getOwnedNFTs.js.map +1 -1
  3. package/dist/cjs/extensions/erc721/read/getOwnedNFTs.js +1 -0
  4. package/dist/cjs/extensions/erc721/read/getOwnedNFTs.js.map +1 -1
  5. package/dist/cjs/insight/get-nfts.js +3 -3
  6. package/dist/cjs/insight/get-nfts.js.map +1 -1
  7. package/dist/cjs/insight/get-tokens.js +3 -2
  8. package/dist/cjs/insight/get-tokens.js.map +1 -1
  9. package/dist/cjs/react/core/hooks/wallets/useConnect.js +10 -1
  10. package/dist/cjs/react/core/hooks/wallets/useConnect.js.map +1 -1
  11. package/dist/cjs/transaction/actions/estimate-gas.js +3 -24
  12. package/dist/cjs/transaction/actions/estimate-gas.js.map +1 -1
  13. package/dist/cjs/version.js +1 -1
  14. package/dist/cjs/wallets/coinbase/coinbase-web.js +56 -0
  15. package/dist/cjs/wallets/coinbase/coinbase-web.js.map +1 -1
  16. package/dist/cjs/wallets/create-wallet.js +62 -13
  17. package/dist/cjs/wallets/create-wallet.js.map +1 -1
  18. package/dist/cjs/wallets/eip5792/get-calls-status.js +40 -63
  19. package/dist/cjs/wallets/eip5792/get-calls-status.js.map +1 -1
  20. package/dist/cjs/wallets/eip5792/get-capabilities.js +14 -49
  21. package/dist/cjs/wallets/eip5792/get-capabilities.js.map +1 -1
  22. package/dist/cjs/wallets/eip5792/send-calls.js +34 -48
  23. package/dist/cjs/wallets/eip5792/send-calls.js.map +1 -1
  24. package/dist/cjs/wallets/in-app/core/{eip5972 → eip5792}/in-app-wallet-calls.js +1 -5
  25. package/dist/cjs/wallets/in-app/core/eip5792/in-app-wallet-calls.js.map +1 -0
  26. package/dist/cjs/wallets/in-app/core/eip7702/minimal-account.js +650 -5
  27. package/dist/cjs/wallets/in-app/core/eip7702/minimal-account.js.map +1 -1
  28. package/dist/cjs/wallets/in-app/core/wallet/enclave-wallet.js +32 -1
  29. package/dist/cjs/wallets/in-app/core/wallet/enclave-wallet.js.map +1 -1
  30. package/dist/cjs/wallets/in-app/core/wallet/in-app-core.js +3 -3
  31. package/dist/cjs/wallets/in-app/core/wallet/in-app-core.js.map +1 -1
  32. package/dist/cjs/wallets/in-app/web/in-app.js +18 -0
  33. package/dist/cjs/wallets/in-app/web/in-app.js.map +1 -1
  34. package/dist/cjs/wallets/injected/index.js +55 -0
  35. package/dist/cjs/wallets/injected/index.js.map +1 -1
  36. package/dist/cjs/wallets/smart/index.js +63 -2
  37. package/dist/cjs/wallets/smart/index.js.map +1 -1
  38. package/dist/cjs/wallets/smart/smart-wallet.js +1 -1
  39. package/dist/cjs/wallets/smart/smart-wallet.js.map +1 -1
  40. package/dist/cjs/wallets/wallet-connect/qr-overlay.js +231 -0
  41. package/dist/cjs/wallets/wallet-connect/qr-overlay.js.map +1 -0
  42. package/dist/esm/extensions/erc1155/read/getOwnedNFTs.js +1 -0
  43. package/dist/esm/extensions/erc1155/read/getOwnedNFTs.js.map +1 -1
  44. package/dist/esm/extensions/erc721/read/getOwnedNFTs.js +1 -0
  45. package/dist/esm/extensions/erc721/read/getOwnedNFTs.js.map +1 -1
  46. package/dist/esm/insight/get-nfts.js +3 -3
  47. package/dist/esm/insight/get-nfts.js.map +1 -1
  48. package/dist/esm/insight/get-tokens.js +3 -2
  49. package/dist/esm/insight/get-tokens.js.map +1 -1
  50. package/dist/esm/react/core/hooks/wallets/useConnect.js +10 -1
  51. package/dist/esm/react/core/hooks/wallets/useConnect.js.map +1 -1
  52. package/dist/esm/transaction/actions/estimate-gas.js +3 -24
  53. package/dist/esm/transaction/actions/estimate-gas.js.map +1 -1
  54. package/dist/esm/version.js +1 -1
  55. package/dist/esm/wallets/coinbase/coinbase-web.js +56 -0
  56. package/dist/esm/wallets/coinbase/coinbase-web.js.map +1 -1
  57. package/dist/esm/wallets/create-wallet.js +62 -13
  58. package/dist/esm/wallets/create-wallet.js.map +1 -1
  59. package/dist/esm/wallets/eip5792/get-calls-status.js +39 -63
  60. package/dist/esm/wallets/eip5792/get-calls-status.js.map +1 -1
  61. package/dist/esm/wallets/eip5792/get-capabilities.js +13 -49
  62. package/dist/esm/wallets/eip5792/get-capabilities.js.map +1 -1
  63. package/dist/esm/wallets/eip5792/send-calls.js +33 -48
  64. package/dist/esm/wallets/eip5792/send-calls.js.map +1 -1
  65. package/dist/esm/wallets/in-app/core/{eip5972 → eip5792}/in-app-wallet-calls.js +1 -5
  66. package/dist/esm/wallets/in-app/core/eip5792/in-app-wallet-calls.js.map +1 -0
  67. package/dist/esm/wallets/in-app/core/eip7702/minimal-account.js +650 -5
  68. package/dist/esm/wallets/in-app/core/eip7702/minimal-account.js.map +1 -1
  69. package/dist/esm/wallets/in-app/core/wallet/enclave-wallet.js +32 -1
  70. package/dist/esm/wallets/in-app/core/wallet/enclave-wallet.js.map +1 -1
  71. package/dist/esm/wallets/in-app/core/wallet/in-app-core.js +3 -3
  72. package/dist/esm/wallets/in-app/core/wallet/in-app-core.js.map +1 -1
  73. package/dist/esm/wallets/in-app/web/in-app.js +18 -0
  74. package/dist/esm/wallets/in-app/web/in-app.js.map +1 -1
  75. package/dist/esm/wallets/injected/index.js +56 -1
  76. package/dist/esm/wallets/injected/index.js.map +1 -1
  77. package/dist/esm/wallets/smart/index.js +63 -2
  78. package/dist/esm/wallets/smart/index.js.map +1 -1
  79. package/dist/esm/wallets/smart/smart-wallet.js +1 -1
  80. package/dist/esm/wallets/smart/smart-wallet.js.map +1 -1
  81. package/dist/esm/wallets/wallet-connect/qr-overlay.js +228 -0
  82. package/dist/esm/wallets/wallet-connect/qr-overlay.js.map +1 -0
  83. package/dist/types/bridge/Webhook.d.ts +2 -2
  84. package/dist/types/insight/get-nfts.d.ts +1 -0
  85. package/dist/types/insight/get-nfts.d.ts.map +1 -1
  86. package/dist/types/insight/get-tokens.d.ts +1 -0
  87. package/dist/types/insight/get-tokens.d.ts.map +1 -1
  88. package/dist/types/react/core/hooks/wallets/useConnect.d.ts +1 -0
  89. package/dist/types/react/core/hooks/wallets/useConnect.d.ts.map +1 -1
  90. package/dist/types/react/core/hooks/wallets/useWaitForCallsReceipt.d.ts +1 -1
  91. package/dist/types/react/core/utils/storage.d.ts +1 -1
  92. package/dist/types/react/web/utils/storage.d.ts +1 -1
  93. package/dist/types/transaction/actions/estimate-gas.d.ts.map +1 -1
  94. package/dist/types/version.d.ts +1 -1
  95. package/dist/types/wallets/coinbase/coinbase-web.d.ts.map +1 -1
  96. package/dist/types/wallets/create-wallet.d.ts.map +1 -1
  97. package/dist/types/wallets/eip5792/get-calls-status.d.ts +2 -1
  98. package/dist/types/wallets/eip5792/get-calls-status.d.ts.map +1 -1
  99. package/dist/types/wallets/eip5792/get-capabilities.d.ts +1 -0
  100. package/dist/types/wallets/eip5792/get-capabilities.d.ts.map +1 -1
  101. package/dist/types/wallets/eip5792/send-calls.d.ts +6 -1
  102. package/dist/types/wallets/eip5792/send-calls.d.ts.map +1 -1
  103. package/dist/types/wallets/in-app/core/{eip5972 → eip5792}/in-app-wallet-calls.d.ts +3 -2
  104. package/dist/types/wallets/in-app/core/eip5792/in-app-wallet-calls.d.ts.map +1 -0
  105. package/dist/types/wallets/in-app/core/eip7702/minimal-account.d.ts.map +1 -1
  106. package/dist/types/wallets/in-app/core/wallet/enclave-wallet.d.ts.map +1 -1
  107. package/dist/types/wallets/in-app/web/in-app.d.ts +18 -0
  108. package/dist/types/wallets/in-app/web/in-app.d.ts.map +1 -1
  109. package/dist/types/wallets/injected/index.d.ts.map +1 -1
  110. package/dist/types/wallets/interfaces/wallet.d.ts +22 -0
  111. package/dist/types/wallets/interfaces/wallet.d.ts.map +1 -1
  112. package/dist/types/wallets/smart/index.d.ts.map +1 -1
  113. package/dist/types/wallets/wallet-connect/qr-overlay.d.ts +58 -0
  114. package/dist/types/wallets/wallet-connect/qr-overlay.d.ts.map +1 -0
  115. package/dist/types/wallets/wallet-connect/types.d.ts +13 -0
  116. package/dist/types/wallets/wallet-connect/types.d.ts.map +1 -1
  117. package/package.json +4 -2
  118. package/src/extensions/erc1155/read/getOwnedNFTs.ts +1 -0
  119. package/src/extensions/erc721/read/getOwnedNFTs.ts +1 -0
  120. package/src/insight/get-nfts.ts +4 -3
  121. package/src/insight/get-tokens.ts +4 -2
  122. package/src/react/core/hooks/wallets/useConnect.ts +11 -1
  123. package/src/transaction/actions/estimate-gas.ts +14 -42
  124. package/src/version.ts +1 -1
  125. package/src/wallets/coinbase/coinbase-web.ts +66 -0
  126. package/src/wallets/create-wallet.ts +85 -24
  127. package/src/wallets/eip5792/get-calls-status.test.ts +156 -146
  128. package/src/wallets/eip5792/get-calls-status.ts +44 -73
  129. package/src/wallets/eip5792/get-capabilities.test.ts +216 -205
  130. package/src/wallets/eip5792/get-capabilities.ts +23 -64
  131. package/src/wallets/eip5792/send-calls.test.ts +183 -189
  132. package/src/wallets/eip5792/send-calls.ts +53 -71
  133. package/src/wallets/in-app/core/{eip5972 → eip5792}/in-app-wallet-calls.ts +4 -8
  134. package/src/wallets/in-app/core/eip7702/minimal-account.ts +666 -5
  135. package/src/wallets/in-app/core/wallet/enclave-wallet.ts +36 -1
  136. package/src/wallets/in-app/core/wallet/in-app-core.ts +4 -4
  137. package/src/wallets/in-app/web/in-app.ts +18 -0
  138. package/src/wallets/injected/index.ts +63 -0
  139. package/src/wallets/interfaces/wallet.ts +31 -0
  140. package/src/wallets/smart/index.ts +71 -3
  141. package/src/wallets/smart/smart-wallet.ts +1 -1
  142. package/src/wallets/wallet-connect/qr-overlay.ts +322 -0
  143. package/src/wallets/wallet-connect/types.ts +13 -0
  144. package/dist/cjs/wallets/in-app/core/eip5972/in-app-wallet-calls.js.map +0 -1
  145. package/dist/cjs/wallets/in-app/core/eip5972/in-app-wallet-capabilities.js +0 -41
  146. package/dist/cjs/wallets/in-app/core/eip5972/in-app-wallet-capabilities.js.map +0 -1
  147. package/dist/cjs/wallets/smart/lib/smart-wallet-capabilities.js +0 -30
  148. package/dist/cjs/wallets/smart/lib/smart-wallet-capabilities.js.map +0 -1
  149. package/dist/esm/wallets/in-app/core/eip5972/in-app-wallet-calls.js.map +0 -1
  150. package/dist/esm/wallets/in-app/core/eip5972/in-app-wallet-capabilities.js +0 -38
  151. package/dist/esm/wallets/in-app/core/eip5972/in-app-wallet-capabilities.js.map +0 -1
  152. package/dist/esm/wallets/smart/lib/smart-wallet-capabilities.js +0 -27
  153. package/dist/esm/wallets/smart/lib/smart-wallet-capabilities.js.map +0 -1
  154. package/dist/types/wallets/in-app/core/eip5972/in-app-wallet-calls.d.ts.map +0 -1
  155. package/dist/types/wallets/in-app/core/eip5972/in-app-wallet-capabilities.d.ts +0 -20
  156. package/dist/types/wallets/in-app/core/eip5972/in-app-wallet-capabilities.d.ts.map +0 -1
  157. package/dist/types/wallets/smart/lib/smart-wallet-capabilities.d.ts +0 -20
  158. package/dist/types/wallets/smart/lib/smart-wallet-capabilities.d.ts.map +0 -1
  159. package/src/wallets/in-app/core/eip5972/in-app-wallet-capabilities.ts +0 -47
  160. package/src/wallets/smart/lib/smart-wallet-capabilities.ts +0 -32
@@ -0,0 +1,58 @@
1
+ /**
2
+ * Vanilla JavaScript QR Code overlay utility for WalletConnect URIs
3
+ * Works in any browser context without requiring React or other frameworks
4
+ */
5
+ interface QROverlayOptions {
6
+ /**
7
+ * Custom styles to apply to the overlay
8
+ */
9
+ overlayStyles?: Partial<CSSStyleDeclaration>;
10
+ /**
11
+ * Custom styles to apply to the modal container
12
+ */
13
+ modalStyles?: Partial<CSSStyleDeclaration>;
14
+ /**
15
+ * QR code size in pixels
16
+ */
17
+ qrSize?: number;
18
+ /**
19
+ * Show close button
20
+ */
21
+ showCloseButton?: boolean;
22
+ /**
23
+ * Custom close button text
24
+ */
25
+ closeButtonText?: string;
26
+ /**
27
+ * Theme preference
28
+ */
29
+ theme?: "light" | "dark";
30
+ /**
31
+ * Custom container element to append the overlay to
32
+ */
33
+ container?: HTMLElement;
34
+ /**
35
+ * Callback called when user cancels the overlay (closes without connecting)
36
+ */
37
+ onCancel?: () => void;
38
+ }
39
+ export interface QROverlay {
40
+ /**
41
+ * Remove the overlay from the DOM
42
+ */
43
+ destroy: () => void;
44
+ /**
45
+ * Hide the overlay (without removing from DOM)
46
+ */
47
+ hide: () => void;
48
+ /**
49
+ * Show the overlay
50
+ */
51
+ show: () => void;
52
+ }
53
+ /**
54
+ * Creates a QR code overlay for the given WalletConnect URI
55
+ */
56
+ export declare function createQROverlay(uri: string, options?: QROverlayOptions): QROverlay;
57
+ export {};
58
+ //# sourceMappingURL=qr-overlay.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"qr-overlay.d.ts","sourceRoot":"","sources":["../../../../src/wallets/wallet-connect/qr-overlay.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,UAAU,gBAAgB;IACxB;;OAEG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC,mBAAmB,CAAC,CAAC;IAC7C;;OAEG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC,mBAAmB,CAAC,CAAC;IAC3C;;OAEG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;OAEG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B;;OAEG;IACH,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB;;OAEG;IACH,KAAK,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;IACzB;;OAEG;IACH,SAAS,CAAC,EAAE,WAAW,CAAC;IACxB;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;CACvB;AAED,MAAM,WAAW,SAAS;IACxB;;OAEG;IACH,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB;;OAEG;IACH,IAAI,EAAE,MAAM,IAAI,CAAC;IACjB;;OAEG;IACH,IAAI,EAAE,MAAM,IAAI,CAAC;CAClB;AAED;;GAEG;AACH,wBAAgB,eAAe,CAC7B,GAAG,EAAE,MAAM,EACX,OAAO,GAAE,gBAAqB,GAC7B,SAAS,CA0OX"}
@@ -151,6 +151,19 @@ export type WCConnectOptions = {
151
151
  * ```
152
152
  */
153
153
  onDisplayUri?: (_uri: string) => void;
154
+ /**
155
+ * Callback that gets called when the user cancels the connection process (e.g., closes the QR modal).
156
+ * This is only called for user-initiated cancellations, not for programmatic cleanup.
157
+ *
158
+ * ```tsx
159
+ * await wallet.connect({
160
+ * onCancel: () => {
161
+ * console.log("User cancelled wallet connection");
162
+ * }
163
+ * })
164
+ * ```
165
+ */
166
+ onCancel?: () => void;
154
167
  }>;
155
168
  };
156
169
  export type WCAutoConnectOptions = {
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/wallets/wallet-connect/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AAC1D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE/C,KAAK,+BAA+B,GAAG;IACrC,SAAS,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;IAC7B,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACxC,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC;IAC3C,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,4BAA4B,CAAC,EAAE,MAAM,EAAE,CAAC;IACxC,yBAAyB,CAAC,EAAE,MAAM,EAAE,CAAC;IACrC,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC;IAC1C,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACvC,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG;IAChC;;;;;;OAMG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;;;;;;;;;;;;;OAeG;IACH,WAAW,CAAC,EAAE,WAAW,CAAC;CAC3B,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAC7B;;;;;;;;;;;;;;;;;;;;OAoBG;IACH,KAAK,CAAC,EAAE,KAAK,CAAC;IAEd;;;;;;;;;;;;;;OAcG;IACH,MAAM,EAAE,cAAc,CAAC;IAEvB,aAAa,CAAC,EAAE,QAAQ,CACtB,mBAAmB,GAAG;QACpB;;;;;;;;;;;;;;;;;;;;;;;;;WAyBG;QACH,cAAc,CAAC,EAAE,KAAK,EAAE,CAAC;QACzB;;;;;;;;;;;;;;;;;WAiBG;QACH,WAAW,CAAC,EAAE,OAAO,CAAC;QACtB;;WAEG;QACH,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB;;;WAGG;QACH,cAAc,CAAC,EAAE,+BAA+B,CAAC;QACjD;;;;;;;;;;;;;WAaG;QACH,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;KACvC,CACF,CAAC;CACH,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG;IACjC;;;;;;;;;;;;;;OAcG;IACH,MAAM,EAAE,cAAc,CAAC;IAEvB,kBAAkB,CAAC,EAAE,kBAAkB,CAAC;IAExC,KAAK,CAAC,EAAE,KAAK,CAAC;CACf,CAAC;AAEF,KAAK,kBAAkB,GAAG;IACxB,cAAc,CAAC,EAAE,KAAK,EAAE,CAAC;IACzB,KAAK,EAAE,KAAK,CAAC;IACb,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB,CAAC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/wallets/wallet-connect/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AAC1D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE/C,KAAK,+BAA+B,GAAG;IACrC,SAAS,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;IAC7B,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACxC,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC;IAC3C,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,4BAA4B,CAAC,EAAE,MAAM,EAAE,CAAC;IACxC,yBAAyB,CAAC,EAAE,MAAM,EAAE,CAAC;IACrC,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC;IAC1C,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACvC,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG;IAChC;;;;;;OAMG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;;;;;;;;;;;;;OAeG;IACH,WAAW,CAAC,EAAE,WAAW,CAAC;CAC3B,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAC7B;;;;;;;;;;;;;;;;;;;;OAoBG;IACH,KAAK,CAAC,EAAE,KAAK,CAAC;IAEd;;;;;;;;;;;;;;OAcG;IACH,MAAM,EAAE,cAAc,CAAC;IAEvB,aAAa,CAAC,EAAE,QAAQ,CACtB,mBAAmB,GAAG;QACpB;;;;;;;;;;;;;;;;;;;;;;;;;WAyBG;QACH,cAAc,CAAC,EAAE,KAAK,EAAE,CAAC;QACzB;;;;;;;;;;;;;;;;;WAiBG;QACH,WAAW,CAAC,EAAE,OAAO,CAAC;QACtB;;WAEG;QACH,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB;;;WAGG;QACH,cAAc,CAAC,EAAE,+BAA+B,CAAC;QACjD;;;;;;;;;;;;;WAaG;QACH,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;QACtC;;;;;;;;;;;WAWG;QACH,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;KACvB,CACF,CAAC;CACH,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG;IACjC;;;;;;;;;;;;;;OAcG;IACH,MAAM,EAAE,cAAc,CAAC;IAEvB,kBAAkB,CAAC,EAAE,kBAAkB,CAAC;IAExC,KAAK,CAAC,EAAE,KAAK,CAAC;CACf,CAAC;AAEF,KAAK,kBAAkB,GAAG;IACxB,cAAc,CAAC,EAAE,KAAK,EAAE,CAAC;IACzB,KAAK,EAAE,KAAK,CAAC;IACb,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB,CAAC"}
package/package.json CHANGED
@@ -34,12 +34,13 @@
34
34
  "ora": "8.2.0",
35
35
  "ox": "0.7.0",
36
36
  "prompts": "2.4.2",
37
+ "qrcode": "1.5.3",
37
38
  "toml": "3.0.0",
38
39
  "uqr": "0.1.2",
39
40
  "viem": "2.28.1",
40
41
  "zod": "3.25.75",
41
42
  "@thirdweb-dev/engine": "3.2.1",
42
- "@thirdweb-dev/insight": "1.1.0"
43
+ "@thirdweb-dev/insight": "1.1.1"
43
44
  },
44
45
  "devDependencies": {
45
46
  "@aws-sdk/client-kms": "3.592.0",
@@ -61,6 +62,7 @@
61
62
  "@testing-library/user-event": "^14.6.1",
62
63
  "@types/cross-spawn": "^6.0.6",
63
64
  "@types/prompts": "2.4.9",
65
+ "@types/qrcode": "1.5.5",
64
66
  "@types/react": "19.1.8",
65
67
  "@viem/anvil": "0.0.10",
66
68
  "@vitejs/plugin-react": "^4.6.0",
@@ -375,7 +377,7 @@
375
377
  }
376
378
  },
377
379
  "typings": "./dist/types/exports/thirdweb.d.ts",
378
- "version": "5.105.20",
380
+ "version": "5.105.22",
379
381
  "scripts": {
380
382
  "bench": "vitest -c ./test/vitest.config.ts bench",
381
383
  "bench:compare": "bun run ./benchmarks/run.ts",
@@ -62,6 +62,7 @@ async function getOwnedNFTsFromInsight(
62
62
  chains: [options.contract.chain],
63
63
  client: options.contract.client,
64
64
  ownerAddress: options.address,
65
+ contractAddress: options.contract.address,
65
66
  queryOptions: {
66
67
  limit,
67
68
  page,
@@ -78,6 +78,7 @@ async function getOwnedNFTsFromInsight(
78
78
  chains: [options.contract.chain],
79
79
  client: options.contract.client,
80
80
  ownerAddress: options.owner,
81
+ contractAddress: options.contract.address,
81
82
  queryOptions: {
82
83
  limit,
83
84
  page,
@@ -33,6 +33,7 @@ export async function getOwnedNFTs(args: {
33
33
  client: ThirdwebClient;
34
34
  chains: Chain[];
35
35
  ownerAddress: string;
36
+ contractAddress?: string;
36
37
  includeMetadata?: boolean;
37
38
  queryOptions?: Omit<GetV1NftsData["query"], "owner_address" | "chain">;
38
39
  }): Promise<(NFT & { quantityOwned: bigint })[]> {
@@ -50,8 +51,7 @@ export async function getOwnedNFTs(args: {
50
51
  import("viem"),
51
52
  ]);
52
53
 
53
- // TODO (insight): add support for contract address filters
54
- const { client, chains, ownerAddress, queryOptions } = args;
54
+ const { client, chains, ownerAddress, contractAddress, queryOptions } = args;
55
55
 
56
56
  await assertInsightEnabled(chains);
57
57
 
@@ -59,7 +59,8 @@ export async function getOwnedNFTs(args: {
59
59
  chain: chains.map((chain) => chain.id),
60
60
  // metadata: includeMetadata ? "true" : "false", TODO (insight): add support for this
61
61
  limit: 50,
62
- owner_address: ownerAddress,
62
+ owner_address: [ownerAddress],
63
+ contract_address: contractAddress ? [contractAddress] : undefined,
63
64
  };
64
65
 
65
66
  const result = await getV1Nfts({
@@ -26,6 +26,7 @@ export async function getOwnedTokens(args: {
26
26
  client: ThirdwebClient;
27
27
  chains: Chain[];
28
28
  ownerAddress: string;
29
+ tokenAddress?: string;
29
30
  queryOptions?: Omit<
30
31
  GetV1TokensData["query"],
31
32
  "owner_address" | "chain_id" | "chain"
@@ -45,7 +46,7 @@ export async function getOwnedTokens(args: {
45
46
  import("../utils/json.js"),
46
47
  ]);
47
48
 
48
- const { client, chains, ownerAddress, queryOptions } = args;
49
+ const { client, chains, ownerAddress, tokenAddress, queryOptions } = args;
49
50
 
50
51
  await assertInsightEnabled(chains);
51
52
 
@@ -55,7 +56,8 @@ export async function getOwnedTokens(args: {
55
56
  include_spam: "false",
56
57
  limit: 50,
57
58
  metadata: "true",
58
- owner_address: ownerAddress,
59
+ owner_address: [ownerAddress],
60
+ token_address: tokenAddress ? [tokenAddress] : undefined,
59
61
  };
60
62
 
61
63
  const result = await getV1Tokens({
@@ -79,5 +79,15 @@ export function useConnect(options?: ConnectManagerOptions) {
79
79
  [connect, options, setConnectionStatus],
80
80
  );
81
81
 
82
- return { connect: handleConnection, error, isConnecting } as const;
82
+ const cancelConnection = useCallback(() => {
83
+ setIsConnecting(false);
84
+ setConnectionStatus("disconnected");
85
+ }, [setConnectionStatus]);
86
+
87
+ return {
88
+ connect: handleConnection,
89
+ error,
90
+ isConnecting,
91
+ cancelConnection,
92
+ } as const;
83
93
  }
@@ -2,7 +2,6 @@ import * as ox__Hex from "ox/Hex";
2
2
  import { formatTransactionRequest } from "viem";
3
3
  import { roundUpGas } from "../../gas/op-gas-fee-reducer.js";
4
4
  import { getAddress } from "../../utils/address.js";
5
- import { hexToBytes } from "../../utils/encoding/to-bytes.js";
6
5
  import { resolvePromisedValue } from "../../utils/promise/resolve-promised-value.js";
7
6
  import type { Prettify } from "../../utils/type-utils.js";
8
7
  import type { Account } from "../../wallets/interfaces/wallet.js";
@@ -117,31 +116,20 @@ export async function estimateGas(
117
116
 
118
117
  const rpcRequest = getRpcClient(options.transaction);
119
118
  try {
120
- let gas = await eth_estimateGas(
121
- rpcRequest,
122
- formatTransactionRequest({
123
- authorizationList: authorizationList?.map((auth) => ({
124
- ...auth,
125
- contractAddress: getAddress(auth.address),
126
- nonce: Number(auth.nonce),
127
- r: ox__Hex.fromNumber(auth.r),
128
- s: ox__Hex.fromNumber(auth.s),
129
- })),
130
- data: encodedData,
131
- from: fromAddress ? getAddress(fromAddress) : undefined,
132
- to: toAddress ? getAddress(toAddress) : undefined,
133
- value,
134
- ...(authorizationList && authorizationList?.length > 0
135
- ? {
136
- gas:
137
- minGas(
138
- hexToBytes(encodedData),
139
- BigInt(authorizationList?.length ?? 0),
140
- ) + 100_000n,
141
- }
142
- : {}),
143
- }),
144
- );
119
+ const formattedTx = formatTransactionRequest({
120
+ authorizationList: authorizationList?.map((auth) => ({
121
+ ...auth,
122
+ contractAddress: getAddress(auth.address),
123
+ nonce: Number(auth.nonce),
124
+ r: ox__Hex.fromNumber(auth.r),
125
+ s: ox__Hex.fromNumber(auth.s),
126
+ })),
127
+ data: encodedData,
128
+ from: fromAddress ? getAddress(fromAddress) : undefined,
129
+ to: toAddress ? getAddress(toAddress) : undefined,
130
+ value,
131
+ });
132
+ let gas = await eth_estimateGas(rpcRequest, formattedTx);
145
133
 
146
134
  if (options.transaction.chain.experimental?.increaseZeroByteCount) {
147
135
  gas = roundUpGas(gas);
@@ -158,19 +146,3 @@ export async function estimateGas(
158
146
  cache.set(txWithFrom, promise);
159
147
  return promise;
160
148
  }
161
-
162
- // EIP-7623 + EIP-7702 floor calculation
163
- const TxGas = 21_000n;
164
- const TxCostFloorPerToken = 10n; // params.TxCostFloorPerToken
165
- const TxTokenPerNonZero = 4n; // params.TxTokenPerNonZeroByte
166
- const TxAuthTupleGas = 12_500n;
167
-
168
- function minGas(data: Uint8Array, authCount = 0n) {
169
- let nz = 0n;
170
- for (const b of data) if (b !== 0) nz++;
171
- const z = BigInt(data.length) - nz;
172
- const tokens = nz * TxTokenPerNonZero + z;
173
- const floor = TxGas + tokens * TxCostFloorPerToken;
174
- const intrinsic = TxGas + authCount * TxAuthTupleGas;
175
- return floor > intrinsic ? floor : intrinsic;
176
- }
package/src/version.ts CHANGED
@@ -1 +1 @@
1
- export const version = "5.105.20";
1
+ export const version = "5.105.22";
@@ -14,8 +14,16 @@ import {
14
14
  stringToHex,
15
15
  uint8ArrayToHex,
16
16
  } from "../../utils/encoding/hex.js";
17
+ import { stringify } from "../../utils/json.js";
17
18
  import { parseTypedData } from "../../utils/signatures/helpers/parse-typed-data.js";
18
19
  import { COINBASE } from "../constants.js";
20
+ import { toGetCallsStatusResponse } from "../eip5792/get-calls-status.js";
21
+ import { toGetCapabilitiesResult } from "../eip5792/get-capabilities.js";
22
+ import { toProviderCallParams } from "../eip5792/send-calls.js";
23
+ import type {
24
+ GetCallsStatusRawResponse,
25
+ WalletCapabilities,
26
+ } from "../eip5792/types.js";
19
27
  import type {
20
28
  Account,
21
29
  SendTransactionOption,
@@ -269,6 +277,64 @@ function createAccount({
269
277
  }
270
278
  return res;
271
279
  },
280
+ sendCalls: async (options) => {
281
+ try {
282
+ const { callParams, chain } = await toProviderCallParams(
283
+ options,
284
+ account,
285
+ );
286
+ const callId = await provider.request({
287
+ method: "wallet_sendCalls",
288
+ params: callParams,
289
+ });
290
+ if (callId && typeof callId === "object" && "id" in callId) {
291
+ return { chain, client, id: callId.id as string };
292
+ }
293
+ return { chain, client, id: callId as string };
294
+ } catch (error) {
295
+ if (/unsupport|not support/i.test((error as Error).message)) {
296
+ throw new Error(
297
+ `${COINBASE} errored calling wallet_sendCalls, with error: ${error instanceof Error ? error.message : stringify(error)}`,
298
+ );
299
+ }
300
+ throw error;
301
+ }
302
+ },
303
+ async getCallsStatus(options) {
304
+ try {
305
+ const rawResponse = (await provider.request({
306
+ method: "wallet_getCallsStatus",
307
+ params: [options.id],
308
+ })) as GetCallsStatusRawResponse;
309
+ return toGetCallsStatusResponse(rawResponse);
310
+ } catch (error) {
311
+ if (/unsupport|not support/i.test((error as Error).message)) {
312
+ throw new Error(
313
+ `${COINBASE} does not support wallet_getCallsStatus, reach out to them directly to request EIP-5792 support.`,
314
+ );
315
+ }
316
+ throw error;
317
+ }
318
+ },
319
+ async getCapabilities(options) {
320
+ const chainId = options.chainId;
321
+ try {
322
+ const result = (await provider.request({
323
+ method: "wallet_getCapabilities",
324
+ params: [getAddress(account.address)],
325
+ })) as Record<string, WalletCapabilities>;
326
+ return toGetCapabilitiesResult(result, chainId);
327
+ } catch (error: unknown) {
328
+ if (
329
+ /unsupport|not support|not available/i.test((error as Error).message)
330
+ ) {
331
+ return {
332
+ message: `${COINBASE} does not support wallet_getCapabilities, reach out to them directly to request EIP-5792 support.`,
333
+ };
334
+ }
335
+ throw error;
336
+ }
337
+ },
272
338
  };
273
339
 
274
340
  return account;
@@ -17,6 +17,7 @@ import { inAppWallet } from "./in-app/web/in-app.js";
17
17
  import { getInjectedProvider } from "./injected/index.js";
18
18
  import type { Account, Wallet } from "./interfaces/wallet.js";
19
19
  import { smartWallet } from "./smart/smart-wallet.js";
20
+ import type { QROverlay } from "./wallet-connect/qr-overlay.js";
20
21
  import type { WCConnectOptions } from "./wallet-connect/types.js";
21
22
  import { createWalletEmitter } from "./wallet-emitter.js";
22
23
  import type {
@@ -299,30 +300,90 @@ export function createWallet<const ID extends WalletId>(
299
300
  "./wallet-connect/controller.js"
300
301
  );
301
302
 
302
- const [
303
- connectedAccount,
304
- connectedChain,
305
- doDisconnect,
306
- doSwitchChain,
307
- ] = await connectWC(
308
- wcOptions,
309
- emitter,
310
- wallet.id as WCSupportedWalletIds | "walletConnect",
311
- webLocalStorage,
312
- sessionHandler,
313
- );
314
- // set the states
315
- account = connectedAccount;
316
- chain = connectedChain;
317
- handleDisconnect = doDisconnect;
318
- handleSwitchChain = doSwitchChain;
319
- trackConnect({
320
- chainId: chain.id,
321
- client: wcOptions.client,
322
- walletAddress: account.address,
323
- walletType: id,
324
- });
325
- return account;
303
+ let qrOverlay: QROverlay | undefined;
304
+
305
+ try {
306
+ const [
307
+ connectedAccount,
308
+ connectedChain,
309
+ doDisconnect,
310
+ doSwitchChain,
311
+ ] = await connectWC(
312
+ {
313
+ ...wcOptions,
314
+ walletConnect: {
315
+ ...wcOptions.walletConnect,
316
+ onDisplayUri: wcOptions.walletConnect?.showQrModal
317
+ ? async (uri) => {
318
+ // Check if we're in a browser environment
319
+ if (
320
+ typeof window !== "undefined" &&
321
+ typeof document !== "undefined"
322
+ ) {
323
+ try {
324
+ const { createQROverlay } = await import(
325
+ "./wallet-connect/qr-overlay.js"
326
+ );
327
+
328
+ // Clean up any existing overlay
329
+ if (qrOverlay) {
330
+ qrOverlay.destroy();
331
+ }
332
+
333
+ // Create new QR overlay
334
+ qrOverlay = createQROverlay(uri, {
335
+ theme:
336
+ wcOptions.walletConnect?.qrModalOptions
337
+ ?.themeMode ?? "dark",
338
+ qrSize: 280,
339
+ showCloseButton: true,
340
+ onCancel: () => {
341
+ wcOptions.walletConnect?.onCancel?.();
342
+ },
343
+ });
344
+ } catch (error) {
345
+ console.error(
346
+ "Failed to create QR overlay:",
347
+ error,
348
+ );
349
+ }
350
+ }
351
+ }
352
+ : undefined,
353
+ },
354
+ },
355
+ emitter,
356
+ wallet.id as WCSupportedWalletIds | "walletConnect",
357
+ webLocalStorage,
358
+ sessionHandler,
359
+ );
360
+
361
+ // Clean up QR overlay on successful connection
362
+ if (qrOverlay) {
363
+ qrOverlay.destroy();
364
+ qrOverlay = undefined;
365
+ }
366
+
367
+ // set the states
368
+ account = connectedAccount;
369
+ chain = connectedChain;
370
+ handleDisconnect = doDisconnect;
371
+ handleSwitchChain = doSwitchChain;
372
+ trackConnect({
373
+ chainId: chain.id,
374
+ client: wcOptions.client,
375
+ walletAddress: account.address,
376
+ walletType: id,
377
+ });
378
+ return account;
379
+ } catch (error) {
380
+ // Clean up QR overlay on connection error
381
+ if (qrOverlay) {
382
+ qrOverlay.destroy();
383
+ qrOverlay = undefined;
384
+ }
385
+ throw error;
386
+ }
326
387
  }
327
388
 
328
389
  if (id === "walletConnect") {