UNPKG

near-protocol-rewards

Version:

A transparent, metric-based rewards system for NEAR projects

119 lines (118 loc) 2.65 kB
import { ValidationResult } from "./validation"; export type MetricsSource = "github"; export interface Score { total: number; breakdown: { commits: number; pullRequests: number; reviews: number; issues: number; }; } export interface MetricsMetadata { source: MetricsSource; projectId: string; collectionTimestamp: number; periodStart: number; periodEnd: number; } export interface GitHubMetrics { commits: { count: number; frequency: { daily: number[]; weekly: number; monthly: number; }; authors: Array<{ login: string; count: number; }>; }; pullRequests: { open: number; merged: number; closed: number; authors: string[]; }; reviews: { count: number; authors: string[]; }; issues: { open: number; closed: number; participants: string[]; }; metadata: { collectionTimestamp: number; source: MetricsSource; projectId: string; }; } export interface WalletActivity { timestamp: number; transactionHash: string; type: 'incoming' | 'outgoing'; details: { signerId: string; receiverId: string; actions: any[]; }; } export interface NearMetrics { activities: WalletActivity[]; timestamp: number; } export interface ProcessedMetrics { github: GitHubMetrics; near?: NearMetrics; score: { total: number; breakdown: { commits: number; pullRequests: number; reviews: number; issues: number; }; }; timestamp: number; collectionTimestamp: number; validation: ValidationResult; metadata: { source: 'github' | 'github+near'; projectId: string; collectionTimestamp: number; periodStart: number; periodEnd: number; }; periodStart: number; periodEnd: number; } export interface RewardCalculation { score: Score; breakdown: { commits: number; pullRequests: number; reviews: number; issues: number; }; level: { name: string; minScore: number; maxScore: number; color: string; }; achievements: Array<{ id: string; name: string; description: string; earnedAt: string; category: "commit" | "pr" | "review" | "issue"; }>; metadata: { timestamp: number; periodStart: number; periodEnd: number; }; }