import Foundation public enum CodexCLIDashboardAuthorityContext { public static func makeLiveWebInput( dashboard: OpenAIDashboardSnapshot, context: ProviderFetchContext, routingTargetEmail: String?) -> CodexDashboardAuthorityInput { let auth = context.fetcher.loadAuthBackedCodexAccount() return CodexDashboardAuthorityInput( sourceKind: .liveWeb, proof: CodexDashboardOwnershipProofContext( currentIdentity: auth.identity, expectedScopedEmail: auth.email, trustedCurrentUsageEmail: nil, dashboardSignedInEmail: dashboard.signedInEmail, knownOwners: context.settings?.codex?.dashboardAuthorityKnownOwners ?? []), routing: CodexDashboardRoutingHints( targetEmail: CodexIdentityResolver.normalizeEmail(routingTargetEmail), lastKnownDashboardRoutingEmail: nil)) } public static func makeCachedDashboardInput( dashboard: OpenAIDashboardSnapshot, cachedAccountEmail: String, usage: UsageSnapshot, sourceLabel: String, context: ProviderFetchContext) -> CodexDashboardAuthorityInput { let auth = context.fetcher.loadAuthBackedCodexAccount() let trustedCurrentUsageEmail = Self.shouldTrustUsageEmail(sourceLabel: sourceLabel) ? usage.accountEmail(for: .codex) : nil return CodexDashboardAuthorityInput( sourceKind: .cachedDashboard, proof: CodexDashboardOwnershipProofContext( currentIdentity: auth.identity, expectedScopedEmail: auth.email, trustedCurrentUsageEmail: trustedCurrentUsageEmail, dashboardSignedInEmail: dashboard.signedInEmail, knownOwners: context.settings?.codex?.dashboardAuthorityKnownOwners ?? []), routing: CodexDashboardRoutingHints( targetEmail: auth.email, lastKnownDashboardRoutingEmail: cachedAccountEmail)) } public static func attachmentEmail(from input: CodexDashboardAuthorityInput) -> String? { CodexIdentityResolver.normalizeEmail( input.proof.expectedScopedEmail ?? input.proof.trustedCurrentUsageEmail ?? input.proof.dashboardSignedInEmail) } public static func shouldTrustUsageEmail(sourceLabel: String) -> Bool { switch sourceLabel.trimmingCharacters(in: .whitespacesAndNewlines).lowercased() { case "codex-cli", "oauth": true default: false } }}
import Foundation
public enum CodexCLIDashboardAuthorityContext {
public static func makeLiveWebInput(
dashboard: OpenAIDashboardSnapshot,
context: ProviderFetchContext,
routingTargetEmail: String?) -> CodexDashboardAuthorityInput
{
let auth = context.fetcher.loadAuthBackedCodexAccount()
return CodexDashboardAuthorityInput(
sourceKind: .liveWeb,
proof: CodexDashboardOwnershipProofContext(
currentIdentity: auth.identity,
expectedScopedEmail: auth.email,
trustedCurrentUsageEmail: nil,
dashboardSignedInEmail: dashboard.signedInEmail,
knownOwners: context.settings?.codex?.dashboardAuthorityKnownOwners ?? []),
routing: CodexDashboardRoutingHints(
targetEmail: CodexIdentityResolver.normalizeEmail(routingTargetEmail),
lastKnownDashboardRoutingEmail: nil))
}
public static func makeCachedDashboardInput(
dashboard: OpenAIDashboardSnapshot,
cachedAccountEmail: String,
usage: UsageSnapshot,
sourceLabel: String,
context: ProviderFetchContext) -> CodexDashboardAuthorityInput
{
let auth = context.fetcher.loadAuthBackedCodexAccount()
let trustedCurrentUsageEmail = Self.shouldTrustUsageEmail(sourceLabel: sourceLabel)
? usage.accountEmail(for: .codex)
: nil
return CodexDashboardAuthorityInput(
sourceKind: .cachedDashboard,
proof: CodexDashboardOwnershipProofContext(
currentIdentity: auth.identity,
expectedScopedEmail: auth.email,
trustedCurrentUsageEmail: trustedCurrentUsageEmail,
dashboardSignedInEmail: dashboard.signedInEmail,
knownOwners: context.settings?.codex?.dashboardAuthorityKnownOwners ?? []),
routing: CodexDashboardRoutingHints(
targetEmail: auth.email,
lastKnownDashboardRoutingEmail: cachedAccountEmail))
}
public static func attachmentEmail(from input: CodexDashboardAuthorityInput) -> String? {
CodexIdentityResolver.normalizeEmail(
input.proof.expectedScopedEmail ??
input.proof.trustedCurrentUsageEmail ??
input.proof.dashboardSignedInEmail)
}
public static func shouldTrustUsageEmail(sourceLabel: String) -> Bool {
switch sourceLabel.trimmingCharacters(in: .whitespacesAndNewlines).lowercased() {
case "codex-cli", "oauth":
true
default:
false
}
}
}