@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.
- package/CHANGELOG.md +4 -3
- package/package.json +5 -5
- package/src/multi-wallet.cjs +7 -12
- package/src/multi-wallet.js +8 -13
- package/src/rpcProviders.cjs +2 -6
- package/src/rpcProviders.js +2 -6
- package/src/types.d.ts +8 -16
- package/src/utils/assignConfirmationScreenToProvider/assignConfirmationScreenToProvider.cjs +54 -0
- package/src/utils/assignConfirmationScreenToProvider/assignConfirmationScreenToProvider.d.ts +3 -0
- package/src/utils/assignConfirmationScreenToProvider/assignConfirmationScreenToProvider.js +50 -0
- package/src/utils/assignConfirmationScreenToProvider/index.d.ts +1 -0
- package/src/utils/isFunction/isFunction.cjs +8 -0
- package/src/utils/isFunction/isFunction.js +4 -0
- package/src/utils/message.cjs +2 -2
- package/src/utils/message.js +1 -1
- package/src/wallets/algorand/myalgo.d.ts +2 -1
- package/src/wallets/clients/coinbase/coinbase.cjs +2 -2
- package/src/wallets/clients/coinbase/coinbase.js +2 -2
- package/src/wallets/clients/walletConnect/walletConnect.cjs +5 -9
- package/src/wallets/clients/walletConnect/walletConnect.d.ts +2 -2
- package/src/wallets/clients/walletConnect/walletConnect.js +5 -9
- package/src/wallets/ethereum/BloctoEvm.cjs +140 -0
- package/src/wallets/ethereum/BloctoEvm.d.ts +2 -4
- package/src/wallets/ethereum/BloctoEvm.js +134 -0
- package/src/wallets/ethereum/MagicConnector/MagicWalletConnector/MagicWalletConnector.cjs +14 -35
- package/src/wallets/ethereum/MagicConnector/MagicWalletConnector/MagicWalletConnector.d.ts +4 -4
- package/src/wallets/ethereum/MagicConnector/MagicWalletConnector/MagicWalletConnector.js +14 -35
- package/src/wallets/ethereum/coinbase.cjs +7 -18
- package/src/wallets/ethereum/coinbase.d.ts +2 -4
- package/src/wallets/ethereum/coinbase.js +7 -18
- package/src/wallets/ethereum/ethProvider.cjs +29 -13
- package/src/wallets/ethereum/ethProvider.d.ts +7 -7
- package/src/wallets/ethereum/ethProvider.js +29 -13
- package/src/wallets/ethereum/ethProviderHelper.cjs +34 -52
- package/src/wallets/ethereum/ethProviderHelper.d.ts +20 -20
- package/src/wallets/ethereum/ethProviderHelper.js +34 -52
- package/src/wallets/ethereum/fortmatic.cjs +7 -15
- package/src/wallets/ethereum/fortmatic.d.ts +3 -5
- package/src/wallets/ethereum/fortmatic.js +7 -15
- package/src/wallets/ethereum/meta-mask.cjs +2 -13
- package/src/wallets/ethereum/meta-mask.d.ts +3 -5
- package/src/wallets/ethereum/meta-mask.js +2 -13
- package/src/wallets/walletConnect/walletConnect.cjs +6 -8
- package/src/wallets/walletConnect/walletConnect.d.ts +4 -4
- package/src/wallets/walletConnect/walletConnect.js +6 -8
- package/src/wallets/walletConnect/walletConnectV2.cjs +7 -11
- package/src/wallets/walletConnect/walletConnectV2.d.ts +4 -4
- package/src/wallets/walletConnect/walletConnectV2.js +7 -11
- package/src/wallets/window.d.ts +1 -3
- package/src/getOrMapViemChain.cjs +0 -77
- package/src/getOrMapViemChain.d.ts +0 -11
- package/src/getOrMapViemChain.js +0 -51
package/CHANGELOG.md
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
|
|
2
|
-
### [0.16.17
|
|
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
|
-
###
|
|
5
|
+
### Bug Fixes
|
|
6
6
|
|
|
7
|
-
*
|
|
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
|
|
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.
|
|
13
|
+
"@dynamic-labs/wallet-book": "^0.0.18",
|
|
14
14
|
"starknet": "^3.19.0",
|
|
15
|
-
"
|
|
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
|
|
32
|
-
"@dynamic-labs/wallet-connector-core": "0.16.17
|
|
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"
|
package/src/multi-wallet.cjs
CHANGED
|
@@ -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('
|
|
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
|
-
|
|
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 = (
|
|
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 =
|
|
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 =
|
|
216
|
+
const hasAndroidLink = Boolean(walletBook.getWalletLinks(walletName).android);
|
|
222
217
|
return !isWalletConnectWallet
|
|
223
218
|
? hasAndroidLink
|
|
224
219
|
: hasAndroidLink && hasWalletConnectLink;
|
package/src/multi-wallet.js
CHANGED
|
@@ -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 '
|
|
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
|
-
|
|
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 = (
|
|
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 =
|
|
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 =
|
|
213
|
+
const hasAndroidLink = Boolean(getWalletLinks(walletName).android);
|
|
219
214
|
return !isWalletConnectWallet
|
|
220
215
|
? hasAndroidLink
|
|
221
216
|
: hasAndroidLink && hasWalletConnectLink;
|
package/src/rpcProviders.cjs
CHANGED
|
@@ -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
|
|
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 =
|
|
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,
|
package/src/rpcProviders.js
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
|
-
import { createPublicClient, http } from 'viem';
|
|
2
1
|
import { Connection } from '@solana/web3.js';
|
|
3
|
-
import {
|
|
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 =
|
|
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 {
|
|
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:
|
|
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<
|
|
55
|
-
|
|
56
|
-
|
|
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,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';
|
package/src/utils/message.cjs
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
4
|
|
|
5
|
-
var
|
|
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
|
|
47
|
+
return utils.getAddress(publicKey);
|
|
48
48
|
}
|
|
49
49
|
}
|
|
50
50
|
catch (err) {
|
package/src/utils/message.js
CHANGED
|
@@ -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
|
|
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: [
|
|
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 {
|
|
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: [
|
|
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
|
|
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
|
|
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 = (
|
|
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 (
|
|
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 {
|
|
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<
|
|
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 {
|
|
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
|
|
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 = (
|
|
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 (
|
|
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
|
}
|