Files
dify/api/services/trigger/event_gateway.py

47 lines
2.1 KiB
Python

"""Adapt plugin event declarations and invocation without exposing provider controllers."""
from collections.abc import Mapping
from typing import Any
from core.plugin.entities.request import TriggerInvokeEventResponse
from core.plugin.impl.trigger import PluginTriggerClient
from core.plugin.utils.http_parser import deserialize_request
from core.trigger.errors import EventIgnoreError
from core.trigger.trigger_manager import TriggerManager
from models.provider_ids import TriggerProviderID
from services.trigger.event_service import PreparedTriggerEvent, TriggerEventDefinition
class PluginTriggerEventGateway:
def describe(self, *, tenant_id: str, provider_id: TriggerProviderID, event_name: str) -> TriggerEventDefinition:
provider = TriggerManager.get_trigger_provider(tenant_id=tenant_id, provider_id=provider_id)
identity = provider.entity.identity
return TriggerEventDefinition(
plugin_unique_identifier=provider.plugin_unique_identifier,
provider_name=identity.name,
icon=identity.icon or "",
icon_dark=identity.icon_dark or "",
parameters=provider.get_event_parameters(event_name=event_name),
)
def invoke(
self, *, event: PreparedTriggerEvent, user_id: str, parameters: Mapping[str, Any]
) -> TriggerInvokeEventResponse:
runtime = event.subscription
client = PluginTriggerClient(plugin_unique_identifier=event.definition.plugin_unique_identifier)
try:
return client.invoke_trigger_event(
tenant_id=runtime.tenant_id,
user_id=user_id,
provider=runtime.provider_id,
event_name=event.event_name,
parameters=parameters,
credentials=runtime.credentials,
credential_type=runtime.credential_type,
subscription=runtime.subscription,
request=deserialize_request(event.raw_request),
payload=event.payload,
)
except EventIgnoreError:
return TriggerInvokeEventResponse(variables={}, cancelled=True)