diff options
| author | Guillermo Serrahima <dev@vylion.com> | 2026-03-18 17:00:51 +0100 |
|---|---|---|
| committer | Guillermo Serrahima <dev@vylion.com> | 2026-03-18 17:00:51 +0100 |
| commit | e7b376211cdf013528c1919a28caa28cc0ec9c93 (patch) | |
| tree | 2e8e3ae452f09af494a5cd207d7bc0e261eb929a /backend/fetchers/app.bsky.go | |
| parent | 64b2d7d08bc5f54d3a00f260b57a3853b74c2456 (diff) | |
| download | llostre-e7b376211cdf013528c1919a28caa28cc0ec9c93.tar.xz llostre-e7b376211cdf013528c1919a28caa28cc0ec9c93.zip | |
file renaming
Diffstat (limited to 'backend/fetchers/app.bsky.go')
| -rw-r--r-- | backend/fetchers/app.bsky.go | 143 |
1 files changed, 0 insertions, 143 deletions
diff --git a/backend/fetchers/app.bsky.go b/backend/fetchers/app.bsky.go deleted file mode 100644 index 92303fc..0000000 --- a/backend/fetchers/app.bsky.go +++ /dev/null @@ -1,143 +0,0 @@ -package fetchers - -import ( - "encoding/json" - "fmt" - "io" - "llostre/backend/auth" - "llostre/backend/general" - "llostre/backend/notes" - "log/slog" - "net/http" -) - -type ListRecordsResponse struct { - Records []notes.AppBskyFeedPostRecord `json:"records"` -} - -func FetchAppBskyFeedPosts(logger *slog.Logger, did, pdsURL, accessToken string, keypair *auth.DPoPKeyPair, notesCache *Cache) ([]notes.Note, error) { - url := fmt.Sprintf("%s/xrpc/com.atproto.repo.listRecords?repo=%s&collection=app.bsky.feed.post", pdsURL, did) - - logger.Debug("generating DPoP proof", "url", url) - dpopProof, err := keypair.GenerateDPoPProof("GET", url, "") - if err != nil { - logger.Error("DPoP generation failed", "error", err) - return nil, err - } - - logger.Debug("making request to PDS") - req, err := http.NewRequest("GET", url, nil) - if err != nil { - return nil, err - } - req.Header.Set("Authorization", "Bearer "+accessToken) - req.Header.Set("DPoP", dpopProof) - - resp, err := http.DefaultClient.Do(req) - if err != nil { - return nil, err - } - defer resp.Body.Close() - - var response ListRecordsResponse - if err := json.NewDecoder(resp.Body).Decode(&response); err != nil { - return nil, err - } - - profile, err := FetchProfile(did, pdsURL, notesCache) - if err != nil { - logger.Error("profile fetch failed", "did", did, "error", err) - } else { - logger.Debug("fetched profile") - } - - posts := make([]notes.Note, 0, len(response.Records)) - for _, record := range response.Records { - bp, err := notes.NoteFromAppBskyFeedPostRecord(record, profile) - if err != nil { - logger.Error("failed to convert record", "error", err, "uri", record.URI) - continue - } - notesCache.Set(bp.URI, bp) - posts = append(posts, *bp) - } - - return posts, nil -} - -func FetchPostByURI(uri, accessToken string, keypair *auth.DPoPKeyPair, cache *Cache) (*notes.Note, error) { - // check cache - if cached, found := cache.Get(uri); found { - return cached, nil - } - - repo, collection, rkey, err := general.ParseURI(uri) - - // need to resolve DID to PDS - pds, err := FetchPDS(repo) - if err != nil { - return nil, err - } - - url := fmt.Sprintf("%s/xrpc/com.atproto.repo.getRecord?repo=%s&collection=%s&rkey=%s", - pds, repo, collection, rkey) - - // fetch with DPoP - dpopProof, err := keypair.GenerateDPoPProof("GET", url, "") - if err != nil { - return nil, err - } - - req, err := http.NewRequest("GET", url, nil) - if err != nil { - return nil, err - } - req.Header.Set("Authorization", "Bearer "+accessToken) - req.Header.Set("DPoP", dpopProof) - - resp, err := http.DefaultClient.Do(req) - if err != nil { - return nil, err - } - defer resp.Body.Close() - - if resp.StatusCode != 200 { - body, _ := io.ReadAll(resp.Body) - return nil, fmt.Errorf("PDS returned status %d: %s", resp.StatusCode, string(body)) - } - - var result struct { - URI string `json:"uri"` - Value json.RawMessage `json:"value"` - } - if err := json.NewDecoder(resp.Body).Decode(&result); err != nil { - return nil, err - } - - // convert to AppBskyFeedPostRecord - record := notes.AppBskyFeedPostRecord{ - URI: result.URI, - } - if err := json.Unmarshal(result.Value, &record.Value); err != nil { - return nil, err - } - - // get author of the note - profile, found := cache.GetProfile(repo) - if !found { - profile, err = FetchProfile(repo, pds, cache) - } - if err != nil { - return nil, err - } - - note, err := notes.NoteFromAppBskyFeedPostRecord(record, profile) - if err != nil { - return nil, err - } - - // cache it - cache.Set(note.URI, note) - - return note, nil -} |
