diff --git a/api/controllers/console/app/workflow.py b/api/controllers/console/app/workflow.py index 14fa92407a..d5b7cc2661 100644 --- a/api/controllers/console/app/workflow.py +++ b/api/controllers/console/app/workflow.py @@ -31,6 +31,7 @@ from libs.login import current_user, login_required from models import App from models.account import Account from models.model import AppMode +from models.provider_ids import TriggerProviderID from models.workflow import NodeType, Workflow from services.app_generate_service import AppGenerateService from services.errors.app import WorkflowHashNotEqualError @@ -1091,8 +1092,6 @@ class DraftWorkflowTriggerRunApi(Resource): "DraftWorkflowTriggerRunRequest", { "node_id": fields.String(required=True, description="Node ID"), - "trigger_name": fields.String(required=True, description="Trigger name"), - "subscription_id": fields.String(required=True, description="Subscription ID"), }, ) ) @@ -1112,17 +1111,33 @@ class DraftWorkflowTriggerRunApi(Resource): parser = reqparse.RequestParser() parser.add_argument("node_id", type=str, required=True, location="json", nullable=False) - parser.add_argument("trigger_name", type=str, required=True, location="json", nullable=False) - parser.add_argument("subscription_id", type=str, required=True, location="json", nullable=False) args = parser.parse_args() node_id = args["node_id"] - trigger_name = args["trigger_name"] - subscription_id = args["subscription_id"] + workflow_service = WorkflowService() + workflow: Workflow | None = workflow_service.get_draft_workflow( + app_model=app_model, + workflow_id=None, + ) - pool_key = PluginTriggerDebugEvent.build_pool_key( + if not workflow: + return jsonable_encoder({"status": "error", "message": "Workflow not found"}), 404 + + node_data = workflow.get_node_config_by_id(node_id=node_id).get("data") + if not node_data: + return jsonable_encoder({"status": "error", "message": "Node config not found"}), 404 + + event_name = node_data.get("event_name") + subscription_id = node_data.get("subscription_id") + if not subscription_id: + return jsonable_encoder({"status": "error", "message": "Subscription ID not found"}), 404 + + # TODO Frontend data management is completely messy here + provider_id = TriggerProviderID(node_data.get("provider_name")) + pool_key: str = PluginTriggerDebugEvent.build_pool_key( tenant_id=app_model.tenant_id, + provider_id=provider_id, subscription_id=subscription_id, - trigger_name=trigger_name, + event_name=event_name, ) event: PluginTriggerDebugEvent | None = TriggerDebugService.poll( event_type=PluginTriggerDebugEvent, diff --git a/api/core/plugin/entities/request.py b/api/core/plugin/entities/request.py index fd62dc20a8..ed0ef03319 100644 --- a/api/core/plugin/entities/request.py +++ b/api/core/plugin/entities/request.py @@ -251,7 +251,7 @@ class TriggerInvokeResponse(BaseModel): class PluginTriggerDispatchResponse(BaseModel): - triggers: list[str] + events: list[str] raw_http_response: str diff --git a/api/core/trigger/provider.py b/api/core/trigger/provider.py index 19fc7aa6f3..9918b39f11 100644 --- a/api/core/trigger/provider.py +++ b/api/core/trigger/provider.py @@ -259,9 +259,9 @@ class PluginTriggerProviderController: :return: Dispatch response with triggers and raw HTTP response """ manager = PluginTriggerManager() - provider_id = self.get_provider_id() + provider_id: TriggerProviderID = self.get_provider_id() - response = manager.dispatch_event( + response: TriggerDispatchResponse = manager.dispatch_event( tenant_id=self.tenant_id, user_id=user_id, provider=str(provider_id), diff --git a/api/core/workflow/nodes/trigger_plugin/entities.py b/api/core/workflow/nodes/trigger_plugin/entities.py index c850de6596..b76aa731c0 100644 --- a/api/core/workflow/nodes/trigger_plugin/entities.py +++ b/api/core/workflow/nodes/trigger_plugin/entities.py @@ -13,7 +13,7 @@ class PluginTriggerData(BaseNodeData): desc: Optional[str] = None plugin_id: str = Field(..., description="Plugin ID") provider_id: str = Field(..., description="Provider ID") - trigger_name: str = Field(..., description="Trigger name") + event_name: str = Field(..., description="Event name") subscription_id: str = Field(..., description="Subscription ID") plugin_unique_identifier: str = Field(..., description="Plugin unique identifier") parameters: dict[str, Any] = Field(default_factory=dict, description="Trigger parameters") diff --git a/api/core/workflow/nodes/trigger_plugin/trigger_plugin_node.py b/api/core/workflow/nodes/trigger_plugin/trigger_plugin_node.py index 4fdbf19d35..cfe1b9d728 100644 --- a/api/core/workflow/nodes/trigger_plugin/trigger_plugin_node.py +++ b/api/core/workflow/nodes/trigger_plugin/trigger_plugin_node.py @@ -43,7 +43,7 @@ class TriggerPluginNode(Node): "config": { "plugin_id": "", "provider_id": "", - "trigger_name": "", + "event_name": "", "subscription_id": "", "parameters": {}, }, @@ -67,7 +67,7 @@ class TriggerPluginNode(Node): WorkflowNodeExecutionMetadataKey.TRIGGER_INFO: { **trigger_inputs, "provider_id": self._node_data.provider_id, - "trigger_name": self._node_data.trigger_name, + "event_name": self._node_data.event_name, "plugin_unique_identifier": self._node_data.plugin_unique_identifier, }, } diff --git a/api/extensions/ext_celery.py b/api/extensions/ext_celery.py index ccb1c78f4e..ab73242eee 100644 --- a/api/extensions/ext_celery.py +++ b/api/extensions/ext_celery.py @@ -98,6 +98,7 @@ def init_app(app: DifyApp) -> Celery: imports = [ "tasks.async_workflow_tasks", # trigger workers + "tasks.trigger_processing_tasks", # async trigger processing ] day = dify_config.CELERY_BEAT_SCHEDULER_TIME diff --git a/api/services/trigger/trigger_debug_service.py b/api/services/trigger/trigger_debug_service.py index 6eaa923be8..4a38991663 100644 --- a/api/services/trigger/trigger_debug_service.py +++ b/api/services/trigger/trigger_debug_service.py @@ -49,13 +49,15 @@ class PluginTriggerDebugEvent(BaseDebugEvent): Args: tenant_id: Tenant ID + provider_id: Provider ID subscription_id: Subscription ID - trigger_name: Trigger name + event_name: Event name """ tenant_id = kwargs["tenant_id"] + provider_id = kwargs["provider_id"] subscription_id = kwargs["subscription_id"] - trigger_name = kwargs["trigger_name"] - return f"trigger_debug_waiting_pool:{{{tenant_id}}}:{subscription_id}:{trigger_name}" + event_name = kwargs["event_name"] + return f"trigger_debug_waiting_pool:{{{tenant_id}}}:{str(provider_id)}:{subscription_id}:{event_name}" class WebhookDebugEvent(BaseDebugEvent): @@ -132,14 +134,14 @@ class TriggerDebugService: Returns: Number of addresses the event was dispatched to """ - event_json = event.model_dump_json() + event_data = event.model_dump_json() try: result = redis_client.eval( cls.LUA_DISPATCH, 1, pool_key, tenant_id, - event_json, + event_data, ) return int(result) except RedisError: diff --git a/api/services/trigger/trigger_service.py b/api/services/trigger/trigger_service.py index 7a335c0ffd..2084aea0cc 100644 --- a/api/services/trigger/trigger_service.py +++ b/api/services/trigger/trigger_service.py @@ -8,8 +8,10 @@ from sqlalchemy import func, select from sqlalchemy.orm import Session from core.plugin.entities.plugin_daemon import CredentialType +from core.plugin.entities.request import TriggerDispatchResponse from core.plugin.utils.http_parser import deserialize_request, serialize_request from core.trigger.entities.entities import EventEntity +from core.trigger.provider import PluginTriggerProviderController from core.trigger.trigger_manager import TriggerManager from core.workflow.enums import NodeType from core.workflow.nodes.trigger_schedule.exc import TenantOwnerNotFoundError @@ -70,13 +72,13 @@ class TriggerService: @classmethod def dispatch_triggered_workflows( - cls, subscription: TriggerSubscription, trigger: EventEntity, request_id: str + cls, subscription: TriggerSubscription, event: EventEntity, request_id: str ) -> int: """Process triggered workflows. Args: subscription: The trigger subscription - trigger: The trigger entity that was activated + event: The trigger entity that was activated request_id: The ID of the stored request in storage system """ request = deserialize_request(storage.load_once(f"triggers/{request_id}")) @@ -85,12 +87,12 @@ class TriggerService: return 0 subscribers: list[WorkflowPluginTrigger] = cls.get_subscriber_triggers( - tenant_id=subscription.tenant_id, subscription_id=subscription.id, trigger_name=trigger.identity.name + tenant_id=subscription.tenant_id, subscription_id=subscription.id, trigger_name=event.identity.name ) if not subscribers: logger.warning( "No workflows found for trigger '%s' in subscription '%s'", - trigger.identity.name, + event.identity.name, subscription.id, ) return 0 @@ -125,7 +127,7 @@ class TriggerService: tenant_id=subscription.tenant_id, user_id=subscription.user_id, provider_id=TriggerProviderID(subscription.provider_id), - trigger_name=trigger.identity.name, + trigger_name=event.identity.name, parameters=trigger_node.get("config", {}), credentials=subscription.credentials, credential_type=CredentialType.of(subscription.credential_type), @@ -135,7 +137,7 @@ class TriggerService: logger.info( "Trigger ignored for app %s with trigger %s", plugin_trigger.app_id, - trigger.identity.name, + event.identity.name, ) continue @@ -158,7 +160,7 @@ class TriggerService: logger.info( "Triggered workflow for app %s with trigger %s", plugin_trigger.app_id, - trigger.identity.name, + event.identity.name, ) except Exception: logger.exception( @@ -178,16 +180,18 @@ class TriggerService: request: Request """ timestamp = int(time.time()) - subscription = TriggerProviderService.get_subscription_by_endpoint(endpoint_id) + subscription: TriggerSubscription | None = TriggerProviderService.get_subscription_by_endpoint(endpoint_id) if not subscription: return None provider_id = TriggerProviderID(subscription.provider_id) - controller = TriggerManager.get_trigger_provider(subscription.tenant_id, provider_id) + controller: PluginTriggerProviderController = TriggerManager.get_trigger_provider( + tenant_id=subscription.tenant_id, provider_id=provider_id + ) if not controller: return None - dispatch_response = controller.dispatch( + dispatch_response: TriggerDispatchResponse = controller.dispatch( user_id=subscription.user_id, request=request, subscription=subscription.to_entity() ) diff --git a/api/tasks/trigger_processing_tasks.py b/api/tasks/trigger_processing_tasks.py index 3611f295cd..2b0b908114 100644 --- a/api/tasks/trigger_processing_tasks.py +++ b/api/tasks/trigger_processing_tasks.py @@ -87,8 +87,8 @@ def dispatch_triggered_workflows_async( dispatched_count = 0 for event_name in events: try: - trigger = controller.get_event(event_name) - if trigger is None: + event = controller.get_event(event_name) + if event is None: logger.error( "Trigger '%s' not found in provider '%s'", event_name, @@ -98,7 +98,7 @@ def dispatch_triggered_workflows_async( dispatched_count += TriggerService.dispatch_triggered_workflows( subscription=subscription, - trigger=trigger, + event=event, request_id=request_id, ) @@ -118,7 +118,8 @@ def dispatch_triggered_workflows_async( pool_key: str = PluginTriggerDebugEvent.build_pool_key( tenant_id=subscription.tenant_id, subscription_id=subscription_id, - trigger_name=event_name, + event_name=event_name, + provider_id=provider_id, ) event = PluginTriggerDebugEvent( subscription_id=subscription_id, @@ -141,11 +142,6 @@ def dispatch_triggered_workflows_async( len(events), ) - # Note: Stored request is not deleted here. It should be handled by: - # 1. Storage system's lifecycle policy (e.g., S3 lifecycle rules for triggers/* prefix) - # 2. Or periodic cleanup job if using local/persistent storage - # This ensures request data is available for debugging/retry purposes - return { "status": "completed", "total_count": len(events), diff --git a/web/app/components/tools/types.ts b/web/app/components/tools/types.ts index 363a256bcb..1d16e1ba41 100644 --- a/web/app/components/tools/types.ts +++ b/web/app/components/tools/types.ts @@ -102,7 +102,7 @@ export type TriggerParameter = { } // Action -export type Trigger = { +export type Event = { name: string author: string label: TypeWithI18N diff --git a/web/app/components/workflow-app/components/workflow-children.tsx b/web/app/components/workflow-app/components/workflow-children.tsx index a7415e2f35..82b73756ba 100644 --- a/web/app/components/workflow-app/components/workflow-children.tsx +++ b/web/app/components/workflow-app/components/workflow-children.tsx @@ -50,11 +50,11 @@ const getTriggerPluginNodeData = ( provider_id: triggerConfig.provider_id, provider_type: triggerConfig.provider_type, provider_name: triggerConfig.provider_name, - trigger_name: triggerConfig.trigger_name, - trigger_label: triggerConfig.trigger_label, - trigger_description: triggerConfig.trigger_description, - title: triggerConfig.trigger_label || triggerConfig.title || fallbackTitle, - desc: triggerConfig.trigger_description || fallbackDesc, + event_name: triggerConfig.event_name, + event_label: triggerConfig.event_label, + event_description: triggerConfig.event_description, + title: triggerConfig.event_label || triggerConfig.title || fallbackTitle, + desc: triggerConfig.event_description || fallbackDesc, output_schema: { ...(triggerConfig.output_schema || {}) }, parameters_schema: triggerConfig.paramSchemas ? [...triggerConfig.paramSchemas] : [], config: { ...(triggerConfig.params || {}) }, diff --git a/web/app/components/workflow/block-selector/trigger-plugin/action-item.tsx b/web/app/components/workflow/block-selector/trigger-plugin/action-item.tsx index 92306c7d8e..72be9a8ce5 100644 --- a/web/app/components/workflow/block-selector/trigger-plugin/action-item.tsx +++ b/web/app/components/workflow/block-selector/trigger-plugin/action-item.tsx @@ -2,7 +2,7 @@ import type { FC } from 'react' import React from 'react' import type { TriggerWithProvider } from '../types' -import type { Trigger } from '@/app/components/tools/types' +import type { Event } from '@/app/components/tools/types' import { BlockEnum } from '../../types' import type { TriggerDefaultValue } from '../types' import Tooltip from '@/app/components/base/tooltip' @@ -13,7 +13,7 @@ import { useTranslation } from 'react-i18next' type Props = { provider: TriggerWithProvider - payload: Trigger + payload: Event disabled?: boolean isAdded?: boolean onSelect: (type: BlockEnum, trigger?: TriggerDefaultValue) => void @@ -63,9 +63,9 @@ const TriggerPluginActionItem: FC = ({ provider_id: provider.id, provider_type: provider.type as string, provider_name: provider.name, - trigger_name: payload.name, - trigger_label: payload.label[language], - trigger_description: payload.description[language], + event_name: payload.name, + event_label: payload.label[language], + event_description: payload.description[language], plugin_unique_identifier: provider.plugin_unique_identifier, title: payload.label[language], is_team_authorization: provider.is_team_authorization, diff --git a/web/app/components/workflow/block-selector/trigger-plugin/item.tsx b/web/app/components/workflow/block-selector/trigger-plugin/item.tsx index 9025942e06..99b4a0777b 100644 --- a/web/app/components/workflow/block-selector/trigger-plugin/item.tsx +++ b/web/app/components/workflow/block-selector/trigger-plugin/item.tsx @@ -27,7 +27,7 @@ const TriggerPluginItem: FC = ({ const { t } = useTranslation() const language = useGetLanguage() const notShowProvider = payload.type === CollectionType.workflow - const actions = payload.triggers + const actions = payload.events const hasAction = !notShowProvider const [isFold, setFold] = React.useState(true) const ref = useRef(null) @@ -71,10 +71,10 @@ const TriggerPluginItem: FC = ({ return } - const trigger = actions[0] + const event = actions[0] const params: Record = {} - if (trigger.parameters) { - trigger.parameters.forEach((item) => { + if (event.parameters) { + event.parameters.forEach((item: any) => { params[item.name] = '' }) } @@ -82,14 +82,14 @@ const TriggerPluginItem: FC = ({ provider_id: payload.id, provider_type: payload.type, provider_name: payload.name, - trigger_name: trigger.name, - trigger_label: trigger.label[language], - trigger_description: trigger.description[language], - title: trigger.label[language], + event_name: event.name, + event_label: event.label[language], + event_description: event.description[language], + title: event.label[language], plugin_unique_identifier: payload.plugin_unique_identifier, is_team_authorization: payload.is_team_authorization, - output_schema: trigger.output_schema || {}, - paramSchemas: trigger.parameters, + output_schema: event.output_schema || {}, + paramSchemas: event.parameters, params, }) }} diff --git a/web/app/components/workflow/block-selector/types.ts b/web/app/components/workflow/block-selector/types.ts index 49718ad42e..522e4498fc 100644 --- a/web/app/components/workflow/block-selector/types.ts +++ b/web/app/components/workflow/block-selector/types.ts @@ -1,6 +1,6 @@ import type { TypeWithI18N } from '@/app/components/header/account-setting/model-provider-page/declarations' import type { PluginMeta, SupportedCreationMethods } from '../../plugins/types' -import type { Collection, Trigger } from '../../tools/types' +import type { Collection, Event } from '../../tools/types' export enum TabsEnum { Start = 'start', @@ -32,9 +32,9 @@ type PluginCommonDefaultValue = { } export type TriggerDefaultValue = PluginCommonDefaultValue & { - trigger_name: string - trigger_label: string - trigger_description: string + event_name: string + event_label: string + event_description: string title: string plugin_unique_identifier: string is_team_authorization: boolean @@ -207,7 +207,7 @@ export type TriggerProviderApiEntity = { // Frontend types - compatible with ToolWithProvider export type TriggerWithProvider = Collection & { - triggers: Trigger[] + events: Event[] meta: PluginMeta plugin_unique_identifier: string credentials_schema?: TriggerCredentialField[] diff --git a/web/app/components/workflow/nodes/_base/components/form-input-item.tsx b/web/app/components/workflow/nodes/_base/components/form-input-item.tsx index 240871fc13..b5fdccde01 100644 --- a/web/app/components/workflow/nodes/_base/components/form-input-item.tsx +++ b/web/app/components/workflow/nodes/_base/components/form-input-item.tsx @@ -27,7 +27,7 @@ import cn from '@/utils/classnames' import { Listbox, ListboxButton, ListboxOption, ListboxOptions } from '@headlessui/react' import { ChevronDownIcon } from '@heroicons/react/20/solid' import { RiCheckLine, RiLoader4Line } from '@remixicon/react' -import type { Trigger } from '@/app/components/tools/types' +import type { Event } from '@/app/components/tools/types' type Props = { readOnly: boolean @@ -36,7 +36,7 @@ type Props = { value: ResourceVarInputs onChange: (value: any) => void inPanel?: boolean - currentTool?: Tool | Trigger + currentTool?: Tool | Event currentProvider?: ToolWithProvider | TriggerWithProvider showManageInputField?: boolean onManageInputField?: () => void diff --git a/web/app/components/workflow/nodes/trigger-plugin/components/parameters-form.tsx b/web/app/components/workflow/nodes/trigger-plugin/components/parameters-form.tsx index 53b8eb4b80..11bbea2431 100644 --- a/web/app/components/workflow/nodes/trigger-plugin/components/parameters-form.tsx +++ b/web/app/components/workflow/nodes/trigger-plugin/components/parameters-form.tsx @@ -3,7 +3,7 @@ import type { FC } from 'react' import { useMemo } from 'react' import { useTranslation } from 'react-i18next' import type { TriggerWithProvider } from '@/app/components/workflow/block-selector/types' -import type { Trigger } from '@/app/components/tools/types' +import type { Event } from '@/app/components/tools/types' import { toolCredentialToFormSchemas, toolParametersToFormSchemas } from '@/app/components/tools/utils/to-form-schema' import TriggerForm from './trigger-form' import Button from '@/app/components/base/button' @@ -11,7 +11,7 @@ import Input from '@/app/components/base/input' type ParametersFormProps = { provider: TriggerWithProvider - trigger?: Trigger + trigger?: Event builderId: string parametersValue: Record propertiesValue: Record diff --git a/web/app/components/workflow/nodes/trigger-plugin/components/trigger-form/index.tsx b/web/app/components/workflow/nodes/trigger-plugin/components/trigger-form/index.tsx index fbdbfb6b96..8adade1ce0 100644 --- a/web/app/components/workflow/nodes/trigger-plugin/components/trigger-form/index.tsx +++ b/web/app/components/workflow/nodes/trigger-plugin/components/trigger-form/index.tsx @@ -1,6 +1,6 @@ 'use client' import type { CredentialFormSchema } from '@/app/components/header/account-setting/model-provider-page/declarations' -import type { Trigger } from '@/app/components/tools/types' +import type { Event } from '@/app/components/tools/types' import type { FC } from 'react' import type { PluginTriggerVarInputs } from '@/app/components/workflow/nodes/trigger-plugin/types' import TriggerFormItem from './item' @@ -14,7 +14,7 @@ type Props = { onChange: (value: PluginTriggerVarInputs) => void onOpen?: (index: number) => void inPanel?: boolean - currentTrigger?: Trigger + currentTrigger?: Event currentProvider?: TriggerWithProvider extraParams?: Record } diff --git a/web/app/components/workflow/nodes/trigger-plugin/components/trigger-form/item.tsx b/web/app/components/workflow/nodes/trigger-plugin/components/trigger-form/item.tsx index 50fd9d7f11..79d427075c 100644 --- a/web/app/components/workflow/nodes/trigger-plugin/components/trigger-form/item.tsx +++ b/web/app/components/workflow/nodes/trigger-plugin/components/trigger-form/item.tsx @@ -12,7 +12,7 @@ import Tooltip from '@/app/components/base/tooltip' import FormInputItem from '@/app/components/workflow/nodes/_base/components/form-input-item' import { useBoolean } from 'ahooks' import SchemaModal from '@/app/components/plugins/plugin-detail-panel/tool-selector/schema-modal' -import type { Trigger } from '@/app/components/tools/types' +import type { Event } from '@/app/components/tools/types' import type { TriggerWithProvider } from '@/app/components/workflow/block-selector/types' type Props = { @@ -22,7 +22,7 @@ type Props = { value: PluginTriggerVarInputs onChange: (value: PluginTriggerVarInputs) => void inPanel?: boolean - currentTrigger?: Trigger + currentTrigger?: Event currentProvider?: TriggerWithProvider extraParams?: Record } diff --git a/web/app/components/workflow/nodes/trigger-plugin/default.ts b/web/app/components/workflow/nodes/trigger-plugin/default.ts index d0489372d5..e31a4afade 100644 --- a/web/app/components/workflow/nodes/trigger-plugin/default.ts +++ b/web/app/components/workflow/nodes/trigger-plugin/default.ts @@ -13,7 +13,7 @@ const nodeDefault: NodeDefault = { metaData, defaultValue: { plugin_id: '', - trigger_name: '', + event_name: '', // event_type: '', config: {}, }, diff --git a/web/app/components/workflow/nodes/trigger-plugin/types.ts b/web/app/components/workflow/nodes/trigger-plugin/types.ts index efa6f31816..43268e9096 100644 --- a/web/app/components/workflow/nodes/trigger-plugin/types.ts +++ b/web/app/components/workflow/nodes/trigger-plugin/types.ts @@ -6,14 +6,14 @@ export type PluginTriggerNodeType = CommonNodeType & { provider_id: string provider_type: CollectionType provider_name: string - trigger_name: string - trigger_label: string - trigger_parameters: PluginTriggerVarInputs - trigger_configurations: Record + event_name: string + event_label: string + event_parameters: PluginTriggerVarInputs + event_configurations: Record output_schema: Record parameters_schema?: Record[] version?: string - trigger_node_version?: string + event_node_version?: string plugin_id?: string config?: Record } diff --git a/web/app/components/workflow/nodes/trigger-plugin/use-config.ts b/web/app/components/workflow/nodes/trigger-plugin/use-config.ts index 8ec8ff7c61..a72157551d 100644 --- a/web/app/components/workflow/nodes/trigger-plugin/use-config.ts +++ b/web/app/components/workflow/nodes/trigger-plugin/use-config.ts @@ -13,7 +13,7 @@ import { } from '@/app/components/tools/utils/to-form-schema' import type { InputVar } from '@/app/components/workflow/types' import type { TriggerWithProvider } from '@/app/components/workflow/block-selector/types' -import type { Trigger } from '@/app/components/tools/types' +import type { Event } from '@/app/components/tools/types' const useConfig = (id: string, payload: PluginTriggerNodeType) => { const { nodesReadOnly: readOnly } = useNodesReadOnly() @@ -24,7 +24,7 @@ const useConfig = (id: string, payload: PluginTriggerNodeType) => { payload, ) - const { provider_id, provider_name, trigger_name, config } = inputs + const { provider_id, provider_name, event_name: event_name, config } = inputs // Construct provider for authentication check const authProvider = useMemo(() => { @@ -45,11 +45,11 @@ const useConfig = (id: string, payload: PluginTriggerNodeType) => { ) }, [triggerPlugins, provider_name, provider_id]) - const currentTrigger = useMemo(() => { - return currentProvider?.triggers.find( - trigger => trigger.name === trigger_name, + const currentEvent = useMemo(() => { + return currentProvider?.events.find( + event => event.name === event_name, ) - }, [currentProvider, trigger_name]) + }, [currentProvider, event_name]) // Dynamic subscription parameters (from subscription_schema.parameters_schema) const subscriptionParameterSchema = useMemo(() => { @@ -61,9 +61,9 @@ const useConfig = (id: string, payload: PluginTriggerNodeType) => { // Dynamic trigger parameters (from specific trigger.parameters) const triggerSpecificParameterSchema = useMemo(() => { - if (!currentTrigger) return [] - return toolParametersToFormSchemas(currentTrigger.parameters) - }, [currentTrigger]) + if (!currentEvent) return [] + return toolParametersToFormSchemas(currentEvent.parameters) + }, [currentEvent]) // Combined parameter schema (subscription + trigger specific) const triggerParameterSchema = useMemo(() => { @@ -106,8 +106,8 @@ const useConfig = (id: string, payload: PluginTriggerNodeType) => { // Get output schema const outputSchema = useMemo(() => { - return currentTrigger?.output_schema || {} - }, [currentTrigger]) + return currentEvent?.output_schema || {} + }, [currentEvent]) // Check if trigger has complex output structure const hasObjectOutput = useMemo(() => { @@ -151,7 +151,7 @@ const useConfig = (id: string, payload: PluginTriggerNodeType) => { readOnly, inputs, currentProvider, - currentTrigger, + currentTrigger: currentEvent, triggerParameterSchema, triggerParameterValue, subscriptionParameterSchema, diff --git a/web/service/use-triggers.ts b/web/service/use-triggers.ts index 931558612d..6821375659 100644 --- a/web/service/use-triggers.ts +++ b/web/service/use-triggers.ts @@ -33,12 +33,12 @@ const convertToTriggerWithProvider = (provider: TriggerProviderApiEntity): Trigg labels: provider.tags || [], plugin_id: provider.plugin_id, plugin_unique_identifier: provider.plugin_unique_identifier || '', - triggers: provider.events.map(trigger => ({ - name: trigger.name, + events: provider.events.map(event => ({ + name: event.name, author: provider.author, - label: trigger.identity.label, - description: trigger.description.llm, - parameters: trigger.parameters.map(param => ({ + label: event.identity.label, + description: event.description.llm, + parameters: event.parameters.map(param => ({ name: param.name, label: param.label, human_description: param.description || param.label, @@ -54,7 +54,7 @@ const convertToTriggerWithProvider = (provider: TriggerProviderApiEntity): Trigg multiple: param.multiple || false, })), labels: provider.tags || [], - output_schema: trigger.output_schema || {}, + output_schema: event.output_schema || {}, })), // Trigger-specific schema fields