UNPKG

openoracle-sdk-js

Version:

OpenOracle Node.js SDK - Intelligent Oracle Routing with Multiple LLM Providers

235 lines (233 loc) 6.76 kB
import { OracleClient } from '../core/client'; import { OracleConfig } from '../core/config'; import { DataCategory, ResolutionMethod, ConfidenceLevel } from '../types/enums'; import { OraclePollData } from '../schemas/oracle-schemas'; export interface CreatePollRequest { question: string; description?: string; category: DataCategory; options: string[]; endTime: Date; resolutionMethod: ResolutionMethod; minimumStake?: number; maximumStake?: number; creatorStake?: number; tags?: string[]; metadata?: Record<string, any>; } export interface PollVote { pollId: string; optionIndex: number; stake: number; confidence: ConfidenceLevel; reasoning?: string; timestamp: Date; voterAddress: string; } export interface PollResolution { pollId: string; winningOption: number; resolutionData: any; resolutionSource: string; confidence: ConfidenceLevel; timestamp: Date; totalPayout: number; resolverAddress: string; } export interface PollStatistics { pollId: string; totalVotes: number; totalStake: number; uniqueVoters: number; averageStake: number; confidenceDistribution: Record<ConfidenceLevel, number>; optionStatistics: Array<{ option: string; votes: number; stake: number; percentage: number; averageConfidence: number; }>; timeSeriesData: Array<{ timestamp: Date; cumulativeVotes: number; cumulativeStake: number; optionPercentages: number[]; }>; } export interface UserPollActivity { userId: string; totalPolls: number; totalVotes: number; totalStake: number; successRate: number; averageConfidence: number; expertiseAreas: DataCategory[]; recentPolls: OraclePollData[]; recentVotes: PollVote[]; earnings: { total: number; thisMonth: number; lastMonth: number; averageReturn: number; }; } export declare class PollAPI { private readonly client; private readonly config; constructor(client: OracleClient, config: OracleConfig); /** * Create a new prediction poll */ createPoll(request: CreatePollRequest): Promise<{ pollId: string; }>; /** * Get poll details */ getPoll(pollId: string): Promise<OraclePollData>; /** * List polls with filtering options */ listPolls(options?: { category?: DataCategory; status?: 'active' | 'closed' | 'resolved' | 'cancelled'; creator?: string; tags?: string[]; limit?: number; offset?: number; sortBy?: 'created_time' | 'end_time' | 'total_stake' | 'total_votes'; sortOrder?: 'asc' | 'desc'; }): Promise<{ polls: OraclePollData[]; total: number; hasMore: boolean; }>; /** * Vote on a poll */ vote(pollId: string, optionIndex: number, stake: number, confidence?: ConfidenceLevel, reasoning?: string): Promise<{ success: boolean; voteId: string; }>; /** * Get poll statistics */ getPollStatistics(pollId: string): Promise<PollStatistics>; /** * Get user's voting history */ getUserActivity(userAddress: string): Promise<UserPollActivity>; /** * Resolve a poll (for authorized resolvers) */ resolvePoll(pollId: string, winningOption: number, resolutionData: any, resolutionSource: string): Promise<{ success: boolean; transactionHash?: string; }>; /** * Get poll resolution details */ getPollResolution(pollId: string): Promise<PollResolution>; /** * Get trending polls */ getTrendingPolls(timeframe?: '1h' | '6h' | '1d' | '1w', category?: DataCategory): Promise<Array<{ poll: OraclePollData; metrics: { voteVelocity: number; stakeVelocity: number; socialMentions: number; trendingScore: number; }; }>>; /** * Search polls by keywords */ searchPolls(query: string, options?: { category?: DataCategory; status?: 'active' | 'closed' | 'resolved'; limit?: number; includeContent?: boolean; }): Promise<OraclePollData[]>; /** * Get poll recommendations for user */ getRecommendations(userAddress: string, limit?: number): Promise<Array<{ poll: OraclePollData; relevanceScore: number; reason: string; }>>; /** * Subscribe to poll updates */ subscribeToPollUpdates(pollId: string, callback: (update: { type: 'vote' | 'resolution' | 'status_change'; data: any; timestamp: Date; }) => void): EventSource; /** * Subscribe to new polls in category */ subscribeToNewPolls(category: DataCategory, callback: (poll: OraclePollData) => void): EventSource; /** * Get market maker opportunities */ getMarketMakerOpportunities(minLiquidity: number, maxRisk: number, categories?: DataCategory[]): Promise<Array<{ poll: OraclePollData; opportunity: { expectedReturn: number; riskScore: number; liquidityNeeded: number; timeToResolution: number; confidenceGap: number; }; }>>; /** * Create automated poll resolution */ createAutomatedResolution(pollId: string, resolutionConfig: { oracleProviders: string[]; consensusThreshold: number; dataSource: string; resolutionLogic: string; fallbackMethod?: ResolutionMethod; }): Promise<{ success: boolean; resolutionId: string; }>; /** * Get poll analytics */ getPollAnalytics(pollId: string): Promise<{ demographics: { voterDistribution: Record<string, number>; experienceDistribution: Record<string, number>; geographicDistribution: Record<string, number>; }; predictions: { currentProbabilities: number[]; probabilityHistory: Array<{ timestamp: Date; probabilities: number[]; }>; expertPredictions: Array<{ expert: string; prediction: number; confidence: number; track_record: number; }>; }; market: { efficiency: number; liquidity: number; volatility: number; arbitrageOpportunities: Array<{ description: string; profit: number; risk: number; }>; }; }>; private validatePollRequest; }