From 0f442f4c854a7f11efb0995f1e9ab076ab02b49b Mon Sep 17 00:00:00 2001 From: f321x Date: Tue, 10 Jun 2025 19:29:19 +0200 Subject: [PATCH] plugin: nwc: improve filtering of expired requests improve the filtering of incoming requests by checking if they have explicitly set an expiration tag. If so, they will only be ignored if this timestamp is exceeded. Otherwise requests older than 30 secons will get ignored and an error will get sent to the client so the client is aware it's request arrived too late. This is done to prevent handling requests the user may already expects to have failed. --- electrum/plugins/nwc/nwcserver.py | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/electrum/plugins/nwc/nwcserver.py b/electrum/plugins/nwc/nwcserver.py index 9fd222de2..c0eac2264 100644 --- a/electrum/plugins/nwc/nwcserver.py +++ b/electrum/plugins/nwc/nwcserver.py @@ -269,7 +269,7 @@ class NWCServer(Logger, EventListener): query = { "authors": list(self.connections.keys()), # the pubkeys of the client connections "kinds": [self.REQUEST_EVENT_KIND], - "limit": 0, + "limit": 0, # requests only new events after creating this subscription "since": int(time.time()) } async for event in self.manager.get_events(query, single_event=False, only_stored=False): @@ -290,8 +290,16 @@ class NWCServer(Logger, EventListener): await self.send_error(event, "NOT_IMPLEMENTED") continue - if event.created_at < int(time.time()) - 15: + # if the request has an explicitly set expiration tag, ignore it if it is expired + # otherwise ignore requests older than 30 sec to not handle requests the user may + # already expect to have timed out + if event.expires_at() is not None: + if event.is_expired(): + self.logger.debug(f"expired nwc request event: {event.content}") + continue + elif event.created_at < int(time.time()) - 30: self.logger.debug(f"old nwc request event: {event.content}") + await self.send_error(event, "OTHER", f"not handling too old request") continue # decrypt the requests content