From 52d417c05aa84a9b9c7b769a2c40a6bcd4f07603 Mon Sep 17 00:00:00 2001 From: Wen Bo Xie Date: Sat, 4 Sep 2021 21:15:02 -0400 Subject: [PATCH] feat: add user_token when creating realtime channel subscription --- src/lib/SupabaseQueryBuilder.ts | 2 +- src/lib/SupabaseRealtimeClient.ts | 16 ++++++++++++++-- 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/src/lib/SupabaseQueryBuilder.ts b/src/lib/SupabaseQueryBuilder.ts index 0c102e7c..5ecdfbd8 100644 --- a/src/lib/SupabaseQueryBuilder.ts +++ b/src/lib/SupabaseQueryBuilder.ts @@ -23,7 +23,7 @@ export class SupabaseQueryBuilder extends PostgrestQueryBuilder { ) { super(url, { headers, schema }) - this._subscription = new SupabaseRealtimeClient(realtime, schema, table) + this._subscription = new SupabaseRealtimeClient(realtime, headers, schema, table) this._realtime = realtime } diff --git a/src/lib/SupabaseRealtimeClient.ts b/src/lib/SupabaseRealtimeClient.ts index 05ed3b87..9a9a4d16 100644 --- a/src/lib/SupabaseRealtimeClient.ts +++ b/src/lib/SupabaseRealtimeClient.ts @@ -4,9 +4,21 @@ import { SupabaseEventTypes, SupabaseRealtimePayload } from './types' export class SupabaseRealtimeClient { subscription: RealtimeSubscription - constructor(socket: RealtimeClient, schema: string, tableName: string) { + constructor( + socket: RealtimeClient, + headers: { [key: string]: string }, + schema: string, + tableName: string + ) { + const chanParams: { [key: string]: string } = {} const topic = tableName === '*' ? `realtime:${schema}` : `realtime:${schema}:${tableName}` - this.subscription = socket.channel(topic) + const userToken = headers['Authorization'].split(' ')[1] + + if (userToken) { + chanParams['user_token'] = userToken + } + + this.subscription = socket.channel(topic, chanParams) } private getPayloadRecords(payload: any) {