export type HealthPayload = { status?: string; db?: { ok?: boolean }; }; export type SystemStatusPayload = { state_storage_mode?: string; db?: { ok?: boolean; db_path?: string }; features?: Record; cache?: { api_cache_entries?: number; open_meteo_forecast_entries?: number; metar_entries?: number; taf_entries?: number; settlement_entries?: number; analysis?: { total_requests?: number; cache_hits?: number; cache_misses?: number; force_refresh_requests?: number; hit_rate?: number | null; }; }; probability?: { engine_mode?: string; rollout?: Record; }; integrations?: Record; training_data?: { truth_records?: { row_count?: number; cities_count?: number; min_date?: string | null; max_date?: string | null; source_counts?: Record; }; training_features?: { row_count?: number; cities_count?: number; min_date?: string | null; max_date?: string | null; }; city_coverage?: { total_cities?: number; with_truth_rows?: number; with_feature_rows?: number; }; model_cities?: { strongest?: Array<{ city: string; truth_rows?: number; feature_rows?: number }>; gaps?: string[]; }; }; }; export type SourceHealthSource = { role?: string; source_code?: string; source_label?: string; station_code?: string | null; station_label?: string | null; status?: "fresh" | "expected_wait" | "delayed" | "stale" | "missing" | "unknown" | string; reason?: string | null; age_sec?: number | null; age_min?: number | null; observed_at?: string | null; expected_next_update_at?: string | null; temp?: number | null; }; export type SourceHealthCity = { city: string; cache_exists?: boolean; cache_updated_at?: string | null; cache_age_sec?: number | null; source_count?: number; worst_status?: string; sources?: SourceHealthSource[]; }; export type SourceHealthPayload = { checked_at?: string; cities?: SourceHealthCity[]; status_counts?: Record; total_cities?: number; }; export type ObservationCollectorStatus = | "ok" | "due" | "cooldown" | "failed" | "never_run" | string; export type ObservationCollectorEntry = { source: string; city: string; interval_sec?: number; last_due_at?: string | null; last_started_at?: string | null; last_success_at?: string | null; last_failure_at?: string | null; last_latency_ms?: number | null; failure_count?: number; last_error?: string | null; updated_at?: string | null; next_due_at?: string | null; due_in_sec?: number | null; age_sec?: number | null; in_cooldown?: boolean; cooldown_until_at?: string | null; status?: ObservationCollectorStatus; }; export type ObservationCollectorSourceSummary = { source: string; city_count?: number; interval_sec?: number; min_interval_sec?: number; max_interval_sec?: number; failure_count?: number; cooldown_count?: number; status_counts?: Record; avg_latency_ms?: number | null; last_success_at?: string | null; last_failure_at?: string | null; worst_status?: ObservationCollectorStatus; }; export type ObservationCollectorStatusPayload = { checked_at?: string; entries?: ObservationCollectorEntry[]; sources?: ObservationCollectorSourceSummary[]; status_counts?: Record; total_entries?: number; }; export type PaymentRuntimePayload = { rpc?: Record | string; chain_id?: number; receiver_contract?: string; last_scanned_block?: number; audit_events_count?: number; checkout?: Record; event_loop_state?: Record; recent_audit_events?: Array>; recent_events?: Array>; }; export type PaymentIncident = { id: number; event_type?: string; reason?: string; detail?: string; intent_id?: string; user_id?: string; tx_hash?: string; refund_case_id?: number | string | null; refund_status?: string; payload_json?: string; created_at?: string; resolved?: boolean; resolved_at?: string; resolved_by?: string; occurrence_count?: number; event_ids?: number[]; first_seen_at?: string; last_seen_at?: string; }; export type RefundCase = { id: number; status?: string; reason?: string; intent_id?: string; tx_hash?: string; user_id?: string; amount_usdc?: string; created_by?: string; handled_by?: string; notes?: Array<{ note?: string; by?: string; at?: string }>; created_at?: string; updated_at?: string; }; export type RefundCasesPayload = { refunds?: RefundCase[]; }; export type OpsAuditEvent = { id: number; action?: string; actor_email?: string; target_user_id?: string; target_email?: string; target_type?: string; target_id?: string; payload?: Record; created_at?: string; }; export type OpsAuditPayload = { events?: OpsAuditEvent[]; total?: number; }; export type IncidentsPayload = { incidents?: PaymentIncident[]; total?: number; }; export type PaymentRecord = { id: number; user_id?: string; amount?: number; currency?: string; chain?: string; tx_hash?: string; status?: string; created_at?: string; }; export type PaymentsPayload = { payments?: PaymentRecord[]; total?: number; }; export type UserFeedbackEntry = { id: number; category?: string; message?: string; source?: string; status?: string; contact?: string; user_id?: string; user_email?: string; context?: Record; reward_points?: number; reward_reason?: string; rewarded_at?: string | null; reward_status?: string; created_at?: string; updated_at?: string; }; export type UserFeedbackPayload = { feedback?: UserFeedbackEntry[]; total?: number; status_counts?: Record; }; export type BillingRiskIssue = { category?: string; severity?: "high" | "medium" | "low" | string; title?: string; detail?: string; user_id?: string; created_at?: string; reference?: string; payload?: Record; }; export type BillingRiskPayload = { checked_at?: string; window_days?: number; summary?: { issues?: number; stuck_intents?: number; trial_gaps?: number; payment_incidents?: number; points_discount_issues?: number; referral_settlement_issues?: number; monthly_cap_hits?: number; recent_referral_rewards?: number; recent_trial_claims?: number; }; issues?: BillingRiskIssue[]; stuck_intents?: Array>; trial_gaps?: Array>; payment_incidents?: Array>; points_discount_issues?: Array>; referral_settlement_issues?: Array>; monthly_cap_hits?: Array>; recent_referral_rewards?: Array>; recent_trial_claims?: Array>; query_errors?: Array<{ table?: string; error?: string }>; }; export type OpsUser = { telegram_id?: number; username?: string; supabase_email?: string; points?: number; weekly_points?: number; message_count?: number; }; export type UsersPayload = { users?: OpsUser[]; }; export type GrantPointsResult = { ok?: boolean; points_added?: number; points_after?: number; reason?: string; }; export type MembershipEntry = { email?: string; username?: string; user_id?: string; starts_at?: string; expires_at?: string; total_expires_at?: string; queued_days?: number; queued_count?: number; plan_code?: string; source?: string; is_trial?: boolean; }; export type MembershipsPayload = { memberships?: MembershipEntry[]; total?: number; }; export type LeaderboardEntry = { telegram_id?: number; username?: string; weekly_points?: number; rank?: number; }; export type LeaderboardPayload = { leaderboard?: LeaderboardEntry[]; }; export type FunnelPayload = { steps?: Array<{ label: string; count: number; pct_of_prev?: number; }>; period_days?: number; }; export type TruthHistoryPayload = { rows?: Array>; total?: number; }; export type ConfigEntry = { key: string; value: string; description: string; };