// // Copyright 2025 Element Creations Ltd. // Copyright 2022-2025 New Vector Ltd. // // SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial. // Please see LICENSE files in the repository root for full details. // import Combine import Foundation import MatrixRustSDK enum SessionVerificationControllerProxyError: Error { case failedAcknowledgingVerificationRequest case failedAcceptingVerificationRequest case failedRequestingVerification case failedStartingSasVerification case failedApprovingVerification case failedDecliningVerification case failedCancellingVerification } enum SessionVerificationControllerProxyAction: Equatable { case receivedVerificationRequest(details: SessionVerificationRequestDetails) case acceptedVerificationRequest case startedSasVerification case receivedVerificationData([SessionVerificationEmoji]) case finished case cancelled case failed } struct SessionVerificationRequestDetails: Equatable { let senderProfile: UserProfileProxy let flowID: String let deviceID: String let deviceDisplayName: String? let firstSeenDate: Date } struct SessionVerificationEmoji: Hashable { let symbol: String let description: String var localizedDescription: String { SASL10n.localizedDescription(for: description.lowercased()) } } // sourcery: AutoMockable protocol SessionVerificationControllerProxyProtocol { var actions: PassthroughSubject { get } func acknowledgeVerificationRequest(details: SessionVerificationRequestDetails) async -> Result func acceptVerificationRequest() async -> Result func requestDeviceVerification() async -> Result func requestUserVerification(_ userID: String) async -> Result func startSasVerification() async -> Result func approveVerification() async -> Result func declineVerification() async -> Result func cancelVerification() async -> Result }