HuggingChat-Mac/Models/HuggingChatSession.swift (59 lines of code) (raw):

// // HuggingChatSession.swift // HuggingChat-Mac // // Created by Cyril Zakka on 8/23/24. // import SwiftUI import Combine import Foundation import WebKit import SafariServices import AuthenticationServices @Observable class HuggingChatSession { static let shared: HuggingChatSession = HuggingChatSession() var clientID: String? var token: String? var conversations: [Conversation] = [] var availableLLM: [LLMModel] = [] var currentConversation: String? var currentUser: HuggingChatUser? private var cancellables: [AnyCancellable] = [] init() { let cookies = HTTPCookieStorage.shared.cookies! for cookie in cookies { print("\(cookie.name): \(cookie.value)") } } func refreshLoginState() { NetworkService.getCurrentUser() .receive(on: DispatchQueue.main) .sink { [weak self] completion in switch completion { case .failure(let error): print(error.localizedDescription) self?.currentUser = nil case .finished: break } } receiveValue: { [weak self] user in self?.currentUser = user }.store(in: &cancellables) } var hfChatToken: String? { guard let token = HTTPCookieStorage.shared.cookies?.first(where: { $0.name == "hf-chat" })?.value else { return nil } return token } func logout() { let cookieStore = HTTPCookieStorage.shared.cookies for cookie in cookieStore ?? [] { let backgroundQueue = DispatchQueue(label: "background_queue", qos: .background) backgroundQueue.async { HTTPCookieStorage.shared.deleteCookie(cookie) } } DispatchQueue.main.async { [weak self] in self?.currentUser = nil self?.currentConversation = "" DataService.shared.resetLocalModels() UserDefaults.standard.setValue(false, forKey: "userLoggedIn") UserDefaults.standard.setValue(false, forKey: "onboardingDone") } } }