Skip to content

Commit d6611d5

Browse files
committed
fix: added null safety checks for message.data
1 parent a9c3f60 commit d6611d5

File tree

5 files changed

+12
-5
lines changed

5 files changed

+12
-5
lines changed

templates/android/library/src/main/java/io/package/services/Realtime.kt.twig

+2-1
Original file line numberDiff line numberDiff line change
@@ -174,7 +174,8 @@ class Realtime(client: Client) : Service(client), CoroutineScope {
174174
val message = text.fromJson<RealtimeResponse>()
175175
when (message.type) {
176176
TYPE_ERROR -> handleResponseError(message)
177-
TYPE_EVENT -> handleResponseEvent(message)
177+
TYPE_EVENT -> message.data?.let {handleResponseEvent(message)}
178+
TYPE_PONG -> {}
178179
}
179180
}
180181
}

templates/flutter/lib/src/realtime_response.dart.twig

+2-2
Original file line numberDiff line numberDiff line change
@@ -29,8 +29,8 @@ class RealtimeResponse {
2929

3030
factory RealtimeResponse.fromMap(Map<String, dynamic> map) {
3131
return RealtimeResponse(
32-
type: map['type'],
33-
data: Map<String, dynamic>.from(map['data']),
32+
type: map['type'] ?? '',
33+
data: (map.containsKey('data')) ? Map<String, dynamic>.from(map['data']) : {},
3434
);
3535
}
3636

templates/react-native/src/client.ts.twig

+4-1
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ type Headers = {
1111
}
1212

1313
type RealtimeResponse = {
14-
type: 'error' | 'event' | 'connected' | 'response';
14+
type: 'error' | 'event' | 'connected' | 'response' | 'pong';
1515
data: RealtimeResponseAuthenticated | RealtimeResponseConnected | RealtimeResponseError | RealtimeResponseEvent<unknown>;
1616
}
1717

@@ -290,6 +290,7 @@ class Client {
290290
this.realtime.lastMessage = message;
291291
switch (message.type) {
292292
case 'event':
293+
if(!message.data) return;
293294
let data = <RealtimeResponseEvent<unknown>>message.data;
294295
if (data?.channels) {
295296
const isSubscribed = data.channels.some(channel => this.realtime.channels.has(channel));
@@ -301,6 +302,8 @@ class Client {
301302
})
302303
}
303304
break;
305+
case 'pong':
306+
break; // Handle pong response if needed
304307
case 'error':
305308
throw message.data;
306309
default:

templates/swift/Sources/Services/Realtime.swift.twig

+1-1
Original file line numberDiff line numberDiff line change
@@ -200,7 +200,7 @@ extension Realtime: WebSocketClientDelegate {
200200
if let type = json["type"] as? String {
201201
switch type {
202202
case TYPE_ERROR: try! handleResponseError(from: json)
203-
case TYPE_EVENT: handleResponseEvent(from: json)
203+
case TYPE_EVENT: if json["data"] != nil {handleResponseEvent(from: json)}
204204
case TYPE_PONG: break // Handle pong response if needed
205205
default: break
206206
}

templates/web/src/client.ts.twig

+3
Original file line numberDiff line numberDiff line change
@@ -485,6 +485,7 @@ class Client {
485485
}
486486
break;
487487
case 'event':
488+
if (!message.data) return;
488489
let data = <RealtimeResponseEvent<unknown>>message.data;
489490
if (data?.channels) {
490491
const isSubscribed = data.channels.some(channel => this.realtime.channels.has(channel));
@@ -496,6 +497,8 @@ class Client {
496497
})
497498
}
498499
break;
500+
case 'pong':
501+
break; // Handle pong response if needed
499502
case 'error':
500503
throw message.data;
501504
default:

0 commit comments

Comments
 (0)