UNPKG

4.45 kBSource Map (JSON)View Raw
1{"version":3,"file":"WebBrowser.js","sourceRoot":"","sources":["../src/WebBrowser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAEhE,MAAM,EAAE,kBAAkB,EAAE,GAAG,aAAa,CAAC;AAiB7C,KAAK,UAAU,gBAAgB,CAAC,GAAW;IACzC,OAAO,kBAAkB,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC;AAClD,CAAC;AAED,SAAS,cAAc;IACrB,kBAAkB,CAAC,cAAc,EAAE,CAAC;AACtC,CAAC;AAED,KAAK,UAAU,oBAAoB,CAAC,GAAW,EAAE,WAAmB;IAClE,IAAI,+BAA+B,EAAE,EAAE;QACrC,OAAO,kBAAkB,CAAC,oBAAoB,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC;KAClE;SAAM;QACL,OAAO,6BAA6B,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC;KACxD;AACH,CAAC;AAED,SAAS,kBAAkB;IACzB,IAAI,+BAA+B,EAAE,EAAE;QACrC,kBAAkB,CAAC,kBAAkB,EAAE,CAAC;KACzC;SAAM;QACL,kBAAkB,CAAC,cAAc,EAAE,CAAC;KACrC;AACH,CAAC;AAED,qEAAqE;AAErE,SAAS,+BAA+B;IACtC,IAAI,QAAQ,CAAC,EAAE,KAAK,SAAS,EAAE;QAC7B,OAAO,KAAK,CAAC;KACd;IAED,MAAM,aAAa,GAAG,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,EAAE,CAAC,CAAC;IAC7D,OAAO,aAAa,IAAI,EAAE,CAAC;AAC7B,CAAC;AAED,IAAI,gBAAgB,GAA4C,IAAI,CAAC;AAErE,KAAK,UAAU,6BAA6B,CAC1C,QAAgB,EAChB,SAAiB;IAEjB,IAAI,gBAAgB,EAAE;QACpB,MAAM,IAAI,KAAK,CACb,wGAAwG,CACzG,CAAC;KACH;IAED,IAAI;QACF,OAAO,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC,gBAAgB,CAAC,QAAQ,CAAC,EAAE,qBAAqB,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;KAC3F;YAAS;QACR,cAAc,EAAE,CAAC;QACjB,IAAI,CAAC,gBAAgB,EAAE;YACrB,MAAM,IAAI,KAAK,CACb,oGAAoG,CACrG,CAAC;SACH;QACD,OAAO,CAAC,mBAAmB,CAAC,KAAK,EAAE,gBAAgB,CAAC,CAAC;QACrD,gBAAgB,GAAG,IAAI,CAAC;KACzB;AACH,CAAC;AAED,SAAS,qBAAqB,CAAC,SAAiB;IAC9C,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE;QAC3B,gBAAgB,GAAG,CAAC,KAAoB,EAAE,EAAE;YAC1C,IAAI,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE;gBACnC,OAAO,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC,GAAG,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC;aAC9C;QACH,CAAC,CAAC;QAEF,OAAO,CAAC,gBAAgB,CAAC,KAAK,EAAE,gBAAgB,CAAC,CAAC;IACpD,CAAC,CAAC,CAAC;AACL,CAAC;AAED,eAAe;IACb,gBAAgB;IAChB,oBAAoB;IACpB,cAAc;IACd,kBAAkB;CACnB,CAAC","sourcesContent":["import { Linking, NativeModules, Platform } from 'react-native';\n\nconst { ExponentWebBrowser } = NativeModules;\n\ntype RedirectEvent = {\n url: string;\n};\n\ntype AuthSessionResult = RedirectResult | BrowserResult;\n\ntype BrowserResult = {\n type: 'cancel' | 'dismiss';\n};\n\ntype RedirectResult = {\n type: 'success';\n url: string;\n};\n\nasync function openBrowserAsync(url: string): Promise<BrowserResult> {\n return ExponentWebBrowser.openBrowserAsync(url);\n}\n\nfunction dismissBrowser(): void {\n ExponentWebBrowser.dismissBrowser();\n}\n\nasync function openAuthSessionAsync(url: string, redirectUrl: string): Promise<AuthSessionResult> {\n if (_authSessionIsNativelySupported()) {\n return ExponentWebBrowser.openAuthSessionAsync(url, redirectUrl);\n } else {\n return _openAuthSessionPolyfillAsync(url, redirectUrl);\n }\n}\n\nfunction dismissAuthSession(): void {\n if (_authSessionIsNativelySupported()) {\n ExponentWebBrowser.dismissAuthSession();\n } else {\n ExponentWebBrowser.dismissBrowser();\n }\n}\n\n/* iOS <= 10 and Android polyfill for SFAuthenticationSession flow */\n\nfunction _authSessionIsNativelySupported(): boolean {\n if (Platform.OS === 'android') {\n return false;\n }\n\n const versionNumber = parseInt(String(Platform.Version), 10);\n return versionNumber >= 11;\n}\n\nlet _redirectHandler: ((event: RedirectEvent) => void) | null = null;\n\nasync function _openAuthSessionPolyfillAsync(\n startUrl: string,\n returnUrl: string\n): Promise<AuthSessionResult> {\n if (_redirectHandler) {\n throw new Error(\n `The WebBrowser's auth session is in an invalid state with a redirect handler set when it should not be`\n );\n }\n\n try {\n return await Promise.race([openBrowserAsync(startUrl), _waitForRedirectAsync(returnUrl)]);\n } finally {\n dismissBrowser();\n if (!_redirectHandler) {\n throw new Error(\n `The WebBrowser auth session is in an invalid state with no redirect handler when one should be set`\n );\n }\n Linking.removeEventListener('url', _redirectHandler);\n _redirectHandler = null;\n }\n}\n\nfunction _waitForRedirectAsync(returnUrl: string): Promise<RedirectResult> {\n return new Promise(resolve => {\n _redirectHandler = (event: RedirectEvent) => {\n if (event.url.startsWith(returnUrl)) {\n resolve({ url: event.url, type: 'success' });\n }\n };\n\n Linking.addEventListener('url', _redirectHandler);\n });\n}\n\nexport default {\n openBrowserAsync,\n openAuthSessionAsync,\n dismissBrowser,\n dismissAuthSession,\n};\n"]}
\No newline at end of file