@chat-adapter/x
4.43.0 · 19 Oct 2026MIT44.9k / weekRepositoryHomepagenpmAtom feed
14 stable releases, newest first, by release line. Notes are quoted as the maintainers published them.
- 4.x · latest line
4.41.1 – 4.43.03 releases that only update dependencieschat 4.43.0@chat-adapter/shared 4.43.0Show each
- 4.43.019 Oct 2026chat 4.43.0@chat-adapter/shared 4.43.0
- 4.42.014 Oct 2026chat 4.42.0@chat-adapter/shared 4.42.0
- 4.41.128 Sep 2026chat 4.41.1@chat-adapter/shared 4.41.1
4.41.0
18 Sep 2026fcdc1c9: Honor an adapter's definitive
isMention: falseinstead of re-detecting mentions from the message text.An adapter that reads structured platform content reports
trueorfalse, and the SDK falls back to matching@usernamein the text only when the adapter reports nothing. A definitivefalsenow wins, so an adapter can suppress a mention that exists only in text its platform renders literally, such as a code sample. Adapters that previously returnedfalseto mean "not detected" should returnundefinedinstead. Direct messages are unchanged: with noonDirectMessagehandler registered they still route toonNewMention.Adapter changes that follow from the new contract:
Patch Changes
fcdc1c9: Honor an adapter's definitive
isMention: falseinstead of re-detecting mentions from the message text.An adapter that reads structured platform content reports
trueorfalse, and the SDK falls back to matching@usernamein the text only when the adapter reports nothing. A definitivefalsenow wins, so an adapter can suppress a mention that exists only in text its platform renders literally, such as a code sample. Adapters that previously returnedfalseto mean "not detected" should returnundefinedinstead. Direct messages are unchanged: with noonDirectMessagehandler registered they still route toonNewMention.Adapter changes that follow from the new contract:
Linear: ordinary comments are left undetermined, so SDK text detection still applies to them.
Notion:
keywordmode leaves comments without a keyword match undetermined instead of reportingfalse, so@userNamein the text still counts.X: posts rebuilt from raw or fetched by id are left undetermined instead of reporting
false. Onlypost.mention.createevents reporttrue.Discord: a real ping, role mention,
@everyone, or allowlisted channel reportstrue; anything else is left undetermined instead offalse, so a literal@botnametyped in the text still counts as before.
4.38.1 – 4.39.02 releases that only update dependencieschat 4.39.0@chat-adapter/shared 4.39.0Show each
- 4.39.028 Aug 2026chat 4.39.0@chat-adapter/shared 4.39.0
- 4.38.117 Aug 2026chat 4.38.1@chat-adapter/shared 4.38.1
4.38.0
14 Aug 202618d4a23: Add a shared thread API for marking messages as read across WhatsApp, Messenger, and XChat.
Note for anyone calling
XchatAdapter.markAsRead()directly: it now rejects when a receipt fails instead of logging a warning and resolving. Automatic read receipts are unaffected, since the adapter still catches and logs those internally. If you call the method yourself without awaiting it, add a.catch()so a failed receipt does not surface as an unhandled rejection.745fdf5: respect Telegram streaming rate limits and target XChat read receipts exactly
Minor Changes
18d4a23: Add a shared thread API for marking messages as read across WhatsApp, Messenger, and XChat.
Note for anyone calling
XchatAdapter.markAsRead()directly: it now rejects when a receipt fails instead of logging a warning and resolving. Automatic read receipts are unaffected, since the adapter still catches and logs those internally. If you call the method yourself without awaiting it, add a.catch()so a failed receipt does not surface as an unhandled rejection.
Patch Changes
745fdf5: respect Telegram streaming rate limits and target XChat read receipts exactly
4.37.0
7 Aug 2026b674923: Restrict the X CRC challenge to the opaque token shape X sends before signing it. The endpoint previously returned an HMAC over any
crc_token, which let a caller have an arbitrary webhook body signed and replay that asx-twitter-webhooks-signatureon a forged POST. A webhook body is JSON and can no longer pass the token check, so a CRC response can't double as a POST event signature.
Patch Changes
b674923: Restrict the X CRC challenge to the opaque token shape X sends before signing it. The endpoint previously returned an HMAC over any
crc_token, which let a caller have an arbitrary webhook body signed and replay that asx-twitter-webhooks-signatureon a forged POST. A webhook body is JSON and can no longer pass the token check, so a CRC response can't double as a POST event signature.
4.36.0
1 Aug 2026caa6325: Add XChat support to
@chat-adapter/x, shipped from the new@chat-adapter/x/chatsubpath so it sits alongside the existing X adapter. The XChat crypto stack (@xdevplatform/chat-xdk,@xdevplatform/xdk,juicebox-sdk) is an optional peer dependency, so existing@chat-adapter/xusers are unaffected. All cryptography is handled inside the adapter via@xdevplatform/chat-xdk(wasm) and all REST goes through the typed@xdevplatform/xdkclient. Only a bot token and a Juicebox PIN are required: the bot's identity (user id and @handle) is resolved fromGET /2/users/meat startup.
Minor Changes
caa6325: Add XChat support to
@chat-adapter/x, shipped from the new@chat-adapter/x/chatsubpath so it sits alongside the existing X adapter. The XChat crypto stack (@xdevplatform/chat-xdk,@xdevplatform/xdk,juicebox-sdk) is an optional peer dependency, so existing@chat-adapter/xusers are unaffected. All cryptography is handled inside the adapter via@xdevplatform/chat-xdk(wasm) and all REST goes through the typed@xdevplatform/xdkclient. Only a bot token and a Juicebox PIN are required: the bot's identity (user id and @handle) is resolved fromGET /2/users/meat startup.Encrypted send/receive in DMs and groups (webhook push + polling), signature verification on by default; undecryptable or unverified events are dropped
Webhook POSTs must carry a valid
x-twitter-webhooks-signature, which X sends on every delivery. SetconsumerSecret(orX_CONSUMER_SECRET) to receive webhooks, ordisableWebhookVerificationwhen an upstream layer already verifies them. Polling deployments are unaffectedMention detection from structured mention entities, swipe-replies to the bot, and a plain-text
@handlefallback; group replies sent as quoted repliesopenDM(userId)starts (or reuses) an encrypted 1:1, running a full key exchange when needed so the bot can message firstMedia both ways: inbound attachments with lazy download+decrypt, outbound encrypted uploads
Edit and delete of the bot's own messages; the first edit of a fresh message is age-gated by
editSafetyDelayMs(default 5000ms) so receiving clients have stored the originalReactions in and out, read receipts (
sendReadReceipts, default on), typing keep-alive, configurable group welcome messageCards degrade to text with tappable URL/mention entities plus a URL preview attachment
Requests carry a
chat-sdk-xchat/<version>User-Agent product token so Chat SDK traffic is identifiable in X API request logs (a User-Agent set viaapiHeaderstakes precedence)Registered in the
chat/adapterscatalog and thecreate-chat-sdkCLI scaffold, with a new optionalimportPathcatalog field for adapters that ship on a subpath
4.35.0
24 Jul 2026Only updates dependencies:chat 4.35.0@chat-adapter/shared 4.35.0
4.34.0
13 Jul 2026Reading the note…
4.33.0
7 Jul 2026Reading the note…
- 0.0.x
0.0.0
7 Jul 2026Reading the note…