teoat
deploy: sync from main Sun Jan 11 18:43:53 WIT 2026
4a2ab42
from typing import Any
from core.plugin_system import PluginContext, PluginInterface, PluginMetadata
class FraudMetricsWidgetPlugin(PluginInterface):
"""
Returns configuration for rendering a Fraud Metrics widget on the frontend.
"""
@property
def metadata(self) -> PluginMetadata:
return PluginMetadata( # Metadata is defined in json usually but interface requires property
name="fraud_metrics_widget",
version="1.0.0",
namespace="zenith/ui/fraud_metrics_widget",
author="Zenith Team",
description="Dashboard widget configuration for displaying fraud trends",
dependencies={},
capabilities=["ui_widget", "dashboard"],
security_level="official",
api_version="v1",
)
async def initialize(self, context: PluginContext) -> bool:
self.context = context
self.config = context.config or {"refresh_interval": 300, "chart_type": "line"}
return True
async def execute(self, inputs: dict[str, Any]) -> dict[str, Any]:
"""
Returns the Widget Definition JSON.
Inputs: {"user_role": "admin", ...}
"""
# We could customize the widget based on user role here
return {
"widget_id": "fraud_trends_v1",
"title": "Fraud Detection Trends",
"type": self.config.get("chart_type", "line"),
"data_source": "/api/metrics/fraud",
"layout": {"w": 6, "h": 4, "min_w": 3, "min_h": 3},
"props": {
"color": "#FF4444",
"legend": True,
"refresh_interval_ms": self.config.get("refresh_interval", 300) * 1000,
},
}
async def cleanup(self) -> None:
pass
def validate_config(self, config: dict[str, Any]) -> list[str]:
return []