Make mantra tags event references

This commit is contained in:
Kgothatso Ngako committed 2026-07-17 10:44:02 +02:00
1 parent 3bc12ca344
commit bdcf685537
9 files changed
+216 -45

No files matched your search

@@ -2,19 +2,38 @@ package press.mantra.compose.nostr.nip30303.tags
import com.vitorpamplona.quartz.nip01Core.core.HexKey import com.vitorpamplona.quartz.nip01Core.core.HexKey
import com.vitorpamplona.quartz.nip01Core.core.has import com.vitorpamplona.quartz.nip01Core.core.has
import com.vitorpamplona.quartz.nip01Core.relay.normalizer.NormalizedRelayUrl
import com.vitorpamplona.quartz.nip01Core.relay.normalizer.RelayUrlNormalizer
import com.vitorpamplona.quartz.nip01Core.tags.events.EventReference
import com.vitorpamplona.quartz.utils.arrayOfNotNull
import com.vitorpamplona.quartz.utils.ensure import com.vitorpamplona.quartz.utils.ensure
class ArtifactIdTag { data class ArtifactIdTag(
val ref: EventReference,
) {
constructor(eventId: String, relayHint: NormalizedRelayUrl?, pubkey: String?) : this(
EventReference(eventId, pubkey, relayHint)
)
companion object { companion object {
const val TAG_NAME = "artifactId" const val TAG_NAME = "artifactId"
fun parse(tag: Array<String>): HexKey? { fun parse(tag: Array<String>): ArtifactIdTag? {
ensure(tag.has(1)) { return null } ensure(tag.has(1)) { return null }
ensure(tag[0] == TAG_NAME) { return null } ensure(tag[0] == TAG_NAME) { return null }
ensure(tag[1].isNotBlank()) { return null } ensure(tag[1].length == 64) { return null }
return tag[1]
val relayHint = tag.getOrNull(2)?.let { RelayUrlNormalizer.normalizeOrNull(it) }
return ArtifactIdTag(tag[1], relayHint, tag.getOrNull(3))
} }
fun assemble(artifactId: HexKey) = arrayOf(TAG_NAME, artifactId) fun assemble(
eventId: HexKey,
relay: NormalizedRelayUrl?,
pubkey: String?,
) = arrayOfNotNull(TAG_NAME, eventId, relay?.url, pubkey)
fun assemble(ref: EventReference) = assemble(ref.eventId, ref.relayHint, ref.author)
} }
} }
@@ -2,19 +2,38 @@ package press.mantra.compose.nostr.nip30303.tags
import com.vitorpamplona.quartz.nip01Core.core.HexKey import com.vitorpamplona.quartz.nip01Core.core.HexKey
import com.vitorpamplona.quartz.nip01Core.core.has import com.vitorpamplona.quartz.nip01Core.core.has
import com.vitorpamplona.quartz.nip01Core.relay.normalizer.NormalizedRelayUrl
import com.vitorpamplona.quartz.nip01Core.relay.normalizer.RelayUrlNormalizer
import com.vitorpamplona.quartz.nip01Core.tags.events.EventReference
import com.vitorpamplona.quartz.utils.arrayOfNotNull
import com.vitorpamplona.quartz.utils.ensure import com.vitorpamplona.quartz.utils.ensure
class ArtifactVersionIdTag { class ArtifactVersionIdTag(
val ref: EventReference,
) {
constructor(eventId: String, relayHint: NormalizedRelayUrl?, pubkey: String?) : this(
EventReference(eventId, pubkey, relayHint)
)
companion object { companion object {
const val TAG_NAME = "artifactVersionId" const val TAG_NAME = "artifactVersionId"
fun parse(tag: Array<String>): HexKey? { fun parse(tag: Array<String>): ArtifactVersionIdTag? {
ensure(tag.has(1)) { return null } ensure(tag.has(1)) { return null }
ensure(tag[0] == TAG_NAME) { return null } ensure(tag[0] == TAG_NAME) { return null }
ensure(tag[1].isNotBlank()) { return null } ensure(tag[1].length == 64) { return null }
return tag[1]
val relayHint = tag.getOrNull(2)?.let { RelayUrlNormalizer.normalizeOrNull(it) }
return ArtifactVersionIdTag(tag[1], relayHint, tag.getOrNull(3))
} }
fun assemble(artifactVersionId: HexKey) = arrayOf(TAG_NAME, artifactVersionId) fun assemble(
eventId: HexKey,
relay: NormalizedRelayUrl?,
pubkey: String?,
) = arrayOfNotNull(TAG_NAME, eventId, relay?.url, pubkey)
fun assemble(ref: EventReference) = assemble(ref.eventId, ref.relayHint, ref.author)
} }
} }
@@ -2,19 +2,38 @@ package press.mantra.compose.nostr.nip30303.tags
import com.vitorpamplona.quartz.nip01Core.core.HexKey import com.vitorpamplona.quartz.nip01Core.core.HexKey
import com.vitorpamplona.quartz.nip01Core.core.has import com.vitorpamplona.quartz.nip01Core.core.has
import com.vitorpamplona.quartz.nip01Core.relay.normalizer.NormalizedRelayUrl
import com.vitorpamplona.quartz.nip01Core.relay.normalizer.RelayUrlNormalizer
import com.vitorpamplona.quartz.nip01Core.tags.events.EventReference
import com.vitorpamplona.quartz.utils.arrayOfNotNull
import com.vitorpamplona.quartz.utils.ensure import com.vitorpamplona.quartz.utils.ensure
class ChapterIdTag { class ChapterIdTag(
val ref: EventReference,
) {
constructor(eventId: String, relayHint: NormalizedRelayUrl?, pubkey: String?) : this(
EventReference(eventId, pubkey, relayHint)
)
companion object { companion object {
const val TAG_NAME = "chapterIdTag" const val TAG_NAME = "chapterIdTag"
fun parse(tag: Array<String>): HexKey? { fun parse(tag: Array<String>): ChapterIdTag? {
ensure(tag.has(1)) { return null } ensure(tag.has(1)) { return null }
ensure(tag[0] == TAG_NAME) { return null } ensure(tag[0] == TAG_NAME) { return null }
ensure(tag[1].isNotBlank()) { return null } ensure(tag[1].length == 64) { return null }
return tag[1]
val relayHint = tag.getOrNull(2)?.let { RelayUrlNormalizer.normalizeOrNull(it) }
return ChapterIdTag(tag[1], relayHint, tag.getOrNull(3))
} }
fun assemble(chapterIdTag: HexKey) = arrayOf(TAG_NAME, chapterIdTag) fun assemble(
eventId: HexKey,
relay: NormalizedRelayUrl?,
pubkey: String?,
) = arrayOfNotNull(TAG_NAME, eventId, relay?.url, pubkey)
fun assemble(ref: EventReference) = assemble(ref.eventId, ref.relayHint, ref.author)
} }
} }
@@ -2,19 +2,38 @@ package press.mantra.compose.nostr.nip30303.tags
import com.vitorpamplona.quartz.nip01Core.core.HexKey import com.vitorpamplona.quartz.nip01Core.core.HexKey
import com.vitorpamplona.quartz.nip01Core.core.has import com.vitorpamplona.quartz.nip01Core.core.has
import com.vitorpamplona.quartz.nip01Core.relay.normalizer.NormalizedRelayUrl
import com.vitorpamplona.quartz.nip01Core.relay.normalizer.RelayUrlNormalizer
import com.vitorpamplona.quartz.nip01Core.tags.events.EventReference
import com.vitorpamplona.quartz.utils.arrayOfNotNull
import com.vitorpamplona.quartz.utils.ensure import com.vitorpamplona.quartz.utils.ensure
class ChunkIdTag { class ChunkIdTag(
val ref: EventReference,
) {
constructor(eventId: String, relayHint: NormalizedRelayUrl?, pubkey: String?) : this(
EventReference(eventId, pubkey, relayHint)
)
companion object { companion object {
const val TAG_NAME = "chunkIdTag" const val TAG_NAME = "chunkIdTag"
fun parse(tag: Array<String>): HexKey? { fun parse(tag: Array<String>): ChunkIdTag? {
ensure(tag.has(1)) { return null } ensure(tag.has(1)) { return null }
ensure(tag[0] == TAG_NAME) { return null } ensure(tag[0] == TAG_NAME) { return null }
ensure(tag[1].isNotBlank()) { return null } ensure(tag[1].length == 64) { return null }
return tag[1]
val relayHint = tag.getOrNull(2)?.let { RelayUrlNormalizer.normalizeOrNull(it) }
return ChunkIdTag(tag[1], relayHint, tag.getOrNull(3))
} }
fun assemble(chunkIdTag: HexKey) = arrayOf(TAG_NAME, chunkIdTag) fun assemble(
eventId: HexKey,
relay: NormalizedRelayUrl?,
pubkey: String?,
) = arrayOfNotNull(TAG_NAME, eventId, relay?.url, pubkey)
fun assemble(ref: EventReference) = assemble(ref.eventId, ref.relayHint, ref.author)
} }
} }
@@ -2,19 +2,38 @@ package press.mantra.compose.nostr.nip30303.tags
import com.vitorpamplona.quartz.nip01Core.core.HexKey import com.vitorpamplona.quartz.nip01Core.core.HexKey
import com.vitorpamplona.quartz.nip01Core.core.has import com.vitorpamplona.quartz.nip01Core.core.has
import com.vitorpamplona.quartz.nip01Core.relay.normalizer.NormalizedRelayUrl
import com.vitorpamplona.quartz.nip01Core.relay.normalizer.RelayUrlNormalizer
import com.vitorpamplona.quartz.nip01Core.tags.events.EventReference
import com.vitorpamplona.quartz.utils.arrayOfNotNull
import com.vitorpamplona.quartz.utils.ensure import com.vitorpamplona.quartz.utils.ensure
class DialectIdTag { class DialectIdTag(
val ref: EventReference,
) {
constructor(eventId: String, relayHint: NormalizedRelayUrl?, pubkey: String?) : this(
EventReference(eventId, pubkey, relayHint)
)
companion object { companion object {
const val TAG_NAME = "dialectIdTag" const val TAG_NAME = "dialectIdTag"
fun parse(tag: Array<String>): HexKey? { fun parse(tag: Array<String>): DialectIdTag? {
ensure(tag.has(1)) { return null } ensure(tag.has(1)) { return null }
ensure(tag[0] == TAG_NAME) { return null } ensure(tag[0] == TAG_NAME) { return null }
ensure(tag[1].isNotBlank()) { return null } ensure(tag[1].length == 64) { return null }
return tag[1]
val relayHint = tag.getOrNull(2)?.let { RelayUrlNormalizer.normalizeOrNull(it) }
return DialectIdTag(tag[1], relayHint, tag.getOrNull(3))
} }
fun assemble(dialectIdTag: HexKey) = arrayOf(TAG_NAME, dialectIdTag) fun assemble(
eventId: HexKey,
relay: NormalizedRelayUrl?,
pubkey: String?,
) = arrayOfNotNull(TAG_NAME, eventId, relay?.url, pubkey)
fun assemble(ref: EventReference) = assemble(ref.eventId, ref.relayHint, ref.author)
} }
} }
@@ -2,19 +2,38 @@ package press.mantra.compose.nostr.nip30303.tags
import com.vitorpamplona.quartz.nip01Core.core.HexKey import com.vitorpamplona.quartz.nip01Core.core.HexKey
import com.vitorpamplona.quartz.nip01Core.core.has import com.vitorpamplona.quartz.nip01Core.core.has
import com.vitorpamplona.quartz.nip01Core.relay.normalizer.NormalizedRelayUrl
import com.vitorpamplona.quartz.nip01Core.relay.normalizer.RelayUrlNormalizer
import com.vitorpamplona.quartz.nip01Core.tags.events.EventReference
import com.vitorpamplona.quartz.utils.arrayOfNotNull
import com.vitorpamplona.quartz.utils.ensure import com.vitorpamplona.quartz.utils.ensure
class TranslationArtifactVersionIdTag { class TranslationArtifactVersionIdTag(
val ref: EventReference,
) {
constructor(eventId: String, relayHint: NormalizedRelayUrl?, pubkey: String?) : this(
EventReference(eventId, pubkey, relayHint)
)
companion object { companion object {
const val TAG_NAME = "translationArtifactVersionId" const val TAG_NAME = "translationArtifactVersionId"
fun parse(tag: Array<String>): HexKey? { fun parse(tag: Array<String>): DialectIdTag? {
ensure(tag.has(1)) { return null } ensure(tag.has(1)) { return null }
ensure(tag[0] == TAG_NAME) { return null } ensure(tag[0] == TAG_NAME) { return null }
ensure(tag[1].isNotBlank()) { return null } ensure(tag[1].length == 64) { return null }
return tag[1]
val relayHint = tag.getOrNull(2)?.let { RelayUrlNormalizer.normalizeOrNull(it) }
return DialectIdTag(tag[1], relayHint, tag.getOrNull(3))
} }
fun assemble(translationArtifactVersionId: HexKey) = arrayOf(TAG_NAME, translationArtifactVersionId) fun assemble(
eventId: HexKey,
relay: NormalizedRelayUrl?,
pubkey: String?,
) = arrayOfNotNull(TAG_NAME, eventId, relay?.url, pubkey)
fun assemble(ref: EventReference) = assemble(ref.eventId, ref.relayHint, ref.author)
} }
} }
@@ -2,19 +2,38 @@ package press.mantra.compose.nostr.nip30303.tags
import com.vitorpamplona.quartz.nip01Core.core.HexKey import com.vitorpamplona.quartz.nip01Core.core.HexKey
import com.vitorpamplona.quartz.nip01Core.core.has import com.vitorpamplona.quartz.nip01Core.core.has
import com.vitorpamplona.quartz.nip01Core.relay.normalizer.NormalizedRelayUrl
import com.vitorpamplona.quartz.nip01Core.relay.normalizer.RelayUrlNormalizer
import com.vitorpamplona.quartz.nip01Core.tags.events.EventReference
import com.vitorpamplona.quartz.utils.arrayOfNotNull
import com.vitorpamplona.quartz.utils.ensure import com.vitorpamplona.quartz.utils.ensure
class TranslationChapterIdTag { class TranslationChapterIdTag(
val ref: EventReference,
) {
constructor(eventId: String, relayHint: NormalizedRelayUrl?, pubkey: String?) : this(
EventReference(eventId, pubkey, relayHint)
)
companion object { companion object {
const val TAG_NAME = "translationChapterIdTag" const val TAG_NAME = "translationChapterIdTag"
fun parse(tag: Array<String>): HexKey? { fun parse(tag: Array<String>): TranslationChapterIdTag? {
ensure(tag.has(1)) { return null } ensure(tag.has(1)) { return null }
ensure(tag[0] == TAG_NAME) { return null } ensure(tag[0] == TAG_NAME) { return null }
ensure(tag[1].isNotBlank()) { return null } ensure(tag[1].length == 64) { return null }
return tag[1]
val relayHint = tag.getOrNull(2)?.let { RelayUrlNormalizer.normalizeOrNull(it) }
return TranslationChapterIdTag(tag[1], relayHint, tag.getOrNull(3))
} }
fun assemble(translationChapterIdTag: HexKey) = arrayOf(TAG_NAME, translationChapterIdTag) fun assemble(
eventId: HexKey,
relay: NormalizedRelayUrl?,
pubkey: String?,
) = arrayOfNotNull(TAG_NAME, eventId, relay?.url, pubkey)
fun assemble(ref: EventReference) = assemble(ref.eventId, ref.relayHint, ref.author)
} }
} }
@@ -2,19 +2,38 @@ package press.mantra.compose.nostr.nip30303.tags
import com.vitorpamplona.quartz.nip01Core.core.HexKey import com.vitorpamplona.quartz.nip01Core.core.HexKey
import com.vitorpamplona.quartz.nip01Core.core.has import com.vitorpamplona.quartz.nip01Core.core.has
import com.vitorpamplona.quartz.nip01Core.relay.normalizer.NormalizedRelayUrl
import com.vitorpamplona.quartz.nip01Core.relay.normalizer.RelayUrlNormalizer
import com.vitorpamplona.quartz.nip01Core.tags.events.EventReference
import com.vitorpamplona.quartz.utils.arrayOfNotNull
import com.vitorpamplona.quartz.utils.ensure import com.vitorpamplona.quartz.utils.ensure
class TranslationChunkIdTag { class TranslationChunkIdTag(
val ref: EventReference,
) {
constructor(eventId: String, relayHint: NormalizedRelayUrl?, pubkey: String?) : this(
EventReference(eventId, pubkey, relayHint)
)
companion object { companion object {
const val TAG_NAME = "translationChunkIdTag" const val TAG_NAME = "translationChunkIdTag"
fun parse(tag: Array<String>): HexKey? { fun parse(tag: Array<String>): TranslationChunkIdTag? {
ensure(tag.has(1)) { return null } ensure(tag.has(1)) { return null }
ensure(tag[0] == TAG_NAME) { return null } ensure(tag[0] == TAG_NAME) { return null }
ensure(tag[1].isNotBlank()) { return null } ensure(tag[1].length == 64) { return null }
return tag[1]
val relayHint = tag.getOrNull(2)?.let { RelayUrlNormalizer.normalizeOrNull(it) }
return TranslationChunkIdTag(tag[1], relayHint, tag.getOrNull(3))
} }
fun assemble(translationChunkIdTag: HexKey) = arrayOf(TAG_NAME, translationChunkIdTag) fun assemble(
eventId: HexKey,
relay: NormalizedRelayUrl?,
pubkey: String?,
) = arrayOfNotNull(TAG_NAME, eventId, relay?.url, pubkey)
fun assemble(ref: EventReference) = assemble(ref.eventId, ref.relayHint, ref.author)
} }
} }
@@ -2,19 +2,38 @@ package press.mantra.compose.nostr.nip30303.tags
import com.vitorpamplona.quartz.nip01Core.core.HexKey import com.vitorpamplona.quartz.nip01Core.core.HexKey
import com.vitorpamplona.quartz.nip01Core.core.has import com.vitorpamplona.quartz.nip01Core.core.has
import com.vitorpamplona.quartz.nip01Core.relay.normalizer.NormalizedRelayUrl
import com.vitorpamplona.quartz.nip01Core.relay.normalizer.RelayUrlNormalizer
import com.vitorpamplona.quartz.nip01Core.tags.events.EventReference
import com.vitorpamplona.quartz.utils.arrayOfNotNull
import com.vitorpamplona.quartz.utils.ensure import com.vitorpamplona.quartz.utils.ensure
class TranslationIdTag { class TranslationIdTag(
val ref: EventReference,
) {
constructor(eventId: String, relayHint: NormalizedRelayUrl?, pubkey: String?) : this(
EventReference(eventId, pubkey, relayHint)
)
companion object { companion object {
const val TAG_NAME = "translationIdTag" const val TAG_NAME = "translationIdTag"
fun parse(tag: Array<String>): HexKey? { fun parse(tag: Array<String>): TranslationIdTag? {
ensure(tag.has(1)) { return null } ensure(tag.has(1)) { return null }
ensure(tag[0] == TAG_NAME) { return null } ensure(tag[0] == TAG_NAME) { return null }
ensure(tag[1].isNotBlank()) { return null } ensure(tag[1].length == 64) { return null }
return tag[1]
val relayHint = tag.getOrNull(2)?.let { RelayUrlNormalizer.normalizeOrNull(it) }
return TranslationIdTag(tag[1], relayHint, tag.getOrNull(3))
} }
fun assemble(translationIdTag: HexKey) = arrayOf(TAG_NAME, translationIdTag) fun assemble(
eventId: HexKey,
relay: NormalizedRelayUrl?,
pubkey: String?,
) = arrayOfNotNull(TAG_NAME, eventId, relay?.url, pubkey)
fun assemble(ref: EventReference) = assemble(ref.eventId, ref.relayHint, ref.author)
} }
} }