'use strict'; import type { TurboModule } from 'react-native'; import { TurboModuleRegistry } from 'react-native'; import { AudioDevicesInfo, PermissionStatus } from '../system/types'; type OptionsMap = { [key: string]: string | boolean | number | undefined }; type NotificationOpResponse = { success: boolean; error?: string }; type NotificationType = 'playback' | 'recording' | 'simple'; type AudioFocusType = | 'gain' | 'gainTransient' | 'gainTransientExclusive' | 'gainTransientMayDuck'; interface Spec extends TurboModule { install(): boolean; getDevicePreferredSampleRate(): number; // AVAudioSession management setAudioSessionActivity(enabled: boolean): Promise; setAudioSessionOptions( category: string, mode: string, options: Array, allowHaptics: boolean, notifyOthersOnDeactivation: boolean ): void; disableSessionManagement(): void; // system events and interruptions observeAudioInterruptions(focusType: AudioFocusType, enabled: boolean): void; activelyReclaimSession(enabled: boolean): void; observeVolumeChanges(enabled: boolean): void; // Permissions requestRecordingPermissions(): Promise; checkRecordingPermissions(): Promise; requestNotificationPermissions(): Promise; checkNotificationPermissions(): Promise; // Audio devices getDevicesInfo(): Promise; setInputDevice(deviceId: string): Promise; // Notification system showNotification( type: NotificationType, key: string, options: OptionsMap ): Promise; hideNotification(key: string): Promise; isNotificationActive(key: string): Promise; // Android-only: reads bundled asset bytes and returns a Base64 string. readAndroidReleaseAssetBytesAsBase64(assetPath: string): Promise; } const NativeAudioAPIModule = TurboModuleRegistry.get('AudioAPIModule')!; export { NativeAudioAPIModule };