I use inbox and outbox terminology in my code. There can be additional logic that wraps before or after. Publish and query could also work perhaps.
Basically it’s a middleware pattern - which I think makes the most sense long term.
Still have a dumb pool of relays you keep connected to, however you can still connect to a relay on demand (e.g a DM in outbox could run a function to pick which relays to attempt publishing to).
You then need to consider failures to send, or outages, or some M/N OK result threshold to keep trying until that’s happy.
And if your eager in a client app, you could self-throttle push listing events - however you shouldn’t really hit limits as a human.