File size: 2,936 Bytes
0e84a1f
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
from datetime import datetime
from pydantic import BaseModel, Field
from .models import PageContext, Channel, RiskLevel, PublishMode

class MediaAttachment(BaseModel):
    media_path: str
    media_type: str = "image"
    mime_type: str | None = None
    alt_text: str | None = None
    label: str | None = None

class NormalizedInboundEvent(BaseModel):
    page_context: PageContext
    platform_page_id: str
    channel: Channel
    event_type: str
    sender_id_hash: str | None = None
    object_id: str | None = None
    parent_id: str | None = None
    permalink_url: str | None = None
    message_text: str | None = None
    normalized_payload: dict = Field(default_factory=dict)

class CreateDraftRequest(BaseModel):
    page_context: PageContext
    channel: Channel
    source_event_id: int | None = None
    target_object_id: str | None = None
    recipient_psid: str | None = None
    draft_text: str
    sources: list[str] = Field(default_factory=list)
    media_attachments: list[MediaAttachment] = Field(default_factory=list)
    media_required: bool = False
    publish_mode: PublishMode = PublishMode.now
    scheduled_publish_time: datetime | None = None
    risk_level: RiskLevel = RiskLevel.medium
    created_by: str = "openclaw"

class ApproveDraftRequest(BaseModel):
    approved_by: str
    edited_text: str | None = None
    publish_mode: PublishMode | None = None
    scheduled_publish_time: datetime | None = None

class EditDraftRequest(BaseModel):
    edited_by: str
    draft_text: str | None = None
    sources: list[str] | None = None
    media_attachments: list[MediaAttachment] | None = None
    media_required: bool | None = None
    publish_mode: PublishMode | None = None
    scheduled_publish_time: datetime | None = None

class RejectDraftRequest(BaseModel):
    rejected_by: str
    reason: str

class PublishPagePostRequest(BaseModel):
    page_context: PageContext
    message: str
    approved_by: str
    sources: list[str] = Field(default_factory=list)
    media_attachments: list[MediaAttachment] = Field(default_factory=list)
    media_required: bool = False
    publish_mode: PublishMode = PublishMode.now
    scheduled_publish_time: datetime | None = None

class PublishReelRequest(BaseModel):
    page_context: PageContext
    video_path: str
    description: str
    approved_by: str
    title: str | None = None
    validation_only: bool = False
    sources: list[str] = Field(default_factory=list)

class SendMessengerRequest(BaseModel):
    page_context: PageContext
    recipient_psid: str
    message: str
    approved_by: str
    messaging_type: str = "RESPONSE"

class ReplyToCommentRequest(BaseModel):
    page_context: PageContext
    comment_id: str
    message: str
    approved_by: str

class ModerateCommentRequest(BaseModel):
    page_context: PageContext
    comment_id: str
    action: str = Field(pattern="^(hide|unhide|delete)$")
    approved_by: str
    reason: str