slop slop slop sahuuuurrr
1# Missing AppView Endpoints (Final Deep Comparison)
2
3This document provides a final audit of our custom Hydrant-based AppView compared to the official `@atproto/bsky` reference implementation.
4
5## 1. Native / Fully Local Implementations
6These are features served entirely from our local Hydrant index or `fjall` private database.
7- **Actor:** `getProfile`, `getProfiles`, `getPreferences`, `putPreferences`.
8- **Feed:** `getAuthorFeed`, `getTimeline`, `getPostThread`, `getPosts`, `getQuotes`, `getActorLikes`, `getLikes`, `getRepostedBy`, `getFeed` (Hydrated via external generators).
9- **Graph:** `getFollows`, `getFollowers`, `getKnownFollowers`, `getRelationships`, `getBlocks`, `getMutes`, `muteActor`, `unmuteActor`, `getList`, `getLists`.
10- **Notification:** `listNotifications`, `getUnreadCount`, `updateSeen`.
11- **Private State:** `getBookmarks`, `createBookmark`, `deleteBookmark`, `getDrafts`, `createDraft`, `updateDraft`, `deleteDraft`.
12
13---
14
15## 2. Missing Endpoints (Currently Proxied)
16
17### Search & Discovery (The biggest gap)
18- `app.bsky.actor.searchActors` / `searchActorsTypeahead`: Requires a full-text search engine.
19- `app.bsky.feed.searchPosts`: Requires a full-text search engine.
20- `app.bsky.actor.getSuggestions`: Algorithmic "Who to follow".
21- `app.bsky.feed.getSuggestedFeeds`: Discovery of new custom feeds.
22- `app.bsky.graph.searchStarterPacks`: Search for starter packs.
23- `app.bsky.unspecced.getTrends` / `getTrendingTopics`: Real-time analysis of global post volume.
24
25### Moderation & Labeling
26- `app.bsky.labeler.getServices`: Fetching views of moderation services.
27- `app.bsky.graph.getListBlocks` / `getListMutes`: Mutes/Blocks based on curated lists.
28- `app.bsky.graph.muteActorList` / `muteThread` / etc.: Bulk or contextual muting.
29
30### Starter Packs & Misc Graph
31- `app.bsky.graph.getStarterPack` / `getStarterPacks` / `getActorStarterPacks`: Curated onboarding packs.
32- `app.bsky.graph.getListsWithMembership`: Finding which lists a user belongs to.
33
34### Push Notifications
35- `app.bsky.notification.registerPush` / `unregisterPush`: Requires integration with FCM/APNs.
36
37---
38
39## 3. Reference Implementation Details Missing
40Even in our "implemented" endpoints, we lack some deep "AppView-only" hydration features present in the reference TypeScript code:
41
42- **Embed Record Hydration:** Our `getPostView` hydrates the main post but doesn't recursively hydrate nested `app.bsky.embed.record` embeds (showing a quote-post's content inside the main post view). The client currently has to fetch those separately or they show as empty.
43- **Labels:** We do not currently fetch or apply labels from Ozone or other labelers to the returned views.
44- **Viewer State:** Our views (like `postView`) don't always include the `viewer` field (e.g., `viewer.like`, `viewer.repost`) which tells the client if *you* have already liked that post. This requires checking your repo's records for every post returned.
45
46---
47
48## 4. Excluded by Design
49- **Age Assurance:** Always returns "assured".
50- **Contacts:** Not implemented.
51
52## Summary Status
53The AppView is **~85% complete** for a single-user power-user experience. It handles all daily interactions (reading the timeline, checking notifications, viewing threads, managing settings) natively. The remaining ~15% consists of "Global" features like Search and Discovery which typically require massive infrastructure beyond a local repository index.