a tool for shared writing and social publishing
at debug/datetime 35 lines 1.1 kB view raw
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}