diff --git a/Sources/CodexBar/Providers/MiniMax/MiniMaxProviderImplementation.swift b/Sources/CodexBar/Providers/MiniMax/MiniMaxProviderImplementation.swift index 10ad3ca0..b2bdf062 100644 --- a/Sources/CodexBar/Providers/MiniMax/MiniMaxProviderImplementation.swift +++ b/Sources/CodexBar/Providers/MiniMax/MiniMaxProviderImplementation.swift @@ -99,7 +99,7 @@ struct MiniMaxProviderImplementation: ProviderImplementation { subtitle: "Choose the MiniMax host (global .io or China mainland .com).", binding: regionBinding, options: regionOptions, - isVisible: { authMode().allowsCookies }, + isVisible: nil, onChange: nil), ] } diff --git a/Sources/CodexBarCore/Providers/MiniMax/MiniMaxAPIRegion.swift b/Sources/CodexBarCore/Providers/MiniMax/MiniMaxAPIRegion.swift index f6072cc7..8428f81f 100644 --- a/Sources/CodexBarCore/Providers/MiniMax/MiniMaxAPIRegion.swift +++ b/Sources/CodexBarCore/Providers/MiniMax/MiniMaxAPIRegion.swift @@ -26,6 +26,15 @@ public enum MiniMaxAPIRegion: String, CaseIterable, Sendable { } } + public var apiBaseURLString: String { + switch self { + case .global: + "https://api.minimax.io" + case .chinaMainland: + "https://api.minimaxi.com" + } + } + public var codingPlanURL: URL { var components = URLComponents(string: self.baseURLString)! components.path = "/" + Self.codingPlanPath @@ -42,4 +51,8 @@ public enum MiniMaxAPIRegion: String, CaseIterable, Sendable { public var remainsURL: URL { URL(string: self.baseURLString)!.appendingPathComponent(Self.remainsPath) } + + public var apiRemainsURL: URL { + URL(string: self.apiBaseURLString)!.appendingPathComponent(Self.remainsPath) + } } diff --git a/Sources/CodexBarCore/Providers/MiniMax/MiniMaxProviderDescriptor.swift b/Sources/CodexBarCore/Providers/MiniMax/MiniMaxProviderDescriptor.swift index 2fcfc3ef..5bf0a9c5 100644 --- a/Sources/CodexBarCore/Providers/MiniMax/MiniMaxProviderDescriptor.swift +++ b/Sources/CodexBarCore/Providers/MiniMax/MiniMaxProviderDescriptor.swift @@ -86,7 +86,8 @@ struct MiniMaxAPIFetchStrategy: ProviderFetchStrategy { guard let apiToken = ProviderTokenResolver.minimaxToken(environment: context.env) else { throw MiniMaxAPISettingsError.missingToken } - let usage = try await MiniMaxUsageFetcher.fetchUsage(apiToken: apiToken) + let region = context.settings?.minimax?.apiRegion ?? .global + let usage = try await MiniMaxUsageFetcher.fetchUsage(apiToken: apiToken, region: region) return self.makeResult( usage: usage.toUsageSnapshot(), sourceLabel: "api") diff --git a/Sources/CodexBarCore/Providers/MiniMax/MiniMaxUsageFetcher.swift b/Sources/CodexBarCore/Providers/MiniMax/MiniMaxUsageFetcher.swift index df1d7ce0..432411ef 100644 --- a/Sources/CodexBarCore/Providers/MiniMax/MiniMaxUsageFetcher.swift +++ b/Sources/CodexBarCore/Providers/MiniMax/MiniMaxUsageFetcher.swift @@ -8,7 +8,6 @@ public struct MiniMaxUsageFetcher: Sendable { private static let codingPlanPath = "user-center/payment/coding-plan" private static let codingPlanQuery = "cycle_type=3" private static let codingPlanRemainsPath = "v1/api/openplatform/coding_plan/remains" - private static let apiRemainsURL = URL(string: "https://api.minimaxi.com/v1/api/openplatform/coding_plan/remains")! private struct RemainsContext: Sendable { let authorizationToken: String? let groupID: String? @@ -51,6 +50,7 @@ public struct MiniMaxUsageFetcher: Sendable { public static func fetchUsage( apiToken: String, + region: MiniMaxAPIRegion = .global, now: Date = Date()) async throws -> MiniMaxUsageSnapshot { let cleaned = apiToken.trimmingCharacters(in: .whitespacesAndNewlines) @@ -58,7 +58,7 @@ public struct MiniMaxUsageFetcher: Sendable { throw MiniMaxUsageError.invalidCredentials } - var request = URLRequest(url: self.apiRemainsURL) + var request = URLRequest(url: region.apiRemainsURL) request.httpMethod = "GET" request.setValue("Bearer \(cleaned)", forHTTPHeaderField: "Authorization") request.setValue("application/json", forHTTPHeaderField: "accept")