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

@ -7,7 +7,6 @@ from core.entities.provider_entities import ProviderConfig
from core.plugin.entities.plugin_daemon import CredentialType
from core.trigger.entities.entities import (
OAuthSchema,
Subscription,
SubscriptionSchema,
TriggerDescription,
TriggerEntity,
@ -40,27 +39,4 @@ class TriggerApiEntity(BaseModel):
parameters: list[TriggerParameter] = Field(description="The parameters of the trigger")
output_schema: Optional[Mapping[str, Any]] = Field(description="The output schema of the trigger")
class SubscriptionValidation(BaseModel):
id: str
name: str
tenant_id: str
user_id: str
provider_id: str
endpoint: str
parameters: dict
properties: dict
credentials: dict
credential_type: str
credential_expires_at: int
expires_at: int
def to_subscription(self) -> Subscription:
return Subscription(
expires_at=self.expires_at,
endpoint=self.endpoint,
parameters=self.parameters,
properties=self.properties,
)
__all__ = ["TriggerApiEntity", "TriggerProviderApiEntity", "TriggerProviderSubscriptionApiEntity"]

View File

@ -115,6 +115,18 @@ class SubscriptionSchema(BaseModel):
description="The configuration schema stored in the subscription entity",
)
def get_default_parameters(self) -> Mapping[str, Any]:
"""Get the default parameters from the parameters schema"""
if not self.parameters_schema:
return {}
return {param.name: param.default for param in self.parameters_schema if param.default}
def get_default_properties(self) -> Mapping[str, Any]:
"""Get the default properties from the properties schema"""
if not self.properties_schema:
return {}
return {prop.name: prop.default for prop in self.properties_schema if prop.default}
class TriggerProviderEntity(BaseModel):
"""
@ -148,13 +160,7 @@ class Subscription(BaseModel):
)
endpoint: str = Field(..., description="The webhook endpoint URL allocated by Dify for receiving events")
parameters: dict[str, Any] | None = Field(
default=None,
description="""The parameters of the subscription, this is the creation parameters.
Only available when creating a new subscription by credentials(auto subscription), not manual subscription""",
)
properties: dict[str, Any] = Field(
properties: Mapping[str, Any] = Field(
..., description="Subscription data containing all properties and provider-specific information"
)
@ -177,10 +183,43 @@ class Unsubscription(BaseModel):
)
class RequestLog(BaseModel):
id: str
endpoint: str
request: dict
response: dict
created_at: str
class SubscriptionBuilder(BaseModel):
id: str
name: str | None = None
tenant_id: str
user_id: str
provider_id: str
endpoint_id: str
parameters: Mapping[str, Any]
properties: Mapping[str, Any]
credentials: Mapping[str, str]
credential_type: str | None = None
credential_expires_at: int | None = None
expires_at: int
def to_subscription(self) -> Subscription:
return Subscription(
expires_at=self.expires_at,
endpoint=self.endpoint_id,
parameters=self.parameters,
properties=self.properties,
)
# Export all entities
__all__ = [
"OAuthSchema",
"RequestLog",
"Subscription",
"SubscriptionBuilder",
"TriggerDescription",
"TriggerEntity",
"TriggerIdentity",