@bit-buccaneers/wallet-abstraction 0.0.10 → 0.0.12

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 CHANGED
@@ -1,6 +1,6 @@
1
1
  import { injected, metaMask, coinbaseWallet } from '@wagmi/connectors';
2
- import { createConfig, getConnectors, signMessage, disconnect, getConnections, connect, watchConnections } from '@wagmi/core';
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
- const connections = getConnections(getEvmConfig());
1064
- if (connections.length > 0) await disconnect(getEvmConfig());
1065
- const result = await connect(getEvmConfig(), { connector: c });
1066
- if (!result.accounts[0]) throw new Error("No accounts returned");
1067
- return connectedResult(result.accounts[0], { chainId: result.chainId });
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 = {
@@ -1222,8 +1330,8 @@ var getSolanaWallets = () => {
1222
1330
  const connectors = wallets.filter(isWalletAdapterCompatibleStandardWallet).filter((w) => {
1223
1331
  return w.constructor.name !== "SolflareMetaMaskWallet";
1224
1332
  }).map(createSolanaConnector);
1225
- console.log({ wallets });
1226
- console.log({ connectors });
1333
+ console.log("wallets", { wallets });
1334
+ console.log("connectors", { connectors });
1227
1335
  addFallbackConnectors(connectors, SOLANA_FALLBACK_CONNECTORS);
1228
1336
  return connectors;
1229
1337
  };
@@ -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
- if (wcConnector) {
1376
- connectors.unshift(wcConnector);
1377
- }
1378
- setSolanaConnectors(connectors);
1379
- const unsubscribeWallets = onSolanaWalletsChange(setSolanaConnectors);
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
- const connections = getConnections(getEvmConfig());
1081
- if (connections.length > 0) await disconnect(getEvmConfig());
1082
- const result = await connect(getEvmConfig(), { connector: c });
1083
- if (!result.accounts[0]) throw new Error("No accounts returned");
1084
- return connectedResult(result.accounts[0], { chainId: result.chainId });
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,
@@ -1249,8 +1367,8 @@ var getSolanaWallets = () => {
1249
1367
  const connectors = wallets.filter(isWalletAdapterCompatibleStandardWallet).filter((w) => {
1250
1368
  return w.constructor.name !== "SolflareMetaMaskWallet";
1251
1369
  }).map(createSolanaConnector);
1252
- console.log({ wallets });
1253
- console.log({ connectors });
1370
+ console.log("wallets", { wallets });
1371
+ console.log("connectors", { connectors });
1254
1372
  addFallbackConnectors(connectors, SOLANA_FALLBACK_CONNECTORS);
1255
1373
  return connectors;
1256
1374
  };
@@ -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
- if (wcConnector) {
1415
- connectors.unshift(wcConnector);
1416
- }
1417
- setSolanaConnectors(connectors);
1418
- const unsubscribeWallets = onSolanaWalletsChange(setSolanaConnectors);
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
  };