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  appId?: string;
45};
46
47export async function getBuildInfoAsync(): Promise<BuildInfo> {
48  return DevLauncher.getBuildInfo();
49}
50
51export async function copyToClipboardAsync(content: string): Promise<null> {
52  return DevLauncher.copyToClipboard(content);
53}
54
55export const clientUrlScheme = DevLauncher.clientUrlScheme;
56export const installationID = DevLauncher.installationID;
57export const isDevice = !!DevLauncher.isDevice;
58
59export type EXUpdatesConfig = {
60  runtimeVersion: string;
61  sdkVersion: string;
62  appId: string;
63  usesEASUpdates: boolean;
64};
65
66export const updatesConfig: EXUpdatesConfig = DevLauncher.updatesConfig;
67
68export async function loadFontsAsync() {
69  return await DevLauncher.loadFontsAsync()
70}
71