near-protocol-rewards
Version:
A transparent, metric-based rewards system for NEAR projects
155 lines (154 loc) • 4.53 kB
TypeScript
/**
* Core Type Definitions
*
* Contains all shared types used throughout the SDK.
* Maintains type safety and consistency across components.
*
* Key type hierarchies:
* - Metrics (GitHub)
* - Validation (Results, Errors)
* - Configuration (Settings, Options)
*
* @important
* Update these types carefully as they affect the entire SDK
*/
import { z } from "zod";
import { Logger } from "../utils/logger";
export type MetricsSource = "github";
export type ValidationType = "data" | "security" | "config";
export interface StorageConfig {
type: "postgres";
config: {
host: string;
port: number;
database: string;
user: string;
password: string;
};
}
export interface ValidationConfig {
github: {
minCommits?: number;
maxCommitsPerDay?: number;
minAuthors?: number;
};
maxTimeDrift?: number;
maxDataAge?: number;
}
export declare const SDKConfigSchema: z.ZodObject<{
githubRepo: z.ZodString;
githubToken: z.ZodString;
timeframe: z.ZodOptional<z.ZodEnum<["day", "week", "month"]>>;
logLevel: z.ZodOptional<z.ZodEnum<["debug", "info", "warn", "error"]>>;
maxRequestsPerSecond: z.ZodOptional<z.ZodNumber>;
validation: z.ZodOptional<z.ZodObject<{
github: z.ZodOptional<z.ZodObject<{
minCommits: z.ZodNumber;
maxCommitsPerDay: z.ZodNumber;
minAuthors: z.ZodNumber;
}, "strip", z.ZodTypeAny, {
minCommits: number;
maxCommitsPerDay: number;
minAuthors: number;
}, {
minCommits: number;
maxCommitsPerDay: number;
minAuthors: number;
}>>;
}, "strip", z.ZodTypeAny, {
github?: {
minCommits: number;
maxCommitsPerDay: number;
minAuthors: number;
} | undefined;
}, {
github?: {
minCommits: number;
maxCommitsPerDay: number;
minAuthors: number;
} | undefined;
}>>;
weights: z.ZodOptional<z.ZodObject<{
commits: z.ZodNumber;
pullRequests: z.ZodNumber;
reviews: z.ZodNumber;
issues: z.ZodNumber;
}, "strip", z.ZodTypeAny, {
commits: number;
pullRequests: number;
reviews: number;
issues: number;
}, {
commits: number;
pullRequests: number;
reviews: number;
issues: number;
}>>;
}, "strip", z.ZodTypeAny, {
githubToken: string;
githubRepo: string;
timeframe?: "day" | "week" | "month" | undefined;
maxRequestsPerSecond?: number | undefined;
logLevel?: "debug" | "info" | "warn" | "error" | undefined;
validation?: {
github?: {
minCommits: number;
maxCommitsPerDay: number;
minAuthors: number;
} | undefined;
} | undefined;
weights?: {
commits: number;
pullRequests: number;
reviews: number;
issues: number;
} | undefined;
}, {
githubToken: string;
githubRepo: string;
timeframe?: "day" | "week" | "month" | undefined;
maxRequestsPerSecond?: number | undefined;
logLevel?: "debug" | "info" | "warn" | "error" | undefined;
validation?: {
github?: {
minCommits: number;
maxCommitsPerDay: number;
minAuthors: number;
} | undefined;
} | undefined;
weights?: {
commits: number;
pullRequests: number;
reviews: number;
issues: number;
} | undefined;
}>;
export type SDKConfig = z.infer<typeof SDKConfigSchema>;
export interface BaseCollectorConfig {
logger: Logger;
maxRequestsPerSecond?: number;
}
export interface GitHubCollectorConfig extends BaseCollectorConfig {
repo: string;
token: string;
}
export { JSONValue, ErrorDetail } from "./json";
export { ValidationError, ValidationWarning, ValidationResult, ValidationMetadata, } from "./validation";
export { GitHubMetrics, ProcessedMetrics, MetricsMetadata, Score, RewardCalculation, } from "./metrics";
export { ErrorCode } from "./errors";
export { LogContext, ErrorLogContext } from "./logger";
export * from "./json";
export * from "./errors";
export * from "./logger";
export * from "./sdk";
export interface ValidationThresholds {
github: {
minCommits: number;
maxCommitsPerDay: number;
minAuthors: number;
};
}
export interface ValidationContext {
thresholds: ValidationThresholds;
logger: Logger;
}