A locally focused bluesky appview
at master 39 lines 925 B view raw
1package hydration 2 3import ( 4 "context" 5 "fmt" 6 7 "github.com/bluesky-social/indigo/atproto/syntax" 8 "github.com/whyrusleeping/market/models" 9) 10 11func (h *Hydrator) NormalizeUri(ctx context.Context, uri string) (string, error) { 12 puri, err := syntax.ParseATURI(uri) 13 if err != nil { 14 return "", fmt.Errorf("invalid uri: %w", err) 15 } 16 17 var did string 18 if !puri.Authority().IsDID() { 19 resp, err := h.dir.LookupHandle(ctx, syntax.Handle(puri.Authority().String())) 20 if err != nil { 21 return "", err 22 } 23 24 did = resp.DID.String() 25 } else { 26 did = puri.Authority().String() 27 } 28 29 return fmt.Sprintf("at://%s/%s/%s", did, puri.Collection().String(), puri.RecordKey().String()), nil 30} 31 32func (h *Hydrator) UriForPost(ctx context.Context, p *models.Post) (string, error) { 33 did, err := h.backend.DidFromID(ctx, p.Author) 34 if err != nil { 35 return "", err 36 } 37 38 return fmt.Sprintf("at://%s/app.bsky.feed.post/%s", did, p.Rkey), nil 39}