diff --git a/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/Common.kt b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/Common.kt index c66d9d81a2..d73d87bb2c 100644 --- a/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/Common.kt +++ b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/Common.kt @@ -357,3 +357,13 @@ const val forceField = "force" const val regularPollType = "regular" const val quizPollType = "quiz" + +const val dataField = "data" +const val credentialsField = "credentials" +const val hashField = "hash" +const val translationField = "translation" +const val filesField = "files" +const val frontSideField = "front_side" +const val reverseSideField = "reverse_side" +const val selfieField = "selfie" +const val secretField = "secret" diff --git a/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/files/abstracts/TelegramMediaFile.kt b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/files/abstracts/TelegramMediaFile.kt index f0614a5f48..149391a69c 100644 --- a/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/files/abstracts/TelegramMediaFile.kt +++ b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/files/abstracts/TelegramMediaFile.kt @@ -5,6 +5,7 @@ import dev.inmo.tgbotapi.types.FileUniqueId internal const val fileIdField = "file_id" internal const val fileSizeField = "file_size" +internal const val fileDateField = "file_date" internal const val filePathField = "file_path" /** diff --git a/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/passport/EncryptedData.kt b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/passport/EncryptedData.kt new file mode 100644 index 0000000000..92953f6fee --- /dev/null +++ b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/passport/EncryptedData.kt @@ -0,0 +1,20 @@ +package dev.inmo.tgbotapi.types.passport + +import dev.inmo.tgbotapi.types.* +import kotlinx.serialization.SerialName +import kotlinx.serialization.Serializable + +typealias Base64EncodedData = String +typealias EncryptedAndBase64EncodedData = String +typealias EncryptedByBotRSAAndBase64EncodedData = String +typealias EncryptedData = String + +@Serializable +data class EncryptedCredentials( + @SerialName(dataField) + val data: EncryptedAndBase64EncodedData, + @SerialName(hashField) + val hash: Base64EncodedData, + @SerialName(secretField) + val secret: EncryptedByBotRSAAndBase64EncodedData +) diff --git a/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/passport/PassportData.kt b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/passport/PassportData.kt new file mode 100644 index 0000000000..9bf4884791 --- /dev/null +++ b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/passport/PassportData.kt @@ -0,0 +1,15 @@ +package dev.inmo.tgbotapi.types.passport + +import dev.inmo.tgbotapi.types.credentialsField +import dev.inmo.tgbotapi.types.dataField +import dev.inmo.tgbotapi.types.passport.encrypted_data.abstracts.EncryptedPassportElement +import kotlinx.serialization.SerialName +import kotlinx.serialization.Serializable + +@Serializable +data class PassportData( + @SerialName(dataField) + val data: List, + @SerialName(credentialsField) + val credentials: EncryptedCredentials +) diff --git a/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/passport/encrypted_data/Email.kt b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/passport/encrypted_data/Email.kt new file mode 100644 index 0000000000..bf641d08de --- /dev/null +++ b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/passport/encrypted_data/Email.kt @@ -0,0 +1,16 @@ +package dev.inmo.tgbotapi.types.passport.encrypted_data + +import dev.inmo.tgbotapi.types.* +import dev.inmo.tgbotapi.types.passport.Base64EncodedData +import dev.inmo.tgbotapi.types.passport.encrypted_data.abstracts.WithEmail +import kotlinx.serialization.SerialName +import kotlinx.serialization.Serializable + +@Serializable(EncryptedElementSerializer::class) +data class Email( + @SerialName(emailField) + override val email: String, + @SerialName(hashField) + override val hash: Base64EncodedData +) : WithEmail { +} \ No newline at end of file diff --git a/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/passport/encrypted_data/EncryptedAddress.kt b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/passport/encrypted_data/EncryptedAddress.kt new file mode 100644 index 0000000000..5d10c2f152 --- /dev/null +++ b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/passport/encrypted_data/EncryptedAddress.kt @@ -0,0 +1,16 @@ +package dev.inmo.tgbotapi.types.passport.encrypted_data + +import dev.inmo.tgbotapi.types.dataField +import dev.inmo.tgbotapi.types.hashField +import dev.inmo.tgbotapi.types.passport.* +import dev.inmo.tgbotapi.types.passport.encrypted_data.abstracts.WithData +import kotlinx.serialization.SerialName +import kotlinx.serialization.Serializable + +@Serializable(EncryptedElementSerializer::class) +data class EncryptedAddress( + @SerialName(dataField) + override val data: EncryptedAndBase64EncodedData, + @SerialName(hashField) + override val hash: Base64EncodedData +) : WithData diff --git a/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/passport/encrypted_data/EncryptedElementSerializer.kt b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/passport/encrypted_data/EncryptedElementSerializer.kt new file mode 100644 index 0000000000..c753cd3024 --- /dev/null +++ b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/passport/encrypted_data/EncryptedElementSerializer.kt @@ -0,0 +1,86 @@ +package dev.inmo.tgbotapi.types.passport.encrypted_data + +import dev.inmo.tgbotapi.types.hashField +import dev.inmo.tgbotapi.types.passport.encrypted_data.abstracts.* +import dev.inmo.tgbotapi.types.typeField +import dev.inmo.tgbotapi.utils.nonstrictJsonFormat +import kotlinx.serialization.KSerializer +import kotlinx.serialization.Serializer +import kotlinx.serialization.descriptors.SerialDescriptor +import kotlinx.serialization.encoding.Decoder +import kotlinx.serialization.encoding.Encoder +import kotlinx.serialization.json.* + +@Serializer(EncryptedPassportElement::class) +object EncryptedElementSerializer : KSerializer { + private val jsonSerializer = JsonObject.serializer() + override val descriptor: SerialDescriptor = jsonSerializer.descriptor + + override fun deserialize(decoder: Decoder): EncryptedPassportElement { + val json = jsonSerializer.deserialize(decoder) + return when (json[typeField] ?.jsonPrimitive ?.content) { + "personal_details" -> nonstrictJsonFormat.decodeFromJsonElement(EncryptedPersonalDetails.serializer(), json) + "passport" -> nonstrictJsonFormat.decodeFromJsonElement(CommonPassport.serializer(), json) + "driver_license" -> nonstrictJsonFormat.decodeFromJsonElement(DriverLicense.serializer(), json) + "identity_card" -> nonstrictJsonFormat.decodeFromJsonElement(IdentityCard.serializer(), json) + "internal_passport" -> nonstrictJsonFormat.decodeFromJsonElement(InternalPassport.serializer(), json) + "address" -> nonstrictJsonFormat.decodeFromJsonElement(EncryptedAddress.serializer(), json) + "utility_bill" -> nonstrictJsonFormat.decodeFromJsonElement(UtilityBill.serializer(), json) + "bank_statement" -> nonstrictJsonFormat.decodeFromJsonElement(BankStatement.serializer(), json) + "rental_agreement" -> nonstrictJsonFormat.decodeFromJsonElement(RentalAgreement.serializer(), json) + "passport_registration" -> nonstrictJsonFormat.decodeFromJsonElement(PassportRegistration.serializer(), json) + "temporary_registration" -> nonstrictJsonFormat.decodeFromJsonElement(TemporaryRegistration.serializer(), json) + "phone_number" -> nonstrictJsonFormat.decodeFromJsonElement(PhoneNumber.serializer(), json) + "email" -> nonstrictJsonFormat.decodeFromJsonElement(Email.serializer(), json) + else -> UnknownEncryptedPassportElement(json, json[hashField] ?.jsonPrimitive ?.content ?: "") + } + } + + override fun serialize(encoder: Encoder, value: EncryptedPassportElement) { + val json = when (value) { + is EncryptedPersonalDetails -> JsonObject( + nonstrictJsonFormat.encodeToJsonElement(EncryptedPersonalDetails.serializer(), value).jsonObject + (typeField to JsonPrimitive("personal_details")) + ) + is CommonPassport -> JsonObject( + nonstrictJsonFormat.encodeToJsonElement(CommonPassport.serializer(), value).jsonObject + (typeField to JsonPrimitive("passport")) + ) + is DriverLicense -> JsonObject( + nonstrictJsonFormat.encodeToJsonElement(DriverLicense.serializer(), value).jsonObject + (typeField to JsonPrimitive("driver_license")) + ) + is IdentityCard -> JsonObject( + nonstrictJsonFormat.encodeToJsonElement(IdentityCard.serializer(), value).jsonObject + (typeField to JsonPrimitive("identity_card")) + ) + is InternalPassport -> JsonObject( + nonstrictJsonFormat.encodeToJsonElement(InternalPassport.serializer(), value).jsonObject + (typeField to JsonPrimitive("internal_passport")) + ) + is EncryptedAddress -> JsonObject( + nonstrictJsonFormat.encodeToJsonElement(EncryptedAddress.serializer(), value).jsonObject + (typeField to JsonPrimitive("address")) + ) + is UtilityBill -> JsonObject( + nonstrictJsonFormat.encodeToJsonElement(UtilityBill.serializer(), value).jsonObject + (typeField to JsonPrimitive("utility_bill")) + ) + is BankStatement -> JsonObject( + nonstrictJsonFormat.encodeToJsonElement(BankStatement.serializer(), value).jsonObject + (typeField to JsonPrimitive("bank_statement")) + ) + is RentalAgreement -> JsonObject( + nonstrictJsonFormat.encodeToJsonElement(RentalAgreement.serializer(), value).jsonObject + (typeField to JsonPrimitive("rental_agreement")) + ) + is PassportRegistration -> JsonObject( + nonstrictJsonFormat.encodeToJsonElement(PassportRegistration.serializer(), value).jsonObject + (typeField to JsonPrimitive("passport_registration")) + ) + is TemporaryRegistration -> JsonObject( + nonstrictJsonFormat.encodeToJsonElement(TemporaryRegistration.serializer(), value).jsonObject + (typeField to JsonPrimitive("temporary_registration")) + ) + is PhoneNumber -> JsonObject( + nonstrictJsonFormat.encodeToJsonElement(PhoneNumber.serializer(), value).jsonObject + (typeField to JsonPrimitive("phone_number")) + ) + is Email -> JsonObject( + nonstrictJsonFormat.encodeToJsonElement(Email.serializer(), value).jsonObject + (typeField to JsonPrimitive("email")) + ) + is UnknownEncryptedPassportElement -> value.rawJson + else -> return + } + jsonSerializer.serialize(encoder, json) + } + +} diff --git a/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/passport/encrypted_data/EncryptedPersonalDetails.kt b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/passport/encrypted_data/EncryptedPersonalDetails.kt new file mode 100644 index 0000000000..76043d8ed3 --- /dev/null +++ b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/passport/encrypted_data/EncryptedPersonalDetails.kt @@ -0,0 +1,17 @@ +package dev.inmo.tgbotapi.types.passport.encrypted_data + +import dev.inmo.tgbotapi.types.dataField +import dev.inmo.tgbotapi.types.hashField +import dev.inmo.tgbotapi.types.passport.Base64EncodedData +import dev.inmo.tgbotapi.types.passport.EncryptedAndBase64EncodedData +import dev.inmo.tgbotapi.types.passport.encrypted_data.abstracts.WithData +import kotlinx.serialization.SerialName +import kotlinx.serialization.Serializable + +@Serializable(EncryptedElementSerializer::class) +data class EncryptedPersonalDetails( + @SerialName(dataField) + override val data: EncryptedAndBase64EncodedData, + @SerialName(hashField) + override val hash: Base64EncodedData +) : WithData diff --git a/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/passport/encrypted_data/Passport.kt b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/passport/encrypted_data/Passport.kt new file mode 100644 index 0000000000..c74a37d5d0 --- /dev/null +++ b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/passport/encrypted_data/Passport.kt @@ -0,0 +1,37 @@ +package dev.inmo.tgbotapi.types.passport.encrypted_data + +import dev.inmo.tgbotapi.types.* +import dev.inmo.tgbotapi.types.passport.* +import dev.inmo.tgbotapi.types.passport.encrypted_data.abstracts.* +import kotlinx.serialization.SerialName +import kotlinx.serialization.Serializable + +@Serializable(EncryptedElementSerializer::class) +sealed class Passport : WithData, WithFrontSide, WithSelfie, Translatable + +@Serializable(EncryptedElementSerializer::class) +data class CommonPassport( + @SerialName(dataField) + override val data: EncryptedAndBase64EncodedData, + @SerialName(frontSideField) + override val frontSide: PassportFile?, + @SerialName(selfieField) + override val selfie: PassportFile?, + @SerialName(translationField) + override val translations: List, + @SerialName(hashField) + override val hash: Base64EncodedData +) : Passport() +@Serializable(EncryptedElementSerializer::class) +data class InternalPassport( + @SerialName(dataField) + override val data: EncryptedAndBase64EncodedData, + @SerialName(frontSideField) + override val frontSide: PassportFile?, + @SerialName(selfieField) + override val selfie: PassportFile?, + @SerialName(translationField) + override val translations: List, + @SerialName(hashField) + override val hash: Base64EncodedData +) : Passport() diff --git a/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/passport/encrypted_data/PassportFile.kt b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/passport/encrypted_data/PassportFile.kt new file mode 100644 index 0000000000..85e5876822 --- /dev/null +++ b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/passport/encrypted_data/PassportFile.kt @@ -0,0 +1,25 @@ +package dev.inmo.tgbotapi.types.passport.encrypted_data + +import dev.inmo.tgbotapi.requests.abstracts.FileId +import dev.inmo.tgbotapi.types.* +import dev.inmo.tgbotapi.types.files.abstracts.* +import dev.inmo.tgbotapi.types.files.abstracts.fileIdField +import dev.inmo.tgbotapi.types.files.abstracts.fileSizeField +import kotlinx.serialization.SerialName +import kotlinx.serialization.Serializable + +/** + * This object represents a file uploaded to Telegram Passport. Currently all Telegram Passport files are in JPEG format + * when decrypted and don't exceed 10MB. + */ +@Serializable +data class PassportFile( + @SerialName(fileIdField) + override val fileId: FileId, + @SerialName(fileUniqueIdField) + override val fileUniqueId: FileUniqueId, + @SerialName(fileSizeField) + override val fileSize: Long, + @SerialName(fileDateField) + val uploadingDate: TelegramDate +) : TelegramMediaFile diff --git a/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/passport/encrypted_data/PhoneNumber.kt b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/passport/encrypted_data/PhoneNumber.kt new file mode 100644 index 0000000000..4e0993348e --- /dev/null +++ b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/passport/encrypted_data/PhoneNumber.kt @@ -0,0 +1,17 @@ +package dev.inmo.tgbotapi.types.passport.encrypted_data + +import dev.inmo.tgbotapi.types.hashField +import dev.inmo.tgbotapi.types.passport.Base64EncodedData +import dev.inmo.tgbotapi.types.passport.encrypted_data.abstracts.WithPhoneNumber +import dev.inmo.tgbotapi.types.phoneNumberField +import kotlinx.serialization.SerialName +import kotlinx.serialization.Serializable + +@Serializable(EncryptedElementSerializer::class) +data class PhoneNumber( + @SerialName(phoneNumberField) + override val phoneNumber: String, + @SerialName(hashField) + override val hash: Base64EncodedData +) : WithPhoneNumber { +} \ No newline at end of file diff --git a/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/passport/encrypted_data/TranslatableFilesCollection.kt b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/passport/encrypted_data/TranslatableFilesCollection.kt new file mode 100644 index 0000000000..4baf3945aa --- /dev/null +++ b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/passport/encrypted_data/TranslatableFilesCollection.kt @@ -0,0 +1,58 @@ +package dev.inmo.tgbotapi.types.passport.encrypted_data + +import dev.inmo.tgbotapi.types.* +import dev.inmo.tgbotapi.types.passport.Base64EncodedData +import dev.inmo.tgbotapi.types.passport.encrypted_data.abstracts.FilesCollection +import dev.inmo.tgbotapi.types.passport.encrypted_data.abstracts.Translatable +import kotlinx.serialization.SerialName +import kotlinx.serialization.Serializable + +@Serializable(EncryptedElementSerializer::class) +sealed class TranslatableFilesCollection : Translatable, FilesCollection + +@Serializable(EncryptedElementSerializer::class) +data class UtilityBill( + @SerialName(filesField) + override val files: List, + @SerialName(translationField) + override val translations: List, + @SerialName(hashField) + override val hash: Base64EncodedData +) : TranslatableFilesCollection() +@Serializable(EncryptedElementSerializer::class) +data class BankStatement( + @SerialName(filesField) + override val files: List, + @SerialName(translationField) + override val translations: List, + @SerialName(hashField) + override val hash: Base64EncodedData +) : TranslatableFilesCollection() +@Serializable(EncryptedElementSerializer::class) +data class RentalAgreement( + @SerialName(filesField) + override val files: List, + @SerialName(translationField) + override val translations: List, + @SerialName(hashField) + override val hash: Base64EncodedData +) : TranslatableFilesCollection() +@Serializable(EncryptedElementSerializer::class) +data class PassportRegistration( + @SerialName(filesField) + override val files: List, + @SerialName(translationField) + override val translations: List, + @SerialName(hashField) + override val hash: Base64EncodedData +) : TranslatableFilesCollection() +@Serializable(EncryptedElementSerializer::class) +data class TemporaryRegistration( + @SerialName(filesField) + override val files: List, + @SerialName(translationField) + override val translations: List, + @SerialName(hashField) + override val hash: Base64EncodedData +) : TranslatableFilesCollection() + diff --git a/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/passport/encrypted_data/TranslatableIDDocument.kt b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/passport/encrypted_data/TranslatableIDDocument.kt new file mode 100644 index 0000000000..3670018507 --- /dev/null +++ b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/passport/encrypted_data/TranslatableIDDocument.kt @@ -0,0 +1,43 @@ +package dev.inmo.tgbotapi.types.passport.encrypted_data + +import dev.inmo.tgbotapi.types.* +import dev.inmo.tgbotapi.types.passport.Base64EncodedData +import dev.inmo.tgbotapi.types.passport.EncryptedAndBase64EncodedData +import dev.inmo.tgbotapi.types.passport.encrypted_data.abstracts.* +import kotlinx.serialization.SerialName +import kotlinx.serialization.Serializable + +@Serializable(EncryptedElementSerializer::class) +sealed class TranslatableIDDocument : WithData, WithFrontSide, WithReverseSide, WithSelfie, Translatable + +@Serializable(EncryptedElementSerializer::class) +data class DriverLicense( + @SerialName(dataField) + override val data: EncryptedAndBase64EncodedData, + @SerialName(frontSideField) + override val frontSide: PassportFile?, + @SerialName(reverseSideField) + override val reverseSide: PassportFile?, + @SerialName(selfieField) + override val selfie: PassportFile?, + @SerialName(translationField) + override val translations: List, + @SerialName(hashField) + override val hash: Base64EncodedData +) : TranslatableIDDocument() + +@Serializable(EncryptedElementSerializer::class) +data class IdentityCard( + @SerialName(dataField) + override val data: EncryptedAndBase64EncodedData, + @SerialName(frontSideField) + override val frontSide: PassportFile?, + @SerialName(reverseSideField) + override val reverseSide: PassportFile?, + @SerialName(selfieField) + override val selfie: PassportFile?, + @SerialName(translationField) + override val translations: List, + @SerialName(hashField) + override val hash: Base64EncodedData +) : TranslatableIDDocument() diff --git a/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/passport/encrypted_data/abstracts/EncryptedPassportElement.kt b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/passport/encrypted_data/abstracts/EncryptedPassportElement.kt new file mode 100644 index 0000000000..cce51ce039 --- /dev/null +++ b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/passport/encrypted_data/abstracts/EncryptedPassportElement.kt @@ -0,0 +1,17 @@ +package dev.inmo.tgbotapi.types.passport.encrypted_data.abstracts + +import dev.inmo.tgbotapi.types.passport.Base64EncodedData +import dev.inmo.tgbotapi.types.passport.encrypted_data.EncryptedElementSerializer +import kotlinx.serialization.Serializable +import kotlinx.serialization.json.JsonObject + +@Serializable(EncryptedElementSerializer::class) +interface EncryptedPassportElement { + val hash: Base64EncodedData +} + +@Serializable(EncryptedElementSerializer::class) +data class UnknownEncryptedPassportElement( + val rawJson: JsonObject, + override val hash: Base64EncodedData +) : EncryptedPassportElement diff --git a/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/passport/encrypted_data/abstracts/FilesCollection.kt b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/passport/encrypted_data/abstracts/FilesCollection.kt new file mode 100644 index 0000000000..aa58eb3ecc --- /dev/null +++ b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/passport/encrypted_data/abstracts/FilesCollection.kt @@ -0,0 +1,10 @@ +package dev.inmo.tgbotapi.types.passport.encrypted_data.abstracts + +import dev.inmo.tgbotapi.types.passport.encrypted_data.EncryptedElementSerializer +import dev.inmo.tgbotapi.types.passport.encrypted_data.PassportFile +import kotlinx.serialization.Serializable + +@Serializable(EncryptedElementSerializer::class) +interface FilesCollection : EncryptedPassportElement { + val files: List +} \ No newline at end of file diff --git a/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/passport/encrypted_data/abstracts/Translatable.kt b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/passport/encrypted_data/abstracts/Translatable.kt new file mode 100644 index 0000000000..0e7d7f0af9 --- /dev/null +++ b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/passport/encrypted_data/abstracts/Translatable.kt @@ -0,0 +1,10 @@ +package dev.inmo.tgbotapi.types.passport.encrypted_data.abstracts + +import dev.inmo.tgbotapi.types.passport.encrypted_data.EncryptedElementSerializer +import dev.inmo.tgbotapi.types.passport.encrypted_data.PassportFile +import kotlinx.serialization.Serializable + +@Serializable(EncryptedElementSerializer::class) +interface Translatable : EncryptedPassportElement { + val translations: List +} \ No newline at end of file diff --git a/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/passport/encrypted_data/abstracts/WithData.kt b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/passport/encrypted_data/abstracts/WithData.kt new file mode 100644 index 0000000000..23e63f5013 --- /dev/null +++ b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/passport/encrypted_data/abstracts/WithData.kt @@ -0,0 +1,10 @@ +package dev.inmo.tgbotapi.types.passport.encrypted_data.abstracts + +import dev.inmo.tgbotapi.types.passport.EncryptedAndBase64EncodedData +import dev.inmo.tgbotapi.types.passport.encrypted_data.EncryptedElementSerializer +import kotlinx.serialization.Serializable + +@Serializable(EncryptedElementSerializer::class) +interface WithData : EncryptedPassportElement { + val data: EncryptedAndBase64EncodedData +} \ No newline at end of file diff --git a/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/passport/encrypted_data/abstracts/WithEmail.kt b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/passport/encrypted_data/abstracts/WithEmail.kt new file mode 100644 index 0000000000..57b069a55f --- /dev/null +++ b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/passport/encrypted_data/abstracts/WithEmail.kt @@ -0,0 +1,9 @@ +package dev.inmo.tgbotapi.types.passport.encrypted_data.abstracts + +import dev.inmo.tgbotapi.types.passport.encrypted_data.EncryptedElementSerializer +import kotlinx.serialization.Serializable + +@Serializable(EncryptedElementSerializer::class) +interface WithEmail : EncryptedPassportElement { + val email: String +} \ No newline at end of file diff --git a/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/passport/encrypted_data/abstracts/WithFrontSide.kt b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/passport/encrypted_data/abstracts/WithFrontSide.kt new file mode 100644 index 0000000000..400ffae9cd --- /dev/null +++ b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/passport/encrypted_data/abstracts/WithFrontSide.kt @@ -0,0 +1,10 @@ +package dev.inmo.tgbotapi.types.passport.encrypted_data.abstracts + +import dev.inmo.tgbotapi.types.passport.encrypted_data.EncryptedElementSerializer +import dev.inmo.tgbotapi.types.passport.encrypted_data.PassportFile +import kotlinx.serialization.Serializable + +@Serializable(EncryptedElementSerializer::class) +interface WithFrontSide : EncryptedPassportElement { + val frontSide: PassportFile? +} \ No newline at end of file diff --git a/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/passport/encrypted_data/abstracts/WithPhoneNumber.kt b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/passport/encrypted_data/abstracts/WithPhoneNumber.kt new file mode 100644 index 0000000000..47e1ecdf30 --- /dev/null +++ b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/passport/encrypted_data/abstracts/WithPhoneNumber.kt @@ -0,0 +1,9 @@ +package dev.inmo.tgbotapi.types.passport.encrypted_data.abstracts + +import dev.inmo.tgbotapi.types.passport.encrypted_data.EncryptedElementSerializer +import kotlinx.serialization.Serializable + +@Serializable(EncryptedElementSerializer::class) +interface WithPhoneNumber : EncryptedPassportElement { + val phoneNumber: String +} \ No newline at end of file diff --git a/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/passport/encrypted_data/abstracts/WithReverseSide.kt b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/passport/encrypted_data/abstracts/WithReverseSide.kt new file mode 100644 index 0000000000..059b517955 --- /dev/null +++ b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/passport/encrypted_data/abstracts/WithReverseSide.kt @@ -0,0 +1,10 @@ +package dev.inmo.tgbotapi.types.passport.encrypted_data.abstracts + +import dev.inmo.tgbotapi.types.passport.encrypted_data.EncryptedElementSerializer +import dev.inmo.tgbotapi.types.passport.encrypted_data.PassportFile +import kotlinx.serialization.Serializable + +@Serializable(EncryptedElementSerializer::class) +interface WithReverseSide : EncryptedPassportElement { + val reverseSide: PassportFile? +} \ No newline at end of file diff --git a/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/passport/encrypted_data/abstracts/WithSelfie.kt b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/passport/encrypted_data/abstracts/WithSelfie.kt new file mode 100644 index 0000000000..fed2706bab --- /dev/null +++ b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/passport/encrypted_data/abstracts/WithSelfie.kt @@ -0,0 +1,10 @@ +package dev.inmo.tgbotapi.types.passport.encrypted_data.abstracts + +import dev.inmo.tgbotapi.types.passport.encrypted_data.EncryptedElementSerializer +import dev.inmo.tgbotapi.types.passport.encrypted_data.PassportFile +import kotlinx.serialization.Serializable + +@Serializable(EncryptedElementSerializer::class) +interface WithSelfie : EncryptedPassportElement { + val selfie: PassportFile? +} \ No newline at end of file