// 1) This part is to enable reuse for Reward and ClaimRewardInput interfaces. interface BaseRewardFields { asset_coin_type: string; // The coin type of the asset being rewarded. reward_coin_type: string; // The coin type used for the reward. rule_ids: string[]; // An array of rule IDs associated with the reward. } // 2) This part is to enable reuse for GroupedAssetPool, ComputedDataItem, and ComputedRule interfaces. interface BaseRule { ruleId: string; option: number; // supply:1, borrow: 3 optionType?: string; // supply:1, borrow: 3 rewardCoinType: string; rewardSymbol?: string; rewardDecimal?: number; // -1 means not found decimal in PriceFeedConfig rate: string; ratePerWeek?: number | null; // if reward coin decimal is not supported, default is null enable: boolean; // Indicates if the rule is enabled or active. } /** ========== Interfaces ========== */ // Original Reward interface export interface Reward extends BaseRewardFields { user_claimable_reward: string | number; user_claimed_reward?: string; option?: number; } // Original ClaimRewardInput interface export interface ClaimRewardInput { reward_coin_type: string; asset_vector: string[]; rules_vector: string[]; } // Original ProcessedReward interface // This interface differs significantly from BaseRewardFields (lacks asset_coin_type, uses numeric types). export interface ProcessedReward { asset_id: string; reward_id: string; reward_coin_type: string; // The coin type used for the reward. option?: number; rule_ids: string[]; // An array of rule IDs associated with the reward. user_claimable_reward: number; user_claimed_reward?: number; } // Original GroupedRewards interface export interface GroupedRewards { [asset_coin_type: string]: ProcessedRewardsList; // A map where the key is the asset coin type, and the value is a list of processed rewards. } // Original RewardsList and ProcessedRewardsList interfaces export interface RewardsList extends Array {} // A list of Reward objects. export interface ProcessedRewardsList extends Array {} // A list of ProcessedReward objects. // Original GroupedAssetPool interface export interface GroupedAssetPool { asset: number; // The asset amount or value. assetSymbol: string; // The coin type of the asset. assetCoinType: string; // The coin type of the asset. rules: BaseRule[]; // An array of rules . } // Original ComputedRule interface export interface ComputedRule extends BaseRule { // Additional fields can be added here if necessary. } // Original ComputedDataItem interface interface ComputedDataItem { asset: number; asset_coin_type: string; rules?: ComputedRule[]; // An optional array of computed rules. } // Original IncentiveApyInfo interface export interface IncentiveApyInfo { rewardCoin: string[]; // An array of coin types used for rewards. apy: number; // Annual percentage yield (APY) for the incentive. } // Original ApyResult interface export interface ApyResult { asset: number; assetCoinType: string; supplyIncentiveApyInfo: IncentiveApyInfo; borrowIncentiveApyInfo: IncentiveApyInfo; } // Original Rule, AssetPool, Pools, and IncentiveData interfaces interface Rule { enable: boolean; global_index: string; id: { id: string }; last_update_at: string; max_rate: string; option: number; rate: string; reward_coin_type: string; } interface AssetPool { asset: number; asset_coin_type: string; id: { id: string }; rules: { fields: { contents: Array<{ fields: { key: string; value: { fields: Rule }; }; }>; }; }; } interface Pools { fields: { contents: Array<{ fields: { key: string; // The asset coin type key. value: { fields: AssetPool; // The associated asset pool details. }; }; }>; }; } export interface IncentiveData { data: { content: { fields: { pools: Pools; // The pools containing asset and incentive details. }; }; }; } export interface ReserveData { id: number; oracle_id: number; coin_type: string; supply_cap: string; borrow_cap: string; supply_rate: string; borrow_rate: string; supply_index: string; borrow_index: string; total_supply: string; total_borrow: string; last_update_at: string; ltv: string; treasury_factor: string; treasury_balance: string; base_rate: string; multiplier: string; jump_rate_multiplier: string; reserve_factor: string; optimal_utilization: string; liquidation_ratio: string; liquidation_bonus: string; liquidation_threshold: string; }