SPB Git

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.4 KB · 55 lines swift
Raw Blame History
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