From 38ba456a223a5197caae1b78b561f91c9d53281f Mon Sep 17 00:00:00 2001 From: Vitor Pamplona Date: Tue, 23 Jul 2024 10:15:36 -0400 Subject: [PATCH] Signs for just one auth event to register with the push notification service instead of the dozens of events, one per relay. --- .../vitorpamplona/amethyst/model/Account.kt | 10 ++++++++++ .../service/notifications/RegisterAccounts.kt | 16 ++++++++++------ .../quartz/events/RelayAuthEvent.kt | 18 ++++++++++++++++++ 3 files changed, 38 insertions(+), 6 deletions(-) diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/model/Account.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/model/Account.kt index 4920473c4..0a88c7358 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/model/Account.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/model/Account.kt @@ -2358,6 +2358,16 @@ class Account( RelayAuthEvent.create(relayUrl, challenge, signer, onReady = onReady) } + fun createAuthEvent( + relayUrls: List, + challenge: String, + onReady: (RelayAuthEvent) -> Unit, + ) { + if (!isWriteable()) return + + RelayAuthEvent.create(relayUrls, challenge, signer, onReady = onReady) + } + fun isInPrivateBookmarks( note: Note, onReady: (Boolean) -> Unit, diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/service/notifications/RegisterAccounts.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/service/notifications/RegisterAccounts.kt index dc6b7b90c..a9d7a5954 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/service/notifications/RegisterAccounts.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/service/notifications/RegisterAccounts.kt @@ -55,7 +55,7 @@ class RegisterAccounts( private suspend fun signAllAuths( notificationToken: String, - remainingTos: List>, + remainingTos: List>>, output: MutableList, onReady: (List) -> Unit, ) { @@ -100,7 +100,7 @@ class RegisterAccounts( ) { val readyToSend = accounts - .map { + .mapNotNull { Log.d(tag, "Register Account ${it.npub}") val acc = LocalPreferences.loadCurrentAccountFromEncryptedStorage(it.npub) @@ -131,13 +131,17 @@ class RegisterAccounts( Log.d(tag, "Register Account ${acc.userProfile().toBestDisplayName()} Kind3 Reads ${readKind3Relays.joinToString(", ")}") - (nip65Read + nip17Read + readKind3Relays).map { - Pair(acc, it) + val relays = (nip65Read + nip17Read + readKind3Relays) + + if (relays.isNotEmpty()) { + Pair(acc, relays) + } else { + null } } else { - emptyList>() + null } - }.flatten() + } val listOfAuthEvents = mutableListOf() signAllAuths( diff --git a/quartz/src/main/java/com/vitorpamplona/quartz/events/RelayAuthEvent.kt b/quartz/src/main/java/com/vitorpamplona/quartz/events/RelayAuthEvent.kt index 8520d2fbf..15f40f0da 100644 --- a/quartz/src/main/java/com/vitorpamplona/quartz/events/RelayAuthEvent.kt +++ b/quartz/src/main/java/com/vitorpamplona/quartz/events/RelayAuthEvent.kt @@ -56,5 +56,23 @@ class RelayAuthEvent( ) signer.sign(createdAt, KIND, tags, content, onReady) } + + fun create( + relays: List, + challenge: String, + signer: NostrSigner, + createdAt: Long = TimeUtils.now(), + onReady: (RelayAuthEvent) -> Unit, + ) { + val content = "" + val tags = + relays + .map { + arrayOf("relay", it) + }.plusElement( + arrayOf("challenge", challenge), + ).toTypedArray() + signer.sign(createdAt, KIND, tags, content, onReady) + } } }