@bit-buccaneers/wallet-abstraction 0.0.17 → 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.js +269 -228
- package/dist/dev.jsx +291 -247
- package/dist/index.js +269 -228
- package/dist/index.jsx +291 -247
- package/dist/lib/connectors/coinbase.d.ts +1 -0
- package/dist/lib/connectors/index.d.ts +1 -1
- package/package.json +3 -1
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:
|
|
385
|
-
return connectedResult(address, { publicKey:
|
|
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];
|
|
@@ -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);
|