spb/zyquo-router Public MIT
One local endpoint, every AI provider — a private OpenAI-compatible LLM gateway for your Mac (170 models, 12 providers).
Swift 95.7%
Python 2.3%
Shell 1.2%
Makefile 0.9%
1//2// LocalKeysStore.swift3// Zyquo Router4//5// Author: Simon-Pierre Boucher6// Mail: contact@spboucher.ai7//8// Local router API keys (`zyquo-sk-…`): create (token shown once), rename,9// enable/disable, revoke. Hashes persist in local-keys.json; the server10// snapshot is taken at Start.11//1213import Foundation1415@MainActor16final class LocalKeysStore: ObservableObject {17 static let fileName = "local-keys.json"1819 @Published private(set) var keys: [APIKeyRecord]2021 private let persistence: PersistenceService2223 init(persistence: PersistenceService = .shared) {24 self.persistence = persistence25 keys = persistence.load([APIKeyRecord].self, from: Self.fileName) ?? []26 }2728 /// Creates a key and returns the plaintext token — shown exactly once.29 func create(name: String) -> String {30 let (record, token) = APIKeyRecord.generate(name: name.isEmpty ? "Untitled key" : name)31 keys.append(record)32 save()33 return token34 }3536 func setEnabled(_ enabled: Bool, for id: UUID) {37 guard let index = keys.firstIndex(where: { $0.id == id }) else { return }38 keys[index].enabled = enabled39 save()40 }4142 func revoke(_ id: UUID) {43 keys.removeAll { $0.id == id }44 save()45 }4647 var hasEnabledKey: Bool {48 keys.contains(where: \.enabled)49 }5051 private func save() {52 persistence.save(keys, to: Self.fileName)53 }54}55