import { invoke } from '@tauri-apps/api/core'; export interface CopyURIRequest { uri: string; dst: string; } export interface CopyURIResponse { success: boolean; error?: string; } export interface UseBackgroundAudioRequest { enabled: boolean; } export interface InstallPackageRequest { path: string; } export interface InstallPackageResponse { success: boolean; error?: string; } export interface SetSystemUIVisibilityRequest { visible: boolean; darkMode: boolean; } export interface SetSystemUIVisibilityResponse { success: boolean; error?: string; } export interface GetStatusBarHeightResponse { height: number; error?: string; } export interface GetSystemFontsListResponse { fonts: Record; // { fontName: fontFamily } error?: string; } export interface InterceptKeysRequest { volumeKeys?: boolean; backKey?: boolean; /** Intercept media keys (next/previous/play-pause) for the hardware page turner. */ pageTurnerKeys?: boolean; /** Forward every key press to JS so the settings UI can capture a binding. */ learnMode?: boolean; } export interface LockScreenRequest { orientation: 'portrait' | 'landscape' | 'auto'; } export interface GetSystemColorSchemeResponse { colorScheme: 'light' | 'dark'; error?: string; } export interface GetSafeAreaInsetsResponse { top: number; right: number; bottom: number; left: number; error?: string; } interface GetScreenBrightnessResponse { brightness: number; // 0.0 to 1.0 error?: string; } interface SetScreenBrightnessRequest { brightness: number; // 0.0 to 1.0 } interface SetScreenBrightnessResponse { success: boolean; error?: string; } interface GetExternalSDCardPathResponse { path: string | null; error?: string; } interface SelectDirectoryResponse { cancelled?: boolean; uri?: string; path?: string; error?: string; } export interface GetStorefrontRegionCodeResponse { regionCode?: string; error?: string; } export async function copyURIToPath(request: CopyURIRequest): Promise { const result = await invoke('plugin:native-bridge|copy_uri_to_path', { payload: request, }); return result; } export async function invokeUseBackgroundAudio(request: UseBackgroundAudioRequest): Promise { await invoke('plugin:native-bridge|use_background_audio', { payload: request, }); } export async function installPackage( request: InstallPackageRequest, ): Promise { const result = await invoke('plugin:native-bridge|install_package', { payload: request, }); return result; } export async function setSystemUIVisibility( request: SetSystemUIVisibilityRequest, ): Promise { const result = await invoke( 'plugin:native-bridge|set_system_ui_visibility', { payload: request, }, ); return result; } export async function getStatusBarHeight(): Promise { const result = await invoke( 'plugin:native-bridge|get_status_bar_height', ); return result; } let cachedSysFontsResult: GetSystemFontsListResponse | null = null; export async function getSysFontsList(): Promise { if (cachedSysFontsResult) { return cachedSysFontsResult; } const result = await invoke( 'plugin:native-bridge|get_sys_fonts_list', ); cachedSysFontsResult = result; return result; } export async function interceptKeys(request: InterceptKeysRequest): Promise { await invoke('plugin:native-bridge|intercept_keys', { payload: request, }); } export async function lockScreenOrientation(request: LockScreenRequest): Promise { await invoke('plugin:native-bridge|lock_screen_orientation', { payload: request, }); } export async function getSystemColorScheme(): Promise { const result = await invoke( 'plugin:native-bridge|get_system_color_scheme', ); return result; } export async function getSafeAreaInsets(): Promise { const result = await invoke( 'plugin:native-bridge|get_safe_area_insets', ); return result; } export async function getScreenBrightness(): Promise { const result = await invoke( 'plugin:native-bridge|get_screen_brightness', ); return result; } export async function setScreenBrightness( request: SetScreenBrightnessRequest, ): Promise { const result = await invoke( 'plugin:native-bridge|set_screen_brightness', { payload: request, }, ); return result; } export async function getExternalSDCardPath(): Promise { const result = await invoke( 'plugin:native-bridge|get_external_sdcard_path', ); return result; } export async function selectDirectory(): Promise { const result = await invoke('plugin:native-bridge|select_directory'); return result; } export async function getStorefrontRegionCode(): Promise { const result = await invoke( 'plugin:native-bridge|get_storefront_region_code', ); return result; } // ── Sync passphrase keychain ──────────────────────────────────────────── // Tauri-only. Wired into the TauriPassphraseStore (src/libs/crypto/ // passphrase.ts) so the user's sync passphrase persists across app // launches via the OS keychain (macOS Keychain, Windows Credential // Manager, Linux libsecret, iOS Keychain, Android EncryptedSharedPrefs). export interface SetSyncPassphraseRequest { passphrase: string; } export interface SyncPassphraseResponse { success: boolean; error?: string; } export interface GetSyncPassphraseResponse { passphrase?: string; error?: string; } export interface SyncKeychainAvailableResponse { available: boolean; error?: string; } export async function setSyncPassphrase( request: SetSyncPassphraseRequest, ): Promise { return invoke('plugin:native-bridge|set_sync_passphrase', { payload: request, }); } export async function getSyncPassphrase(): Promise { return invoke('plugin:native-bridge|get_sync_passphrase'); } export async function clearSyncPassphrase(): Promise { return invoke('plugin:native-bridge|clear_sync_passphrase'); } export async function isSyncKeychainAvailable(): Promise { return invoke('plugin:native-bridge|is_sync_keychain_available'); }