thirdweb 5.105.25 → 5.105.26-nightly-b86d520f3c05c4c3741d9f3071f40d13cebe24dd-20250801000425

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 (49) hide show
  1. package/dist/cjs/bridge/Token.js +15 -2
  2. package/dist/cjs/bridge/Token.js.map +1 -1
  3. package/dist/cjs/react/core/hooks/contract/useContractEvents.js +1 -1
  4. package/dist/cjs/react/core/hooks/contract/useContractEvents.js.map +1 -1
  5. package/dist/cjs/utils/abi/decodeError.js +6 -1
  6. package/dist/cjs/utils/abi/decodeError.js.map +1 -1
  7. package/dist/cjs/utils/abi/decodeFunctionData.js +6 -1
  8. package/dist/cjs/utils/abi/decodeFunctionData.js.map +1 -1
  9. package/dist/cjs/utils/abi/decodeFunctionResult.js +6 -1
  10. package/dist/cjs/utils/abi/decodeFunctionResult.js.map +1 -1
  11. package/dist/cjs/version.js +1 -1
  12. package/dist/cjs/version.js.map +1 -1
  13. package/dist/cjs/wallets/wallet-connect/controller.js +69 -26
  14. package/dist/cjs/wallets/wallet-connect/controller.js.map +1 -1
  15. package/dist/esm/bridge/Token.js +15 -2
  16. package/dist/esm/bridge/Token.js.map +1 -1
  17. package/dist/esm/react/core/hooks/contract/useContractEvents.js +1 -1
  18. package/dist/esm/react/core/hooks/contract/useContractEvents.js.map +1 -1
  19. package/dist/esm/utils/abi/decodeError.js +6 -1
  20. package/dist/esm/utils/abi/decodeError.js.map +1 -1
  21. package/dist/esm/utils/abi/decodeFunctionData.js +6 -1
  22. package/dist/esm/utils/abi/decodeFunctionData.js.map +1 -1
  23. package/dist/esm/utils/abi/decodeFunctionResult.js +6 -1
  24. package/dist/esm/utils/abi/decodeFunctionResult.js.map +1 -1
  25. package/dist/esm/version.js +1 -1
  26. package/dist/esm/version.js.map +1 -1
  27. package/dist/esm/wallets/wallet-connect/controller.js +69 -26
  28. package/dist/esm/wallets/wallet-connect/controller.js.map +1 -1
  29. package/dist/types/bridge/Token.d.ts +15 -2
  30. package/dist/types/bridge/Token.d.ts.map +1 -1
  31. package/dist/types/utils/abi/decodeError.d.ts.map +1 -1
  32. package/dist/types/utils/abi/decodeFunctionData.d.ts +1 -2
  33. package/dist/types/utils/abi/decodeFunctionData.d.ts.map +1 -1
  34. package/dist/types/utils/abi/decodeFunctionResult.d.ts +1 -2
  35. package/dist/types/utils/abi/decodeFunctionResult.d.ts.map +1 -1
  36. package/dist/types/version.d.ts +1 -1
  37. package/dist/types/version.d.ts.map +1 -1
  38. package/dist/types/wallets/wallet-connect/controller.d.ts +4 -3
  39. package/dist/types/wallets/wallet-connect/controller.d.ts.map +1 -1
  40. package/package.json +3 -3
  41. package/src/bridge/Token.ts +15 -2
  42. package/src/react/core/hooks/contract/useContractEvents.ts +1 -1
  43. package/src/react/web/ui/MediaRenderer/MediaRenderer.test.tsx +1 -1
  44. package/src/utils/abi/decodeError.ts +8 -1
  45. package/src/utils/abi/decodeFunctionData.test.ts +25 -0
  46. package/src/utils/abi/decodeFunctionData.ts +9 -1
  47. package/src/utils/abi/decodeFunctionResult.ts +11 -1
  48. package/src/version.ts +1 -1
  49. package/src/wallets/wallet-connect/controller.ts +96 -19
@@ -1,4 +1,7 @@
1
- import type { UniversalProvider } from "@walletconnect/universal-provider";
1
+ import type {
2
+ RequestArguments,
3
+ UniversalProvider,
4
+ } from "@walletconnect/universal-provider";
2
5
  import type { Address } from "abitype";
3
6
  import {
4
7
  getTypesForEIP712Domain,
@@ -39,6 +42,7 @@ import type { DisconnectFn, SwitchChainFn } from "../types.js";
39
42
  import { getDefaultAppMetadata } from "../utils/defaultDappMetadata.js";
40
43
  import { normalizeChainId } from "../utils/normalizeChainId.js";
41
44
  import type { WalletEmitter } from "../wallet-emitter.js";
45
+ import type { WalletInfo } from "../wallet-info.js";
42
46
  import type { WalletId } from "../wallet-types.js";
43
47
  import { DEFAULT_PROJECT_ID, NAMESPACE } from "./constants.js";
44
48
  import type { WCAutoConnectOptions, WCConnectOptions } from "./types.js";
@@ -78,16 +82,16 @@ export async function connectWC(
78
82
  emitter: WalletEmitter<WCSupportedWalletIds>,
79
83
  walletId: WCSupportedWalletIds | "walletConnect",
80
84
  storage: AsyncStorage,
81
- sessionHandler?: (uri: string) => void,
85
+ sessionHandler?: (uri: string) => void | Promise<void>,
82
86
  ): Promise<ReturnType<typeof onConnect>> {
83
87
  const provider = await initProvider(options, walletId, sessionHandler);
84
88
  const wcOptions = options.walletConnect;
85
89
 
86
90
  let { onDisplayUri } = wcOptions || {};
91
+ const walletInfo = await getWalletInfo(walletId);
87
92
 
88
93
  // use default sessionHandler unless onDisplayUri is explicitly provided
89
94
  if (!onDisplayUri && sessionHandler) {
90
- const walletInfo = await getWalletInfo(walletId);
91
95
  const deeplinkHandler = (uri: string) => {
92
96
  const appUrl = walletInfo.mobile.native || walletInfo.mobile.universal;
93
97
  if (!appUrl) {
@@ -185,7 +189,16 @@ export async function connectWC(
185
189
  provider.events.removeListener("display_uri", wcOptions.onDisplayUri);
186
190
  }
187
191
 
188
- return onConnect(address, chain, provider, emitter, storage, options.client);
192
+ return onConnect(
193
+ address,
194
+ chain,
195
+ provider,
196
+ emitter,
197
+ storage,
198
+ options.client,
199
+ walletInfo,
200
+ sessionHandler,
201
+ );
189
202
  }
190
203
 
191
204
  /**
@@ -197,12 +210,14 @@ export async function autoConnectWC(
197
210
  emitter: WalletEmitter<WCSupportedWalletIds>,
198
211
  walletId: WCSupportedWalletIds | "walletConnect",
199
212
  storage: AsyncStorage,
200
- sessionHandler?: (uri: string) => void,
213
+ sessionHandler?: (uri: string) => void | Promise<void>,
201
214
  ): Promise<ReturnType<typeof onConnect>> {
202
215
  const savedConnectParams: SavedConnectParams | null = storage
203
216
  ? await getSavedConnectParamsFromStorage(storage, walletId)
204
217
  : null;
205
218
 
219
+ const walletInfo = await getWalletInfo(walletId);
220
+
206
221
  const provider = await initProvider(
207
222
  savedConnectParams
208
223
  ? {
@@ -243,7 +258,16 @@ export async function autoConnectWC(
243
258
  ? options.chain
244
259
  : getCachedChain(providerChainId);
245
260
 
246
- return onConnect(address, chain, provider, emitter, storage, options.client);
261
+ return onConnect(
262
+ address,
263
+ chain,
264
+ provider,
265
+ emitter,
266
+ storage,
267
+ options.client,
268
+ walletInfo,
269
+ sessionHandler,
270
+ );
247
271
  }
248
272
 
249
273
  // Connection utils -----------------------------------------------------------------------------------------------
@@ -284,6 +308,10 @@ async function initProvider(
284
308
  ],
285
309
  name: wcOptions?.appMetadata?.name || getDefaultAppMetadata().name,
286
310
  url: wcOptions?.appMetadata?.url || getDefaultAppMetadata().url,
311
+ redirect: {
312
+ native: walletInfo.mobile.native || undefined,
313
+ universal: walletInfo.mobile.universal || undefined,
314
+ },
287
315
  },
288
316
  projectId: wcOptions?.projectId || DEFAULT_PROJECT_ID,
289
317
  });
@@ -321,17 +349,22 @@ function createAccount({
321
349
  address,
322
350
  client,
323
351
  chain,
352
+ sessionRequestHandler,
353
+ walletInfo,
324
354
  }: {
325
355
  provider: WCProvider;
326
356
  address: string;
327
357
  client: ThirdwebClient;
328
358
  chain: Chain;
359
+ sessionRequestHandler?: (uri: string) => void | Promise<void>;
360
+ walletInfo: WalletInfo;
329
361
  }) {
330
362
  const account: Account = {
331
363
  address: getAddress(address),
332
364
  async sendTransaction(tx: SendTransactionOption) {
333
- const transactionHash = (await provider.request(
334
- {
365
+ const transactionHash = (await requestAndOpenWallet({
366
+ provider,
367
+ payload: {
335
368
  method: "eth_sendTransaction",
336
369
  params: [
337
370
  {
@@ -343,8 +376,10 @@ function createAccount({
343
376
  },
344
377
  ],
345
378
  },
346
- `eip155:${tx.chainId}`,
347
- )) as Hex;
379
+ chain: `eip155:${tx.chainId}`,
380
+ walletInfo,
381
+ sessionRequestHandler,
382
+ })) as Hex;
348
383
 
349
384
  trackTransaction({
350
385
  chainId: tx.chainId,
@@ -370,13 +405,16 @@ function createAccount({
370
405
  }
371
406
  return message.raw;
372
407
  })();
373
- return provider.request(
374
- {
408
+ return requestAndOpenWallet({
409
+ provider,
410
+ payload: {
375
411
  method: "personal_sign",
376
412
  params: [messageToSign, this.address],
377
413
  },
378
- `eip155:${chain.id}`,
379
- );
414
+ chain: `eip155:${chain.id}`,
415
+ walletInfo,
416
+ sessionRequestHandler,
417
+ });
380
418
  },
381
419
  async signTypedData(_data) {
382
420
  const data = parseTypedData(_data);
@@ -399,19 +437,47 @@ function createAccount({
399
437
  types,
400
438
  });
401
439
 
402
- return await provider.request(
403
- {
440
+ return await requestAndOpenWallet({
441
+ provider,
442
+ payload: {
404
443
  method: "eth_signTypedData_v4",
405
444
  params: [this.address, typedData],
406
445
  },
407
- `eip155:${chain.id}`,
408
- );
446
+ chain: `eip155:${chain.id}`,
447
+ walletInfo,
448
+ sessionRequestHandler,
449
+ });
409
450
  },
410
451
  };
411
452
 
412
453
  return account;
413
454
  }
414
455
 
456
+ async function requestAndOpenWallet(args: {
457
+ provider: WCProvider;
458
+ payload: RequestArguments;
459
+ chain?: string;
460
+ walletInfo: WalletInfo;
461
+ sessionRequestHandler?: (uri: string) => void | Promise<void>;
462
+ }) {
463
+ const { provider, payload, chain, walletInfo, sessionRequestHandler } = args;
464
+ const resultPromise: Promise<`0x${string}`> = provider.request(
465
+ payload,
466
+ chain,
467
+ );
468
+
469
+ const walletLinkToOpen =
470
+ provider.session?.peer?.metadata?.redirect?.native ||
471
+ walletInfo.mobile.native ||
472
+ walletInfo.mobile.universal;
473
+
474
+ if (sessionRequestHandler && walletLinkToOpen) {
475
+ await sessionRequestHandler(walletLinkToOpen);
476
+ }
477
+
478
+ return resultPromise;
479
+ }
480
+
415
481
  function onConnect(
416
482
  address: string,
417
483
  chain: Chain,
@@ -419,8 +485,17 @@ function onConnect(
419
485
  emitter: WalletEmitter<WCSupportedWalletIds>,
420
486
  storage: AsyncStorage,
421
487
  client: ThirdwebClient,
488
+ walletInfo: WalletInfo,
489
+ sessionRequestHandler?: (uri: string) => void | Promise<void>,
422
490
  ): [Account, Chain, DisconnectFn, SwitchChainFn] {
423
- const account = createAccount({ address, chain, client, provider });
491
+ const account = createAccount({
492
+ address,
493
+ chain,
494
+ client,
495
+ provider,
496
+ sessionRequestHandler,
497
+ walletInfo,
498
+ });
424
499
 
425
500
  async function disconnect() {
426
501
  provider.removeListener("accountsChanged", onAccountsChanged);
@@ -444,6 +519,8 @@ function onConnect(
444
519
  chain,
445
520
  client,
446
521
  provider,
522
+ sessionRequestHandler,
523
+ walletInfo,
447
524
  });
448
525
  emitter.emit("accountChanged", newAccount);
449
526
  emitter.emit("accountsChanged", accounts);