diff options
Diffstat (limited to 'packages/tweetdeck/src/lib/client/twitterClient.ts')
| -rw-r--r-- | packages/tweetdeck/src/lib/client/twitterClient.ts | 75 |
1 files changed, 75 insertions, 0 deletions
diff --git a/packages/tweetdeck/src/lib/client/twitterClient.ts b/packages/tweetdeck/src/lib/client/twitterClient.ts new file mode 100644 index 0000000..b8914b5 --- /dev/null +++ b/packages/tweetdeck/src/lib/client/twitterClient.ts @@ -0,0 +1,75 @@ +import { + type TwitterUser, + type TweetList, + type TwitterList, + type TwitterNotification, +} from "../fetching/types"; + +const headers = { "Content-Type": "application/json" }; + +async function postJson<T>( + url: string, + body: Record<string, unknown>, +): Promise<T> { + const res = await fetch(url, { + method: "POST", + headers, + body: JSON.stringify(body), + }); + + if (!res.ok) { + const text = await res.text(); + throw new Error(text || `Request failed (${res.status})`); + } + + return (await res.json()) as T; +} + +export const twitterClient = { + own(payload: Record<string, unknown>) { + // return postJson<TwitterUser>(`/api/twitter/our`, payload); + }, + timeline(mode: string, payload: Record<string, unknown>) { + console.log("fetching tweets", mode); + return postJson<TweetList>(`/api/twitter/timeline/${mode}`, payload); + }, + lists(payload: Record<string, unknown>) { + return postJson<TwitterList[]>("/api/twitter/lists", payload); + }, + notifications(payload: Record<string, unknown>) { + return postJson<TwitterNotification[]>( + "/api/twitter/notifications", + payload, + ); + }, + removeBookmark(payload: Record<string, unknown>) { + return postJson<{ status: string }>( + "/api/twitter/bookmarks/remove", + payload, + ); + }, + like(tweetId: string, payload: Record<string, unknown>) { + return postJson<{ status: string }>( + `/api/twitter/tweets/${tweetId}/like`, + payload, + ); + }, + retweet(tweetId: string, payload: Record<string, unknown>) { + return postJson<{ status: string }>( + `/api/twitter/tweets/${tweetId}/retweet`, + payload, + ); + }, + bookmark(tweetId: string, payload: Record<string, unknown>) { + return postJson<{ status: string }>( + `/api/twitter/tweets/${tweetId}/bookmark`, + payload, + ); + }, + reply(tweetId: string, payload: Record<string, unknown>) { + return postJson<{ status: string }>( + `/api/twitter/tweets/${tweetId}/reply`, + payload, + ); + }, +}; |
