import Foundation /// App-spezifische Konfiguration für ManaCore. Wird von der konsumierenden /// App beim Erzeugen eines `AuthClient` injiziert. /// /// ManaCore hardcoded nichts App-Spezifisches. Bundle-ID, Auth-Server-URL /// und Keychain-Adressierung kommen ausschließlich hierüber. public protocol ManaAppConfig: Sendable { /// Basis-URL des mana-auth-Servers, z.B. `https://auth.mana.how`. var authBaseURL: URL { get } /// Keychain-Service-Identifier, üblich `ev.mana.`. Trennt /// Token-Einträge verschiedener Apps voneinander, falls keine /// shared Access-Group benutzt wird. var keychainService: String { get } /// Optional: Shared-Keychain-Access-Group für Cross-App-SSO. /// `nil` bedeutet: nur App-eigener Keychain-Zugriff. /// /// Wenn gesetzt, müssen alle teilnehmenden Apps unter derselben /// Apple-Developer-Team-ID provisioniert sein und das Entitlement /// `keychain-access-groups` mit demselben Wert tragen. var keychainAccessGroup: String? { get } } /// Standard-Implementierung von ``ManaAppConfig``. Apps können diese /// nutzen oder ein eigenes Type adoptieren. public struct DefaultManaAppConfig: ManaAppConfig { public let authBaseURL: URL public let keychainService: String public let keychainAccessGroup: String? public init( authBaseURL: URL, keychainService: String, keychainAccessGroup: String? = nil ) { self.authBaseURL = authBaseURL self.keychainService = keychainService self.keychainAccessGroup = keychainAccessGroup } }