feat: Add support for NIP-55 #18

Merged
reya merged 5 commits from nip55 into master 2026-06-09 07:53:49 +00:00
3 changed files with 21 additions and 29 deletions
Showing only changes of commit eadf49b39d - Show all commits

View File

@@ -56,6 +56,8 @@ class AndroidExternalSigner(
payload: String,
pubkey: PublicKey? = null,
currentUser: PublicKey? = null,
resultKey: String = "result",
extras: Map<String, String> = emptyMap(),
): String? {
// Try Content Resolver first
queryContentResolver(type, payload, pubkey, currentUser)?.let {
@@ -68,6 +70,7 @@ class AndroidExternalSigner(
putExtra("type", type)
if (pubkey != null) putExtra("pubkey", pubkey.toHex())
if (currentUser != null) putExtra("current_user", currentUser.toHex())
extras.forEach { (k, v) -> putExtra(k, v) }
}
val result = launcher.launch(intent)
@@ -76,7 +79,7 @@ class AndroidExternalSigner(
val data = result.data ?: return null
if (data.getBooleanExtra("rejected", false)) return null
return data.getStringExtra("result")
return data.getStringExtra(resultKey)
}
override fun isAvailable(): Boolean {
@@ -108,31 +111,14 @@ class AndroidExternalSigner(
}
override suspend fun signEvent(event: UnsignedEvent, currentUser: PublicKey): String? {
// Try Content Resolver first
queryContentResolver(
"SIGN_EVENT",
event.asJson(),
null,
currentUser
)?.let { result ->
if (result.event != null) return result.event
}
// Fall back to Intent
val intent = Intent(Intent.ACTION_VIEW, "nostrsigner:${event.asJson()}".toUri()).apply {
`package` = cachedPackageName
putExtra("type", "sign_event")
putExtra("current_user", currentUser.toHex())
if (event.id() != null) putExtra("id", event.id()!!.toHex())
}
val result = launcher.launch(intent)
if (result.resultCode != Activity.RESULT_OK) return null
val data = result.data ?: return null
if (data.getBooleanExtra("rejected", false)) return null
return data.getStringExtra("event")
val extras = event.id()?.let { mapOf("id" to it.toHex()) } ?: emptyMap()
return request(
type = "sign_event",
payload = event.asJson(),
currentUser = currentUser,
resultKey = "event",
extras = extras,
)
}
override suspend fun nip04Encrypt(plaintext: String, pubkey: PublicKey): String? {

View File

@@ -62,6 +62,7 @@ fun OnboardingScreen() {
val logoPainter = painterResource(Res.drawable.coop)
val expressiveFont = getExpressiveFontFamily()
val annotatedText = buildAnnotatedString {
append("By using Coop, you agree to accept\nour ")
// Push "Terms of Use" link

View File

@@ -508,9 +508,14 @@ class NostrViewModel(
try {
val permissions = SignerPermissions.toJson(
listOf(
SignerPermissions.signEvent(),
SignerPermissions.nip04Encrypt(),
SignerPermissions.nip04Decrypt(),
SignerPermissions.signEvent(0),
SignerPermissions.signEvent(3),
SignerPermissions.signEvent(10000),
SignerPermissions.signEvent(10050),
SignerPermissions.signEvent(10063),
SignerPermissions.signEvent(22242),
SignerPermissions.signEvent(30030),
SignerPermissions.signEvent(30315),
SignerPermissions.nip44Encrypt(),
SignerPermissions.nip44Decrypt(),
)