async function checkUserEligibility(questId, userAddress, accessToken) {
const response = await fetch('https://graphigo-business.prd.galaxy.eco/query', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'access-token': accessToken
},
body: JSON.stringify({
query: `query CheckUserEligibility($questId: ID!, $address: String!) {
quest(id: $questId) {
id
name
status
credentialGroups(address: $address) {
id
name
conditionRelation
conditions {
expression
eligible
}
rewards {
expression
eligible
rewardType
rewardCount
}
}
}
}`,
variables: { questId, address: userAddress }
})
});
const data = await response.json();
const quest = data.data.quest;
if (!quest) throw new Error('Quest not found');
const eligibilityResults = quest.credentialGroups.map(group => {
// Check conditions based on relation (ALL or ANY)
const conditionsMet = group.conditionRelation === 'ALL'
? group.conditions.every(c => c.eligible)
: group.conditions.some(c => c.eligible);
const eligibleRewards = group.rewards.filter(r => r.eligible);
return {
groupId: group.id,
groupName: group.name,
conditionsMet,
eligibleRewards
};
});
const isEligible = eligibilityResults.some(r => r.conditionsMet && r.eligibleRewards.length > 0);
return {
questId,
userAddress,
isEligible,
eligibilityDetails: eligibilityResults,
questName: quest.name,
questStatus: quest.status
};
}