testing-20241230 #1

Closed
Ghost wants to merge 4 commits from (deleted):testing-20241230 into main
2 changed files with 69 additions and 2 deletions

View File

@ -213,7 +213,28 @@ const loadCards = async () => {
const validatedCards = await Promise.all(
response.map(async card => {
const isValid = await validateCardStructure(card);
return isValid ? card : null;
if (!isValid) {
return null;
}
// Check if the name is currently owned by any address
let nameData;
try {
nameData = await qortalRequest({
action: "GET_NAME_DATA",
name: card.name
});
// If the name is unowned, an error is returned, skip the card
if (!nameData || !nameData.owner) {
console.warn(`Skipping card with unowned or unknown name: ${card.name}`);
return null;
}
} catch (err) {
console.warn(`Error fetching name data for card name: ${card.name}`, err);
return null;
}
// If structure is valid and name is owned, we consider the card valid
card.address = nameData.owner
return card;
})
);
@ -224,7 +245,18 @@ const loadCards = async () => {
return;
}
const finalCards = await processMinterCards(validCards)
// Filter out cards owned by addresses already in the Minter group.
const minterGroupData = await fetchMinterGroupMembers();
const minterGroupAddresses = minterGroupData.map(m => m.member);
const notInMinterGroupCards = validCards.filter(
(card) => !minterGroupAddresses.includes(card.address)
);
if (notInMinterGroupCards.length === 0) {
cardsContainer.innerHTML = "<p>No cards to display. (All belong to existing Minters.)</p>";
return;
}
const finalCards = await processMinterCards(notInMinterGroupCards);
// Sort cards by timestamp descending (newest first)
// validCards.sort((a, b) => {
@ -263,6 +295,26 @@ const loadCards = async () => {
return;
}
// Fetch the poll's owner (the address that created the poll)
let pollOwner;
try {
pollOwner = await fetchPollOwner(cardDataResponse.poll);
if (!pollOwner) {
console.warn(`Skipping card, could not fetch poll owner for: ${cardDataResponse.poll}`);
removeSkeleton(card.identifier);
return;
}
} catch (err) {
console.warn(`Error fetching poll owner for poll ${cardDataResponse.poll}`, err);
removeSkeleton(card.identifier);
return;
}
if (card.address !== pollOwner) {
console.warn(`Skipping card ${card.identifier}, mismatch: name owner != poll owner`);
removeSkeleton(card.identifier);
return;
}
// Fetch poll results
const pollResults = await fetchPollResults(cardDataResponse.poll);
const BgColor = generateDarkPastelBackgroundBy(card.name)

View File

@ -1126,6 +1126,21 @@ const voteYesOnPoll = async (poll) => {
optionIndex: 1,
})
}
// Fetch poll owner -----------------------------
const fetchPollOwner = async (pollName) => {
try {
const response = await fetch(`${baseUrl}/polls/${pollName}`, {
method: 'GET',
headers: { 'Accept': 'application/json' }
})
const pollData = await response.json()
return pollData.owner
} catch (error) {
console.error(`Error fetching poll owner for ${pollName}:`, error)
return null
}
}
// export {
// userState,