Skip to content

Commit

Permalink
Starts the work to filter events that return from the relay to make s…
Browse files Browse the repository at this point in the history
…ure they match the subscription submitted
  • Loading branch information
vitorpamplona committed Jan 14, 2025
1 parent e3e9022 commit 3ac303c
Show file tree
Hide file tree
Showing 3 changed files with 51 additions and 8 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,17 @@ class RelaySubFilter(
val activeTypes: Set<FeedType>,
val subs: SubscriptionManager,
) : SubscriptionCollection {
fun isMatch(filter: TypedFilter) = activeTypes.any { it in filter.types } && filter.filter.isValidFor(url)

fun match(filters: List<TypedFilter>): Boolean =
filters.any { filter ->
isMatch(filter)
}

override fun isActive(subscriptionId: String): Boolean = subs.isActive(subscriptionId) && match(subs.getSubscriptionFilters(subscriptionId))

override fun getFilters(subscriptionId: String) = filter(subs.getSubscriptionFilters(subscriptionId))

override fun allSubscriptions(): List<Subscription> =
subs.allSubscriptions().mapNotNull { filter ->
val filters = filter(filter.value)
Expand All @@ -62,9 +73,14 @@ class RelaySubFilter(
}
}

override fun match(
subscriptionId: String,
event: Event,
): Boolean = subs.getSubscriptionFilters(subscriptionId).any { it.filter.match(event, url) }

fun filter(filters: List<TypedFilter>): List<Filter> =
filters.mapNotNull { filter ->
if (activeTypes.any { it in filter.types } && filter.filter.isValidFor(url)) {
if (isMatch(filter)) {
filter.filter.toRelay(url)
} else {
null
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -238,13 +238,28 @@ class SimpleRelay(

// Log.w("Relay", "Relay onEVENT ${event.kind} $url, $subscriptionId ${msgArray.get(2)}")

listeners.forEach {
it.onEvent(
this@SimpleRelay,
subscriptionId,
event,
afterEOSEPerSubscription[subscriptionId] == true,
)
// filter results: subs.isActive(subscriptionId) && subs.match(subscriptionId, event)
if (true) {
listeners.forEach {
it.onEvent(
this@SimpleRelay,
subscriptionId,
event,
afterEOSEPerSubscription[subscriptionId] == true,
)
}
} else {
val filter =
subs.getFilters(subscriptionId).joinToStringLimited(
separator = ",",
limit = 19,
prefix = """["REQ","$subscriptionId",""",
postfix = "]",
) {
it.toJson()
}

Log.w("Relay", "Subscription $filter is not active or the filter does not match the event ${msgArray.get(2)}")
}
}
"EOSE" ->
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,18 @@
*/
package com.vitorpamplona.ammolite.relays.relays

import com.vitorpamplona.quartz.nip01Core.core.Event
import com.vitorpamplona.quartz.nip01Core.relays.Filter

interface SubscriptionCollection {
fun isActive(subscriptionId: String): Boolean

fun getFilters(subscriptionId: String): List<Filter>

fun allSubscriptions(): List<Subscription>

fun match(
subscriptionId: String,
event: Event,
): Boolean
}

0 comments on commit 3ac303c

Please sign in to comment.