import Foundation import XuqmCoreSDK public struct LicenseFile: Codable, Sendable { public let appKey: String public let appName: String? public let companyName: String? public let packageName: String? public let iosBundleId: String? public let harmonyBundleName: String? public let baseUrl: String? public let serverUrl: String? public let issuedAt: String? public let expiresAt: String? public init( appKey: String, appName: String? = nil, companyName: String? = nil, packageName: String? = nil, iosBundleId: String? = nil, harmonyBundleName: String? = nil, baseUrl: String? = nil, serverUrl: String? = nil, issuedAt: String? = nil, expiresAt: String? = nil ) { self.appKey = appKey self.appName = appName self.companyName = companyName self.packageName = packageName self.iosBundleId = iosBundleId self.harmonyBundleName = harmonyBundleName self.baseUrl = baseUrl self.serverUrl = serverUrl self.issuedAt = issuedAt self.expiresAt = expiresAt } } public struct LicenseUserInfo: Sendable { public let userId: String? public let name: String? public let email: String? public let phone: String? public init(userId: String? = nil, name: String? = nil, email: String? = nil, phone: String? = nil) { self.userId = userId self.name = name self.email = email self.phone = phone } } public enum LicenseStatus: Sendable { case ok case denied case unknown } public enum LicenseResult: Sendable { case success(String) case error(String) } struct UserInfoPayload: Encodable { let userId: String? let name: String? let email: String? let phone: String? } struct RegisterRequest: Encodable { let appKey: String let deviceId: String let deviceName: String? let deviceModel: String let deviceVendor: String let osVersion: String let userInfo: UserInfoPayload? } struct VerifyRequest: Encodable { let appKey: String let deviceId: String let token: String let userInfo: UserInfoPayload? } struct RegisterResponse: Decodable { let success: Bool let token: String? let message: String? } struct VerifyResponse: Decodable { let valid: Bool let error: String? }