Package-level declarations

Android account lifecycle and Rust-owned product state; NIP-44; Softchat chat/account values; relay sessions and persistence results; Noise and Negentropy state; attachment metadata and streams; NIP-42/NIP-98 plans; version metadata, redacted diagnostics, and stable public failures.

Types

Link copied to clipboard

Redacted Rust-owned connection state.

Link copied to clipboard

Rust-owned Android-local address-book operations.

Link copied to clipboard

Complete conversation commands and bounded queries.

Link copied to clipboard
data class AccountDatabaseInfo(val accountId: String, val schemaVersion: Long, val revision: Long, val writeAheadLogging: Boolean)

Rust-owned database metadata.

Link copied to clipboard

Durable delivery operations; Android owns only transport execution.

Link copied to clipboard
data class AccountDescriptor(val publicKey: PublicKey, val databaseFilename: String)

Identity-derived non-secret account storage reference.

Link copied to clipboard
data class AccountDiagnostics(val schemaVersion: Long, val revision: Long, val activeRelayUrl: String?, val relayCount: UInt, val unfinishedDeliveryCount: UInt, val recoverableMediaCount: UInt, val storedEventCount: UInt, val quarantineCount: UInt, val databaseBytes: ULong)

Redacted bounded account health suitable for logs and support UI.

Link copied to clipboard
data class AccountEventNode(val projection: AccountProjection, val effectiveContent: String, val deleted: Boolean, val edited: Boolean, val replyCount: UInt)

One complete use-case node derived in Rust from authenticated truth.

Link copied to clipboard

Exact authenticated event detail and relationship queries.

Link copied to clipboard

Atomic incoming account operations.

Link copied to clipboard

Logical media operations and authenticated gallery queries.

Link copied to clipboard
data class AccountMessage(val eventId: String, val conversationId: String, val authorPublicKey: NostrPublicKey, val createdAt: Long, val content: String, val deleted: Boolean, val edited: Boolean, val replyToEventId: String?)

One authenticated message view.

Link copied to clipboard

Complete high-level messaging commands and bounded effective-message queries.

Link copied to clipboard
data class AccountMutationResult(val revision: Long)

A committed mutation carrying the revision Android should publish to observers.

Link copied to clipboard
data class AccountOperationResult(val operation: OperationSnapshot, val revision: Long, val inserted: Boolean)

Result of one idempotent outgoing operation.

Link copied to clipboard

Durable outgoing-operation state and observation.

Link copied to clipboard

Atomic outgoing account operations.

Link copied to clipboard

Effective profile and private follow-list commands.

Link copied to clipboard
data class AccountProjection(val kind: ProjectionKind, val logicalEventId: String, val outerEvent: SignedNostrEvent, val rumor: NostrRumor?, val authorPublicKey: NostrPublicKey, val createdAt: Long, val conversationId: String, val participants: List<NostrPublicKey>, val targetEventIds: List<String>, val content: String)

One bounded authenticated projection with exact protocol truth attached.

Link copied to clipboard

Durable platform-token registration.

Link copied to clipboard

Bounded authenticated use-case queries.

Link copied to clipboard

One-shot recovery from retired platform storage.

Link copied to clipboard

Rust-owned durable relay catalog for one account.

Link copied to clipboard

Account-scoped cache operations used by Android HTTP and picker executors.

Link copied to clipboard
data class AccountSettings(val schemaVersion: UInt, val quickReaction: String?, val typingIndicatorsEnabled: Boolean, val notificationContentPrivacy: NotificationContentPrivacy, val mediaService: String?, val imageUploadQuality: UploadQuality, val videoUploadQuality: UploadQuality, val preserveHdr: Boolean, val transcriptionLocale: String?, val domainReplacementRulesJson: String, val chatWallpaper: String?, val customEmojiReferences: List<CustomEmojiReference>, val savedStickerReferences: List<String>, val seasonalAppearance: String?)

Complete versioned account settings after Rust validation and merging.

Link copied to clipboard
data class AccountSettingsPatch(val quickReaction: SettingPatch<String> = SettingPatch.Unchanged, val typingIndicatorsEnabled: SettingPatch<Boolean> = SettingPatch.Unchanged, val notificationContentPrivacy: SettingPatch<NotificationContentPrivacy> = SettingPatch.Unchanged, val mediaService: SettingPatch<String> = SettingPatch.Unchanged, val imageUploadQuality: SettingPatch<UploadQuality> = SettingPatch.Unchanged, val videoUploadQuality: SettingPatch<UploadQuality> = SettingPatch.Unchanged, val preserveHdr: SettingPatch<Boolean> = SettingPatch.Unchanged, val transcriptionLocale: SettingPatch<String> = SettingPatch.Unchanged, val domainReplacementRulesJson: SettingPatch<String> = SettingPatch.Unchanged, val chatWallpaper: SettingPatch<String> = SettingPatch.Unchanged, val customEmojiReferences: SettingPatch<List<CustomEmojiReference>> = SettingPatch.Unchanged, val savedStickerReferences: SettingPatch<List<String>> = SettingPatch.Unchanged, val seasonalAppearance: SettingPatch<String> = SettingPatch.Unchanged)

Typed versioned patch; unspecified fields are preserved by Rust.

Link copied to clipboard

Versioned account-settings queries and merge patches.

Link copied to clipboard

Redacted account health for support and explicit recovery flows.

Link copied to clipboard

Rust-owned synchronization factory; Android executes only returned transport actions.

Link copied to clipboard

Low-level host-owned WebSocket boundary over durable delivery and inbox state.

Link copied to clipboard

Accepted kind-30079 contexts.

Link copied to clipboard
data class AppDataSync(val event: SignedNostrEvent, val context: AppDataContext, val json: String)

Authenticated and self-decrypted kind-30079 application data.

Link copied to clipboard
data class ApplicationData(val event: SignedNostrEvent, val identifier: String, val content: String)

Direct generic NIP-78 application data.

Link copied to clipboard

Profile or conversation field changed after a durable public upload.

Link copied to clipboard

Bounded compatibility crypto for released-client attachment values.

Link copied to clipboard

Incremental authenticated decryption for a private staged destination.

Link copied to clipboard

Incremental encryption compatible with released clients.

Link copied to clipboard
data class AttachmentMetadata(val url: String, val mimeType: String? = null, val sha256: String? = null, val originalSha256: String? = null, val byteSize: ULong? = null, val dimensions: String? = null, val name: String? = null, val magnet: String? = null, val infohash: String? = null, val blurhash: String? = null, val thumbnailUrl: String? = null, val imageUrl: String? = null, val summary: String? = null, val alt: String? = null, val fallbackUrls: List<String> = emptyList(), val service: String? = null, val encryption: String? = null, val unknownFields: List<String> = emptyList())

Canonical Softchat imeta metadata; HTTP and files remain platform-owned.

Link copied to clipboard
data class AttachmentTransformFinal(val authenticationTag: ByteArray, val plaintextSha256: String, val encryptedSha256: String, val byteCount: ULong)

Final authentication and hash values for one staged attachment transform.

Link copied to clipboard
data class ChatMessage(val rumor: NostrRumor, val participants: List<NostrPublicKey>, val relation: ChatRelation?, val attachments: List<AttachmentMetadata>, val emojiTags: List<List<String>>, val extensionTags: List<List<String>>)

Typed complete kind-14 message with exact raw rumor retained.

Link copied to clipboard
data class ChatMessageDraft(val createdAt: Long, val participants: List<NostrPublicKey>, val content: String, val relation: ChatRelation = ChatRelation.None, val attachments: List<AttachmentMetadata> = emptyList(), val emojiTags: List<List<String>> = emptyList(), val extensionTags: List<List<String>> = emptyList())

Complete canonical kind-14 writer input.

Link copied to clipboard
sealed interface ChatRelation

Canonical message relation.

Link copied to clipboard

One committed exclusive lease.

Link copied to clipboard
value class CommandId(val value: String)

Stable idempotency key for one user action.

Link copied to clipboard
data class Contact(val publicKey: NostrPublicKey, val relayHint: String = "", val localName: String = "")

One private contact-backup entry.

Link copied to clipboard
data class Conversation(val id: ConversationId, val members: List<PublicKey>, val subject: String, val subjectIcon: AttachmentMetadata?, val lastMessage: Message?, val messageCount: UInt, val unreadCount: UInt, val archived: Boolean, val pinned: Boolean, val readCursor: MessageCursor?, val forcedUnread: Boolean, val draft: ConversationDraft?, val lastActivityAt: Long)

Complete bounded conversation row consumed directly by Android UI.

Link copied to clipboard
data class ConversationCursor(val pinned: Boolean, val lastActivityAt: Long, val conversationId: ConversationId)

Lossless conversation-list paging position.

Link copied to clipboard
data class ConversationDraft(val text: String, val emojiTags: List<List<String>> = emptyList(), val spans: List<DraftSpan> = emptyList(), val replyTo: MessageId? = null, val attachmentOperationIds: List<String> = emptyList(), val updatedAt: Long = 0)

Portable draft state shared by Android and future Apple clients.

Link copied to clipboard

Stable participant-set identifier for one conversation.

Link copied to clipboard
data class ConversationPage(val conversations: List<Conversation>, val nextCursor: ConversationCursor?)

One bounded complete conversation page.

Link copied to clipboard
data class ConversationReadState(val conversationId: ConversationId, val boundary: MessageCursor?, val forcedUnread: Boolean, val updatedAt: Long, val updateId: String)

Effective versioned cross-device read state for one conversation.

Link copied to clipboard
data class ConversationSummary(val conversationId: String, val participants: List<NostrPublicKey>, val lastMessage: String, val lastCreatedAt: Long, val messageCount: UInt)

Newest-first conversation summary from authenticated durable projections.

Link copied to clipboard
data class ConversationView(val summary: ConversationSummary, val lastMessage: AccountEventNode, val subject: AccountProjection?)

Complete conversation-list use case produced by Rust in one native call.

Link copied to clipboard
data class CustomEmojiReference(val shortcode: String, val url: String)

One validated portable custom emoji saved by the account.

Link copied to clipboard
data class Deletion(val rumor: NostrRumor, val eventIds: List<NostrEventId>, val reason: String)

Typed authorized deletion request.

Link copied to clipboard

One bounded exclusive delivery lease.

Link copied to clipboard
data class DeliveryDecision(val eventId: NostrEventId, val state: DeliveryState, val category: String, val relayMessage: String)

Stable result of one relay acknowledgement.

Link copied to clipboard
data class DeliveryIntentSnapshot(val intentId: String, val operationId: String, val eventCopyId: String, val relayUrl: String, val payloadBytes: ULong, val state: DeliveryIntentState, val leaseId: String = "", val attemptCount: UInt)

Exact persisted delivery row consumed by Rust reducers.

Link copied to clipboard

Durable state of one event-copy/relay intent.

Link copied to clipboard
data class DeliveryPayload(val intentId: String, val relayUrl: String, val eventJson: String)

Exact event payload Android may write after a claim commits.

Link copied to clipboard

Durable host-owned delivery state for one authored event.

Link copied to clipboard
data class DeliveryStateMutation(val intentId: String, val state: DeliveryIntentState, val leaseId: String, val category: String, val attemptCount: UInt)

Atomic delivery-row mutation returned by Rust.

Link copied to clipboard
data class DnsRelayRecord(val target: String, val priority: UInt, val weight: UInt, val ttlSeconds: UInt)

One authenticated DNS relay record supplied by Android.

Link copied to clipboard
data class DraftSpan(val startUtf16: UInt, val endUtf16: UInt, val kind: DraftSpanKind, val value: String = "")

One validated half-open UTF-16 range in a portable draft.

Link copied to clipboard

Portable draft state shared by Android and future Apple clients.

Link copied to clipboard
data class Edit(val rumor: NostrRumor, val originalEventId: NostrEventId, val participants: List<NostrPublicKey>, val content: String, val emojiTags: List<List<String>>, val compatibilityTags: List<List<String>>)

Typed text-and-emoji edit.

Link copied to clipboard
data class Follow(val publicKey: PublicKey, val relayHint: String? = null, val localName: String? = null)

One private follow-list entry with optional relay hint and local name.

Link copied to clipboard
data class FollowList(val rumor: NostrRumor, val contacts: List<Contact>, val containedDuplicates: Boolean)

Parsed private author-copy follow list.

Link copied to clipboard
data class GenericRepost(val repost: SignedNostrEvent, val embeddedEvent: SignedNostrEvent)

Validated receive-only NIP-18 generic repost.

Link copied to clipboard
data class HttpAuthorizationPlan(val method: String, val url: String, val payloadSha256: String?, val authorizationHeader: String, val allowAuthorizationOnRedirect: Boolean)

Signed NIP-98 plan; create a fresh plan after every redirect.

Link copied to clipboard
data class IncomingChange(val kind: IncomingChangeKind, val logicalId: String, val targetMessageIds: List<MessageId>, val conversationId: ConversationId?, val author: PublicKey, val createdAt: Long)

Authenticated product change suitable for Android notifications and refresh decisions.

Link copied to clipboard

Product-level change families emitted by authenticated incoming ingestion.

Link copied to clipboard
data class IncomingResult(val insertedEventIds: List<String>, val duplicateEventIds: List<String>, val quarantinedEventIds: List<String>, val revision: Long, val affectedMessages: List<Message>, val affectedConversationIds: List<ConversationId>, val changes: List<IncomingChange>)

Durable result of one Android push or notification event batch.

Link copied to clipboard
data class IncomingRoute(val eventId: NostrEventId, val recipient: PublicKey, val envelopeKind: Nip59EnvelopeKind)

Verified account-routing hint from one signed NIP-59 outer wrapper.

Link copied to clipboard
data class IngestionBatch(val accountId: String, val events: List<SignedNostrEvent>)

One bounded atomic-ingestion request for the portable session contract.

Link copied to clipboard
data class IngestionReceipt(val accountId: String, val insertedEventIds: List<String>, val duplicateEventIds: List<String>, val quarantinedEventIds: List<String>)

Total result of one atomic ingestion transaction.

Link copied to clipboard
data class IngestionResult(val insertedEventIds: List<NostrEventId>, val duplicateEventIds: List<NostrEventId>, val quarantinedEventIds: List<NostrEventId>)

Total classification returned after one authoritative database transaction.

Link copied to clipboard
data class LinkPreviewRecord(val url: String, val title: String?, val description: String?, val imageUrl: String?, val updatedAtMillis: Long)

One bounded account-scoped HTTP link-preview cache result.

Link copied to clipboard
data class LocalContact(val publicKey: PublicKey, val name: String?, val updatedAtMillis: Long)

One Android-local address-book entry.

Link copied to clipboard

Lifecycle owner for the SDK-managed native relay transport.

Link copied to clipboard

Stable, redacted failure of the optional SDK-owned relay transport.

Link copied to clipboard
data class ManagedTransportState(val sequence: ULong, val revision: Long, val connectionState: AccountConnectionState, val idle: Boolean, val typingIndicators: List<TypingIndicator>, val synchronization: SynchronizationState?, val lastFailure: ManagedTransportFailure?, val networkAvailable: Boolean, val stopped: Boolean)

Complete observable state of the optional SDK-owned relay transport.

Link copied to clipboard
data class MediaCompletion(val operation: MediaOperation, val completedOperation: OperationResult?)

Result of acknowledging one completed attachment lease.

Link copied to clipboard

Direction of a logical platform-executed media transfer.

Link copied to clipboard
data class MediaItem(val messageId: MessageId, val conversationId: ConversationId, val author: PublicKey, val createdAt: Long, val attachment: AttachmentMetadata)

One authenticated attachment projected into a bounded media gallery.

Link copied to clipboard
data class MediaLease(val leaseId: String, val expiresAt: Long, val operation: MediaOperation)

Exclusive bounded claim for one platform media executor.

Link copied to clipboard
data class MediaOperation(val id: String, val commandId: CommandId, val conversationId: ConversationId?, val sourceMessageId: MessageId?, val direction: MediaDirection, val protection: MediaProtection, val state: MediaOperationState, val sourceFingerprint: String, val attachment: AttachmentMetadata?, val byteCount: ULong?, val attemptCount: UInt, val lastErrorCategory: String?, val updatedAt: Long)

One durable logical transfer without Android URI or WorkManager identifiers.

Link copied to clipboard
data class MediaOperationPage(val operations: List<MediaOperation>, val nextCursor: String?)

One stable page of operations that an Android executor can resume.

Link copied to clipboard

Durable state of a logical media operation.

Link copied to clipboard
data class MediaPreparation(val sourceFingerprint: String)

One private staged source selected for an attachment-dependent message.

Link copied to clipboard

Whether an upload is private encrypted content or an intentionally public asset.

Link copied to clipboard
data class Message(val id: MessageId, val conversationId: ConversationId, val author: PublicKey, val createdAt: Long, val content: MessageContent, val relation: MessageRelation, val relatedMessageId: MessageId?, val forwardedAuthor: PublicKey?, val edited: Boolean, val deleted: Boolean, val replyCount: UInt, val reactions: List<MessageReaction>)

Complete effective message consumed directly by Android UI.

Link copied to clipboard
data class MessageContent(val text: String = "", val attachments: List<AttachmentMetadata> = emptyList(), val emojiTags: List<List<String>> = emptyList())

User-authored content for a new or edited message.

Link copied to clipboard
data class MessageCursor(val createdAt: Long, val messageId: MessageId)

Lossless newest-first message paging position.

Link copied to clipboard
value class MessageId

Stable authenticated logical event identifier for one message.

Link copied to clipboard
data class MessageLocalExtras(val messageId: MessageId, val transcript: String?, val waveform: ByteArray, val updatedAt: Long)

Sparse account-local non-protocol data attached to one message.

Link copied to clipboard
data class MessagePage(val messages: List<Message>, val nextCursor: MessageCursor?)

One bounded complete message page.

Link copied to clipboard
data class MessageReaction(val id: String, val author: PublicKey, val value: String, val customEmojiUrl: String?, val createdAt: Long)

One effective non-deleted reaction.

Link copied to clipboard

Effective relationship of one authenticated message.

Link copied to clipboard
class NegentropyClient(items: List<NegentropyItem>, frameSizeLimit: ULong) : AutoCloseable

Bounded stateful NIP-77 client.

Link copied to clipboard
data class NegentropyItem(val createdAt: Long, val eventId: NostrEventId)

One item in a local NIP-77 set.

Link copied to clipboard
data class NegentropyStep(val outgoing: ByteArray?, val haveEventIds: List<NostrEventId>, val needEventIds: List<NostrEventId>, val complete: Boolean)

One stateful NIP-77 client result.

Link copied to clipboard

An immutable language-owned encrypted message.

Link copied to clipboard

A bounded, encoded NIP-44 payload with redacted diagnostics.

Link copied to clipboard
class NoiseClientHandshake(relayStaticPublicKey: ByteArray, requestChunking: Boolean = true) : AutoCloseable

Single-use exact deployed Noise NK handshake.

Link copied to clipboard

Serialized authenticated Noise framing state for low-level transport callers.

Link copied to clipboard

Notification text privacy shared across devices.

Link copied to clipboard
data class OperationResult(val operation: OperationSnapshot, val revision: Long, val inserted: Boolean, val message: Message?)

Durable result of one idempotent high-level product command.

Link copied to clipboard
data class OperationSnapshot(val operationId: String, val state: OperationState, val totalIntents: UInt, val acceptedIntents: UInt, val rejectedIntents: UInt, val queuedIntents: UInt, val activeIntents: UInt)

Aggregate operation state for UI.

Link copied to clipboard

User-visible aggregate state derived from durable delivery rows.

Link copied to clipboard
data class OutboundRelayFrame(val frame: String, val deliveryEventIds: List<NostrEventId>)

One frame removed from the relay session's bounded queue.

Link copied to clipboard
data class PendingAssetReplacement(val commandId: CommandId, val target: AssetReplacementTarget, val conversationId: ConversationId?, val state: PendingAssetReplacementState, val operation: MediaOperation, val resultOperationId: String?, val updatedAt: Long)

Durable public asset replacement with one platform upload dependency.

Link copied to clipboard

Aggregate lifecycle of an upload-dependent public asset replacement.

Link copied to clipboard
data class PendingMediaMessage(val commandId: CommandId, val conversationId: ConversationId, val content: MessageContent, val replyTo: MessageId?, val state: PendingMediaMessageState, val attachments: List<MediaOperation>, val resultMessageId: MessageId?, val updatedAt: Long)

Durable message intent with ordered platform transfer dependencies.

Link copied to clipboard

Logical dependency state for an attachment-dependent message.

Link copied to clipboard
data class Profile(val publicKey: PublicKey, val name: String?, val displayName: String?, val about: String?, val picture: String?, val website: String?, val banner: String?, val bot: Boolean?, val unknownJson: String, val localOverride: Boolean, val updatedAt: Long, val firstSeenAt: Long? = null)

Effective authenticated profile with an optional local display-name override.

Link copied to clipboard
data class ProfilePatch(val name: SettingPatch<String> = SettingPatch.Unchanged, val displayName: SettingPatch<String> = SettingPatch.Unchanged, val about: SettingPatch<String> = SettingPatch.Unchanged, val picture: SettingPatch<String> = SettingPatch.Unchanged, val website: SettingPatch<String> = SettingPatch.Unchanged, val banner: SettingPatch<String> = SettingPatch.Unchanged, val bot: SettingPatch<Boolean> = SettingPatch.Unchanged)

Typed profile merge patch; unspecified fields are preserved by Rust.

Link copied to clipboard

Authenticated projection families exposed to Android use-case queries.

Link copied to clipboard
value class PublicKey

Canonical lowercase 32-byte public key used by the product account API.

Link copied to clipboard

Released push-registration profile selected by the platform executor.

Link copied to clipboard
data class Reaction(val value: String, val customEmojiUrl: String? = null)

User-selected Unicode or custom-emoji reaction.

Link copied to clipboard
data class RelayCatalogEntry(val url: String, val createdAt: Long, val isActive: Boolean, val source: RelayCatalogSource, val isDnsDiscovered: Boolean, val isUserExcluded: Boolean, val dnsPriority: Int, val dnsWeight: Int, val dnsExpiresAt: Long)

One persisted relay catalog row.

Link copied to clipboard
data class RelayCatalogMutation(val entries: List<RelayCatalogEntry>, val revision: Long)

One committed complete relay catalog.

Link copied to clipboard
data class RelayCatalogPlan(val entries: List<RelayCatalogEntry>, val activeRelayUrl: String, val nextRefreshAt: Long, val usedFallback: Boolean)

Deterministic full relay-catalog replacement.

Link copied to clipboard

Pure Rust relay catalog, failover, and retry policy.

Link copied to clipboard

Consumer-visible ownership of one relay catalog row.

Link copied to clipboard
data class RelayDeliveryResult(val intentId: String, val kind: RelayDeliveryResultKind, val category: String)

One redacted terminal or retryable relay result.

Link copied to clipboard

Stable relay response class.

Link copied to clipboard
data class RelayEndpoint(val configuredUrl: String, val networkUrl: String, val noiseRemoteStaticKey: ByteArray)

Validated boundary between configured relay identity and its network endpoint.

Link copied to clipboard

Stable transport failure class consumed by the Rust retry policy.

Link copied to clipboard

Retry/failover action selected by Rust.

Link copied to clipboard
data class RelayRetryPlan(val action: RelayRetryAction, val delayMs: ULong, val jitterMaxMs: ULong)

Bounded reconnect or failover plan.

Link copied to clipboard

Serialized relay protocol state machine for a host-owned socket lifecycle.

Link copied to clipboard
data class RelaySessionAction(val kind: RelaySessionAction.Kind, val frame: String, val value: String, val reason: String, val event: SignedNostrEvent?, val delayMillis: ULong, val deliveryDecision: DeliveryDecision?)

Platform action emitted by the pure relay session.

Link copied to clipboard
data class RelaySessionSnapshot(val state: RelaySessionSnapshot.State, val subscriptions: List<String>, val readySubscriptions: List<String>, val deliveryEventIds: List<NostrEventId>, val deliveryStates: List<DeliveryState>, val pendingIngestionIds: List<NostrEventId>, val reconnectAttempt: UInt)

Redacted state snapshot for diagnostics only.

Link copied to clipboard
sealed interface SettingPatch<out T>

Three-state value used by typed settings patches.

Link copied to clipboard
object Softchat

Stable metadata and redacted diagnostics for the loaded artifact.

Link copied to clipboard

The Android account entry point.

Link copied to clipboard
data class SoftchatBuildFingerprint(val version: String, val revision: String, val protocolProfile: Int, val targetArchitecture: String, val targetOperatingSystem: String)

Stable, redacted build metadata safe for logs and crash reports.

Link copied to clipboard
data class SoftchatDiagnosticsSnapshot(val nip44Encryptions: ULong, val nip44Decryptions: ULong, val verifiedEvents: ULong, val signedEvents: ULong, val wrappedEnvelopes: ULong, val unwrappedEnvelopes: ULong, val rejectedOperations: ULong, val inputBytes: ULong, val outputBytes: ULong)

Monotonic process-local counters containing no keys or protocol contents.

Link copied to clipboard

Stable machine-readable Softchat failures.

Link copied to clipboard

Rust-validated typed readers for binding-owned rumors.

Link copied to clipboard

Safe, stable failures from the public Kotlin API.

Link copied to clipboard

A local Nostr identity backed by Rust-owned secret material.

Link copied to clipboard
data class SoftchatLogBatch(val events: List<SoftchatLogEvent>, val droppedCount: ULong)

One bounded delivery to SoftchatLogSink.

Link copied to clipboard

Stable subsystem category for one structured SDK diagnostic.

Link copied to clipboard
data class SoftchatLogCounter(val kind: SoftchatLogCounterKind, val value: ULong)

One SDK-named aggregate measurement.

Link copied to clipboard

Finite, redacted diagnostic classification.

Link copied to clipboard

Finite, redacted diagnostic classification.

Link copied to clipboard
data class SoftchatLogEvent(val sequence: ULong, val occurrenceCount: ULong, val level: SoftchatLogLevel, val category: SoftchatLogCategory, val operation: String, val errorCode: SoftchatErrorCode?, val durationMicros: ULong?, val revision: Long?, val itemCount: ULong?, val byteCount: ULong?, val summary: String = "Account operation completed", val direction: SoftchatLogDirection? = null, val subject: SoftchatLogSubject? = null, val source: SoftchatLogSource? = null, val relation: SoftchatLogRelation? = null, val frameClass: String? = null, val reasonCode: String? = null, val occurredAtMillis: ULong, val lastOccurredAtMillis: ULong = occurredAtMillis, val counters: List<SoftchatLogCounter> = emptyList())

One immutable, structured, redacted SDK diagnostic.

Link copied to clipboard
data class SoftchatLogging(val sink: SoftchatLogSink, val minimumLevel: SoftchatLogLevel = SoftchatLogLevel.INFO)

Optional account logging configuration.

Link copied to clipboard

Severity threshold and severity value for structured SDK diagnostics.

Link copied to clipboard

Finite, redacted diagnostic classification.

Link copied to clipboard
fun interface SoftchatLogSink

Optional application-owned receiver for batched SDK diagnostics.

Link copied to clipboard

Finite, redacted diagnostic classification.

Link copied to clipboard

Finite, redacted diagnostic classification.

Link copied to clipboard
data class StickerRecord(val name: String, val url: String, val associatedEmojis: List<String>)

One validated cached custom emoji or sticker.

Link copied to clipboard
data class StoredEventJson(val eventId: String, val eventJson: String)

Exact canonical signed event selected from Rust-owned protocol truth.

Link copied to clipboard
data class StoredIngestion(val receipt: IngestionReceipt, val revision: Long, val projections: List<AccountProjection>, val ephemeralProjections: List<AccountProjection>)

Committed ingestion result.

Link copied to clipboard
data class StoredRelayCatalogPlan(val plan: RelayCatalogPlan, val revision: Long)

One committed discovery reconciliation.

Link copied to clipboard
data class Subject(val rumor: NostrRumor, val participants: List<NostrPublicKey>, val text: String, val iconUrl: String?, val iconDimensions: String?, val emojiTags: List<List<String>>, val extensionTags: List<List<String>>)

Typed group-subject update.

Link copied to clipboard
data class SubjectDraft(val createdAt: Long, val participants: List<NostrPublicKey>, val subject: String, val emojiTags: List<List<String>> = emptyList(), val icon: AttachmentMetadata? = null, val extensionTags: List<List<String>> = emptyList())

Canonical group-subject writer input.

Link copied to clipboard

Current Rust-owned synchronization phase.

Link copied to clipboard
data class SynchronizationState(val phase: SynchronizationPhase, val untilTimestamp: Long, val pageLimit: UInt, val haveCount: UInt, val needCount: UInt, val requestedCount: UInt, val committedCount: UInt)

Redacted progress for the synchronization owned by the active transport run.

Link copied to clipboard
data class TransportAction(val runId: String, val actionId: String, val generation: ULong, val kind: TransportActionKind, val configuredUrl: String, val networkUrl: String, val noiseRemoteStaticKey: ByteArray, val textFrame: String, val delayMillis: ULong)

One correlated WebSocket effect for hosts using the low-level transport API.

Link copied to clipboard

Platform effects emitted by the Rust-owned transport state machine.

Link copied to clipboard
data class TransportBatch(val actions: List<TransportAction>, val connectionState: AccountConnectionState, val idle: Boolean, val revision: Long, val typingIndicators: List<TypingIndicator>, val synchronization: SynchronizationState?)

Complete committed transition returned to the Android system executor.

Link copied to clipboard
data class TransportResult(val runId: String, val actionId: String, val generation: ULong, val kind: TransportResultKind, val textFrame: String = "")

One result echoed to the Rust-owned transport state machine.

Link copied to clipboard

Typed outcome Android reports for one exact transport action.

Link copied to clipboard
data class Typing(val rumor: NostrRumor, val participants: List<NostrPublicKey>)

Typed ephemeral typing notification.

Link copied to clipboard
data class TypingIndicator(val conversationId: ConversationId, val author: PublicKey, val expiresAt: Long)

Authenticated remote typing state retained by Rust until expiresAt.

Link copied to clipboard

Portable media-quality preference.

Link copied to clipboard
data class UserMetadata(val rumor: NostrRumor, val name: String?, val displayName: String?, val about: String?, val picture: String?, val website: String?, val banner: String?, val bot: Boolean?, val unknownJson: String)

Parsed private metadata.

Link copied to clipboard
data class UserMetadataDraft(val createdAt: Long, val name: String? = null, val displayName: String? = null, val about: String? = null, val picture: String? = null, val website: String? = null, val banner: String? = null, val bot: Boolean? = null, val unknownJson: String = "{}")

Private user-metadata writer fields with retained unknown JSON.

Functions

Link copied to clipboard

Classify one relay OK into a stable host-facing delivery decision.

Link copied to clipboard

Create directly signed and self-encrypted kind-30079 data.

Link copied to clipboard

Create one directly signed generic NIP-78 value.

Link copied to clipboard

Create a complete canonical message through the retained identity.

Link copied to clipboard
fun SoftchatIdentity.createDeletion(participants: List<NostrPublicKey>, eventIds: List<NostrEventId>, reason: String = "", createdAt: Long): Deletion

Create a canonical private deletion request.

Link copied to clipboard
fun SoftchatIdentity.createEdit(participants: List<NostrPublicKey>, originalEventId: NostrEventId, content: String, emojiTags: List<List<String>> = emptyList(), createdAt: Long): Edit

Create a canonical text-and-emoji edit.

Link copied to clipboard

Create one canonical private author-copy contact list.

Link copied to clipboard

Create a NIP-42 authentication event bound to one relay challenge.

Link copied to clipboard

Create a NIP-98 authorization plan bound to one exact HTTP request.

Link copied to clipboard

Create a NIP-98 plan from a lowercase SHA-256 computed while streaming.

Link copied to clipboard

Create a canonical group-subject update.

Link copied to clipboard
fun SoftchatIdentity.createTyping(participants: List<NostrPublicKey>, createdAt: Long): Typing

Create an ephemeral typing notification.

Link copied to clipboard

Create canonical private kind-0 user metadata.

Link copied to clipboard

Authenticate and decrypt one self-authored kind-30079 event.

Link copied to clipboard

Start the optional SDK-owned WSS/Noise transport for this account.

Link copied to clipboard
fun validateIngestionResult(batch: IngestionBatch, result: IngestionResult): ERROR CLASS: Cannot infer argument for type parameter T

Verify that an ingestion result accounts for every requested event exactly once and contains no unknown ID.