@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.js +274 -225
- package/dist/dev.jsx +296 -244
- package/dist/index.js +274 -225
- package/dist/index.jsx +296 -244
- 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];
|
|
@@ -799,6 +800,7 @@ var METAMASK_CONFIG = {
|
|
|
799
800
|
};
|
|
800
801
|
var METAMASK_BROWSE_URL = "https://metamask.app.link/dapp";
|
|
801
802
|
var createMetaMaskEvmConnector = () => createWcEvmConnector(METAMASK_CONFIG);
|
|
803
|
+
var createMetaMaskSolanaConnector = () => createDownloadOnlySolanaConnector({ walletId: "metamask" });
|
|
802
804
|
var createMetaMaskSolanaDappBrowserConnector = () => createDappBrowserSolanaConnector({
|
|
803
805
|
walletId: "metamask",
|
|
804
806
|
browseUrl: METAMASK_BROWSE_URL,
|
|
@@ -899,227 +901,6 @@ var createOkxSolanaDappBrowserConnector = () => createDappBrowserSolanaConnector
|
|
|
899
901
|
buildUrl: buildOkxBrowseUrl
|
|
900
902
|
});
|
|
901
903
|
|
|
902
|
-
// src/lib/connectors/coinbase.ts
|
|
903
|
-
var buildCoinbaseBrowseUrl = () => `cbwallet://dapp?url=${encodeURIComponent(window.location.href)}`;
|
|
904
|
-
var createCoinbaseSolanaDappBrowserConnector = () => createDappBrowserSolanaConnector({
|
|
905
|
-
walletId: "coinbase",
|
|
906
|
-
injectedKey: "isCoinbaseWallet",
|
|
907
|
-
buildUrl: buildCoinbaseBrowseUrl
|
|
908
|
-
});
|
|
909
|
-
|
|
910
|
-
// src/lib/connectors/bitget.ts
|
|
911
|
-
var BITGET_CONFIG = {
|
|
912
|
-
walletId: "bitget",
|
|
913
|
-
wcDeeplink: "bitkeep://bkconnect",
|
|
914
|
-
injectedKey: "isBitKeep"
|
|
915
|
-
};
|
|
916
|
-
var buildBitgetBrowseUrl = () => `https://bkcode.vip?action=dapp&url=${encodeURIComponent(window.location.href)}`;
|
|
917
|
-
var createBitgetSolanaConnector = () => createWcSolanaConnector(BITGET_CONFIG);
|
|
918
|
-
var createBitgetSolanaDappBrowserConnector = () => createDappBrowserSolanaConnector({
|
|
919
|
-
walletId: "bitget",
|
|
920
|
-
injectedKey: "isBitKeep",
|
|
921
|
-
buildUrl: buildBitgetBrowseUrl
|
|
922
|
-
});
|
|
923
|
-
var walletConfig = WALLETS.find((w) => w.id === "walletconnect");
|
|
924
|
-
var disconnectWc2 = async () => {
|
|
925
|
-
if (getCurrentSession()) {
|
|
926
|
-
await disconnectWalletConnect();
|
|
927
|
-
}
|
|
928
|
-
};
|
|
929
|
-
var createWalletConnectEvmConnector = () => {
|
|
930
|
-
return {
|
|
931
|
-
id: walletConfig.id,
|
|
932
|
-
name: walletConfig.name,
|
|
933
|
-
icon: walletConfig.icon,
|
|
934
|
-
type: "evm",
|
|
935
|
-
installed: false,
|
|
936
|
-
wallet: {
|
|
937
|
-
_connector: null,
|
|
938
|
-
connect: async () => {
|
|
939
|
-
return connectViaWalletConnect(EVM_WC_CONFIG, getEvmAccountFromSession);
|
|
940
|
-
},
|
|
941
|
-
disconnect: disconnectWc2,
|
|
942
|
-
signMessage: async (message) => {
|
|
943
|
-
const session = getCurrentSession();
|
|
944
|
-
if (!session) {
|
|
945
|
-
throw new Error("No WalletConnect session");
|
|
946
|
-
}
|
|
947
|
-
const account = session.namespaces.eip155?.accounts?.[0];
|
|
948
|
-
if (!account) {
|
|
949
|
-
throw new Error("No EVM account in session");
|
|
950
|
-
}
|
|
951
|
-
const address = account.split(":")[2];
|
|
952
|
-
const result = await requestWalletConnect(
|
|
953
|
-
"personal_sign",
|
|
954
|
-
[message, address],
|
|
955
|
-
WC_CHAINS.EVM_MAINNET
|
|
956
|
-
);
|
|
957
|
-
return result;
|
|
958
|
-
}
|
|
959
|
-
}
|
|
960
|
-
};
|
|
961
|
-
};
|
|
962
|
-
var createWalletConnectSolanaConnector = () => {
|
|
963
|
-
return {
|
|
964
|
-
id: walletConfig.id,
|
|
965
|
-
name: walletConfig.name,
|
|
966
|
-
icon: walletConfig.icon,
|
|
967
|
-
type: "solana",
|
|
968
|
-
installed: false,
|
|
969
|
-
wallet: {
|
|
970
|
-
_provider: null,
|
|
971
|
-
connect: async () => {
|
|
972
|
-
return connectViaWalletConnect(SOLANA_WC_CONFIG, getSolanaAccountFromSession);
|
|
973
|
-
},
|
|
974
|
-
disconnect: disconnectWc2,
|
|
975
|
-
signMessage: async (message) => {
|
|
976
|
-
const session = getCurrentSession();
|
|
977
|
-
if (!session) {
|
|
978
|
-
throw new Error("No WalletConnect session");
|
|
979
|
-
}
|
|
980
|
-
const account = session.namespaces.solana?.accounts?.[0];
|
|
981
|
-
if (!account) {
|
|
982
|
-
throw new Error("No Solana account in session");
|
|
983
|
-
}
|
|
984
|
-
const pubkey = account.split(":")[2];
|
|
985
|
-
const messageBytes = new TextEncoder().encode(message);
|
|
986
|
-
const result = await requestWalletConnect(
|
|
987
|
-
"solana_signMessage",
|
|
988
|
-
{ message: bs582.encode(messageBytes), pubkey },
|
|
989
|
-
WC_CHAINS.SOLANA_MAINNET
|
|
990
|
-
);
|
|
991
|
-
return result.signature;
|
|
992
|
-
}
|
|
993
|
-
}
|
|
994
|
-
};
|
|
995
|
-
};
|
|
996
|
-
|
|
997
|
-
// src/lib/evm/connectors.ts
|
|
998
|
-
var EVM_FALLBACK_CONNECTORS = [
|
|
999
|
-
{
|
|
1000
|
-
id: "phantom",
|
|
1001
|
-
create: isMobile() ? createPhantomEvmConnectorDeeplink : createPhantomEvmConnector
|
|
1002
|
-
},
|
|
1003
|
-
...isMobile() ? [] : [{ id: "metamask", create: createMetaMaskEvmConnector }],
|
|
1004
|
-
{ id: "trust", create: createTrustEvmMobileConnector },
|
|
1005
|
-
{ id: "binance", create: createBinanceEvmConnector },
|
|
1006
|
-
{ id: "okx", create: createOkxEvmConnector },
|
|
1007
|
-
{ id: "rainbow", create: createRainbowEvmMobileConnector },
|
|
1008
|
-
...isMobile() ? [] : [{ id: "rabby", create: createRabbyEvmConnector }]
|
|
1009
|
-
];
|
|
1010
|
-
var sleep = (ms) => new Promise((r) => window.setTimeout(r, ms));
|
|
1011
|
-
var checkEvmWalletInstalled = (connectorId) => {
|
|
1012
|
-
if (typeof window === "undefined" || !window.ethereum) return false;
|
|
1013
|
-
const providers = window.ethereum.providers ?? [window.ethereum];
|
|
1014
|
-
switch (connectorId) {
|
|
1015
|
-
case "metaMaskSDK":
|
|
1016
|
-
return providers.some((p) => p.isMetaMask && !p.isBraveWallet);
|
|
1017
|
-
case "coinbaseWalletSDK":
|
|
1018
|
-
return providers.some((p) => p.isCoinbaseWallet);
|
|
1019
|
-
default:
|
|
1020
|
-
return true;
|
|
1021
|
-
}
|
|
1022
|
-
};
|
|
1023
|
-
var cleanupWalletLocalStorage = () => {
|
|
1024
|
-
Object.keys(window.localStorage).filter((key) => key.startsWith("wagmi.")).forEach((key) => window.localStorage.removeItem(key));
|
|
1025
|
-
};
|
|
1026
|
-
var getEvmConnectors = () => {
|
|
1027
|
-
const wagmiConnectors = getConnectors(getEvmConfig());
|
|
1028
|
-
const connectors = wagmiConnectors.map((c) => ({
|
|
1029
|
-
id: normalizeEvmWalletId(c.id),
|
|
1030
|
-
name: c.name,
|
|
1031
|
-
icon: c.icon,
|
|
1032
|
-
type: "evm",
|
|
1033
|
-
installed: checkEvmWalletInstalled(c.id),
|
|
1034
|
-
wallet: {
|
|
1035
|
-
_connector: c,
|
|
1036
|
-
connect: async () => {
|
|
1037
|
-
try {
|
|
1038
|
-
const result = await connect(getEvmConfig(), { connector: c });
|
|
1039
|
-
if (!result.accounts[0]) throw new Error("No accounts returned");
|
|
1040
|
-
return connectedResult(result.accounts[0], { chainId: result.chainId });
|
|
1041
|
-
} catch (err) {
|
|
1042
|
-
if (err instanceof Error && err.name === "ConnectorAlreadyConnectedError") {
|
|
1043
|
-
cleanupWalletLocalStorage();
|
|
1044
|
-
await disconnect(getEvmConfig(), { connector: c });
|
|
1045
|
-
await sleep(100);
|
|
1046
|
-
const result = await connect(getEvmConfig(), { connector: c });
|
|
1047
|
-
if (!result.accounts[0]) throw new Error("No accounts returned");
|
|
1048
|
-
return connectedResult(result.accounts[0], { chainId: result.chainId });
|
|
1049
|
-
}
|
|
1050
|
-
throw err;
|
|
1051
|
-
}
|
|
1052
|
-
},
|
|
1053
|
-
disconnect: async () => {
|
|
1054
|
-
cleanupWalletLocalStorage();
|
|
1055
|
-
await disconnect(getEvmConfig());
|
|
1056
|
-
},
|
|
1057
|
-
signMessage: async (message) => {
|
|
1058
|
-
return signMessage(getEvmConfig(), { message });
|
|
1059
|
-
}
|
|
1060
|
-
}
|
|
1061
|
-
}));
|
|
1062
|
-
addFallbackConnectors(connectors, EVM_FALLBACK_CONNECTORS);
|
|
1063
|
-
return connectors;
|
|
1064
|
-
};
|
|
1065
|
-
var watchEvmConnections = (onChange) => {
|
|
1066
|
-
return watchConnections(getEvmConfig(), { onChange });
|
|
1067
|
-
};
|
|
1068
|
-
var switchChain = async (chainId) => {
|
|
1069
|
-
await switchChain$1(getEvmConfig(), { chainId });
|
|
1070
|
-
};
|
|
1071
|
-
var sendTransaction = async (params) => {
|
|
1072
|
-
const hash = await sendTransaction$1(getEvmConfig(), {
|
|
1073
|
-
to: params.to,
|
|
1074
|
-
value: params.value,
|
|
1075
|
-
data: params.data
|
|
1076
|
-
});
|
|
1077
|
-
return { hash };
|
|
1078
|
-
};
|
|
1079
|
-
var waitForTransactionReceipt = async (hash) => {
|
|
1080
|
-
const receipt = await waitForTransactionReceipt$1(getEvmConfig(), { hash });
|
|
1081
|
-
return {
|
|
1082
|
-
hash: receipt.transactionHash,
|
|
1083
|
-
status: receipt.status,
|
|
1084
|
-
blockNumber: receipt.blockNumber
|
|
1085
|
-
};
|
|
1086
|
-
};
|
|
1087
|
-
var getAllowance = async (params) => {
|
|
1088
|
-
return readContract(getEvmConfig(), {
|
|
1089
|
-
abi: erc20Abi,
|
|
1090
|
-
address: params.tokenAddress,
|
|
1091
|
-
functionName: "allowance",
|
|
1092
|
-
args: [params.owner, params.spender]
|
|
1093
|
-
});
|
|
1094
|
-
};
|
|
1095
|
-
var approve = async (params) => {
|
|
1096
|
-
const hash = await writeContract(getEvmConfig(), {
|
|
1097
|
-
address: params.tokenAddress,
|
|
1098
|
-
abi: erc20Abi,
|
|
1099
|
-
functionName: "approve",
|
|
1100
|
-
args: [params.spender, params.amount]
|
|
1101
|
-
});
|
|
1102
|
-
return waitForTransactionReceipt(hash);
|
|
1103
|
-
};
|
|
1104
|
-
var ensureAllowance = async (params) => {
|
|
1105
|
-
const currentAllowance = await getAllowance({
|
|
1106
|
-
tokenAddress: params.tokenAddress,
|
|
1107
|
-
owner: params.owner,
|
|
1108
|
-
spender: params.spender
|
|
1109
|
-
});
|
|
1110
|
-
if (currentAllowance >= params.amount) {
|
|
1111
|
-
return null;
|
|
1112
|
-
}
|
|
1113
|
-
if (currentAllowance > 0n) {
|
|
1114
|
-
await approve({
|
|
1115
|
-
tokenAddress: params.tokenAddress,
|
|
1116
|
-
spender: params.spender,
|
|
1117
|
-
amount: 0n
|
|
1118
|
-
});
|
|
1119
|
-
}
|
|
1120
|
-
return approve(params);
|
|
1121
|
-
};
|
|
1122
|
-
|
|
1123
904
|
// src/lib/solana/connection.ts
|
|
1124
905
|
var currentConnection = {
|
|
1125
906
|
connection: null,
|
|
@@ -1234,6 +1015,10 @@ var SOLANA_FALLBACK_CONNECTORS = isMobile() ? [
|
|
|
1234
1015
|
create: () => createSolanaMobileConnector(createBinanceSolanaDappBrowserConnector())
|
|
1235
1016
|
}
|
|
1236
1017
|
] : [
|
|
1018
|
+
{
|
|
1019
|
+
id: "metamask",
|
|
1020
|
+
create: () => createSolanaMobileConnector(createMetaMaskSolanaConnector())
|
|
1021
|
+
},
|
|
1237
1022
|
{ id: "phantom", create: () => createSolanaMobileConnector(createPhantomSolanaConnector()) },
|
|
1238
1023
|
{
|
|
1239
1024
|
id: "solflare",
|
|
@@ -1244,8 +1029,12 @@ var SOLANA_FALLBACK_CONNECTORS = isMobile() ? [
|
|
|
1244
1029
|
create: () => createSolanaMobileConnector(createTrustSolanaMobileConnector())
|
|
1245
1030
|
},
|
|
1246
1031
|
{ id: "binance", create: () => createSolanaMobileConnector(createBinanceSolanaConnector()) },
|
|
1247
|
-
{ id: "bitget", create: createBitgetSolanaConnector },
|
|
1248
|
-
{ 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
|
+
}
|
|
1249
1038
|
];
|
|
1250
1039
|
var getSolanaWallets = () => {
|
|
1251
1040
|
const { get } = getWallets();
|
|
@@ -1347,6 +1136,266 @@ var checkSolflareSignCallback = () => {
|
|
|
1347
1136
|
if (!isSolflareSignPending()) return null;
|
|
1348
1137
|
return handleSolflareSignCallback();
|
|
1349
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
|
+
};
|
|
1350
1399
|
var useEvmWallet = (options) => {
|
|
1351
1400
|
const [evmConnectors, setEvmConnectors] = createSignal([]);
|
|
1352
1401
|
const [evmConnection, setEvmConnection] = createSignal(null);
|