a tool for shared writing and social publishing
1"use server";
2
3import { AppBskyActorDefs, Agent as BskyAgent } from "@atproto/api";
4import { getIdentityData } from "actions/getIdentityData";
5import { createOauthClient } from "src/atproto-oauth";
6const leafletFeedURI =
7 "at://did:plc:btxrwcaeyodrap5mnjw2fvmz/app.bsky.feed.generator/subscribedPublications";
8
9export async function addFeed() {
10 const oauthClient = await createOauthClient();
11 let identity = await getIdentityData();
12 if (!identity || !identity.atp_did) {
13 throw new Error("Invalid identity data");
14 }
15
16 let credentialSession = await oauthClient.restore(identity.atp_did);
17 let bsky = new BskyAgent(credentialSession);
18 let prefs = await bsky.app.bsky.actor.getPreferences();
19 let savedFeeds = prefs.data.preferences.find(
20 (pref) => pref.$type === "app.bsky.actor.defs#savedFeedsPrefV2",
21 ) as AppBskyActorDefs.SavedFeedsPrefV2;
22
23 let hasFeed = !!savedFeeds.items.find(
24 (feed) => feed.value === leafletFeedURI,
25 );
26 if (hasFeed) return;
27
28 await bsky.addSavedFeeds([
29 {
30 value: leafletFeedURI,
31 pinned: true,
32 type: "feed",
33 },
34 ]);
35}