feat(trigger): introduce subscription builder and enhance trigger management

- Refactor trigger provider classes to improve naming consistency, including renaming classes for subscription management
- Implement new TriggerSubscriptionBuilderService for creating and verifying subscription builders
- Update API endpoints to support subscription builder creation and verification
- Enhance data models to include new attributes for subscription builders
- Remove the deprecated TriggerSubscriptionValidationService to streamline the codebase

Co-authored-by: Claude <noreply@anthropic.com>
This commit is contained in:
Harry
2025-09-02 12:06:27 +08:00
parent 694197a701
commit afd8989150
17 changed files with 544 additions and 476 deletions

View File

@ -210,12 +210,15 @@ class PluginTriggerProviderEntity(BaseModel):
class CredentialType(enum.StrEnum):
API_KEY = "api-key"
OAUTH2 = "oauth2"
UNAUTHORIZED = "unauthorized"
def get_name(self):
if self == CredentialType.API_KEY:
return "API KEY"
elif self == CredentialType.OAUTH2:
return "AUTH"
elif self == CredentialType.UNAUTHORIZED:
return "UNAUTHORIZED"
else:
return self.value.replace("-", " ").upper()
@ -236,5 +239,7 @@ class CredentialType(enum.StrEnum):
return cls.API_KEY
elif type_name == "oauth2":
return cls.OAUTH2
elif type_name == "unauthorized":
return cls.UNAUTHORIZED
else:
raise ValueError(f"Invalid credential type: {credential_type}")

View File

@ -248,14 +248,17 @@ class PluginTriggerDispatchResponse(BaseModel):
triggers: list[str]
raw_http_response: str
class TriggerSubscriptionResponse(BaseModel):
subscription: dict[str, Any]
class TriggerValidateProviderCredentialsResponse(BaseModel):
valid: bool
message: str
error: str
class TriggerDispatchResponse:
triggers: list[str]
response: Response

View File

@ -1,4 +1,5 @@
import binascii
from collections.abc import Mapping
from typing import Any
from flask import Request
@ -84,10 +85,10 @@ class PluginTriggerManager(BasePluginClient):
user_id: str,
provider: str,
trigger: str,
credentials: dict[str, Any],
credentials: Mapping[str, str],
credential_type: CredentialType,
request: Request,
parameters: dict[str, Any],
parameters: Mapping[str, Any],
) -> TriggerInvokeResponse:
"""
Invoke a trigger with the given parameters.
@ -121,7 +122,7 @@ class PluginTriggerManager(BasePluginClient):
raise ValueError("No response received from plugin daemon for invoke trigger")
def validate_provider_credentials(
self, tenant_id: str, user_id: str, provider: str, credentials: dict[str, Any]
self, tenant_id: str, user_id: str, provider: str, credentials: Mapping[str, str]
) -> TriggerValidateProviderCredentialsResponse:
"""
Validate the credentials of the trigger provider.
@ -155,7 +156,7 @@ class PluginTriggerManager(BasePluginClient):
tenant_id: str,
user_id: str,
provider: str,
subscription: dict[str, Any],
subscription: Mapping[str, Any],
request: Request,
) -> TriggerDispatchResponse:
"""
@ -194,9 +195,9 @@ class PluginTriggerManager(BasePluginClient):
tenant_id: str,
user_id: str,
provider: str,
credentials: dict[str, Any],
credentials: Mapping[str, str],
endpoint: str,
parameters: dict[str, Any],
parameters: Mapping[str, Any],
) -> TriggerSubscriptionResponse:
"""
Subscribe to a trigger.
@ -233,7 +234,7 @@ class PluginTriggerManager(BasePluginClient):
user_id: str,
provider: str,
subscription: Subscription,
credentials: dict[str, Any],
credentials: Mapping[str, str],
) -> TriggerSubscriptionResponse:
"""
Unsubscribe from a trigger.
@ -269,7 +270,7 @@ class PluginTriggerManager(BasePluginClient):
user_id: str,
provider: str,
subscription: Subscription,
credentials: dict[str, Any],
credentials: Mapping[str, str],
) -> TriggerSubscriptionResponse:
"""
Refresh a trigger subscription.