diff --git a/templates/android/library/src/main/java/io/package/models/RealtimeModels.kt.twig b/templates/android/library/src/main/java/io/package/models/RealtimeModels.kt.twig index f131ecd53..3b7fb656a 100644 --- a/templates/android/library/src/main/java/io/package/models/RealtimeModels.kt.twig +++ b/templates/android/library/src/main/java/io/package/models/RealtimeModels.kt.twig @@ -17,7 +17,7 @@ data class RealtimeCallback( open class RealtimeResponse( val type: String, - val data: Any + val data: Any? ) data class RealtimeResponseEvent( diff --git a/templates/android/library/src/main/java/io/package/services/Realtime.kt.twig b/templates/android/library/src/main/java/io/package/services/Realtime.kt.twig index 0c9399bc9..26de08d0e 100644 --- a/templates/android/library/src/main/java/io/package/services/Realtime.kt.twig +++ b/templates/android/library/src/main/java/io/package/services/Realtime.kt.twig @@ -175,16 +175,17 @@ class Realtime(client: Client) : Service(client), CoroutineScope { when (message.type) { TYPE_ERROR -> handleResponseError(message) TYPE_EVENT -> handleResponseEvent(message) + TYPE_PONG -> {} } } } private fun handleResponseError(message: RealtimeResponse) { - throw message.data.jsonCast<{{ spec.title | caseUcfirst }}Exception>() + throw message.data?.jsonCast<{{ spec.title | caseUcfirst }}Exception>() ?: RuntimeException("Data is not present") } private suspend fun handleResponseEvent(message: RealtimeResponse) { - val event = message.data.jsonCast>() + val event = message.data?.jsonCast>() ?: return if (event.channels.isEmpty()) { return } diff --git a/templates/flutter/lib/src/realtime_response.dart.twig b/templates/flutter/lib/src/realtime_response.dart.twig index f09da8da3..56e7669ac 100644 --- a/templates/flutter/lib/src/realtime_response.dart.twig +++ b/templates/flutter/lib/src/realtime_response.dart.twig @@ -30,7 +30,7 @@ class RealtimeResponse { factory RealtimeResponse.fromMap(Map map) { return RealtimeResponse( type: map['type'], - data: Map.from(map['data']), + data: Map.from(map['data'] ?? {}), ); } diff --git a/templates/react-native/src/client.ts.twig b/templates/react-native/src/client.ts.twig index 392324a2b..b8db9546a 100644 --- a/templates/react-native/src/client.ts.twig +++ b/templates/react-native/src/client.ts.twig @@ -11,8 +11,8 @@ type Headers = { } type RealtimeResponse = { - type: 'error' | 'event' | 'connected' | 'response'; - data: RealtimeResponseAuthenticated | RealtimeResponseConnected | RealtimeResponseError | RealtimeResponseEvent; + type: 'error' | 'event' | 'connected' | 'response' | 'pong'; + data: RealtimeResponseAuthenticated | RealtimeResponseConnected | RealtimeResponseError | RealtimeResponseEvent | undefined; } type RealtimeRequest = { @@ -301,6 +301,8 @@ class Client { }) } break; + case 'pong': + break; // Handle pong response if needed case 'error': throw message.data; default: diff --git a/templates/web/src/client.ts.twig b/templates/web/src/client.ts.twig index 0e0035149..e5617851c 100644 --- a/templates/web/src/client.ts.twig +++ b/templates/web/src/client.ts.twig @@ -19,14 +19,14 @@ type Headers = { */ type RealtimeResponse = { /** - * Type of the response: 'error', 'event', 'connected', 'pong', or 'response'. + * Type of the response: 'error', 'event', 'connected', 'response' or 'pong'. */ type: 'error' | 'event' | 'connected' | 'response' | 'pong'; /** * Data associated with the response based on the response type. */ - data: RealtimeResponseAuthenticated | RealtimeResponseConnected | RealtimeResponseError | RealtimeResponseEvent; + data: RealtimeResponseAuthenticated | RealtimeResponseConnected | RealtimeResponseError | RealtimeResponseEvent | undefined; } /** @@ -496,6 +496,8 @@ class Client { }) } break; + case 'pong': + break; // Handle pong response if needed case 'error': throw message.data; default: