Skip to content

Commit 8a5a02a

Browse files
authored
fix: setAuth ran automatically for realtime; prioritize setAuth tasks (#1475)
1 parent 6a44f79 commit 8a5a02a

File tree

5 files changed

+345
-118
lines changed

5 files changed

+345
-118
lines changed

package-lock.json

Lines changed: 4 additions & 4 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@
5353
"@supabase/functions-js": "2.4.5",
5454
"@supabase/node-fetch": "2.6.15",
5555
"@supabase/postgrest-js": "1.21.0",
56-
"@supabase/realtime-js": "2.11.15",
56+
"@supabase/realtime-js": "2.12.1",
5757
"@supabase/storage-js": "2.7.1"
5858
},
5959
"devDependencies": {

pnpm-lock.yaml

Lines changed: 5 additions & 5 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/SupabaseClient.ts

Lines changed: 20 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -138,7 +138,7 @@ export default class SupabaseClient<
138138
})
139139

140140
if (!settings.accessToken) {
141-
this._listenForAuthEvents()
141+
setTimeout(() => this._listenForAuthEvents(), 0)
142142
}
143143
}
144144

@@ -278,7 +278,7 @@ export default class SupabaseClient<
278278
return this.realtime.removeAllChannels()
279279
}
280280

281-
private async _getAccessToken() {
281+
protected async _getAccessToken() {
282282
if (this.accessToken) {
283283
return await this.accessToken()
284284
}
@@ -288,7 +288,7 @@ export default class SupabaseClient<
288288
return data.session?.access_token ?? null
289289
}
290290

291-
private _initSupabaseAuthClient(
291+
protected _initSupabaseAuthClient(
292292
{
293293
autoRefreshToken,
294294
persistSession,
@@ -324,21 +324,23 @@ export default class SupabaseClient<
324324
})
325325
}
326326

327-
private _initRealtimeClient(options: RealtimeClientOptions) {
327+
protected _initRealtimeClient(options: RealtimeClientOptions) {
328328
return new RealtimeClient(this.realtimeUrl.href, {
329329
...options,
330330
params: { ...{ apikey: this.supabaseKey }, ...options?.params },
331331
})
332332
}
333333

334-
private _listenForAuthEvents() {
335-
let data = this.auth.onAuthStateChange((event, session) => {
336-
this._handleTokenChanged(event, 'CLIENT', session?.access_token)
334+
protected async _listenForAuthEvents() {
335+
return await this.auth.onAuthStateChange((event, session) => {
336+
setTimeout(
337+
async () => await this._handleTokenChanged(event, 'CLIENT', session?.access_token),
338+
0
339+
)
337340
})
338-
return data
339341
}
340342

341-
private _handleTokenChanged(
343+
protected async _handleTokenChanged(
342344
event: AuthChangeEvent,
343345
source: 'CLIENT' | 'STORAGE',
344346
token?: string
@@ -348,10 +350,16 @@ export default class SupabaseClient<
348350
this.changedAccessToken !== token
349351
) {
350352
this.changedAccessToken = token
353+
this.realtime.setAuth(token)
351354
} else if (event === 'SIGNED_OUT') {
352-
this.realtime.setAuth()
353-
if (source == 'STORAGE') this.auth.signOut()
354-
this.changedAccessToken = undefined
355+
try {
356+
await this.realtime.setAuth()
357+
if (source == 'STORAGE') this.auth.signOut()
358+
} catch (error) {
359+
console.log('Failed to set auth for realtime client:', error)
360+
} finally {
361+
this.changedAccessToken = undefined
362+
}
355363
}
356364
}
357365
}

0 commit comments

Comments
 (0)