aboutsummaryrefslogtreecommitdiff
path: root/backend/fetchers/app.bsky.go
diff options
context:
space:
mode:
authorGuillermo Serrahima <dev@vylion.com>2026-03-18 17:00:51 +0100
committerGuillermo Serrahima <dev@vylion.com>2026-03-18 17:00:51 +0100
commite7b376211cdf013528c1919a28caa28cc0ec9c93 (patch)
tree2e8e3ae452f09af494a5cd207d7bc0e261eb929a /backend/fetchers/app.bsky.go
parent64b2d7d08bc5f54d3a00f260b57a3853b74c2456 (diff)
downloadllostre-e7b376211cdf013528c1919a28caa28cc0ec9c93.tar.xz
llostre-e7b376211cdf013528c1919a28caa28cc0ec9c93.zip
file renaming
Diffstat (limited to 'backend/fetchers/app.bsky.go')
-rw-r--r--backend/fetchers/app.bsky.go143
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
-}