react-native-gigya-sdk
Version:
SAP CDC/Gigya SDK for your React Native applications
82 lines (76 loc) • 2.86 kB
JavaScript
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