Reduces the amount of wasted memory by using Array<Array<List>> as opposed to List<List<String>> for tags.
This commit is contained in:
@@ -13,7 +13,7 @@ class AdvertisedRelayListEvent(
|
||||
id: HexKey,
|
||||
pubKey: HexKey,
|
||||
createdAt: Long,
|
||||
tags: List<List<String>>,
|
||||
tags: Array<Array<String>>,
|
||||
content: String,
|
||||
sig: HexKey
|
||||
) : BaseAddressableEvent(id, pubKey, createdAt, kind, tags, content, sig) {
|
||||
@@ -47,11 +47,11 @@ class AdvertisedRelayListEvent(
|
||||
) {
|
||||
val tags = list.map {
|
||||
if (it.type == AdvertisedRelayType.BOTH) {
|
||||
listOf(it.relayUrl)
|
||||
arrayOf(it.relayUrl)
|
||||
} else {
|
||||
listOf(it.relayUrl, it.type.code)
|
||||
arrayOf(it.relayUrl, it.type.code)
|
||||
}
|
||||
}
|
||||
}.toTypedArray()
|
||||
val msg = ""
|
||||
|
||||
signer.sign(createdAt, kind, tags, msg, onReady)
|
||||
|
||||
@@ -13,7 +13,7 @@ class AppDefinitionEvent(
|
||||
id: HexKey,
|
||||
pubKey: HexKey,
|
||||
createdAt: Long,
|
||||
tags: List<List<String>>,
|
||||
tags: Array<Array<String>>,
|
||||
content: String,
|
||||
sig: HexKey
|
||||
) : BaseAddressableEvent(id, pubKey, createdAt, kind, tags, content, sig) {
|
||||
@@ -54,7 +54,7 @@ class AppDefinitionEvent(
|
||||
createdAt: Long = TimeUtils.now(),
|
||||
onReady: (AppDefinitionEvent) -> Unit
|
||||
) {
|
||||
val tags = mutableListOf<List<String>>()
|
||||
val tags = emptyArray<Array<String>>()
|
||||
signer.sign(createdAt, kind, tags, "", onReady)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -11,7 +11,7 @@ class AppRecommendationEvent(
|
||||
id: HexKey,
|
||||
pubKey: HexKey,
|
||||
createdAt: Long,
|
||||
tags: List<List<String>>,
|
||||
tags: Array<Array<String>>,
|
||||
content: String,
|
||||
sig: HexKey
|
||||
) : BaseAddressableEvent(id, pubKey, createdAt, kind, tags, content, sig) {
|
||||
@@ -27,7 +27,7 @@ class AppRecommendationEvent(
|
||||
createdAt: Long = TimeUtils.now(),
|
||||
onReady: (AppRecommendationEvent) -> Unit
|
||||
) {
|
||||
val tags = mutableListOf<List<String>>()
|
||||
val tags = emptyArray<Array<String>>()
|
||||
signer.sign(createdAt, kind, tags, "", onReady)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -11,7 +11,7 @@ class AudioHeaderEvent(
|
||||
id: HexKey,
|
||||
pubKey: HexKey,
|
||||
createdAt: Long,
|
||||
tags: List<List<String>>,
|
||||
tags: Array<Array<String>>,
|
||||
content: String,
|
||||
sig: HexKey
|
||||
) : Event(id, pubKey, createdAt, kind, tags, content, sig) {
|
||||
@@ -29,7 +29,7 @@ class AudioHeaderEvent(
|
||||
private const val STREAM_URL = "stream_url"
|
||||
private const val WAVEFORM = "waveform"
|
||||
|
||||
suspend fun create(
|
||||
fun create(
|
||||
description: String,
|
||||
downloadUrl: String,
|
||||
streamUrl: String? = null,
|
||||
@@ -40,17 +40,17 @@ class AudioHeaderEvent(
|
||||
onReady: (AudioHeaderEvent) -> Unit
|
||||
) {
|
||||
val tags = listOfNotNull(
|
||||
downloadUrl.let { listOf(DOWNLOAD_URL, it) },
|
||||
streamUrl?.let { listOf(STREAM_URL, it) },
|
||||
wavefront?.let { listOf(WAVEFORM, it) },
|
||||
downloadUrl.let { arrayOf(DOWNLOAD_URL, it) },
|
||||
streamUrl?.let { arrayOf(STREAM_URL, it) },
|
||||
wavefront?.let { arrayOf(WAVEFORM, it) },
|
||||
sensitiveContent?.let {
|
||||
if (it) {
|
||||
listOf("content-warning", "")
|
||||
arrayOf("content-warning", "")
|
||||
} else {
|
||||
null
|
||||
}
|
||||
}
|
||||
)
|
||||
).toTypedArray()
|
||||
|
||||
signer.sign(createdAt, kind, tags, description, onReady)
|
||||
}
|
||||
|
||||
@@ -13,7 +13,7 @@ class AudioTrackEvent(
|
||||
id: HexKey,
|
||||
pubKey: HexKey,
|
||||
createdAt: Long,
|
||||
tags: List<List<String>>,
|
||||
tags: Array<Array<String>>,
|
||||
content: String,
|
||||
sig: HexKey
|
||||
) : BaseAddressableEvent(id, pubKey, createdAt, kind, tags, content, sig) {
|
||||
@@ -46,12 +46,12 @@ class AudioTrackEvent(
|
||||
onReady: (AudioTrackEvent) -> Unit
|
||||
) {
|
||||
val tags = listOfNotNull(
|
||||
listOf(MEDIA, media),
|
||||
listOf(TYPE, type),
|
||||
price?.let { listOf(PRICE, it) },
|
||||
cover?.let { listOf(COVER, it) },
|
||||
subject?.let { listOf(SUBJECT, it) }
|
||||
)
|
||||
arrayOf(MEDIA, media),
|
||||
arrayOf(TYPE, type),
|
||||
price?.let { arrayOf(PRICE, it) },
|
||||
cover?.let { arrayOf(COVER, it) },
|
||||
subject?.let { arrayOf(SUBJECT, it) }
|
||||
).toTypedArray()
|
||||
|
||||
signer.sign(createdAt, kind, tags, "", onReady)
|
||||
}
|
||||
|
||||
@@ -8,7 +8,7 @@ class BadgeAwardEvent(
|
||||
id: HexKey,
|
||||
pubKey: HexKey,
|
||||
createdAt: Long,
|
||||
tags: List<List<String>>,
|
||||
tags: Array<Array<String>>,
|
||||
content: String,
|
||||
sig: HexKey
|
||||
) : Event(id, pubKey, createdAt, kind, tags, content, sig) {
|
||||
|
||||
@@ -9,7 +9,7 @@ class BadgeDefinitionEvent(
|
||||
id: HexKey,
|
||||
pubKey: HexKey,
|
||||
createdAt: Long,
|
||||
tags: List<List<String>>,
|
||||
tags: Array<Array<String>>,
|
||||
content: String,
|
||||
sig: HexKey
|
||||
) : BaseAddressableEvent(id, pubKey, createdAt, kind, tags, content, sig) {
|
||||
|
||||
@@ -9,7 +9,7 @@ class BadgeProfilesEvent(
|
||||
id: HexKey,
|
||||
pubKey: HexKey,
|
||||
createdAt: Long,
|
||||
tags: List<List<String>>,
|
||||
tags: Array<Array<String>>,
|
||||
content: String,
|
||||
sig: HexKey
|
||||
) : BaseAddressableEvent(id, pubKey, createdAt, kind, tags, content, sig) {
|
||||
|
||||
@@ -16,7 +16,7 @@ open class BaseTextNoteEvent(
|
||||
pubKey: HexKey,
|
||||
createdAt: Long,
|
||||
kind: Int,
|
||||
tags: List<List<String>>,
|
||||
tags: Array<Array<String>>,
|
||||
content: String,
|
||||
sig: HexKey
|
||||
) : Event(id, pubKey, createdAt, kind, tags, content, sig) {
|
||||
|
||||
@@ -13,7 +13,7 @@ class BookmarkListEvent(
|
||||
id: HexKey,
|
||||
pubKey: HexKey,
|
||||
createdAt: Long,
|
||||
tags: List<List<String>>,
|
||||
tags: Array<Array<String>>,
|
||||
content: String,
|
||||
sig: HexKey
|
||||
) : GeneralListEvent(id, pubKey, createdAt, kind, tags, content, sig) {
|
||||
@@ -49,7 +49,7 @@ class BookmarkListEvent(
|
||||
) {
|
||||
add(
|
||||
earlierVersion,
|
||||
listOf(listOf(tagName, tagValue)),
|
||||
arrayOf(arrayOf(tagName, tagValue)),
|
||||
isPrivate,
|
||||
signer,
|
||||
createdAt,
|
||||
@@ -59,7 +59,7 @@ class BookmarkListEvent(
|
||||
|
||||
fun add(
|
||||
earlierVersion: BookmarkListEvent?,
|
||||
listNewTags: List<List<String>>,
|
||||
listNewTags: Array<Array<String>>,
|
||||
isPrivate: Boolean,
|
||||
signer: NostrSigner,
|
||||
createdAt: Long = TimeUtils.now(),
|
||||
@@ -88,7 +88,7 @@ class BookmarkListEvent(
|
||||
) { encryptedTags ->
|
||||
create(
|
||||
content = encryptedTags,
|
||||
tags = emptyList(),
|
||||
tags = emptyArray(),
|
||||
signer = signer,
|
||||
createdAt = createdAt,
|
||||
onReady = onReady
|
||||
@@ -98,7 +98,7 @@ class BookmarkListEvent(
|
||||
} else {
|
||||
create(
|
||||
content = earlierVersion?.content ?: "",
|
||||
tags = (earlierVersion?.tags ?: emptyList()).plus(listNewTags),
|
||||
tags = (earlierVersion?.tags ?: emptyArray()).plus(listNewTags),
|
||||
signer = signer,
|
||||
createdAt = createdAt,
|
||||
onReady = onReady
|
||||
@@ -136,12 +136,12 @@ class BookmarkListEvent(
|
||||
if (isPrivate) {
|
||||
earlierVersion.privateTagsOrEmpty(signer) { privateTags ->
|
||||
encryptTags(
|
||||
privateTags = privateTags.filter { it.size <= 1 || !(it[0] == tagName && it[1] == tagValue) },
|
||||
privateTags = privateTags.filter { it.size <= 1 || !(it[0] == tagName && it[1] == tagValue) }.toTypedArray(),
|
||||
signer = signer
|
||||
) { encryptedTags ->
|
||||
create(
|
||||
content = encryptedTags,
|
||||
tags = earlierVersion.tags.filter { it.size <= 1 || !(it[0] == tagName && it[1] == tagValue) },
|
||||
tags = earlierVersion.tags.filter { it.size <= 1 || !(it[0] == tagName && it[1] == tagValue) }.toTypedArray(),
|
||||
signer = signer,
|
||||
createdAt = createdAt,
|
||||
onReady = onReady
|
||||
@@ -151,7 +151,7 @@ class BookmarkListEvent(
|
||||
} else {
|
||||
create(
|
||||
content = earlierVersion.content,
|
||||
tags = earlierVersion.tags.filter { it.size <= 1 || !(it[0] == tagName && it[1] == tagValue) },
|
||||
tags = earlierVersion.tags.filter { it.size <= 1 || !(it[0] == tagName && it[1] == tagValue) }.toTypedArray(),
|
||||
signer = signer,
|
||||
createdAt = createdAt,
|
||||
onReady = onReady
|
||||
@@ -161,7 +161,7 @@ class BookmarkListEvent(
|
||||
|
||||
fun create(
|
||||
content: String,
|
||||
tags: List<List<String>>,
|
||||
tags: Array<Array<String>>,
|
||||
signer: NostrSigner,
|
||||
createdAt: Long = TimeUtils.now(),
|
||||
onReady: (BookmarkListEvent) -> Unit
|
||||
@@ -184,21 +184,21 @@ class BookmarkListEvent(
|
||||
createdAt: Long = TimeUtils.now(),
|
||||
onReady: (BookmarkListEvent) -> Unit
|
||||
) {
|
||||
val tags = mutableListOf<List<String>>()
|
||||
tags.add(listOf("d", name))
|
||||
val tags = mutableListOf<Array<String>>()
|
||||
tags.add(arrayOf("d", name))
|
||||
|
||||
events?.forEach {
|
||||
tags.add(listOf("e", it))
|
||||
tags.add(arrayOf("e", it))
|
||||
}
|
||||
users?.forEach {
|
||||
tags.add(listOf("p", it))
|
||||
tags.add(arrayOf("p", it))
|
||||
}
|
||||
addresses?.forEach {
|
||||
tags.add(listOf("a", it.toTag()))
|
||||
tags.add(arrayOf("a", it.toTag()))
|
||||
}
|
||||
|
||||
createPrivateTags(privEvents, privUsers, privAddresses, signer) { content ->
|
||||
signer.sign(createdAt, kind, tags, content, onReady)
|
||||
signer.sign(createdAt, kind, tags.toTypedArray(), content, onReady)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -13,7 +13,7 @@ class CalendarDateSlotEvent(
|
||||
id: HexKey,
|
||||
pubKey: HexKey,
|
||||
createdAt: Long,
|
||||
tags: List<List<String>>,
|
||||
tags: Array<Array<String>>,
|
||||
content: String,
|
||||
sig: HexKey
|
||||
) : BaseAddressableEvent(id, pubKey, createdAt, kind, tags, content, sig) {
|
||||
@@ -33,7 +33,7 @@ class CalendarDateSlotEvent(
|
||||
createdAt: Long = TimeUtils.now(),
|
||||
onReady: (CalendarDateSlotEvent) -> Unit
|
||||
) {
|
||||
val tags = mutableListOf<List<String>>()
|
||||
val tags = emptyArray<Array<String>>()
|
||||
signer.sign(createdAt, kind, tags, "", onReady)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -13,7 +13,7 @@ class CalendarEvent(
|
||||
id: HexKey,
|
||||
pubKey: HexKey,
|
||||
createdAt: Long,
|
||||
tags: List<List<String>>,
|
||||
tags: Array<Array<String>>,
|
||||
content: String,
|
||||
sig: HexKey
|
||||
) : BaseAddressableEvent(id, pubKey, createdAt, kind, tags, content, sig) {
|
||||
@@ -25,7 +25,7 @@ class CalendarEvent(
|
||||
createdAt: Long = TimeUtils.now(),
|
||||
onReady: (CalendarEvent) -> Unit
|
||||
) {
|
||||
val tags = mutableListOf<List<String>>()
|
||||
val tags = emptyArray<Array<String>>()
|
||||
signer.sign(createdAt, kind, tags, "", onReady)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -13,7 +13,7 @@ class CalendarRSVPEvent(
|
||||
id: HexKey,
|
||||
pubKey: HexKey,
|
||||
createdAt: Long,
|
||||
tags: List<List<String>>,
|
||||
tags: Array<Array<String>>,
|
||||
content: String,
|
||||
sig: HexKey
|
||||
) : BaseAddressableEvent(id, pubKey, createdAt, kind, tags, content, sig) {
|
||||
@@ -35,7 +35,7 @@ class CalendarRSVPEvent(
|
||||
createdAt: Long = TimeUtils.now(),
|
||||
onReady: (CalendarRSVPEvent) -> Unit
|
||||
) {
|
||||
val tags = mutableListOf<List<String>>()
|
||||
val tags = emptyArray<Array<String>>()
|
||||
signer.sign(createdAt, kind, tags, "", onReady)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -13,7 +13,7 @@ class CalendarTimeSlotEvent(
|
||||
id: HexKey,
|
||||
pubKey: HexKey,
|
||||
createdAt: Long,
|
||||
tags: List<List<String>>,
|
||||
tags: Array<Array<String>>,
|
||||
content: String,
|
||||
sig: HexKey
|
||||
) : BaseAddressableEvent(id, pubKey, createdAt, kind, tags, content, sig) {
|
||||
@@ -37,7 +37,7 @@ class CalendarTimeSlotEvent(
|
||||
createdAt: Long = TimeUtils.now(),
|
||||
onReady: (CalendarTimeSlotEvent) -> Unit
|
||||
) {
|
||||
val tags = mutableListOf<List<String>>()
|
||||
val tags = emptyArray<Array<String>>()
|
||||
signer.sign(createdAt, kind, tags, "", onReady)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -16,7 +16,7 @@ class ChannelCreateEvent(
|
||||
id: HexKey,
|
||||
pubKey: HexKey,
|
||||
createdAt: Long,
|
||||
tags: List<List<String>>,
|
||||
tags: Array<Array<String>>,
|
||||
content: String,
|
||||
sig: HexKey
|
||||
) : Event(id, pubKey, createdAt, kind, tags, content, sig) {
|
||||
@@ -65,7 +65,7 @@ class ChannelCreateEvent(
|
||||
""
|
||||
}
|
||||
|
||||
signer.sign(createdAt, kind, emptyList(), content, onReady)
|
||||
signer.sign(createdAt, kind, emptyArray(), content, onReady)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -12,7 +12,7 @@ class ChannelHideMessageEvent(
|
||||
id: HexKey,
|
||||
pubKey: HexKey,
|
||||
createdAt: Long,
|
||||
tags: List<List<String>>,
|
||||
tags: Array<Array<String>>,
|
||||
content: String,
|
||||
sig: HexKey
|
||||
) : Event(id, pubKey, createdAt, kind, tags, content, sig), IsInPublicChatChannel {
|
||||
@@ -36,8 +36,8 @@ class ChannelHideMessageEvent(
|
||||
) {
|
||||
val tags =
|
||||
messagesToHide?.map {
|
||||
listOf("e", it)
|
||||
} ?: emptyList()
|
||||
arrayOf("e", it)
|
||||
}?.toTypedArray() ?: emptyArray()
|
||||
|
||||
signer.sign(createdAt, kind, tags, reason, onReady)
|
||||
}
|
||||
|
||||
@@ -2,9 +2,6 @@ package com.vitorpamplona.quartz.events
|
||||
|
||||
import androidx.compose.runtime.Immutable
|
||||
import com.vitorpamplona.quartz.utils.TimeUtils
|
||||
import com.vitorpamplona.quartz.encoders.toHexKey
|
||||
import com.vitorpamplona.quartz.crypto.CryptoUtils
|
||||
import com.vitorpamplona.quartz.crypto.KeyPair
|
||||
import com.vitorpamplona.quartz.encoders.HexKey
|
||||
import com.vitorpamplona.quartz.signers.NostrSigner
|
||||
|
||||
@@ -13,7 +10,7 @@ class ChannelMessageEvent(
|
||||
id: HexKey,
|
||||
pubKey: HexKey,
|
||||
createdAt: Long,
|
||||
tags: List<List<String>>,
|
||||
tags: Array<Array<String>>,
|
||||
content: String,
|
||||
sig: HexKey
|
||||
) : BaseTextNoteEvent(id, pubKey, createdAt, kind, tags, content, sig), IsInPublicChatChannel {
|
||||
@@ -42,30 +39,29 @@ class ChannelMessageEvent(
|
||||
geohash: String? = null,
|
||||
onReady: (ChannelMessageEvent) -> Unit
|
||||
) {
|
||||
val content = message
|
||||
val tags = mutableListOf(
|
||||
listOf("e", channel, "", "root")
|
||||
arrayOf("e", channel, "", "root")
|
||||
)
|
||||
replyTos?.forEach {
|
||||
tags.add(listOf("e", it))
|
||||
tags.add(arrayOf("e", it))
|
||||
}
|
||||
mentions?.forEach {
|
||||
tags.add(listOf("p", it))
|
||||
tags.add(arrayOf("p", it))
|
||||
}
|
||||
zapReceiver?.forEach {
|
||||
tags.add(listOf("zap", it.lnAddressOrPubKeyHex, it.relay ?: "", it.weight.toString()))
|
||||
tags.add(arrayOf("zap", it.lnAddressOrPubKeyHex, it.relay ?: "", it.weight.toString()))
|
||||
}
|
||||
if (markAsSensitive) {
|
||||
tags.add(listOf("content-warning", ""))
|
||||
tags.add(arrayOf("content-warning", ""))
|
||||
}
|
||||
zapRaiserAmount?.let {
|
||||
tags.add(listOf("zapraiser", "$it"))
|
||||
tags.add(arrayOf("zapraiser", "$it"))
|
||||
}
|
||||
geohash?.let {
|
||||
tags.addAll(geohashMipMap(it))
|
||||
}
|
||||
|
||||
signer.sign(createdAt, kind, tags, content, onReady)
|
||||
signer.sign(createdAt, kind, tags.toTypedArray(), message, onReady)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -14,7 +14,7 @@ class ChannelMetadataEvent(
|
||||
id: HexKey,
|
||||
pubKey: HexKey,
|
||||
createdAt: Long,
|
||||
tags: List<List<String>>,
|
||||
tags: Array<Array<String>>,
|
||||
content: String,
|
||||
sig: HexKey
|
||||
) : Event(id, pubKey, createdAt, kind, tags, content, sig), IsInPublicChatChannel {
|
||||
@@ -65,8 +65,8 @@ class ChannelMetadataEvent(
|
||||
""
|
||||
}
|
||||
|
||||
val tags = listOf(listOf("e", originalChannelIdHex, "", "root"))
|
||||
signer.sign(createdAt, kind, tags, content, onReady)
|
||||
val tags = listOf(arrayOf("e", originalChannelIdHex, "", "root"))
|
||||
signer.sign(createdAt, kind, tags.toTypedArray(), content, onReady)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -12,7 +12,7 @@ class ChannelMuteUserEvent(
|
||||
id: HexKey,
|
||||
pubKey: HexKey,
|
||||
createdAt: Long,
|
||||
tags: List<List<String>>,
|
||||
tags: Array<Array<String>>,
|
||||
content: String,
|
||||
sig: HexKey
|
||||
) : Event(id, pubKey, createdAt, kind, tags, content, sig), IsInPublicChatChannel {
|
||||
@@ -36,8 +36,8 @@ class ChannelMuteUserEvent(
|
||||
) {
|
||||
val content = reason
|
||||
val tags = usersToMute?.map {
|
||||
listOf("p", it)
|
||||
} ?: emptyList()
|
||||
arrayOf("p", it)
|
||||
}?.toTypedArray() ?: emptyArray()
|
||||
|
||||
signer.sign(createdAt, kind, tags, content, onReady)
|
||||
}
|
||||
|
||||
@@ -13,7 +13,7 @@ class ChatMessageEvent(
|
||||
id: HexKey,
|
||||
pubKey: HexKey,
|
||||
createdAt: Long,
|
||||
tags: List<List<String>>,
|
||||
tags: Array<Array<String>>,
|
||||
content: String,
|
||||
sig: HexKey
|
||||
) : WrappedEvent(id, pubKey, createdAt, kind, tags, content, sig), ChatroomKeyable {
|
||||
@@ -64,33 +64,33 @@ class ChatMessageEvent(
|
||||
createdAt: Long = TimeUtils.now(),
|
||||
onReady: (ChatMessageEvent) -> Unit
|
||||
) {
|
||||
val tags = mutableListOf<List<String>>()
|
||||
val tags = mutableListOf<Array<String>>()
|
||||
to?.forEach {
|
||||
tags.add(listOf("p", it))
|
||||
tags.add(arrayOf("p", it))
|
||||
}
|
||||
replyTos?.forEach {
|
||||
tags.add(listOf("e", it))
|
||||
tags.add(arrayOf("e", it))
|
||||
}
|
||||
mentions?.forEach {
|
||||
tags.add(listOf("p", it, "", "mention"))
|
||||
tags.add(arrayOf("p", it, "", "mention"))
|
||||
}
|
||||
zapReceiver?.forEach {
|
||||
tags.add(listOf("zap", it.lnAddressOrPubKeyHex, it.relay ?: "", it.weight.toString()))
|
||||
tags.add(arrayOf("zap", it.lnAddressOrPubKeyHex, it.relay ?: "", it.weight.toString()))
|
||||
}
|
||||
if (markAsSensitive) {
|
||||
tags.add(listOf("content-warning", ""))
|
||||
tags.add(arrayOf("content-warning", ""))
|
||||
}
|
||||
zapRaiserAmount?.let {
|
||||
tags.add(listOf("zapraiser", "$it"))
|
||||
tags.add(arrayOf("zapraiser", "$it"))
|
||||
}
|
||||
geohash?.let {
|
||||
tags.addAll(geohashMipMap(it))
|
||||
}
|
||||
subject?.let {
|
||||
tags.add(listOf("subject", it))
|
||||
tags.add(arrayOf("subject", it))
|
||||
}
|
||||
|
||||
signer.sign(createdAt, kind, tags, msg, onReady)
|
||||
signer.sign(createdAt, kind, tags.toTypedArray(), msg, onReady)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -13,7 +13,7 @@ class ClassifiedsEvent(
|
||||
id: HexKey,
|
||||
pubKey: HexKey,
|
||||
createdAt: Long,
|
||||
tags: List<List<String>>,
|
||||
tags: Array<Array<String>>,
|
||||
content: String,
|
||||
sig: HexKey
|
||||
) : BaseAddressableEvent(id, pubKey, createdAt, kind, tags, content, sig) {
|
||||
@@ -46,26 +46,26 @@ class ClassifiedsEvent(
|
||||
createdAt: Long = TimeUtils.now(),
|
||||
onReady: (ClassifiedsEvent) -> Unit
|
||||
) {
|
||||
val tags = mutableListOf<List<String>>()
|
||||
val tags = mutableListOf<Array<String>>()
|
||||
|
||||
tags.add(listOf("d", dTag))
|
||||
title?.let { tags.add(listOf("title", it)) }
|
||||
image?.let { tags.add(listOf("image", it)) }
|
||||
summary?.let { tags.add(listOf("summary", it)) }
|
||||
tags.add(arrayOf("d", dTag))
|
||||
title?.let { tags.add(arrayOf("title", it)) }
|
||||
image?.let { tags.add(arrayOf("image", it)) }
|
||||
summary?.let { tags.add(arrayOf("summary", it)) }
|
||||
price?.let {
|
||||
if (it.frequency != null && it.currency != null) {
|
||||
tags.add(listOf("price", it.amount, it.currency, it.frequency))
|
||||
tags.add(arrayOf("price", it.amount, it.currency, it.frequency))
|
||||
} else if (it.currency != null) {
|
||||
tags.add(listOf("price", it.amount, it.currency))
|
||||
tags.add(arrayOf("price", it.amount, it.currency))
|
||||
} else {
|
||||
tags.add(listOf("price", it.amount))
|
||||
tags.add(arrayOf("price", it.amount))
|
||||
}
|
||||
}
|
||||
location?.let { tags.add(listOf("location", it)) }
|
||||
publishedAt?.let { tags.add(listOf("publishedAt", it.toString())) }
|
||||
title?.let { tags.add(listOf("title", it)) }
|
||||
location?.let { tags.add(arrayOf("location", it)) }
|
||||
publishedAt?.let { tags.add(arrayOf("publishedAt", it.toString())) }
|
||||
title?.let { tags.add(arrayOf("title", it)) }
|
||||
|
||||
signer.sign(createdAt, kind, tags, "", onReady)
|
||||
signer.sign(createdAt, kind, tags.toTypedArray(), "", onReady)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -13,7 +13,7 @@ class CommunityDefinitionEvent(
|
||||
id: HexKey,
|
||||
pubKey: HexKey,
|
||||
createdAt: Long,
|
||||
tags: List<List<String>>,
|
||||
tags: Array<Array<String>>,
|
||||
content: String,
|
||||
sig: HexKey
|
||||
) : BaseAddressableEvent(id, pubKey, createdAt, kind, tags, content, sig) {
|
||||
@@ -31,7 +31,7 @@ class CommunityDefinitionEvent(
|
||||
createdAt: Long = TimeUtils.now(),
|
||||
onReady: (CommunityDefinitionEvent) -> Unit
|
||||
) {
|
||||
val tags = mutableListOf<List<String>>()
|
||||
val tags = emptyArray<Array<String>>()
|
||||
signer.sign(createdAt, kind, tags, "", onReady)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -14,7 +14,7 @@ class CommunityPostApprovalEvent(
|
||||
id: HexKey,
|
||||
pubKey: HexKey,
|
||||
createdAt: Long,
|
||||
tags: List<List<String>>,
|
||||
tags: Array<Array<String>>,
|
||||
content: String,
|
||||
sig: HexKey
|
||||
) : Event(id, pubKey, createdAt, kind, tags, content, sig) {
|
||||
@@ -55,12 +55,12 @@ class CommunityPostApprovalEvent(
|
||||
) {
|
||||
val content = approvedPost.toJson()
|
||||
|
||||
val communities = listOf("a", community.address().toTag())
|
||||
val replyToPost = listOf("e", approvedPost.id())
|
||||
val replyToAuthor = listOf("p", approvedPost.pubKey())
|
||||
val innerKind = listOf("k", "${approvedPost.kind()}")
|
||||
val communities = arrayOf("a", community.address().toTag())
|
||||
val replyToPost = arrayOf("e", approvedPost.id())
|
||||
val replyToAuthor = arrayOf("p", approvedPost.pubKey())
|
||||
val innerKind = arrayOf("k", "${approvedPost.kind()}")
|
||||
|
||||
val tags: List<List<String>> = listOf(communities, replyToPost, replyToAuthor, innerKind)
|
||||
val tags: Array<Array<String>> = arrayOf(communities, replyToPost, replyToAuthor, innerKind)
|
||||
|
||||
signer.sign(createdAt, kind, tags, content, onReady)
|
||||
}
|
||||
|
||||
@@ -21,7 +21,7 @@ class ContactListEvent(
|
||||
id: HexKey,
|
||||
pubKey: HexKey,
|
||||
createdAt: Long,
|
||||
tags: List<List<String>>,
|
||||
tags: Array<Array<String>>,
|
||||
content: String,
|
||||
sig: HexKey
|
||||
) : Event(id, pubKey, createdAt, kind, tags, content, sig) {
|
||||
@@ -112,27 +112,27 @@ class ContactListEvent(
|
||||
|
||||
val tags = followUsers.map {
|
||||
if (it.relayUri != null) {
|
||||
listOf("p", it.pubKeyHex, it.relayUri)
|
||||
arrayOf("p", it.pubKeyHex, it.relayUri)
|
||||
} else {
|
||||
listOf("p", it.pubKeyHex)
|
||||
arrayOf("p", it.pubKeyHex)
|
||||
}
|
||||
} + followTags.map {
|
||||
listOf("t", it)
|
||||
arrayOf("t", it)
|
||||
} + followEvents.map {
|
||||
listOf("e", it)
|
||||
arrayOf("e", it)
|
||||
} + followCommunities.map {
|
||||
if (it.relay != null) {
|
||||
listOf("a", it.toTag(), it.relay)
|
||||
arrayOf("a", it.toTag(), it.relay)
|
||||
} else {
|
||||
listOf("a", it.toTag())
|
||||
arrayOf("a", it.toTag())
|
||||
}
|
||||
} + followGeohashes.map {
|
||||
listOf("g", it)
|
||||
arrayOf("g", it)
|
||||
}
|
||||
|
||||
return create(
|
||||
content = content,
|
||||
tags = tags,
|
||||
tags = tags.toTypedArray(),
|
||||
signer = signer,
|
||||
createdAt = createdAt,
|
||||
onReady = onReady
|
||||
@@ -144,7 +144,7 @@ class ContactListEvent(
|
||||
|
||||
return create(
|
||||
content = earlierVersion.content,
|
||||
tags = earlierVersion.tags.plus(element = listOf("p", pubKeyHex)),
|
||||
tags = earlierVersion.tags.plus(element = arrayOf("p", pubKeyHex)),
|
||||
signer = signer,
|
||||
createdAt = createdAt,
|
||||
onReady = onReady
|
||||
@@ -156,7 +156,7 @@ class ContactListEvent(
|
||||
|
||||
return create(
|
||||
content = earlierVersion.content,
|
||||
tags = earlierVersion.tags.filter { it.size > 1 && it[1] != pubKeyHex },
|
||||
tags = earlierVersion.tags.filter { it.size > 1 && it[1] != pubKeyHex }.toTypedArray(),
|
||||
signer = signer,
|
||||
createdAt = createdAt,
|
||||
onReady = onReady
|
||||
@@ -168,7 +168,7 @@ class ContactListEvent(
|
||||
|
||||
return create(
|
||||
content = earlierVersion.content,
|
||||
tags = earlierVersion.tags.plus(element = listOf("t", hashtag)),
|
||||
tags = earlierVersion.tags.plus(element = arrayOf("t", hashtag)),
|
||||
signer = signer,
|
||||
createdAt = createdAt,
|
||||
onReady = onReady
|
||||
@@ -180,7 +180,7 @@ class ContactListEvent(
|
||||
|
||||
return create(
|
||||
content = earlierVersion.content,
|
||||
tags = earlierVersion.tags.filter { it.size > 1 && !it[1].equals(hashtag, true) },
|
||||
tags = earlierVersion.tags.filter { it.size > 1 && !it[1].equals(hashtag, true) }.toTypedArray(),
|
||||
signer = signer,
|
||||
createdAt = createdAt,
|
||||
onReady = onReady
|
||||
@@ -192,7 +192,7 @@ class ContactListEvent(
|
||||
|
||||
return create(
|
||||
content = earlierVersion.content,
|
||||
tags = earlierVersion.tags.plus(element = listOf("g", hashtag)),
|
||||
tags = earlierVersion.tags.plus(element = arrayOf("g", hashtag)),
|
||||
signer = signer,
|
||||
createdAt = createdAt,
|
||||
onReady = onReady
|
||||
@@ -204,7 +204,7 @@ class ContactListEvent(
|
||||
|
||||
return create(
|
||||
content = earlierVersion.content,
|
||||
tags = earlierVersion.tags.filter { it.size > 1 && it[1] != hashtag },
|
||||
tags = earlierVersion.tags.filter { it.size > 1 && it[1] != hashtag }.toTypedArray(),
|
||||
signer = signer,
|
||||
createdAt = createdAt,
|
||||
onReady = onReady
|
||||
@@ -216,7 +216,7 @@ class ContactListEvent(
|
||||
|
||||
return create(
|
||||
content = earlierVersion.content,
|
||||
tags = earlierVersion.tags.plus(element = listOf("e", idHex)),
|
||||
tags = earlierVersion.tags.plus(element = arrayOf("e", idHex)),
|
||||
signer = signer,
|
||||
createdAt = createdAt,
|
||||
onReady = onReady
|
||||
@@ -228,7 +228,7 @@ class ContactListEvent(
|
||||
|
||||
return create(
|
||||
content = earlierVersion.content,
|
||||
tags = earlierVersion.tags.filter { it.size > 1 && it[1] != idHex },
|
||||
tags = earlierVersion.tags.filter { it.size > 1 && it[1] != idHex }.toTypedArray(),
|
||||
signer = signer,
|
||||
createdAt = createdAt,
|
||||
onReady = onReady
|
||||
@@ -240,7 +240,7 @@ class ContactListEvent(
|
||||
|
||||
return create(
|
||||
content = earlierVersion.content,
|
||||
tags = earlierVersion.tags.plus(element = listOfNotNull("a", aTag.toTag(), aTag.relay)),
|
||||
tags = earlierVersion.tags.plus(element = listOfNotNull("a", aTag.toTag(), aTag.relay).toTypedArray()),
|
||||
signer = signer,
|
||||
createdAt = createdAt,
|
||||
onReady = onReady
|
||||
@@ -252,7 +252,7 @@ class ContactListEvent(
|
||||
|
||||
return create(
|
||||
content = earlierVersion.content,
|
||||
tags = earlierVersion.tags.filter { it.size > 1 && it[1] != aTag.toTag() },
|
||||
tags = earlierVersion.tags.filter { it.size > 1 && it[1] != aTag.toTag() }.toTypedArray(),
|
||||
signer = signer,
|
||||
createdAt = createdAt,
|
||||
onReady = onReady
|
||||
@@ -277,7 +277,7 @@ class ContactListEvent(
|
||||
|
||||
fun create(
|
||||
content: String,
|
||||
tags: List<List<String>>,
|
||||
tags: Array<Array<String>>,
|
||||
signer: NostrSigner,
|
||||
createdAt: Long = TimeUtils.now(),
|
||||
onReady: (ContactListEvent) -> Unit
|
||||
@@ -346,10 +346,10 @@ class UserMetadata {
|
||||
}
|
||||
|
||||
@Stable
|
||||
data class ImmutableListOfLists<T>(val lists: List<List<T>> = emptyList())
|
||||
data class ImmutableListOfLists<T>(val lists: Array<Array<T>>)
|
||||
|
||||
val EmptyTagList = ImmutableListOfLists<String>(emptyList())
|
||||
val EmptyTagList = ImmutableListOfLists<String>(emptyArray())
|
||||
|
||||
fun List<List<String>>.toImmutableListOfLists(): ImmutableListOfLists<String> {
|
||||
fun Array<Array<String>>.toImmutableListOfLists(): ImmutableListOfLists<String> {
|
||||
return ImmutableListOfLists(this)
|
||||
}
|
||||
@@ -13,7 +13,7 @@ class DeletionEvent(
|
||||
id: HexKey,
|
||||
pubKey: HexKey,
|
||||
createdAt: Long,
|
||||
tags: List<List<String>>,
|
||||
tags: Array<Array<String>>,
|
||||
content: String,
|
||||
sig: HexKey
|
||||
) : Event(id, pubKey, createdAt, kind, tags, content, sig) {
|
||||
@@ -24,7 +24,7 @@ class DeletionEvent(
|
||||
|
||||
fun create(deleteEvents: List<String>, signer: NostrSigner, createdAt: Long = TimeUtils.now(), onReady: (DeletionEvent) -> Unit) {
|
||||
val content = ""
|
||||
val tags = deleteEvents.map { listOf("e", it) }
|
||||
val tags = deleteEvents.map { arrayOf("e", it) }.toTypedArray()
|
||||
signer.sign(createdAt, kind, tags, content, onReady)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -12,7 +12,7 @@ class EmojiPackEvent(
|
||||
id: HexKey,
|
||||
pubKey: HexKey,
|
||||
createdAt: Long,
|
||||
tags: List<List<String>>,
|
||||
tags: Array<Array<String>>,
|
||||
content: String,
|
||||
sig: HexKey
|
||||
) : GeneralListEvent(id, pubKey, createdAt, kind, tags, content, sig) {
|
||||
@@ -28,10 +28,10 @@ class EmojiPackEvent(
|
||||
) {
|
||||
val content = ""
|
||||
|
||||
val tags = mutableListOf<List<String>>()
|
||||
tags.add(listOf("d", name))
|
||||
val tags = mutableListOf<Array<String>>()
|
||||
tags.add(arrayOf("d", name))
|
||||
|
||||
signer.sign(createdAt, kind, tags, content, onReady)
|
||||
signer.sign(createdAt, kind, tags.toTypedArray(), content, onReady)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -14,7 +14,7 @@ class EmojiPackSelectionEvent(
|
||||
id: HexKey,
|
||||
pubKey: HexKey,
|
||||
createdAt: Long,
|
||||
tags: List<List<String>>,
|
||||
tags: Array<Array<String>>,
|
||||
content: String,
|
||||
sig: HexKey
|
||||
) : BaseAddressableEvent(id, pubKey, createdAt, kind, tags, content, sig) {
|
||||
@@ -31,13 +31,13 @@ class EmojiPackSelectionEvent(
|
||||
onReady: (EmojiPackSelectionEvent) -> Unit
|
||||
) {
|
||||
val msg = ""
|
||||
val tags = mutableListOf<List<String>>()
|
||||
val tags = mutableListOf<Array<String>>()
|
||||
|
||||
listOfEmojiPacks?.forEach {
|
||||
tags.add(listOf("a", it.toTag()))
|
||||
tags.add(arrayOf("a", it.toTag()))
|
||||
}
|
||||
|
||||
signer.sign(createdAt, kind, tags, msg, onReady)
|
||||
signer.sign(createdAt, kind, tags.toTypedArray(), msg, onReady)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -11,6 +11,7 @@ import com.fasterxml.jackson.databind.JsonNode
|
||||
import com.fasterxml.jackson.databind.SerializerProvider
|
||||
import com.fasterxml.jackson.databind.deser.std.StdDeserializer
|
||||
import com.fasterxml.jackson.databind.module.SimpleModule
|
||||
import com.fasterxml.jackson.databind.node.ArrayNode
|
||||
import com.fasterxml.jackson.databind.ser.std.StdSerializer
|
||||
import com.fasterxml.jackson.module.kotlin.jacksonObjectMapper
|
||||
import com.vitorpamplona.quartz.crypto.CryptoUtils
|
||||
@@ -33,7 +34,7 @@ open class Event(
|
||||
@JsonProperty("created_at")
|
||||
val createdAt: Long,
|
||||
val kind: Int,
|
||||
val tags: List<List<String>>,
|
||||
val tags: Array<Array<String>>,
|
||||
val content: String,
|
||||
val sig: HexKey
|
||||
) : EventInterface {
|
||||
@@ -55,7 +56,7 @@ open class Event(
|
||||
|
||||
override fun kind(): Int = kind
|
||||
|
||||
override fun tags(): List<List<String>> = tags
|
||||
override fun tags(): Array<Array<String>> = tags
|
||||
|
||||
override fun content(): String = content
|
||||
|
||||
@@ -272,14 +273,13 @@ open class Event(
|
||||
private class GossipDeserializer : StdDeserializer<Gossip>(Gossip::class.java) {
|
||||
override fun deserialize(jp: JsonParser, ctxt: DeserializationContext): Gossip {
|
||||
val jsonObject: JsonNode = jp.codec.readTree(jp)
|
||||
val tagList = jsonObject.get("tags")
|
||||
return Gossip(
|
||||
id = jsonObject.get("id")?.asText()?.intern(),
|
||||
pubKey = jsonObject.get("pubkey")?.asText()?.intern(),
|
||||
createdAt = jsonObject.get("created_at")?.asLong(),
|
||||
kind = jsonObject.get("kind")?.asInt(),
|
||||
tags = tagList.mapTo(ArrayList<List<String>>(tagList.size())) {
|
||||
it.mapNotNullTo(ArrayList<String>(it.size())) { s -> if (s.isNull) null else s.asText().intern() }
|
||||
tags = jsonObject.get("tags").toTypedArray {
|
||||
it.toTypedArray { s -> if (s.isNull) "" else s.asText().intern() }
|
||||
},
|
||||
content = jsonObject.get("content")?.asText()
|
||||
)
|
||||
@@ -295,7 +295,7 @@ open class Event(
|
||||
gen.writeNumberField("kind", event.kind)
|
||||
gen.writeArrayFieldStart("tags")
|
||||
event.tags.forEach { tag ->
|
||||
gen.writeArray(tag.toTypedArray(), 0, tag.size)
|
||||
gen.writeArray(tag, 0, tag.size)
|
||||
}
|
||||
gen.writeEndArray()
|
||||
gen.writeStringField("content", event.content)
|
||||
@@ -314,7 +314,7 @@ open class Event(
|
||||
event.tags?.let {
|
||||
gen.writeArrayFieldStart("tags")
|
||||
event.tags.forEach { tag ->
|
||||
gen.writeArray(tag.toTypedArray(), 0, tag.size)
|
||||
gen.writeArray(tag, 0, tag.size)
|
||||
}
|
||||
gen.writeEndArray()
|
||||
}
|
||||
@@ -361,24 +361,29 @@ open class Event(
|
||||
)
|
||||
|
||||
fun fromJson(jsonObject: JsonNode): Event {
|
||||
val tagList = jsonObject.get("tags")
|
||||
return EventFactory.create(
|
||||
id = jsonObject.get("id").asText().intern(),
|
||||
pubKey = jsonObject.get("pubkey").asText().intern(),
|
||||
createdAt = jsonObject.get("created_at").asLong(),
|
||||
kind = jsonObject.get("kind").asInt(),
|
||||
tags = tagList.mapTo(ArrayList<List<String>>(tagList.size())) {
|
||||
it.mapNotNullTo(ArrayList<String>(it.size())) { s -> if (s.isNull) null else s.asText().intern() }
|
||||
tags = jsonObject.get("tags").toTypedArray {
|
||||
it.toTypedArray { s -> if (s.isNull) "" else s.asText().intern() }
|
||||
},
|
||||
content = jsonObject.get("content").asText(),
|
||||
sig = jsonObject.get("sig").asText()
|
||||
)
|
||||
}
|
||||
|
||||
private inline fun <reified R> JsonNode.toTypedArray(transform: (JsonNode) -> R): Array<R> {
|
||||
return Array(size()) {
|
||||
transform(get(it))
|
||||
}
|
||||
}
|
||||
|
||||
fun fromJson(json: String): Event = mapper.readValue(json, Event::class.java)
|
||||
fun toJson(event: Event): String = mapper.writeValueAsString(event)
|
||||
|
||||
fun makeJsonForId(pubKey: HexKey, createdAt: Long, kind: Int, tags: List<List<String>>, content: String): String {
|
||||
fun makeJsonForId(pubKey: HexKey, createdAt: Long, kind: Int, tags: Array<Array<String>>, content: String): String {
|
||||
val factory = mapper.nodeFactory
|
||||
val rawEvent = factory.arrayNode(6).apply {
|
||||
add(0)
|
||||
@@ -402,11 +407,11 @@ open class Event(
|
||||
return mapper.writeValueAsString(rawEvent)
|
||||
}
|
||||
|
||||
fun generateId(pubKey: HexKey, createdAt: Long, kind: Int, tags: List<List<String>>, content: String): ByteArray {
|
||||
fun generateId(pubKey: HexKey, createdAt: Long, kind: Int, tags: Array<Array<String>>, content: String): ByteArray {
|
||||
return CryptoUtils.sha256(makeJsonForId(pubKey, createdAt, kind, tags, content).toByteArray())
|
||||
}
|
||||
|
||||
fun create(signer: NostrSigner, kind: Int, tags: List<List<String>> = emptyList(), content: String = "", createdAt: Long = TimeUtils.now(), onReady: (Event) -> Unit) {
|
||||
fun create(signer: NostrSigner, kind: Int, tags: Array<Array<String>> = emptyArray(), content: String = "", createdAt: Long = TimeUtils.now(), onReady: (Event) -> Unit) {
|
||||
return signer.sign(createdAt, kind, tags, content, onReady)
|
||||
}
|
||||
}
|
||||
@@ -420,7 +425,7 @@ open class WrappedEvent(
|
||||
@JsonProperty("created_at")
|
||||
createdAt: Long,
|
||||
kind: Int,
|
||||
tags: List<List<String>>,
|
||||
tags: Array<Array<String>>,
|
||||
content: String,
|
||||
sig: HexKey
|
||||
) : Event(id, pubKey, createdAt, kind, tags, content, sig) {
|
||||
@@ -440,7 +445,7 @@ open class BaseAddressableEvent(
|
||||
pubKey: HexKey,
|
||||
createdAt: Long,
|
||||
kind: Int,
|
||||
tags: List<List<String>>,
|
||||
tags: Array<Array<String>>,
|
||||
content: String,
|
||||
sig: HexKey
|
||||
): Event(id, pubKey, createdAt, kind, tags, content, sig), AddressableEvent {
|
||||
|
||||
@@ -10,7 +10,7 @@ class EventFactory {
|
||||
pubKey: String,
|
||||
createdAt: Long,
|
||||
kind: Int,
|
||||
tags: List<List<String>>,
|
||||
tags: Array<Array<String>>,
|
||||
content: String,
|
||||
sig: String
|
||||
) = when (kind) {
|
||||
|
||||
@@ -17,7 +17,7 @@ interface EventInterface {
|
||||
|
||||
fun kind(): Int
|
||||
|
||||
fun tags(): List<List<String>>
|
||||
fun tags(): Array<Array<String>>
|
||||
|
||||
fun content(): String
|
||||
|
||||
|
||||
@@ -13,7 +13,7 @@ class FileHeaderEvent(
|
||||
id: HexKey,
|
||||
pubKey: HexKey,
|
||||
createdAt: Long,
|
||||
tags: List<List<String>>,
|
||||
tags: Array<Array<String>>,
|
||||
content: String,
|
||||
sig: HexKey
|
||||
) : Event(id, pubKey, createdAt, kind, tags, content, sig) {
|
||||
@@ -62,20 +62,20 @@ class FileHeaderEvent(
|
||||
onReady: (FileHeaderEvent) -> Unit
|
||||
) {
|
||||
val tags = listOfNotNull(
|
||||
listOf(URL, url),
|
||||
mimeType?.let { listOf(MIME_TYPE, mimeType) },
|
||||
alt?.ifBlank { null }?.let { listOf(ALT, it) },
|
||||
hash?.let { listOf(HASH, it) },
|
||||
size?.let { listOf(FILE_SIZE, it) },
|
||||
dimensions?.let { listOf(DIMENSION, it) },
|
||||
blurhash?.let { listOf(BLUR_HASH, it) },
|
||||
magnetURI?.let { listOf(MAGNET_URI, it) },
|
||||
arrayOf(URL, url),
|
||||
mimeType?.let { arrayOf(MIME_TYPE, mimeType) },
|
||||
alt?.ifBlank { null }?.let { arrayOf(ALT, it) },
|
||||
hash?.let { arrayOf(HASH, it) },
|
||||
size?.let { arrayOf(FILE_SIZE, it) },
|
||||
dimensions?.let { arrayOf(DIMENSION, it) },
|
||||
blurhash?.let { arrayOf(BLUR_HASH, it) },
|
||||
magnetURI?.let { arrayOf(MAGNET_URI, it) },
|
||||
|
||||
torrentInfoHash?.let { listOf(TORRENT_INFOHASH, it) },
|
||||
encryptionKey?.let { listOf(ENCRYPTION_KEY, it.key, it.nonce) },
|
||||
torrentInfoHash?.let { arrayOf(TORRENT_INFOHASH, it) },
|
||||
encryptionKey?.let { arrayOf(ENCRYPTION_KEY, it.key, it.nonce) },
|
||||
sensitiveContent?.let {
|
||||
if (it) {
|
||||
listOf("content-warning", "")
|
||||
arrayOf("content-warning", "")
|
||||
} else {
|
||||
null
|
||||
}
|
||||
@@ -83,7 +83,7 @@ class FileHeaderEvent(
|
||||
)
|
||||
|
||||
val content = alt ?: ""
|
||||
signer.sign(createdAt, kind, tags, content, onReady)
|
||||
signer.sign(createdAt, kind, tags.toTypedArray(), content, onReady)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -14,7 +14,7 @@ class FileStorageEvent(
|
||||
id: HexKey,
|
||||
pubKey: HexKey,
|
||||
createdAt: Long,
|
||||
tags: List<List<String>>,
|
||||
tags: Array<Array<String>>,
|
||||
content: String,
|
||||
sig: HexKey
|
||||
) : Event(id, pubKey, createdAt, kind, tags, content, sig) {
|
||||
@@ -49,11 +49,11 @@ class FileStorageEvent(
|
||||
onReady: (FileStorageEvent) -> Unit
|
||||
) {
|
||||
val tags = listOfNotNull(
|
||||
listOf(TYPE, mimeType)
|
||||
arrayOf(TYPE, mimeType)
|
||||
)
|
||||
|
||||
val content = encode(data)
|
||||
signer.sign(createdAt, kind, tags, content, onReady)
|
||||
signer.sign(createdAt, kind, tags.toTypedArray(), content, onReady)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -12,7 +12,7 @@ class FileStorageHeaderEvent(
|
||||
id: HexKey,
|
||||
pubKey: HexKey,
|
||||
createdAt: Long,
|
||||
tags: List<List<String>>,
|
||||
tags: Array<Array<String>>,
|
||||
content: String,
|
||||
sig: HexKey
|
||||
) : Event(id, pubKey, createdAt, kind, tags, content, sig) {
|
||||
@@ -59,19 +59,19 @@ class FileStorageHeaderEvent(
|
||||
onReady: (FileStorageHeaderEvent) -> Unit
|
||||
) {
|
||||
val tags = listOfNotNull(
|
||||
listOf("e", storageEvent.id),
|
||||
mimeType?.let { listOf(MIME_TYPE, mimeType) },
|
||||
hash?.let { listOf(HASH, it) },
|
||||
alt?.let { listOf(ALT, it) },
|
||||
size?.let { listOf(FILE_SIZE, it) },
|
||||
dimensions?.let { listOf(DIMENSION, it) },
|
||||
blurhash?.let { listOf(BLUR_HASH, it) },
|
||||
magnetURI?.let { listOf(MAGNET_URI, it) },
|
||||
torrentInfoHash?.let { listOf(TORRENT_INFOHASH, it) },
|
||||
encryptionKey?.let { listOf(ENCRYPTION_KEY, it.key, it.nonce) },
|
||||
arrayOf("e", storageEvent.id),
|
||||
mimeType?.let { arrayOf(MIME_TYPE, mimeType) },
|
||||
hash?.let { arrayOf(HASH, it) },
|
||||
alt?.let { arrayOf(ALT, it) },
|
||||
size?.let { arrayOf(FILE_SIZE, it) },
|
||||
dimensions?.let { arrayOf(DIMENSION, it) },
|
||||
blurhash?.let { arrayOf(BLUR_HASH, it) },
|
||||
magnetURI?.let { arrayOf(MAGNET_URI, it) },
|
||||
torrentInfoHash?.let { arrayOf(TORRENT_INFOHASH, it) },
|
||||
encryptionKey?.let { arrayOf(ENCRYPTION_KEY, it.key, it.nonce) },
|
||||
sensitiveContent?.let {
|
||||
if (it) {
|
||||
listOf("content-warning", "")
|
||||
arrayOf("content-warning", "")
|
||||
} else {
|
||||
null
|
||||
}
|
||||
@@ -79,7 +79,7 @@ class FileStorageHeaderEvent(
|
||||
)
|
||||
|
||||
val content = alt ?: ""
|
||||
signer.sign(createdAt, kind, tags, content, onReady)
|
||||
signer.sign(createdAt, kind, tags.toTypedArray(), content, onReady)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -17,12 +17,12 @@ abstract class GeneralListEvent(
|
||||
pubKey: HexKey,
|
||||
createdAt: Long,
|
||||
kind: Int,
|
||||
tags: List<List<String>>,
|
||||
tags: Array<Array<String>>,
|
||||
content: String,
|
||||
sig: HexKey
|
||||
) : BaseAddressableEvent(id, pubKey, createdAt, kind, tags, content, sig) {
|
||||
@Transient
|
||||
private var privateTagsCache: List<List<String>>? = null
|
||||
private var privateTagsCache: Array<Array<String>>? = null
|
||||
|
||||
fun category() = dTag()
|
||||
fun bookmarkedPosts() = taggedEvents()
|
||||
@@ -32,11 +32,11 @@ abstract class GeneralListEvent(
|
||||
fun title() = tags.firstOrNull { it.size > 1 && it[0] == "title" }?.get(1)
|
||||
fun nameOrTitle() = name() ?: title()
|
||||
|
||||
fun cachedPrivateTags(): List<List<String>>? {
|
||||
fun cachedPrivateTags(): Array<Array<String>>? {
|
||||
return privateTagsCache
|
||||
}
|
||||
|
||||
fun filterTagList(key: String, privateTags: List<List<String>>?): ImmutableSet<String> {
|
||||
fun filterTagList(key: String, privateTags: Array<Array<String>>?): ImmutableSet<String> {
|
||||
val privateUserList = privateTags?.let {
|
||||
it.filter { it.size > 1 && it[0] == key }.map { it[1] }.toSet()
|
||||
} ?: emptySet()
|
||||
@@ -57,7 +57,7 @@ abstract class GeneralListEvent(
|
||||
}
|
||||
}
|
||||
|
||||
fun privateTags(signer: NostrSigner, onReady: (List<List<String>>) -> Unit) {
|
||||
fun privateTags(signer: NostrSigner, onReady: (Array<Array<String>>) -> Unit) {
|
||||
if (content.isBlank()) return
|
||||
|
||||
privateTagsCache?.let {
|
||||
@@ -67,7 +67,7 @@ abstract class GeneralListEvent(
|
||||
|
||||
try {
|
||||
signer.nip04Decrypt(content, pubKey) {
|
||||
privateTagsCache = mapper.readValue<List<List<String>>>(it)
|
||||
privateTagsCache = mapper.readValue<Array<Array<String>>>(it)
|
||||
privateTagsCache?.let {
|
||||
onReady(it)
|
||||
}
|
||||
@@ -77,7 +77,7 @@ abstract class GeneralListEvent(
|
||||
}
|
||||
}
|
||||
|
||||
fun privateTagsOrEmpty(signer: NostrSigner, onReady: (List<List<String>>) -> Unit) {
|
||||
fun privateTagsOrEmpty(signer: NostrSigner, onReady: (Array<Array<String>>) -> Unit) {
|
||||
privateTags(signer, onReady)
|
||||
}
|
||||
|
||||
@@ -97,23 +97,23 @@ abstract class GeneralListEvent(
|
||||
onReady(filterAddresses(it))
|
||||
}
|
||||
|
||||
fun filterUsers(tags: List<List<String>>): List<String> {
|
||||
fun filterUsers(tags: Array<Array<String>>): List<String> {
|
||||
return tags.filter { it.size > 1 && it[0] == "p" }.map { it[1] }
|
||||
}
|
||||
|
||||
fun filterHashtags(tags: List<List<String>>): List<String> {
|
||||
fun filterHashtags(tags: Array<Array<String>>): List<String> {
|
||||
return tags.filter { it.size > 1 && it[0] == "t" }.map { it[1] }
|
||||
}
|
||||
|
||||
fun filterGeohashes(tags: List<List<String>>): List<String> {
|
||||
fun filterGeohashes(tags: Array<Array<String>>): List<String> {
|
||||
return tags.filter { it.size > 1 && it[0] == "g" }.map { it[1] }
|
||||
}
|
||||
|
||||
fun filterEvents(tags: List<List<String>>): List<String> {
|
||||
fun filterEvents(tags: Array<Array<String>>): List<String> {
|
||||
return tags.filter { it.size > 1 && it[0] == "e" }.map { it[1] }
|
||||
}
|
||||
|
||||
fun filterAddresses(tags: List<List<String>>): List<ATag> {
|
||||
fun filterAddresses(tags: Array<Array<String>>): List<ATag> {
|
||||
return tags.filter { it.firstOrNull() == "a" }.mapNotNull {
|
||||
val aTagValue = it.getOrNull(1)
|
||||
val relay = it.getOrNull(2)
|
||||
@@ -131,22 +131,22 @@ abstract class GeneralListEvent(
|
||||
signer: NostrSigner,
|
||||
onReady: (String) -> Unit
|
||||
) {
|
||||
val privTags = mutableListOf<List<String>>()
|
||||
val privTags = mutableListOf<Array<String>>()
|
||||
privEvents?.forEach {
|
||||
privTags.add(listOf("e", it))
|
||||
privTags.add(arrayOf("e", it))
|
||||
}
|
||||
privUsers?.forEach {
|
||||
privTags.add(listOf("p", it))
|
||||
privTags.add(arrayOf("p", it))
|
||||
}
|
||||
privAddresses?.forEach {
|
||||
privTags.add(listOf("a", it.toTag()))
|
||||
privTags.add(arrayOf("a", it.toTag()))
|
||||
}
|
||||
|
||||
return encryptTags(privTags, signer, onReady)
|
||||
return encryptTags(privTags.toTypedArray(), signer, onReady)
|
||||
}
|
||||
|
||||
fun encryptTags(
|
||||
privateTags: List<List<String>>? = null,
|
||||
privateTags: Array<Array<String>>? = null,
|
||||
signer: NostrSigner,
|
||||
onReady: (String) -> Unit
|
||||
) {
|
||||
|
||||
@@ -13,7 +13,7 @@ class GenericRepostEvent(
|
||||
id: HexKey,
|
||||
pubKey: HexKey,
|
||||
createdAt: Long,
|
||||
tags: List<List<String>>,
|
||||
tags: Array<Array<String>>,
|
||||
content: String,
|
||||
sig: HexKey
|
||||
) : Event(id, pubKey, createdAt, kind, tags, content, sig) {
|
||||
@@ -38,18 +38,18 @@ class GenericRepostEvent(
|
||||
) {
|
||||
val content = boostedPost.toJson()
|
||||
|
||||
val replyToPost = listOf("e", boostedPost.id())
|
||||
val replyToAuthor = listOf("p", boostedPost.pubKey())
|
||||
val replyToPost = arrayOf("e", boostedPost.id())
|
||||
val replyToAuthor = arrayOf("p", boostedPost.pubKey())
|
||||
|
||||
var tags: List<List<String>> = listOf(replyToPost, replyToAuthor)
|
||||
var tags: List<Array<String>> = listOf(replyToPost, replyToAuthor)
|
||||
|
||||
if (boostedPost is AddressableEvent) {
|
||||
tags = tags + listOf(listOf("a", boostedPost.address().toTag()))
|
||||
tags = tags + listOf(arrayOf("a", boostedPost.address().toTag()))
|
||||
}
|
||||
|
||||
tags = tags + listOf(listOf("k", "${boostedPost.kind()}"))
|
||||
tags = tags + listOf(arrayOf("k", "${boostedPost.kind()}"))
|
||||
|
||||
signer.sign(createdAt, kind, tags, content, onReady)
|
||||
signer.sign(createdAt, kind, tags.toTypedArray(), content, onReady)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -19,7 +19,7 @@ class GiftWrapEvent(
|
||||
id: HexKey,
|
||||
pubKey: HexKey,
|
||||
createdAt: Long,
|
||||
tags: List<List<String>>,
|
||||
tags: Array<Array<String>>,
|
||||
content: String,
|
||||
sig: HexKey
|
||||
) : Event(id, pubKey, createdAt, kind, tags, content, sig) {
|
||||
@@ -71,7 +71,7 @@ class GiftWrapEvent(
|
||||
) {
|
||||
val signer = NostrSignerInternal(KeyPair()) // GiftWrap is always a random key
|
||||
val serializedContent = toJson(event)
|
||||
val tags = listOf(listOf("p", recipientPubKey))
|
||||
val tags = arrayOf(arrayOf("p", recipientPubKey))
|
||||
|
||||
signer.nip44Encrypt(serializedContent, recipientPubKey) {
|
||||
signer.sign(createdAt, kind, tags, it, onReady)
|
||||
|
||||
@@ -13,7 +13,7 @@ class HTTPAuthorizationEvent(
|
||||
id: HexKey,
|
||||
pubKey: HexKey,
|
||||
createdAt: Long,
|
||||
tags: List<List<String>>,
|
||||
tags: Array<Array<String>>,
|
||||
content: String,
|
||||
sig: HexKey
|
||||
) : Event(id, pubKey, createdAt, kind, tags, content, sig) {
|
||||
@@ -35,12 +35,12 @@ class HTTPAuthorizationEvent(
|
||||
}
|
||||
|
||||
val tags = listOfNotNull(
|
||||
listOf("u", url),
|
||||
listOf("method", method),
|
||||
listOf("payload", hash)
|
||||
arrayOf("u", url),
|
||||
arrayOf("method", method),
|
||||
arrayOf("payload", hash)
|
||||
)
|
||||
|
||||
signer.sign(createdAt, kind, tags, "", onReady)
|
||||
signer.sign(createdAt, kind, tags.toTypedArray(), "", onReady)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -12,7 +12,7 @@ class HighlightEvent(
|
||||
id: HexKey,
|
||||
pubKey: HexKey,
|
||||
createdAt: Long,
|
||||
tags: List<List<String>>,
|
||||
tags: Array<Array<String>>,
|
||||
content: String,
|
||||
sig: HexKey
|
||||
) : BaseTextNoteEvent(id, pubKey, createdAt, kind, tags, content, sig) {
|
||||
@@ -32,7 +32,7 @@ class HighlightEvent(
|
||||
createdAt: Long = TimeUtils.now(),
|
||||
onReady: (HighlightEvent) -> Unit
|
||||
) {
|
||||
signer.sign(createdAt, kind, emptyList(), msg, onReady)
|
||||
signer.sign(createdAt, kind, emptyArray(), msg, onReady)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+8
-8
@@ -14,7 +14,7 @@ class LiveActivitiesChatMessageEvent(
|
||||
id: HexKey,
|
||||
pubKey: HexKey,
|
||||
createdAt: Long,
|
||||
tags: List<List<String>>,
|
||||
tags: Array<Array<String>>,
|
||||
content: String,
|
||||
sig: HexKey
|
||||
) : BaseTextNoteEvent(id, pubKey, createdAt, kind, tags, content, sig) {
|
||||
@@ -60,28 +60,28 @@ class LiveActivitiesChatMessageEvent(
|
||||
) {
|
||||
val content = message
|
||||
val tags = mutableListOf(
|
||||
listOf("a", activity.toTag(), "", "root")
|
||||
arrayOf("a", activity.toTag(), "", "root")
|
||||
)
|
||||
replyTos?.forEach {
|
||||
tags.add(listOf("e", it))
|
||||
tags.add(arrayOf("e", it))
|
||||
}
|
||||
mentions?.forEach {
|
||||
tags.add(listOf("p", it))
|
||||
tags.add(arrayOf("p", it))
|
||||
}
|
||||
zapReceiver?.forEach {
|
||||
tags.add(listOf("zap", it.lnAddressOrPubKeyHex, it.relay ?: "", it.weight.toString()))
|
||||
tags.add(arrayOf("zap", it.lnAddressOrPubKeyHex, it.relay ?: "", it.weight.toString()))
|
||||
}
|
||||
if (markAsSensitive) {
|
||||
tags.add(listOf("content-warning", ""))
|
||||
tags.add(arrayOf("content-warning", ""))
|
||||
}
|
||||
zapRaiserAmount?.let {
|
||||
tags.add(listOf("zapraiser", "$it"))
|
||||
tags.add(arrayOf("zapraiser", "$it"))
|
||||
}
|
||||
geohash?.let {
|
||||
tags.addAll(geohashMipMap(it))
|
||||
}
|
||||
|
||||
signer.sign(createdAt, kind, tags, content, onReady)
|
||||
signer.sign(createdAt, kind, tags.toTypedArray(), content, onReady)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -13,7 +13,7 @@ class LiveActivitiesEvent(
|
||||
id: HexKey,
|
||||
pubKey: HexKey,
|
||||
createdAt: Long,
|
||||
tags: List<List<String>>,
|
||||
tags: Array<Array<String>>,
|
||||
content: String,
|
||||
sig: HexKey
|
||||
) : BaseAddressableEvent(id, pubKey, createdAt, kind, tags, content, sig) {
|
||||
@@ -55,7 +55,7 @@ class LiveActivitiesEvent(
|
||||
createdAt: Long = TimeUtils.now(),
|
||||
onReady: (LiveActivitiesEvent) -> Unit
|
||||
) {
|
||||
val tags = mutableListOf<List<String>>()
|
||||
val tags = emptyArray<Array<String>>()
|
||||
signer.sign(createdAt, kind, tags, "", onReady)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -10,7 +10,7 @@ class LnZapEvent(
|
||||
id: HexKey,
|
||||
pubKey: HexKey,
|
||||
createdAt: Long,
|
||||
tags: List<List<String>>,
|
||||
tags: Array<Array<String>>,
|
||||
content: String,
|
||||
sig: HexKey
|
||||
) : LnZapEventInterface, Event(id, pubKey, createdAt, kind, tags, content, sig) {
|
||||
|
||||
@@ -18,7 +18,7 @@ class LnZapPaymentRequestEvent(
|
||||
id: HexKey,
|
||||
pubKey: HexKey,
|
||||
createdAt: Long,
|
||||
tags: List<List<String>>,
|
||||
tags: Array<Array<String>>,
|
||||
content: String,
|
||||
sig: HexKey
|
||||
) : Event(id, pubKey, createdAt, kind, tags, content, sig) {
|
||||
@@ -66,8 +66,7 @@ class LnZapPaymentRequestEvent(
|
||||
) {
|
||||
val serializedRequest = mapper.writeValueAsString(PayInvoiceMethod.create(lnInvoice))
|
||||
|
||||
val tags = mutableListOf<List<String>>()
|
||||
tags.add(listOf("p", walletServicePubkey))
|
||||
val tags = arrayOf(arrayOf("p", walletServicePubkey))
|
||||
|
||||
signer.nip04Encrypt(
|
||||
serializedRequest,
|
||||
|
||||
@@ -16,7 +16,7 @@ class LnZapPaymentResponseEvent(
|
||||
id: HexKey,
|
||||
pubKey: HexKey,
|
||||
createdAt: Long,
|
||||
tags: List<List<String>>,
|
||||
tags: Array<Array<String>>,
|
||||
content: String,
|
||||
sig: HexKey
|
||||
) : Event(id, pubKey, createdAt, kind, tags, content, sig) {
|
||||
|
||||
@@ -21,7 +21,7 @@ class LnZapPrivateEvent(
|
||||
id: HexKey,
|
||||
pubKey: HexKey,
|
||||
createdAt: Long,
|
||||
tags: List<List<String>>,
|
||||
tags: Array<Array<String>>,
|
||||
content: String,
|
||||
sig: HexKey
|
||||
) : Event(id, pubKey, createdAt, kind, tags, content, sig) {
|
||||
@@ -31,7 +31,7 @@ class LnZapPrivateEvent(
|
||||
|
||||
fun create(
|
||||
signer: NostrSigner,
|
||||
tags: List<List<String>> = emptyList(),
|
||||
tags: Array<Array<String>> = emptyArray(),
|
||||
content: String = "",
|
||||
createdAt: Long = TimeUtils.now(),
|
||||
onReady: (LnZapPrivateEvent) -> Unit
|
||||
|
||||
@@ -22,7 +22,7 @@ class LnZapRequestEvent(
|
||||
id: HexKey,
|
||||
pubKey: HexKey,
|
||||
createdAt: Long,
|
||||
tags: List<List<String>>,
|
||||
tags: Array<Array<String>>,
|
||||
content: String,
|
||||
sig: HexKey
|
||||
) : Event(id, pubKey, createdAt, kind, tags, content, sig) {
|
||||
@@ -89,25 +89,25 @@ class LnZapRequestEvent(
|
||||
if (zapType == LnZapEvent.ZapType.NONZAP) return
|
||||
|
||||
var tags = listOf(
|
||||
listOf("e", originalNote.id()),
|
||||
listOf("p", toUserPubHex ?: originalNote.pubKey()),
|
||||
listOf("relays") + relays
|
||||
arrayOf("e", originalNote.id()),
|
||||
arrayOf("p", toUserPubHex ?: originalNote.pubKey()),
|
||||
arrayOf("relays") + relays
|
||||
)
|
||||
if (originalNote is AddressableEvent) {
|
||||
tags = tags + listOf(listOf("a", originalNote.address().toTag()))
|
||||
tags = tags + listOf(arrayOf("a", originalNote.address().toTag()))
|
||||
}
|
||||
if (pollOption != null && pollOption >= 0) {
|
||||
tags = tags + listOf(listOf(POLL_OPTION, pollOption.toString()))
|
||||
tags = tags + listOf(arrayOf(POLL_OPTION, pollOption.toString()))
|
||||
}
|
||||
|
||||
if (zapType == LnZapEvent.ZapType.ANONYMOUS) {
|
||||
tags = tags + listOf(listOf("anon"))
|
||||
NostrSignerInternal(KeyPair()).sign(createdAt, kind, tags, message, onReady)
|
||||
tags = tags + listOf(arrayOf("anon"))
|
||||
NostrSignerInternal(KeyPair()).sign(createdAt, kind, tags.toTypedArray(), message, onReady)
|
||||
} else if (zapType == LnZapEvent.ZapType.PRIVATE) {
|
||||
tags = tags + listOf(listOf("anon", ""))
|
||||
signer.sign(createdAt, kind, tags, message, onReady)
|
||||
tags = tags + listOf(arrayOf("anon", ""))
|
||||
signer.sign(createdAt, kind, tags.toTypedArray(), message, onReady)
|
||||
} else {
|
||||
signer.sign(createdAt, kind, tags, message, onReady)
|
||||
signer.sign(createdAt, kind, tags.toTypedArray(), message, onReady)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -122,16 +122,16 @@ class LnZapRequestEvent(
|
||||
) {
|
||||
if (zapType == LnZapEvent.ZapType.NONZAP) return
|
||||
|
||||
var tags = listOf(
|
||||
listOf("p", userHex),
|
||||
listOf("relays") + relays
|
||||
var tags = arrayOf(
|
||||
arrayOf("p", userHex),
|
||||
arrayOf("relays") + relays
|
||||
)
|
||||
|
||||
if (zapType == LnZapEvent.ZapType.ANONYMOUS) {
|
||||
tags = tags + listOf(listOf("anon", ""))
|
||||
tags += arrayOf(arrayOf("anon", ""))
|
||||
NostrSignerInternal(KeyPair()).sign(createdAt, kind, tags, message, onReady)
|
||||
} else if (zapType == LnZapEvent.ZapType.PRIVATE) {
|
||||
tags = tags + listOf(listOf("anon", ""))
|
||||
tags += arrayOf(arrayOf("anon", ""))
|
||||
signer.sign(createdAt, kind, tags, message, onReady)
|
||||
} else {
|
||||
signer.sign(createdAt, kind, tags, message, onReady)
|
||||
|
||||
@@ -13,7 +13,7 @@ class LongTextNoteEvent(
|
||||
id: HexKey,
|
||||
pubKey: HexKey,
|
||||
createdAt: Long,
|
||||
tags: List<List<String>>,
|
||||
tags: Array<Array<String>>,
|
||||
content: String,
|
||||
sig: HexKey
|
||||
) : BaseTextNoteEvent(id, pubKey, createdAt, kind, tags, content, sig), AddressableEvent {
|
||||
@@ -42,14 +42,14 @@ class LongTextNoteEvent(
|
||||
createdAt: Long = TimeUtils.now(),
|
||||
onReady: (LongTextNoteEvent) -> Unit
|
||||
) {
|
||||
val tags = mutableListOf<List<String>>()
|
||||
val tags = mutableListOf<Array<String>>()
|
||||
replyTos?.forEach {
|
||||
tags.add(listOf("e", it))
|
||||
tags.add(arrayOf("e", it))
|
||||
}
|
||||
mentions?.forEach {
|
||||
tags.add(listOf("p", it))
|
||||
tags.add(arrayOf("p", it))
|
||||
}
|
||||
signer.sign(createdAt, kind, tags, msg, onReady)
|
||||
signer.sign(createdAt, kind, tags.toTypedArray(), msg, onReady)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -123,7 +123,7 @@ class MetadataEvent(
|
||||
id: HexKey,
|
||||
pubKey: HexKey,
|
||||
createdAt: Long,
|
||||
tags: List<List<String>>,
|
||||
tags: Array<Array<String>>,
|
||||
content: String,
|
||||
sig: HexKey
|
||||
) : Event(id, pubKey, createdAt, kind, tags, content, sig) {
|
||||
@@ -157,13 +157,13 @@ class MetadataEvent(
|
||||
createdAt: Long = TimeUtils.now(),
|
||||
onReady: (MetadataEvent) -> Unit
|
||||
) {
|
||||
val tags = mutableListOf<List<String>>()
|
||||
val tags = mutableListOf<Array<String>>()
|
||||
|
||||
identities.forEach {
|
||||
tags.add(listOf("i", it.platformIdentity(), it.proof))
|
||||
tags.add(arrayOf("i", it.platformIdentity(), it.proof))
|
||||
}
|
||||
|
||||
signer.sign(createdAt, kind, tags, contactMetaData, onReady)
|
||||
signer.sign(createdAt, kind, tags.toTypedArray(), contactMetaData, onReady)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -18,7 +18,7 @@ class MuteListEvent(
|
||||
id: HexKey,
|
||||
pubKey: HexKey,
|
||||
createdAt: Long,
|
||||
tags: List<List<String>>,
|
||||
tags: Array<Array<String>>,
|
||||
content: String,
|
||||
sig: HexKey
|
||||
) : GeneralListEvent(id, pubKey, createdAt, kind, tags, content, sig) {
|
||||
@@ -61,10 +61,10 @@ class MuteListEvent(
|
||||
|
||||
fun createListWithTag(key: String, tag: String, isPrivate: Boolean, signer: NostrSigner, createdAt: Long = TimeUtils.now(), onReady: (MuteListEvent) -> Unit) {
|
||||
if (isPrivate) {
|
||||
encryptTags(listOf(listOf(key, tag)), signer) { encryptedTags ->
|
||||
encryptTags(arrayOf(arrayOf(key, tag)), signer) { encryptedTags ->
|
||||
create(
|
||||
content = encryptedTags,
|
||||
tags = emptyList(),
|
||||
tags = emptyArray(),
|
||||
signer = signer,
|
||||
createdAt = createdAt,
|
||||
onReady = onReady
|
||||
@@ -73,7 +73,7 @@ class MuteListEvent(
|
||||
} else {
|
||||
create(
|
||||
content = "",
|
||||
tags = listOf(listOf(key, tag)),
|
||||
tags = arrayOf(arrayOf(key, tag)),
|
||||
signer = signer,
|
||||
createdAt = createdAt,
|
||||
onReady = onReady
|
||||
@@ -95,7 +95,7 @@ class MuteListEvent(
|
||||
encryptTags(
|
||||
privateTags = privateTags.plus(
|
||||
listPubKeyHex.map {
|
||||
listOf("p", it)
|
||||
arrayOf("p", it)
|
||||
}
|
||||
),
|
||||
signer = signer
|
||||
@@ -114,7 +114,7 @@ class MuteListEvent(
|
||||
content = earlierVersion.content,
|
||||
tags = earlierVersion.tags.plus(
|
||||
listPubKeyHex.map {
|
||||
listOf("p", it)
|
||||
arrayOf("p", it)
|
||||
}
|
||||
),
|
||||
signer = signer,
|
||||
@@ -138,7 +138,7 @@ class MuteListEvent(
|
||||
if (isPrivate) {
|
||||
earlierVersion.privateTagsOrEmpty(signer) { privateTags ->
|
||||
encryptTags(
|
||||
privateTags = privateTags.plus(element = listOf(key, tag)),
|
||||
privateTags = privateTags.plus(element = arrayOf(key, tag)),
|
||||
signer = signer
|
||||
) { encryptedTags ->
|
||||
create(
|
||||
@@ -153,7 +153,7 @@ class MuteListEvent(
|
||||
} else {
|
||||
create(
|
||||
content = earlierVersion.content,
|
||||
tags = earlierVersion.tags.plus(element = listOf(key, tag)),
|
||||
tags = earlierVersion.tags.plus(element = arrayOf(key, tag)),
|
||||
signer = signer,
|
||||
createdAt = createdAt,
|
||||
onReady = onReady
|
||||
@@ -177,12 +177,12 @@ class MuteListEvent(
|
||||
if (isPrivate) {
|
||||
earlierVersion.privateTagsOrEmpty(signer) { privateTags ->
|
||||
encryptTags(
|
||||
privateTags = privateTags.filter { it.size > 1 && !(it[0] == key && it[1] == tag) },
|
||||
privateTags = privateTags.filter { it.size > 1 && !(it[0] == key && it[1] == tag) }.toTypedArray(),
|
||||
signer = signer
|
||||
) { encryptedTags ->
|
||||
create(
|
||||
content = encryptedTags,
|
||||
tags = earlierVersion.tags.filter { it.size > 1 && !(it[0] == key && it[1] == tag) },
|
||||
tags = earlierVersion.tags.filter { it.size > 1 && !(it[0] == key && it[1] == tag) }.toTypedArray(),
|
||||
signer = signer,
|
||||
createdAt = createdAt,
|
||||
onReady = onReady
|
||||
@@ -192,7 +192,7 @@ class MuteListEvent(
|
||||
} else {
|
||||
create(
|
||||
content = earlierVersion.content,
|
||||
tags = earlierVersion.tags.filter { it.size > 1 && !(it[0] == key && it[1] == tag) },
|
||||
tags = earlierVersion.tags.filter { it.size > 1 && !(it[0] == key && it[1] == tag) }.toTypedArray(),
|
||||
signer = signer,
|
||||
createdAt = createdAt,
|
||||
onReady = onReady
|
||||
@@ -204,7 +204,7 @@ class MuteListEvent(
|
||||
|
||||
fun create(
|
||||
content: String,
|
||||
tags: List<List<String>>,
|
||||
tags: Array<Array<String>>,
|
||||
signer: NostrSigner,
|
||||
createdAt: Long = TimeUtils.now(),
|
||||
onReady: (MuteListEvent) -> Unit
|
||||
|
||||
@@ -13,7 +13,7 @@ class NNSEvent(
|
||||
id: HexKey,
|
||||
pubKey: HexKey,
|
||||
createdAt: Long,
|
||||
tags: List<List<String>>,
|
||||
tags: Array<Array<String>>,
|
||||
content: String,
|
||||
sig: HexKey
|
||||
) : BaseAddressableEvent(id, pubKey, createdAt, kind, tags, content, sig) {
|
||||
@@ -29,7 +29,7 @@ class NNSEvent(
|
||||
createdAt: Long = TimeUtils.now(),
|
||||
onReady: (NNSEvent) -> Unit
|
||||
) {
|
||||
val tags = mutableListOf<List<String>>()
|
||||
val tags = emptyArray<Array<String>>()
|
||||
signer.sign(createdAt, kind, tags, "", onReady)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -15,7 +15,7 @@ class PeopleListEvent(
|
||||
id: HexKey,
|
||||
pubKey: HexKey,
|
||||
createdAt: Long,
|
||||
tags: List<List<String>>,
|
||||
tags: Array<Array<String>>,
|
||||
content: String,
|
||||
sig: HexKey
|
||||
) : GeneralListEvent(id, pubKey, createdAt, kind, tags, content, sig) {
|
||||
@@ -94,10 +94,10 @@ class PeopleListEvent(
|
||||
|
||||
fun createListWithTag(name: String, key: String, tag: String, isPrivate: Boolean, signer: NostrSigner, createdAt: Long = TimeUtils.now(), onReady: (PeopleListEvent) -> Unit) {
|
||||
if (isPrivate) {
|
||||
encryptTags(listOf(listOf(key, tag)), signer) { encryptedTags ->
|
||||
encryptTags(arrayOf(arrayOf(key, tag)), signer) { encryptedTags ->
|
||||
create(
|
||||
content = encryptedTags,
|
||||
tags = listOf(listOf("d", name)),
|
||||
tags = arrayOf(arrayOf("d", name)),
|
||||
signer = signer,
|
||||
createdAt = createdAt,
|
||||
onReady = onReady
|
||||
@@ -106,7 +106,7 @@ class PeopleListEvent(
|
||||
} else {
|
||||
create(
|
||||
content = "",
|
||||
tags = listOf(listOf("d", name), listOf(key, tag)),
|
||||
tags = arrayOf(arrayOf("d", name), arrayOf(key, tag)),
|
||||
signer = signer,
|
||||
createdAt = createdAt,
|
||||
onReady = onReady
|
||||
@@ -128,7 +128,7 @@ class PeopleListEvent(
|
||||
encryptTags(
|
||||
privateTags = privateTags.plus(
|
||||
listPubKeyHex.map {
|
||||
listOf("p", it)
|
||||
arrayOf("p", it)
|
||||
}
|
||||
),
|
||||
signer = signer
|
||||
@@ -147,7 +147,7 @@ class PeopleListEvent(
|
||||
content = earlierVersion.content,
|
||||
tags = earlierVersion.tags.plus(
|
||||
listPubKeyHex.map {
|
||||
listOf("p", it)
|
||||
arrayOf("p", it)
|
||||
}
|
||||
),
|
||||
signer = signer,
|
||||
@@ -171,7 +171,7 @@ class PeopleListEvent(
|
||||
if (isPrivate) {
|
||||
earlierVersion.privateTagsOrEmpty(signer) { privateTags ->
|
||||
encryptTags(
|
||||
privateTags = privateTags.plus(element = listOf(key, tag)),
|
||||
privateTags = privateTags.plus(element = arrayOf(key, tag)),
|
||||
signer = signer
|
||||
) { encryptedTags ->
|
||||
create(
|
||||
@@ -186,7 +186,7 @@ class PeopleListEvent(
|
||||
} else {
|
||||
create(
|
||||
content = earlierVersion.content,
|
||||
tags = earlierVersion.tags.plus(element = listOf(key, tag)),
|
||||
tags = earlierVersion.tags.plus(element = arrayOf(key, tag)),
|
||||
signer = signer,
|
||||
createdAt = createdAt,
|
||||
onReady = onReady
|
||||
@@ -210,12 +210,12 @@ class PeopleListEvent(
|
||||
if (isPrivate) {
|
||||
earlierVersion.privateTagsOrEmpty(signer) { privateTags ->
|
||||
encryptTags(
|
||||
privateTags = privateTags.filter { it.size > 1 && !(it[0] == key && it[1] == tag) },
|
||||
privateTags = privateTags.filter { it.size > 1 && !(it[0] == key && it[1] == tag) }.toTypedArray(),
|
||||
signer = signer
|
||||
) { encryptedTags ->
|
||||
create(
|
||||
content = encryptedTags,
|
||||
tags = earlierVersion.tags.filter { it.size > 1 && !(it[0] == key && it[1] == tag) },
|
||||
tags = earlierVersion.tags.filter { it.size > 1 && !(it[0] == key && it[1] == tag) }.toTypedArray(),
|
||||
signer = signer,
|
||||
createdAt = createdAt,
|
||||
onReady = onReady
|
||||
@@ -225,7 +225,7 @@ class PeopleListEvent(
|
||||
} else {
|
||||
create(
|
||||
content = earlierVersion.content,
|
||||
tags = earlierVersion.tags.filter { it.size > 1 && !(it[0] == key && it[1] == tag) },
|
||||
tags = earlierVersion.tags.filter { it.size > 1 && !(it[0] == key && it[1] == tag) }.toTypedArray(),
|
||||
signer = signer,
|
||||
createdAt = createdAt,
|
||||
onReady = onReady
|
||||
@@ -237,7 +237,7 @@ class PeopleListEvent(
|
||||
|
||||
fun create(
|
||||
content: String,
|
||||
tags: List<List<String>>,
|
||||
tags: Array<Array<String>>,
|
||||
signer: NostrSigner,
|
||||
createdAt: Long = TimeUtils.now(),
|
||||
onReady: (PeopleListEvent) -> Unit
|
||||
|
||||
@@ -13,7 +13,7 @@ class PinListEvent(
|
||||
id: HexKey,
|
||||
pubKey: HexKey,
|
||||
createdAt: Long,
|
||||
tags: List<List<String>>,
|
||||
tags: Array<Array<String>>,
|
||||
content: String,
|
||||
sig: HexKey
|
||||
) : BaseAddressableEvent(id, pubKey, createdAt, kind, tags, content, sig) {
|
||||
@@ -29,12 +29,12 @@ class PinListEvent(
|
||||
createdAt: Long = TimeUtils.now(),
|
||||
onReady: (PinListEvent) -> Unit
|
||||
) {
|
||||
val tags = mutableListOf<List<String>>()
|
||||
val tags = mutableListOf<Array<String>>()
|
||||
pins.forEach {
|
||||
tags.add(listOf("pin", it))
|
||||
tags.add(arrayOf("pin", it))
|
||||
}
|
||||
|
||||
signer.sign(createdAt, kind, tags, "", onReady)
|
||||
signer.sign(createdAt, kind, tags.toTypedArray(), "", onReady)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -19,7 +19,7 @@ class PollNoteEvent(
|
||||
id: HexKey,
|
||||
pubKey: HexKey,
|
||||
createdAt: Long,
|
||||
tags: List<List<String>>,
|
||||
tags: Array<Array<String>>,
|
||||
// ots: String?, TODO implement OTS: https://github.com/opentimestamps/java-opentimestamps
|
||||
content: String,
|
||||
sig: HexKey
|
||||
@@ -62,45 +62,45 @@ class PollNoteEvent(
|
||||
geohash: String? = null,
|
||||
onReady: (PollNoteEvent) -> Unit
|
||||
) {
|
||||
val tags = mutableListOf<List<String>>()
|
||||
val tags = mutableListOf<Array<String>>()
|
||||
replyTos?.forEach {
|
||||
tags.add(listOf("e", it))
|
||||
tags.add(arrayOf("e", it))
|
||||
}
|
||||
mentions?.forEach {
|
||||
tags.add(listOf("p", it))
|
||||
tags.add(arrayOf("p", it))
|
||||
}
|
||||
addresses?.forEach {
|
||||
tags.add(listOf("a", it.toTag()))
|
||||
tags.add(arrayOf("a", it.toTag()))
|
||||
}
|
||||
pollOptions.forEach { poll_op ->
|
||||
tags.add(listOf(POLL_OPTION, poll_op.key.toString(), poll_op.value))
|
||||
tags.add(arrayOf(POLL_OPTION, poll_op.key.toString(), poll_op.value))
|
||||
}
|
||||
valueMaximum?.let {
|
||||
tags.add(listOf(VALUE_MAXIMUM, valueMaximum.toString()))
|
||||
tags.add(arrayOf(VALUE_MAXIMUM, valueMaximum.toString()))
|
||||
}
|
||||
valueMinimum?.let {
|
||||
tags.add(listOf(VALUE_MINIMUM, valueMinimum.toString()))
|
||||
tags.add(arrayOf(VALUE_MINIMUM, valueMinimum.toString()))
|
||||
}
|
||||
consensusThreshold?.let {
|
||||
tags.add(listOf(CONSENSUS_THRESHOLD, consensusThreshold.toString()))
|
||||
tags.add(arrayOf(CONSENSUS_THRESHOLD, consensusThreshold.toString()))
|
||||
}
|
||||
closedAt?.let {
|
||||
tags.add(listOf(CLOSED_AT, closedAt.toString()))
|
||||
tags.add(arrayOf(CLOSED_AT, closedAt.toString()))
|
||||
}
|
||||
zapReceiver?.forEach {
|
||||
tags.add(listOf("zap", it.lnAddressOrPubKeyHex, it.relay ?: "", it.weight.toString()))
|
||||
tags.add(arrayOf("zap", it.lnAddressOrPubKeyHex, it.relay ?: "", it.weight.toString()))
|
||||
}
|
||||
if (markAsSensitive) {
|
||||
tags.add(listOf("content-warning", ""))
|
||||
tags.add(arrayOf("content-warning", ""))
|
||||
}
|
||||
zapRaiserAmount?.let {
|
||||
tags.add(listOf("zapraiser", "$it"))
|
||||
tags.add(arrayOf("zapraiser", "$it"))
|
||||
}
|
||||
geohash?.let {
|
||||
tags.addAll(geohashMipMap(it))
|
||||
}
|
||||
|
||||
signer.sign(createdAt, kind, tags, msg, onReady)
|
||||
signer.sign(createdAt, kind, tags.toTypedArray(), msg, onReady)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -19,7 +19,7 @@ class PrivateDmEvent(
|
||||
id: HexKey,
|
||||
pubKey: HexKey,
|
||||
createdAt: Long,
|
||||
tags: List<List<String>>,
|
||||
tags: Array<Array<String>>,
|
||||
content: String,
|
||||
sig: HexKey
|
||||
) : Event(id, pubKey, createdAt, kind, tags, content, sig), ChatroomKeyable {
|
||||
@@ -109,38 +109,38 @@ class PrivateDmEvent(
|
||||
onReady: (PrivateDmEvent) -> Unit
|
||||
) {
|
||||
val message = if (advertiseNip18) { nip18Advertisement } else { "" } + msg
|
||||
val tags = mutableListOf<List<String>>()
|
||||
val tags = mutableListOf<Array<String>>()
|
||||
publishedRecipientPubKey?.let {
|
||||
tags.add(listOf("p", publishedRecipientPubKey))
|
||||
tags.add(arrayOf("p", publishedRecipientPubKey))
|
||||
}
|
||||
replyTos?.forEach {
|
||||
tags.add(listOf("e", it))
|
||||
tags.add(arrayOf("e", it))
|
||||
}
|
||||
mentions?.forEach {
|
||||
tags.add(listOf("p", it))
|
||||
tags.add(arrayOf("p", it))
|
||||
}
|
||||
zapReceiver?.forEach {
|
||||
tags.add(listOf("zap", it.lnAddressOrPubKeyHex, it.relay ?: "", it.weight.toString()))
|
||||
tags.add(arrayOf("zap", it.lnAddressOrPubKeyHex, it.relay ?: "", it.weight.toString()))
|
||||
}
|
||||
if (markAsSensitive) {
|
||||
tags.add(listOf("content-warning", ""))
|
||||
tags.add(arrayOf("content-warning", ""))
|
||||
}
|
||||
zapRaiserAmount?.let {
|
||||
tags.add(listOf("zapraiser", "$it"))
|
||||
tags.add(arrayOf("zapraiser", "$it"))
|
||||
}
|
||||
geohash?.let {
|
||||
tags.addAll(geohashMipMap(it))
|
||||
}
|
||||
|
||||
signer.nip04Encrypt(message, recipientPubKey) { content ->
|
||||
signer.sign(createdAt, kind, tags, content, onReady)
|
||||
signer.sign(createdAt, kind, tags.toTypedArray(), content, onReady)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fun geohashMipMap(geohash: String): List<List<String>> {
|
||||
fun geohashMipMap(geohash: String): Array<Array<String>> {
|
||||
return geohash.indices.asSequence().map {
|
||||
listOf("g", geohash.substring(0, it+1))
|
||||
}.toList().reversed()
|
||||
arrayOf("g", geohash.substring(0, it+1))
|
||||
}.toList().reversed().toTypedArray()
|
||||
}
|
||||
@@ -13,7 +13,7 @@ class ReactionEvent(
|
||||
id: HexKey,
|
||||
pubKey: HexKey,
|
||||
createdAt: Long,
|
||||
tags: List<List<String>>,
|
||||
tags: Array<Array<String>>,
|
||||
content: String,
|
||||
sig: HexKey
|
||||
) : Event(id, pubKey, createdAt, kind, tags, content, sig) {
|
||||
@@ -33,25 +33,25 @@ class ReactionEvent(
|
||||
}
|
||||
|
||||
fun create(content: String, originalNote: EventInterface, signer: NostrSigner, createdAt: Long = TimeUtils.now(), onReady: (ReactionEvent) -> Unit) {
|
||||
var tags = listOf(listOf("e", originalNote.id()), listOf("p", originalNote.pubKey()))
|
||||
var tags = listOf(arrayOf("e", originalNote.id()), arrayOf("p", originalNote.pubKey()))
|
||||
if (originalNote is AddressableEvent) {
|
||||
tags = tags + listOf(listOf("a", originalNote.address().toTag()))
|
||||
tags = tags + listOf(arrayOf("a", originalNote.address().toTag()))
|
||||
}
|
||||
|
||||
return signer.sign(createdAt, kind, tags, content, onReady)
|
||||
return signer.sign(createdAt, kind, tags.toTypedArray(), content, onReady)
|
||||
}
|
||||
|
||||
fun create(emojiUrl: EmojiUrl, originalNote: EventInterface, signer: NostrSigner, createdAt: Long = TimeUtils.now(), onReady: (ReactionEvent) -> Unit) {
|
||||
val content = ":${emojiUrl.code}:"
|
||||
|
||||
var tags = listOf(
|
||||
listOf("e", originalNote.id()),
|
||||
listOf("p", originalNote.pubKey()),
|
||||
listOf("emoji", emojiUrl.code, emojiUrl.url)
|
||||
var tags = arrayOf(
|
||||
arrayOf("e", originalNote.id()),
|
||||
arrayOf("p", originalNote.pubKey()),
|
||||
arrayOf("emoji", emojiUrl.code, emojiUrl.url)
|
||||
)
|
||||
|
||||
if (originalNote is AddressableEvent) {
|
||||
tags = tags + listOf(listOf("a", originalNote.address().toTag()))
|
||||
tags += arrayOf(arrayOf("a", originalNote.address().toTag()))
|
||||
}
|
||||
|
||||
signer.sign(createdAt, kind, tags, content, onReady)
|
||||
|
||||
@@ -13,7 +13,7 @@ class RecommendRelayEvent(
|
||||
id: HexKey,
|
||||
pubKey: HexKey,
|
||||
createdAt: Long,
|
||||
tags: List<List<String>>,
|
||||
tags: Array<Array<String>>,
|
||||
content: String,
|
||||
sig: HexKey
|
||||
) : Event(id, pubKey, createdAt, kind, tags, content, sig) {
|
||||
@@ -30,8 +30,7 @@ class RecommendRelayEvent(
|
||||
onReady: (RecommendRelayEvent) -> Unit
|
||||
) {
|
||||
val content = relay.toString()
|
||||
val tags = listOf<List<String>>()
|
||||
signer.sign(createdAt, kind, tags, content, onReady)
|
||||
signer.sign(createdAt, kind, emptyArray(), content, onReady)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -12,7 +12,7 @@ class RelayAuthEvent(
|
||||
id: HexKey,
|
||||
pubKey: HexKey,
|
||||
createdAt: Long,
|
||||
tags: List<List<String>>,
|
||||
tags: Array<Array<String>>,
|
||||
content: String,
|
||||
sig: HexKey
|
||||
) : Event(id, pubKey, createdAt, kind, tags, content, sig) {
|
||||
@@ -30,9 +30,9 @@ class RelayAuthEvent(
|
||||
onReady: (RelayAuthEvent) -> Unit
|
||||
) {
|
||||
val content = ""
|
||||
val tags = listOf(
|
||||
listOf("relay", relay),
|
||||
listOf("challenge", challenge)
|
||||
val tags = arrayOf(
|
||||
arrayOf("relay", relay),
|
||||
arrayOf("challenge", challenge)
|
||||
)
|
||||
signer.sign(createdAt, kind, tags, content, onReady)
|
||||
}
|
||||
|
||||
@@ -13,7 +13,7 @@ class RelaySetEvent(
|
||||
id: HexKey,
|
||||
pubKey: HexKey,
|
||||
createdAt: Long,
|
||||
tags: List<List<String>>,
|
||||
tags: Array<Array<String>>,
|
||||
content: String,
|
||||
sig: HexKey
|
||||
) : BaseAddressableEvent(id, pubKey, createdAt, kind, tags, content, sig) {
|
||||
@@ -29,12 +29,12 @@ class RelaySetEvent(
|
||||
createdAt: Long = TimeUtils.now(),
|
||||
onReady: (RelaySetEvent) -> Unit
|
||||
) {
|
||||
val tags = mutableListOf<List<String>>()
|
||||
val tags = mutableListOf<Array<String>>()
|
||||
relays.forEach {
|
||||
tags.add(listOf("r", it))
|
||||
tags.add(arrayOf("r", it))
|
||||
}
|
||||
|
||||
signer.sign(createdAt, kind, tags, "", onReady)
|
||||
signer.sign(createdAt, kind, tags.toTypedArray(), "", onReady)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -17,7 +17,7 @@ class ReportEvent(
|
||||
id: HexKey,
|
||||
pubKey: HexKey,
|
||||
createdAt: Long,
|
||||
tags: List<List<String>>,
|
||||
tags: Array<Array<String>>,
|
||||
content: String,
|
||||
sig: HexKey
|
||||
) : Event(id, pubKey, createdAt, kind, tags, content, sig) {
|
||||
@@ -63,13 +63,13 @@ class ReportEvent(
|
||||
createdAt: Long = TimeUtils.now(),
|
||||
onReady: (ReportEvent) -> Unit
|
||||
) {
|
||||
val reportPostTag = listOf("e", reportedPost.id(), type.name.lowercase())
|
||||
val reportAuthorTag = listOf("p", reportedPost.pubKey(), type.name.lowercase())
|
||||
val reportPostTag = arrayOf("e", reportedPost.id(), type.name.lowercase())
|
||||
val reportAuthorTag = arrayOf("p", reportedPost.pubKey(), type.name.lowercase())
|
||||
|
||||
var tags: List<List<String>> = listOf(reportPostTag, reportAuthorTag)
|
||||
var tags: Array<Array<String>> = arrayOf(reportPostTag, reportAuthorTag)
|
||||
|
||||
if (reportedPost is AddressableEvent) {
|
||||
tags = tags + listOf(listOf("a", reportedPost.address().toTag()))
|
||||
tags = tags + listOf(arrayOf("a", reportedPost.address().toTag()))
|
||||
}
|
||||
|
||||
signer.sign(createdAt, kind, tags, content, onReady)
|
||||
@@ -84,9 +84,9 @@ class ReportEvent(
|
||||
) {
|
||||
val content = ""
|
||||
|
||||
val reportAuthorTag = listOf("p", reportedUser, type.name.lowercase())
|
||||
val reportAuthorTag = arrayOf("p", reportedUser, type.name.lowercase())
|
||||
|
||||
val tags: List<List<String>> = listOf(reportAuthorTag)
|
||||
val tags: Array<Array<String>> = arrayOf(reportAuthorTag)
|
||||
signer.sign(createdAt, kind, tags, content, onReady)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -13,7 +13,7 @@ class RepostEvent(
|
||||
id: HexKey,
|
||||
pubKey: HexKey,
|
||||
createdAt: Long,
|
||||
tags: List<List<String>>,
|
||||
tags: Array<Array<String>>,
|
||||
content: String,
|
||||
sig: HexKey
|
||||
) : Event(id, pubKey, createdAt, kind, tags, content, sig) {
|
||||
@@ -38,13 +38,13 @@ class RepostEvent(
|
||||
) {
|
||||
val content = boostedPost.toJson()
|
||||
|
||||
val replyToPost = listOf("e", boostedPost.id())
|
||||
val replyToAuthor = listOf("p", boostedPost.pubKey())
|
||||
val replyToPost = arrayOf("e", boostedPost.id())
|
||||
val replyToAuthor = arrayOf("p", boostedPost.pubKey())
|
||||
|
||||
var tags: List<List<String>> = listOf(replyToPost, replyToAuthor)
|
||||
var tags: Array<Array<String>> = arrayOf(replyToPost, replyToAuthor)
|
||||
|
||||
if (boostedPost is AddressableEvent) {
|
||||
tags = tags + listOf(listOf("a", boostedPost.address().toTag()))
|
||||
tags = tags + listOf(arrayOf("a", boostedPost.address().toTag()))
|
||||
}
|
||||
|
||||
signer.sign(createdAt, kind, tags, content, onReady)
|
||||
|
||||
@@ -19,7 +19,7 @@ class SealedGossipEvent(
|
||||
id: HexKey,
|
||||
pubKey: HexKey,
|
||||
createdAt: Long,
|
||||
tags: List<List<String>>,
|
||||
tags: Array<Array<String>>,
|
||||
content: String,
|
||||
sig: HexKey
|
||||
): WrappedEvent(id, pubKey, createdAt, kind, tags, content, sig) {
|
||||
@@ -85,10 +85,9 @@ class SealedGossipEvent(
|
||||
onReady: (SealedGossipEvent) -> Unit
|
||||
) {
|
||||
val msg = Gossip.toJson(gossip)
|
||||
val tags = listOf<List<String>>()
|
||||
|
||||
signer.nip44Encrypt(msg, encryptTo) { content ->
|
||||
signer.sign(createdAt, kind, tags, content, onReady)
|
||||
signer.sign(createdAt, kind, emptyArray(), content, onReady)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -101,14 +100,14 @@ class Gossip(
|
||||
@JsonProperty("created_at")
|
||||
val createdAt: Long?,
|
||||
val kind: Int?,
|
||||
val tags: List<List<String>>?,
|
||||
val tags: Array<Array<String>>?,
|
||||
val content: String?
|
||||
) {
|
||||
fun mergeWith(event: SealedGossipEvent): Event {
|
||||
val newPubKey = pubKey?.ifBlank { null } ?: event.pubKey
|
||||
val newCreatedAt = if (createdAt != null && createdAt > 1000) createdAt else event.createdAt
|
||||
val newKind = kind ?: -1
|
||||
val newTags = (tags ?: emptyList()).plus(event.tags)
|
||||
val newTags = (tags ?: emptyArray()).plus(event.tags)
|
||||
val newContent = content ?: ""
|
||||
val newID = id?.ifBlank { null } ?: Event.generateId(newPubKey, newCreatedAt, newKind, newTags, newContent).toHexKey()
|
||||
val sig = ""
|
||||
|
||||
@@ -14,7 +14,7 @@ class StatusEvent(
|
||||
id: HexKey,
|
||||
pubKey: HexKey,
|
||||
createdAt: Long,
|
||||
tags: List<List<String>>,
|
||||
tags: Array<Array<String>>,
|
||||
content: String,
|
||||
sig: HexKey
|
||||
) : BaseAddressableEvent(id, pubKey, createdAt, kind, tags, content, sig) {
|
||||
@@ -30,12 +30,12 @@ class StatusEvent(
|
||||
createdAt: Long = TimeUtils.now(),
|
||||
onReady: (StatusEvent) -> Unit
|
||||
) {
|
||||
val tags = mutableListOf<List<String>>()
|
||||
val tags = mutableListOf<Array<String>>()
|
||||
|
||||
tags.add(listOf("d", type))
|
||||
expiration?.let { tags.add(listOf("expiration", it.toString())) }
|
||||
tags.add(arrayOf("d", type))
|
||||
expiration?.let { tags.add(arrayOf("expiration", it.toString())) }
|
||||
|
||||
signer.sign(createdAt, kind, tags, msg, onReady)
|
||||
signer.sign(createdAt, kind, tags.toTypedArray(), msg, onReady)
|
||||
}
|
||||
|
||||
fun update(
|
||||
@@ -57,7 +57,7 @@ class StatusEvent(
|
||||
) {
|
||||
val msg = ""
|
||||
val tags = event.tags.filter { it.size > 1 && it[0] == "d" }
|
||||
signer.sign(createdAt, kind, tags, msg, onReady)
|
||||
signer.sign(createdAt, kind, tags.toTypedArray(), msg, onReady)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -16,7 +16,7 @@ class TextNoteEvent(
|
||||
id: HexKey,
|
||||
pubKey: HexKey,
|
||||
createdAt: Long,
|
||||
tags: List<List<String>>,
|
||||
tags: Array<Array<String>>,
|
||||
content: String,
|
||||
sig: HexKey
|
||||
) : BaseTextNoteEvent(id, pubKey, createdAt, kind, tags, content, sig) {
|
||||
@@ -43,61 +43,61 @@ class TextNoteEvent(
|
||||
createdAt: Long = TimeUtils.now(),
|
||||
onReady: (TextNoteEvent) -> Unit
|
||||
) {
|
||||
val tags = mutableListOf<List<String>>()
|
||||
val tags = mutableListOf<Array<String>>()
|
||||
replyTos?.forEach {
|
||||
if (it == root) {
|
||||
tags.add(listOf("e", it, "", "root"))
|
||||
tags.add(arrayOf("e", it, "", "root"))
|
||||
} else if (it == replyingTo) {
|
||||
tags.add(listOf("e", it, "", "reply"))
|
||||
tags.add(arrayOf("e", it, "", "reply"))
|
||||
} else if (it in directMentions) {
|
||||
tags.add(listOf("e", it, "", "mention"))
|
||||
tags.add(arrayOf("e", it, "", "mention"))
|
||||
} else {
|
||||
tags.add(listOf("e", it))
|
||||
tags.add(arrayOf("e", it))
|
||||
}
|
||||
}
|
||||
mentions?.forEach {
|
||||
if (it in directMentions) {
|
||||
tags.add(listOf("p", it, "", "mention"))
|
||||
tags.add(arrayOf("p", it, "", "mention"))
|
||||
} else {
|
||||
tags.add(listOf("p", it))
|
||||
tags.add(arrayOf("p", it))
|
||||
}
|
||||
}
|
||||
addresses?.forEach {
|
||||
val aTag = it.toTag()
|
||||
if (aTag == root) {
|
||||
tags.add(listOf("a", aTag, "", "root"))
|
||||
tags.add(arrayOf("a", aTag, "", "root"))
|
||||
} else if (aTag == replyingTo) {
|
||||
tags.add(listOf("a", aTag, "", "reply"))
|
||||
tags.add(arrayOf("a", aTag, "", "reply"))
|
||||
} else if (aTag in directMentions) {
|
||||
tags.add(listOf("a", aTag, "", "mention"))
|
||||
tags.add(arrayOf("a", aTag, "", "mention"))
|
||||
} else {
|
||||
tags.add(listOf("a", aTag))
|
||||
tags.add(arrayOf("a", aTag))
|
||||
}
|
||||
}
|
||||
findHashtags(msg).forEach {
|
||||
tags.add(listOf("t", it))
|
||||
tags.add(listOf("t", it.lowercase()))
|
||||
tags.add(arrayOf("t", it))
|
||||
tags.add(arrayOf("t", it.lowercase()))
|
||||
}
|
||||
extraTags?.forEach {
|
||||
tags.add(listOf("t", it))
|
||||
tags.add(arrayOf("t", it))
|
||||
}
|
||||
zapReceiver?.forEach {
|
||||
tags.add(listOf("zap", it.lnAddressOrPubKeyHex, it.relay ?: "", it.weight.toString()))
|
||||
tags.add(arrayOf("zap", it.lnAddressOrPubKeyHex, it.relay ?: "", it.weight.toString()))
|
||||
}
|
||||
findURLs(msg).forEach {
|
||||
tags.add(listOf("r", it))
|
||||
tags.add(arrayOf("r", it))
|
||||
}
|
||||
if (markAsSensitive) {
|
||||
tags.add(listOf("content-warning", ""))
|
||||
tags.add(arrayOf("content-warning", ""))
|
||||
}
|
||||
zapRaiserAmount?.let {
|
||||
tags.add(listOf("zapraiser", "$it"))
|
||||
tags.add(arrayOf("zapraiser", "$it"))
|
||||
}
|
||||
geohash?.let {
|
||||
tags.addAll(geohashMipMap(it))
|
||||
}
|
||||
|
||||
signer.sign(createdAt, kind, tags, msg, onReady)
|
||||
signer.sign(createdAt, kind, tags.toTypedArray(), msg, onReady)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -11,7 +11,7 @@ import kotlinx.coroutines.withContext
|
||||
|
||||
abstract class NostrSigner(val pubKey: HexKey) {
|
||||
|
||||
abstract fun <T: Event> sign(createdAt: Long, kind: Int, tags: List<List<String>>, content: String, onReady: (T) -> Unit)
|
||||
abstract fun <T: Event> sign(createdAt: Long, kind: Int, tags: Array<Array<String>>, content: String, onReady: (T) -> Unit)
|
||||
|
||||
abstract fun nip04Encrypt(decryptedContent: String, toPublicKey: HexKey, onReady: (String)-> Unit)
|
||||
abstract fun nip04Decrypt(encryptedContent: String, fromPublicKey: HexKey, onReady: (String)-> Unit)
|
||||
|
||||
@@ -17,7 +17,7 @@ class NostrSignerExternal(
|
||||
override fun <T: Event> sign(
|
||||
createdAt: Long,
|
||||
kind: Int,
|
||||
tags: List<List<String>>,
|
||||
tags: Array<Array<String>>,
|
||||
content: String,
|
||||
onReady: (T) -> Unit
|
||||
) {
|
||||
|
||||
@@ -21,7 +21,7 @@ class NostrSignerInternal(val keyPair: KeyPair): NostrSigner(keyPair.pubKey.toHe
|
||||
override fun <T: Event> sign(
|
||||
createdAt: Long,
|
||||
kind: Int,
|
||||
tags: List<List<String>>,
|
||||
tags: Array<Array<String>>,
|
||||
content: String,
|
||||
onReady: (T)-> Unit
|
||||
) {
|
||||
@@ -37,7 +37,7 @@ class NostrSignerInternal(val keyPair: KeyPair): NostrSigner(keyPair.pubKey.toHe
|
||||
|
||||
fun isUnsignedPrivateEvent(
|
||||
kind: Int,
|
||||
tags: List<List<String>>,
|
||||
tags: Array<Array<String>>,
|
||||
): Boolean {
|
||||
return kind == LnZapRequestEvent.kind && tags.any { t -> t.size > 1 && t[0] == "anon" && t[1].isBlank() }
|
||||
}
|
||||
@@ -45,7 +45,7 @@ class NostrSignerInternal(val keyPair: KeyPair): NostrSigner(keyPair.pubKey.toHe
|
||||
fun <T: Event> signNormal(
|
||||
createdAt: Long,
|
||||
kind: Int,
|
||||
tags: List<List<String>>,
|
||||
tags: Array<Array<String>>,
|
||||
content: String,
|
||||
onReady: (T)-> Unit
|
||||
) {
|
||||
@@ -123,7 +123,7 @@ class NostrSignerInternal(val keyPair: KeyPair): NostrSigner(keyPair.pubKey.toHe
|
||||
private fun <T> signPrivateZap(
|
||||
createdAt: Long,
|
||||
kind: Int,
|
||||
tags: List<List<String>>,
|
||||
tags: Array<Array<String>>,
|
||||
content: String,
|
||||
onReady: (T)-> Unit
|
||||
) {
|
||||
@@ -138,7 +138,7 @@ class NostrSignerInternal(val keyPair: KeyPair): NostrSigner(keyPair.pubKey.toHe
|
||||
val encryptionPrivateKey =
|
||||
LnZapRequestEvent.createEncryptionPrivateKey(keyPair.privKey.toHexKey(), idToGeneratePrivateKey, createdAt)
|
||||
|
||||
val fullTagsNoAnon = tags.filter { t -> t.getOrNull(0) != "anon" }
|
||||
val fullTagsNoAnon = tags.filter { t -> t.getOrNull(0) != "anon" }.toTypedArray()
|
||||
|
||||
LnZapPrivateEvent.create(this, fullTagsNoAnon, content) {
|
||||
val noteJson = it.toJson()
|
||||
@@ -148,10 +148,10 @@ class NostrSignerInternal(val keyPair: KeyPair): NostrSigner(keyPair.pubKey.toHe
|
||||
userHex.hexToByteArray()
|
||||
)
|
||||
|
||||
val newTags = tags.filter { t -> t.getOrNull(0) != "anon" } + listOf(listOf("anon", encryptedContent))
|
||||
val newTags = tags.filter { t -> t.getOrNull(0) != "anon" } + listOf(arrayOf("anon", encryptedContent))
|
||||
val newContent = ""
|
||||
|
||||
NostrSignerInternal(KeyPair(encryptionPrivateKey)).signNormal(createdAt, kind, newTags, newContent, onReady)
|
||||
NostrSignerInternal(KeyPair(encryptionPrivateKey)).signNormal(createdAt, kind, newTags.toTypedArray(), newContent, onReady)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user