1 // Copyright 2022-present 650 Industries. All rights reserved. 2 3 import SafariServices 4 import ABI47_0_0ExpoModulesCore 5 import AuthenticationServices 6 7 final public class WebBrowserModule: Module { 8 private var currentWebBrowserSession: WebBrowserSession? 9 private var currentAuthSession: WebAuthSession? 10 definitionnull11 public func definition() -> ModuleDefinition { 12 Name("ExpoWebBrowser") 13 14 AsyncFunction("openBrowserAsync") { (url: URL, options: WebBrowserOptions, promise: Promise) throws in 15 guard self.currentWebBrowserSession?.isOpen != true else { 16 throw WebBrowserAlreadyOpenException() 17 } 18 self.currentWebBrowserSession = WebBrowserSession(url: url, options: options) 19 self.currentWebBrowserSession?.open(promise) 20 } 21 .runOnQueue(.main) 22 23 AsyncFunction("dismissBrowser") { 24 self.currentWebBrowserSession?.dismiss() 25 self.currentWebBrowserSession = nil 26 } 27 .runOnQueue(.main) 28 29 // MARK: - AuthSession 30 31 AsyncFunction("openAuthSessionAsync") { (authUrl: URL, redirectUrl: URL?, options: AuthSessionOptions, promise: Promise) throws in 32 guard self.currentAuthSession?.isOpen != true else { 33 throw WebBrowserAlreadyOpenException() 34 } 35 self.currentAuthSession = WebAuthSession(authUrl: authUrl, redirectUrl: redirectUrl, options: options) 36 self.currentAuthSession?.open(promise) 37 } 38 .runOnQueue(.main) 39 40 AsyncFunction("dismissAuthSession") { 41 self.currentAuthSession?.dismiss() 42 self.currentAuthSession = nil 43 } 44 .runOnQueue(.main) 45 46 // MARK: - Stubs for jest-expo-mock-generator 47 48 AsyncFunction("warmUpAsync") {} 49 AsyncFunction("coolDownAsync") {} 50 AsyncFunction("mayInitWithUrlAsync") {} 51 AsyncFunction("getCustomTabsSupportingBrowsers") {} 52 } 53 } 54