1package com.peachpasswords.vault23import android.os.Parcelable4import kotlinx.parcelize.Parcelize5import kotlinx.serialization.SerialName6import kotlinx.serialization.Serializable78@Parcelize9@Serializable10data class VaultEntry(11 val id: String,12 val type: String? = null,13 val title: String,14 val username: String? = null,15 val email: String? = null,16 val password: String? = null,17 val url: String? = null,18 val additionalUrls: List<String>? = null,19 val totp: String? = null,20 val notes: String? = null,21 val breach: Int? = null,22 val passwordChangedAt: Long? = null,23 24 val passwordHistory: List<PasswordHistoryItem>? = null,25 val canary: Canary? = null,26 val createdAt: Long,27 val modifiedAt: Long,28 val deletedAt: Long? = null,29 val tags: List<String>? = null,30 31 32 33 34 35 36 37 val passkey: PasskeyData? = null,38 val signCount: Int? = null,39 val lastUsedAt: Long? = null,40 val cardholderName: String? = null,41 val cardNumber: String? = null,42 val expMonth: String? = null,43 val expYear: String? = null,44 val cvc: String? = null,45 val cardNickname: String? = null,46 47484950 @SerialName("network")51 val cardNetwork: String? = null,52 5354555657 @SerialName("last4")58 val last4: String? = null,59 val rpId: String? = null,60 val rpName: String? = null,61 val credentialId: String? = null,62 val publicKeyCose: String? = null,63 val privateKeyJwk: String? = null,64 val userHandle: String? = null,65 val userName: String? = null,66 val userDisplayName: String? = null,67 val algorithm: Int? = null,68 val aaguid: String? = null,69 val backupEligible: Boolean? = null,70 val backupState: Boolean? = null,71 val browser: String? = null,72 val transports: List<String>? = null,73) : Parcelable7475fun VaultEntry.isLogin() = type == "login" || type == null76fun VaultEntry.isNote() = type == "note"77fun VaultEntry.isCard() = type == "card"78fun VaultEntry.isDeleted() = deletedAt != null79fun VaultEntry.hasTOTP() = !totp.isNullOrBlank()80fun VaultEntry.hasPasskey() = passkey != null81fun VaultEntry.isPasskeyOnly() = hasPasskey() && password.isNullOrBlank() && totp.isNullOrBlank() && email.isNullOrBlank()82fun VaultEntry.isBreach() = (breach ?: 0) > 08384fun VaultEntry.domainKey(): String? {85 val urlStr = url ?: return null86 return try {87 val host = java.net.URL(urlStr).host88 host.removePrefix("www.")89 } catch (_: Exception) {90 null91 }92}