@@ -21,6 +21,18 @@ export type RealtimeResponseEvent<T = any> = {
2121 payload : T ;
2222}
2323
24+ export type RealtimeResponseConnected = {
25+ channels : string [ ] ;
26+ user ?: object ;
27+ }
28+
29+ export type RealtimeRequest = {
30+ type : 'authentication' ;
31+ data : {
32+ session : string ;
33+ } ;
34+ }
35+
2436export enum RealtimeCode {
2537 NORMAL_CLOSURE = 1000 ,
2638 POLICY_VIOLATION = 1008 ,
@@ -31,6 +43,7 @@ export class Realtime {
3143 private readonly TYPE_ERROR = 'error' ;
3244 private readonly TYPE_EVENT = 'event' ;
3345 private readonly TYPE_PONG = 'pong' ;
46+ private readonly TYPE_CONNECTED = 'connected' ;
3447 private readonly DEBOUNCE_MS = 1 ;
3548 private readonly HEARTBEAT_INTERVAL = 20000 ; // 20 seconds in milliseconds
3649
@@ -332,6 +345,9 @@ export class Realtime {
332345 }
333346
334347 switch ( message . type ) {
348+ case this . TYPE_CONNECTED :
349+ this . handleResponseConnected ( message ) ;
350+ break ;
335351 case this . TYPE_ERROR :
336352 this . handleResponseError ( message ) ;
337353 break ;
@@ -344,6 +360,33 @@ export class Realtime {
344360 }
345361 }
346362
363+ private handleResponseConnected ( message : RealtimeResponse ) : void {
364+ if ( ! message . data ) {
365+ return ;
366+ }
367+
368+ const messageData = message . data as RealtimeResponseConnected ;
369+
370+ let session = this . client . config . session ;
371+ if ( ! session ) {
372+ try {
373+ const cookie = JSON . parse ( window . localStorage . getItem ( 'cookieFallback' ) ?? '{}' ) ;
374+ session = cookie ?. [ `a_session_${ this . client . config . project } ` ] ;
375+ } catch ( error ) {
376+ console . error ( 'Failed to parse cookie fallback:' , error ) ;
377+ }
378+ }
379+
380+ if ( session && ! messageData . user ) {
381+ this . socket ?. send ( JSON . stringify ( < RealtimeRequest > {
382+ type : 'authentication' ,
383+ data : {
384+ session
385+ }
386+ } ) ) ;
387+ }
388+ }
389+
347390 private handleResponseError ( message : RealtimeResponse ) : void {
348391 const error = new AppwriteException (
349392 message . data ?. message || 'Unknown error'
0 commit comments