Files
steipete--codexbar/Sources/CodexBarCore/Providers/OpenCode/OpenCodeWebCookieSupport.swift
T
2026-07-13 12:22:33 +08:00

58 lines
2.0 KiB
Swift

import Foundation
enum OpenCodeWebCookieSupport {
private static let requestCookieNames: Set<String> = ["auth", "__Host-auth"]
struct Context {
let settings: ProviderSettingsSnapshot.OpenCodeProviderSettings?
let provider: UsageProvider
let browserDetection: BrowserDetection
let allowCached: Bool
}
static func requestCookieHeader(from rawHeader: String?) -> String? {
CookieHeaderNormalizer.filteredHeader(from: rawHeader, allowedNames: self.requestCookieNames)
}
static func resolveCookieHeader(
context: Context,
invalidCookie: @autoclosure () -> Error,
missingCookie: @autoclosure () -> Error) throws -> String
{
if let settings = context.settings, settings.cookieSource == .manual {
if let header = self.requestCookieHeader(from: settings.manualCookieHeader) {
return header
}
throw invalidCookie()
}
#if os(macOS)
if context.allowCached,
let cached = CookieHeaderCache.load(provider: context.provider),
let header = self.requestCookieHeader(from: cached.cookieHeader)
{
return header
}
let session = try OpenCodeCookieImporter.importSession(
browserDetection: context.browserDetection,
preferredBrowsers: self.automaticImportOrder(provider: context.provider))
guard let header = self.requestCookieHeader(from: session.cookieHeader) else {
throw missingCookie()
}
CookieHeaderCache.store(
provider: context.provider,
cookieHeader: header,
sourceLabel: session.sourceLabel)
return header
#else
throw missingCookie()
#endif
}
#if os(macOS)
static func automaticImportOrder(provider: UsageProvider) -> BrowserCookieImportOrder {
ProviderDefaults.metadata[provider]?.browserCookieOrder ?? [.chrome]
}
#endif
}