From 7a036e244d5bd35dc9fba323b23443881f3e28ea Mon Sep 17 00:00:00 2001 From: yuta Date: Wed, 24 Jun 2026 16:33:43 +0900 Subject: [PATCH] fix: parse verify credentials user id --- src/lib/twitter-client-users.ts | 14 +++++++++----- tests/twitter-client.current-user.test.ts | 18 ++++++++++++++++++ 2 files changed, 27 insertions(+), 5 deletions(-) diff --git a/src/lib/twitter-client-users.ts b/src/lib/twitter-client-users.ts index dc53056..758cbe2 100644 --- a/src/lib/twitter-client-users.ts +++ b/src/lib/twitter-client-users.ts @@ -205,11 +205,15 @@ export function withUsers>( ? data.user_id : typeof data?.user_id_str === 'string' ? data.user_id_str - : typeof data?.user?.id_str === 'string' - ? data.user.id_str - : typeof data?.user?.id === 'string' - ? data.user.id - : null; + : typeof data?.id_str === 'string' + ? data.id_str + : typeof data?.id === 'string' + ? data.id + : typeof data?.user?.id_str === 'string' + ? data.user.id_str + : typeof data?.user?.id === 'string' + ? data.user.id + : null; if (username && userId) { this.clientUserId = userId; diff --git a/tests/twitter-client.current-user.test.ts b/tests/twitter-client.current-user.test.ts index 47de3f8..2b63bb0 100644 --- a/tests/twitter-client.current-user.test.ts +++ b/tests/twitter-client.current-user.test.ts @@ -107,6 +107,24 @@ describe('TwitterClient getCurrentUser', () => { expect(mockFetch).toHaveBeenCalledTimes(2); }); + it('reads top-level id_str from verify_credentials responses', async () => { + mockFetch.mockResolvedValue({ + ok: true, + status: 200, + json: async () => ({ + id_str: '12345', + screen_name: 'tester', + name: 'Test User', + }), + }); + + const client = new TwitterClient({ relayBaseUrl: testRelayBaseUrl }); + const result = await client.getCurrentUser(); + + expect(result.success).toBe(true); + expect(result.user).toEqual({ id: '12345', username: 'tester', name: 'Test User' }); + }); + it('continues on fetch errors and still succeeds via later API endpoint', async () => { mockFetch .mockRejectedValueOnce(new Error('boom'))