UNPKG

react-native-gigya-sdk

Version:
82 lines (76 loc) 2.86 kB
import { NativeModules } from 'react-native'; const { GigyaSdk } = NativeModules; import { GigyaSdkLinkAccountVersions } from '../types'; import getState from './getState'; import sendApiCall from './sendApiCall'; import isGigyaError from './isGigyaError'; import { setState } from '../internals/state'; import getAccountInfo from './getAccountInfo'; import formatParams from '../internals/formatParams'; import handleSdkCall from '../internals/handleSdkCall'; import clearErrorState from '../internals/clearErrorState'; import saveAuthenticationAttempt from '../internals/saveAuthenticationAttempt'; export default function (provider, params) { return new Promise(async (resolve, reject) => { const resolvePromise = async output => { try { await clearErrorState(); } catch (err) {} resolve(output); }; try { var _state$regToken; const state = await getState(); let { sessionInfo, regToken, ...rest } = params || { sessionInfo: state.sessionInfo, regToken: (_state$regToken = state.regToken) === null || _state$regToken === void 0 ? void 0 : _state$regToken.value }; sessionInfo = (params === null || params === void 0 ? void 0 : params.sessionInfo) || state.sessionInfo; if (state.linkAccountVersion === GigyaSdkLinkAccountVersions.V1) { const responseV1 = await handleSdkCall(GigyaSdk.socialLogin(provider, formatParams({ regToken, loginMode: 'link', ...(rest && rest) }))); await setState({ UID: responseV1.UID }); return resolvePromise(responseV1); } else { var _sessionInfo, _sessionInfo2; if (!((_sessionInfo = sessionInfo) !== null && _sessionInfo !== void 0 && _sessionInfo.provider)) throw new Error("no 'sessionInfo.provider' param provided");else if (!((_sessionInfo2 = sessionInfo) !== null && _sessionInfo2 !== void 0 && _sessionInfo2.access_token)) throw new Error("no 'sessionInfo.access_token' param provided"); const existingAccount = await GigyaSdk.socialLogin(provider, formatParams({ ...(rest && rest) })); await setState({ UID: existingAccount.UID }); await sendApiCall('accounts.notifySocialLogin', { targetEnv: 'mobile', loginMode: 'connect', providerSessions: { [sessionInfo.provider]: { authToken: sessionInfo.access_token } } }); return resolvePromise(await getAccountInfo()); } } catch (e) { if (await isGigyaError(e)) { try { await saveAuthenticationAttempt(provider, e); } catch (err) { return reject(err); } } reject(e); } }); } //# sourceMappingURL=linkToSocialProvider.js.map