Adds a POST endpoint `/api/verify-success` to `webServer.js` for handling verification callbacks from aethex.dev, including secret validation and role assignment. Updates `federationProtection.js` and `federation.js` to integrate trust level calculations and benefits. Introduces a new `trustLevels.js` utility file to manage trust level definitions, progression, and related logic. Replit-Commit-Author: Agent Replit-Commit-Session-Id: aed2e46d-25bb-4b73-81a1-bb9e8437c261 Replit-Commit-Checkpoint-Type: full_checkpoint Replit-Commit-Event-Id: 98ebd9a6-5755-4d7f-ae64-9ed93f1eae4f Replit-Commit-Screenshot-Url: https://storage.googleapis.com/screenshot-production-us-central1/3bdfff67-975a-46ad-9845-fbb6b4a4c4b5/aed2e46d-25bb-4b73-81a1-bb9e8437c261/3tJ1Z1J Replit-Helium-Checkpoint-Created: true
195 lines
5.2 KiB
JavaScript
195 lines
5.2 KiB
JavaScript
const TRUST_LEVELS = {
|
|
bronze: {
|
|
name: 'Bronze',
|
|
emoji: '🥉',
|
|
color: 0xcd7f32,
|
|
requirements: {
|
|
minMembers: 0,
|
|
minDays: 0,
|
|
minReputationScore: 0
|
|
},
|
|
benefits: {
|
|
autoAction: 'alert',
|
|
severityThreshold: 'critical',
|
|
directoryListing: true,
|
|
featuredEligible: false,
|
|
partnershipLimit: 3
|
|
}
|
|
},
|
|
silver: {
|
|
name: 'Silver',
|
|
emoji: '🥈',
|
|
color: 0xc0c0c0,
|
|
requirements: {
|
|
minMembers: 100,
|
|
minDays: 30,
|
|
minReputationScore: 50
|
|
},
|
|
benefits: {
|
|
autoAction: 'kick',
|
|
severityThreshold: 'medium',
|
|
directoryListing: true,
|
|
featuredEligible: false,
|
|
partnershipLimit: 5
|
|
}
|
|
},
|
|
gold: {
|
|
name: 'Gold',
|
|
emoji: '🥇',
|
|
color: 0xffd700,
|
|
requirements: {
|
|
minMembers: 500,
|
|
minDays: 90,
|
|
minReputationScore: 200
|
|
},
|
|
benefits: {
|
|
autoAction: 'ban',
|
|
severityThreshold: 'medium',
|
|
directoryListing: true,
|
|
featuredEligible: true,
|
|
partnershipLimit: 10
|
|
}
|
|
},
|
|
platinum: {
|
|
name: 'Platinum',
|
|
emoji: '💎',
|
|
color: 0xe5e4e2,
|
|
requirements: {
|
|
minMembers: 1000,
|
|
minDays: 180,
|
|
minReputationScore: 500
|
|
},
|
|
benefits: {
|
|
autoAction: 'ban',
|
|
severityThreshold: 'low',
|
|
directoryListing: true,
|
|
featuredEligible: true,
|
|
partnershipLimit: 20
|
|
}
|
|
}
|
|
};
|
|
|
|
const TRUST_ORDER = ['bronze', 'silver', 'gold', 'platinum'];
|
|
|
|
function calculateTrustLevel(serverData) {
|
|
const memberCount = serverData.member_count || 0;
|
|
const joinedAt = new Date(serverData.joined_federation_at || serverData.joined_at);
|
|
const daysInFederation = Math.floor((Date.now() - joinedAt.getTime()) / (1000 * 60 * 60 * 24));
|
|
const reputationScore = serverData.reputation_score || 0;
|
|
|
|
let qualifiedLevel = 'bronze';
|
|
|
|
for (const level of TRUST_ORDER) {
|
|
const reqs = TRUST_LEVELS[level].requirements;
|
|
if (memberCount >= reqs.minMembers &&
|
|
daysInFederation >= reqs.minDays &&
|
|
reputationScore >= reqs.minReputationScore) {
|
|
qualifiedLevel = level;
|
|
} else {
|
|
break;
|
|
}
|
|
}
|
|
|
|
return qualifiedLevel;
|
|
}
|
|
|
|
function getTrustLevelInfo(level) {
|
|
return TRUST_LEVELS[level] || TRUST_LEVELS.bronze;
|
|
}
|
|
|
|
function getNextTrustLevel(currentLevel) {
|
|
const currentIndex = TRUST_ORDER.indexOf(currentLevel);
|
|
if (currentIndex === -1 || currentIndex >= TRUST_ORDER.length - 1) {
|
|
return null;
|
|
}
|
|
return TRUST_ORDER[currentIndex + 1];
|
|
}
|
|
|
|
function getProgressToNextLevel(serverData) {
|
|
const currentLevel = serverData.trust_level || 'bronze';
|
|
const nextLevel = getNextTrustLevel(currentLevel);
|
|
|
|
if (!nextLevel) {
|
|
return { nextLevel: null, progress: {}, allMet: true };
|
|
}
|
|
|
|
const reqs = TRUST_LEVELS[nextLevel].requirements;
|
|
const memberCount = serverData.member_count || 0;
|
|
const joinedAt = new Date(serverData.joined_federation_at || serverData.joined_at);
|
|
const daysInFederation = Math.floor((Date.now() - joinedAt.getTime()) / (1000 * 60 * 60 * 24));
|
|
const reputationScore = serverData.reputation_score || 0;
|
|
|
|
const progress = {
|
|
members: {
|
|
current: memberCount,
|
|
required: reqs.minMembers,
|
|
met: memberCount >= reqs.minMembers,
|
|
percentage: Math.min(100, Math.floor((memberCount / reqs.minMembers) * 100)) || 0
|
|
},
|
|
days: {
|
|
current: daysInFederation,
|
|
required: reqs.minDays,
|
|
met: daysInFederation >= reqs.minDays,
|
|
percentage: Math.min(100, Math.floor((daysInFederation / reqs.minDays) * 100)) || 0
|
|
},
|
|
reputation: {
|
|
current: reputationScore,
|
|
required: reqs.minReputationScore,
|
|
met: reputationScore >= reqs.minReputationScore,
|
|
percentage: Math.min(100, Math.floor((reputationScore / reqs.minReputationScore) * 100)) || 0
|
|
}
|
|
};
|
|
|
|
const allMet = progress.members.met && progress.days.met && progress.reputation.met;
|
|
|
|
return { nextLevel, nextLevelInfo: TRUST_LEVELS[nextLevel], progress, allMet };
|
|
}
|
|
|
|
function shouldAutoAction(trustLevel, banSeverity, isPremium) {
|
|
const levelInfo = getTrustLevelInfo(trustLevel);
|
|
const severityOrder = ['low', 'medium', 'high', 'critical'];
|
|
|
|
const banSeverityIndex = severityOrder.indexOf(banSeverity);
|
|
const thresholdIndex = severityOrder.indexOf(levelInfo.benefits.severityThreshold);
|
|
|
|
if (banSeverityIndex < thresholdIndex) {
|
|
if (banSeverity === 'critical') {
|
|
return { action: 'ban', reason: 'critical_severity' };
|
|
}
|
|
return { action: 'alert', reason: 'below_threshold' };
|
|
}
|
|
|
|
if (isPremium) {
|
|
return { action: levelInfo.benefits.autoAction, reason: 'premium_protection' };
|
|
}
|
|
|
|
if (banSeverity === 'critical') {
|
|
return { action: 'ban', reason: 'critical_severity' };
|
|
}
|
|
|
|
return { action: 'alert', reason: 'free_tier' };
|
|
}
|
|
|
|
function calculateReputationChange(action, successful = true) {
|
|
const reputationValues = {
|
|
ban_report: successful ? 10 : -5,
|
|
report_verified: 15,
|
|
false_positive: -20,
|
|
event_hosted: 25,
|
|
partnership_formed: 10,
|
|
monthly_activity: 5
|
|
};
|
|
|
|
return reputationValues[action] || 0;
|
|
}
|
|
|
|
module.exports = {
|
|
TRUST_LEVELS,
|
|
TRUST_ORDER,
|
|
calculateTrustLevel,
|
|
getTrustLevelInfo,
|
|
getNextTrustLevel,
|
|
getProgressToNextLevel,
|
|
shouldAutoAction,
|
|
calculateReputationChange
|
|
};
|