UNPKG

7.75 kBSource Map (JSON)View Raw
1{"version":3,"file":"AuthSession.js","sourceRoot":"","sources":["../src/AuthSession.ts"],"names":[],"mappings":"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","sourcesContent":["import { Constants } from 'expo-constants';\nimport qs from 'qs';\n\nimport Linking from './Linking';\nimport WebBrowser from './WebBrowser';\n\ntype AuthSessionOptions = {\n authUrl: string,\n returnUrl?: string,\n};\n\ntype AuthSessionResult =\n | { type: 'cancel' | 'dismiss' | 'locked' }\n | {\n type: 'error' | 'success',\n errorCode: string | null,\n params: Object,\n url: string,\n };\n\nconst BASE_URL = `https://auth.expo.io`;\nlet _authLock = false;\n\nasync function startAsync(options: AuthSessionOptions): Promise<AuthSessionResult> {\n const returnUrl = options.returnUrl || getDefaultReturnUrl();\n const authUrl = options.authUrl;\n const startUrl = getStartUrl(authUrl, returnUrl);\n\n // Prevent accidentally starting to an empty url\n if (!authUrl) {\n throw new Error(\n 'No authUrl provided to AuthSession.startAsync. An authUrl is required -- it points to the page where the user will be able to sign in.'\n );\n }\n\n // Prevent multiple sessions from running at the same time, WebBrowser doesn't\n // support it this makes the behavior predictable.\n if (_authLock) {\n if (__DEV__) {\n console.warn(\n 'Attempted to call AuthSession.startAsync multiple times while already active. Only one AuthSession can be active at any given time.'\n );\n }\n\n return { type: 'locked' };\n }\n\n // About to start session, set lock\n _authLock = true;\n\n let result;\n try {\n result = await _openWebBrowserAsync(startUrl, returnUrl);\n } finally {\n // WebBrowser session complete, unset lock\n _authLock = false;\n }\n\n // Handle failures\n if (!result) {\n throw new Error('Unexpected missing AuthSession result');\n }\n if (!result.url) {\n if (result.type) {\n return result;\n } else {\n throw new Error('Unexpected AuthSession result with missing type');\n }\n }\n\n let { params, errorCode } = parseUrl(result.url);\n\n return {\n type: errorCode ? 'error' : 'success',\n params,\n errorCode,\n url: result.url,\n };\n}\n\nfunction dismiss() {\n WebBrowser.dismissAuthSession();\n}\n\nasync function _openWebBrowserAsync(startUrl, returnUrl) {\n // $FlowIssue: Flow thinks the awaited result can be a promise\n let result = await WebBrowser.openAuthSessionAsync(startUrl, returnUrl);\n if (result.type === 'cancel' || result.type === 'dismiss') {\n return { type: result.type };\n }\n\n return result;\n}\n\nfunction getStartUrl(authUrl: string, returnUrl: string): string {\n let queryString = qs.stringify({\n authUrl,\n returnUrl,\n });\n\n return `${getRedirectUrl()}/start?${queryString}`;\n}\n\nfunction getRedirectUrl(): string {\n const redirectUrl = `${BASE_URL}/${Constants.manifest.id}`;\n if (__DEV__) {\n _warnIfAnonymous(Constants.manifest.id, redirectUrl);\n }\n return redirectUrl;\n}\n\nfunction getDefaultReturnUrl(): string {\n return Linking.makeUrl('expo-auth-session');\n}\n\nfunction parseUrl(url: string): { errorCode: string | null, params: Object } {\n let parts = url.split('#');\n let hash = parts[1];\n let partsWithoutHash = parts[0].split('?');\n let queryString = partsWithoutHash[partsWithoutHash.length - 1];\n\n // Get query string (?hello=world)\n let parsedSearch = qs.parse(queryString);\n\n // Pull errorCode off of params\n let { errorCode } = parsedSearch;\n delete parsedSearch.errorCode;\n\n // Get hash (#abc=example)\n let parsedHash = {};\n if (parts[1]) {\n parsedHash = qs.parse(hash);\n }\n\n // Merge search and hash\n let params = {\n ...parsedSearch,\n ...parsedHash,\n };\n\n return {\n errorCode,\n params,\n };\n}\n\nfunction _warnIfAnonymous(id, url): void {\n if (id.startsWith('@anonymous/')) {\n console.warn(\n `You are not currently signed in to Expo on your development machine. As a result, the redirect URL for AuthSession will be \"${url}\". If you are using an OAuth provider that requires whitelisting redirect URLs, we recommend that you do not whitelist this URL -- instead, you should sign in to Expo to acquired a unique redirect URL. Additionally, if you do decide to publish this app using Expo, you will need to register an account to do it.`\n );\n }\n}\n\nexport default {\n dismiss,\n getRedirectUrl,\n getStartUrl,\n getDefaultReturnUrl,\n get getRedirectUri() {\n console.warn(\n 'Use AuthSession.getRedirectUrl rather than AuthSession.getRedirectUri (Url instead of Uri)'\n );\n return getRedirectUrl;\n },\n startAsync,\n};\n"]}
\No newline at end of file