{"version":3,"file":"openAuthSessionAsync.mjs","sources":["../../../src/apis/openAuthSessionAsync.ts"],"sourcesContent":["// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nimport { AppState, Linking, NativeModules, Platform, } from 'react-native';\nimport { nativeModule } from '../nativeModule';\nlet appStateListener;\nlet redirectListener;\nexport async function isChromebook() {\n    try {\n        const nm = NativeModules?.ChromeOS;\n        if (nm?.isChromeOS)\n            return !!(await nm.isChromeOS());\n    }\n    catch { }\n    return false;\n}\nexport const openAuthSessionAsync = async (url, redirectUrls, prefersEphemeralSession) => {\n    // enforce HTTPS\n    const httpsUrl = url.replace('http://', 'https://');\n    if (Platform.OS === 'ios') {\n        return openAuthSessionIOS(httpsUrl, redirectUrls, prefersEphemeralSession);\n    }\n    if (Platform.OS === 'android') {\n        try {\n            const isChromebookRes = await isChromebook();\n            if (!isChromebookRes) {\n                // If it is not a Chromebook, it probably supports custom tabs\n                return await openAuthSessionAndroid(httpsUrl, redirectUrls);\n            }\n        }\n        catch {\n            // ignore and fallback to android\n        }\n        // The ChromeOS way without custom tabs works everywhere\n        return openAuthSessionChromeOs(httpsUrl, redirectUrls);\n    }\n};\nconst openAuthSessionIOS = async (url, redirectUrls, prefersEphemeralSession = false) => {\n    const redirectUrl = redirectUrls.find(\n    // take the first non-web url as the deeplink\n    item => !item.startsWith('https://') && !item.startsWith('http://'));\n    return nativeModule.openAuthSessionAsync(url, redirectUrl, prefersEphemeralSession);\n};\nconst openAuthSessionAndroid = async (url, redirectUrls) => {\n    try {\n        const [redirectUrl] = await Promise.all([\n            Promise.race([\n                // wait for app to redirect, resulting in a redirectUrl\n                getRedirectPromise(redirectUrls),\n                // wait for app to return some other way, resulting in null\n                getAppStatePromise(),\n            ]),\n            // open chrome tab\n            nativeModule.openAuthSessionAsync(url),\n        ]);\n        return redirectUrl;\n    }\n    finally {\n        removeAppStateListener();\n        removeRedirectListener();\n    }\n};\nconst openAuthSessionChromeOs = async (url, redirectUrls) => {\n    try {\n        const [redirectUrl] = await Promise.all([\n            Promise.race([\n                // wait for app to redirect, resulting in a redirectUrl\n                getRedirectPromise(redirectUrls),\n                // wait for app to return some other way, resulting in null\n                getAppStatePromise(),\n            ]),\n            Linking.openURL(url),\n        ]);\n        if (redirectUrl)\n            Linking.openURL(redirectUrl);\n        return redirectUrl;\n    }\n    finally {\n        removeAppStateListener();\n        removeRedirectListener();\n    }\n};\nconst getAppStatePromise = () => new Promise(resolve => {\n    // remove any stray listeners before creating new ones\n    removeAppStateListener();\n    let previousState = AppState.currentState;\n    appStateListener = AppState.addEventListener('change', nextAppState => {\n        if (previousState !== 'active' && nextAppState === 'active') {\n            removeAppStateListener();\n            resolve(null);\n        }\n        previousState = nextAppState;\n    });\n});\nconst getRedirectPromise = (redirectUrls) => new Promise(resolve => {\n    // remove any stray listeners before creating new ones\n    removeRedirectListener();\n    redirectListener = Linking.addEventListener('url', event => {\n        if (redirectUrls.some(url => event.url.startsWith(url))) {\n            resolve(event.url);\n        }\n    });\n});\nconst removeAppStateListener = () => {\n    appStateListener?.remove();\n    appStateListener = undefined;\n};\nconst removeRedirectListener = () => {\n    redirectListener?.remove();\n    redirectListener = undefined;\n};\n"],"names":[],"mappings":"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"}