@tomo-inc/wallet-adaptor-base 0.0.1
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/CHANGELOG.md +3 -0
- package/README.md +60 -0
- package/dist/index.cjs +2485 -0
- package/dist/index.d.cts +184 -0
- package/dist/index.d.ts +184 -0
- package/dist/index.js +2471 -0
- package/package.json +31 -0
- package/project.json +67 -0
- package/src/chains/type.ts +3 -0
- package/src/chains/utils.ts +20 -0
- package/src/index.ts +93 -0
- package/src/svg.d.ts +4 -0
- package/src/type.ts +99 -0
- package/src/utils/browsers.ts +39 -0
- package/src/utils/chainId.ts +27 -0
- package/src/utils/isMobile.ts +22 -0
- package/src/utils/utils.ts +14 -0
- package/src/wallet-api/balance.ts +96 -0
- package/src/wallet-api/chain.ts +59 -0
- package/src/wallet-api/connect.ts +65 -0
- package/src/wallet-api/index.ts +5 -0
- package/src/wallet-api/sign-in.ts +103 -0
- package/src/wallet-api/sign-message.ts +60 -0
- package/src/wallets/Wallet.ts +37 -0
- package/src/wallets/default/backpackWallet/backpackWallet.svg +1 -0
- package/src/wallets/default/backpackWallet/backpackWallet.ts +23 -0
- package/src/wallets/default/berasigWallet/berasigWallet.svg +1 -0
- package/src/wallets/default/berasigWallet/berasigWallet.ts +22 -0
- package/src/wallets/default/binanceWallet/binanceWallet.svg +1 -0
- package/src/wallets/default/binanceWallet/binanceWallet.ts +23 -0
- package/src/wallets/default/bitgetWallet/bitgetWallet.svg +4 -0
- package/src/wallets/default/bitgetWallet/bitgetWallet.ts +30 -0
- package/src/wallets/default/bitskiWallet/bitskiWallet.svg +1 -0
- package/src/wallets/default/bitskiWallet/bitskiWallet.ts +17 -0
- package/src/wallets/default/bitverseWallet/bitverseWallet.svg +1 -0
- package/src/wallets/default/bitverseWallet/bitverseWallet.ts +17 -0
- package/src/wallets/default/bloomWallet/bloomWallet.svg +1 -0
- package/src/wallets/default/bloomWallet/bloomWallet.ts +15 -0
- package/src/wallets/default/braveWallet/braveWallet.svg +1 -0
- package/src/wallets/default/braveWallet/braveWallet.ts +20 -0
- package/src/wallets/default/bybitWallet/bybitWallet.svg +1 -0
- package/src/wallets/default/bybitWallet/bybitWallet.ts +23 -0
- package/src/wallets/default/clvWallet/clvWallet.svg +1 -0
- package/src/wallets/default/clvWallet/clvWallet.ts +21 -0
- package/src/wallets/default/coin98Wallet/coin98Wallet.svg +1 -0
- package/src/wallets/default/coin98Wallet/coin98Wallet.ts +25 -0
- package/src/wallets/default/coinbaseWallet/coinbaseWallet.svg +4 -0
- package/src/wallets/default/coinbaseWallet/coinbaseWallet.ts +25 -0
- package/src/wallets/default/compassWallet/compassWallet.svg +1 -0
- package/src/wallets/default/compassWallet/compassWallet.ts +19 -0
- package/src/wallets/default/coreWallet/coreWallet.svg +7 -0
- package/src/wallets/default/coreWallet/coreWallet.ts +24 -0
- package/src/wallets/default/ctrlWallet/ctrlWallet.svg +13 -0
- package/src/wallets/default/ctrlWallet/ctrlWallet.ts +24 -0
- package/src/wallets/default/dawnWallet/dawnWallet.svg +23 -0
- package/src/wallets/default/dawnWallet/dawnWallet.ts +16 -0
- package/src/wallets/default/desigWallet/desigWallet.svg +1 -0
- package/src/wallets/default/desigWallet/desigWallet.ts +21 -0
- package/src/wallets/default/enkryptWallet/enkryptWallet.svg +10 -0
- package/src/wallets/default/enkryptWallet/enkryptWallet.ts +24 -0
- package/src/wallets/default/foxWallet/foxWallet.svg +6 -0
- package/src/wallets/default/foxWallet/foxWallet.ts +19 -0
- package/src/wallets/default/frameWallet/frameWallet.svg +1 -0
- package/src/wallets/default/frameWallet/frameWallet.ts +17 -0
- package/src/wallets/default/gateWallet/gateWallet.svg +1 -0
- package/src/wallets/default/gateWallet/gateWallet.ts +24 -0
- package/src/wallets/default/imTokenWallet/imTokenWallet.svg +10 -0
- package/src/wallets/default/imTokenWallet/imTokenWallet.ts +18 -0
- package/src/wallets/default/injectedWallet/injectedWallet.svg +1 -0
- package/src/wallets/default/injectedWallet/injectedWallet.ts +12 -0
- package/src/wallets/default/iopayWallet/iopayWallet.svg +1 -0
- package/src/wallets/default/iopayWallet/iopayWallet.ts +18 -0
- package/src/wallets/default/kaiaWallet/kaiaWallet.svg +16 -0
- package/src/wallets/default/kaiaWallet/kaiaWallet.ts +22 -0
- package/src/wallets/default/kaikasWallet/kaikasWallet.svg +1 -0
- package/src/wallets/default/kaikasWallet/kaikasWallet.ts +22 -0
- package/src/wallets/default/krakenWallet/krakenWallet.svg +1 -0
- package/src/wallets/default/krakenWallet/krakenWallet.ts +17 -0
- package/src/wallets/default/kresusWallet/kresusWallet.svg +1 -0
- package/src/wallets/default/kresusWallet/kresusWallet.ts +17 -0
- package/src/wallets/default/ledgerWallet/ledgerWallet.svg +1 -0
- package/src/wallets/default/ledgerWallet/ledgerWallet.ts +23 -0
- package/src/wallets/default/magicEdenWallet/magicEden.svg +1 -0
- package/src/wallets/default/magicEdenWallet/magicEdenWallet.ts +25 -0
- package/src/wallets/default/mathWallet/icon.ts +2 -0
- package/src/wallets/default/mathWallet/mathWallet.ts +24 -0
- package/src/wallets/default/metaMaskWallet/icon.ts +2 -0
- package/src/wallets/default/metaMaskWallet/metaMaskWallet.svg +32 -0
- package/src/wallets/default/metaMaskWallet/metaMaskWallet.ts +88 -0
- package/src/wallets/default/myDogeWallet/icon.ts +2 -0
- package/src/wallets/default/myDogeWallet/mydogeWallet.svg +190 -0
- package/src/wallets/default/myDogeWallet/mydogeWallet.ts +20 -0
- package/src/wallets/default/nestWallet/nestWallet.svg +1 -0
- package/src/wallets/default/nestWallet/nestWallet.ts +17 -0
- package/src/wallets/default/novaWallet/novaWallet.svg +19 -0
- package/src/wallets/default/novaWallet/novaWallet.ts +30 -0
- package/src/wallets/default/oktoWallet/oktoWallet.svg +1 -0
- package/src/wallets/default/oktoWallet/oktoWallet.ts +18 -0
- package/src/wallets/default/okxWallet/okxWallet.svg +1 -0
- package/src/wallets/default/okxWallet/okxWallet.ts +32 -0
- package/src/wallets/default/omniWallet/omniWallet.svg +5 -0
- package/src/wallets/default/omniWallet/omniWallet.ts +18 -0
- package/src/wallets/default/oneInchWallet/oneInchWallet.svg +1 -0
- package/src/wallets/default/oneInchWallet/oneInchWallet.ts +18 -0
- package/src/wallets/default/oneKeyWallet/oneKeyWallet.svg +1 -0
- package/src/wallets/default/oneKeyWallet/oneKeyWallet.ts +25 -0
- package/src/wallets/default/paraSwapWallet/paraSwapWallet.svg +1 -0
- package/src/wallets/default/paraSwapWallet/paraswapWallet.ts +17 -0
- package/src/wallets/default/phantomWallet/phantomWallet.svg +1 -0
- package/src/wallets/default/phantomWallet/phantomWallet.ts +30 -0
- package/src/wallets/default/rabbyWallet/rabbyWallet.svg +1 -0
- package/src/wallets/default/rabbyWallet/rabbyWallet.ts +18 -0
- package/src/wallets/default/rainbowWallet/rainbowWallet.svg +54 -0
- package/src/wallets/default/rainbowWallet/rainbowWallet.ts +24 -0
- package/src/wallets/default/ramperWallet/ramperWallet.svg +1 -0
- package/src/wallets/default/ramperWallet/ramperWallet.ts +19 -0
- package/src/wallets/default/readyWallet/readyWallet.svg +4 -0
- package/src/wallets/default/readyWallet/readyWallet.ts +18 -0
- package/src/wallets/default/roninWallet/roninWallet.svg +1 -0
- package/src/wallets/default/roninWallet/roninWallet.ts +25 -0
- package/src/wallets/default/safeWallet/safeWallet.svg +6 -0
- package/src/wallets/default/safeWallet/safeWallet.ts +18 -0
- package/src/wallets/default/safeheronWallet/safeheronWallet.svg +1 -0
- package/src/wallets/default/safeheronWallet/safeheronWallet.ts +17 -0
- package/src/wallets/default/safepalWallet/safepalWallet.svg +1 -0
- package/src/wallets/default/safepalWallet/safepalWallet.ts +24 -0
- package/src/wallets/default/seifWallet/seifWallet.svg +12 -0
- package/src/wallets/default/seifWallet/seifWallet.ts +18 -0
- package/src/wallets/default/solflareWallet/icon.ts +2 -0
- package/src/wallets/default/solflareWallet/solflareWallet.ts +23 -0
- package/src/wallets/default/subWallet/subWallet.svg +1 -0
- package/src/wallets/default/subWallet/subWallet.ts +25 -0
- package/src/wallets/default/tahoWallet/tahoWallet.svg +1 -0
- package/src/wallets/default/tahoWallet/tahoWallet.ts +19 -0
- package/src/wallets/default/talismanWallet/talismanWallet.svg +1 -0
- package/src/wallets/default/talismanWallet/talismanWallet.ts +19 -0
- package/src/wallets/default/tokenPocketWallet/tokenPocketWallet.svg +1 -0
- package/src/wallets/default/tokenPocketWallet/tokenPocketWallet.ts +26 -0
- package/src/wallets/default/tokenaryWallet/tokenaryWallet.svg +1 -0
- package/src/wallets/default/tokenaryWallet/tokenaryWallet.ts +19 -0
- package/src/wallets/default/trezorWallet/icon.ts +2 -0
- package/src/wallets/default/trezorWallet/trezorWallet.ts +19 -0
- package/src/wallets/default/trustWallet/trustWallet.svg +1 -0
- package/src/wallets/default/trustWallet/trustWallet.ts +25 -0
- package/src/wallets/default/uniswapWallet/uniswapWallet.svg +1 -0
- package/src/wallets/default/uniswapWallet/uniswapWallet.ts +17 -0
- package/src/wallets/default/universalProfilesWallet/icon.ts +2 -0
- package/src/wallets/default/universalProfilesWallet/universalProfilesWallet.svg +1353 -0
- package/src/wallets/default/universalProfilesWallet/universalProfilesWallet.ts +22 -0
- package/src/wallets/default/valoraWallet/valoraWallet.svg +1 -0
- package/src/wallets/default/valoraWallet/valoraWallet.ts +18 -0
- package/src/wallets/default/walletConnectWallet/walletConnectWallet.svg +4 -0
- package/src/wallets/default/walletConnectWallet/walletConnectWallet.ts +18 -0
- package/src/wallets/default/wigwamWallet/wigwamWallet.svg +9 -0
- package/src/wallets/default/wigwamWallet/wigwamWallet.ts +20 -0
- package/src/wallets/default/xPortalWallet/xPortalWallet.svg +6 -0
- package/src/wallets/default/xPortalWallet/xPortalWallet.ts +22 -0
- package/src/wallets/default/zealWallet/zealWallet.svg +1 -0
- package/src/wallets/default/zealWallet/zealWallet.ts +25 -0
- package/src/wallets/default/zerionWallet/zerionWallet.svg +1 -0
- package/src/wallets/default/zerionWallet/zerionWallet.ts +24 -0
- package/src/wallets/default/zilPayWallet/zilPayWallet.svg +17 -0
- package/src/wallets/default/zilPayWallet/zilPayWallet.ts +21 -0
- package/src/wallets/detector.ts +136 -0
- package/src/wallets/index.ts +210 -0
- package/src/wallets/providers/WalletConnectProvider.ts +346 -0
- package/src/wallets/providers/WalletConnectSolanaProvider.ts +351 -0
- package/src/wallets/wallet-eip6963.ts +70 -0
- package/src/wallets/wallet-standard.ts +77 -0
- package/src/wallets/wallet-walletconnect.ts +202 -0
- package/tsconfig.json +7 -0
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import { Connector, ProviderProtocol, WalletInfo } from "../type";
|
|
2
|
+
import { uniqueConnectors } from "../utils/utils";
|
|
3
|
+
|
|
4
|
+
const announceEvent = "eip6963:announceProvider";
|
|
5
|
+
const requestEvent = "eip6963:requestProvider";
|
|
6
|
+
const walletType = "evm";
|
|
7
|
+
const timeout = 1000;
|
|
8
|
+
|
|
9
|
+
export async function eip6963Wallets(): Promise<Connector[]> {
|
|
10
|
+
return new Promise((resolve) => {
|
|
11
|
+
const evmWallets: Connector[] = [];
|
|
12
|
+
|
|
13
|
+
const timeoutId = setTimeout(() => {
|
|
14
|
+
window.removeEventListener(announceEvent, handleProviderAnnouncement as EventListener);
|
|
15
|
+
|
|
16
|
+
const wallets = uniqueConnectors(evmWallets);
|
|
17
|
+
resolve(wallets);
|
|
18
|
+
}, timeout);
|
|
19
|
+
|
|
20
|
+
function handleProviderAnnouncement(event: CustomEvent<{ info: WalletInfo; provider: any }>) {
|
|
21
|
+
try {
|
|
22
|
+
const { info: wallet, provider } = event.detail;
|
|
23
|
+
|
|
24
|
+
const isInfoValid =
|
|
25
|
+
typeof wallet?.uuid === "string" &&
|
|
26
|
+
typeof wallet?.name === "string" &&
|
|
27
|
+
typeof wallet?.icon === "string" &&
|
|
28
|
+
typeof wallet?.rdns === "string";
|
|
29
|
+
|
|
30
|
+
if (wallet && provider && isInfoValid && typeof provider.request === "function") {
|
|
31
|
+
const existingWallet = evmWallets.find((w) => w.info.uuid === wallet.uuid);
|
|
32
|
+
if (!existingWallet) {
|
|
33
|
+
evmWallets.push({
|
|
34
|
+
info: {
|
|
35
|
+
uuid: wallet.rdns || encodeURIComponent(wallet.name),
|
|
36
|
+
name: wallet.name,
|
|
37
|
+
icon: wallet.icon,
|
|
38
|
+
rdns: wallet.rdns,
|
|
39
|
+
links: {
|
|
40
|
+
homepage: (wallet as any)?.homepage || "",
|
|
41
|
+
},
|
|
42
|
+
},
|
|
43
|
+
isInstalled: true,
|
|
44
|
+
providers: {
|
|
45
|
+
[walletType]: {
|
|
46
|
+
provider,
|
|
47
|
+
protocol: ProviderProtocol.EIP6963,
|
|
48
|
+
},
|
|
49
|
+
},
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
} catch (error) {
|
|
54
|
+
console.warn(`${ProviderProtocol.EIP6963} detect error:`, error);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
// Use type assertion to cast to EventListener since the CustomEvent is expected
|
|
59
|
+
window.addEventListener(announceEvent, handleProviderAnnouncement as EventListener);
|
|
60
|
+
|
|
61
|
+
try {
|
|
62
|
+
window.dispatchEvent(new Event(requestEvent));
|
|
63
|
+
} catch (error) {
|
|
64
|
+
console.warn(`Error ${requestEvent}:`, error);
|
|
65
|
+
clearTimeout(timeoutId);
|
|
66
|
+
window.removeEventListener(announceEvent, handleProviderAnnouncement as EventListener);
|
|
67
|
+
resolve(evmWallets);
|
|
68
|
+
}
|
|
69
|
+
});
|
|
70
|
+
}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import { uniqueConnectors } from "../utils/utils";
|
|
2
|
+
import { Connector, ProviderProtocol } from "../type";
|
|
3
|
+
|
|
4
|
+
const registerWalletEvent = "wallet-standard:register-wallet";
|
|
5
|
+
const requestRegisterWalletEvent = "wallet-standard:request-register-wallet";
|
|
6
|
+
const timeout = 1000;
|
|
7
|
+
|
|
8
|
+
export function walletStandardWallets() {
|
|
9
|
+
return new Promise((resolve) => {
|
|
10
|
+
const wallets: Record<string, Connector[]> = {
|
|
11
|
+
solana: [] as Connector[],
|
|
12
|
+
aptos: [] as Connector[],
|
|
13
|
+
sui: [] as Connector[],
|
|
14
|
+
};
|
|
15
|
+
|
|
16
|
+
const timeoutId = setTimeout(() => {
|
|
17
|
+
window.removeEventListener(registerWalletEvent, handleWalletRegistration);
|
|
18
|
+
|
|
19
|
+
const result = {
|
|
20
|
+
solanaWallets: uniqueConnectors(wallets.solana),
|
|
21
|
+
aptosWallets: uniqueConnectors(wallets.aptos),
|
|
22
|
+
suiWallets: uniqueConnectors(wallets.sui),
|
|
23
|
+
};
|
|
24
|
+
resolve(result);
|
|
25
|
+
}, timeout);
|
|
26
|
+
|
|
27
|
+
function handleWalletRegistration(wallet: any) {
|
|
28
|
+
try {
|
|
29
|
+
console.warn(registerWalletEvent, wallet.name, wallet.features, wallet);
|
|
30
|
+
if (!wallet || !wallet?.name || !wallet?.icon || !wallet.features) {
|
|
31
|
+
return;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
for (const walletType in wallets) {
|
|
35
|
+
const signTransaction = wallet.features?.[`${walletType}:signTransaction`];
|
|
36
|
+
const signMessage = wallet.features?.[`${walletType}:signMessage`];
|
|
37
|
+
const isExist = wallets[walletType].find((w) => w.info.name === wallet.name);
|
|
38
|
+
if (signTransaction && signMessage && !isExist) {
|
|
39
|
+
wallets[walletType].push({
|
|
40
|
+
info: {
|
|
41
|
+
uuid: wallet.rdns || encodeURIComponent(wallet.name),
|
|
42
|
+
name: wallet.name,
|
|
43
|
+
icon: wallet.icon,
|
|
44
|
+
rdns: wallet.rdns,
|
|
45
|
+
links: {
|
|
46
|
+
homepage: wallet.homepage || "",
|
|
47
|
+
},
|
|
48
|
+
},
|
|
49
|
+
isInstalled: true,
|
|
50
|
+
providers: {
|
|
51
|
+
[walletType]: {
|
|
52
|
+
provider: wallet.features,
|
|
53
|
+
protocol: ProviderProtocol.WALLET_STANDARD,
|
|
54
|
+
},
|
|
55
|
+
},
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
} catch (error) {
|
|
60
|
+
console.warn(`${ProviderProtocol.WALLET_STANDARD} detect error:`, error);
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
window.addEventListener(registerWalletEvent, (data: any) => {
|
|
65
|
+
data.detail({ register: (wallet: any) => handleWalletRegistration(wallet) });
|
|
66
|
+
});
|
|
67
|
+
|
|
68
|
+
try {
|
|
69
|
+
window.dispatchEvent(new Event(requestRegisterWalletEvent));
|
|
70
|
+
} catch (error) {
|
|
71
|
+
console.warn("Error requesting wallet-standard registration:", error);
|
|
72
|
+
clearTimeout(timeoutId);
|
|
73
|
+
window.removeEventListener(registerWalletEvent, handleWalletRegistration);
|
|
74
|
+
resolve(wallets);
|
|
75
|
+
}
|
|
76
|
+
});
|
|
77
|
+
}
|
|
@@ -0,0 +1,202 @@
|
|
|
1
|
+
import { Connector, ProviderProtocol } from "../type";
|
|
2
|
+
import { walletConnectWallet } from "./default/walletConnectWallet/walletConnectWallet";
|
|
3
|
+
import { WalletConnectProvider } from "./providers/WalletConnectProvider";
|
|
4
|
+
import { WalletConnectSolanaProvider } from "./providers/WalletConnectSolanaProvider";
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* WalletConnect wallet configuration
|
|
8
|
+
* Can be set via setWalletConnectConfig() before calling walletConnectWallets()
|
|
9
|
+
*/
|
|
10
|
+
let walletConnectConfig: {
|
|
11
|
+
projectId: string;
|
|
12
|
+
metadata: {
|
|
13
|
+
name: string;
|
|
14
|
+
description: string;
|
|
15
|
+
url: string;
|
|
16
|
+
icons: string[];
|
|
17
|
+
};
|
|
18
|
+
} | null = null;
|
|
19
|
+
|
|
20
|
+
let providerInstance: WalletConnectProvider | null = null;
|
|
21
|
+
let solanaProviderInstance: WalletConnectSolanaProvider | null = null;
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
* Set WalletConnect configuration
|
|
25
|
+
* Must be called before using WalletConnect wallet
|
|
26
|
+
*/
|
|
27
|
+
export function setWalletConnectConfig(config: {
|
|
28
|
+
projectId: string;
|
|
29
|
+
metadata: {
|
|
30
|
+
name: string;
|
|
31
|
+
description: string;
|
|
32
|
+
url: string;
|
|
33
|
+
icons: string[];
|
|
34
|
+
};
|
|
35
|
+
}): void {
|
|
36
|
+
walletConnectConfig = config;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* Get WalletConnect wallet as Connector
|
|
41
|
+
* Returns a single WalletConnect connector that can connect to any mobile wallet
|
|
42
|
+
*/
|
|
43
|
+
export async function walletConnectWallets(): Promise<Connector[]> {
|
|
44
|
+
const wallet = walletConnectWallet();
|
|
45
|
+
const connector = convertWalletToConnector(wallet);
|
|
46
|
+
return [connector];
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
/**
|
|
50
|
+
* Convert WalletConnect Wallet to Connector format
|
|
51
|
+
*/
|
|
52
|
+
function convertWalletToConnector(wallet: ReturnType<typeof walletConnectWallet>): Connector {
|
|
53
|
+
return {
|
|
54
|
+
info: {
|
|
55
|
+
uuid: wallet.id,
|
|
56
|
+
name: wallet.name,
|
|
57
|
+
icon: wallet.icon,
|
|
58
|
+
iconBackground: wallet.iconBackground,
|
|
59
|
+
isWalletConnect: true,
|
|
60
|
+
links: {
|
|
61
|
+
homepage: "https://walletconnect.com",
|
|
62
|
+
qrCode: "https://walletconnect.com",
|
|
63
|
+
mobile: "https://walletconnect.com",
|
|
64
|
+
},
|
|
65
|
+
},
|
|
66
|
+
isInstalled: true, // Always available
|
|
67
|
+
providers: {
|
|
68
|
+
evm: {
|
|
69
|
+
provider: createWalletConnectEVMProvider(),
|
|
70
|
+
protocol: ProviderProtocol.WALLET_CONNECT,
|
|
71
|
+
},
|
|
72
|
+
// solana: {
|
|
73
|
+
// provider: createWalletConnectSolanaProvider(),
|
|
74
|
+
// protocol: ProviderProtocol.WALLET_CONNECT,
|
|
75
|
+
// },
|
|
76
|
+
},
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
/**
|
|
81
|
+
* Create a WalletConnect provider instance
|
|
82
|
+
* Provider will be initialized when connect() is called
|
|
83
|
+
*/
|
|
84
|
+
function createWalletConnectEVMProvider(): any {
|
|
85
|
+
const getProvider = async () => {
|
|
86
|
+
if (!providerInstance) {
|
|
87
|
+
if (!walletConnectConfig) {
|
|
88
|
+
throw new Error("WalletConnect not configured. Please call setWalletConnectConfig() first.");
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
providerInstance = new WalletConnectProvider(walletConnectConfig);
|
|
92
|
+
await providerInstance.initialize();
|
|
93
|
+
}
|
|
94
|
+
return providerInstance;
|
|
95
|
+
};
|
|
96
|
+
return {
|
|
97
|
+
// Lazy initialization
|
|
98
|
+
getProvider,
|
|
99
|
+
|
|
100
|
+
// EIP-1193 compatible request method
|
|
101
|
+
request: async (args: { method: string; params?: any[] }) => {
|
|
102
|
+
const provider = await getProvider();
|
|
103
|
+
return provider.request(args);
|
|
104
|
+
},
|
|
105
|
+
|
|
106
|
+
// Connect method
|
|
107
|
+
connect: async (config?: { chains?: string[] }) => {
|
|
108
|
+
const provider = await getProvider();
|
|
109
|
+
return provider.connect();
|
|
110
|
+
},
|
|
111
|
+
|
|
112
|
+
// Disconnect method
|
|
113
|
+
disconnect: async () => {
|
|
114
|
+
if (providerInstance) {
|
|
115
|
+
await providerInstance.disconnect();
|
|
116
|
+
}
|
|
117
|
+
},
|
|
118
|
+
|
|
119
|
+
// getter for connectUri
|
|
120
|
+
get connectUri() {
|
|
121
|
+
return providerInstance?.uri || null;
|
|
122
|
+
},
|
|
123
|
+
|
|
124
|
+
// Event listeners
|
|
125
|
+
on: (event: string, listener: (...args: any[]) => void) => {
|
|
126
|
+
if (providerInstance) {
|
|
127
|
+
providerInstance.on(event, listener);
|
|
128
|
+
}
|
|
129
|
+
},
|
|
130
|
+
|
|
131
|
+
off: (event: string, listener: (...args: any[]) => void) => {
|
|
132
|
+
if (providerInstance) {
|
|
133
|
+
providerInstance.off(event, listener);
|
|
134
|
+
}
|
|
135
|
+
},
|
|
136
|
+
|
|
137
|
+
// Metadata
|
|
138
|
+
isWalletConnect: true,
|
|
139
|
+
};
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
/**
|
|
143
|
+
* Create a WalletConnect Solana provider instance
|
|
144
|
+
* Provider will be initialized when connect() is called
|
|
145
|
+
*/
|
|
146
|
+
function createWalletConnectSolanaProvider(): any {
|
|
147
|
+
const getProvider = async () => {
|
|
148
|
+
if (!solanaProviderInstance) {
|
|
149
|
+
if (!walletConnectConfig) {
|
|
150
|
+
throw new Error("WalletConnect not configured. Please call setWalletConnectConfig() first.");
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
solanaProviderInstance = new WalletConnectSolanaProvider(walletConnectConfig);
|
|
154
|
+
await solanaProviderInstance.initialize();
|
|
155
|
+
}
|
|
156
|
+
return solanaProviderInstance;
|
|
157
|
+
};
|
|
158
|
+
return {
|
|
159
|
+
// Lazy initialization
|
|
160
|
+
getProvider,
|
|
161
|
+
|
|
162
|
+
// Solana WalletConnect compatible request method
|
|
163
|
+
request: async (args: { method: string; params?: any }) => {
|
|
164
|
+
const provider = await getProvider();
|
|
165
|
+
return provider.request(args);
|
|
166
|
+
},
|
|
167
|
+
|
|
168
|
+
// Connect method
|
|
169
|
+
connect: async () => {
|
|
170
|
+
const provider = await getProvider();
|
|
171
|
+
return provider.connect();
|
|
172
|
+
},
|
|
173
|
+
|
|
174
|
+
// Disconnect method
|
|
175
|
+
disconnect: async () => {
|
|
176
|
+
if (solanaProviderInstance) {
|
|
177
|
+
await solanaProviderInstance.disconnect();
|
|
178
|
+
}
|
|
179
|
+
},
|
|
180
|
+
|
|
181
|
+
// getter for connectUri
|
|
182
|
+
get connectUri() {
|
|
183
|
+
return solanaProviderInstance?.uri || null;
|
|
184
|
+
},
|
|
185
|
+
|
|
186
|
+
// Event listeners
|
|
187
|
+
on: (event: string, listener: (...args: any[]) => void) => {
|
|
188
|
+
if (solanaProviderInstance) {
|
|
189
|
+
solanaProviderInstance.on(event, listener);
|
|
190
|
+
}
|
|
191
|
+
},
|
|
192
|
+
|
|
193
|
+
off: (event: string, listener: (...args: any[]) => void) => {
|
|
194
|
+
if (solanaProviderInstance) {
|
|
195
|
+
solanaProviderInstance.off(event, listener);
|
|
196
|
+
}
|
|
197
|
+
},
|
|
198
|
+
|
|
199
|
+
// Metadata
|
|
200
|
+
isWalletConnect: true,
|
|
201
|
+
};
|
|
202
|
+
}
|