Remember the supplied dangling receipt. Only stores it as the latest if it isn't strictly older (by ts) than an existing dangling receipt for the same (userId, receiptType). Updates the public reverse cache regardless, so consumers see the cached receipts.
Remove and return the dangling receipts for the given event ID.
the event ID to look for
the found dangling receipts, or undefined if we don't have one.
All the receipts that we have received but can't process because we can't find the event they refer to.
We hold on to them so we can process them if their event arrives later. To keep the public
receiptsByEventIdindex consistent with the legacy behaviour, we also push dangling receipts into the reverse cache (with the per-(userId, type) eviction semantics).