/* eslint-disable @typescript-eslint/ban-types */ // we use Object type because methods on the native side use NSDictionary and ReadableMap // and we want to stay compatible with those import {TurboModuleRegistry, TurboModule} from 'react-native'; export type AlbumSubType = | 'AlbumRegular' | 'AlbumSyncedEvent' | 'AlbumSyncedFaces' | 'AlbumSyncedAlbum' | 'AlbumImported' | 'AlbumMyPhotoStream' | 'AlbumCloudShared' | 'Unknown'; type Album = { title: string; count: number; subtype?: AlbumSubType; }; type SubTypes = | 'PhotoPanorama' | 'PhotoHDR' | 'PhotoScreenshot' | 'PhotoLive' | 'PhotoDepthEffect' | 'VideoStreamed' | 'VideoHighFrameRate' | 'VideoTimelapse'; type PhotoIdentifier = { node: { type: string; subTypes: SubTypes; group_name: string; image: { filename: string | null; filepath: string | null; extension: string | null; uri: string; height: number; width: number; fileSize: number | null; playableDuration: number; orientation: number | null; }; timestamp: number; modificationTimestamp: number; location: { latitude?: number; longitude?: number; altitude?: number; heading?: number; speed?: number; } | null; }; }; type PhotoIdentifiersPage = { edges: Array; page_info: { has_next_page: boolean; start_cursor?: string; end_cursor?: string; }; limited?: boolean; }; export interface Spec extends TurboModule { saveToCameraRoll(uri: string, options: Object): Promise; getPhotos(params: Object): Promise; getAlbums(params: Object): Promise; deletePhotos(photoUris: Array): Promise; getPhotoByInternalID( internalID: string, options: Object, ): Promise; } export default TurboModuleRegistry.getEnforcing('RNCCameraRoll');