// // V2vModels.swift // SodaLive // // Created by klaus on 2/9/26. // import Foundation struct V2VJoinRequest: Encodable { let name: String let preset: String let properties: Properties init(roomInfo: GetRoomInfoResponse, sourceLanguage: String, targetLanguage: String) { let rtcUid = UserDefaults.int(forKey: .userId) self.name = "sodalive-v2v-\(roomInfo.roomId)-\(UUID().uuidString)" self.preset = "v2vt_base" self.properties = .init( channel: roomInfo.channelName, token: roomInfo.v2vWorkerToken, agentRtcUid: "\(rtcUid)333", remoteRtcUids: ["\(roomInfo.creatorId)"], idleTimeout: 300, advancedFeatures: .init(enableRtm: false), parameters: .init(dataChannel: "datastream"), asr: .init(language: sourceLanguage), translation: .init(language: targetLanguage), tts: .init(enable: false) ) } struct Properties: Encodable { let channel: String let token: String let agentRtcUid: String let remoteRtcUids: [String] let idleTimeout: Int let advancedFeatures: AdvancedFeatures let parameters: Parameters let asr: Asr let translation: Translation let tts: Tts enum CodingKeys: String, CodingKey { case channel case token case agentRtcUid = "agent_rtc_uid" case remoteRtcUids = "remote_rtc_uids" case idleTimeout = "idle_timeout" case advancedFeatures = "advanced_features" case parameters case asr case translation case tts } } struct AdvancedFeatures: Encodable { let enableRtm: Bool enum CodingKeys: String, CodingKey { case enableRtm = "enable_rtm" } } struct Parameters: Encodable { let dataChannel: String enum CodingKeys: String, CodingKey { case dataChannel = "data_channel" } } struct Asr: Encodable { let language: String } struct Translation: Encodable { let language: String } struct Tts: Encodable { let enable: Bool } } struct V2VJoinResponse: Decodable { let agentId: String let createTs: Int let status: String enum CodingKeys: String, CodingKey { case agentId = "agent_id" case createTs = "create_ts" case status } } struct V2VLeaveResponse: Decodable { let agentId: String let status: String enum CodingKeys: String, CodingKey { case agentId = "agent_id" case status } }