diff --git a/client_manager.py b/client_manager.py index 2b4843e..775d3dd 100644 --- a/client_manager.py +++ b/client_manager.py @@ -210,9 +210,10 @@ class NostrClientConnection: try: if e.is_replaceable_event: await delete_events( - self.relay_id, NostrFilter(kinds=[e.kind], authors=[e.pubkey]) + self.relay_id, NostrFilter(kinds=[e.kind], authors=[e.pubkey], until=e.created_at) ) - await create_event(self.relay_id, e, self.pubkey) + if not e.is_ephemeral_event: + await create_event(self.relay_id, e, self.pubkey) await self._broadcast_event(e) if e.is_delete_event: @@ -307,6 +308,9 @@ class NostrClientConnection: if not valid: return (valid, message) + if e.is_ephemeral_event: + return True, "" + publisher_pubkey = self.pubkey if self.pubkey else e.pubkey valid, message = await self._validate_storage(publisher_pubkey, e.size_bytes) if not valid: diff --git a/models.py b/models.py index 3953010..f59b500 100644 --- a/models.py +++ b/models.py @@ -167,7 +167,7 @@ class NostrEvent(BaseModel): @property def is_replaceable_event(self) -> bool: - return self.kind in [0, 3, 41] + return self.kind in [0, 3, 41] or (self.kind >= 10000 and self.kind < 20000) @property def is_auth_response_event(self) -> bool: @@ -181,9 +181,14 @@ class NostrEvent(BaseModel): def is_delete_event(self) -> bool: return self.kind == 5 + @property + def is_regular_event(self) -> bool: + return self.kind >= 1000 and self.kind < 10000 + @property def is_ephemeral_event(self) -> bool: - return self.kind in [22242] + return self.kind >= 20000 and self.kind < 30000 + def check_signature(self): event_id = self.event_id diff --git a/tests/test_events.py b/tests/test_events.py index 6af5497..5b33c90 100644 --- a/tests/test_events.py +++ b/tests/test_events.py @@ -59,7 +59,7 @@ async def test_valid_event_crud(valid_events: List[EventFixture]): # insert all events in DB before doing an query for e in all_events: - await create_event(RELAY_ID, e) + await create_event(RELAY_ID, e, None) for f in valid_events: await get_by_id(f.data, f.name)