diff --git a/rhodium-core/src/commonMain/kotlin/rhodium/nostr/NostrFilter.kt b/rhodium-core/src/commonMain/kotlin/rhodium/nostr/NostrFilter.kt index 039c2d5..f4d9ddb 100644 --- a/rhodium-core/src/commonMain/kotlin/rhodium/nostr/NostrFilter.kt +++ b/rhodium-core/src/commonMain/kotlin/rhodium/nostr/NostrFilter.kt @@ -13,6 +13,7 @@ class NostrFilter private constructor( @SerialName("#t") private val topicList: List? = null, private val since: Long? = null, private val until: Long? = null, + private val search: String? = null, private val limit: Int = 1 ) { @@ -26,6 +27,7 @@ class NostrFilter private constructor( Topic:$topicList Since:$since Until:$until + Search:$search Limit:$limit """.trimIndent() @@ -42,6 +44,7 @@ class NostrFilter private constructor( private var topicList: List? = null private var since: Long? = null private var until: Long? = null + private var search: String? = null private var limit: Int = 1 fun idList(vararg iDList: String = emptyArray()) = apply { @@ -76,6 +79,10 @@ class NostrFilter private constructor( until = timeStamp } + fun search(searchString: String? = null) = apply { + search = searchString + } + fun limit(receivingEventLimit: Int) = apply { limit = receivingEventLimit } @@ -89,6 +96,7 @@ class NostrFilter private constructor( topicList = topicList, since = since, until = until, + search = search, limit = limit ) } diff --git a/rhodium-core/src/commonTest/kotlin/rhodium/nostr/NostrFilterTest.kt b/rhodium-core/src/commonTest/kotlin/rhodium/nostr/NostrFilterTest.kt index 41a7719..11cd5b7 100644 --- a/rhodium-core/src/commonTest/kotlin/rhodium/nostr/NostrFilterTest.kt +++ b/rhodium-core/src/commonTest/kotlin/rhodium/nostr/NostrFilterTest.kt @@ -109,4 +109,21 @@ class NostrFilterTest { assertEquals(correctRequestJson, filterJson) } + @Test + fun `filter with search parameter serializes correctly`(){ + val currentTimestamp = 1653822739L + val previousTimestamp = currentTimestamp - 24 * 60 * 60 + val searchFilter = NostrFilter.newFilter() + .kinds(EventKind.TEXT_NOTE.kind) + .search("bitcoin") + .since(previousTimestamp) + .until(currentTimestamp) + .limit(10) + .build() + val filterJson = nostrFilterEventMapper.encodeToString(searchFilter) + val correctSearchJson = """{"kinds":[1],"since":1653736339,"until":1653822739,"search":"bitcoin","limit":10}""" + println("Search filter JSON: $filterJson") + assertEquals(correctSearchJson, filterJson) + } + } \ No newline at end of file