1import { NativeModules, NativeEventEmitter, EventSubscription } from 'react-native'; 2 3import { RecentApp } from '../providers/RecentlyOpenedAppsProvider'; 4 5const DevLauncher = NativeModules.EXDevLauncherInternal; 6const EventEmitter = new NativeEventEmitter(DevLauncher); 7 8const ON_NEW_DEEP_LINK_EVENT = 'expo.modules.devlauncher.onnewdeeplink'; 9 10export async function getRecentlyOpenedApps(): Promise<RecentApp[]> { 11 const recentlyOpenedApps = await DevLauncher.getRecentlyOpenedApps(); 12 return recentlyOpenedApps; 13} 14 15export async function clearRecentlyOpenedApps(): Promise<void> { 16 return await DevLauncher.clearRecentlyOpenedApps(); 17} 18 19export async function loadApp(url: string): Promise<void> { 20 return await DevLauncher.loadApp(url); 21} 22 23export async function loadUpdate(updateUrl: string, projectUrl: string) { 24 return await DevLauncher.loadUpdate(updateUrl, projectUrl); 25} 26 27export async function getPendingDeepLink(): Promise<string | null> { 28 return await DevLauncher.getPendingDeepLink(); 29} 30 31export type CrashReport = { 32 timestamp: number; 33 message: string; 34 stack: string; 35}; 36 37export async function getCrashReport(): Promise<CrashReport | null> { 38 return await DevLauncher.getCrashReport(); 39} 40 41export async function openCamera(): Promise<void> { 42 return await DevLauncher.openCamera(); 43} 44 45export function addDeepLinkListener(callback: (string) => void): EventSubscription { 46 return EventEmitter.addListener(ON_NEW_DEEP_LINK_EVENT, callback); 47} 48 49export type BuildInfo = { 50 appName?: string; 51 appVersion?: string; 52 appIcon?: string; 53 sdkVersion?: string; 54 runtimeVersion?: string; 55 appId?: string; 56}; 57 58export async function getBuildInfoAsync(): Promise<BuildInfo> { 59 return DevLauncher.getBuildInfo(); 60} 61 62export async function copyToClipboardAsync(content: string): Promise<null> { 63 return DevLauncher.copyToClipboard(content); 64} 65 66export const clientUrlScheme = DevLauncher.clientUrlScheme; 67export const installationID = DevLauncher.installationID; 68export const isDevice = !!DevLauncher.isDevice; 69 70export type EXUpdatesConfig = { 71 runtimeVersion: string; 72 sdkVersion: string; 73 appId: string; 74 usesEASUpdates: boolean; 75 projectUrl: string; 76}; 77 78export const updatesConfig: EXUpdatesConfig = DevLauncher.updatesConfig; 79 80export async function loadFontsAsync() { 81 return await DevLauncher.loadFontsAsync(); 82} 83