openoracle-sdk-js
Version:
OpenOracle Node.js SDK - Intelligent Oracle Routing with Multiple LLM Providers
102 lines (100 loc) • 3 kB
TypeScript
import { BaseOracleProvider, QueryRequest, QueryResponse, ProviderOptions } from './base';
import { OracleConfig } from '../core/config';
import { OracleClient } from '../core/client';
import { OracleProvider, DataCategory, OracleCapability } from '../types/enums';
import { ProviderConfiguration, PythPriceFeed } from '../schemas/oracle-schemas';
export interface PythQueryOptions extends ProviderOptions {
priceId?: string;
includeConfidence?: boolean;
maxStaleness?: number;
binary?: boolean;
}
export interface PythFeedInfo {
id: string;
symbol: string;
assetType: string;
base: string;
quote: string;
description: string;
genericSymbol?: string;
}
export interface PythPriceUpdate {
id: string;
price: {
price: string;
conf: string;
expo: number;
publishTime: number;
};
emaPrice: {
price: string;
conf: string;
expo: number;
publishTime: number;
};
}
export declare class PythProvider extends BaseOracleProvider {
private readonly hermesEndpoint;
private readonly feedCache;
private lastFeedUpdate;
private readonly FEED_CACHE_TTL;
constructor(config: OracleConfig, client: OracleClient, providerConfig: ProviderConfiguration);
getProviderName(): OracleProvider;
getProviderCapabilities(): OracleCapability[];
getSupportedCategories(): DataCategory[];
getEndpointUrl(): string;
protected getCostPerQuery(): number;
queryData(request: QueryRequest, options?: PythQueryOptions): Promise<QueryResponse>;
/**
* Query price data from Pyth Network
*/
private queryPriceData;
/**
* Find price feed for a given symbol
*/
private findPriceFeed;
/**
* Load price feed directory from Pyth
*/
private loadFeedDirectory;
/**
* Parse Pyth price format
*/
private parsePythPrice;
/**
* Get price status from Pyth data
*/
private getPriceStatus;
/**
* Calculate confidence level based on Pyth confidence interval
*/
private calculateConfidence;
/**
* Extract trading symbol from query
*/
private extractSymbol;
/**
* Get available price feeds
*/
getAvailableFeeds(): Promise<PythFeedInfo[]>;
/**
* Get multiple price feeds at once
*/
getBatchPrices(priceIds: string[]): Promise<PythPriceFeed[]>;
/**
* Get historical price data
*/
getHistoricalPrices(priceId: string, startTime: Date, endTime: Date): Promise<PythPriceFeed[]>;
/**
* Subscribe to real-time price updates
*/
subscribeToPrice(priceId: string, callback: (data: PythPriceFeed) => void): WebSocket;
/**
* Get price feed metadata
*/
getFeedMetadata(priceId: string): Promise<PythFeedInfo | null>;
/**
* Search feeds by asset type
*/
searchFeedsByAssetType(assetType: 'crypto' | 'equity' | 'fx' | 'commodities'): Promise<PythFeedInfo[]>;
}