From ea6e195835ae970368fc1f046e3919d03109f80c Mon Sep 17 00:00:00 2001 From: Ryan Barrett Date: Fri, 16 Aug 2024 14:32:47 -0700 Subject: [PATCH] ATProto.send_chat: add new lxm claim to JWT lxm scopes the JWT to a single XRPC method, so we need a token per call now. https://github.com/bluesky-social/atproto/discussions/2687 --- atproto.py | 26 ++++++++++++++++---------- 1 file changed, 16 insertions(+), 10 deletions(-) diff --git a/atproto.py b/atproto.py index fab16bdc..09ebc3a2 100644 --- a/atproto.py +++ b/atproto.py @@ -864,18 +864,24 @@ class ATProto(User, Protocol): assert msg['$type'] == 'chat.bsky.convo.defs#messageInput' chat_host = os.environ['CHAT_HOST'] - token = service_jwt(host=chat_host, - aud=os.environ['CHAT_DID'], - repo_did=from_repo.did, - privkey=from_repo.signing_key) - client = Client(f'https://{chat_host}', truncate=True, headers={ - 'User-Agent': USER_AGENT, - 'Authorization': f'Bearer {token}', - }) + + def client(lxm): + token = service_jwt(host=chat_host, + aud=os.environ['CHAT_DID'], + repo_did=from_repo.did, + privkey=from_repo.signing_key, + lxm=lxm) + return Client(f'https://{chat_host}', truncate=True, headers={ + 'User-Agent': USER_AGENT, + 'Authorization': f'Bearer {token}', + }) try: - convo = client.chat.bsky.convo.getConvoForMembers(members=[to_did]) - sent = client.chat.bsky.convo.sendMessage({ + cli = client(lxm='chat.bsky.convo.getConvoForMembers') + convo = cli.chat.bsky.convo.getConvoForMembers(members=[to_did]) + + cli = client(lxm='chat.bsky.convo.sendMessage') + sent = cli.chat.bsky.convo.sendMessage({ 'convoId': convo['convo']['id'], 'message': msg, })