"""Marketplace plugin — browse, search, verify, and install plugins from the marketplace.""" from __future__ import annotations import logging from app.plugins.base import BasePlugin from app.plugins.manifest import FrontendMenuItem, FrontendPageRoute, PluginManifest, PluginRouteDef logger = logging.getLogger(__name__) class MarketplacePlugin(BasePlugin): """Marketplace plugin for browsing, searching, verifying, and installing plugins.""" manifest = PluginManifest( name="marketplace", version="1.0.0", display_name="Plugin Marketplace", description="Browse, search, verify, and install plugins from the marketplace.", dependencies=[], routes=[ PluginRouteDef( path="/api/v1/marketplace", module="app.plugins.builtins.marketplace.routes", router_attr="router", ), ], events=[], migrations=["0001_initial.sql"], permissions=["marketplace:read", "marketplace:admin"], # UI-Backlog Modul 5 (2026-09-13): marketplace browse/install page, # registered via the manifest (Phase Q pattern). menu_items=[ FrontendMenuItem( label_key="nav.marketplace", label="Marketplace", path="/marketplace", icon="Store", order=85, permission="marketplace:read", ), ], page_routes=[ FrontendPageRoute( path="/marketplace", component="@/pages/Marketplace", protected=True, permission="marketplace:read", ), ], settings_pages=[], detail_tabs=[], author="LeoCRM", min_app_version="1.0.0", hooks=[], contract_version="1.0.0", ) async def on_activate( self, db, service_container, event_bus ) -> None: """Activate marketplace plugin.""" await super().on_activate(db, service_container, event_bus) logger.info("Marketplace plugin activated") async def on_deactivate( self, db, service_container, event_bus ) -> None: """Deactivate marketplace plugin.""" await super().on_deactivate(db, service_container, event_bus) logger.info("Marketplace plugin deactivated")