feat: Add support for NIP-55 #18
@@ -56,6 +56,8 @@ class AndroidExternalSigner(
|
|||||||
payload: String,
|
payload: String,
|
||||||
pubkey: PublicKey? = null,
|
pubkey: PublicKey? = null,
|
||||||
currentUser: PublicKey? = null,
|
currentUser: PublicKey? = null,
|
||||||
|
resultKey: String = "result",
|
||||||
|
extras: Map<String, String> = emptyMap(),
|
||||||
): String? {
|
): String? {
|
||||||
// Try Content Resolver first
|
// Try Content Resolver first
|
||||||
queryContentResolver(type, payload, pubkey, currentUser)?.let {
|
queryContentResolver(type, payload, pubkey, currentUser)?.let {
|
||||||
@@ -68,6 +70,7 @@ class AndroidExternalSigner(
|
|||||||
putExtra("type", type)
|
putExtra("type", type)
|
||||||
if (pubkey != null) putExtra("pubkey", pubkey.toHex())
|
if (pubkey != null) putExtra("pubkey", pubkey.toHex())
|
||||||
if (currentUser != null) putExtra("current_user", currentUser.toHex())
|
if (currentUser != null) putExtra("current_user", currentUser.toHex())
|
||||||
|
extras.forEach { (k, v) -> putExtra(k, v) }
|
||||||
}
|
}
|
||||||
|
|
||||||
val result = launcher.launch(intent)
|
val result = launcher.launch(intent)
|
||||||
@@ -76,7 +79,7 @@ class AndroidExternalSigner(
|
|||||||
val data = result.data ?: return null
|
val data = result.data ?: return null
|
||||||
if (data.getBooleanExtra("rejected", false)) return null
|
if (data.getBooleanExtra("rejected", false)) return null
|
||||||
|
|
||||||
return data.getStringExtra("result")
|
return data.getStringExtra(resultKey)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun isAvailable(): Boolean {
|
override fun isAvailable(): Boolean {
|
||||||
@@ -108,31 +111,14 @@ class AndroidExternalSigner(
|
|||||||
}
|
}
|
||||||
|
|
||||||
override suspend fun signEvent(event: UnsignedEvent, currentUser: PublicKey): String? {
|
override suspend fun signEvent(event: UnsignedEvent, currentUser: PublicKey): String? {
|
||||||
// Try Content Resolver first
|
val extras = event.id()?.let { mapOf("id" to it.toHex()) } ?: emptyMap()
|
||||||
queryContentResolver(
|
return request(
|
||||||
"SIGN_EVENT",
|
type = "sign_event",
|
||||||
event.asJson(),
|
payload = event.asJson(),
|
||||||
null,
|
currentUser = currentUser,
|
||||||
currentUser
|
resultKey = "event",
|
||||||
)?.let { result ->
|
extras = extras,
|
||||||
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")
|
|
||||||
}
|
}
|
||||||
|
|
||||||
override suspend fun nip04Encrypt(plaintext: String, pubkey: PublicKey): String? {
|
override suspend fun nip04Encrypt(plaintext: String, pubkey: PublicKey): String? {
|
||||||
|
|||||||
@@ -62,6 +62,7 @@ fun OnboardingScreen() {
|
|||||||
|
|
||||||
val logoPainter = painterResource(Res.drawable.coop)
|
val logoPainter = painterResource(Res.drawable.coop)
|
||||||
val expressiveFont = getExpressiveFontFamily()
|
val expressiveFont = getExpressiveFontFamily()
|
||||||
|
|
||||||
val annotatedText = buildAnnotatedString {
|
val annotatedText = buildAnnotatedString {
|
||||||
append("By using Coop, you agree to accept\nour ")
|
append("By using Coop, you agree to accept\nour ")
|
||||||
// Push "Terms of Use" link
|
// Push "Terms of Use" link
|
||||||
|
|||||||
@@ -508,9 +508,14 @@ class NostrViewModel(
|
|||||||
try {
|
try {
|
||||||
val permissions = SignerPermissions.toJson(
|
val permissions = SignerPermissions.toJson(
|
||||||
listOf(
|
listOf(
|
||||||
SignerPermissions.signEvent(),
|
SignerPermissions.signEvent(0),
|
||||||
SignerPermissions.nip04Encrypt(),
|
SignerPermissions.signEvent(3),
|
||||||
SignerPermissions.nip04Decrypt(),
|
SignerPermissions.signEvent(10000),
|
||||||
|
SignerPermissions.signEvent(10050),
|
||||||
|
SignerPermissions.signEvent(10063),
|
||||||
|
SignerPermissions.signEvent(22242),
|
||||||
|
SignerPermissions.signEvent(30030),
|
||||||
|
SignerPermissions.signEvent(30315),
|
||||||
SignerPermissions.nip44Encrypt(),
|
SignerPermissions.nip44Encrypt(),
|
||||||
SignerPermissions.nip44Decrypt(),
|
SignerPermissions.nip44Decrypt(),
|
||||||
)
|
)
|
||||||
|
|||||||
Reference in New Issue
Block a user