mirror of
https://github.com/InsanusMokrassar/TelegramBotAPI.git
synced 2024-12-22 16:47:13 +00:00
update support of BiometricManager
This commit is contained in:
parent
28e031265c
commit
db644c93ff
@ -1,6 +1,7 @@
|
|||||||
package dev.inmo.tgbotapi.webapps
|
package dev.inmo.tgbotapi.webapps
|
||||||
|
|
||||||
import dev.inmo.tgbotapi.utils.TelegramAPIUrlsKeeper
|
import dev.inmo.tgbotapi.utils.TelegramAPIUrlsKeeper
|
||||||
|
import dev.inmo.tgbotapi.webapps.biometric.BiometricManager
|
||||||
import dev.inmo.tgbotapi.webapps.cloud.CloudStorage
|
import dev.inmo.tgbotapi.webapps.cloud.CloudStorage
|
||||||
import dev.inmo.tgbotapi.webapps.haptic.HapticFeedback
|
import dev.inmo.tgbotapi.webapps.haptic.HapticFeedback
|
||||||
import dev.inmo.tgbotapi.webapps.invoice.InvoiceClosedInfo
|
import dev.inmo.tgbotapi.webapps.invoice.InvoiceClosedInfo
|
||||||
@ -54,6 +55,9 @@ external class WebApp {
|
|||||||
@JsName("CloudStorage")
|
@JsName("CloudStorage")
|
||||||
val cloudStorage: CloudStorage
|
val cloudStorage: CloudStorage
|
||||||
|
|
||||||
|
@JsName("BiometricManager")
|
||||||
|
val biometricManager: BiometricManager
|
||||||
|
|
||||||
@JsName("SettingsButton")
|
@JsName("SettingsButton")
|
||||||
val settingsButton: SettingsButton
|
val settingsButton: SettingsButton
|
||||||
|
|
||||||
|
@ -0,0 +1,15 @@
|
|||||||
|
package dev.inmo.tgbotapi.webapps.biometric
|
||||||
|
|
||||||
|
import kotlinx.serialization.json.JsonPrimitive
|
||||||
|
import kotlinx.serialization.json.buildJsonObject
|
||||||
|
import kotlin.js.json
|
||||||
|
|
||||||
|
external interface BiometricAuthenticateParams {
|
||||||
|
val reason: String?
|
||||||
|
}
|
||||||
|
|
||||||
|
fun BiometricAuthenticateParams(
|
||||||
|
reason: String? = null
|
||||||
|
) = buildJsonObject {
|
||||||
|
reason ?.let { put("reason", JsonPrimitive(it)) }
|
||||||
|
}.unsafeCast<BiometricAuthenticateParams>()
|
@ -0,0 +1,51 @@
|
|||||||
|
package dev.inmo.tgbotapi.webapps.biometric
|
||||||
|
|
||||||
|
import kotlinx.coroutines.CompletableDeferred
|
||||||
|
|
||||||
|
external interface BiometricManager {
|
||||||
|
val isInited: Boolean
|
||||||
|
val isBiometricAvailable: Boolean
|
||||||
|
val isAccessRequested: Boolean
|
||||||
|
val isAccessGranted: Boolean
|
||||||
|
val isBiometricTokenSaved: Boolean
|
||||||
|
val deviceId: DeviceId?
|
||||||
|
val biometricType: BiometricType
|
||||||
|
|
||||||
|
fun init(callback: (() -> Unit) = definedExternally): BiometricManager
|
||||||
|
fun requestAccess(params: BiometricRequestAccessParams, callback: ((Boolean) -> Unit) = definedExternally): BiometricManager
|
||||||
|
fun authenticate(params: BiometricAuthenticateParams, callback: ((Boolean, String?) -> Unit) = definedExternally): BiometricManager
|
||||||
|
fun updateBiometricToken(token: String, callback: ((Boolean) -> Unit) = definedExternally): BiometricManager
|
||||||
|
fun openSettings(): BiometricManager
|
||||||
|
}
|
||||||
|
|
||||||
|
private suspend inline fun <T> doWithAsyncJob(
|
||||||
|
action: (CompletableDeferred<T>) -> BiometricManager
|
||||||
|
): T {
|
||||||
|
val async = CompletableDeferred<T>()
|
||||||
|
action(async)
|
||||||
|
return async.await()
|
||||||
|
}
|
||||||
|
|
||||||
|
suspend fun BiometricManager.initSuspend() = doWithAsyncJob {
|
||||||
|
init {
|
||||||
|
it.complete(Unit)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
suspend fun BiometricManager.requestAccessSuspend(params: BiometricRequestAccessParams) = doWithAsyncJob {
|
||||||
|
requestAccess(params) { success ->
|
||||||
|
it.complete(success)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
suspend fun BiometricManager.authenticateSuspend(params: BiometricAuthenticateParams) = doWithAsyncJob {
|
||||||
|
authenticate(params) { _, token ->
|
||||||
|
it.complete(token)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
suspend fun BiometricManager.updateBiometricTokenSuspend(token: String) = doWithAsyncJob {
|
||||||
|
updateBiometricToken(token) { success ->
|
||||||
|
it.complete(success)
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,15 @@
|
|||||||
|
package dev.inmo.tgbotapi.webapps.biometric
|
||||||
|
|
||||||
|
import kotlinx.serialization.json.JsonPrimitive
|
||||||
|
import kotlinx.serialization.json.buildJsonObject
|
||||||
|
import kotlin.js.json
|
||||||
|
|
||||||
|
external interface BiometricRequestAccessParams {
|
||||||
|
val reason: String?
|
||||||
|
}
|
||||||
|
|
||||||
|
fun BiometricRequestAccessParams(
|
||||||
|
reason: String? = null
|
||||||
|
) = buildJsonObject {
|
||||||
|
reason ?.let { put("reason", JsonPrimitive(it)) }
|
||||||
|
}.unsafeCast<BiometricRequestAccessParams>()
|
@ -0,0 +1,21 @@
|
|||||||
|
package dev.inmo.tgbotapi.webapps.biometric
|
||||||
|
|
||||||
|
import kotlinx.serialization.Serializable
|
||||||
|
|
||||||
|
@Serializable
|
||||||
|
value class BiometricType(
|
||||||
|
val title: String
|
||||||
|
) {
|
||||||
|
val isFinger: Boolean
|
||||||
|
get() = title == FingerTypeTitle
|
||||||
|
val isFace: Boolean
|
||||||
|
get() = title == FaceTypeTitle
|
||||||
|
val isUnknown: Boolean
|
||||||
|
get() = title == UnknownTypeTitle
|
||||||
|
|
||||||
|
companion object {
|
||||||
|
const val FingerTypeTitle = "finger"
|
||||||
|
const val FaceTypeTitle = "face"
|
||||||
|
const val UnknownTypeTitle = "unknown"
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,8 @@
|
|||||||
|
package dev.inmo.tgbotapi.webapps.biometric
|
||||||
|
|
||||||
|
import kotlinx.serialization.Serializable
|
||||||
|
|
||||||
|
@Serializable
|
||||||
|
value class DeviceId(
|
||||||
|
val string: String
|
||||||
|
)
|
Loading…
Reference in New Issue
Block a user