ssap_app/node_modules/expo-web-browser/ios/WebBrowserModule.swift

82 lines
2.4 KiB
Swift

// Copyright 2022-present 650 Industries. All rights reserved.
import SafariServices
import ExpoModulesCore
import AuthenticationServices
final public class WebBrowserModule: Module {
private var currentWebBrowserSession: WebBrowserSession?
private var currentAuthSession: WebAuthSession?
private var vcDidPresent = false
private func isValid(url: URL) -> Bool {
return url.scheme == "http" || url.scheme == "https"
}
public func definition() -> ModuleDefinition {
Name("ExpoWebBrowser")
AsyncFunction("openBrowserAsync") { (url: URL, options: WebBrowserOptions, promise: Promise) in
if vcDidPresent {
self.currentWebBrowserSession = nil
vcDidPresent = false
}
guard self.currentWebBrowserSession == nil else {
promise.resolve(["type": "locked"])
return
}
guard self.isValid(url: url) else {
throw WebBrowserInvalidURLException()
}
self.currentWebBrowserSession = WebBrowserSession(url: url, options: options) { [promise] type in
promise.resolve(["type": type])
self.currentWebBrowserSession = nil
} didPresent: {
self.vcDidPresent = true
}
self.currentWebBrowserSession?.open()
}
.runOnQueue(.main)
AsyncFunction("dismissBrowser") { (promise: Promise) in
if (currentWebBrowserSession == nil) {
throw WebBrowserNotOpenException()
}
currentWebBrowserSession?.dismiss { type in
self.currentWebBrowserSession = nil
promise.resolve(["type": type])
}
}
.runOnQueue(.main)
// MARK: - AuthSession
AsyncFunction("openAuthSessionAsync") { (authUrl: URL, redirectUrl: URL?, options: AuthSessionOptions, promise: Promise) throws in
guard self.currentAuthSession?.isOpen != true else {
throw WebBrowserAlreadyOpenException()
}
self.currentAuthSession = WebAuthSession(authUrl: authUrl, redirectUrl: redirectUrl, options: options)
self.currentAuthSession?.open(promise)
}
.runOnQueue(.main)
AsyncFunction("dismissAuthSession") {
self.currentAuthSession?.dismiss()
self.currentAuthSession = nil
}
.runOnQueue(.main)
// MARK: - Stubs for jest-expo-mock-generator
AsyncFunction("warmUpAsync") {}
AsyncFunction("coolDownAsync") {}
AsyncFunction("mayInitWithUrlAsync") {}
AsyncFunction("getCustomTabsSupportingBrowsers") {}
}
}