refactor: split mcp auth catalog stores

This commit is contained in:
lda
2026-06-06 19:07:10 +07:00 Verified
parent 4b7088726b
commit 79a3ee4c7a
18 changed files with 303 additions and 61 deletions
+2 -2
View File
@@ -6,7 +6,7 @@ from typing import Any
from wf_api import WorkflowAdminAuthProvider
from wf_api.auth import AuthRecord as NeutralAuthRecord
from ...storage import Store
from ...storage import AuthStore
@dataclass(frozen=True, slots=True)
@@ -17,7 +17,7 @@ class McpAuthAdminProvider(WorkflowAdminAuthProvider):
auth variants can provide richer safe display later.
"""
store: Store
store: AuthStore
def list_auth_records(self) -> list[dict[str, Any]]:
return [
+8 -3
View File
@@ -37,7 +37,7 @@ from ...models import (
from ...runtime import ToolExecutor
from ...sdk import BackendAdapter
from ...source_registry import SourceRegistryStore
from ...storage import Store
from ...storage import AuthStore, CatalogStore, Store
from ..admin_capabilities import admin_source
from ..catalog import CombinedCatalog
from .builtins import builtin_sources
@@ -60,6 +60,8 @@ class WfMcpService:
"""
store: Store
auth_store: AuthStore | None = None
catalog_store: CatalogStore | None = None
default_catalog_max_age_seconds: int = 300
event_bus: EventBus = field(default_factory=EventBus)
include_builtin_specs: bool = True
@@ -83,13 +85,16 @@ class WfMcpService:
"""
self.events = BrokerEventRecorder(self.event_bus)
self.connection_service = ConnectionService(events=self.events)
auth_store = self.auth_store or self.store
catalog_store = self.catalog_store or self.store
self.upstream = UpstreamTransportService(
store=self.store,
auth_store=auth_store,
catalog_store=catalog_store,
event_sink=self.events.record_event,
tool_executor=self.tool_executor,
)
self.source_catalog = SourceCatalogService(
store=self.store,
store=catalog_store,
connection_lookup=self.connection_service.get,
connection_list_enabled=self.connection_service.list_enabled,
connection_list_all=self.connection_service.list_all,
+2 -2
View File
@@ -30,7 +30,7 @@ from ...models import (
CatalogSnapshot,
)
from ...runtime import ToolExecutor
from ...storage import Store
from ...storage import CatalogStore
from ...workflow.wrappers import _model_from_schema
from ..catalog import CombinedCatalog, snapshot_from_specs
from .specs import get_qualified_spec, qualify_spec
@@ -51,7 +51,7 @@ class SourceCatalogService:
the broker's configured tool executor.
"""
store: Store
store: CatalogStore
connection_lookup: ConnectionLookup
connection_list_enabled: ConnectionList
connection_list_all: ConnectionList
@@ -28,7 +28,7 @@ from wf_mcp.models import CatalogSnapshot, ConnectionConfig
from wf_mcp.runtime import ToolExecutor
from wf_mcp.sdk import BackendAdapter
from wf_mcp.shared.errors import error_payload
from wf_mcp.storage import Store
from wf_mcp.storage import AuthStore, CatalogStore
from ...auth import connection_auth_diagnostic
from .adapters import require_adapter
@@ -45,7 +45,8 @@ class UpstreamTransportService:
admin calls, discovery, generated workflow NodeSpecs, and live source checks.
"""
store: Store
auth_store: AuthStore
catalog_store: CatalogStore
event_sink: EventSink
adapters: dict[str, BackendAdapter] = field(default_factory=dict)
tool_executor: ToolExecutor | None = None
@@ -54,7 +55,7 @@ class UpstreamTransportService:
self.adapters[server] = adapter
def save_auth(self, record: AuthRecord) -> None:
self.store.save_auth(record)
self.auth_store.save_auth(record)
self.event_sink(
make_event(
"auth_saved",
@@ -64,7 +65,7 @@ class UpstreamTransportService:
)
def load_auth(self, connection_id: str) -> AuthRecord | None:
return self.store.load_auth(connection_id)
return self.auth_store.load_auth(connection_id)
def load_connection_auth(self, connection: ConnectionConfig) -> AuthRecord | None:
"""Resolve auth for a connection, preferring explicit source auth_ref.
@@ -251,7 +252,7 @@ class UpstreamTransportService:
fetched_at_epoch_ms=int(time.time() * 1000),
max_age_seconds=max_age_seconds or default_catalog_max_age_seconds,
)
self.store.save_catalog(snapshot)
self.catalog_store.save_catalog(snapshot)
record_catalog_change_events(connection.id, snapshot, "catalog_refresh")
self.event_sink(
make_event(