feat(trigger): add plugin trigger workflow support and refactor trigger system

- Add new workflow plugin trigger service for managing plugin-based triggers
- Implement trigger provider encryption utilities for secure credential storage
- Add custom trigger errors module for better error handling
- Refactor trigger provider and manager classes for improved plugin integration
- Update API endpoints to support plugin trigger workflows
- Add database migration for plugin trigger workflow support

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
Harry
2025-09-04 12:47:51 +08:00
parent cc84a45244
commit a62d7aa3ee
16 changed files with 666 additions and 204 deletions

View File

@ -42,11 +42,10 @@ class PluginTriggerManager(BasePluginClient):
)
for provider in response:
provider.declaration.identity.name = f"{provider.plugin_id}/{provider.declaration.identity.name}"
provider.declaration.identity.name = str(provider.provider)
# override the provider name for each trigger to plugin_id/provider_name
for trigger in provider.declaration.triggers:
trigger.identity.provider = provider.declaration.identity.name
trigger.identity.provider = str(provider.provider)
return response
@ -59,7 +58,7 @@ class PluginTriggerManager(BasePluginClient):
data = json_response.get("data")
if data:
for trigger in data.get("declaration", {}).get("triggers", []):
trigger["identity"]["provider"] = provider_id.provider_name
trigger["identity"]["provider"] = str(provider_id)
return json_response
@ -71,11 +70,11 @@ class PluginTriggerManager(BasePluginClient):
transformer=transformer,
)
response.declaration.identity.name = f"{response.plugin_id}/{response.declaration.identity.name}"
response.declaration.identity.name = str(provider_id)
# override the provider name for each trigger to plugin_id/provider_name
for trigger in response.declaration.triggers:
trigger.identity.provider = response.declaration.identity.name
trigger.identity.provider = str(provider_id)
return response
@ -123,7 +122,7 @@ class PluginTriggerManager(BasePluginClient):
def validate_provider_credentials(
self, tenant_id: str, user_id: str, provider: str, credentials: Mapping[str, str]
) -> TriggerValidateProviderCredentialsResponse:
) -> bool:
"""
Validate the credentials of the trigger provider.
"""
@ -147,9 +146,9 @@ class PluginTriggerManager(BasePluginClient):
)
for resp in response:
return resp
return resp.result
return TriggerValidateProviderCredentialsResponse(valid=False, message="No response", error="No response")
raise ValueError("No response received from plugin daemon for validate provider credentials")
def dispatch_event(
self,