import Foundation import ManaCore /// App-spezifische Konfiguration für Zitare. Implementiert /// `ManaAppConfig` aus ManaCore und ergänzt die Zitare-eigene /// `apiBaseURL` (api.zitare.com, getrennt von mana-auth) sowie /// `webBaseURL` (zitare.com, für WKWebView und Universal-Links) /// und `appBaseURL` (app.zitare.com, für eingeloggte Pfade). /// /// Cutover zu .zitare.com-Subdomains am 2026-05-20. zitare.mana.how /// ist abgeschaltet; zitare-api.mana.how bleibt als Back-Compat- /// Surface erreichbar, der native Client nutzt sie aber nicht mehr. enum AppConfig { /// App-Group für Daten-Sharing zwischen App ↔ Widget ↔ ShareExt. /// Single-Source: wird in ``manaAppConfig`` und in /// `SnapshotModels.appGroup` (Widget-shared) gespiegelt. static let appGroup = "group.ev.mana.zitare" static let manaAppConfig: ManaAppConfig = DefaultManaAppConfig( authBaseURL: URL(string: "https://auth.mana.how")!, keychainService: ManaSharedKeychainGroup, // Explizit auf TeamID.BundleID, statt nil. Vermeidet Logout // bei TestFlight-Cert-Drift (siehe mana-swift-core v1.5.1). keychainAccessGroup: ManaSharedKeychainGroup, appGroup: appGroup ) /// `api.zitare.com` — API-Backend (Hono+Bun). static let apiBaseURL = URL(string: "https://api.zitare.com")! /// `zitare.com` — öffentliche statische Korpus-Domain (CC-BY-SA). /// Universal-Link-Domain für AASA. static let publicWebURL = URL(string: "https://zitare.com")! /// `app.zitare.com` — SPA-Surface, eingeloggte Pfade (Submit, /// Edit, Admin, Me). static let appBaseURL = URL(string: "https://app.zitare.com")! /// Default-URL für den WebView (öffentliches Lese-Surface). static let webBaseURL = publicWebURL /// Endpoint für den Korpus-Snapshot (Phase ζ-2). Heute noch nicht /// als statische HTTP-Datei publiziert — Aufgabe im Web-Repo: /// `apps/zitare/static/index-min.json` aus dem Snapshot-Job /// zusätzlich rauskopieren. Bis dahin schlägt der Pull mit 404 /// fehl und `SnapshotSync.tryRefresh()` macht fail-soft no-op. static let snapshotURL = webBaseURL.appendingPathComponent("index-min.json") /// User-Agent-Suffix für WKWebView (ManaWebShell). WKWebView hängt /// das an seinen Standard-UA an, ersetzt ihn nicht. #if os(macOS) static let userAgent = "ZitareNative/0.1 (macOS)" #else static let userAgent = "ZitareNative/0.1 (iOS)" #endif }