@bit-buccaneers/wallet-abstraction 0.0.17 → 0.0.19

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
@@ -5,6 +5,7 @@ import { mainnet } from 'viem/chains';
5
5
  import bs582 from 'bs58';
6
6
  import nacl from 'tweetnacl';
7
7
  import { SignClient } from '@walletconnect/sign-client';
8
+ import { CoinbaseWalletAdapter } from '@solana/wallet-adapter-coinbase';
8
9
  import { isWalletAdapterCompatibleStandardWallet } from '@solana/wallet-adapter-base';
9
10
  import { getWallets } from '@wallet-standard/app';
10
11
  import { createComponent } from 'solid-js/web';
@@ -381,8 +382,8 @@ var parseEvmAccount = (account) => {
381
382
  var parseSolanaAccount = async (account) => {
382
383
  const address = account.split(":")[2];
383
384
  if (!address) throw new Error("Invalid Solana account format");
384
- const { default: bs587 } = await import('bs58');
385
- return connectedResult(address, { publicKey: bs587.decode(address) });
385
+ const { default: bs588 } = await import('bs58');
386
+ return connectedResult(address, { publicKey: bs588.decode(address) });
386
387
  };
387
388
  var getEvmAccountFromSession = (namespaces) => {
388
389
  const account = namespaces.eip155?.accounts?.[0];
@@ -612,7 +613,7 @@ var disconnectWcOrSolana = async () => {
612
613
  };
613
614
  var createWcEvmConnector = (config2) => {
614
615
  const walletConfig2 = WALLETS.find((w) => w.id === config2.walletId);
615
- const getDeeplink = createDeeplink(config2.wcDeeplink);
616
+ const getDeeplink = config2.getDeeplink ?? createDeeplink(config2.wcDeeplink);
616
617
  const isInWallet = () => isInWalletBrowser(config2.injectedKey);
617
618
  return {
618
619
  ...walletConfig2,
@@ -657,7 +658,7 @@ var createWcEvmConnector = (config2) => {
657
658
  };
658
659
  var createWcSolanaConnector = (config2) => {
659
660
  const walletConfig2 = WALLETS.find((w) => w.id === config2.walletId);
660
- const getDeeplink = createDeeplink(config2.wcDeeplink);
661
+ const getDeeplink = config2.getDeeplink ?? createDeeplink(config2.wcDeeplink);
661
662
  const isInWallet = () => isInWalletBrowser(config2.injectedKey);
662
663
  return {
663
664
  ...walletConfig2,
@@ -873,7 +874,7 @@ var createRabbyEvmConnector = () => createDownloadOnlyEvmConnector({ walletId: "
873
874
  // src/lib/connectors/binance.ts
874
875
  var BINANCE_CONFIG = {
875
876
  walletId: "binance",
876
- wcDeeplink: "bnc://app.binance.com/cedefi/wc",
877
+ wcDeeplink: "https://app.binance.com/cedefi/wc",
877
878
  injectedKey: "isBinance"
878
879
  };
879
880
  var buildBinanceBrowseUrl = () => `bnc://app.binance.com/cedefi/dapp?url=${encodeURIComponent(window.location.href)}`;
@@ -888,7 +889,7 @@ var createBinanceSolanaDappBrowserConnector = () => createDappBrowserSolanaConne
888
889
  // src/lib/connectors/okx.ts
889
890
  var OKX_CONFIG = {
890
891
  walletId: "okx",
891
- wcDeeplink: "okx://wallet/wc",
892
+ wcDeeplink: "okex://main/wc",
892
893
  injectedKey: "isOkxWallet"
893
894
  };
894
895
  var buildOkxBrowseUrl = () => `okx://wallet/dapp/url?dappUrl=${encodeURIComponent(window.location.href)}`;
@@ -900,230 +901,6 @@ var createOkxSolanaDappBrowserConnector = () => createDappBrowserSolanaConnector
900
901
  buildUrl: buildOkxBrowseUrl
901
902
  });
902
903
 
903
- // src/lib/connectors/coinbase.ts
904
- var buildCoinbaseBrowseUrl = () => `cbwallet://dapp?url=${encodeURIComponent(window.location.href)}`;
905
- var createCoinbaseSolanaDappBrowserConnector = () => createDappBrowserSolanaConnector({
906
- walletId: "coinbase",
907
- injectedKey: "isCoinbaseWallet",
908
- buildUrl: buildCoinbaseBrowseUrl
909
- });
910
-
911
- // src/lib/connectors/bitget.ts
912
- var BITGET_CONFIG = {
913
- walletId: "bitget",
914
- wcDeeplink: "bitkeep://bkconnect",
915
- injectedKey: "isBitKeep"
916
- };
917
- var buildBitgetBrowseUrl = () => `https://bkcode.vip?action=dapp&url=${encodeURIComponent(window.location.href)}`;
918
- var createBitgetSolanaConnector = () => createWcSolanaConnector(BITGET_CONFIG);
919
- var createBitgetSolanaDappBrowserConnector = () => createDappBrowserSolanaConnector({
920
- walletId: "bitget",
921
- injectedKey: "isBitKeep",
922
- buildUrl: buildBitgetBrowseUrl
923
- });
924
- var walletConfig = WALLETS.find((w) => w.id === "walletconnect");
925
- var disconnectWc2 = async () => {
926
- if (getCurrentSession()) {
927
- await disconnectWalletConnect();
928
- }
929
- };
930
- var createWalletConnectEvmConnector = () => {
931
- return {
932
- id: walletConfig.id,
933
- name: walletConfig.name,
934
- icon: walletConfig.icon,
935
- type: "evm",
936
- installed: false,
937
- wallet: {
938
- _connector: null,
939
- connect: async () => {
940
- return connectViaWalletConnect(EVM_WC_CONFIG, getEvmAccountFromSession);
941
- },
942
- disconnect: disconnectWc2,
943
- signMessage: async (message) => {
944
- const session = getCurrentSession();
945
- if (!session) {
946
- throw new Error("No WalletConnect session");
947
- }
948
- const account = session.namespaces.eip155?.accounts?.[0];
949
- if (!account) {
950
- throw new Error("No EVM account in session");
951
- }
952
- const address = account.split(":")[2];
953
- const result = await requestWalletConnect(
954
- "personal_sign",
955
- [message, address],
956
- WC_CHAINS.EVM_MAINNET
957
- );
958
- return result;
959
- }
960
- }
961
- };
962
- };
963
- var createWalletConnectSolanaConnector = () => {
964
- return {
965
- id: walletConfig.id,
966
- name: walletConfig.name,
967
- icon: walletConfig.icon,
968
- type: "solana",
969
- installed: false,
970
- wallet: {
971
- _provider: null,
972
- connect: async () => {
973
- return connectViaWalletConnect(SOLANA_WC_CONFIG, getSolanaAccountFromSession);
974
- },
975
- disconnect: disconnectWc2,
976
- signMessage: async (message) => {
977
- const session = getCurrentSession();
978
- if (!session) {
979
- throw new Error("No WalletConnect session");
980
- }
981
- const account = session.namespaces.solana?.accounts?.[0];
982
- if (!account) {
983
- throw new Error("No Solana account in session");
984
- }
985
- const pubkey = account.split(":")[2];
986
- const messageBytes = new TextEncoder().encode(message);
987
- const result = await requestWalletConnect(
988
- "solana_signMessage",
989
- { message: bs582.encode(messageBytes), pubkey },
990
- WC_CHAINS.SOLANA_MAINNET
991
- );
992
- return result.signature;
993
- }
994
- }
995
- };
996
- };
997
-
998
- // src/lib/evm/connectors.ts
999
- var EVM_FALLBACK_CONNECTORS = [
1000
- {
1001
- id: "phantom",
1002
- create: isMobile() ? createPhantomEvmConnectorDeeplink : createPhantomEvmConnector
1003
- },
1004
- ...isMobile() ? [] : [{ id: "metamask", create: createMetaMaskEvmConnector }],
1005
- { id: "trust", create: createTrustEvmMobileConnector },
1006
- { id: "binance", create: createBinanceEvmConnector },
1007
- { id: "okx", create: createOkxEvmConnector },
1008
- { id: "rainbow", create: createRainbowEvmMobileConnector },
1009
- ...isMobile() ? [] : [{ id: "rabby", create: createRabbyEvmConnector }]
1010
- ];
1011
- var sleep = (ms) => new Promise((r) => window.setTimeout(r, ms));
1012
- var checkEvmWalletInstalled = (connectorId) => {
1013
- if (typeof window === "undefined") return false;
1014
- const providers = window.ethereum?.providers ?? (window.ethereum ? [window.ethereum] : []);
1015
- switch (connectorId) {
1016
- case "metaMaskSDK":
1017
- return providers.some((p) => p.isMetaMask && !p.isBraveWallet);
1018
- case "coinbaseWalletSDK":
1019
- if ("coinbaseWalletExtension" in window) return true;
1020
- return providers.some(
1021
- (p) => p.isCoinbaseWallet || p.isCoinbaseBrowser
1022
- );
1023
- default:
1024
- return true;
1025
- }
1026
- };
1027
- var cleanupWalletLocalStorage = () => {
1028
- Object.keys(window.localStorage).filter((key) => key.startsWith("wagmi.")).forEach((key) => window.localStorage.removeItem(key));
1029
- };
1030
- var getEvmConnectors = () => {
1031
- const wagmiConnectors = getConnectors(getEvmConfig());
1032
- const connectors = wagmiConnectors.map((c) => ({
1033
- id: normalizeEvmWalletId(c.id),
1034
- name: c.name,
1035
- icon: c.icon,
1036
- type: "evm",
1037
- installed: checkEvmWalletInstalled(c.id),
1038
- wallet: {
1039
- _connector: c,
1040
- connect: async () => {
1041
- try {
1042
- const result = await connect(getEvmConfig(), { connector: c });
1043
- if (!result.accounts[0]) throw new Error("No accounts returned");
1044
- return connectedResult(result.accounts[0], { chainId: result.chainId });
1045
- } catch (err) {
1046
- if (err instanceof Error && err.name === "ConnectorAlreadyConnectedError") {
1047
- cleanupWalletLocalStorage();
1048
- await disconnect(getEvmConfig(), { connector: c });
1049
- await sleep(100);
1050
- const result = await connect(getEvmConfig(), { connector: c });
1051
- if (!result.accounts[0]) throw new Error("No accounts returned");
1052
- return connectedResult(result.accounts[0], { chainId: result.chainId });
1053
- }
1054
- throw err;
1055
- }
1056
- },
1057
- disconnect: async () => {
1058
- cleanupWalletLocalStorage();
1059
- await disconnect(getEvmConfig());
1060
- },
1061
- signMessage: async (message) => {
1062
- return signMessage(getEvmConfig(), { message });
1063
- }
1064
- }
1065
- }));
1066
- addFallbackConnectors(connectors, EVM_FALLBACK_CONNECTORS);
1067
- return connectors;
1068
- };
1069
- var watchEvmConnections = (onChange) => {
1070
- return watchConnections(getEvmConfig(), { onChange });
1071
- };
1072
- var switchChain = async (chainId) => {
1073
- await switchChain$1(getEvmConfig(), { chainId });
1074
- };
1075
- var sendTransaction = async (params) => {
1076
- const hash = await sendTransaction$1(getEvmConfig(), {
1077
- to: params.to,
1078
- value: params.value,
1079
- data: params.data
1080
- });
1081
- return { hash };
1082
- };
1083
- var waitForTransactionReceipt = async (hash) => {
1084
- const receipt = await waitForTransactionReceipt$1(getEvmConfig(), { hash });
1085
- return {
1086
- hash: receipt.transactionHash,
1087
- status: receipt.status,
1088
- blockNumber: receipt.blockNumber
1089
- };
1090
- };
1091
- var getAllowance = async (params) => {
1092
- return readContract(getEvmConfig(), {
1093
- abi: erc20Abi,
1094
- address: params.tokenAddress,
1095
- functionName: "allowance",
1096
- args: [params.owner, params.spender]
1097
- });
1098
- };
1099
- var approve = async (params) => {
1100
- const hash = await writeContract(getEvmConfig(), {
1101
- address: params.tokenAddress,
1102
- abi: erc20Abi,
1103
- functionName: "approve",
1104
- args: [params.spender, params.amount]
1105
- });
1106
- return waitForTransactionReceipt(hash);
1107
- };
1108
- var ensureAllowance = async (params) => {
1109
- const currentAllowance = await getAllowance({
1110
- tokenAddress: params.tokenAddress,
1111
- owner: params.owner,
1112
- spender: params.spender
1113
- });
1114
- if (currentAllowance >= params.amount) {
1115
- return null;
1116
- }
1117
- if (currentAllowance > 0n) {
1118
- await approve({
1119
- tokenAddress: params.tokenAddress,
1120
- spender: params.spender,
1121
- amount: 0n
1122
- });
1123
- }
1124
- return approve(params);
1125
- };
1126
-
1127
904
  // src/lib/solana/connection.ts
1128
905
  var currentConnection = {
1129
906
  connection: null,
@@ -1252,8 +1029,12 @@ var SOLANA_FALLBACK_CONNECTORS = isMobile() ? [
1252
1029
  create: () => createSolanaMobileConnector(createTrustSolanaMobileConnector())
1253
1030
  },
1254
1031
  { id: "binance", create: () => createSolanaMobileConnector(createBinanceSolanaConnector()) },
1255
- { id: "bitget", create: createBitgetSolanaConnector },
1256
- { id: "okx", create: createOkxSolanaConnector }
1032
+ { id: "bitget", create: () => createSolanaMobileConnector(createBitgetSolanaConnector()) },
1033
+ { id: "okx", create: () => createSolanaMobileConnector(createOkxSolanaConnector()) },
1034
+ {
1035
+ id: "coinbase",
1036
+ create: () => createSolanaMobileConnector(createCoinbaseSolanaConnector())
1037
+ }
1257
1038
  ];
1258
1039
  var getSolanaWallets = () => {
1259
1040
  const { get } = getWallets();
@@ -1355,6 +1136,266 @@ var checkSolflareSignCallback = () => {
1355
1136
  if (!isSolflareSignPending()) return null;
1356
1137
  return handleSolflareSignCallback();
1357
1138
  };
1139
+
1140
+ // src/lib/connectors/coinbase.ts
1141
+ var buildCoinbaseBrowseUrl = () => `cbwallet://dapp?url=${encodeURIComponent(window.location.href)}`;
1142
+ var createCoinbaseSolanaDappBrowserConnector = () => createDappBrowserSolanaConnector({
1143
+ walletId: "coinbase",
1144
+ injectedKey: "isCoinbaseWallet",
1145
+ buildUrl: buildCoinbaseBrowseUrl
1146
+ });
1147
+ var createCoinbaseSolanaConnector = () => {
1148
+ const walletConfig2 = WALLETS.find((w) => w.id === "coinbase");
1149
+ const adapter = new CoinbaseWalletAdapter();
1150
+ const connector = {
1151
+ id: "coinbase",
1152
+ name: walletConfig2.name,
1153
+ icon: walletConfig2.icon,
1154
+ type: "solana",
1155
+ installed: adapter.readyState === "Installed",
1156
+ wallet: {
1157
+ _provider: adapter,
1158
+ connect: async () => {
1159
+ await adapter.connect();
1160
+ if (!adapter.publicKey) {
1161
+ throw new Error("No public key returned from Coinbase Wallet");
1162
+ }
1163
+ const address = adapter.publicKey.toBase58();
1164
+ const result = connectedResult(address, {
1165
+ publicKey: adapter.publicKey.toBytes()
1166
+ });
1167
+ storage.setString(STORAGE_KEYS.SOLANA_WALLET, "coinbase");
1168
+ setConnection(result, connector);
1169
+ return result;
1170
+ },
1171
+ disconnect: async () => {
1172
+ await adapter.disconnect();
1173
+ },
1174
+ signMessage: async (message) => {
1175
+ const encodedMessage = new TextEncoder().encode(message);
1176
+ const signature = await adapter.signMessage(encodedMessage);
1177
+ return bs582.encode(signature);
1178
+ }
1179
+ }
1180
+ };
1181
+ return connector;
1182
+ };
1183
+
1184
+ // src/lib/connectors/bitget.ts
1185
+ var BITGET_CONFIG = {
1186
+ walletId: "bitget",
1187
+ wcDeeplink: "bitkeep://bkconnect",
1188
+ injectedKey: "isBitKeep"
1189
+ };
1190
+ var buildBitgetBrowseUrl = () => `https://bkcode.vip?action=dapp&url=${encodeURIComponent(window.location.href)}`;
1191
+ var createBitgetSolanaConnector = () => createWcSolanaConnector(BITGET_CONFIG);
1192
+ var createBitgetSolanaDappBrowserConnector = () => createDappBrowserSolanaConnector({
1193
+ walletId: "bitget",
1194
+ injectedKey: "isBitKeep",
1195
+ buildUrl: buildBitgetBrowseUrl
1196
+ });
1197
+ var walletConfig = WALLETS.find((w) => w.id === "walletconnect");
1198
+ var disconnectWc2 = async () => {
1199
+ if (getCurrentSession()) {
1200
+ await disconnectWalletConnect();
1201
+ }
1202
+ };
1203
+ var createWalletConnectEvmConnector = () => {
1204
+ return {
1205
+ id: walletConfig.id,
1206
+ name: walletConfig.name,
1207
+ icon: walletConfig.icon,
1208
+ type: "evm",
1209
+ installed: false,
1210
+ wallet: {
1211
+ _connector: null,
1212
+ connect: async () => {
1213
+ return connectViaWalletConnect(EVM_WC_CONFIG, getEvmAccountFromSession);
1214
+ },
1215
+ disconnect: disconnectWc2,
1216
+ signMessage: async (message) => {
1217
+ const session = getCurrentSession();
1218
+ if (!session) {
1219
+ throw new Error("No WalletConnect session");
1220
+ }
1221
+ const account = session.namespaces.eip155?.accounts?.[0];
1222
+ if (!account) {
1223
+ throw new Error("No EVM account in session");
1224
+ }
1225
+ const address = account.split(":")[2];
1226
+ const result = await requestWalletConnect(
1227
+ "personal_sign",
1228
+ [message, address],
1229
+ WC_CHAINS.EVM_MAINNET
1230
+ );
1231
+ return result;
1232
+ }
1233
+ }
1234
+ };
1235
+ };
1236
+ var createWalletConnectSolanaConnector = () => {
1237
+ return {
1238
+ id: walletConfig.id,
1239
+ name: walletConfig.name,
1240
+ icon: walletConfig.icon,
1241
+ type: "solana",
1242
+ installed: false,
1243
+ wallet: {
1244
+ _provider: null,
1245
+ connect: async () => {
1246
+ return connectViaWalletConnect(SOLANA_WC_CONFIG, getSolanaAccountFromSession);
1247
+ },
1248
+ disconnect: disconnectWc2,
1249
+ signMessage: async (message) => {
1250
+ const session = getCurrentSession();
1251
+ if (!session) {
1252
+ throw new Error("No WalletConnect session");
1253
+ }
1254
+ const account = session.namespaces.solana?.accounts?.[0];
1255
+ if (!account) {
1256
+ throw new Error("No Solana account in session");
1257
+ }
1258
+ const pubkey = account.split(":")[2];
1259
+ const messageBytes = new TextEncoder().encode(message);
1260
+ const result = await requestWalletConnect(
1261
+ "solana_signMessage",
1262
+ { message: bs582.encode(messageBytes), pubkey },
1263
+ WC_CHAINS.SOLANA_MAINNET
1264
+ );
1265
+ return result.signature;
1266
+ }
1267
+ }
1268
+ };
1269
+ };
1270
+
1271
+ // src/lib/evm/connectors.ts
1272
+ var EVM_FALLBACK_CONNECTORS = [
1273
+ {
1274
+ id: "phantom",
1275
+ create: isMobile() ? createPhantomEvmConnectorDeeplink : createPhantomEvmConnector
1276
+ },
1277
+ ...isMobile() ? [] : [{ id: "metamask", create: createMetaMaskEvmConnector }],
1278
+ { id: "trust", create: createTrustEvmMobileConnector },
1279
+ { id: "binance", create: createBinanceEvmConnector },
1280
+ { id: "okx", create: createOkxEvmConnector },
1281
+ { id: "rainbow", create: createRainbowEvmMobileConnector },
1282
+ ...isMobile() ? [] : [{ id: "rabby", create: createRabbyEvmConnector }]
1283
+ ];
1284
+ var sleep = (ms) => new Promise((r) => window.setTimeout(r, ms));
1285
+ var checkEvmWalletInstalled = (connectorId) => {
1286
+ if (typeof window === "undefined") return false;
1287
+ const providers = window.ethereum?.providers ?? (window.ethereum ? [window.ethereum] : []);
1288
+ switch (connectorId) {
1289
+ case "metaMaskSDK":
1290
+ return providers.some((p) => p.isMetaMask && !p.isBraveWallet);
1291
+ case "coinbaseWalletSDK":
1292
+ if ("coinbaseWalletExtension" in window) return true;
1293
+ return providers.some(
1294
+ (p) => p.isCoinbaseWallet || p.isCoinbaseBrowser
1295
+ );
1296
+ default:
1297
+ return true;
1298
+ }
1299
+ };
1300
+ var cleanupWalletLocalStorage = () => {
1301
+ Object.keys(window.localStorage).filter((key) => key.startsWith("wagmi.")).forEach((key) => window.localStorage.removeItem(key));
1302
+ };
1303
+ var getEvmConnectors = () => {
1304
+ const wagmiConnectors = getConnectors(getEvmConfig());
1305
+ const connectors = wagmiConnectors.map((c) => ({
1306
+ id: normalizeEvmWalletId(c.id),
1307
+ name: c.name,
1308
+ icon: c.icon,
1309
+ type: "evm",
1310
+ installed: checkEvmWalletInstalled(c.id),
1311
+ wallet: {
1312
+ _connector: c,
1313
+ connect: async () => {
1314
+ try {
1315
+ const result = await connect(getEvmConfig(), { connector: c });
1316
+ if (!result.accounts[0]) throw new Error("No accounts returned");
1317
+ return connectedResult(result.accounts[0], { chainId: result.chainId });
1318
+ } catch (err) {
1319
+ if (err instanceof Error && err.name === "ConnectorAlreadyConnectedError") {
1320
+ cleanupWalletLocalStorage();
1321
+ await disconnect(getEvmConfig(), { connector: c });
1322
+ await sleep(100);
1323
+ const result = await connect(getEvmConfig(), { connector: c });
1324
+ if (!result.accounts[0]) throw new Error("No accounts returned");
1325
+ return connectedResult(result.accounts[0], { chainId: result.chainId });
1326
+ }
1327
+ throw err;
1328
+ }
1329
+ },
1330
+ disconnect: async () => {
1331
+ cleanupWalletLocalStorage();
1332
+ await disconnect(getEvmConfig());
1333
+ },
1334
+ signMessage: async (message) => {
1335
+ return signMessage(getEvmConfig(), { message });
1336
+ }
1337
+ }
1338
+ }));
1339
+ addFallbackConnectors(connectors, EVM_FALLBACK_CONNECTORS);
1340
+ return connectors;
1341
+ };
1342
+ var watchEvmConnections = (onChange) => {
1343
+ return watchConnections(getEvmConfig(), { onChange });
1344
+ };
1345
+ var switchChain = async (chainId) => {
1346
+ await switchChain$1(getEvmConfig(), { chainId });
1347
+ };
1348
+ var sendTransaction = async (params) => {
1349
+ const hash = await sendTransaction$1(getEvmConfig(), {
1350
+ to: params.to,
1351
+ value: params.value,
1352
+ data: params.data
1353
+ });
1354
+ return { hash };
1355
+ };
1356
+ var waitForTransactionReceipt = async (hash) => {
1357
+ const receipt = await waitForTransactionReceipt$1(getEvmConfig(), { hash });
1358
+ return {
1359
+ hash: receipt.transactionHash,
1360
+ status: receipt.status,
1361
+ blockNumber: receipt.blockNumber
1362
+ };
1363
+ };
1364
+ var getAllowance = async (params) => {
1365
+ return readContract(getEvmConfig(), {
1366
+ abi: erc20Abi,
1367
+ address: params.tokenAddress,
1368
+ functionName: "allowance",
1369
+ args: [params.owner, params.spender]
1370
+ });
1371
+ };
1372
+ var approve = async (params) => {
1373
+ const hash = await writeContract(getEvmConfig(), {
1374
+ address: params.tokenAddress,
1375
+ abi: erc20Abi,
1376
+ functionName: "approve",
1377
+ args: [params.spender, params.amount]
1378
+ });
1379
+ return waitForTransactionReceipt(hash);
1380
+ };
1381
+ var ensureAllowance = async (params) => {
1382
+ const currentAllowance = await getAllowance({
1383
+ tokenAddress: params.tokenAddress,
1384
+ owner: params.owner,
1385
+ spender: params.spender
1386
+ });
1387
+ if (currentAllowance >= params.amount) {
1388
+ return null;
1389
+ }
1390
+ if (currentAllowance > 0n) {
1391
+ await approve({
1392
+ tokenAddress: params.tokenAddress,
1393
+ spender: params.spender,
1394
+ amount: 0n
1395
+ });
1396
+ }
1397
+ return approve(params);
1398
+ };
1358
1399
  var useEvmWallet = (options) => {
1359
1400
  const [evmConnectors, setEvmConnectors] = createSignal([]);
1360
1401
  const [evmConnection, setEvmConnection] = createSignal(null);