/** * Shared TypeScript types for the KibiBot CLI. * Mirrors the Agent API + LLM Gateway response shapes. */ export interface KibiConfig { apiKey?: string; apiUrl?: string; llmUrl?: string; } export interface MeResponse { twitter_user_id: string; twitter_username?: string; profile_image_url?: string; followers_count?: number; joined_at?: string; } export interface CreatedTokenItem { token_address: string; name: string; symbol: string; chain: string; platform?: string; created_at?: string; } export interface CreatedTokensResponse { tokens: CreatedTokenItem[]; total: number; page: number; page_size: number; has_more: boolean; } export type FeeRecipient = { address: string; twitter_handle?: never; percent: number; } | { address?: never; twitter_handle: string; percent: number; }; export interface TokenCreateRequest { name: string; symbol: string; chain: string; description?: string; source_url?: string; image_url?: string; platform?: string; target_twitter_handle?: string; fee_recipients?: FeeRecipient[]; } export interface PlatformConfigResponse { platform: string; chain_id: number; platform_fee_bps: number; creator_fee_bps: number; max_fee_recipients: number; max_fee_percent?: number; supports_fee_split: boolean; tax_rate_bps: number; } export interface ValidateHandleResponse { valid: boolean; twitter_user_id?: string; display_name?: string; username?: string; profile_image_url?: string; } export interface QuotaInfo { chain: string; free_used_today: number; free_limit: number; sponsored_remaining: number; } export interface TokenCreateResponse { job_id: number; status: string; chain: string; quota: QuotaInfo; } export interface TokenInfoResponse { token_address: string; name: string; symbol: string; chain: string; platform?: string; creator_twitter_username?: string; price_usd?: string; market_cap_usd?: string; volume_24h_usd?: string; creator_reward_usd?: string; created_at?: string; } export interface JobStatusResponse { job_id: number; status: string; chain?: string; token_address?: string; error?: string; created_at?: string; completed_at?: string; } export interface WalletSlot { address?: string; balance_eth?: string; balance_bnb?: string; balance_sol?: string; balance_usdc_base?: string; balance_usdt_bsc?: string; balance_usdc_solana?: string; eth_error?: string; bnb_error?: string; sol_error?: string; usdc_base_error?: string; usdt_bsc_error?: string; usdc_solana_error?: string; } export interface WalletBalanceResponse { evm_main: WalletSlot; evm_trading: WalletSlot; solana_main: WalletSlot; solana_trading: WalletSlot; bnb_price_usd?: number; eth_price_usd?: number; sol_price_usd?: number; } export interface AgentReloadConfig { enabled: boolean; amount_usd: number; daily_limit_usd: number; chains: string[]; } export interface AgentReloadResponse { success: boolean; amount_usd: string; tx_hash?: string; new_balance_usd?: string; daily_used_usd: string; daily_remaining_usd: string; } export interface KibiCreditBalanceResponse { balance_usd: string; balance_usd_cents: number; agent_reload?: AgentReloadConfig; } export interface ChainQuota { chain: string; free_used_today: number; free_limit: number; sponsored_remaining: number; can_create_paid: boolean; trading_wallet_balance?: string; trading_wallet_address?: string; } export interface QuotaResponse { chains: ChainQuota[]; } export interface SkillItem { name: string; description: string; example?: string; } export interface SkillsResponse { skills: SkillItem[]; total: number; } export interface LlmModelsResponse { models: string[]; } export interface OpenclawModelEntry { id: string; name: string; contextWindow: number; maxTokens: number; input: string[]; api?: string; } export interface OpenclawConfigResponse { provider: string; baseUrl: string; apiKey: string; api: string; models: OpenclawModelEntry[]; } export interface FeeSummaryBsc { chain_id: number; token_count: number; total_earned_bnb: number; bnb_price_usd?: number; } export interface FeeSummaryBase { chain_id: number; token_count: number; basememe_total_earned_eth: string; basememe_claimable_eth: string; clanker_claimable_weth_eth: string; doppler_claimable_weth_eth?: string; doppler_claimable_token_usd?: number; eth_price_usd?: number; } export interface FeeSummarySolana { chain_id: number; token_count: number; total_earnings_sol: number; total_claimable_sol: number; sol_price_usd?: number; } export interface FeeSummaryResponse { bsc: FeeSummaryBsc; base: FeeSummaryBase; solana: FeeSummarySolana; } export interface FeeEarningsBsc { chain: string; chain_id: number; flap: { total_earned_bnb: number; earning_token_count: number; }; fourmeme: { total_earned_bnb: number; earning_token_count: number; }; bfun?: { total_earned_bnb: number; earning_token_count: number; }; } export interface FeeEarningsBase { chain: string; chain_id: number; basememe: { total_earned_eth: string; claimable_eth: string; token_count: number; }; clanker: { claimable_weth_eth: string; token_count: number; }; doppler?: { claimable_weth_eth: string; claimable_token_usd: number; token_count: number; }; } export interface FeeEarningsSolana { chain: string; chain_id: number; pumpfun: { total_earnings_sol: number; total_claimable_sol: number; earning_token_count: number; }; } export type FeeEarningsResponse = FeeEarningsBsc | FeeEarningsBase | FeeEarningsSolana; export interface FeeTokenBsc { token_address: string; token_name: string; token_symbol: string; platform: string; chain: string; earned_bnb: number; } export interface FeeTokenSolana { mint: string; token_name: string; token_symbol: string; platform: string; chain: string; actual_sol: number; distributable_sol: number; total_sol: number; is_graduated: boolean; } export interface FeeTokenUnsupported { platform: string; supported: false; message: string; } export type FeeTokenResponse = FeeTokenBsc | FeeTokenSolana | FeeTokenUnsupported; export interface ProfileTeamMember { name: string; role?: string; links?: string[]; } export interface ProfileProduct { name: string; description?: string; url?: string; } export interface ProfileRevenueSource { name: string; description?: string; } export interface ProfileUpdate { id: string; title: string; content: string; created_at: string; } export interface TopEarningToken { token_address: string; token_name: string; token_symbol: string; chain_id: number; image_url?: string; platform: string; creator_reward: number; creator_reward_24h: number; market_cap?: number; price_usd: number; } export interface ProfileResponse { id: string; name: string; slug: string; description?: string; twitter_username?: string; profile_image_url?: string; team_members?: ProfileTeamMember[]; products?: ProfileProduct[]; revenue_sources?: ProfileRevenueSource[]; total_earnings_usd?: number; earning_tokens_count?: number; total_tokens_created?: number; top_earning_tokens?: TopEarningToken[]; status: string; rejection_reason?: string; pending_changes?: Record | null; submitted_at?: string; approved_at?: string; featured?: boolean; updates?: ProfileUpdate[]; created_at?: string; updated_at?: string; } export interface ProfileCreateRequest { name: string; description?: string; team_members?: ProfileTeamMember[]; products?: ProfileProduct[]; } export interface ProfileUpdateRequest { name?: string; description?: string; team_members?: ProfileTeamMember[]; products?: ProfileProduct[]; } export interface ProjectUpdateCreateRequest { title: string; content: string; } export interface ProjectUpdateResponse { id: string; title: string; content: string; } export interface ApiErrorResponse { detail?: string; message?: string; }