52 lines
1.8 KiB
Swift
52 lines
1.8 KiB
Swift
import CodexBarCore
|
|
import Foundation
|
|
|
|
struct WayfinderProviderImplementation: ProviderImplementation {
|
|
let id: UsageProvider = .wayfinder
|
|
|
|
@MainActor
|
|
static func dashboardURL(
|
|
settings: SettingsStore,
|
|
environment: [String: String] = ProcessInfo.processInfo.environment) -> URL
|
|
{
|
|
let effectiveEnvironment = ProviderConfigEnvironment.applyProviderConfigOverrides(
|
|
base: environment,
|
|
provider: .wayfinder,
|
|
config: settings.providerConfig(for: .wayfinder))
|
|
return WayfinderSettingsReader.dashboardURL(environment: effectiveEnvironment)
|
|
}
|
|
|
|
@MainActor
|
|
func presentation(context _: ProviderPresentationContext) -> ProviderPresentation {
|
|
ProviderPresentation { _ in "api" }
|
|
}
|
|
|
|
@MainActor
|
|
func observeSettings(_ settings: SettingsStore) {
|
|
_ = settings.wayfinderGatewayURL
|
|
}
|
|
|
|
@MainActor
|
|
func isAvailable(context _: ProviderAvailabilityContext) -> Bool {
|
|
// The gateway's read-only API needs no credentials; enabling the provider is the opt-in.
|
|
true
|
|
}
|
|
|
|
@MainActor
|
|
func settingsFields(context: ProviderSettingsContext) -> [ProviderSettingsFieldDescriptor] {
|
|
[
|
|
ProviderSettingsFieldDescriptor(
|
|
id: "wayfinder-gateway-url",
|
|
title: "Gateway URL",
|
|
subtitle: "Local Wayfinder gateway. Read-only polling of health, routing split, and " +
|
|
"savings — prompts are never read or sent.",
|
|
kind: .plain,
|
|
placeholder: WayfinderSettingsReader.defaultBaseURL.absoluteString,
|
|
binding: context.stringBinding(\.wayfinderGatewayURL),
|
|
actions: [],
|
|
isVisible: nil,
|
|
onActivate: nil),
|
|
]
|
|
}
|
|
}
|