1import { NativeModules, NativeEventEmitter, EventSubscription } from 'react-native';
2
3const DevLauncher = NativeModules.EXDevLauncherInternal;
4const EventEmitter = new NativeEventEmitter(DevLauncher);
5
6const ON_NEW_DEEP_LINK_EVENT = 'expo.modules.devlauncher.onnewdeeplink';
7
8export async function getRecentlyOpenedApps(): Promise<{ [key: string]: string | null }[]> {
9  return await DevLauncher.getRecentlyOpenedApps();
10}
11
12export async function loadApp(url: string): Promise<void> {
13  return await DevLauncher.loadApp(url);
14}
15
16export async function getPendingDeepLink(): Promise<string | null> {
17  return await DevLauncher.getPendingDeepLink();
18}
19
20export type CrashReport = {
21  timestamp: number;
22  message: string;
23  stack: string;
24};
25
26export async function getCrashReport(): Promise<CrashReport | null> {
27  return await DevLauncher.getCrashReport();
28}
29
30export async function openCamera(): Promise<void> {
31  return await DevLauncher.openCamera();
32}
33
34export function addDeepLinkListener(callback: (string) => void): EventSubscription {
35  return EventEmitter.addListener(ON_NEW_DEEP_LINK_EVENT, callback);
36}
37
38export type BuildInfo = {
39  appName?: string;
40  appVersion?: string;
41  appIcon?: string;
42  sdkVersion?: string;
43  runtimeVersion?: string;
44};
45
46export async function getBuildInfoAsync(): Promise<BuildInfo> {
47  return DevLauncher.getBuildInfo();
48}
49
50export async function copyToClipboardAsync(content: string): Promise<null> {
51  return DevLauncher.copyToClipboard(content);
52}
53
54export const clientUrlScheme = DevLauncher.clientUrlScheme;
55export const installationID = DevLauncher.installationID;
56export const isDevice = !!DevLauncher.isDevice;
57