1 // Copyright 2015-present 650 Industries. All rights reserved.
2 
3 @objc(DevMenuModule)
4 open class DevMenuModule: NSObject, RCTBridgeModule {
5   public static func moduleName() -> String! {
6     return "ExpoDevMenu"
7   }
8 
9   public static func requiresMainQueueSetup() -> Bool {
10     return true
11   }
12 
13   // MARK: JavaScript API
14 
15   @objc
16   func openMenu() {
17     DevMenuManager.shared.openMenu()
18   }
19 
20   @objc
21   func openSettings() {
22     DevMenuManager.shared.openMenu("Settings")
23   }
24 
25   @objc
26   func openProfile() {
27     DevMenuManager.shared.openMenu("Profile")
28   }
29 
30   @objc
31   func isLoggedInAsync(_ resolve: RCTPromiseResolveBlock, reject: RCTPromiseRejectBlock) {
32     resolve(DevMenuManager.shared.expoApiClient.isLoggedIn())
33   }
34 
35   @objc
36   func queryDevSessionsAsync(_ resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock) {
37     DevMenuManager.shared.expoApiClient.queryDevSessionsAsync({ (data, response, error) in
38       guard error == nil else {
39         reject("ERR_DEVMENU_CANNOT_GET_DEV_SESSIONS", error.debugDescription, error)
40         return
41       }
42 
43       guard let data = data else {
44         resolve(nil)
45         return
46       }
47 
48       let response = String(decoding: data, as: UTF8.self)
49       resolve(response)
50     })
51   }
52 }
53