Low-latency AT Protocol interaction indexer.
20

Configure Feed

Select the types of activity you want to include in your feed.

backlink: support arbitrary urls

Aly Raffauf (Jul 2, 2026, 11:42 PM EDT) cb68724b a5e15a02

+17 -4
+17 -4
internal/backlink/extract.go
··· 1 1 package backlink 2 2 3 3 import ( 4 - "fmt" 5 - 6 4 "github.com/bluesky-social/indigo/atproto/syntax" 7 5 ) 8 6 ··· 13 11 if _, err := syntax.ParseDID(s); err == nil { 14 12 return true 15 13 } 14 + if _, err := syntax.ParseURI(s); err == nil { 15 + return true 16 + } 16 17 return false 17 18 } 19 + 18 20 19 21 func tryStrongRef(obj map[string]any) (target string, targetCid string, ok bool) { 20 22 if len(obj) != 2 { ··· 39 41 return base + "." + key 40 42 } 41 43 44 + func arrayPathSuffix(val any) string { 45 + if obj, ok := val.(map[string]any); ok { 46 + if t, ok := obj["$type"].(string); ok { 47 + return "[" + t + "]" 48 + } 49 + } 50 + return "[]" 51 + } 52 + 53 + 42 54 func walk(path string, value any, base Link) []Link { 43 55 switch v := value.(type) { 44 56 case map[string]any: ··· 58 70 59 71 case []any: 60 72 var out []Link 61 - for i, val := range v { 62 - out = append(out, walk(fmt.Sprintf("%s[%d]", path, i), val, base)...) 73 + for _, val := range v { 74 + out = append(out, walk(path+arrayPathSuffix(val), val, base)...) 63 75 } 64 76 return out 77 + 65 78 66 79 case string: 67 80 if isLinkTarget(v) {