| |
| |
| |
| |
|
|
| import { apiClient } from '../client' |
| import type { CustomMenuItem } from '@/types' |
|
|
| export interface DefaultSubscriptionSetting { |
| group_id: number |
| validity_days: number |
| } |
|
|
| |
| |
| |
| export interface SystemSettings { |
| |
| registration_enabled: boolean |
| email_verify_enabled: boolean |
| registration_email_suffix_whitelist: string[] |
| promo_code_enabled: boolean |
| password_reset_enabled: boolean |
| frontend_url: string |
| invitation_code_enabled: boolean |
| totp_enabled: boolean |
| totp_encryption_key_configured: boolean |
| |
| default_balance: number |
| default_concurrency: number |
| default_subscriptions: DefaultSubscriptionSetting[] |
| |
| site_name: string |
| site_logo: string |
| site_subtitle: string |
| api_base_url: string |
| contact_info: string |
| doc_url: string |
| home_content: string |
| hide_ccs_import_button: boolean |
| purchase_subscription_enabled: boolean |
| purchase_subscription_url: string |
| sora_client_enabled: boolean |
| backend_mode_enabled: boolean |
| custom_menu_items: CustomMenuItem[] |
| |
| smtp_host: string |
| smtp_port: number |
| smtp_username: string |
| smtp_password_configured: boolean |
| smtp_from_email: string |
| smtp_from_name: string |
| smtp_use_tls: boolean |
| email_provider: 'smtp' | 'mailjet' | string |
| mailjet_api_key_configured: boolean |
| mailjet_secret_key_configured: boolean |
| mailjet_from_email: string |
| mailjet_from_name: string |
| |
| turnstile_enabled: boolean |
| turnstile_site_key: string |
| turnstile_secret_key_configured: boolean |
|
|
| |
| linuxdo_connect_enabled: boolean |
| linuxdo_connect_client_id: string |
| linuxdo_connect_client_secret_configured: boolean |
| linuxdo_connect_redirect_url: string |
|
|
| |
| enable_model_fallback: boolean |
| fallback_model_anthropic: string |
| fallback_model_openai: string |
| fallback_model_gemini: string |
| fallback_model_antigravity: string |
|
|
| |
| enable_identity_patch: boolean |
| identity_patch_prompt: string |
|
|
| |
| ops_monitoring_enabled: boolean |
| ops_realtime_monitoring_enabled: boolean |
| ops_query_mode_default: 'auto' | 'raw' | 'preagg' | string |
| ops_metrics_interval_seconds: number |
|
|
| |
| min_claude_code_version: string |
| max_claude_code_version: string |
|
|
| |
| allow_ungrouped_key_scheduling: boolean |
| } |
|
|
| export interface UpdateSettingsRequest { |
| registration_enabled?: boolean |
| email_verify_enabled?: boolean |
| registration_email_suffix_whitelist?: string[] |
| promo_code_enabled?: boolean |
| password_reset_enabled?: boolean |
| frontend_url?: string |
| invitation_code_enabled?: boolean |
| totp_enabled?: boolean |
| default_balance?: number |
| default_concurrency?: number |
| default_subscriptions?: DefaultSubscriptionSetting[] |
| site_name?: string |
| site_logo?: string |
| site_subtitle?: string |
| api_base_url?: string |
| contact_info?: string |
| doc_url?: string |
| home_content?: string |
| hide_ccs_import_button?: boolean |
| purchase_subscription_enabled?: boolean |
| purchase_subscription_url?: string |
| sora_client_enabled?: boolean |
| backend_mode_enabled?: boolean |
| custom_menu_items?: CustomMenuItem[] |
| smtp_host?: string |
| smtp_port?: number |
| smtp_username?: string |
| smtp_password?: string |
| smtp_from_email?: string |
| smtp_from_name?: string |
| smtp_use_tls?: boolean |
| email_provider?: 'smtp' | 'mailjet' | string |
| mailjet_api_key?: string |
| mailjet_secret_key?: string |
| mailjet_from_email?: string |
| mailjet_from_name?: string |
| turnstile_enabled?: boolean |
| turnstile_site_key?: string |
| turnstile_secret_key?: string |
| linuxdo_connect_enabled?: boolean |
| linuxdo_connect_client_id?: string |
| linuxdo_connect_client_secret?: string |
| linuxdo_connect_redirect_url?: string |
| enable_model_fallback?: boolean |
| fallback_model_anthropic?: string |
| fallback_model_openai?: string |
| fallback_model_gemini?: string |
| fallback_model_antigravity?: string |
| enable_identity_patch?: boolean |
| identity_patch_prompt?: string |
| ops_monitoring_enabled?: boolean |
| ops_realtime_monitoring_enabled?: boolean |
| ops_query_mode_default?: 'auto' | 'raw' | 'preagg' | string |
| ops_metrics_interval_seconds?: number |
| min_claude_code_version?: string |
| max_claude_code_version?: string |
| allow_ungrouped_key_scheduling?: boolean |
| } |
|
|
| |
| |
| |
| |
| export async function getSettings(): Promise<SystemSettings> { |
| const { data } = await apiClient.get<SystemSettings>('/admin/settings') |
| return data |
| } |
|
|
| |
| |
| |
| |
| |
| export async function updateSettings(settings: UpdateSettingsRequest): Promise<SystemSettings> { |
| const { data } = await apiClient.put<SystemSettings>('/admin/settings', settings) |
| return data |
| } |
|
|
| |
| |
| |
| export interface TestSmtpRequest { |
| smtp_host: string |
| smtp_port: number |
| smtp_username: string |
| smtp_password: string |
| smtp_use_tls: boolean |
| } |
|
|
| export interface TestMailjetRequest { |
| mailjet_api_key: string |
| mailjet_secret_key: string |
| } |
|
|
| |
| |
| |
| |
| |
| export async function testSmtpConnection(config: TestSmtpRequest): Promise<{ message: string }> { |
| const { data } = await apiClient.post<{ message: string }>('/admin/settings/test-smtp', config) |
| return data |
| } |
|
|
| export async function testMailjetConnection(config: TestMailjetRequest): Promise<{ message: string }> { |
| const { data } = await apiClient.post<{ message: string }>('/admin/settings/test-mailjet', config) |
| return data |
| } |
|
|
| |
| |
| |
| export interface SendTestEmailRequest { |
| email: string |
| smtp_host: string |
| smtp_port: number |
| smtp_username: string |
| smtp_password: string |
| smtp_from_email: string |
| smtp_from_name: string |
| smtp_use_tls: boolean |
| } |
|
|
| export interface SendMailjetTestEmailRequest { |
| email: string |
| mailjet_api_key: string |
| mailjet_secret_key: string |
| mailjet_from_email: string |
| mailjet_from_name: string |
| } |
|
|
| |
| |
| |
| |
| |
| export async function sendTestEmail(request: SendTestEmailRequest): Promise<{ message: string }> { |
| const { data } = await apiClient.post<{ message: string }>( |
| '/admin/settings/send-test-email', |
| request |
| ) |
| return data |
| } |
|
|
| export async function sendMailjetTestEmail( |
| request: SendMailjetTestEmailRequest |
| ): Promise<{ message: string }> { |
| const { data } = await apiClient.post<{ message: string }>( |
| '/admin/settings/send-test-email-mailjet', |
| request |
| ) |
| return data |
| } |
|
|
| |
| |
| |
| export interface AdminApiKeyStatus { |
| exists: boolean |
| masked_key: string |
| } |
|
|
| |
| |
| |
| |
| export async function getAdminApiKey(): Promise<AdminApiKeyStatus> { |
| const { data } = await apiClient.get<AdminApiKeyStatus>('/admin/settings/admin-api-key') |
| return data |
| } |
|
|
| |
| |
| |
| |
| export async function regenerateAdminApiKey(): Promise<{ key: string }> { |
| const { data } = await apiClient.post<{ key: string }>('/admin/settings/admin-api-key/regenerate') |
| return data |
| } |
|
|
| |
| |
| |
| |
| export async function deleteAdminApiKey(): Promise<{ message: string }> { |
| const { data } = await apiClient.delete<{ message: string }>('/admin/settings/admin-api-key') |
| return data |
| } |
|
|
| |
|
|
| |
| |
| |
| export interface OverloadCooldownSettings { |
| enabled: boolean |
| cooldown_minutes: number |
| } |
|
|
| export async function getOverloadCooldownSettings(): Promise<OverloadCooldownSettings> { |
| const { data } = await apiClient.get<OverloadCooldownSettings>('/admin/settings/overload-cooldown') |
| return data |
| } |
|
|
| export async function updateOverloadCooldownSettings( |
| settings: OverloadCooldownSettings |
| ): Promise<OverloadCooldownSettings> { |
| const { data } = await apiClient.put<OverloadCooldownSettings>( |
| '/admin/settings/overload-cooldown', |
| settings |
| ) |
| return data |
| } |
|
|
| |
|
|
| |
| |
| |
| export interface StreamTimeoutSettings { |
| enabled: boolean |
| action: 'temp_unsched' | 'error' | 'none' |
| temp_unsched_minutes: number |
| threshold_count: number |
| threshold_window_minutes: number |
| } |
|
|
| |
| |
| |
| |
| export async function getStreamTimeoutSettings(): Promise<StreamTimeoutSettings> { |
| const { data } = await apiClient.get<StreamTimeoutSettings>('/admin/settings/stream-timeout') |
| return data |
| } |
|
|
| |
| |
| |
| |
| |
| export async function updateStreamTimeoutSettings( |
| settings: StreamTimeoutSettings |
| ): Promise<StreamTimeoutSettings> { |
| const { data } = await apiClient.put<StreamTimeoutSettings>( |
| '/admin/settings/stream-timeout', |
| settings |
| ) |
| return data |
| } |
|
|
| |
|
|
| |
| |
| |
| export interface RectifierSettings { |
| enabled: boolean |
| thinking_signature_enabled: boolean |
| thinking_budget_enabled: boolean |
| } |
|
|
| |
| |
| |
| |
| export async function getRectifierSettings(): Promise<RectifierSettings> { |
| const { data } = await apiClient.get<RectifierSettings>('/admin/settings/rectifier') |
| return data |
| } |
|
|
| |
| |
| |
| |
| |
| export async function updateRectifierSettings( |
| settings: RectifierSettings |
| ): Promise<RectifierSettings> { |
| const { data } = await apiClient.put<RectifierSettings>( |
| '/admin/settings/rectifier', |
| settings |
| ) |
| return data |
| } |
|
|
| |
|
|
| |
| |
| |
| export interface BetaPolicyRule { |
| beta_token: string |
| action: 'pass' | 'filter' | 'block' |
| scope: 'all' | 'oauth' | 'apikey' | 'bedrock' |
| error_message?: string |
| } |
|
|
| |
| |
| |
| export interface BetaPolicySettings { |
| rules: BetaPolicyRule[] |
| } |
|
|
| |
| |
| |
| |
| export async function getBetaPolicySettings(): Promise<BetaPolicySettings> { |
| const { data } = await apiClient.get<BetaPolicySettings>('/admin/settings/beta-policy') |
| return data |
| } |
|
|
| |
| |
| |
| |
| |
| export async function updateBetaPolicySettings( |
| settings: BetaPolicySettings |
| ): Promise<BetaPolicySettings> { |
| const { data } = await apiClient.put<BetaPolicySettings>( |
| '/admin/settings/beta-policy', |
| settings |
| ) |
| return data |
| } |
|
|
| |
|
|
| export interface SoraS3Settings { |
| enabled: boolean |
| endpoint: string |
| region: string |
| bucket: string |
| access_key_id: string |
| secret_access_key_configured: boolean |
| prefix: string |
| force_path_style: boolean |
| cdn_url: string |
| default_storage_quota_bytes: number |
| } |
|
|
| export interface SoraS3Profile { |
| profile_id: string |
| name: string |
| is_active: boolean |
| enabled: boolean |
| endpoint: string |
| region: string |
| bucket: string |
| access_key_id: string |
| secret_access_key_configured: boolean |
| prefix: string |
| force_path_style: boolean |
| cdn_url: string |
| default_storage_quota_bytes: number |
| updated_at: string |
| } |
|
|
| export interface ListSoraS3ProfilesResponse { |
| active_profile_id: string |
| items: SoraS3Profile[] |
| } |
|
|
| export interface UpdateSoraS3SettingsRequest { |
| profile_id?: string |
| enabled: boolean |
| endpoint: string |
| region: string |
| bucket: string |
| access_key_id: string |
| secret_access_key?: string |
| prefix: string |
| force_path_style: boolean |
| cdn_url: string |
| default_storage_quota_bytes: number |
| } |
|
|
| export interface CreateSoraS3ProfileRequest { |
| profile_id: string |
| name: string |
| set_active?: boolean |
| enabled: boolean |
| endpoint: string |
| region: string |
| bucket: string |
| access_key_id: string |
| secret_access_key?: string |
| prefix: string |
| force_path_style: boolean |
| cdn_url: string |
| default_storage_quota_bytes: number |
| } |
|
|
| export interface UpdateSoraS3ProfileRequest { |
| name: string |
| enabled: boolean |
| endpoint: string |
| region: string |
| bucket: string |
| access_key_id: string |
| secret_access_key?: string |
| prefix: string |
| force_path_style: boolean |
| cdn_url: string |
| default_storage_quota_bytes: number |
| } |
|
|
| export interface TestSoraS3ConnectionRequest { |
| profile_id?: string |
| enabled: boolean |
| endpoint: string |
| region: string |
| bucket: string |
| access_key_id: string |
| secret_access_key?: string |
| prefix: string |
| force_path_style: boolean |
| cdn_url: string |
| default_storage_quota_bytes?: number |
| } |
|
|
| export async function getSoraS3Settings(): Promise<SoraS3Settings> { |
| const { data } = await apiClient.get<SoraS3Settings>('/admin/settings/sora-s3') |
| return data |
| } |
|
|
| export async function updateSoraS3Settings(settings: UpdateSoraS3SettingsRequest): Promise<SoraS3Settings> { |
| const { data } = await apiClient.put<SoraS3Settings>('/admin/settings/sora-s3', settings) |
| return data |
| } |
|
|
| export async function testSoraS3Connection( |
| settings: TestSoraS3ConnectionRequest |
| ): Promise<{ message: string }> { |
| const { data } = await apiClient.post<{ message: string }>('/admin/settings/sora-s3/test', settings) |
| return data |
| } |
|
|
| export async function listSoraS3Profiles(): Promise<ListSoraS3ProfilesResponse> { |
| const { data } = await apiClient.get<ListSoraS3ProfilesResponse>('/admin/settings/sora-s3/profiles') |
| return data |
| } |
|
|
| export async function createSoraS3Profile(request: CreateSoraS3ProfileRequest): Promise<SoraS3Profile> { |
| const { data } = await apiClient.post<SoraS3Profile>('/admin/settings/sora-s3/profiles', request) |
| return data |
| } |
|
|
| export async function updateSoraS3Profile(profileID: string, request: UpdateSoraS3ProfileRequest): Promise<SoraS3Profile> { |
| const { data } = await apiClient.put<SoraS3Profile>(`/admin/settings/sora-s3/profiles/${profileID}`, request) |
| return data |
| } |
|
|
| export async function deleteSoraS3Profile(profileID: string): Promise<void> { |
| await apiClient.delete(`/admin/settings/sora-s3/profiles/${profileID}`) |
| } |
|
|
| export async function setActiveSoraS3Profile(profileID: string): Promise<SoraS3Profile> { |
| const { data } = await apiClient.post<SoraS3Profile>(`/admin/settings/sora-s3/profiles/${profileID}/activate`) |
| return data |
| } |
|
|
| export const settingsAPI = { |
| getSettings, |
| updateSettings, |
| testSmtpConnection, |
| testMailjetConnection, |
| sendTestEmail, |
| sendMailjetTestEmail, |
| getAdminApiKey, |
| regenerateAdminApiKey, |
| deleteAdminApiKey, |
| getOverloadCooldownSettings, |
| updateOverloadCooldownSettings, |
| getStreamTimeoutSettings, |
| updateStreamTimeoutSettings, |
| getRectifierSettings, |
| updateRectifierSettings, |
| getBetaPolicySettings, |
| updateBetaPolicySettings, |
| getSoraS3Settings, |
| updateSoraS3Settings, |
| testSoraS3Connection, |
| listSoraS3Profiles, |
| createSoraS3Profile, |
| updateSoraS3Profile, |
| deleteSoraS3Profile, |
| setActiveSoraS3Profile |
| } |
|
|
| export default settingsAPI |
|
|