diff --git a/subgraph.go b/subgraph.go index 57dfa17..5dc8115 100644 --- a/subgraph.go +++ b/subgraph.go @@ -210,3 +210,42 @@ func ExpandReplaceableEvents(e roots.ValidatedEvent, s *EventSubgraph) { s.AddRel(NewIsReplaceableRel(eventNode, rk, nil)) s.AddRel(NewForUserRel(rk, authorNode, nil)) } + +func ExpandAddressableEvents(e roots.ValidatedEvent, s *EventSubgraph) { + if !(e.Kind() >= 30000 && e.Kind() < 40000) { + return + } + + eventNode := s.FirstNodeByLabel("Event") + if eventNode == nil { + return + } + + var dTagNodes []*Node + for _, n := range s.NodesByLabel("Tag") { + if n.Props["name"] == "d" { + dTagNodes = append(dTagNodes, n) + } + } + if len(dTagNodes) != 1 { + return + } + dTagNode := dTagNodes[0] + + 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)) + s.AddRel(NewWithDTagRel(rk, dTagNode, nil)) +}