Skip to content

Commit e6e1d18

Browse files
feat(messenger): scaffolding — types, format converter, cards (PR 1 of 2) (#118)
* feat(messenger): scaffolding — types, format converter, cards (vercel/chat#461) PR 1 of 2 for the Messenger (Meta) adapter port. Non-adapter scaffolding only; the adapter (webhook routing, Graph API, signature verification, send/stream) lands in PR 2. Mirrors how the Telegram port was split. Adds under src/chat_sdk/adapters/messenger/: - types.py: MessengerAdapterConfig (app_secret / page_access_token / verify_token with FACEBOOK_* env fallbacks), MessengerThreadId, sender/recipient/attachment/message/postback/reaction/delivery/read, webhook entry/payload, send-API response, user profile, button + template-element + generic/button template payloads, MessengerRawMessage. - format_converter.py: MessengerFormatConverter (no markdown rendering; stringifies AST, overrides render_postable). Mirrors upstream markdown.ts. - cards.py: card_to_messenger (template|text), card_to_messenger_text, encode/decode_messenger_callback_data ("chat:{json}" prefix). Generic template when title/imageUrl present, Button template otherwise; tables / selects / radio_selects fall back to text. Caps: 20-char button titles, 80 subtitle, 640 button-template text, 3 buttons max. - __init__.py: exports converter, card helpers, and types only (PR 2 adds the adapter export). Tests: tests/test_messenger_cards.py + tests/test_messenger_format.py (56 tests) ported from upstream cards.test.ts / markdown.test.ts. Design open question (#110 Q2): decode_messenger_callback_data returns the raw string as both action_id and value for non-"chat:" payloads. Mirrored from upstream exactly and pinned with a test + "# Divergence-candidate (see #110)" breadcrumb; not tightened in this PR. Refs #110, #98. https://claude.ai/code/session_01FyMxQn2BEAzmwKS1GZczKj * refactor(messenger): drop dead MAX_TEXT_LENGTH from cards scaffolding (review) https://claude.ai/code/session_01FyMxQn2BEAzmwKS1GZczKj --------- Co-authored-by: Claude <noreply@anthropic.com>
1 parent 1320300 commit e6e1d18

6 files changed

Lines changed: 1541 additions & 0 deletions

File tree

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
"""Messenger (Meta) adapter for chat-sdk.
2+
3+
PR 1 of 2 (scaffolding): types, format converter, and card conversion.
4+
The adapter itself (webhook routing, Graph API, signature verification,
5+
send/stream) is added in PR 2.
6+
"""
7+
8+
from chat_sdk.adapters.messenger.cards import (
9+
MessengerCardResult,
10+
card_to_messenger,
11+
card_to_messenger_text,
12+
decode_messenger_callback_data,
13+
encode_messenger_callback_data,
14+
)
15+
from chat_sdk.adapters.messenger.format_converter import MessengerFormatConverter
16+
from chat_sdk.adapters.messenger.types import (
17+
MessengerAdapterConfig,
18+
MessengerButton,
19+
MessengerButtonTemplatePayload,
20+
MessengerGenericTemplatePayload,
21+
MessengerMessagingEvent,
22+
MessengerRawMessage,
23+
MessengerSendApiResponse,
24+
MessengerTemplateElement,
25+
MessengerTemplatePayload,
26+
MessengerThreadId,
27+
MessengerUserProfile,
28+
MessengerWebhookEntry,
29+
MessengerWebhookPayload,
30+
)
31+
32+
__all__ = [
33+
"MessengerAdapterConfig",
34+
"MessengerButton",
35+
"MessengerButtonTemplatePayload",
36+
"MessengerCardResult",
37+
"MessengerFormatConverter",
38+
"MessengerGenericTemplatePayload",
39+
"MessengerMessagingEvent",
40+
"MessengerRawMessage",
41+
"MessengerSendApiResponse",
42+
"MessengerTemplateElement",
43+
"MessengerTemplatePayload",
44+
"MessengerThreadId",
45+
"MessengerUserProfile",
46+
"MessengerWebhookEntry",
47+
"MessengerWebhookPayload",
48+
"card_to_messenger",
49+
"card_to_messenger_text",
50+
"decode_messenger_callback_data",
51+
"encode_messenger_callback_data",
52+
]

0 commit comments

Comments
 (0)