generated from nathanwoodburn/python-webserver-template
88 lines
2.6 KiB
JavaScript
88 lines
2.6 KiB
JavaScript
|
// Get a list of all the wallets available
|
||
|
// Try to connect to window.solana and window.solflare
|
||
|
|
||
|
const solflareWallet = window.solflare;
|
||
|
const phantomWallet = window.solana;
|
||
|
|
||
|
var wallets = [];
|
||
|
// Check which are valid
|
||
|
if (phantomWallet && phantomWallet.isPhantom) {
|
||
|
console.log("Phantom wallet found");
|
||
|
wallets.push("Phantom");
|
||
|
}
|
||
|
if (solflareWallet && solflareWallet.isSolflare) {
|
||
|
console.log("Solflare wallet found");
|
||
|
wallets.push("Solflare");
|
||
|
}
|
||
|
|
||
|
async function connectPhantomWallet() {
|
||
|
try {
|
||
|
const { publicKey } = await phantomWallet.connect();
|
||
|
console.log("Connected to Phantom wallet with public key", publicKey.toBase58());
|
||
|
return publicKey.toBase58();
|
||
|
}
|
||
|
catch (err) {
|
||
|
console.error("Wallet connection failed", err);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
async function connectSolflareWallet() {
|
||
|
try {
|
||
|
await solflareWallet.connect();
|
||
|
const publicKey = solflareWallet.publicKey.toBase58();
|
||
|
console.log("Connected to Solflare wallet with public key", publicKey);
|
||
|
return publicKey;
|
||
|
}
|
||
|
catch (err) {
|
||
|
console.error("Wallet connection failed", err);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
// Inject buttons to connect the wallets
|
||
|
function injectButtons() {
|
||
|
// Get div to hold buttons
|
||
|
var div = document.getElementById("wallet-buttons");
|
||
|
if (!div) {
|
||
|
return;
|
||
|
}
|
||
|
// Clear the div
|
||
|
div.innerHTML = "";
|
||
|
|
||
|
// If no wallets found, add message
|
||
|
if (wallets.length == 0) {
|
||
|
var p = document.createElement("p");
|
||
|
p.innerText = "No wallets found";
|
||
|
div.appendChild(p);
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
// Add buttons for each wallet
|
||
|
for (var i = 0; i < wallets.length; i++) {
|
||
|
var button = document.createElement("button");
|
||
|
button.className = "btn btn-primary";
|
||
|
button.style.margin = "5px";
|
||
|
button.innerText = wallets[i];
|
||
|
if (wallets[i] == "Phantom") {
|
||
|
button.onclick = async function () {
|
||
|
var publicKey = await connectPhantomWallet();
|
||
|
if (publicKey) {
|
||
|
window.location.href = "/?publicKey=" + publicKey;
|
||
|
}
|
||
|
};
|
||
|
};
|
||
|
if (wallets[i] == "Solflare") {
|
||
|
button.onclick = async function () {
|
||
|
var publicKey = await connectSolflareWallet();
|
||
|
if (publicKey) {
|
||
|
window.location.href = "/?publicKey=" + publicKey;
|
||
|
}
|
||
|
};
|
||
|
};
|
||
|
div.appendChild(button);
|
||
|
}
|
||
|
console.log("Wallet buttons injected");
|
||
|
}
|
||
|
|
||
|
// Wait for page to load
|
||
|
window.addEventListener("load", injectButtons);
|