11package com.sensitiveinfo
22
3+ import androidx.annotation.Keep
4+ import com.facebook.proguard.annotations.DoNotStrip
5+
36import android.content.Context
47import com.margelo.nitro.core.Promise
58import com.margelo.nitro.sensitiveinfo.*
@@ -24,6 +27,8 @@ import kotlin.jvm.Volatile
2427 * This class provides secure storage for sensitive data on Android using the Android Keystore
2528 * for key management and SharedPreferences for encrypted data persistence.
2629 */
30+ @DoNotStrip
31+ @Keep
2732class HybridSensitiveInfo : HybridSensitiveInfoSpec () {
2833 private data class Dependencies (
2934 val context : Context ,
@@ -98,14 +103,33 @@ class HybridSensitiveInfo : HybridSensitiveInfoSpec() {
98103 }
99104 }
100105
101- override fun getItem (request : SensitiveInfoGetRequest ): Promise <SensitiveInfoItem ? > {
106+ override fun getItem (request : SensitiveInfoGetRequest ): Promise <Variant_NullType_SensitiveInfoItem > {
102107 return Promise .async(coroutineScope) {
103108 val deps = ensureInitialized()
104109 val service = deps.serviceNameResolver.resolve(request.service)
105110
106111 val entry = deps.storage.read(service, request.key)
112+
107113 if (entry == null ) {
108- return @async null
114+ try {
115+ val ctor = com.margelo.nitro.core.NullType ::class .java.getDeclaredConstructor()
116+ ctor.isAccessible = true
117+ val nullTypeInstance = ctor.newInstance()
118+ return @async Variant_NullType_SensitiveInfoItem .create(nullTypeInstance)
119+ } catch (e: Throwable ) {
120+ // Fallback: create a null-type via unsafe camino — return a Second with empty SensitiveInfoItem omitted
121+ return @async Variant_NullType_SensitiveInfoItem .create(com.margelo.nitro.sensitiveinfo.SensitiveInfoItem (
122+ key = request.key,
123+ service = service,
124+ value = null ,
125+ metadata = StorageMetadata (
126+ securityLevel = SecurityLevel .SOFTWARE ,
127+ backend = StorageBackend .ANDROIDKEYSTORE ,
128+ accessControl = AccessControl .NONE ,
129+ timestamp = System .currentTimeMillis() / 1000.0
130+ )
131+ ))
132+ }
109133 }
110134
111135 val metadata = entry.metadata.toStorageMetadata()
@@ -131,15 +155,17 @@ class HybridSensitiveInfo : HybridSensitiveInfoSpec() {
131155 null
132156 }
133157
134- SensitiveInfoItem (
135- key = request.key,
136- service = service,
137- value = value,
138- metadata = metadata ? : StorageMetadata (
139- securityLevel = SecurityLevel .SOFTWARE ,
140- backend = StorageBackend .ANDROIDKEYSTORE ,
141- accessControl = AccessControl .NONE ,
142- timestamp = System .currentTimeMillis() / 1000.0
158+ Variant_NullType_SensitiveInfoItem .create(
159+ SensitiveInfoItem (
160+ key = request.key,
161+ service = service,
162+ value = value,
163+ metadata = metadata ? : StorageMetadata (
164+ securityLevel = SecurityLevel .SOFTWARE ,
165+ backend = StorageBackend .ANDROIDKEYSTORE ,
166+ accessControl = AccessControl .NONE ,
167+ timestamp = System .currentTimeMillis() / 1000.0
168+ )
143169 )
144170 )
145171 }
0 commit comments