Browse Source

Refine `HandleDelete` logic to enforce a-tag criteria for replaceable events, improve parameterized replaceable event handling, and enhance logging for skipped and deleted events.

main
mleku 4 months ago
parent
commit
6b4b035f0c
No known key found for this signature in database
  1. 17
      app/handle-delete.go

17
app/handle-delete.go

@ -71,11 +71,22 @@ func (l *Listener) HandleDelete(env *eventenvelope.Submission) (err error) {
if ev, err = l.FetchEventBySerial(s); chk.E(err) { if ev, err = l.FetchEventBySerial(s); chk.E(err) {
continue continue
} }
if !(kind.IsReplaceable(ev.Kind) && len(at.DTag) == 0) { // Only delete events that match the a-tag criteria:
// skip a tags with no dtag if the kind is not // - For parameterized replaceable events: must have matching d-tag
// replaceable. // - For regular replaceable events: should not have d-tag constraint
if kind.IsParameterizedReplaceable(ev.Kind) {
// For parameterized replaceable, we need a DTag to match
if len(at.DTag) == 0 {
log.I.F("HandleDelete: skipping parameterized replaceable event %s - no DTag in a-tag", hex.Enc(ev.ID))
continue
}
} else if !kind.IsReplaceable(ev.Kind) {
// For non-replaceable events, a-tags don't apply
log.I.F("HandleDelete: skipping non-replaceable event %s - a-tags only apply to replaceable events", hex.Enc(ev.ID))
continue continue
} }
log.I.F("HandleDelete: deleting event %s via a-tag %d:%s:%s",
hex.Enc(ev.ID), at.Kind.K, hex.Enc(at.Pubkey), string(at.DTag))
if err = l.DeleteEventBySerial( if err = l.DeleteEventBySerial(
l.Ctx, s, ev, l.Ctx, s, ev,
); chk.E(err) { ); chk.E(err) {

Loading…
Cancel
Save