Extend Postbox message authoring contract

This commit is contained in:
2026-07-31 18:40:30 +02:00
parent 4c0e6435ab
commit 42b5019464
2 changed files with 45 additions and 0 deletions
+37
View File
@@ -172,6 +172,8 @@ class PostboxDirectoryEntryRef:
holder_count: int = 0 holder_count: int = 0
vacant: bool = True vacant: bool = True
access: PostboxAccessDecisionRef | None = None access: PostboxAccessDecisionRef | None = None
resource_revision: int = 1
etag: str | None = None
@dataclass(frozen=True, slots=True) @dataclass(frozen=True, slots=True)
@@ -213,6 +215,8 @@ class PostboxMessageRef:
producer_module: str | None = None producer_module: str | None = None
producer_resource_type: str | None = None producer_resource_type: str | None = None
producer_resource_id: str | None = None producer_resource_id: str | None = None
in_reply_to_message_id: str | None = None
replaces_message_id: str | None = None
encryption_profile: str = "plaintext_v1" encryption_profile: str = "plaintext_v1"
key_epoch: int = 1 key_epoch: int = 1
ciphertext_ref: str | None = None ciphertext_ref: str | None = None
@@ -222,6 +226,17 @@ class PostboxMessageRef:
metadata: Mapping[str, object] = field(default_factory=dict) metadata: Mapping[str, object] = field(default_factory=dict)
@dataclass(frozen=True, slots=True)
class PostboxMessageAuthoringRequest:
idempotency_key: str
subject: str
body_text: str | None = None
classification: str = "internal"
participants: tuple[PostboxParticipantRef, ...] = ()
attachments: tuple[PostboxAttachmentRef, ...] = ()
metadata: Mapping[str, object] = field(default_factory=dict)
@dataclass(frozen=True, slots=True) @dataclass(frozen=True, slots=True)
class PostboxDeliveryReceiptSummaryRef: class PostboxDeliveryReceiptSummaryRef:
delivery_id: str delivery_id: str
@@ -380,6 +395,28 @@ class PostboxMessagesProvider(Protocol):
) -> PostboxMessageRef: ) -> PostboxMessageRef:
... ...
def create_message(
self,
session: object,
*,
tenant_id: str,
postbox_id: str,
actor: PostboxActorRef,
request: PostboxMessageAuthoringRequest,
) -> PostboxMessageRef:
...
def reply_to_message(
self,
session: object,
*,
tenant_id: str,
message_id: str,
actor: PostboxActorRef,
request: PostboxMessageAuthoringRequest,
) -> PostboxMessageRef:
...
@runtime_checkable @runtime_checkable
class PostboxDeliveryProvider(Protocol): class PostboxDeliveryProvider(Protocol):
+8
View File
@@ -63,6 +63,14 @@ class _PostboxProvider:
del session, tenant_id, message_id, actor, state del session, tenant_id, message_id, actor, state
return None return None
def create_message(self, session, *, tenant_id, postbox_id, actor, request):
del session, tenant_id, postbox_id, actor, request
return None
def reply_to_message(self, session, *, tenant_id, message_id, actor, request):
del session, tenant_id, message_id, actor, request
return None
def deliver(self, session, request): def deliver(self, session, request):
del session, request del session, request
return None return None