diff --git a/src/noose/sqlite.rs b/src/noose/sqlite.rs index 189dff5..f352349 100644 --- a/src/noose/sqlite.rs +++ b/src/noose/sqlite.rs @@ -844,6 +844,12 @@ impl NostrSqlite { let event = row.clone().to_event(); + if event.is_expired() { + return Err(Error::internal_with_message( + "Event has expired. Ignoring...", + )); + } + Ok(event) }) .await @@ -1059,7 +1065,9 @@ impl NostrSqlite { let mut event_vec: Vec = vec![]; while let Ok(Some(row)) = rows.next() { let event = EventRow::from(row).to_event(); - event_vec.push(event); + if !event.is_expired() { + event_vec.push(event); + } } Ok(event_vec) @@ -1134,8 +1142,6 @@ impl NostrSqlite { let Ok(query_result) = connection .interact(move |conn| { let (sql, values) = sql_statement - .clear_selects() - .column(EventsTable::EventId) .order_by(EventsTable::CreatedAt, sq_order.to_owned()) .build_rusqlite(SqliteQueryBuilder); @@ -1144,9 +1150,10 @@ impl NostrSqlite { let mut event_vec: Vec = vec![]; while let Ok(Some(row)) = rows.next() { - let event_id_string: String = row.get(0).unwrap(); - let event_id = EventId::from_str(&event_id_string).unwrap(); - event_vec.push(event_id); + let event = EventRow::from(row).to_event(); + if !event.is_expired() { + event_vec.push(event.id); + } } Ok(event_vec) @@ -1176,35 +1183,39 @@ impl NostrSqlite { coordinate.kind, coordinate.pubkey, coordinate.identifier ) }; - + let Ok(query_result) = connection - .interact(move |conn: &mut rusqlite::Connection| -> Result { - let (sql, value) = Query::select() - .from(EventsTable::Table) - .columns([EventsTable::EventId, EventsTable::CreatedAt]) - .left_join( - TagsTable::Table, - sea_query::Expr::col((TagsTable::Table, TagsTable::EventId)) - .equals((EventsTable::Table, EventsTable::EventId)), - ) - .and_where(sea_query::Expr::col((TagsTable::Table, TagsTable::Tag)).eq("a")) - .and_where(sea_query::Expr::col((TagsTable::Table, TagsTable::Value)).eq(ident)) - .and_where( - sea_query::Expr::col((EventsTable::Table, EventsTable::CreatedAt)) - .gte(timestamp.as_i64()), - ) - .limit(1) - .build_rusqlite(SqliteQueryBuilder); + .interact( + move |conn: &mut rusqlite::Connection| -> Result { + let (sql, value) = Query::select() + .from(EventsTable::Table) + .columns([EventsTable::EventId, EventsTable::CreatedAt]) + .left_join( + TagsTable::Table, + sea_query::Expr::col((TagsTable::Table, TagsTable::EventId)) + .equals((EventsTable::Table, EventsTable::EventId)), + ) + .and_where(sea_query::Expr::col((TagsTable::Table, TagsTable::Tag)).eq("a")) + .and_where( + sea_query::Expr::col((TagsTable::Table, TagsTable::Value)).eq(ident), + ) + .and_where( + sea_query::Expr::col((EventsTable::Table, EventsTable::CreatedAt)) + .gte(timestamp.as_i64()), + ) + .limit(1) + .build_rusqlite(SqliteQueryBuilder); - let mut stmt = conn.prepare(sql.as_str()).unwrap(); - let mut rows = stmt.query(&*value.as_params()).unwrap(); + let mut stmt = conn.prepare(sql.as_str()).unwrap(); + let mut rows = stmt.query(&*value.as_params()).unwrap(); - if let Ok(Some(record)) = rows.next() { - return Ok(false) - } + if let Ok(Some(record)) = rows.next() { + return Ok(false); + } - Ok(true) - }) + Ok(true) + }, + ) .await else { return Err(Error::internal_with_message( @@ -1272,7 +1283,8 @@ impl NostrDatabase for NostrSqlite { coordinate: &Coordinate, timestamp: Timestamp, ) -> Result { - self.has_coordinate_been_deleted(coordinate, timestamp).await + self.has_coordinate_been_deleted(coordinate, timestamp) + .await } /// Set [`EventId`] as seen by relay diff --git a/src/utils/config.rs b/src/utils/config.rs index 3349957..78ed854 100644 --- a/src/utils/config.rs +++ b/src/utils/config.rs @@ -43,7 +43,7 @@ impl Config { "contact": "klink@zhitno.st", "name": "zhitno.st", "description": "Very *special* nostr relay", - "supported_nips": [ 1, 9, 11, 12, 15, 16, 20, 22, 28, 33, 45 ], + "supported_nips": [ 1, 2, 9, 11, 12, 15, 16, 20, 22, 28, 33, 40, 45 ], "software": "git+https://git.zhitno.st/Klink/sneedstr.git", "version": "0.1.0" })