@@ -3,41 +3,69 @@ package com.getcode.network.appcheck
33import com.codeinc.gen.common.v1.Model
44import com.google.firebase.Firebase
55import com.google.firebase.appcheck.AppCheckToken
6+ import com.google.firebase.appcheck.AppCheckTokenResult
67import com.google.firebase.appcheck.appCheck
78import io.reactivex.rxjava3.core.BackpressureStrategy
89import io.reactivex.rxjava3.core.Flowable
910import io.reactivex.rxjava3.core.Single
1011import kotlinx.coroutines.flow.Flow
1112import kotlinx.coroutines.reactive.asFlow
13+ import timber.log.Timber
14+
15+ data class DeviceTokenResult (
16+ val token : AppCheckToken ?
17+ )
1218
1319object AppCheck {
1420
1521 @Deprecated(" Replace with Flow variant" )
16- fun limitedUseTokenSingle (): Single <AppCheckToken > {
22+ fun limitedUseTokenSingle (): Single <DeviceTokenResult > {
1723 return Single .create { emitter ->
1824 Firebase .appCheck.limitedUseAppCheckToken
19- .addOnSuccessListener { emitter.onSuccess(it) }
20- .addOnFailureListener { emitter.onError(it) }
25+ .addOnSuccessListener { emitter.onSuccess(DeviceTokenResult (it)) }
26+ .addOnFailureListener { error ->
27+ val match = " code: \\ d+" .toRegex().find(error.message.orEmpty())
28+ val errorCode = match?.value?.removePrefix(" code: " )?.toInt() ? : - 1
29+ Timber .e(" Failed to get appcheck token: errorCode=$errorCode ${error.message} " )
30+
31+ if (errorCode >= 500 ) {
32+ emitter.onError(error)
33+ return @addOnFailureListener
34+ }
35+
36+ emitter.onSuccess(DeviceTokenResult (null ))
37+ }
2138 }
2239 }
2340
2441 @Deprecated(" Replace with Flow variant" )
2542 fun limitedUseTokenFlowable (
2643 backpressureStrategy : BackpressureStrategy = BackpressureStrategy .BUFFER
27- ): Flowable <AppCheckToken > {
44+ ): Flowable <DeviceTokenResult > {
2845 return Flowable .create({ emitter ->
2946 Firebase .appCheck.limitedUseAppCheckToken
30- .addOnSuccessListener { emitter.onNext(it) }
31- .addOnFailureListener { emitter.onError(it) }
47+ .addOnSuccessListener { emitter.onNext(DeviceTokenResult (it)) }
48+ .addOnFailureListener { error ->
49+ val match = " code: \\ d+" .toRegex().find(error.message.orEmpty())
50+ val errorCode = match?.value?.removePrefix(" code: " )?.toInt() ? : - 1
51+ Timber .e(" Failed to get appcheck token: errorCode=$errorCode ${error.message} " )
52+
53+ if (errorCode >= 500 ) {
54+ emitter.onError(error)
55+ return @addOnFailureListener
56+ }
57+
58+ emitter.onNext(DeviceTokenResult (null ))
59+ }
3260 }, backpressureStrategy)
3361 }
3462
3563 fun limitedUseToken (
3664 backpressureStrategy : BackpressureStrategy = BackpressureStrategy .BUFFER
37- ): Flow <AppCheckToken > {
65+ ): Flow <DeviceTokenResult > {
3866 return limitedUseTokenFlowable(backpressureStrategy).asFlow()
3967 }
4068}
4169
42- fun AppCheckToken.toDeviceToken () = Model .DeviceToken .newBuilder().setValue(token).build()
70+ fun AppCheckToken.toDeviceToken () = Model .DeviceToken .newBuilder().setValue(this . token).build()
4371fun String.toDeviceToken () = Model .DeviceToken .newBuilder().setValue(this ).build()
0 commit comments