If you succeed in creating a generic async primitive, it doesn't really matter what the original task was (as long as it's something that requires async), no? That's an implication of it being generic?
The layer was not extracted from the NATS client, the NATS client was just a source of frustration that prompted this creation.