Skip to content

Commit 0506add

Browse files
authored
Merge pull request #675 from chrisdickinson/chris/20250620-sse-auththenstart
fix(client/sse): extract protected resource from eventsource 401
2 parents 66b7cd2 + d89e854 commit 0506add

File tree

1 file changed

+19
-7
lines changed

1 file changed

+19
-7
lines changed

src/client/sse.ts

Lines changed: 19 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -117,23 +117,35 @@ export class SSEClientTransport implements Transport {
117117
}
118118

119119
private _startOrAuth(): Promise<void> {
120+
const fetchImpl = (this?._eventSourceInit?.fetch || fetch) as typeof fetch
120121
return new Promise((resolve, reject) => {
121122
this._eventSource = new EventSource(
122123
this._url.href,
123-
this._eventSourceInit ?? {
124-
fetch: (url, init) => this._commonHeaders().then((headers) => fetch(url, {
125-
...init,
126-
headers: {
127-
...headers,
128-
Accept: "text/event-stream"
124+
{
125+
...this._eventSourceInit,
126+
fetch: async (url, init) => {
127+
const headers = await this._commonHeaders()
128+
const response = await fetchImpl(url, {
129+
...init,
130+
headers: new Headers({
131+
...headers,
132+
Accept: "text/event-stream"
133+
})
134+
})
135+
136+
if (response.status === 401 && response.headers.has('www-authenticate')) {
137+
this._resourceMetadataUrl = extractResourceMetadataUrl(response);
129138
}
130-
})),
139+
140+
return response
141+
},
131142
},
132143
);
133144
this._abortController = new AbortController();
134145

135146
this._eventSource.onerror = (event) => {
136147
if (event.code === 401 && this._authProvider) {
148+
137149
this._authThenStart().then(resolve, reject);
138150
return;
139151
}

0 commit comments

Comments
 (0)