@bit-buccaneers/wallet-abstraction 0.0.10 → 0.0.11
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/dist/dev.js +188 -21
- package/dist/dev.jsx +197 -20
- package/dist/index.js +188 -21
- package/dist/index.jsx +197 -20
- package/dist/lib/connectors/shared/constants.d.ts +2 -2
- package/dist/lib/context/WalletContext.d.ts +2 -0
- package/dist/lib/context/hooks/index.d.ts +1 -0
- package/dist/lib/context/hooks/useEvmTransactions.d.ts +17 -0
- package/dist/lib/core/types.d.ts +3 -2
- package/dist/lib/evm/connectors.d.ts +1 -0
- package/dist/lib/evm/erc20.d.ts +19 -0
- package/dist/lib/evm/index.d.ts +2 -0
- package/dist/lib/evm/transactions.d.ts +18 -0
- package/dist/lib/walletconnect/index.d.ts +1 -0
- package/dist/lib/walletconnect/transactions.d.ts +15 -0
- package/dist/lib/wallets/mappers.d.ts +3 -2
- package/package.json +1 -1
package/dist/dev.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { injected, metaMask, coinbaseWallet } from '@wagmi/connectors';
|
|
2
|
-
import { createConfig, getConnectors, signMessage, disconnect,
|
|
3
|
-
import { http } from 'viem';
|
|
2
|
+
import { createConfig, getConnectors, signMessage, disconnect, connect, watchConnections, switchChain as switchChain$1, sendTransaction as sendTransaction$1, waitForTransactionReceipt as waitForTransactionReceipt$1, readContract, writeContract } from '@wagmi/core';
|
|
3
|
+
import { http, erc20Abi } from 'viem';
|
|
4
4
|
import { mainnet } from 'viem/chains';
|
|
5
5
|
import bs582 from 'bs58';
|
|
6
6
|
import nacl from 'tweetnacl';
|
|
@@ -165,7 +165,6 @@ var WALLETS = [
|
|
|
165
165
|
// src/lib/wallets/mappers.ts
|
|
166
166
|
var EVM_WALLET_ID_MAP = {
|
|
167
167
|
"app.phantom": "phantom",
|
|
168
|
-
"app.backpack": "backpack",
|
|
169
168
|
"com.trustwallet.app": "trust",
|
|
170
169
|
"com.binance.wallet": "binance",
|
|
171
170
|
"com.bitget.web3": "bitget",
|
|
@@ -192,7 +191,7 @@ var WC_CHAINS = {
|
|
|
192
191
|
SOLANA_MAINNET: "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp"
|
|
193
192
|
};
|
|
194
193
|
var WC_METHODS = {
|
|
195
|
-
EVM: ["eth_sendTransaction", "personal_sign", "eth_signTypedData"],
|
|
194
|
+
EVM: ["eth_sendTransaction", "personal_sign", "eth_signTypedData", "wallet_switchEthereumChain"],
|
|
196
195
|
SOLANA: ["solana_signTransaction", "solana_signMessage"]
|
|
197
196
|
};
|
|
198
197
|
var WC_EVENTS = {
|
|
@@ -577,6 +576,54 @@ var requestWalletConnect = async (method, params, chainId) => {
|
|
|
577
576
|
}
|
|
578
577
|
};
|
|
579
578
|
|
|
579
|
+
// src/lib/walletconnect/transactions.ts
|
|
580
|
+
var toHex = (value) => `0x${value.toString(16)}`;
|
|
581
|
+
var getWcChainId = (chainId) => `eip155:${chainId}`;
|
|
582
|
+
var wcSwitchChain = async (chainId) => {
|
|
583
|
+
const session = getCurrentSession();
|
|
584
|
+
if (!session) throw new Error("No WalletConnect session");
|
|
585
|
+
await requestWalletConnect(
|
|
586
|
+
"wallet_switchEthereumChain",
|
|
587
|
+
[{ chainId: toHex(chainId) }],
|
|
588
|
+
getWcChainId(chainId)
|
|
589
|
+
);
|
|
590
|
+
};
|
|
591
|
+
var wcSendTransaction = async (params) => {
|
|
592
|
+
const session = getCurrentSession();
|
|
593
|
+
if (!session) throw new Error("No WalletConnect session");
|
|
594
|
+
const txParams = {
|
|
595
|
+
from: params.from,
|
|
596
|
+
to: params.to
|
|
597
|
+
};
|
|
598
|
+
if (params.value) {
|
|
599
|
+
txParams.value = params.value;
|
|
600
|
+
}
|
|
601
|
+
if (params.data) {
|
|
602
|
+
txParams.data = params.data;
|
|
603
|
+
}
|
|
604
|
+
const hash = await requestWalletConnect(
|
|
605
|
+
"eth_sendTransaction",
|
|
606
|
+
[txParams],
|
|
607
|
+
getWcChainId(params.chainId)
|
|
608
|
+
);
|
|
609
|
+
return { hash };
|
|
610
|
+
};
|
|
611
|
+
var getWcEvmAddress = () => {
|
|
612
|
+
const session = getCurrentSession();
|
|
613
|
+
if (!session) return null;
|
|
614
|
+
const account = session.namespaces.eip155?.accounts?.[0];
|
|
615
|
+
if (!account) return null;
|
|
616
|
+
return account.split(":")[2];
|
|
617
|
+
};
|
|
618
|
+
var getWcEvmChainId = () => {
|
|
619
|
+
const session = getCurrentSession();
|
|
620
|
+
if (!session) return null;
|
|
621
|
+
const account = session.namespaces.eip155?.accounts?.[0];
|
|
622
|
+
if (!account) return null;
|
|
623
|
+
const chainId = account.split(":")[1];
|
|
624
|
+
return chainId ? parseInt(chainId, 10) : null;
|
|
625
|
+
};
|
|
626
|
+
|
|
580
627
|
// src/lib/connectors/shared/walletconnect.ts
|
|
581
628
|
var connectViaWalletConnect = async (wcConfig, parseSession, getDeeplink) => {
|
|
582
629
|
let qrUri = null;
|
|
@@ -929,11 +976,7 @@ var createBinanceSolanaDappBrowserConnector = () => createDappBrowserSolanaConne
|
|
|
929
976
|
});
|
|
930
977
|
|
|
931
978
|
// src/lib/connectors/okx.ts
|
|
932
|
-
var buildOkxBrowseUrl = () => {
|
|
933
|
-
const dappUrl = window.location.href;
|
|
934
|
-
const deepLink = `okx://wallet/dapp/url?dappUrl=${encodeURIComponent(dappUrl)}`;
|
|
935
|
-
return `https://web3.okx.com/download?deeplink=${encodeURIComponent(deepLink)}`;
|
|
936
|
-
};
|
|
979
|
+
var buildOkxBrowseUrl = () => `okx://wallet/dapp/url?dappUrl=${encodeURIComponent(window.location.href)}`;
|
|
937
980
|
var createOkxSolanaDappBrowserConnector = () => createDappBrowserSolanaConnector({
|
|
938
981
|
walletId: "okx",
|
|
939
982
|
injectedKey: "isOkxWallet",
|
|
@@ -1046,6 +1089,7 @@ var EVM_FALLBACK_CONNECTORS = [
|
|
|
1046
1089
|
{ id: "rainbow", create: createRainbowEvmMobileConnector },
|
|
1047
1090
|
{ id: "exodus", create: createExodusEvmMobileConnector }
|
|
1048
1091
|
];
|
|
1092
|
+
var sleep = (ms) => new Promise((r) => window.setTimeout(r, ms));
|
|
1049
1093
|
var cleanupWalletLocalStorage = () => {
|
|
1050
1094
|
Object.keys(window.localStorage).filter((key) => key.startsWith("wagmi.")).forEach((key) => window.localStorage.removeItem(key));
|
|
1051
1095
|
};
|
|
@@ -1060,11 +1104,21 @@ var getEvmConnectors = () => {
|
|
|
1060
1104
|
wallet: {
|
|
1061
1105
|
_connector: c,
|
|
1062
1106
|
connect: async () => {
|
|
1063
|
-
|
|
1064
|
-
|
|
1065
|
-
|
|
1066
|
-
|
|
1067
|
-
|
|
1107
|
+
try {
|
|
1108
|
+
const result = await connect(getEvmConfig(), { connector: c });
|
|
1109
|
+
if (!result.accounts[0]) throw new Error("No accounts returned");
|
|
1110
|
+
return connectedResult(result.accounts[0], { chainId: result.chainId });
|
|
1111
|
+
} catch (err) {
|
|
1112
|
+
if (err instanceof Error && err.name === "ConnectorAlreadyConnectedError") {
|
|
1113
|
+
cleanupWalletLocalStorage();
|
|
1114
|
+
await disconnect(getEvmConfig(), { connector: c });
|
|
1115
|
+
await sleep(100);
|
|
1116
|
+
const result = await connect(getEvmConfig(), { connector: c });
|
|
1117
|
+
if (!result.accounts[0]) throw new Error("No accounts returned");
|
|
1118
|
+
return connectedResult(result.accounts[0], { chainId: result.chainId });
|
|
1119
|
+
}
|
|
1120
|
+
throw err;
|
|
1121
|
+
}
|
|
1068
1122
|
},
|
|
1069
1123
|
disconnect: async () => {
|
|
1070
1124
|
cleanupWalletLocalStorage();
|
|
@@ -1081,6 +1135,60 @@ var getEvmConnectors = () => {
|
|
|
1081
1135
|
var watchEvmConnections = (onChange) => {
|
|
1082
1136
|
return watchConnections(getEvmConfig(), { onChange });
|
|
1083
1137
|
};
|
|
1138
|
+
var switchChain = async (chainId) => {
|
|
1139
|
+
await switchChain$1(getEvmConfig(), { chainId });
|
|
1140
|
+
};
|
|
1141
|
+
var sendTransaction = async (params) => {
|
|
1142
|
+
const hash = await sendTransaction$1(getEvmConfig(), {
|
|
1143
|
+
to: params.to,
|
|
1144
|
+
value: params.value,
|
|
1145
|
+
data: params.data
|
|
1146
|
+
});
|
|
1147
|
+
return { hash };
|
|
1148
|
+
};
|
|
1149
|
+
var waitForTransactionReceipt = async (hash) => {
|
|
1150
|
+
const receipt = await waitForTransactionReceipt$1(getEvmConfig(), { hash });
|
|
1151
|
+
return {
|
|
1152
|
+
hash: receipt.transactionHash,
|
|
1153
|
+
status: receipt.status,
|
|
1154
|
+
blockNumber: receipt.blockNumber
|
|
1155
|
+
};
|
|
1156
|
+
};
|
|
1157
|
+
var getAllowance = async (params) => {
|
|
1158
|
+
return readContract(getEvmConfig(), {
|
|
1159
|
+
abi: erc20Abi,
|
|
1160
|
+
address: params.tokenAddress,
|
|
1161
|
+
functionName: "allowance",
|
|
1162
|
+
args: [params.owner, params.spender]
|
|
1163
|
+
});
|
|
1164
|
+
};
|
|
1165
|
+
var approve = async (params) => {
|
|
1166
|
+
const hash = await writeContract(getEvmConfig(), {
|
|
1167
|
+
address: params.tokenAddress,
|
|
1168
|
+
abi: erc20Abi,
|
|
1169
|
+
functionName: "approve",
|
|
1170
|
+
args: [params.spender, params.amount]
|
|
1171
|
+
});
|
|
1172
|
+
return waitForTransactionReceipt(hash);
|
|
1173
|
+
};
|
|
1174
|
+
var ensureAllowance = async (params) => {
|
|
1175
|
+
const currentAllowance = await getAllowance({
|
|
1176
|
+
tokenAddress: params.tokenAddress,
|
|
1177
|
+
owner: params.owner,
|
|
1178
|
+
spender: params.spender
|
|
1179
|
+
});
|
|
1180
|
+
if (currentAllowance >= params.amount) {
|
|
1181
|
+
return null;
|
|
1182
|
+
}
|
|
1183
|
+
if (currentAllowance > 0n) {
|
|
1184
|
+
await approve({
|
|
1185
|
+
tokenAddress: params.tokenAddress,
|
|
1186
|
+
spender: params.spender,
|
|
1187
|
+
amount: 0n
|
|
1188
|
+
});
|
|
1189
|
+
}
|
|
1190
|
+
return approve(params);
|
|
1191
|
+
};
|
|
1084
1192
|
|
|
1085
1193
|
// src/lib/solana/connection.ts
|
|
1086
1194
|
var currentConnection = {
|
|
@@ -1363,6 +1471,60 @@ var useEvmWallet = (options) => {
|
|
|
1363
1471
|
connectedEvmConnector: connectedConnector
|
|
1364
1472
|
};
|
|
1365
1473
|
};
|
|
1474
|
+
|
|
1475
|
+
// src/lib/context/hooks/useEvmTransactions.ts
|
|
1476
|
+
var useEvmTransactions = (hasWcSession) => {
|
|
1477
|
+
const isWc = () => hasWcSession() && getCurrentSession();
|
|
1478
|
+
const switchChain2 = async (chainId) => {
|
|
1479
|
+
if (isWc()) {
|
|
1480
|
+
await wcSwitchChain(chainId);
|
|
1481
|
+
} else {
|
|
1482
|
+
await switchChain(chainId);
|
|
1483
|
+
}
|
|
1484
|
+
};
|
|
1485
|
+
const sendTransaction2 = async (params) => {
|
|
1486
|
+
if (isWc()) {
|
|
1487
|
+
const address = getWcEvmAddress();
|
|
1488
|
+
if (!address) throw new Error("No WalletConnect EVM address");
|
|
1489
|
+
const chainId = getWcEvmChainId();
|
|
1490
|
+
if (!chainId) throw new Error("No WalletConnect chain ID");
|
|
1491
|
+
const result = await wcSendTransaction({
|
|
1492
|
+
from: address,
|
|
1493
|
+
to: params.to,
|
|
1494
|
+
value: params.value !== void 0 ? `0x${params.value.toString(16)}` : void 0,
|
|
1495
|
+
data: params.data,
|
|
1496
|
+
chainId
|
|
1497
|
+
});
|
|
1498
|
+
return { hash: result.hash };
|
|
1499
|
+
}
|
|
1500
|
+
return sendTransaction(params);
|
|
1501
|
+
};
|
|
1502
|
+
const sendAndWait = async (params) => {
|
|
1503
|
+
const { hash } = await sendTransaction2(params);
|
|
1504
|
+
return waitForTransactionReceipt(hash);
|
|
1505
|
+
};
|
|
1506
|
+
const approve2 = async (params) => {
|
|
1507
|
+
if (isWc()) {
|
|
1508
|
+
throw new Error("ERC20 approve via WalletConnect not yet supported");
|
|
1509
|
+
}
|
|
1510
|
+
return approve(params);
|
|
1511
|
+
};
|
|
1512
|
+
const ensureAllowance2 = async (params) => {
|
|
1513
|
+
if (isWc()) {
|
|
1514
|
+
throw new Error("ERC20 ensureAllowance via WalletConnect not yet supported");
|
|
1515
|
+
}
|
|
1516
|
+
return ensureAllowance(params);
|
|
1517
|
+
};
|
|
1518
|
+
return {
|
|
1519
|
+
switchChain: switchChain2,
|
|
1520
|
+
sendTransaction: sendTransaction2,
|
|
1521
|
+
sendAndWait,
|
|
1522
|
+
waitForReceipt: waitForTransactionReceipt,
|
|
1523
|
+
approve: approve2,
|
|
1524
|
+
ensureAllowance: ensureAllowance2,
|
|
1525
|
+
getAllowance
|
|
1526
|
+
};
|
|
1527
|
+
};
|
|
1366
1528
|
var useSolanaWallet = () => {
|
|
1367
1529
|
const [solanaConnectors, setSolanaConnectors] = createSignal([]);
|
|
1368
1530
|
const [solanaConnection, setSolanaConnection] = createSignal(null);
|
|
@@ -1370,13 +1532,16 @@ var useSolanaWallet = () => {
|
|
|
1370
1532
|
null
|
|
1371
1533
|
);
|
|
1372
1534
|
onMount(() => {
|
|
1373
|
-
const connectors = getSolanaWallets();
|
|
1374
1535
|
const wcConnector = createWalletConnectSolanaConnector();
|
|
1375
|
-
|
|
1376
|
-
connectors
|
|
1377
|
-
|
|
1378
|
-
|
|
1379
|
-
|
|
1536
|
+
const getConnectorsWithWc = () => {
|
|
1537
|
+
const connectors = getSolanaWallets();
|
|
1538
|
+
if (wcConnector) connectors.unshift(wcConnector);
|
|
1539
|
+
return connectors;
|
|
1540
|
+
};
|
|
1541
|
+
setSolanaConnectors(getConnectorsWithWc());
|
|
1542
|
+
const unsubscribeWallets = onSolanaWalletsChange(() => {
|
|
1543
|
+
setSolanaConnectors(getConnectorsWithWc());
|
|
1544
|
+
});
|
|
1380
1545
|
const unsubscribeConnection = watchSolanaConnection((state) => {
|
|
1381
1546
|
setSolanaConnection(state.connection);
|
|
1382
1547
|
if (state.connector) {
|
|
@@ -1506,6 +1671,7 @@ var WalletProvider = (props) => {
|
|
|
1506
1671
|
onEvmConnection: evm.setEvmConnection,
|
|
1507
1672
|
onSolanaConnection: solana.setSolanaConnection
|
|
1508
1673
|
});
|
|
1674
|
+
const evmTx = useEvmTransactions(wc.hasWcEvmSession);
|
|
1509
1675
|
const disconnectEvm = async () => {
|
|
1510
1676
|
if (evm.connectedEvmConnector()) {
|
|
1511
1677
|
await evm.disconnectEvm();
|
|
@@ -1571,7 +1737,8 @@ var WalletProvider = (props) => {
|
|
|
1571
1737
|
disconnectEvm,
|
|
1572
1738
|
connectSolana: solana.connectSolana,
|
|
1573
1739
|
disconnectSolana,
|
|
1574
|
-
signMessage
|
|
1740
|
+
signMessage,
|
|
1741
|
+
evmTx
|
|
1575
1742
|
};
|
|
1576
1743
|
return createComponent(WalletContext.Provider, {
|
|
1577
1744
|
value,
|
package/dist/dev.jsx
CHANGED
|
@@ -28,7 +28,6 @@ var getEvmConfig = () => {
|
|
|
28
28
|
import {
|
|
29
29
|
connect,
|
|
30
30
|
disconnect,
|
|
31
|
-
getConnections,
|
|
32
31
|
getConnectors,
|
|
33
32
|
signMessage as wagmiSignMessage
|
|
34
33
|
} from "@wagmi/core";
|
|
@@ -166,7 +165,6 @@ var WALLETS = [
|
|
|
166
165
|
// src/lib/wallets/mappers.ts
|
|
167
166
|
var EVM_WALLET_ID_MAP = {
|
|
168
167
|
"app.phantom": "phantom",
|
|
169
|
-
"app.backpack": "backpack",
|
|
170
168
|
"com.trustwallet.app": "trust",
|
|
171
169
|
"com.binance.wallet": "binance",
|
|
172
170
|
"com.bitget.web3": "bitget",
|
|
@@ -193,7 +191,7 @@ var WC_CHAINS = {
|
|
|
193
191
|
SOLANA_MAINNET: "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp"
|
|
194
192
|
};
|
|
195
193
|
var WC_METHODS = {
|
|
196
|
-
EVM: ["eth_sendTransaction", "personal_sign", "eth_signTypedData"],
|
|
194
|
+
EVM: ["eth_sendTransaction", "personal_sign", "eth_signTypedData", "wallet_switchEthereumChain"],
|
|
197
195
|
SOLANA: ["solana_signTransaction", "solana_signMessage"]
|
|
198
196
|
};
|
|
199
197
|
var WC_EVENTS = {
|
|
@@ -588,6 +586,54 @@ var requestWalletConnect = async (method, params, chainId) => {
|
|
|
588
586
|
}
|
|
589
587
|
};
|
|
590
588
|
|
|
589
|
+
// src/lib/walletconnect/transactions.ts
|
|
590
|
+
var toHex = (value) => `0x${value.toString(16)}`;
|
|
591
|
+
var getWcChainId = (chainId) => `eip155:${chainId}`;
|
|
592
|
+
var wcSwitchChain = async (chainId) => {
|
|
593
|
+
const session = getCurrentSession();
|
|
594
|
+
if (!session) throw new Error("No WalletConnect session");
|
|
595
|
+
await requestWalletConnect(
|
|
596
|
+
"wallet_switchEthereumChain",
|
|
597
|
+
[{ chainId: toHex(chainId) }],
|
|
598
|
+
getWcChainId(chainId)
|
|
599
|
+
);
|
|
600
|
+
};
|
|
601
|
+
var wcSendTransaction = async (params) => {
|
|
602
|
+
const session = getCurrentSession();
|
|
603
|
+
if (!session) throw new Error("No WalletConnect session");
|
|
604
|
+
const txParams = {
|
|
605
|
+
from: params.from,
|
|
606
|
+
to: params.to
|
|
607
|
+
};
|
|
608
|
+
if (params.value) {
|
|
609
|
+
txParams.value = params.value;
|
|
610
|
+
}
|
|
611
|
+
if (params.data) {
|
|
612
|
+
txParams.data = params.data;
|
|
613
|
+
}
|
|
614
|
+
const hash = await requestWalletConnect(
|
|
615
|
+
"eth_sendTransaction",
|
|
616
|
+
[txParams],
|
|
617
|
+
getWcChainId(params.chainId)
|
|
618
|
+
);
|
|
619
|
+
return { hash };
|
|
620
|
+
};
|
|
621
|
+
var getWcEvmAddress = () => {
|
|
622
|
+
const session = getCurrentSession();
|
|
623
|
+
if (!session) return null;
|
|
624
|
+
const account = session.namespaces.eip155?.accounts?.[0];
|
|
625
|
+
if (!account) return null;
|
|
626
|
+
return account.split(":")[2];
|
|
627
|
+
};
|
|
628
|
+
var getWcEvmChainId = () => {
|
|
629
|
+
const session = getCurrentSession();
|
|
630
|
+
if (!session) return null;
|
|
631
|
+
const account = session.namespaces.eip155?.accounts?.[0];
|
|
632
|
+
if (!account) return null;
|
|
633
|
+
const chainId = account.split(":")[1];
|
|
634
|
+
return chainId ? parseInt(chainId, 10) : null;
|
|
635
|
+
};
|
|
636
|
+
|
|
591
637
|
// src/lib/connectors/shared/walletconnect.ts
|
|
592
638
|
var connectViaWalletConnect = async (wcConfig, parseSession, getDeeplink) => {
|
|
593
639
|
let qrUri = null;
|
|
@@ -943,11 +989,7 @@ var createBinanceSolanaDappBrowserConnector = () => createDappBrowserSolanaConne
|
|
|
943
989
|
});
|
|
944
990
|
|
|
945
991
|
// src/lib/connectors/okx.ts
|
|
946
|
-
var buildOkxBrowseUrl = () => {
|
|
947
|
-
const dappUrl = window.location.href;
|
|
948
|
-
const deepLink = `okx://wallet/dapp/url?dappUrl=${encodeURIComponent(dappUrl)}`;
|
|
949
|
-
return `https://web3.okx.com/download?deeplink=${encodeURIComponent(deepLink)}`;
|
|
950
|
-
};
|
|
992
|
+
var buildOkxBrowseUrl = () => `okx://wallet/dapp/url?dappUrl=${encodeURIComponent(window.location.href)}`;
|
|
951
993
|
var createOkxSolanaDappBrowserConnector = () => createDappBrowserSolanaConnector({
|
|
952
994
|
walletId: "okx",
|
|
953
995
|
injectedKey: "isOkxWallet",
|
|
@@ -1063,6 +1105,7 @@ var EVM_FALLBACK_CONNECTORS = [
|
|
|
1063
1105
|
{ id: "rainbow", create: createRainbowEvmMobileConnector },
|
|
1064
1106
|
{ id: "exodus", create: createExodusEvmMobileConnector }
|
|
1065
1107
|
];
|
|
1108
|
+
var sleep = (ms) => new Promise((r) => window.setTimeout(r, ms));
|
|
1066
1109
|
var cleanupWalletLocalStorage = () => {
|
|
1067
1110
|
Object.keys(window.localStorage).filter((key) => key.startsWith("wagmi.")).forEach((key) => window.localStorage.removeItem(key));
|
|
1068
1111
|
};
|
|
@@ -1077,11 +1120,21 @@ var getEvmConnectors = () => {
|
|
|
1077
1120
|
wallet: {
|
|
1078
1121
|
_connector: c,
|
|
1079
1122
|
connect: async () => {
|
|
1080
|
-
|
|
1081
|
-
|
|
1082
|
-
|
|
1083
|
-
|
|
1084
|
-
|
|
1123
|
+
try {
|
|
1124
|
+
const result = await connect(getEvmConfig(), { connector: c });
|
|
1125
|
+
if (!result.accounts[0]) throw new Error("No accounts returned");
|
|
1126
|
+
return connectedResult(result.accounts[0], { chainId: result.chainId });
|
|
1127
|
+
} catch (err) {
|
|
1128
|
+
if (err instanceof Error && err.name === "ConnectorAlreadyConnectedError") {
|
|
1129
|
+
cleanupWalletLocalStorage();
|
|
1130
|
+
await disconnect(getEvmConfig(), { connector: c });
|
|
1131
|
+
await sleep(100);
|
|
1132
|
+
const result = await connect(getEvmConfig(), { connector: c });
|
|
1133
|
+
if (!result.accounts[0]) throw new Error("No accounts returned");
|
|
1134
|
+
return connectedResult(result.accounts[0], { chainId: result.chainId });
|
|
1135
|
+
}
|
|
1136
|
+
throw err;
|
|
1137
|
+
}
|
|
1085
1138
|
},
|
|
1086
1139
|
disconnect: async () => {
|
|
1087
1140
|
cleanupWalletLocalStorage();
|
|
@@ -1102,6 +1155,71 @@ var watchEvmConnections = (onChange) => {
|
|
|
1102
1155
|
return watchConnections(getEvmConfig(), { onChange });
|
|
1103
1156
|
};
|
|
1104
1157
|
|
|
1158
|
+
// src/lib/evm/transactions.ts
|
|
1159
|
+
import {
|
|
1160
|
+
sendTransaction as wagmiSendTransaction,
|
|
1161
|
+
switchChain as wagmiSwitchChain,
|
|
1162
|
+
waitForTransactionReceipt as wagmiWaitForReceipt
|
|
1163
|
+
} from "@wagmi/core";
|
|
1164
|
+
var switchChain = async (chainId) => {
|
|
1165
|
+
await wagmiSwitchChain(getEvmConfig(), { chainId });
|
|
1166
|
+
};
|
|
1167
|
+
var sendTransaction = async (params) => {
|
|
1168
|
+
const hash = await wagmiSendTransaction(getEvmConfig(), {
|
|
1169
|
+
to: params.to,
|
|
1170
|
+
value: params.value,
|
|
1171
|
+
data: params.data
|
|
1172
|
+
});
|
|
1173
|
+
return { hash };
|
|
1174
|
+
};
|
|
1175
|
+
var waitForTransactionReceipt = async (hash) => {
|
|
1176
|
+
const receipt = await wagmiWaitForReceipt(getEvmConfig(), { hash });
|
|
1177
|
+
return {
|
|
1178
|
+
hash: receipt.transactionHash,
|
|
1179
|
+
status: receipt.status,
|
|
1180
|
+
blockNumber: receipt.blockNumber
|
|
1181
|
+
};
|
|
1182
|
+
};
|
|
1183
|
+
|
|
1184
|
+
// src/lib/evm/erc20.ts
|
|
1185
|
+
import { readContract, writeContract } from "@wagmi/core";
|
|
1186
|
+
import { erc20Abi } from "viem";
|
|
1187
|
+
var getAllowance = async (params) => {
|
|
1188
|
+
return readContract(getEvmConfig(), {
|
|
1189
|
+
abi: erc20Abi,
|
|
1190
|
+
address: params.tokenAddress,
|
|
1191
|
+
functionName: "allowance",
|
|
1192
|
+
args: [params.owner, params.spender]
|
|
1193
|
+
});
|
|
1194
|
+
};
|
|
1195
|
+
var approve = async (params) => {
|
|
1196
|
+
const hash = await writeContract(getEvmConfig(), {
|
|
1197
|
+
address: params.tokenAddress,
|
|
1198
|
+
abi: erc20Abi,
|
|
1199
|
+
functionName: "approve",
|
|
1200
|
+
args: [params.spender, params.amount]
|
|
1201
|
+
});
|
|
1202
|
+
return waitForTransactionReceipt(hash);
|
|
1203
|
+
};
|
|
1204
|
+
var ensureAllowance = async (params) => {
|
|
1205
|
+
const currentAllowance = await getAllowance({
|
|
1206
|
+
tokenAddress: params.tokenAddress,
|
|
1207
|
+
owner: params.owner,
|
|
1208
|
+
spender: params.spender
|
|
1209
|
+
});
|
|
1210
|
+
if (currentAllowance >= params.amount) {
|
|
1211
|
+
return null;
|
|
1212
|
+
}
|
|
1213
|
+
if (currentAllowance > 0n) {
|
|
1214
|
+
await approve({
|
|
1215
|
+
tokenAddress: params.tokenAddress,
|
|
1216
|
+
spender: params.spender,
|
|
1217
|
+
amount: 0n
|
|
1218
|
+
});
|
|
1219
|
+
}
|
|
1220
|
+
return approve(params);
|
|
1221
|
+
};
|
|
1222
|
+
|
|
1105
1223
|
// src/lib/solana/connection.ts
|
|
1106
1224
|
var currentConnection = {
|
|
1107
1225
|
connection: null,
|
|
@@ -1400,6 +1518,60 @@ var useEvmWallet = (options) => {
|
|
|
1400
1518
|
};
|
|
1401
1519
|
};
|
|
1402
1520
|
|
|
1521
|
+
// src/lib/context/hooks/useEvmTransactions.ts
|
|
1522
|
+
var useEvmTransactions = (hasWcSession) => {
|
|
1523
|
+
const isWc = () => hasWcSession() && getCurrentSession();
|
|
1524
|
+
const switchChain2 = async (chainId) => {
|
|
1525
|
+
if (isWc()) {
|
|
1526
|
+
await wcSwitchChain(chainId);
|
|
1527
|
+
} else {
|
|
1528
|
+
await switchChain(chainId);
|
|
1529
|
+
}
|
|
1530
|
+
};
|
|
1531
|
+
const sendTransaction2 = async (params) => {
|
|
1532
|
+
if (isWc()) {
|
|
1533
|
+
const address = getWcEvmAddress();
|
|
1534
|
+
if (!address) throw new Error("No WalletConnect EVM address");
|
|
1535
|
+
const chainId = getWcEvmChainId();
|
|
1536
|
+
if (!chainId) throw new Error("No WalletConnect chain ID");
|
|
1537
|
+
const result = await wcSendTransaction({
|
|
1538
|
+
from: address,
|
|
1539
|
+
to: params.to,
|
|
1540
|
+
value: params.value !== void 0 ? `0x${params.value.toString(16)}` : void 0,
|
|
1541
|
+
data: params.data,
|
|
1542
|
+
chainId
|
|
1543
|
+
});
|
|
1544
|
+
return { hash: result.hash };
|
|
1545
|
+
}
|
|
1546
|
+
return sendTransaction(params);
|
|
1547
|
+
};
|
|
1548
|
+
const sendAndWait = async (params) => {
|
|
1549
|
+
const { hash } = await sendTransaction2(params);
|
|
1550
|
+
return waitForTransactionReceipt(hash);
|
|
1551
|
+
};
|
|
1552
|
+
const approve2 = async (params) => {
|
|
1553
|
+
if (isWc()) {
|
|
1554
|
+
throw new Error("ERC20 approve via WalletConnect not yet supported");
|
|
1555
|
+
}
|
|
1556
|
+
return approve(params);
|
|
1557
|
+
};
|
|
1558
|
+
const ensureAllowance2 = async (params) => {
|
|
1559
|
+
if (isWc()) {
|
|
1560
|
+
throw new Error("ERC20 ensureAllowance via WalletConnect not yet supported");
|
|
1561
|
+
}
|
|
1562
|
+
return ensureAllowance(params);
|
|
1563
|
+
};
|
|
1564
|
+
return {
|
|
1565
|
+
switchChain: switchChain2,
|
|
1566
|
+
sendTransaction: sendTransaction2,
|
|
1567
|
+
sendAndWait,
|
|
1568
|
+
waitForReceipt: waitForTransactionReceipt,
|
|
1569
|
+
approve: approve2,
|
|
1570
|
+
ensureAllowance: ensureAllowance2,
|
|
1571
|
+
getAllowance
|
|
1572
|
+
};
|
|
1573
|
+
};
|
|
1574
|
+
|
|
1403
1575
|
// src/lib/context/hooks/useSolanaWallet.ts
|
|
1404
1576
|
import { createSignal as createSignal2, onCleanup as onCleanup2, onMount as onMount2 } from "solid-js";
|
|
1405
1577
|
var useSolanaWallet = () => {
|
|
@@ -1409,13 +1581,16 @@ var useSolanaWallet = () => {
|
|
|
1409
1581
|
null
|
|
1410
1582
|
);
|
|
1411
1583
|
onMount2(() => {
|
|
1412
|
-
const connectors = getSolanaWallets();
|
|
1413
1584
|
const wcConnector = createWalletConnectSolanaConnector();
|
|
1414
|
-
|
|
1415
|
-
connectors
|
|
1416
|
-
|
|
1417
|
-
|
|
1418
|
-
|
|
1585
|
+
const getConnectorsWithWc = () => {
|
|
1586
|
+
const connectors = getSolanaWallets();
|
|
1587
|
+
if (wcConnector) connectors.unshift(wcConnector);
|
|
1588
|
+
return connectors;
|
|
1589
|
+
};
|
|
1590
|
+
setSolanaConnectors(getConnectorsWithWc());
|
|
1591
|
+
const unsubscribeWallets = onSolanaWalletsChange(() => {
|
|
1592
|
+
setSolanaConnectors(getConnectorsWithWc());
|
|
1593
|
+
});
|
|
1419
1594
|
const unsubscribeConnection = watchSolanaConnection((state) => {
|
|
1420
1595
|
setSolanaConnection(state.connection);
|
|
1421
1596
|
if (state.connector) {
|
|
@@ -1547,6 +1722,7 @@ var WalletProvider = (props) => {
|
|
|
1547
1722
|
onEvmConnection: evm.setEvmConnection,
|
|
1548
1723
|
onSolanaConnection: solana.setSolanaConnection
|
|
1549
1724
|
});
|
|
1725
|
+
const evmTx = useEvmTransactions(wc.hasWcEvmSession);
|
|
1550
1726
|
const disconnectEvm = async () => {
|
|
1551
1727
|
if (evm.connectedEvmConnector()) {
|
|
1552
1728
|
await evm.disconnectEvm();
|
|
@@ -1612,7 +1788,8 @@ var WalletProvider = (props) => {
|
|
|
1612
1788
|
disconnectEvm,
|
|
1613
1789
|
connectSolana: solana.connectSolana,
|
|
1614
1790
|
disconnectSolana,
|
|
1615
|
-
signMessage
|
|
1791
|
+
signMessage,
|
|
1792
|
+
evmTx
|
|
1616
1793
|
};
|
|
1617
1794
|
return <WalletContext.Provider value={value}>{props.children}</WalletContext.Provider>;
|
|
1618
1795
|
};
|
package/dist/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { injected, metaMask, coinbaseWallet } from '@wagmi/connectors';
|
|
2
|
-
import { createConfig, getConnectors, signMessage, disconnect,
|
|
3
|
-
import { http } from 'viem';
|
|
2
|
+
import { createConfig, getConnectors, signMessage, disconnect, connect, watchConnections, switchChain as switchChain$1, sendTransaction as sendTransaction$1, waitForTransactionReceipt as waitForTransactionReceipt$1, readContract, writeContract } from '@wagmi/core';
|
|
3
|
+
import { http, erc20Abi } from 'viem';
|
|
4
4
|
import { mainnet } from 'viem/chains';
|
|
5
5
|
import bs582 from 'bs58';
|
|
6
6
|
import nacl from 'tweetnacl';
|
|
@@ -165,7 +165,6 @@ var WALLETS = [
|
|
|
165
165
|
// src/lib/wallets/mappers.ts
|
|
166
166
|
var EVM_WALLET_ID_MAP = {
|
|
167
167
|
"app.phantom": "phantom",
|
|
168
|
-
"app.backpack": "backpack",
|
|
169
168
|
"com.trustwallet.app": "trust",
|
|
170
169
|
"com.binance.wallet": "binance",
|
|
171
170
|
"com.bitget.web3": "bitget",
|
|
@@ -192,7 +191,7 @@ var WC_CHAINS = {
|
|
|
192
191
|
SOLANA_MAINNET: "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp"
|
|
193
192
|
};
|
|
194
193
|
var WC_METHODS = {
|
|
195
|
-
EVM: ["eth_sendTransaction", "personal_sign", "eth_signTypedData"],
|
|
194
|
+
EVM: ["eth_sendTransaction", "personal_sign", "eth_signTypedData", "wallet_switchEthereumChain"],
|
|
196
195
|
SOLANA: ["solana_signTransaction", "solana_signMessage"]
|
|
197
196
|
};
|
|
198
197
|
var WC_EVENTS = {
|
|
@@ -572,6 +571,54 @@ var requestWalletConnect = async (method, params, chainId) => {
|
|
|
572
571
|
}
|
|
573
572
|
};
|
|
574
573
|
|
|
574
|
+
// src/lib/walletconnect/transactions.ts
|
|
575
|
+
var toHex = (value) => `0x${value.toString(16)}`;
|
|
576
|
+
var getWcChainId = (chainId) => `eip155:${chainId}`;
|
|
577
|
+
var wcSwitchChain = async (chainId) => {
|
|
578
|
+
const session = getCurrentSession();
|
|
579
|
+
if (!session) throw new Error("No WalletConnect session");
|
|
580
|
+
await requestWalletConnect(
|
|
581
|
+
"wallet_switchEthereumChain",
|
|
582
|
+
[{ chainId: toHex(chainId) }],
|
|
583
|
+
getWcChainId(chainId)
|
|
584
|
+
);
|
|
585
|
+
};
|
|
586
|
+
var wcSendTransaction = async (params) => {
|
|
587
|
+
const session = getCurrentSession();
|
|
588
|
+
if (!session) throw new Error("No WalletConnect session");
|
|
589
|
+
const txParams = {
|
|
590
|
+
from: params.from,
|
|
591
|
+
to: params.to
|
|
592
|
+
};
|
|
593
|
+
if (params.value) {
|
|
594
|
+
txParams.value = params.value;
|
|
595
|
+
}
|
|
596
|
+
if (params.data) {
|
|
597
|
+
txParams.data = params.data;
|
|
598
|
+
}
|
|
599
|
+
const hash = await requestWalletConnect(
|
|
600
|
+
"eth_sendTransaction",
|
|
601
|
+
[txParams],
|
|
602
|
+
getWcChainId(params.chainId)
|
|
603
|
+
);
|
|
604
|
+
return { hash };
|
|
605
|
+
};
|
|
606
|
+
var getWcEvmAddress = () => {
|
|
607
|
+
const session = getCurrentSession();
|
|
608
|
+
if (!session) return null;
|
|
609
|
+
const account = session.namespaces.eip155?.accounts?.[0];
|
|
610
|
+
if (!account) return null;
|
|
611
|
+
return account.split(":")[2];
|
|
612
|
+
};
|
|
613
|
+
var getWcEvmChainId = () => {
|
|
614
|
+
const session = getCurrentSession();
|
|
615
|
+
if (!session) return null;
|
|
616
|
+
const account = session.namespaces.eip155?.accounts?.[0];
|
|
617
|
+
if (!account) return null;
|
|
618
|
+
const chainId = account.split(":")[1];
|
|
619
|
+
return chainId ? parseInt(chainId, 10) : null;
|
|
620
|
+
};
|
|
621
|
+
|
|
575
622
|
// src/lib/connectors/shared/walletconnect.ts
|
|
576
623
|
var connectViaWalletConnect = async (wcConfig, parseSession, getDeeplink) => {
|
|
577
624
|
let qrUri = null;
|
|
@@ -924,11 +971,7 @@ var createBinanceSolanaDappBrowserConnector = () => createDappBrowserSolanaConne
|
|
|
924
971
|
});
|
|
925
972
|
|
|
926
973
|
// src/lib/connectors/okx.ts
|
|
927
|
-
var buildOkxBrowseUrl = () => {
|
|
928
|
-
const dappUrl = window.location.href;
|
|
929
|
-
const deepLink = `okx://wallet/dapp/url?dappUrl=${encodeURIComponent(dappUrl)}`;
|
|
930
|
-
return `https://web3.okx.com/download?deeplink=${encodeURIComponent(deepLink)}`;
|
|
931
|
-
};
|
|
974
|
+
var buildOkxBrowseUrl = () => `okx://wallet/dapp/url?dappUrl=${encodeURIComponent(window.location.href)}`;
|
|
932
975
|
var createOkxSolanaDappBrowserConnector = () => createDappBrowserSolanaConnector({
|
|
933
976
|
walletId: "okx",
|
|
934
977
|
injectedKey: "isOkxWallet",
|
|
@@ -1041,6 +1084,7 @@ var EVM_FALLBACK_CONNECTORS = [
|
|
|
1041
1084
|
{ id: "rainbow", create: createRainbowEvmMobileConnector },
|
|
1042
1085
|
{ id: "exodus", create: createExodusEvmMobileConnector }
|
|
1043
1086
|
];
|
|
1087
|
+
var sleep = (ms) => new Promise((r) => window.setTimeout(r, ms));
|
|
1044
1088
|
var cleanupWalletLocalStorage = () => {
|
|
1045
1089
|
Object.keys(window.localStorage).filter((key) => key.startsWith("wagmi.")).forEach((key) => window.localStorage.removeItem(key));
|
|
1046
1090
|
};
|
|
@@ -1055,11 +1099,21 @@ var getEvmConnectors = () => {
|
|
|
1055
1099
|
wallet: {
|
|
1056
1100
|
_connector: c,
|
|
1057
1101
|
connect: async () => {
|
|
1058
|
-
|
|
1059
|
-
|
|
1060
|
-
|
|
1061
|
-
|
|
1062
|
-
|
|
1102
|
+
try {
|
|
1103
|
+
const result = await connect(getEvmConfig(), { connector: c });
|
|
1104
|
+
if (!result.accounts[0]) throw new Error("No accounts returned");
|
|
1105
|
+
return connectedResult(result.accounts[0], { chainId: result.chainId });
|
|
1106
|
+
} catch (err) {
|
|
1107
|
+
if (err instanceof Error && err.name === "ConnectorAlreadyConnectedError") {
|
|
1108
|
+
cleanupWalletLocalStorage();
|
|
1109
|
+
await disconnect(getEvmConfig(), { connector: c });
|
|
1110
|
+
await sleep(100);
|
|
1111
|
+
const result = await connect(getEvmConfig(), { connector: c });
|
|
1112
|
+
if (!result.accounts[0]) throw new Error("No accounts returned");
|
|
1113
|
+
return connectedResult(result.accounts[0], { chainId: result.chainId });
|
|
1114
|
+
}
|
|
1115
|
+
throw err;
|
|
1116
|
+
}
|
|
1063
1117
|
},
|
|
1064
1118
|
disconnect: async () => {
|
|
1065
1119
|
cleanupWalletLocalStorage();
|
|
@@ -1076,6 +1130,60 @@ var getEvmConnectors = () => {
|
|
|
1076
1130
|
var watchEvmConnections = (onChange) => {
|
|
1077
1131
|
return watchConnections(getEvmConfig(), { onChange });
|
|
1078
1132
|
};
|
|
1133
|
+
var switchChain = async (chainId) => {
|
|
1134
|
+
await switchChain$1(getEvmConfig(), { chainId });
|
|
1135
|
+
};
|
|
1136
|
+
var sendTransaction = async (params) => {
|
|
1137
|
+
const hash = await sendTransaction$1(getEvmConfig(), {
|
|
1138
|
+
to: params.to,
|
|
1139
|
+
value: params.value,
|
|
1140
|
+
data: params.data
|
|
1141
|
+
});
|
|
1142
|
+
return { hash };
|
|
1143
|
+
};
|
|
1144
|
+
var waitForTransactionReceipt = async (hash) => {
|
|
1145
|
+
const receipt = await waitForTransactionReceipt$1(getEvmConfig(), { hash });
|
|
1146
|
+
return {
|
|
1147
|
+
hash: receipt.transactionHash,
|
|
1148
|
+
status: receipt.status,
|
|
1149
|
+
blockNumber: receipt.blockNumber
|
|
1150
|
+
};
|
|
1151
|
+
};
|
|
1152
|
+
var getAllowance = async (params) => {
|
|
1153
|
+
return readContract(getEvmConfig(), {
|
|
1154
|
+
abi: erc20Abi,
|
|
1155
|
+
address: params.tokenAddress,
|
|
1156
|
+
functionName: "allowance",
|
|
1157
|
+
args: [params.owner, params.spender]
|
|
1158
|
+
});
|
|
1159
|
+
};
|
|
1160
|
+
var approve = async (params) => {
|
|
1161
|
+
const hash = await writeContract(getEvmConfig(), {
|
|
1162
|
+
address: params.tokenAddress,
|
|
1163
|
+
abi: erc20Abi,
|
|
1164
|
+
functionName: "approve",
|
|
1165
|
+
args: [params.spender, params.amount]
|
|
1166
|
+
});
|
|
1167
|
+
return waitForTransactionReceipt(hash);
|
|
1168
|
+
};
|
|
1169
|
+
var ensureAllowance = async (params) => {
|
|
1170
|
+
const currentAllowance = await getAllowance({
|
|
1171
|
+
tokenAddress: params.tokenAddress,
|
|
1172
|
+
owner: params.owner,
|
|
1173
|
+
spender: params.spender
|
|
1174
|
+
});
|
|
1175
|
+
if (currentAllowance >= params.amount) {
|
|
1176
|
+
return null;
|
|
1177
|
+
}
|
|
1178
|
+
if (currentAllowance > 0n) {
|
|
1179
|
+
await approve({
|
|
1180
|
+
tokenAddress: params.tokenAddress,
|
|
1181
|
+
spender: params.spender,
|
|
1182
|
+
amount: 0n
|
|
1183
|
+
});
|
|
1184
|
+
}
|
|
1185
|
+
return approve(params);
|
|
1186
|
+
};
|
|
1079
1187
|
|
|
1080
1188
|
// src/lib/solana/connection.ts
|
|
1081
1189
|
var currentConnection = {
|
|
@@ -1356,6 +1464,60 @@ var useEvmWallet = (options) => {
|
|
|
1356
1464
|
connectedEvmConnector: connectedConnector
|
|
1357
1465
|
};
|
|
1358
1466
|
};
|
|
1467
|
+
|
|
1468
|
+
// src/lib/context/hooks/useEvmTransactions.ts
|
|
1469
|
+
var useEvmTransactions = (hasWcSession) => {
|
|
1470
|
+
const isWc = () => hasWcSession() && getCurrentSession();
|
|
1471
|
+
const switchChain2 = async (chainId) => {
|
|
1472
|
+
if (isWc()) {
|
|
1473
|
+
await wcSwitchChain(chainId);
|
|
1474
|
+
} else {
|
|
1475
|
+
await switchChain(chainId);
|
|
1476
|
+
}
|
|
1477
|
+
};
|
|
1478
|
+
const sendTransaction2 = async (params) => {
|
|
1479
|
+
if (isWc()) {
|
|
1480
|
+
const address = getWcEvmAddress();
|
|
1481
|
+
if (!address) throw new Error("No WalletConnect EVM address");
|
|
1482
|
+
const chainId = getWcEvmChainId();
|
|
1483
|
+
if (!chainId) throw new Error("No WalletConnect chain ID");
|
|
1484
|
+
const result = await wcSendTransaction({
|
|
1485
|
+
from: address,
|
|
1486
|
+
to: params.to,
|
|
1487
|
+
value: params.value !== void 0 ? `0x${params.value.toString(16)}` : void 0,
|
|
1488
|
+
data: params.data,
|
|
1489
|
+
chainId
|
|
1490
|
+
});
|
|
1491
|
+
return { hash: result.hash };
|
|
1492
|
+
}
|
|
1493
|
+
return sendTransaction(params);
|
|
1494
|
+
};
|
|
1495
|
+
const sendAndWait = async (params) => {
|
|
1496
|
+
const { hash } = await sendTransaction2(params);
|
|
1497
|
+
return waitForTransactionReceipt(hash);
|
|
1498
|
+
};
|
|
1499
|
+
const approve2 = async (params) => {
|
|
1500
|
+
if (isWc()) {
|
|
1501
|
+
throw new Error("ERC20 approve via WalletConnect not yet supported");
|
|
1502
|
+
}
|
|
1503
|
+
return approve(params);
|
|
1504
|
+
};
|
|
1505
|
+
const ensureAllowance2 = async (params) => {
|
|
1506
|
+
if (isWc()) {
|
|
1507
|
+
throw new Error("ERC20 ensureAllowance via WalletConnect not yet supported");
|
|
1508
|
+
}
|
|
1509
|
+
return ensureAllowance(params);
|
|
1510
|
+
};
|
|
1511
|
+
return {
|
|
1512
|
+
switchChain: switchChain2,
|
|
1513
|
+
sendTransaction: sendTransaction2,
|
|
1514
|
+
sendAndWait,
|
|
1515
|
+
waitForReceipt: waitForTransactionReceipt,
|
|
1516
|
+
approve: approve2,
|
|
1517
|
+
ensureAllowance: ensureAllowance2,
|
|
1518
|
+
getAllowance
|
|
1519
|
+
};
|
|
1520
|
+
};
|
|
1359
1521
|
var useSolanaWallet = () => {
|
|
1360
1522
|
const [solanaConnectors, setSolanaConnectors] = createSignal([]);
|
|
1361
1523
|
const [solanaConnection, setSolanaConnection] = createSignal(null);
|
|
@@ -1363,13 +1525,16 @@ var useSolanaWallet = () => {
|
|
|
1363
1525
|
null
|
|
1364
1526
|
);
|
|
1365
1527
|
onMount(() => {
|
|
1366
|
-
const connectors = getSolanaWallets();
|
|
1367
1528
|
const wcConnector = createWalletConnectSolanaConnector();
|
|
1368
|
-
|
|
1369
|
-
connectors
|
|
1370
|
-
|
|
1371
|
-
|
|
1372
|
-
|
|
1529
|
+
const getConnectorsWithWc = () => {
|
|
1530
|
+
const connectors = getSolanaWallets();
|
|
1531
|
+
if (wcConnector) connectors.unshift(wcConnector);
|
|
1532
|
+
return connectors;
|
|
1533
|
+
};
|
|
1534
|
+
setSolanaConnectors(getConnectorsWithWc());
|
|
1535
|
+
const unsubscribeWallets = onSolanaWalletsChange(() => {
|
|
1536
|
+
setSolanaConnectors(getConnectorsWithWc());
|
|
1537
|
+
});
|
|
1373
1538
|
const unsubscribeConnection = watchSolanaConnection((state) => {
|
|
1374
1539
|
setSolanaConnection(state.connection);
|
|
1375
1540
|
if (state.connector) {
|
|
@@ -1499,6 +1664,7 @@ var WalletProvider = (props) => {
|
|
|
1499
1664
|
onEvmConnection: evm.setEvmConnection,
|
|
1500
1665
|
onSolanaConnection: solana.setSolanaConnection
|
|
1501
1666
|
});
|
|
1667
|
+
const evmTx = useEvmTransactions(wc.hasWcEvmSession);
|
|
1502
1668
|
const disconnectEvm = async () => {
|
|
1503
1669
|
if (evm.connectedEvmConnector()) {
|
|
1504
1670
|
await evm.disconnectEvm();
|
|
@@ -1564,7 +1730,8 @@ var WalletProvider = (props) => {
|
|
|
1564
1730
|
disconnectEvm,
|
|
1565
1731
|
connectSolana: solana.connectSolana,
|
|
1566
1732
|
disconnectSolana,
|
|
1567
|
-
signMessage
|
|
1733
|
+
signMessage,
|
|
1734
|
+
evmTx
|
|
1568
1735
|
};
|
|
1569
1736
|
return createComponent(WalletContext.Provider, {
|
|
1570
1737
|
value,
|
package/dist/index.jsx
CHANGED
|
@@ -28,7 +28,6 @@ var getEvmConfig = () => {
|
|
|
28
28
|
import {
|
|
29
29
|
connect,
|
|
30
30
|
disconnect,
|
|
31
|
-
getConnections,
|
|
32
31
|
getConnectors,
|
|
33
32
|
signMessage as wagmiSignMessage
|
|
34
33
|
} from "@wagmi/core";
|
|
@@ -166,7 +165,6 @@ var WALLETS = [
|
|
|
166
165
|
// src/lib/wallets/mappers.ts
|
|
167
166
|
var EVM_WALLET_ID_MAP = {
|
|
168
167
|
"app.phantom": "phantom",
|
|
169
|
-
"app.backpack": "backpack",
|
|
170
168
|
"com.trustwallet.app": "trust",
|
|
171
169
|
"com.binance.wallet": "binance",
|
|
172
170
|
"com.bitget.web3": "bitget",
|
|
@@ -193,7 +191,7 @@ var WC_CHAINS = {
|
|
|
193
191
|
SOLANA_MAINNET: "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp"
|
|
194
192
|
};
|
|
195
193
|
var WC_METHODS = {
|
|
196
|
-
EVM: ["eth_sendTransaction", "personal_sign", "eth_signTypedData"],
|
|
194
|
+
EVM: ["eth_sendTransaction", "personal_sign", "eth_signTypedData", "wallet_switchEthereumChain"],
|
|
197
195
|
SOLANA: ["solana_signTransaction", "solana_signMessage"]
|
|
198
196
|
};
|
|
199
197
|
var WC_EVENTS = {
|
|
@@ -583,6 +581,54 @@ var requestWalletConnect = async (method, params, chainId) => {
|
|
|
583
581
|
}
|
|
584
582
|
};
|
|
585
583
|
|
|
584
|
+
// src/lib/walletconnect/transactions.ts
|
|
585
|
+
var toHex = (value) => `0x${value.toString(16)}`;
|
|
586
|
+
var getWcChainId = (chainId) => `eip155:${chainId}`;
|
|
587
|
+
var wcSwitchChain = async (chainId) => {
|
|
588
|
+
const session = getCurrentSession();
|
|
589
|
+
if (!session) throw new Error("No WalletConnect session");
|
|
590
|
+
await requestWalletConnect(
|
|
591
|
+
"wallet_switchEthereumChain",
|
|
592
|
+
[{ chainId: toHex(chainId) }],
|
|
593
|
+
getWcChainId(chainId)
|
|
594
|
+
);
|
|
595
|
+
};
|
|
596
|
+
var wcSendTransaction = async (params) => {
|
|
597
|
+
const session = getCurrentSession();
|
|
598
|
+
if (!session) throw new Error("No WalletConnect session");
|
|
599
|
+
const txParams = {
|
|
600
|
+
from: params.from,
|
|
601
|
+
to: params.to
|
|
602
|
+
};
|
|
603
|
+
if (params.value) {
|
|
604
|
+
txParams.value = params.value;
|
|
605
|
+
}
|
|
606
|
+
if (params.data) {
|
|
607
|
+
txParams.data = params.data;
|
|
608
|
+
}
|
|
609
|
+
const hash = await requestWalletConnect(
|
|
610
|
+
"eth_sendTransaction",
|
|
611
|
+
[txParams],
|
|
612
|
+
getWcChainId(params.chainId)
|
|
613
|
+
);
|
|
614
|
+
return { hash };
|
|
615
|
+
};
|
|
616
|
+
var getWcEvmAddress = () => {
|
|
617
|
+
const session = getCurrentSession();
|
|
618
|
+
if (!session) return null;
|
|
619
|
+
const account = session.namespaces.eip155?.accounts?.[0];
|
|
620
|
+
if (!account) return null;
|
|
621
|
+
return account.split(":")[2];
|
|
622
|
+
};
|
|
623
|
+
var getWcEvmChainId = () => {
|
|
624
|
+
const session = getCurrentSession();
|
|
625
|
+
if (!session) return null;
|
|
626
|
+
const account = session.namespaces.eip155?.accounts?.[0];
|
|
627
|
+
if (!account) return null;
|
|
628
|
+
const chainId = account.split(":")[1];
|
|
629
|
+
return chainId ? parseInt(chainId, 10) : null;
|
|
630
|
+
};
|
|
631
|
+
|
|
586
632
|
// src/lib/connectors/shared/walletconnect.ts
|
|
587
633
|
var connectViaWalletConnect = async (wcConfig, parseSession, getDeeplink) => {
|
|
588
634
|
let qrUri = null;
|
|
@@ -938,11 +984,7 @@ var createBinanceSolanaDappBrowserConnector = () => createDappBrowserSolanaConne
|
|
|
938
984
|
});
|
|
939
985
|
|
|
940
986
|
// src/lib/connectors/okx.ts
|
|
941
|
-
var buildOkxBrowseUrl = () => {
|
|
942
|
-
const dappUrl = window.location.href;
|
|
943
|
-
const deepLink = `okx://wallet/dapp/url?dappUrl=${encodeURIComponent(dappUrl)}`;
|
|
944
|
-
return `https://web3.okx.com/download?deeplink=${encodeURIComponent(deepLink)}`;
|
|
945
|
-
};
|
|
987
|
+
var buildOkxBrowseUrl = () => `okx://wallet/dapp/url?dappUrl=${encodeURIComponent(window.location.href)}`;
|
|
946
988
|
var createOkxSolanaDappBrowserConnector = () => createDappBrowserSolanaConnector({
|
|
947
989
|
walletId: "okx",
|
|
948
990
|
injectedKey: "isOkxWallet",
|
|
@@ -1058,6 +1100,7 @@ var EVM_FALLBACK_CONNECTORS = [
|
|
|
1058
1100
|
{ id: "rainbow", create: createRainbowEvmMobileConnector },
|
|
1059
1101
|
{ id: "exodus", create: createExodusEvmMobileConnector }
|
|
1060
1102
|
];
|
|
1103
|
+
var sleep = (ms) => new Promise((r) => window.setTimeout(r, ms));
|
|
1061
1104
|
var cleanupWalletLocalStorage = () => {
|
|
1062
1105
|
Object.keys(window.localStorage).filter((key) => key.startsWith("wagmi.")).forEach((key) => window.localStorage.removeItem(key));
|
|
1063
1106
|
};
|
|
@@ -1072,11 +1115,21 @@ var getEvmConnectors = () => {
|
|
|
1072
1115
|
wallet: {
|
|
1073
1116
|
_connector: c,
|
|
1074
1117
|
connect: async () => {
|
|
1075
|
-
|
|
1076
|
-
|
|
1077
|
-
|
|
1078
|
-
|
|
1079
|
-
|
|
1118
|
+
try {
|
|
1119
|
+
const result = await connect(getEvmConfig(), { connector: c });
|
|
1120
|
+
if (!result.accounts[0]) throw new Error("No accounts returned");
|
|
1121
|
+
return connectedResult(result.accounts[0], { chainId: result.chainId });
|
|
1122
|
+
} catch (err) {
|
|
1123
|
+
if (err instanceof Error && err.name === "ConnectorAlreadyConnectedError") {
|
|
1124
|
+
cleanupWalletLocalStorage();
|
|
1125
|
+
await disconnect(getEvmConfig(), { connector: c });
|
|
1126
|
+
await sleep(100);
|
|
1127
|
+
const result = await connect(getEvmConfig(), { connector: c });
|
|
1128
|
+
if (!result.accounts[0]) throw new Error("No accounts returned");
|
|
1129
|
+
return connectedResult(result.accounts[0], { chainId: result.chainId });
|
|
1130
|
+
}
|
|
1131
|
+
throw err;
|
|
1132
|
+
}
|
|
1080
1133
|
},
|
|
1081
1134
|
disconnect: async () => {
|
|
1082
1135
|
cleanupWalletLocalStorage();
|
|
@@ -1097,6 +1150,71 @@ var watchEvmConnections = (onChange) => {
|
|
|
1097
1150
|
return watchConnections(getEvmConfig(), { onChange });
|
|
1098
1151
|
};
|
|
1099
1152
|
|
|
1153
|
+
// src/lib/evm/transactions.ts
|
|
1154
|
+
import {
|
|
1155
|
+
sendTransaction as wagmiSendTransaction,
|
|
1156
|
+
switchChain as wagmiSwitchChain,
|
|
1157
|
+
waitForTransactionReceipt as wagmiWaitForReceipt
|
|
1158
|
+
} from "@wagmi/core";
|
|
1159
|
+
var switchChain = async (chainId) => {
|
|
1160
|
+
await wagmiSwitchChain(getEvmConfig(), { chainId });
|
|
1161
|
+
};
|
|
1162
|
+
var sendTransaction = async (params) => {
|
|
1163
|
+
const hash = await wagmiSendTransaction(getEvmConfig(), {
|
|
1164
|
+
to: params.to,
|
|
1165
|
+
value: params.value,
|
|
1166
|
+
data: params.data
|
|
1167
|
+
});
|
|
1168
|
+
return { hash };
|
|
1169
|
+
};
|
|
1170
|
+
var waitForTransactionReceipt = async (hash) => {
|
|
1171
|
+
const receipt = await wagmiWaitForReceipt(getEvmConfig(), { hash });
|
|
1172
|
+
return {
|
|
1173
|
+
hash: receipt.transactionHash,
|
|
1174
|
+
status: receipt.status,
|
|
1175
|
+
blockNumber: receipt.blockNumber
|
|
1176
|
+
};
|
|
1177
|
+
};
|
|
1178
|
+
|
|
1179
|
+
// src/lib/evm/erc20.ts
|
|
1180
|
+
import { readContract, writeContract } from "@wagmi/core";
|
|
1181
|
+
import { erc20Abi } from "viem";
|
|
1182
|
+
var getAllowance = async (params) => {
|
|
1183
|
+
return readContract(getEvmConfig(), {
|
|
1184
|
+
abi: erc20Abi,
|
|
1185
|
+
address: params.tokenAddress,
|
|
1186
|
+
functionName: "allowance",
|
|
1187
|
+
args: [params.owner, params.spender]
|
|
1188
|
+
});
|
|
1189
|
+
};
|
|
1190
|
+
var approve = async (params) => {
|
|
1191
|
+
const hash = await writeContract(getEvmConfig(), {
|
|
1192
|
+
address: params.tokenAddress,
|
|
1193
|
+
abi: erc20Abi,
|
|
1194
|
+
functionName: "approve",
|
|
1195
|
+
args: [params.spender, params.amount]
|
|
1196
|
+
});
|
|
1197
|
+
return waitForTransactionReceipt(hash);
|
|
1198
|
+
};
|
|
1199
|
+
var ensureAllowance = async (params) => {
|
|
1200
|
+
const currentAllowance = await getAllowance({
|
|
1201
|
+
tokenAddress: params.tokenAddress,
|
|
1202
|
+
owner: params.owner,
|
|
1203
|
+
spender: params.spender
|
|
1204
|
+
});
|
|
1205
|
+
if (currentAllowance >= params.amount) {
|
|
1206
|
+
return null;
|
|
1207
|
+
}
|
|
1208
|
+
if (currentAllowance > 0n) {
|
|
1209
|
+
await approve({
|
|
1210
|
+
tokenAddress: params.tokenAddress,
|
|
1211
|
+
spender: params.spender,
|
|
1212
|
+
amount: 0n
|
|
1213
|
+
});
|
|
1214
|
+
}
|
|
1215
|
+
return approve(params);
|
|
1216
|
+
};
|
|
1217
|
+
|
|
1100
1218
|
// src/lib/solana/connection.ts
|
|
1101
1219
|
var currentConnection = {
|
|
1102
1220
|
connection: null,
|
|
@@ -1393,6 +1511,60 @@ var useEvmWallet = (options) => {
|
|
|
1393
1511
|
};
|
|
1394
1512
|
};
|
|
1395
1513
|
|
|
1514
|
+
// src/lib/context/hooks/useEvmTransactions.ts
|
|
1515
|
+
var useEvmTransactions = (hasWcSession) => {
|
|
1516
|
+
const isWc = () => hasWcSession() && getCurrentSession();
|
|
1517
|
+
const switchChain2 = async (chainId) => {
|
|
1518
|
+
if (isWc()) {
|
|
1519
|
+
await wcSwitchChain(chainId);
|
|
1520
|
+
} else {
|
|
1521
|
+
await switchChain(chainId);
|
|
1522
|
+
}
|
|
1523
|
+
};
|
|
1524
|
+
const sendTransaction2 = async (params) => {
|
|
1525
|
+
if (isWc()) {
|
|
1526
|
+
const address = getWcEvmAddress();
|
|
1527
|
+
if (!address) throw new Error("No WalletConnect EVM address");
|
|
1528
|
+
const chainId = getWcEvmChainId();
|
|
1529
|
+
if (!chainId) throw new Error("No WalletConnect chain ID");
|
|
1530
|
+
const result = await wcSendTransaction({
|
|
1531
|
+
from: address,
|
|
1532
|
+
to: params.to,
|
|
1533
|
+
value: params.value !== void 0 ? `0x${params.value.toString(16)}` : void 0,
|
|
1534
|
+
data: params.data,
|
|
1535
|
+
chainId
|
|
1536
|
+
});
|
|
1537
|
+
return { hash: result.hash };
|
|
1538
|
+
}
|
|
1539
|
+
return sendTransaction(params);
|
|
1540
|
+
};
|
|
1541
|
+
const sendAndWait = async (params) => {
|
|
1542
|
+
const { hash } = await sendTransaction2(params);
|
|
1543
|
+
return waitForTransactionReceipt(hash);
|
|
1544
|
+
};
|
|
1545
|
+
const approve2 = async (params) => {
|
|
1546
|
+
if (isWc()) {
|
|
1547
|
+
throw new Error("ERC20 approve via WalletConnect not yet supported");
|
|
1548
|
+
}
|
|
1549
|
+
return approve(params);
|
|
1550
|
+
};
|
|
1551
|
+
const ensureAllowance2 = async (params) => {
|
|
1552
|
+
if (isWc()) {
|
|
1553
|
+
throw new Error("ERC20 ensureAllowance via WalletConnect not yet supported");
|
|
1554
|
+
}
|
|
1555
|
+
return ensureAllowance(params);
|
|
1556
|
+
};
|
|
1557
|
+
return {
|
|
1558
|
+
switchChain: switchChain2,
|
|
1559
|
+
sendTransaction: sendTransaction2,
|
|
1560
|
+
sendAndWait,
|
|
1561
|
+
waitForReceipt: waitForTransactionReceipt,
|
|
1562
|
+
approve: approve2,
|
|
1563
|
+
ensureAllowance: ensureAllowance2,
|
|
1564
|
+
getAllowance
|
|
1565
|
+
};
|
|
1566
|
+
};
|
|
1567
|
+
|
|
1396
1568
|
// src/lib/context/hooks/useSolanaWallet.ts
|
|
1397
1569
|
import { createSignal as createSignal2, onCleanup as onCleanup2, onMount as onMount2 } from "solid-js";
|
|
1398
1570
|
var useSolanaWallet = () => {
|
|
@@ -1402,13 +1574,16 @@ var useSolanaWallet = () => {
|
|
|
1402
1574
|
null
|
|
1403
1575
|
);
|
|
1404
1576
|
onMount2(() => {
|
|
1405
|
-
const connectors = getSolanaWallets();
|
|
1406
1577
|
const wcConnector = createWalletConnectSolanaConnector();
|
|
1407
|
-
|
|
1408
|
-
connectors
|
|
1409
|
-
|
|
1410
|
-
|
|
1411
|
-
|
|
1578
|
+
const getConnectorsWithWc = () => {
|
|
1579
|
+
const connectors = getSolanaWallets();
|
|
1580
|
+
if (wcConnector) connectors.unshift(wcConnector);
|
|
1581
|
+
return connectors;
|
|
1582
|
+
};
|
|
1583
|
+
setSolanaConnectors(getConnectorsWithWc());
|
|
1584
|
+
const unsubscribeWallets = onSolanaWalletsChange(() => {
|
|
1585
|
+
setSolanaConnectors(getConnectorsWithWc());
|
|
1586
|
+
});
|
|
1412
1587
|
const unsubscribeConnection = watchSolanaConnection((state) => {
|
|
1413
1588
|
setSolanaConnection(state.connection);
|
|
1414
1589
|
if (state.connector) {
|
|
@@ -1540,6 +1715,7 @@ var WalletProvider = (props) => {
|
|
|
1540
1715
|
onEvmConnection: evm.setEvmConnection,
|
|
1541
1716
|
onSolanaConnection: solana.setSolanaConnection
|
|
1542
1717
|
});
|
|
1718
|
+
const evmTx = useEvmTransactions(wc.hasWcEvmSession);
|
|
1543
1719
|
const disconnectEvm = async () => {
|
|
1544
1720
|
if (evm.connectedEvmConnector()) {
|
|
1545
1721
|
await evm.disconnectEvm();
|
|
@@ -1605,7 +1781,8 @@ var WalletProvider = (props) => {
|
|
|
1605
1781
|
disconnectEvm,
|
|
1606
1782
|
connectSolana: solana.connectSolana,
|
|
1607
1783
|
disconnectSolana,
|
|
1608
|
-
signMessage
|
|
1784
|
+
signMessage,
|
|
1785
|
+
evmTx
|
|
1609
1786
|
};
|
|
1610
1787
|
return <WalletContext.Provider value={value}>{props.children}</WalletContext.Provider>;
|
|
1611
1788
|
};
|
|
@@ -3,7 +3,7 @@ export declare const WC_CHAINS: {
|
|
|
3
3
|
readonly SOLANA_MAINNET: "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp";
|
|
4
4
|
};
|
|
5
5
|
export declare const WC_METHODS: {
|
|
6
|
-
readonly EVM: readonly ["eth_sendTransaction", "personal_sign", "eth_signTypedData"];
|
|
6
|
+
readonly EVM: readonly ["eth_sendTransaction", "personal_sign", "eth_signTypedData", "wallet_switchEthereumChain"];
|
|
7
7
|
readonly SOLANA: readonly ["solana_signTransaction", "solana_signMessage"];
|
|
8
8
|
};
|
|
9
9
|
export declare const WC_EVENTS: {
|
|
@@ -12,7 +12,7 @@ export declare const WC_EVENTS: {
|
|
|
12
12
|
};
|
|
13
13
|
export declare const EVM_WC_CONFIG: {
|
|
14
14
|
readonly chains: readonly ["eip155:1"];
|
|
15
|
-
readonly methods: readonly ["eth_sendTransaction", "personal_sign", "eth_signTypedData"];
|
|
15
|
+
readonly methods: readonly ["eth_sendTransaction", "personal_sign", "eth_signTypedData", "wallet_switchEthereumChain"];
|
|
16
16
|
readonly events: readonly ["chainChanged", "accountsChanged"];
|
|
17
17
|
};
|
|
18
18
|
export declare const SOLANA_WC_CONFIG: {
|
|
@@ -3,6 +3,7 @@ import { type ChainType, type ConnectedResult, type ConnectResult, type GroupedW
|
|
|
3
3
|
import { type EvmChains, type EvmWalletConnector } from '../evm';
|
|
4
4
|
import { type SolanaWalletConnector } from '../solana';
|
|
5
5
|
import { type WalletConnectConfig } from '../walletconnect';
|
|
6
|
+
import { type UseEvmTransactionsReturn } from './hooks';
|
|
6
7
|
export interface WalletContextValue {
|
|
7
8
|
evmConnectors: Accessor<EvmWalletConnector[]>;
|
|
8
9
|
evmConnection: Accessor<ConnectedResult | null>;
|
|
@@ -14,6 +15,7 @@ export interface WalletContextValue {
|
|
|
14
15
|
connectSolana: (connector: SolanaWalletConnector) => Promise<ConnectResult>;
|
|
15
16
|
disconnectSolana: () => Promise<void>;
|
|
16
17
|
signMessage: (chainType: ChainType, message: string) => Promise<string>;
|
|
18
|
+
evmTx: UseEvmTransactionsReturn;
|
|
17
19
|
}
|
|
18
20
|
export interface WalletProviderProps {
|
|
19
21
|
evmChains: EvmChains;
|
|
@@ -1,3 +1,4 @@
|
|
|
1
1
|
export { useEvmWallet, type UseEvmWalletReturn } from './useEvmWallet';
|
|
2
|
+
export { useEvmTransactions, type UseEvmTransactionsReturn } from './useEvmTransactions';
|
|
2
3
|
export { useSolanaWallet, type UseSolanaWalletReturn } from './useSolanaWallet';
|
|
3
4
|
export { useWalletConnect, type UseWalletConnectOptions, type UseWalletConnectReturn, } from './useWalletConnect';
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { type ApproveParams, type HashAddress, type SendTransactionParams, type TransactionReceipt, type TransactionResult } from '../../evm';
|
|
2
|
+
export interface UseEvmTransactionsReturn {
|
|
3
|
+
switchChain: (chainId: number) => Promise<void>;
|
|
4
|
+
sendTransaction: (params: SendTransactionParams) => Promise<TransactionResult>;
|
|
5
|
+
sendAndWait: (params: SendTransactionParams) => Promise<TransactionReceipt>;
|
|
6
|
+
waitForReceipt: (hash: HashAddress) => Promise<TransactionReceipt>;
|
|
7
|
+
approve: (params: ApproveParams) => Promise<TransactionReceipt>;
|
|
8
|
+
ensureAllowance: (params: ApproveParams & {
|
|
9
|
+
owner: HashAddress;
|
|
10
|
+
}) => Promise<TransactionReceipt | null>;
|
|
11
|
+
getAllowance: (params: {
|
|
12
|
+
tokenAddress: HashAddress;
|
|
13
|
+
owner: HashAddress;
|
|
14
|
+
spender: HashAddress;
|
|
15
|
+
}) => Promise<bigint>;
|
|
16
|
+
}
|
|
17
|
+
export declare const useEvmTransactions: (hasWcSession: () => boolean) => UseEvmTransactionsReturn;
|
package/dist/lib/core/types.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { EvmWalletConnector } from '../evm';
|
|
2
2
|
import { SolanaWalletConnector } from '../solana';
|
|
3
|
+
import { WalletId } from '../wallets';
|
|
3
4
|
export type ChainType = 'evm' | 'solana';
|
|
4
5
|
export interface ConnectedResult {
|
|
5
6
|
status: 'connected';
|
|
@@ -22,7 +23,7 @@ export interface Wallet {
|
|
|
22
23
|
signMessage: (message: string) => Promise<string>;
|
|
23
24
|
}
|
|
24
25
|
export interface WalletConnector {
|
|
25
|
-
id:
|
|
26
|
+
id: WalletId;
|
|
26
27
|
name: string;
|
|
27
28
|
icon?: string;
|
|
28
29
|
type: ChainType;
|
|
@@ -30,7 +31,7 @@ export interface WalletConnector {
|
|
|
30
31
|
wallet: Wallet;
|
|
31
32
|
}
|
|
32
33
|
export interface GroupedWallet {
|
|
33
|
-
id:
|
|
34
|
+
id: WalletId;
|
|
34
35
|
name: string;
|
|
35
36
|
icon: string;
|
|
36
37
|
chromeExtensionUrl?: string;
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { type HashAddress, type TransactionReceipt } from './transactions';
|
|
2
|
+
export interface ApproveParams {
|
|
3
|
+
tokenAddress: HashAddress;
|
|
4
|
+
spender: HashAddress;
|
|
5
|
+
amount: bigint;
|
|
6
|
+
}
|
|
7
|
+
export interface GetAllowanceParams {
|
|
8
|
+
tokenAddress: HashAddress;
|
|
9
|
+
owner: HashAddress;
|
|
10
|
+
spender: HashAddress;
|
|
11
|
+
}
|
|
12
|
+
export declare const getAllowance: (params: GetAllowanceParams) => Promise<bigint>;
|
|
13
|
+
export declare const approve: (params: ApproveParams) => Promise<TransactionReceipt>;
|
|
14
|
+
export declare const approveWithReset: (params: ApproveParams & {
|
|
15
|
+
owner: HashAddress;
|
|
16
|
+
}) => Promise<TransactionReceipt>;
|
|
17
|
+
export declare const ensureAllowance: (params: ApproveParams & {
|
|
18
|
+
owner: HashAddress;
|
|
19
|
+
}) => Promise<TransactionReceipt | null>;
|
package/dist/lib/evm/index.d.ts
CHANGED
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
export { createEvmConfig, getEvmConfig, type Config, type EvmChains } from './config';
|
|
2
2
|
export { getEvmConnectors } from './connectors';
|
|
3
3
|
export { watchEvmConnections } from './connection';
|
|
4
|
+
export { sendTransaction, sendAndWaitTransaction, switchChain, waitForTransactionReceipt, type HashAddress, type SendTransactionParams, type TransactionReceipt, type TransactionResult, } from './transactions';
|
|
5
|
+
export { approve, approveWithReset, ensureAllowance, getAllowance, type ApproveParams, type GetAllowanceParams, } from './erc20';
|
|
4
6
|
export type { EvmWallet, EvmWalletConnector } from './types';
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
export type HashAddress = `0x${string}`;
|
|
2
|
+
export interface SendTransactionParams {
|
|
3
|
+
to: HashAddress;
|
|
4
|
+
value?: bigint;
|
|
5
|
+
data?: HashAddress;
|
|
6
|
+
}
|
|
7
|
+
export interface TransactionResult {
|
|
8
|
+
hash: HashAddress;
|
|
9
|
+
}
|
|
10
|
+
export interface TransactionReceipt {
|
|
11
|
+
hash: HashAddress;
|
|
12
|
+
status: 'success' | 'reverted';
|
|
13
|
+
blockNumber: bigint;
|
|
14
|
+
}
|
|
15
|
+
export declare const switchChain: (chainId: number) => Promise<void>;
|
|
16
|
+
export declare const sendTransaction: (params: SendTransactionParams) => Promise<TransactionResult>;
|
|
17
|
+
export declare const waitForTransactionReceipt: (hash: HashAddress) => Promise<TransactionReceipt>;
|
|
18
|
+
export declare const sendAndWaitTransaction: (params: SendTransactionParams) => Promise<TransactionReceipt>;
|
|
@@ -1 +1,2 @@
|
|
|
1
1
|
export { connectWalletConnect, type ConnectOptions, disconnectWalletConnect, getCurrentSession, getSignClient, initWalletConnect, onWalletConnectSessionChange, requestWalletConnect, setCurrentSession, type WalletConnectConfig, type WalletConnectSession, } from './client';
|
|
2
|
+
export { getWcEvmAddress, getWcEvmChainId, wcSendTransaction, wcSwitchChain, type WcSendTransactionParams, type WcTransactionResult, } from './transactions';
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { type HashAddress } from '../evm';
|
|
2
|
+
export interface WcSendTransactionParams {
|
|
3
|
+
from: HashAddress;
|
|
4
|
+
to: HashAddress;
|
|
5
|
+
value?: string;
|
|
6
|
+
data?: HashAddress;
|
|
7
|
+
chainId: number;
|
|
8
|
+
}
|
|
9
|
+
export interface WcTransactionResult {
|
|
10
|
+
hash: HashAddress;
|
|
11
|
+
}
|
|
12
|
+
export declare const wcSwitchChain: (chainId: number) => Promise<void>;
|
|
13
|
+
export declare const wcSendTransaction: (params: WcSendTransactionParams) => Promise<WcTransactionResult>;
|
|
14
|
+
export declare const getWcEvmAddress: () => HashAddress | null;
|
|
15
|
+
export declare const getWcEvmChainId: () => number | null;
|
|
@@ -1,2 +1,3 @@
|
|
|
1
|
-
|
|
2
|
-
export declare const
|
|
1
|
+
import { type WalletId } from './config';
|
|
2
|
+
export declare const normalizeEvmWalletId: (id: string) => WalletId;
|
|
3
|
+
export declare const normalizeSolanaWalletId: (id: string) => WalletId;
|