summaryrefslogtreecommitdiff
path: root/packages/tweetdeck/src/lib/client/twitterClient.ts
diff options
context:
space:
mode:
Diffstat (limited to 'packages/tweetdeck/src/lib/client/twitterClient.ts')
-rw-r--r--packages/tweetdeck/src/lib/client/twitterClient.ts75
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,
+ );
+ },
+};