@mustafair/reputation-sdk
Version:
Official SDK for integrating CARV ID authentication and MustaFair reputation systems into decentralized applications
317 lines (314 loc) • 8.99 kB
TypeScript
export { PublicClient, WalletClient } from 'viem';
export { Connector } from 'wagmi';
interface ReputationData {
tokenId: string;
contributionScore: number;
tier: 'Bronze' | 'Silver' | 'Gold' | 'Platinum';
tierLevel: number;
creationDate: string;
carvIdLinked: boolean;
carvIdHash: string;
isActive: boolean;
metadata: any;
contractAddress: string;
}
interface CarvIdData {
tokenId: string;
metadata: any;
contractAddress: string;
isValid: boolean;
}
interface Web2Binding {
provider: 'github' | 'google';
username?: string;
email?: string;
verified: boolean;
linkedAt: string;
}
interface Web2Achievements {
totalScore: number;
overallTier: 'Bronze' | 'Silver' | 'Gold' | 'Platinum';
providers: any[];
combinedBadges: string[];
metadata: any;
achievementHash: string;
}
interface WalletConnectionConfig {
chains?: Array<{
id: number;
name: string;
rpcUrls: string[];
nativeCurrency: {
name: string;
symbol: string;
decimals: number;
};
}>;
preferredConnectors?: string[];
autoConnect?: boolean;
}
interface CarvIdAuthConfig {
contractAddress: string;
chainId: number;
requiredChains?: number[];
signMessageTemplate?: string;
}
interface AuthenticationResult {
success: boolean;
user?: {
address: string;
tokenId: string;
signature: string;
message: string;
metadata?: any;
web2Achievements?: any;
identityHash: string;
};
error?: string;
}
interface WalletConnection {
address: string;
isConnected: boolean;
chainId: number;
connector?: any;
}
interface FullProfileData {
wallet: string;
reputation: ReputationData | null;
carvId: CarvIdData | null;
web2Achievements: Web2Achievements | null;
network: string;
chainId: number;
contracts: {
reputationNFT?: string;
carvId?: string;
};
timestamp: string;
}
interface CarvIdProfile {
wallet: string;
hasIdentity: boolean;
tokenId: string | null;
metadata: any;
web2Bindings: Web2Binding[];
web2Achievements: Web2Achievements | null;
contractAddress: string;
network: string;
chainId: number;
timestamp: string;
}
interface LeaderboardEntry {
tokenId: string;
wallet: string;
contributionScore: number;
tier: 'Bronze' | 'Silver' | 'Gold' | 'Platinum';
tierLevel: number;
creationDate: string;
carvIdLinked: boolean;
carvIdHash: string;
isActive: boolean;
metadata: any;
}
interface LeaderboardData {
totalCount: number;
page: number;
limit: number;
totalPages: number;
reputations: LeaderboardEntry[];
filters: {
tier?: string;
sortBy: string;
sortOrder: string;
};
contractAddress: string;
network: string;
chainId: number;
timestamp: string;
}
interface PlatformStats {
platform: {
totalUsers: number;
totalReputationNFTs: number;
totalCarvIds: number;
activeUsers: number;
};
reputation: {
totalScore: number;
averageScore: number;
tierDistribution: {
Bronze: number;
Silver: number;
Gold: number;
Platinum: number;
};
topScore: number;
};
web2Integration: {
githubConnections: number;
googleConnections: number;
multiPlatformUsers: number;
averageWeb2Score: number;
};
network: {
name: string;
chainId: number;
blockNumber: string;
};
contracts: {
reputationNFT: string;
carvId: string;
};
lastUpdated: string;
}
interface APIResponse<T> {
success: boolean;
data?: T;
error?: string;
message?: string;
code?: string;
details?: string;
}
interface LeaderboardFilters {
page?: number;
limit?: number;
tier?: 'Bronze' | 'Silver' | 'Gold' | 'Platinum';
sortBy?: 'score' | 'creationDate' | 'tier';
sortOrder?: 'asc' | 'desc';
}
declare class Fair3ReputationSDK {
private baseUrl;
private timeout;
private walletConnection;
private authConfig;
static readonly DEFAULT_CONTRACTS: {
97: string;
31337: string;
};
static readonly DEFAULT_CHAINS: {
id: number;
name: string;
rpcUrls: string[];
nativeCurrency: {
name: string;
symbol: string;
decimals: number;
};
}[];
constructor(baseUrl?: string, timeout?: number, authConfig?: Partial<CarvIdAuthConfig>);
initialize(walletConnection?: WalletConnection): Promise<void>;
setWalletConnection(connection: WalletConnection): void;
getWalletConnection(): WalletConnection | null;
isWalletReady(): boolean;
authenticateWithCarvId(signMessage: (message: string) => Promise<string>, options?: {
fetchMetadata?: boolean;
fetchWeb2Achievements?: boolean;
}): Promise<AuthenticationResult>;
private generateIdentityHash;
prepareCarvIdMint(recipient?: string): Promise<{
to: string;
data: string;
value: string;
chainId: number;
}>;
static getSupportedChains(): {
id: number;
name: string;
rpcUrls: string[];
nativeCurrency: {
name: string;
symbol: string;
decimals: number;
};
}[];
static getDefaultContracts(): {
97: string;
31337: string;
};
private isValidAddress;
private makeRequest;
getProfile(address: string): Promise<FullProfileData>;
getCarvIdProfile(address: string): Promise<CarvIdProfile>;
getReputation(address: string): Promise<ReputationData | null>;
getLeaderboard(filters?: LeaderboardFilters): Promise<LeaderboardData>;
getStats(): Promise<PlatformStats>;
getTopPerformers(tier?: 'Bronze' | 'Silver' | 'Gold' | 'Platinum', limit?: number): Promise<LeaderboardEntry[]>;
hasReputation(address: string): Promise<boolean>;
hasCarvId(address: string): Promise<boolean>;
getTierInfo(address: string): Promise<{
tier: string;
score: number;
tierLevel: number;
} | null>;
searchByTier(tier: 'Bronze' | 'Silver' | 'Gold' | 'Platinum', page?: number, limit?: number): Promise<LeaderboardEntry[]>;
getDocs(): Promise<any>;
static create(baseUrl: string, timeout?: number, authConfig?: Partial<CarvIdAuthConfig>): Fair3ReputationSDK;
static validateAddresses(addresses: string[]): {
valid: string[];
invalid: string[];
};
static getTierValue(tier: string): number;
static formatScore(score: number): string;
checkReputationRequirements(address: string, requirements: {
minScore?: number;
minTier?: 'Bronze' | 'Silver' | 'Gold' | 'Platinum';
requireCarvId?: boolean;
}): Promise<{
meets: boolean;
reasons: string[];
}>;
getBatchProfiles(addresses: string[], options?: {
maxConcurrent?: number;
includeErrors?: boolean;
}): Promise<Array<{
address: string;
profile?: FullProfileData;
error?: string;
}>>;
}
declare const createSDKHooks: (sdk: Fair3ReputationSDK) => {
useProfile: (address?: string) => {
data: null;
loading: boolean;
error: null;
refetch: () => Promise<FullProfileData | null>;
};
useAuthentication: () => {
authenticate: (signMessage: (message: string) => Promise<string>, options?: {
fetchMetadata?: boolean;
fetchWeb2Achievements?: boolean;
}) => Promise<AuthenticationResult>;
isReady: boolean;
connection: WalletConnection | null;
};
};
declare const FAIR3_CONSTANTS: {
SUPPORTED_CHAINS: {
id: number;
name: string;
rpcUrls: string[];
nativeCurrency: {
name: string;
symbol: string;
decimals: number;
};
}[];
CONTRACT_ADDRESSES: {
97: string;
31337: string;
};
TIER_VALUES: {
readonly Bronze: 0;
readonly Silver: 1;
readonly Gold: 2;
readonly Platinum: 3;
};
API_ENDPOINTS: {
readonly REPUTATION: "/api/public/reputation";
readonly CARV_ID: "/api/public/carv-id";
readonly LEADERBOARD: "/api/public/leaderboard";
readonly STATS: "/api/public/stats";
};
};
declare const fair3SDK: Fair3ReputationSDK;
export { FAIR3_CONSTANTS, Fair3ReputationSDK, createSDKHooks, Fair3ReputationSDK as default, fair3SDK };
export type { APIResponse, AuthenticationResult, CarvIdAuthConfig, CarvIdData, CarvIdProfile, FullProfileData, LeaderboardData, LeaderboardEntry, LeaderboardFilters, PlatformStats, ReputationData, WalletConnection, WalletConnectionConfig, Web2Achievements, Web2Binding };