@bit-buccaneers/wallet-abstraction 0.0.16 → 0.0.18

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.jsx CHANGED
@@ -383,8 +383,8 @@ var parseEvmAccount = (account) => {
383
383
  var parseSolanaAccount = async (account) => {
384
384
  const address = account.split(":")[2];
385
385
  if (!address) throw new Error("Invalid Solana account format");
386
- const { default: bs587 } = await import("bs58");
387
- return connectedResult(address, { publicKey: bs587.decode(address) });
386
+ const { default: bs588 } = await import("bs58");
387
+ return connectedResult(address, { publicKey: bs588.decode(address) });
388
388
  };
389
389
  var getEvmAccountFromSession = (namespaces) => {
390
390
  const account = namespaces.eip155?.accounts?.[0];
@@ -807,6 +807,7 @@ var METAMASK_CONFIG = {
807
807
  };
808
808
  var METAMASK_BROWSE_URL = "https://metamask.app.link/dapp";
809
809
  var createMetaMaskEvmConnector = () => createWcEvmConnector(METAMASK_CONFIG);
810
+ var createMetaMaskSolanaConnector = () => createDownloadOnlySolanaConnector({ walletId: "metamask" });
810
811
  var createMetaMaskSolanaDappBrowserConnector = () => createDappBrowserSolanaConnector({
811
812
  walletId: "metamask",
812
813
  browseUrl: METAMASK_BROWSE_URL,
@@ -908,242 +909,8 @@ var createOkxSolanaDappBrowserConnector = () => createDappBrowserSolanaConnector
908
909
  });
909
910
 
910
911
  // src/lib/connectors/coinbase.ts
911
- var buildCoinbaseBrowseUrl = () => `cbwallet://dapp?url=${encodeURIComponent(window.location.href)}`;
912
- var createCoinbaseSolanaDappBrowserConnector = () => createDappBrowserSolanaConnector({
913
- walletId: "coinbase",
914
- injectedKey: "isCoinbaseWallet",
915
- buildUrl: buildCoinbaseBrowseUrl
916
- });
917
-
918
- // src/lib/connectors/bitget.ts
919
- var BITGET_CONFIG = {
920
- walletId: "bitget",
921
- wcDeeplink: "bitkeep://bkconnect",
922
- injectedKey: "isBitKeep"
923
- };
924
- var buildBitgetBrowseUrl = () => `https://bkcode.vip?action=dapp&url=${encodeURIComponent(window.location.href)}`;
925
- var createBitgetSolanaConnector = () => createWcSolanaConnector(BITGET_CONFIG);
926
- var createBitgetSolanaDappBrowserConnector = () => createDappBrowserSolanaConnector({
927
- walletId: "bitget",
928
- injectedKey: "isBitKeep",
929
- buildUrl: buildBitgetBrowseUrl
930
- });
931
-
932
- // src/lib/connectors/walletconnect.ts
933
- import bs584 from "bs58";
934
- var walletConfig = WALLETS.find((w) => w.id === "walletconnect");
935
- var disconnectWc2 = async () => {
936
- if (getCurrentSession()) {
937
- await disconnectWalletConnect();
938
- }
939
- };
940
- var createWalletConnectEvmConnector = () => {
941
- return {
942
- id: walletConfig.id,
943
- name: walletConfig.name,
944
- icon: walletConfig.icon,
945
- type: "evm",
946
- installed: false,
947
- wallet: {
948
- _connector: null,
949
- connect: async () => {
950
- return connectViaWalletConnect(EVM_WC_CONFIG, getEvmAccountFromSession);
951
- },
952
- disconnect: disconnectWc2,
953
- signMessage: async (message) => {
954
- const session = getCurrentSession();
955
- if (!session) {
956
- throw new Error("No WalletConnect session");
957
- }
958
- const account = session.namespaces.eip155?.accounts?.[0];
959
- if (!account) {
960
- throw new Error("No EVM account in session");
961
- }
962
- const address = account.split(":")[2];
963
- const result = await requestWalletConnect(
964
- "personal_sign",
965
- [message, address],
966
- WC_CHAINS.EVM_MAINNET
967
- );
968
- return result;
969
- }
970
- }
971
- };
972
- };
973
- var createWalletConnectSolanaConnector = () => {
974
- return {
975
- id: walletConfig.id,
976
- name: walletConfig.name,
977
- icon: walletConfig.icon,
978
- type: "solana",
979
- installed: false,
980
- wallet: {
981
- _provider: null,
982
- connect: async () => {
983
- return connectViaWalletConnect(SOLANA_WC_CONFIG, getSolanaAccountFromSession);
984
- },
985
- disconnect: disconnectWc2,
986
- signMessage: async (message) => {
987
- const session = getCurrentSession();
988
- if (!session) {
989
- throw new Error("No WalletConnect session");
990
- }
991
- const account = session.namespaces.solana?.accounts?.[0];
992
- if (!account) {
993
- throw new Error("No Solana account in session");
994
- }
995
- const pubkey = account.split(":")[2];
996
- const messageBytes = new TextEncoder().encode(message);
997
- const result = await requestWalletConnect(
998
- "solana_signMessage",
999
- { message: bs584.encode(messageBytes), pubkey },
1000
- WC_CHAINS.SOLANA_MAINNET
1001
- );
1002
- return result.signature;
1003
- }
1004
- }
1005
- };
1006
- };
1007
-
1008
- // src/lib/evm/connectors.ts
1009
- var EVM_FALLBACK_CONNECTORS = [
1010
- {
1011
- id: "phantom",
1012
- create: isMobile() ? createPhantomEvmConnectorDeeplink : createPhantomEvmConnector
1013
- },
1014
- ...isMobile() ? [] : [{ id: "metamask", create: createMetaMaskEvmConnector }],
1015
- { id: "trust", create: createTrustEvmMobileConnector },
1016
- { id: "binance", create: createBinanceEvmConnector },
1017
- { id: "okx", create: createOkxEvmConnector },
1018
- { id: "rainbow", create: createRainbowEvmMobileConnector },
1019
- ...isMobile() ? [] : [{ id: "rabby", create: createRabbyEvmConnector }]
1020
- ];
1021
- var sleep = (ms) => new Promise((r) => window.setTimeout(r, ms));
1022
- var checkEvmWalletInstalled = (connectorId) => {
1023
- if (typeof window === "undefined" || !window.ethereum) return false;
1024
- const providers = window.ethereum.providers ?? [window.ethereum];
1025
- switch (connectorId) {
1026
- case "metaMaskSDK":
1027
- return providers.some((p) => p.isMetaMask && !p.isBraveWallet);
1028
- case "coinbaseWalletSDK":
1029
- return providers.some((p) => p.isCoinbaseWallet);
1030
- default:
1031
- return true;
1032
- }
1033
- };
1034
- var cleanupWalletLocalStorage = () => {
1035
- Object.keys(window.localStorage).filter((key) => key.startsWith("wagmi.")).forEach((key) => window.localStorage.removeItem(key));
1036
- };
1037
- var getEvmConnectors = () => {
1038
- const wagmiConnectors = getConnectors(getEvmConfig());
1039
- const connectors = wagmiConnectors.map((c) => ({
1040
- id: normalizeEvmWalletId(c.id),
1041
- name: c.name,
1042
- icon: c.icon,
1043
- type: "evm",
1044
- installed: checkEvmWalletInstalled(c.id),
1045
- wallet: {
1046
- _connector: c,
1047
- connect: async () => {
1048
- try {
1049
- const result = await connect(getEvmConfig(), { connector: c });
1050
- if (!result.accounts[0]) throw new Error("No accounts returned");
1051
- return connectedResult(result.accounts[0], { chainId: result.chainId });
1052
- } catch (err) {
1053
- if (err instanceof Error && err.name === "ConnectorAlreadyConnectedError") {
1054
- cleanupWalletLocalStorage();
1055
- await disconnect(getEvmConfig(), { connector: c });
1056
- await sleep(100);
1057
- const result = await connect(getEvmConfig(), { connector: c });
1058
- if (!result.accounts[0]) throw new Error("No accounts returned");
1059
- return connectedResult(result.accounts[0], { chainId: result.chainId });
1060
- }
1061
- throw err;
1062
- }
1063
- },
1064
- disconnect: async () => {
1065
- cleanupWalletLocalStorage();
1066
- await disconnect(getEvmConfig());
1067
- },
1068
- signMessage: async (message) => {
1069
- return wagmiSignMessage(getEvmConfig(), { message });
1070
- }
1071
- }
1072
- }));
1073
- addFallbackConnectors(connectors, EVM_FALLBACK_CONNECTORS);
1074
- return connectors;
1075
- };
1076
-
1077
- // src/lib/evm/connection.ts
1078
- import { watchConnections } from "@wagmi/core";
1079
- var watchEvmConnections = (onChange) => {
1080
- return watchConnections(getEvmConfig(), { onChange });
1081
- };
1082
-
1083
- // src/lib/evm/transactions.ts
1084
- import {
1085
- sendTransaction as wagmiSendTransaction,
1086
- switchChain as wagmiSwitchChain,
1087
- waitForTransactionReceipt as wagmiWaitForReceipt
1088
- } from "@wagmi/core";
1089
- var switchChain = async (chainId) => {
1090
- await wagmiSwitchChain(getEvmConfig(), { chainId });
1091
- };
1092
- var sendTransaction = async (params) => {
1093
- const hash = await wagmiSendTransaction(getEvmConfig(), {
1094
- to: params.to,
1095
- value: params.value,
1096
- data: params.data
1097
- });
1098
- return { hash };
1099
- };
1100
- var waitForTransactionReceipt = async (hash) => {
1101
- const receipt = await wagmiWaitForReceipt(getEvmConfig(), { hash });
1102
- return {
1103
- hash: receipt.transactionHash,
1104
- status: receipt.status,
1105
- blockNumber: receipt.blockNumber
1106
- };
1107
- };
1108
-
1109
- // src/lib/evm/erc20.ts
1110
- import { readContract, writeContract } from "@wagmi/core";
1111
- import { erc20Abi } from "viem";
1112
- var getAllowance = async (params) => {
1113
- return readContract(getEvmConfig(), {
1114
- abi: erc20Abi,
1115
- address: params.tokenAddress,
1116
- functionName: "allowance",
1117
- args: [params.owner, params.spender]
1118
- });
1119
- };
1120
- var approve = async (params) => {
1121
- const hash = await writeContract(getEvmConfig(), {
1122
- address: params.tokenAddress,
1123
- abi: erc20Abi,
1124
- functionName: "approve",
1125
- args: [params.spender, params.amount]
1126
- });
1127
- return waitForTransactionReceipt(hash);
1128
- };
1129
- var ensureAllowance = async (params) => {
1130
- const currentAllowance = await getAllowance({
1131
- tokenAddress: params.tokenAddress,
1132
- owner: params.owner,
1133
- spender: params.spender
1134
- });
1135
- if (currentAllowance >= params.amount) {
1136
- return null;
1137
- }
1138
- if (currentAllowance > 0n) {
1139
- await approve({
1140
- tokenAddress: params.tokenAddress,
1141
- spender: params.spender,
1142
- amount: 0n
1143
- });
1144
- }
1145
- return approve(params);
1146
- };
912
+ import { CoinbaseWalletAdapter } from "@solana/wallet-adapter-coinbase";
913
+ import bs585 from "bs58";
1147
914
 
1148
915
  // src/lib/solana/connection.ts
1149
916
  var currentConnection = {
@@ -1171,7 +938,7 @@ import {
1171
938
  isWalletAdapterCompatibleStandardWallet
1172
939
  } from "@solana/wallet-adapter-base";
1173
940
  import { getWallets } from "@wallet-standard/app";
1174
- import bs585 from "bs58";
941
+ import bs584 from "bs58";
1175
942
  var createSolanaConnector = (provider) => {
1176
943
  const id = normalizeSolanaWalletId(provider.name.toLowerCase().replace(/\s+/g, "-"));
1177
944
  const connector = {
@@ -1215,7 +982,7 @@ var createSolanaConnector = (provider) => {
1215
982
  const result = await signFeature.signMessage({ message: encodedMessage, account });
1216
983
  const signature = result[0]?.signature;
1217
984
  if (!signature) throw new Error("No signature returned");
1218
- return bs585.encode(signature);
985
+ return bs584.encode(signature);
1219
986
  }
1220
987
  }
1221
988
  };
@@ -1266,6 +1033,10 @@ var SOLANA_FALLBACK_CONNECTORS = isMobile() ? [
1266
1033
  create: () => createSolanaMobileConnector(createBinanceSolanaDappBrowserConnector())
1267
1034
  }
1268
1035
  ] : [
1036
+ {
1037
+ id: "metamask",
1038
+ create: () => createSolanaMobileConnector(createMetaMaskSolanaConnector())
1039
+ },
1269
1040
  { id: "phantom", create: () => createSolanaMobileConnector(createPhantomSolanaConnector()) },
1270
1041
  {
1271
1042
  id: "solflare",
@@ -1276,8 +1047,12 @@ var SOLANA_FALLBACK_CONNECTORS = isMobile() ? [
1276
1047
  create: () => createSolanaMobileConnector(createTrustSolanaMobileConnector())
1277
1048
  },
1278
1049
  { id: "binance", create: () => createSolanaMobileConnector(createBinanceSolanaConnector()) },
1279
- { id: "bitget", create: createBitgetSolanaConnector },
1280
- { id: "okx", create: createOkxSolanaConnector }
1050
+ { id: "bitget", create: () => createSolanaMobileConnector(createBitgetSolanaConnector()) },
1051
+ { id: "okx", create: () => createSolanaMobileConnector(createOkxSolanaConnector()) },
1052
+ {
1053
+ id: "coinbase",
1054
+ create: () => createSolanaMobileConnector(createCoinbaseSolanaConnector())
1055
+ }
1281
1056
  ];
1282
1057
  var getSolanaWallets = () => {
1283
1058
  const { get } = getWallets();
@@ -1383,6 +1158,283 @@ var checkSolflareSignCallback = () => {
1383
1158
  return handleSolflareSignCallback();
1384
1159
  };
1385
1160
 
1161
+ // src/lib/connectors/coinbase.ts
1162
+ var buildCoinbaseBrowseUrl = () => `cbwallet://dapp?url=${encodeURIComponent(window.location.href)}`;
1163
+ var createCoinbaseSolanaDappBrowserConnector = () => createDappBrowserSolanaConnector({
1164
+ walletId: "coinbase",
1165
+ injectedKey: "isCoinbaseWallet",
1166
+ buildUrl: buildCoinbaseBrowseUrl
1167
+ });
1168
+ var createCoinbaseSolanaConnector = () => {
1169
+ const walletConfig2 = WALLETS.find((w) => w.id === "coinbase");
1170
+ const adapter = new CoinbaseWalletAdapter();
1171
+ const connector = {
1172
+ id: "coinbase",
1173
+ name: walletConfig2.name,
1174
+ icon: walletConfig2.icon,
1175
+ type: "solana",
1176
+ installed: adapter.readyState === "Installed",
1177
+ wallet: {
1178
+ _provider: adapter,
1179
+ connect: async () => {
1180
+ await adapter.connect();
1181
+ if (!adapter.publicKey) {
1182
+ throw new Error("No public key returned from Coinbase Wallet");
1183
+ }
1184
+ const address = adapter.publicKey.toBase58();
1185
+ const result = connectedResult(address, {
1186
+ publicKey: adapter.publicKey.toBytes()
1187
+ });
1188
+ storage.setString(STORAGE_KEYS.SOLANA_WALLET, "coinbase");
1189
+ setConnection(result, connector);
1190
+ return result;
1191
+ },
1192
+ disconnect: async () => {
1193
+ await adapter.disconnect();
1194
+ },
1195
+ signMessage: async (message) => {
1196
+ const encodedMessage = new TextEncoder().encode(message);
1197
+ const signature = await adapter.signMessage(encodedMessage);
1198
+ return bs585.encode(signature);
1199
+ }
1200
+ }
1201
+ };
1202
+ return connector;
1203
+ };
1204
+
1205
+ // src/lib/connectors/bitget.ts
1206
+ var BITGET_CONFIG = {
1207
+ walletId: "bitget",
1208
+ wcDeeplink: "bitkeep://bkconnect",
1209
+ injectedKey: "isBitKeep"
1210
+ };
1211
+ var buildBitgetBrowseUrl = () => `https://bkcode.vip?action=dapp&url=${encodeURIComponent(window.location.href)}`;
1212
+ var createBitgetSolanaConnector = () => createWcSolanaConnector(BITGET_CONFIG);
1213
+ var createBitgetSolanaDappBrowserConnector = () => createDappBrowserSolanaConnector({
1214
+ walletId: "bitget",
1215
+ injectedKey: "isBitKeep",
1216
+ buildUrl: buildBitgetBrowseUrl
1217
+ });
1218
+
1219
+ // src/lib/connectors/walletconnect.ts
1220
+ import bs586 from "bs58";
1221
+ var walletConfig = WALLETS.find((w) => w.id === "walletconnect");
1222
+ var disconnectWc2 = async () => {
1223
+ if (getCurrentSession()) {
1224
+ await disconnectWalletConnect();
1225
+ }
1226
+ };
1227
+ var createWalletConnectEvmConnector = () => {
1228
+ return {
1229
+ id: walletConfig.id,
1230
+ name: walletConfig.name,
1231
+ icon: walletConfig.icon,
1232
+ type: "evm",
1233
+ installed: false,
1234
+ wallet: {
1235
+ _connector: null,
1236
+ connect: async () => {
1237
+ return connectViaWalletConnect(EVM_WC_CONFIG, getEvmAccountFromSession);
1238
+ },
1239
+ disconnect: disconnectWc2,
1240
+ signMessage: async (message) => {
1241
+ const session = getCurrentSession();
1242
+ if (!session) {
1243
+ throw new Error("No WalletConnect session");
1244
+ }
1245
+ const account = session.namespaces.eip155?.accounts?.[0];
1246
+ if (!account) {
1247
+ throw new Error("No EVM account in session");
1248
+ }
1249
+ const address = account.split(":")[2];
1250
+ const result = await requestWalletConnect(
1251
+ "personal_sign",
1252
+ [message, address],
1253
+ WC_CHAINS.EVM_MAINNET
1254
+ );
1255
+ return result;
1256
+ }
1257
+ }
1258
+ };
1259
+ };
1260
+ var createWalletConnectSolanaConnector = () => {
1261
+ return {
1262
+ id: walletConfig.id,
1263
+ name: walletConfig.name,
1264
+ icon: walletConfig.icon,
1265
+ type: "solana",
1266
+ installed: false,
1267
+ wallet: {
1268
+ _provider: null,
1269
+ connect: async () => {
1270
+ return connectViaWalletConnect(SOLANA_WC_CONFIG, getSolanaAccountFromSession);
1271
+ },
1272
+ disconnect: disconnectWc2,
1273
+ signMessage: async (message) => {
1274
+ const session = getCurrentSession();
1275
+ if (!session) {
1276
+ throw new Error("No WalletConnect session");
1277
+ }
1278
+ const account = session.namespaces.solana?.accounts?.[0];
1279
+ if (!account) {
1280
+ throw new Error("No Solana account in session");
1281
+ }
1282
+ const pubkey = account.split(":")[2];
1283
+ const messageBytes = new TextEncoder().encode(message);
1284
+ const result = await requestWalletConnect(
1285
+ "solana_signMessage",
1286
+ { message: bs586.encode(messageBytes), pubkey },
1287
+ WC_CHAINS.SOLANA_MAINNET
1288
+ );
1289
+ return result.signature;
1290
+ }
1291
+ }
1292
+ };
1293
+ };
1294
+
1295
+ // src/lib/evm/connectors.ts
1296
+ var EVM_FALLBACK_CONNECTORS = [
1297
+ {
1298
+ id: "phantom",
1299
+ create: isMobile() ? createPhantomEvmConnectorDeeplink : createPhantomEvmConnector
1300
+ },
1301
+ ...isMobile() ? [] : [{ id: "metamask", create: createMetaMaskEvmConnector }],
1302
+ { id: "trust", create: createTrustEvmMobileConnector },
1303
+ { id: "binance", create: createBinanceEvmConnector },
1304
+ { id: "okx", create: createOkxEvmConnector },
1305
+ { id: "rainbow", create: createRainbowEvmMobileConnector },
1306
+ ...isMobile() ? [] : [{ id: "rabby", create: createRabbyEvmConnector }]
1307
+ ];
1308
+ var sleep = (ms) => new Promise((r) => window.setTimeout(r, ms));
1309
+ var checkEvmWalletInstalled = (connectorId) => {
1310
+ if (typeof window === "undefined") return false;
1311
+ const providers = window.ethereum?.providers ?? (window.ethereum ? [window.ethereum] : []);
1312
+ switch (connectorId) {
1313
+ case "metaMaskSDK":
1314
+ return providers.some((p) => p.isMetaMask && !p.isBraveWallet);
1315
+ case "coinbaseWalletSDK":
1316
+ if ("coinbaseWalletExtension" in window) return true;
1317
+ return providers.some(
1318
+ (p) => p.isCoinbaseWallet || p.isCoinbaseBrowser
1319
+ );
1320
+ default:
1321
+ return true;
1322
+ }
1323
+ };
1324
+ var cleanupWalletLocalStorage = () => {
1325
+ Object.keys(window.localStorage).filter((key) => key.startsWith("wagmi.")).forEach((key) => window.localStorage.removeItem(key));
1326
+ };
1327
+ var getEvmConnectors = () => {
1328
+ const wagmiConnectors = getConnectors(getEvmConfig());
1329
+ const connectors = wagmiConnectors.map((c) => ({
1330
+ id: normalizeEvmWalletId(c.id),
1331
+ name: c.name,
1332
+ icon: c.icon,
1333
+ type: "evm",
1334
+ installed: checkEvmWalletInstalled(c.id),
1335
+ wallet: {
1336
+ _connector: c,
1337
+ connect: async () => {
1338
+ try {
1339
+ const result = await connect(getEvmConfig(), { connector: c });
1340
+ if (!result.accounts[0]) throw new Error("No accounts returned");
1341
+ return connectedResult(result.accounts[0], { chainId: result.chainId });
1342
+ } catch (err) {
1343
+ if (err instanceof Error && err.name === "ConnectorAlreadyConnectedError") {
1344
+ cleanupWalletLocalStorage();
1345
+ await disconnect(getEvmConfig(), { connector: c });
1346
+ await sleep(100);
1347
+ const result = await connect(getEvmConfig(), { connector: c });
1348
+ if (!result.accounts[0]) throw new Error("No accounts returned");
1349
+ return connectedResult(result.accounts[0], { chainId: result.chainId });
1350
+ }
1351
+ throw err;
1352
+ }
1353
+ },
1354
+ disconnect: async () => {
1355
+ cleanupWalletLocalStorage();
1356
+ await disconnect(getEvmConfig());
1357
+ },
1358
+ signMessage: async (message) => {
1359
+ return wagmiSignMessage(getEvmConfig(), { message });
1360
+ }
1361
+ }
1362
+ }));
1363
+ addFallbackConnectors(connectors, EVM_FALLBACK_CONNECTORS);
1364
+ return connectors;
1365
+ };
1366
+
1367
+ // src/lib/evm/connection.ts
1368
+ import { watchConnections } from "@wagmi/core";
1369
+ var watchEvmConnections = (onChange) => {
1370
+ return watchConnections(getEvmConfig(), { onChange });
1371
+ };
1372
+
1373
+ // src/lib/evm/transactions.ts
1374
+ import {
1375
+ sendTransaction as wagmiSendTransaction,
1376
+ switchChain as wagmiSwitchChain,
1377
+ waitForTransactionReceipt as wagmiWaitForReceipt
1378
+ } from "@wagmi/core";
1379
+ var switchChain = async (chainId) => {
1380
+ await wagmiSwitchChain(getEvmConfig(), { chainId });
1381
+ };
1382
+ var sendTransaction = async (params) => {
1383
+ const hash = await wagmiSendTransaction(getEvmConfig(), {
1384
+ to: params.to,
1385
+ value: params.value,
1386
+ data: params.data
1387
+ });
1388
+ return { hash };
1389
+ };
1390
+ var waitForTransactionReceipt = async (hash) => {
1391
+ const receipt = await wagmiWaitForReceipt(getEvmConfig(), { hash });
1392
+ return {
1393
+ hash: receipt.transactionHash,
1394
+ status: receipt.status,
1395
+ blockNumber: receipt.blockNumber
1396
+ };
1397
+ };
1398
+
1399
+ // src/lib/evm/erc20.ts
1400
+ import { readContract, writeContract } from "@wagmi/core";
1401
+ import { erc20Abi } from "viem";
1402
+ var getAllowance = async (params) => {
1403
+ return readContract(getEvmConfig(), {
1404
+ abi: erc20Abi,
1405
+ address: params.tokenAddress,
1406
+ functionName: "allowance",
1407
+ args: [params.owner, params.spender]
1408
+ });
1409
+ };
1410
+ var approve = async (params) => {
1411
+ const hash = await writeContract(getEvmConfig(), {
1412
+ address: params.tokenAddress,
1413
+ abi: erc20Abi,
1414
+ functionName: "approve",
1415
+ args: [params.spender, params.amount]
1416
+ });
1417
+ return waitForTransactionReceipt(hash);
1418
+ };
1419
+ var ensureAllowance = async (params) => {
1420
+ const currentAllowance = await getAllowance({
1421
+ tokenAddress: params.tokenAddress,
1422
+ owner: params.owner,
1423
+ spender: params.spender
1424
+ });
1425
+ if (currentAllowance >= params.amount) {
1426
+ return null;
1427
+ }
1428
+ if (currentAllowance > 0n) {
1429
+ await approve({
1430
+ tokenAddress: params.tokenAddress,
1431
+ spender: params.spender,
1432
+ amount: 0n
1433
+ });
1434
+ }
1435
+ return approve(params);
1436
+ };
1437
+
1386
1438
  // src/lib/context/WalletContext.tsx
1387
1439
  import { createContext, useContext } from "solid-js";
1388
1440
 
@@ -1563,7 +1615,7 @@ var useSolanaWallet = () => {
1563
1615
  };
1564
1616
 
1565
1617
  // src/lib/context/hooks/useWalletConnect.ts
1566
- import bs586 from "bs58";
1618
+ import bs587 from "bs58";
1567
1619
  import { onCleanup as onCleanup3, onMount as onMount3 } from "solid-js";
1568
1620
  var useWalletConnect = (options) => {
1569
1621
  onMount3(async () => {
@@ -1618,7 +1670,7 @@ var useWalletConnect = (options) => {
1618
1670
  const messageBytes = new TextEncoder().encode(message);
1619
1671
  const result = await requestWalletConnect(
1620
1672
  "solana_signMessage",
1621
- { message: bs586.encode(messageBytes), pubkey },
1673
+ { message: bs587.encode(messageBytes), pubkey },
1622
1674
  WC_CHAINS.SOLANA_MAINNET
1623
1675
  );
1624
1676
  return result.signature;