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