add replaceable event expander

This commit is contained in:
Jay
2026-05-21 16:35:10 -04:00
parent a17319ada7
commit d3abaa87e7
+29 -1
View File
@@ -44,7 +44,7 @@ func (s *EventSubgraph) NodesByLabel(label string) []*Node {
return nodes
}
func (s *EventSubgraph) FirstNodesByLabel(label string) *Node {
func (s *EventSubgraph) FirstNodeByLabel(label string) *Node {
for _, node := range s.nodes {
if node.Labels.Contains(label) {
return node
@@ -148,6 +148,7 @@ func DefaultExpanders() []Expander {
return []Expander{
ExpandTaggedEvents,
ExpandTaggedUsers,
ExpandReplaceableEvents,
}
}
@@ -186,3 +187,30 @@ func ExpandTaggedUsers(e roots.Event, s *EventSubgraph) {
s.AddRel(NewReferencesUserRel(tag, user, nil))
}
}
func ExpandReplaceableEvents(e roots.Event, s *EventSubgraph) {
if e.Kind != 0 && e.Kind != 3 && !(e.Kind >= 10000 && e.Kind < 20000) {
return
}
eventNode := s.FirstNodeByLabel("Event")
if eventNode == nil {
return
}
var authorNode *Node
for _, n := range s.NodesByLabel("User") {
if n.Props["pubkey"] == e.PubKey {
authorNode = n
break
}
}
if authorNode == nil {
return
}
rk := NewReplacementKeyNode(e.PubKey, e.Kind)
s.AddNode(rk)
s.AddRel(NewIsReplaceableRel(eventNode, rk, nil))
s.AddRel(NewForUserRel(rk, authorNode, nil))
}