2022-02-11 17:24:33 +00:00
|
|
|
import Foundation
|
|
|
|
|
import Utils
|
|
|
|
|
|
|
|
|
|
public enum AppEnvironment: String {
|
|
|
|
|
case local
|
|
|
|
|
case prod
|
|
|
|
|
case demo
|
|
|
|
|
case test
|
2023-01-19 10:26:28 +00:00
|
|
|
case custom
|
2022-02-11 17:24:33 +00:00
|
|
|
|
|
|
|
|
public static let initialAppEnvironment: AppEnvironment = {
|
|
|
|
|
#if DEBUG
|
|
|
|
|
#if targetEnvironment(simulator)
|
|
|
|
|
return .demo // could also return .local here
|
|
|
|
|
#else
|
|
|
|
|
return .demo
|
|
|
|
|
#endif
|
|
|
|
|
#else
|
|
|
|
|
return .prod
|
|
|
|
|
#endif
|
|
|
|
|
}()
|
|
|
|
|
}
|
|
|
|
|
|
2025-09-24 10:37:39 +00:00
|
|
|
private let devBaseURL = "https://api-dev.omnivore.work"
|
|
|
|
|
private let demoBaseURL = "https://api-demo.omnivore.work"
|
|
|
|
|
private let prodBaseURL = "https://api-prod.omnivore.work"
|
2022-02-11 17:24:33 +00:00
|
|
|
|
2025-09-24 10:37:39 +00:00
|
|
|
private let demoTtsURL = "https://tts-demo.omnivore.work"
|
|
|
|
|
private let prodTtsURL = "https://tts-prod.omnivore.work"
|
2022-09-09 14:03:05 +00:00
|
|
|
|
2025-09-24 10:37:39 +00:00
|
|
|
private let devWebURL = "https://web-dev.omnivore.work"
|
|
|
|
|
private let demoWebURL = "https://demo.omnivore.work"
|
|
|
|
|
private let prodWebURL = "https://omnivore.work"
|
2022-03-21 20:15:03 +00:00
|
|
|
|
2023-07-31 03:02:07 +00:00
|
|
|
public enum AppEnvironmentUserDefaultKey: String {
|
2023-01-19 10:26:28 +00:00
|
|
|
case serverBaseURL = "AppEnvironment_serverBaseURL"
|
|
|
|
|
case webAppBaseURL = "AppEnvironment_webAppBaseURL"
|
|
|
|
|
case ttsBaseURL = "AppEnvironment_ttsBaseURL"
|
|
|
|
|
}
|
|
|
|
|
|
2022-02-11 17:24:33 +00:00
|
|
|
public extension AppEnvironment {
|
2023-01-19 10:26:28 +00:00
|
|
|
static func setCustom(serverBaseURL: String, webAppBaseURL: String, ttsBaseURL: String) {
|
2024-06-25 15:51:13 +00:00
|
|
|
guard let sharedDefaults = UserDefaults(suiteName: "group.app.omnivoreapp") else {
|
|
|
|
|
fatalError("Could not create shared user defaults")
|
|
|
|
|
}
|
|
|
|
|
sharedDefaults.set(
|
2023-07-31 03:02:07 +00:00
|
|
|
serverBaseURL.trimmingCharacters(in: CharacterSet.whitespacesAndNewlines),
|
|
|
|
|
forKey: AppEnvironmentUserDefaultKey.serverBaseURL.rawValue
|
|
|
|
|
)
|
2024-06-25 15:51:13 +00:00
|
|
|
sharedDefaults.set(
|
2023-07-31 03:02:07 +00:00
|
|
|
webAppBaseURL.trimmingCharacters(in: CharacterSet.whitespacesAndNewlines),
|
|
|
|
|
forKey: AppEnvironmentUserDefaultKey.webAppBaseURL.rawValue
|
|
|
|
|
)
|
2024-06-25 15:51:13 +00:00
|
|
|
sharedDefaults.set(
|
2023-07-31 03:02:07 +00:00
|
|
|
ttsBaseURL.trimmingCharacters(in: CharacterSet.whitespacesAndNewlines),
|
|
|
|
|
forKey: AppEnvironmentUserDefaultKey.ttsBaseURL.rawValue
|
|
|
|
|
)
|
2023-01-19 10:26:28 +00:00
|
|
|
}
|
|
|
|
|
|
2024-01-04 02:59:36 +00:00
|
|
|
var environmentConfigured: Bool {
|
|
|
|
|
if self == .custom {
|
2024-06-25 15:51:13 +00:00
|
|
|
guard
|
2025-02-15 15:26:45 +00:00
|
|
|
let sharedDefaults = UserDefaults(suiteName: "group.app.omnivoreapp"),
|
2024-06-25 15:51:13 +00:00
|
|
|
let str = sharedDefaults.string(forKey: AppEnvironmentUserDefaultKey.serverBaseURL.rawValue),
|
|
|
|
|
let url = URL(string: str)
|
|
|
|
|
else {
|
2024-01-04 02:59:36 +00:00
|
|
|
return false
|
|
|
|
|
}
|
2024-06-25 15:51:13 +00:00
|
|
|
return true
|
2024-01-04 02:59:36 +00:00
|
|
|
}
|
|
|
|
|
return true
|
|
|
|
|
}
|
|
|
|
|
|
2022-02-11 17:24:33 +00:00
|
|
|
var graphqlPath: String {
|
|
|
|
|
"\(serverBaseURL.absoluteString)/api/graphql"
|
|
|
|
|
}
|
|
|
|
|
|
2024-05-13 05:44:28 +00:00
|
|
|
var name: String {
|
|
|
|
|
switch self {
|
|
|
|
|
case .demo:
|
|
|
|
|
return "Demo"
|
|
|
|
|
case .prod:
|
|
|
|
|
return "Production"
|
|
|
|
|
case .test:
|
|
|
|
|
return "Test"
|
|
|
|
|
case .local:
|
|
|
|
|
return "Local"
|
|
|
|
|
case .custom:
|
|
|
|
|
return "Self hosted"
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2022-02-11 17:24:33 +00:00
|
|
|
var serverBaseURL: URL {
|
|
|
|
|
switch self {
|
|
|
|
|
case .demo:
|
|
|
|
|
return URL(string: demoBaseURL)!
|
|
|
|
|
case .prod:
|
|
|
|
|
return URL(string: prodBaseURL)!
|
|
|
|
|
case .test, .local:
|
|
|
|
|
return URL(string: "http://localhost:4000")!
|
2023-01-19 10:26:28 +00:00
|
|
|
case .custom:
|
2023-02-20 19:09:39 +00:00
|
|
|
guard
|
2025-02-15 15:26:45 +00:00
|
|
|
let sharedDefaults = UserDefaults(suiteName: "group.app.omnivoreapp"),
|
2024-06-25 15:51:13 +00:00
|
|
|
let str = sharedDefaults.string(forKey: AppEnvironmentUserDefaultKey.serverBaseURL.rawValue),
|
2023-02-20 19:09:39 +00:00
|
|
|
let url = URL(string: str)
|
|
|
|
|
else {
|
2023-01-19 10:26:28 +00:00
|
|
|
fatalError("custom serverBaseURL not set")
|
|
|
|
|
}
|
|
|
|
|
return url
|
2022-02-11 17:24:33 +00:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
var webAppBaseURL: URL {
|
|
|
|
|
switch self {
|
|
|
|
|
case .demo:
|
|
|
|
|
return URL(string: demoWebURL)!
|
|
|
|
|
case .prod:
|
|
|
|
|
return URL(string: prodWebURL)!
|
|
|
|
|
case .test, .local:
|
|
|
|
|
return URL(string: "http://localhost:3000")!
|
2023-01-19 10:26:28 +00:00
|
|
|
case .custom:
|
2023-02-20 19:09:39 +00:00
|
|
|
guard
|
2025-02-15 15:26:45 +00:00
|
|
|
let sharedDefaults = UserDefaults(suiteName: "group.app.omnivoreapp"),
|
2024-06-25 15:51:13 +00:00
|
|
|
let str = sharedDefaults.string(forKey: AppEnvironmentUserDefaultKey.webAppBaseURL.rawValue),
|
2023-02-20 19:09:39 +00:00
|
|
|
let url = URL(string: str)
|
|
|
|
|
else {
|
2023-01-19 10:26:28 +00:00
|
|
|
fatalError("custom webAppBaseURL not set")
|
|
|
|
|
}
|
|
|
|
|
return url
|
2022-02-11 17:24:33 +00:00
|
|
|
}
|
|
|
|
|
}
|
2022-09-09 14:03:05 +00:00
|
|
|
|
|
|
|
|
var ttsBaseURL: URL {
|
|
|
|
|
switch self {
|
|
|
|
|
case .demo:
|
|
|
|
|
return URL(string: demoTtsURL)!
|
|
|
|
|
case .prod:
|
|
|
|
|
return URL(string: prodTtsURL)!
|
|
|
|
|
case .test, .local:
|
2023-11-08 11:36:34 +00:00
|
|
|
return URL(string: "http://localhost:8080")!
|
2023-01-19 10:26:28 +00:00
|
|
|
case .custom:
|
2023-02-20 19:09:39 +00:00
|
|
|
guard
|
2025-02-15 15:26:45 +00:00
|
|
|
let sharedDefaults = UserDefaults(suiteName: "group.app.omnivoreapp"),
|
2024-06-25 15:51:13 +00:00
|
|
|
let str = sharedDefaults.string(forKey: AppEnvironmentUserDefaultKey.ttsBaseURL.rawValue),
|
2023-02-20 19:09:39 +00:00
|
|
|
let url = URL(string: str)
|
|
|
|
|
else {
|
2023-01-19 10:26:28 +00:00
|
|
|
fatalError("custom ttsBaseURL not set")
|
|
|
|
|
}
|
|
|
|
|
return url
|
2022-09-09 14:03:05 +00:00
|
|
|
}
|
|
|
|
|
}
|
2022-02-11 17:24:33 +00:00
|
|
|
}
|