fetch-event-source
fetch-event-source copied to clipboard
Avoid stale headers by supplying them as a function
One of the most common usages for headers is authentication. However, if one provides a token as part of a header to this library, its value will remain the same forever, even through retries and whatnot. If at a given moment the token expires and needs to be refreshed, there will be no hope in reconnecting, so the retry mechanism becomes quite pointless.
I propose to allow passing "headers" in as a function, in which case it will be called every time fetch() is, in order to recompute the potential dynamic values in them.
For anyone in need of a workaround, if you check for 401 in onopen, something like:
if (response.status === 401) {
throw new AuthenticationError();
}
you can catch that outside of the fetchEventSource-call, get a fresh token, and then call fetchEventSource again.
Something like:
setUpConnection()
.catch(err) {
if (err instanceof AuthenticationError) {
// Try again with a new token
setUpConnection();
where setUpConnection grabs a token and then calls fetchEventSource.
I've added a headers as a function PR here https://github.com/Azure/fetch-event-source/pull/67 FWIW