diff --git a/app/src/main/java/com/greenart7c3/nostrsigner/SignerProvider.kt b/app/src/main/java/com/greenart7c3/nostrsigner/SignerProvider.kt index feabed23..74c8cf30 100644 --- a/app/src/main/java/com/greenart7c3/nostrsigner/SignerProvider.kt +++ b/app/src/main/java/com/greenart7c3/nostrsigner/SignerProvider.kt @@ -411,6 +411,12 @@ class SignerProvider : ContentProvider() { "Could not decrypt the message" } + // For v3 the wire payload is Base64; store the readable plaintext. + val historyContent = if (isV3) { + AmberUtils.decodeNip44v3LogContent(if (!isEncrypt) finalResult else content) + } else { + if (!isEncrypt) finalResult else content + } scope.launch { historyDatabase.dao().addHistory( listOf( @@ -421,7 +427,7 @@ class SignerProvider : ContentProvider() { v3Kind, TimeUtils.now(), true, - content = if (!isEncrypt) finalResult else content, + content = historyContent, ), ), account.npub, diff --git a/app/src/main/java/com/greenart7c3/nostrsigner/service/AmberUtils.kt b/app/src/main/java/com/greenart7c3/nostrsigner/service/AmberUtils.kt index 0b8c2a10..29b16842 100644 --- a/app/src/main/java/com/greenart7c3/nostrsigner/service/AmberUtils.kt +++ b/app/src/main/java/com/greenart7c3/nostrsigner/service/AmberUtils.kt @@ -70,6 +70,18 @@ object AmberUtils { } } + /** + * NIP-44 v3 wire payloads are Base64-encoded plaintext bytes. History logs + * should record the readable plaintext, so decode it here; if the bytes + * aren't valid base64/UTF-8 (e.g. binary data) keep the original string. + */ + @OptIn(kotlin.io.encoding.ExperimentalEncodingApi::class) + fun decodeNip44v3LogContent(content: String): String = try { + kotlin.io.encoding.Base64.decode(content).decodeToString(throwOnInvalidSequence = true) + } catch (_: Exception) { + content + } + suspend fun sendBunkerError( account: Account, bunkerRequest: AmberBunkerRequest, diff --git a/app/src/main/java/com/greenart7c3/nostrsigner/service/BunkerRequestUtils.kt b/app/src/main/java/com/greenart7c3/nostrsigner/service/BunkerRequestUtils.kt index 0ce24c9c..d4f544d2 100644 --- a/app/src/main/java/com/greenart7c3/nostrsigner/service/BunkerRequestUtils.kt +++ b/app/src/main/java/com/greenart7c3/nostrsigner/service/BunkerRequestUtils.kt @@ -432,6 +432,9 @@ object BunkerRequestUtils { SignerType.NIP44_DECRYPT, SignerType.DECRYPT_ZAP_EVENT, -> response + // v3 payloads are Base64; log the readable plaintext. + SignerType.NIP44_V3_DECRYPT -> AmberUtils.decodeNip44v3LogContent(response) + SignerType.NIP44_V3_ENCRYPT -> AmberUtils.decodeNip44v3LogContent(getDataFromBunker(bunkerRequest.request)) else -> getDataFromBunker(bunkerRequest.request) }, ), diff --git a/app/src/main/java/com/greenart7c3/nostrsigner/service/IntentUtils.kt b/app/src/main/java/com/greenart7c3/nostrsigner/service/IntentUtils.kt index 3c44c779..9c392ea9 100644 --- a/app/src/main/java/com/greenart7c3/nostrsigner/service/IntentUtils.kt +++ b/app/src/main/java/com/greenart7c3/nostrsigner/service/IntentUtils.kt @@ -857,6 +857,10 @@ object IntentUtils { SignerType.DECRYPT_ZAP_EVENT, -> value + // v3 payloads are Base64; log the readable plaintext. + SignerType.NIP44_V3_DECRYPT -> AmberUtils.decodeNip44v3LogContent(value) + SignerType.NIP44_V3_ENCRYPT -> AmberUtils.decodeNip44v3LogContent(intentData.data) + else -> intentData.data }, ),