HuggingChat-Mac/Models/UserAgentBuilder.swift (57 lines of code) (raw):

// // UserAgentBuilder.swift // HuggingChat-Mac // // Created by Cyril Zakka on 8/23/24. // //https://github.com/WURFL/User-Agent-Native-apps/blob/master/swift/UABuilder.swift import Foundation import AppKit final class UserAgentBuilder { static let userAgent: String = userAgentString() //eg. Darwin/16.3.0 static func DarwinVersion() -> String { var sysinfo = utsname() uname(&sysinfo) let dv = String(bytes: Data(bytes: &sysinfo.release, count: Int(_SYS_NAMELEN)), encoding: .ascii)!.trimmingCharacters(in: .controlCharacters) return "Darwin/\(dv)" } //eg. CFNetwork/808.3 static func CFNetworkVersion() -> String { let dictionary = Bundle(identifier: "com.apple.CFNetwork")?.infoDictionary! let version = dictionary?["CFBundleShortVersionString"] as! String return "CFNetwork/\(version)" } //eg. MacBookPro18,3 static func deviceVersion() -> String { var size = 0 sysctlbyname("hw.model", nil, &size, nil, 0) var machine = [CChar](repeating: 0, count: size) sysctlbyname("hw.model", &machine, &size, nil, 0) return String(cString: machine) } //eg. arm64 static func deviceName() -> String { var sysinfo = utsname() uname(&sysinfo) return String(bytes: Data(bytes: &sysinfo.machine, count: Int(_SYS_NAMELEN)), encoding: .ascii)!.trimmingCharacters(in: .controlCharacters) } static let appVersion: String = { let dictionary = Bundle.main.infoDictionary! let version = dictionary["CFBundleShortVersionString"] as! String return "\(version)" }() static let buildNumber: String = { let dictionary = Bundle.main.infoDictionary! let build = dictionary["CFBundleVersion"] as! String return "\(build)" }() static let device: String = { var sysinfo = utsname() uname(&sysinfo) return String(bytes: Data(bytes: &sysinfo.machine, count: Int(_SYS_NAMELEN)), encoding: .ascii)!.trimmingCharacters(in: .controlCharacters) }() static let osVersion: String = { let currentDevice = ProcessInfo.processInfo return "macOS \(currentDevice.operatingSystemVersion.majorVersion).\(currentDevice.operatingSystemVersion.minorVersion)" }() //eg. MyApp/1 static func appNameAndVersion() -> String { let dictionary = Bundle.main.infoDictionary! let version = dictionary["CFBundleShortVersionString"] as! String let build = dictionary["CFBundleVersion"] as! String let name = dictionary["CFBundleName"] as! String return "\(name)/\(version)-(\(build))" } static func userAgentString() -> String { return "\(appNameAndVersion()) \(deviceName()) \(deviceVersion()) \(CFNetworkVersion()) \(DarwinVersion())" } }