@dynamic-labs/multi-wallet 0.16.17-viem.0 → 0.16.17

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 (52) hide show
  1. package/CHANGELOG.md +4 -3
  2. package/package.json +5 -5
  3. package/src/multi-wallet.cjs +7 -12
  4. package/src/multi-wallet.js +8 -13
  5. package/src/rpcProviders.cjs +2 -6
  6. package/src/rpcProviders.js +2 -6
  7. package/src/types.d.ts +8 -16
  8. package/src/utils/assignConfirmationScreenToProvider/assignConfirmationScreenToProvider.cjs +54 -0
  9. package/src/utils/assignConfirmationScreenToProvider/assignConfirmationScreenToProvider.d.ts +3 -0
  10. package/src/utils/assignConfirmationScreenToProvider/assignConfirmationScreenToProvider.js +50 -0
  11. package/src/utils/assignConfirmationScreenToProvider/index.d.ts +1 -0
  12. package/src/utils/isFunction/isFunction.cjs +8 -0
  13. package/src/utils/isFunction/isFunction.js +4 -0
  14. package/src/utils/message.cjs +2 -2
  15. package/src/utils/message.js +1 -1
  16. package/src/wallets/algorand/myalgo.d.ts +2 -1
  17. package/src/wallets/clients/coinbase/coinbase.cjs +2 -2
  18. package/src/wallets/clients/coinbase/coinbase.js +2 -2
  19. package/src/wallets/clients/walletConnect/walletConnect.cjs +5 -9
  20. package/src/wallets/clients/walletConnect/walletConnect.d.ts +2 -2
  21. package/src/wallets/clients/walletConnect/walletConnect.js +5 -9
  22. package/src/wallets/ethereum/BloctoEvm.cjs +140 -0
  23. package/src/wallets/ethereum/BloctoEvm.d.ts +2 -4
  24. package/src/wallets/ethereum/BloctoEvm.js +134 -0
  25. package/src/wallets/ethereum/MagicConnector/MagicWalletConnector/MagicWalletConnector.cjs +14 -35
  26. package/src/wallets/ethereum/MagicConnector/MagicWalletConnector/MagicWalletConnector.d.ts +4 -4
  27. package/src/wallets/ethereum/MagicConnector/MagicWalletConnector/MagicWalletConnector.js +14 -35
  28. package/src/wallets/ethereum/coinbase.cjs +7 -18
  29. package/src/wallets/ethereum/coinbase.d.ts +2 -4
  30. package/src/wallets/ethereum/coinbase.js +7 -18
  31. package/src/wallets/ethereum/ethProvider.cjs +29 -13
  32. package/src/wallets/ethereum/ethProvider.d.ts +7 -7
  33. package/src/wallets/ethereum/ethProvider.js +29 -13
  34. package/src/wallets/ethereum/ethProviderHelper.cjs +34 -52
  35. package/src/wallets/ethereum/ethProviderHelper.d.ts +20 -20
  36. package/src/wallets/ethereum/ethProviderHelper.js +34 -52
  37. package/src/wallets/ethereum/fortmatic.cjs +7 -15
  38. package/src/wallets/ethereum/fortmatic.d.ts +3 -5
  39. package/src/wallets/ethereum/fortmatic.js +7 -15
  40. package/src/wallets/ethereum/meta-mask.cjs +2 -13
  41. package/src/wallets/ethereum/meta-mask.d.ts +3 -5
  42. package/src/wallets/ethereum/meta-mask.js +2 -13
  43. package/src/wallets/walletConnect/walletConnect.cjs +6 -8
  44. package/src/wallets/walletConnect/walletConnect.d.ts +4 -4
  45. package/src/wallets/walletConnect/walletConnect.js +6 -8
  46. package/src/wallets/walletConnect/walletConnectV2.cjs +7 -11
  47. package/src/wallets/walletConnect/walletConnectV2.d.ts +4 -4
  48. package/src/wallets/walletConnect/walletConnectV2.js +7 -11
  49. package/src/wallets/window.d.ts +1 -3
  50. package/src/getOrMapViemChain.cjs +0 -77
  51. package/src/getOrMapViemChain.d.ts +0 -11
  52. package/src/getOrMapViemChain.js +0 -51
package/CHANGELOG.md CHANGED
@@ -1,10 +1,11 @@
1
1
 
2
- ### [0.16.17-viem.0](https://github.com/dynamic-labs/DynamicAuth/compare/v0.16.16...v0.16.17-viem.0) (2023-05-12)
2
+ ### [0.16.17](https://github.com/dynamic-labs/DynamicAuth/compare/v0.16.16...v0.16.17) (2023-05-30)
3
3
 
4
4
 
5
- ### Features
5
+ ### Bug Fixes
6
6
 
7
- * replace ethers with viem ([995baa0](https://github.com/dynamic-labs/DynamicAuth/commit/995baa05fe13681e24388c55a6639779a88d78df))
7
+ * **DYN-2327:** user profile is not loaded properly on the first load ([#2125](https://github.com/dynamic-labs/DynamicAuth/issues/2125)) ([aeeb5c2](https://github.com/dynamic-labs/DynamicAuth/commit/aeeb5c24e5d62caab0b17575b03a0fb452a7e6a2))
8
+ * use getWalletLinks in handleMobileWalletFilter ([#2185](https://github.com/dynamic-labs/DynamicAuth/issues/2185)) ([#2186](https://github.com/dynamic-labs/DynamicAuth/issues/2186)) ([c542f3c](https://github.com/dynamic-labs/DynamicAuth/commit/c542f3c83cc229daa60a2de146823530285ea028))
8
9
 
9
10
  ### [0.16.16](https://github.com/dynamic-labs/DynamicAuth/compare/v0.16.15...v0.16.16) (2023-05-11)
10
11
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dynamic-labs/multi-wallet",
3
- "version": "0.16.17-viem.0",
3
+ "version": "0.16.17",
4
4
  "repository": {
5
5
  "type": "git",
6
6
  "url": "https://github.com/dynamic-labs/DynamicAuth.git",
@@ -10,9 +10,9 @@
10
10
  "buffer": "^6.0.3",
11
11
  "deepmerge": "^4.3.1",
12
12
  "@dynamic-labs/sdk-api": "0.0.174",
13
- "@dynamic-labs/wallet-book": "^0.0.14",
13
+ "@dynamic-labs/wallet-book": "^0.0.18",
14
14
  "starknet": "^3.19.0",
15
- "viem": "^0.3.22",
15
+ "ethers": "^5.7.2",
16
16
  "@randlabs/myalgo-connect": "^1.4.2",
17
17
  "@solana/web3.js": "^1.70.1",
18
18
  "@coinbase/wallet-sdk": "^3.6.4",
@@ -28,8 +28,8 @@
28
28
  "magic-sdk": "^16.0.1",
29
29
  "@keplr-wallet/provider": "0.11.56",
30
30
  "@keplr-wallet/types": "^0.11.51",
31
- "@dynamic-labs/logger": "0.16.17-viem.0",
32
- "@dynamic-labs/wallet-connector-core": "0.16.17-viem.0"
31
+ "@dynamic-labs/logger": "0.16.17",
32
+ "@dynamic-labs/wallet-connector-core": "0.16.17"
33
33
  },
34
34
  "devDependencies": {
35
35
  "@walletconnect/types": "^2.2.1"
@@ -24,6 +24,7 @@ var ExodusSol = require('./wallets/solana/injected/ExodusSol.cjs');
24
24
  var BloctoInjected = require('./wallets/ethereum/injected/BloctoInjected.cjs');
25
25
  var argentx = require('./wallets/starknet/argentx.cjs');
26
26
  var braavos = require('./wallets/starknet/braavos.cjs');
27
+ var BloctoEvm = require('./wallets/ethereum/BloctoEvm.cjs');
27
28
  var phantomLedger = require('./wallets/solana/phantom-ledger.cjs');
28
29
  var CoinbaseSolana = require('./wallets/solana/CoinbaseSolana.cjs');
29
30
  var Frame = require('./wallets/ethereum/injected/Frame.cjs');
@@ -33,7 +34,7 @@ var getWalletConnectConnector = require('./wallets/getWalletConnectConnector.cjs
33
34
  var initializeWalletProviders = require('./wallets/initializeWalletProviders.cjs');
34
35
  var Dawn = require('./wallets/ethereum/injected/Dawn.cjs');
35
36
  var PhantomEvm = require('./wallets/ethereum/injected/PhantomEvm.cjs');
36
- require('viem');
37
+ require('ethers');
37
38
  require('./utils/logger.cjs');
38
39
  require('./wallets/ethereum/MagicConnector/MagicClientNetworkHandler/MagicClientNetworkHandler.cjs');
39
40
  var EmailOTPMagicWalletConnector = require('./wallets/ethereum/MagicConnector/EmailOTPMagicWalletConnector/EmailOTPMagicWalletConnector.cjs');
@@ -112,7 +113,7 @@ const getSupportedWallets = ({ appLogoUrl, appName, isWalletConnectV2Enabled, ne
112
113
  new slope({ solNetworks: solanaNetworkConfigs }),
113
114
  new dapper({ appLogoUrl, appName }),
114
115
  new blocto({ appLogoUrl, appName }),
115
- // new BloctoEvm({ evmNetworks: evmNetworkConfigs }),
116
+ new BloctoEvm({ evmNetworks: evmNetworkConfigs }),
116
117
  new BloctoInjected({ evmNetworks: evmNetworkConfigs }),
117
118
  getWalletConnectConnector.getWalletConnectConnector({
118
119
  evmNetworks: evmNetworkConfigs,
@@ -191,10 +192,10 @@ const filterWalletsForPlatform = (wallets) => wallets.filter((wallet) => {
191
192
  return true;
192
193
  }
193
194
  else {
194
- return handleMobileWalletFilter(wallet, metadata);
195
+ return handleMobileWalletFilter(wallet.name, metadata);
195
196
  }
196
197
  });
197
- const handleMobileWalletFilter = (wallet, metadata) => {
198
+ const handleMobileWalletFilter = (walletName, metadata) => {
198
199
  if (!metadata.mobile)
199
200
  return false;
200
201
  /**
@@ -205,20 +206,14 @@ const handleMobileWalletFilter = (wallet, metadata) => {
205
206
  */
206
207
  const hasWalletConnectLink = Boolean(metadata.mobile.universal) || Boolean(metadata.mobile.native);
207
208
  const isWalletConnectWallet = metadata.walletConnect !== undefined;
208
- /**
209
- * wallets-links.json is the source of truth for wallet support on mobile platforms.
210
- * if a wallet has a non-empty value for ios, that means that wallet has an ios app
211
- * and we support that app. the same goes for android
212
- */
213
209
  if (isMobile.isIPad() || isMobile.isIPhone()) {
214
- const hasIOSLink = metadata.mobile.iosId !== undefined;
210
+ const hasIOSLink = Boolean(walletBook.getWalletLinks(walletName).ios);
215
211
  return !isWalletConnectWallet
216
212
  ? hasIOSLink
217
213
  : hasIOSLink && hasWalletConnectLink;
218
- // It is an android device
219
214
  }
220
215
  else {
221
- const hasAndroidLink = metadata.mobile.androidId !== undefined;
216
+ const hasAndroidLink = Boolean(walletBook.getWalletLinks(walletName).android);
222
217
  return !isWalletConnectWallet
223
218
  ? hasAndroidLink
224
219
  : hasAndroidLink && hasWalletConnectLink;
@@ -1,5 +1,5 @@
1
1
  import { __awaiter } from 'tslib';
2
- import { getWalletBookWallet } from '@dynamic-labs/wallet-book';
2
+ import { getWalletBookWallet, getWalletLinks } from '@dynamic-labs/wallet-book';
3
3
  import Phantom from './wallets/solana/phantom.js';
4
4
  import Coinbase from './wallets/ethereum/coinbase.js';
5
5
  import Slope from './wallets/solana/slope.js';
@@ -20,6 +20,7 @@ import ExodusSol from './wallets/solana/injected/ExodusSol.js';
20
20
  import BloctoInjected from './wallets/ethereum/injected/BloctoInjected.js';
21
21
  import ArgentX from './wallets/starknet/argentx.js';
22
22
  import Braavos from './wallets/starknet/braavos.js';
23
+ import BloctoEvm from './wallets/ethereum/BloctoEvm.js';
23
24
  import PhantomLedger from './wallets/solana/phantom-ledger.js';
24
25
  export { walletName as phantomLedgerWalletName } from './wallets/solana/phantom-ledger.js';
25
26
  import CoinbaseSolana from './wallets/solana/CoinbaseSolana.js';
@@ -30,7 +31,7 @@ import { getWalletConnectConnector } from './wallets/getWalletConnectConnector.j
30
31
  import { initializeWalletProviders } from './wallets/initializeWalletProviders.js';
31
32
  import Dawn from './wallets/ethereum/injected/Dawn.js';
32
33
  import PhantomEvm from './wallets/ethereum/injected/PhantomEvm.js';
33
- import 'viem';
34
+ import 'ethers';
34
35
  import './utils/logger.js';
35
36
  import './wallets/ethereum/MagicConnector/MagicClientNetworkHandler/MagicClientNetworkHandler.js';
36
37
  import { EmailOTPMagicWalletConnector } from './wallets/ethereum/MagicConnector/EmailOTPMagicWalletConnector/EmailOTPMagicWalletConnector.js';
@@ -109,7 +110,7 @@ const getSupportedWallets = ({ appLogoUrl, appName, isWalletConnectV2Enabled, ne
109
110
  new Slope({ solNetworks: solanaNetworkConfigs }),
110
111
  new Dapper({ appLogoUrl, appName }),
111
112
  new Blocto({ appLogoUrl, appName }),
112
- // new BloctoEvm({ evmNetworks: evmNetworkConfigs }),
113
+ new BloctoEvm({ evmNetworks: evmNetworkConfigs }),
113
114
  new BloctoInjected({ evmNetworks: evmNetworkConfigs }),
114
115
  getWalletConnectConnector({
115
116
  evmNetworks: evmNetworkConfigs,
@@ -188,10 +189,10 @@ const filterWalletsForPlatform = (wallets) => wallets.filter((wallet) => {
188
189
  return true;
189
190
  }
190
191
  else {
191
- return handleMobileWalletFilter(wallet, metadata);
192
+ return handleMobileWalletFilter(wallet.name, metadata);
192
193
  }
193
194
  });
194
- const handleMobileWalletFilter = (wallet, metadata) => {
195
+ const handleMobileWalletFilter = (walletName, metadata) => {
195
196
  if (!metadata.mobile)
196
197
  return false;
197
198
  /**
@@ -202,20 +203,14 @@ const handleMobileWalletFilter = (wallet, metadata) => {
202
203
  */
203
204
  const hasWalletConnectLink = Boolean(metadata.mobile.universal) || Boolean(metadata.mobile.native);
204
205
  const isWalletConnectWallet = metadata.walletConnect !== undefined;
205
- /**
206
- * wallets-links.json is the source of truth for wallet support on mobile platforms.
207
- * if a wallet has a non-empty value for ios, that means that wallet has an ios app
208
- * and we support that app. the same goes for android
209
- */
210
206
  if (isIPad() || isIPhone()) {
211
- const hasIOSLink = metadata.mobile.iosId !== undefined;
207
+ const hasIOSLink = Boolean(getWalletLinks(walletName).ios);
212
208
  return !isWalletConnectWallet
213
209
  ? hasIOSLink
214
210
  : hasIOSLink && hasWalletConnectLink;
215
- // It is an android device
216
211
  }
217
212
  else {
218
- const hasAndroidLink = metadata.mobile.androidId !== undefined;
213
+ const hasAndroidLink = Boolean(getWalletLinks(walletName).android);
219
214
  return !isWalletConnectWallet
220
215
  ? hasAndroidLink
221
216
  : hasAndroidLink && hasWalletConnectLink;
@@ -2,9 +2,8 @@
2
2
 
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
- var viem = require('viem');
6
5
  var web3_js = require('@solana/web3.js');
7
- var getOrMapViemChain = require('./getOrMapViemChain.cjs');
6
+ var ethers = require('ethers');
8
7
 
9
8
  const getRpcProviders = (configurations) => {
10
9
  const rpcProviders = {};
@@ -12,10 +11,7 @@ const getRpcProviders = (configurations) => {
12
11
  rpcProviders.evm = configurations.evm.map((network) => {
13
12
  var _a;
14
13
  const rpcUrl = ((_a = network.privateCustomerRpcUrls) === null || _a === void 0 ? void 0 : _a[0]) || network.rpcUrls[0];
15
- const provider = viem.createPublicClient({
16
- chain: getOrMapViemChain.getOrMapViemChain(network),
17
- transport: viem.http(rpcUrl),
18
- });
14
+ const provider = new ethers.ethers.providers.JsonRpcProvider(rpcUrl, network.chainId);
19
15
  return {
20
16
  chainId: network.chainId,
21
17
  chainName: network.chainName,
@@ -1,6 +1,5 @@
1
- import { createPublicClient, http } from 'viem';
2
1
  import { Connection } from '@solana/web3.js';
3
- import { getOrMapViemChain } from './getOrMapViemChain.js';
2
+ import { ethers } from 'ethers';
4
3
 
5
4
  const getRpcProviders = (configurations) => {
6
5
  const rpcProviders = {};
@@ -8,10 +7,7 @@ const getRpcProviders = (configurations) => {
8
7
  rpcProviders.evm = configurations.evm.map((network) => {
9
8
  var _a;
10
9
  const rpcUrl = ((_a = network.privateCustomerRpcUrls) === null || _a === void 0 ? void 0 : _a[0]) || network.rpcUrls[0];
11
- const provider = createPublicClient({
12
- chain: getOrMapViemChain(network),
13
- transport: http(rpcUrl),
14
- });
10
+ const provider = new ethers.providers.JsonRpcProvider(rpcUrl, network.chainId);
15
11
  return {
16
12
  chainId: network.chainId,
17
13
  chainName: network.chainName,
package/src/types.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  import { Connection } from '@solana/web3.js';
2
- import { PublicClient, TransactionReceipt, TransactionRequest } from 'viem';
2
+ import { ethers } from 'ethers';
3
3
  import type { NetworkConfiguration } from '@dynamic-labs/sdk-api';
4
4
  import { WalletConnector, Chain } from '@dynamic-labs/wallet-connector-core';
5
5
  import { EvmNetwork } from './wallets/ethereum/evm-network';
@@ -10,7 +10,7 @@ export type VendorCredentials = {
10
10
  export type EvmRpcProvider = {
11
11
  chainId: number;
12
12
  chainName: string;
13
- provider: PublicClient;
13
+ provider: ethers.providers.JsonRpcProvider;
14
14
  };
15
15
  export type SolanaRpcProvider = {
16
16
  chainId?: number;
@@ -40,23 +40,16 @@ export type GetSupportedWalletsOpts = {
40
40
  walletUiUtils?: WalletUiUtils;
41
41
  };
42
42
  export type GetSupportedWallets = (opts?: GetSupportedWalletsOpts) => Promise<WalletConnector[]>;
43
- export type Deferrable<T> = {
44
- [K in keyof T]: T[K] | Promise<T[K]>;
45
- };
46
- interface ArrayLike<T> {
47
- readonly [n: number]: T;
48
- readonly length: number;
49
- }
50
- export type Bytes = ArrayLike<number>;
51
43
  export type WalletUiUtils = {
52
44
  enableInternalSign: () => void;
53
45
  sendTransaction: (props: {
54
- handler: (transaction: TransactionRequest) => Promise<TransactionReceipt>;
55
- transaction: TransactionRequest;
56
- }) => Promise<TransactionReceipt>;
46
+ handler: (transaction: ethers.utils.Deferrable<ethers.providers.TransactionRequest>) => Promise<ethers.providers.TransactionResponse>;
47
+ provider: ethers.providers.Web3Provider;
48
+ transaction: ethers.utils.Deferrable<ethers.providers.TransactionRequest>;
49
+ }) => Promise<ethers.providers.TransactionResponse>;
57
50
  signMessage: (props: {
58
- handler: () => Promise<string>;
59
- message: string | Bytes;
51
+ handler: (message: string | ethers.utils.Bytes) => Promise<string>;
52
+ message: string | ethers.utils.Bytes;
60
53
  }) => Promise<string>;
61
54
  };
62
55
  export type ChainInfo = {
@@ -69,4 +62,3 @@ export type ChainWihtIcon = {
69
62
  icon?: string;
70
63
  name: string | undefined;
71
64
  };
72
- export {};
@@ -0,0 +1,54 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var tslib = require('tslib');
6
+ var isFunction = require('../isFunction/isFunction.cjs');
7
+
8
+ const applyJsonRpcSignerGates = (jsonRpcSigner, walletUiUtils, provider) => {
9
+ const originalSignMessage = jsonRpcSigner.signMessage;
10
+ const originalSendUncheckedTransaction = jsonRpcSigner.sendUncheckedTransaction;
11
+ if (isFunction.isFunction(originalSignMessage)) {
12
+ Object.assign(jsonRpcSigner, {
13
+ signMessage: (message) => tslib.__awaiter(void 0, void 0, void 0, function* () {
14
+ return walletUiUtils.signMessage({
15
+ handler: originalSignMessage.bind(jsonRpcSigner),
16
+ message,
17
+ });
18
+ }),
19
+ });
20
+ }
21
+ if (isFunction.isFunction(originalSendUncheckedTransaction)) {
22
+ Object.assign(jsonRpcSigner, {
23
+ sendUncheckedTransaction: (transaction) => tslib.__awaiter(void 0, void 0, void 0, function* () {
24
+ return walletUiUtils.sendTransaction({
25
+ handler: originalSendUncheckedTransaction.bind(jsonRpcSigner),
26
+ provider,
27
+ transaction,
28
+ });
29
+ }),
30
+ });
31
+ }
32
+ };
33
+ const assignConfirmationScreenToIntermediaryMethods = (parent, walletUiUtils, provider) => {
34
+ const methods = ['getSigner', 'getUncheckedSigner', 'connectUnchecked'];
35
+ methods.forEach((methodName) => {
36
+ const method = parent[methodName];
37
+ if (!isFunction.isFunction(method)) {
38
+ return;
39
+ }
40
+ Object.assign(parent, {
41
+ [methodName]: (...args) => {
42
+ const result = method.bind(parent)(...args);
43
+ if (typeof result === 'object' && result !== null) {
44
+ assignConfirmationScreenToIntermediaryMethods(result, walletUiUtils, provider);
45
+ applyJsonRpcSignerGates(result, walletUiUtils, provider);
46
+ }
47
+ return result;
48
+ },
49
+ });
50
+ });
51
+ };
52
+ const assignConfirmationScreenToProvider = (provider, walletUiUtils) => assignConfirmationScreenToIntermediaryMethods(provider, walletUiUtils, provider);
53
+
54
+ exports.assignConfirmationScreenToProvider = assignConfirmationScreenToProvider;
@@ -0,0 +1,3 @@
1
+ import { ethers } from 'ethers';
2
+ import { WalletUiUtils } from '../../types';
3
+ export declare const assignConfirmationScreenToProvider: (provider: ethers.providers.Web3Provider, walletUiUtils: WalletUiUtils) => void;
@@ -0,0 +1,50 @@
1
+ import { __awaiter } from 'tslib';
2
+ import { isFunction } from '../isFunction/isFunction.js';
3
+
4
+ const applyJsonRpcSignerGates = (jsonRpcSigner, walletUiUtils, provider) => {
5
+ const originalSignMessage = jsonRpcSigner.signMessage;
6
+ const originalSendUncheckedTransaction = jsonRpcSigner.sendUncheckedTransaction;
7
+ if (isFunction(originalSignMessage)) {
8
+ Object.assign(jsonRpcSigner, {
9
+ signMessage: (message) => __awaiter(void 0, void 0, void 0, function* () {
10
+ return walletUiUtils.signMessage({
11
+ handler: originalSignMessage.bind(jsonRpcSigner),
12
+ message,
13
+ });
14
+ }),
15
+ });
16
+ }
17
+ if (isFunction(originalSendUncheckedTransaction)) {
18
+ Object.assign(jsonRpcSigner, {
19
+ sendUncheckedTransaction: (transaction) => __awaiter(void 0, void 0, void 0, function* () {
20
+ return walletUiUtils.sendTransaction({
21
+ handler: originalSendUncheckedTransaction.bind(jsonRpcSigner),
22
+ provider,
23
+ transaction,
24
+ });
25
+ }),
26
+ });
27
+ }
28
+ };
29
+ const assignConfirmationScreenToIntermediaryMethods = (parent, walletUiUtils, provider) => {
30
+ const methods = ['getSigner', 'getUncheckedSigner', 'connectUnchecked'];
31
+ methods.forEach((methodName) => {
32
+ const method = parent[methodName];
33
+ if (!isFunction(method)) {
34
+ return;
35
+ }
36
+ Object.assign(parent, {
37
+ [methodName]: (...args) => {
38
+ const result = method.bind(parent)(...args);
39
+ if (typeof result === 'object' && result !== null) {
40
+ assignConfirmationScreenToIntermediaryMethods(result, walletUiUtils, provider);
41
+ applyJsonRpcSignerGates(result, walletUiUtils, provider);
42
+ }
43
+ return result;
44
+ },
45
+ });
46
+ });
47
+ };
48
+ const assignConfirmationScreenToProvider = (provider, walletUiUtils) => assignConfirmationScreenToIntermediaryMethods(provider, walletUiUtils, provider);
49
+
50
+ export { assignConfirmationScreenToProvider };
@@ -0,0 +1 @@
1
+ export { assignConfirmationScreenToProvider } from './assignConfirmationScreenToProvider';
@@ -0,0 +1,8 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ // eslint-disable-next-line @typescript-eslint/ban-types
6
+ const isFunction = (value) => typeof value === 'function';
7
+
8
+ exports.isFunction = isFunction;
@@ -0,0 +1,4 @@
1
+ // eslint-disable-next-line @typescript-eslint/ban-types
2
+ const isFunction = (value) => typeof value === 'function';
3
+
4
+ export { isFunction };
@@ -2,7 +2,7 @@
2
2
 
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
- var viem = require('viem');
5
+ var utils = require('ethers/lib/utils');
6
6
  var logger = require('./logger.cjs');
7
7
  var getChainInfo = require('./getChainInfo/getChainInfo.cjs');
8
8
 
@@ -44,7 +44,7 @@ const generateMessageToSign = ({ blockchain, domain, chainId, nonce, uri, public
44
44
  const getEip55Address = (publicKey, chainId) => {
45
45
  try {
46
46
  if (chainId) {
47
- return viem.getAddress(publicKey);
47
+ return utils.getAddress(publicKey);
48
48
  }
49
49
  }
50
50
  catch (err) {
@@ -1,4 +1,4 @@
1
- import { getAddress } from 'viem';
1
+ import { getAddress } from 'ethers/lib/utils.js';
2
2
  import { logger } from './logger.js';
3
3
  import { getChainInfo } from './getChainInfo/getChainInfo.js';
4
4
 
@@ -1,4 +1,5 @@
1
1
  import { Connection } from '@solana/web3.js';
2
+ import { ethers } from 'ethers';
2
3
  import { Chain, WalletConnector } from '@dynamic-labs/wallet-connector-core';
3
4
  import { IMyAlgoSigner } from './myalgoSigner';
4
5
  declare class MyAlgo implements WalletConnector {
@@ -25,7 +26,7 @@ declare class MyAlgo implements WalletConnector {
25
26
  isInstalledOnBrowser(): boolean;
26
27
  supportsNetworkSwitching(): boolean;
27
28
  switchNetwork(): Promise<void>;
28
- getWeb3Provider(): void | Connection | undefined;
29
+ getWeb3Provider(): void | ethers.providers.Web3Provider | Connection | undefined;
29
30
  getRpcProvider(): Promise<void>;
30
31
  setupEventListeners(): void;
31
32
  teardownEventListeners(): void;
@@ -4,7 +4,7 @@ Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
5
  var tslib = require('tslib');
6
6
  var walletSdk = require('@coinbase/wallet-sdk');
7
- var viem = require('viem');
7
+ var utils = require('ethers/lib/utils');
8
8
  var errors = require('../../../errors.cjs');
9
9
  var constants = require('../../constants.cjs');
10
10
 
@@ -58,7 +58,7 @@ const signMessage = (coinbaseProviderOpts, messageToSign) => tslib.__awaiter(voi
58
58
  try {
59
59
  return yield provider.request({
60
60
  method: 'personal_sign',
61
- params: [viem.toHex(viem.toBytes(messageToSign)), address.toLowerCase()],
61
+ params: [utils.hexlify(utils.toUtf8Bytes(messageToSign)), address.toLowerCase()],
62
62
  });
63
63
  }
64
64
  catch (err) {
@@ -1,6 +1,6 @@
1
1
  import { __awaiter } from 'tslib';
2
2
  import { CoinbaseWalletSDK } from '@coinbase/wallet-sdk';
3
- import { toHex, toBytes } from 'viem';
3
+ import { hexlify, toUtf8Bytes } from 'ethers/lib/utils.js';
4
4
  import { DynamicError } from '../../../errors.js';
5
5
  import { infuraId } from '../../constants.js';
6
6
 
@@ -54,7 +54,7 @@ const signMessage = (coinbaseProviderOpts, messageToSign) => __awaiter(void 0, v
54
54
  try {
55
55
  return yield provider.request({
56
56
  method: 'personal_sign',
57
- params: [toHex(toBytes(messageToSign)), address.toLowerCase()],
57
+ params: [hexlify(toUtf8Bytes(messageToSign)), address.toLowerCase()],
58
58
  });
59
59
  }
60
60
  catch (err) {
@@ -4,7 +4,7 @@ Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
5
  var tslib = require('tslib');
6
6
  var Client = require('@walletconnect/client');
7
- var viem = require('viem');
7
+ var ethers = require('ethers');
8
8
  var isMobile = require('../../../utils/isMobile.cjs');
9
9
  var isSameAddress = require('../../../utils/isSameAddress/isSameAddress.cjs');
10
10
  var logger = require('../../../utils/logger.cjs');
@@ -213,7 +213,8 @@ const waitForSafeTransactionOrTimeout = (accountPublicAddress, signature, messag
213
213
  if (!rpcProvider) {
214
214
  return;
215
215
  }
216
- const safeTransactionPromise = waitForSafeTransaction(accountPublicAddress, signature, messageToSign, yield rpcProvider());
216
+ const contract = new ethers.Contract(accountPublicAddress, IS_VALID_SIGNATURE_ABI, yield rpcProvider());
217
+ const safeTransactionPromise = waitForSafeTransaction(signature, messageToSign, contract);
217
218
  const timeoutPromise = new Promise((resolve) => {
218
219
  setTimeout(resolve, 120000);
219
220
  });
@@ -225,18 +226,13 @@ const waitForSafeTransactionOrTimeout = (accountPublicAddress, signature, messag
225
226
  // the transaction is recorded first on the blockchain
226
227
  // redcoast verify WILL fail if it attempts to verify the signature
227
228
  // that has not yet been properly processed!
228
- const waitForSafeTransaction = (address, signature, messageToSign, client) => tslib.__awaiter(void 0, void 0, void 0, function* () {
229
+ const waitForSafeTransaction = (signature, messageToSign, contract) => tslib.__awaiter(void 0, void 0, void 0, function* () {
229
230
  // wait for safe wallet to finish txn on the blockchain contract
230
231
  for (let i = 0; i < 120; i++) {
231
232
  try {
232
233
  // this will result in an exception if the transaction is still not ready
233
234
  // we need to catch it below
234
- const result = yield (client === null || client === void 0 ? void 0 : client.readContract({
235
- abi: IS_VALID_SIGNATURE_ABI,
236
- address: address,
237
- args: [viem.hashMessage(messageToSign), signature],
238
- functionName: 'isValidSignature',
239
- }));
235
+ const result = yield contract.isValidSignature(ethers.ethers.utils.hashMessage(messageToSign), signature);
240
236
  if (result === MAGIC_VALUE)
241
237
  return;
242
238
  }
@@ -1,5 +1,5 @@
1
1
  import Client from '@walletconnect/client';
2
- import { PublicClient } from 'viem';
2
+ import { ethers } from 'ethers';
3
3
  import { FetchPublicAddressOpts, PayloadParams, WalletEventListeners } from '@dynamic-labs/wallet-connector-core';
4
4
  import { WalletSchema } from '@dynamic-labs/wallet-book';
5
5
  import { KeplrWalletConnectV1 } from '../../cosmos/wcClient';
@@ -20,4 +20,4 @@ export declare const createSession: (client: Client) => Promise<PayloadParams>;
20
20
  export declare const useDeepLink: (metadata: WalletSchema, wcClient: Client, opts?: FetchPublicAddressOpts) => void;
21
21
  export declare const fetchWalletConnectCosmosPublicAddress: (metadata: WalletSchema, wcClient: Client, provider: KeplrWalletConnectV1, opts: FetchPublicAddressOpts & Required<Pick<FetchPublicAddressOpts, 'chainId'>>) => Promise<string>;
22
22
  export declare const fetchWalletConnectEVMPublicAddress: (metadata: WalletSchema, wcClient: Client, opts?: FetchPublicAddressOpts) => Promise<string | undefined>;
23
- export declare const signWalletConnectPersonalMessage: (messageToSign: string, metadata: WalletSchema, client: Client, rpcProvider?: () => Promise<PublicClient | undefined>) => Promise<string | undefined>;
23
+ export declare const signWalletConnectPersonalMessage: (messageToSign: string, metadata: WalletSchema, client: Client, rpcProvider?: () => Promise<ethers.providers.JsonRpcProvider | undefined>) => Promise<string | undefined>;
@@ -1,6 +1,6 @@
1
1
  import { __awaiter } from 'tslib';
2
2
  import Client from '@walletconnect/client';
3
- import { hashMessage } from 'viem';
3
+ import { Contract, ethers } from 'ethers';
4
4
  import { isMobile, isIOS } from '../../../utils/isMobile.js';
5
5
  import { isSameAddress } from '../../../utils/isSameAddress/isSameAddress.js';
6
6
  import { logger } from '../../../utils/logger.js';
@@ -205,7 +205,8 @@ const waitForSafeTransactionOrTimeout = (accountPublicAddress, signature, messag
205
205
  if (!rpcProvider) {
206
206
  return;
207
207
  }
208
- const safeTransactionPromise = waitForSafeTransaction(accountPublicAddress, signature, messageToSign, yield rpcProvider());
208
+ const contract = new Contract(accountPublicAddress, IS_VALID_SIGNATURE_ABI, yield rpcProvider());
209
+ const safeTransactionPromise = waitForSafeTransaction(signature, messageToSign, contract);
209
210
  const timeoutPromise = new Promise((resolve) => {
210
211
  setTimeout(resolve, 120000);
211
212
  });
@@ -217,18 +218,13 @@ const waitForSafeTransactionOrTimeout = (accountPublicAddress, signature, messag
217
218
  // the transaction is recorded first on the blockchain
218
219
  // redcoast verify WILL fail if it attempts to verify the signature
219
220
  // that has not yet been properly processed!
220
- const waitForSafeTransaction = (address, signature, messageToSign, client) => __awaiter(void 0, void 0, void 0, function* () {
221
+ const waitForSafeTransaction = (signature, messageToSign, contract) => __awaiter(void 0, void 0, void 0, function* () {
221
222
  // wait for safe wallet to finish txn on the blockchain contract
222
223
  for (let i = 0; i < 120; i++) {
223
224
  try {
224
225
  // this will result in an exception if the transaction is still not ready
225
226
  // we need to catch it below
226
- const result = yield (client === null || client === void 0 ? void 0 : client.readContract({
227
- abi: IS_VALID_SIGNATURE_ABI,
228
- address: address,
229
- args: [hashMessage(messageToSign), signature],
230
- functionName: 'isValidSignature',
231
- }));
227
+ const result = yield contract.isValidSignature(ethers.utils.hashMessage(messageToSign), signature);
232
228
  if (result === MAGIC_VALUE)
233
229
  return;
234
230
  }