UNPKG

react-native-unit-components

Version:

Unit React Native components

115 lines (112 loc) 4.44 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.useCardWallet = void 0; var _react = require("react"); var _wallet = require("../../../types/shared/wallet.types"); var _UnitSdkManager = require("../../../unitSdkManager/UnitSdkManager"); var _UNWalletPayloadRequest = require("../../../networking/requests/UNWalletPayloadRequest"); var _reactRedux = require("react-redux"); var _pushProvisioningSlice = require("../../../slices/pushProvisioningSlice"); var _useLaunchInitialize = require("./useLaunchInitialize"); var _types = require("../types"); var _helpers = require("../helpers"); var _error = require("../../../types/shared/error.types"); var _errorHelpers = require("../../../types/internal/errorHelpers"); const useCardWallet = cardId => { const [currentUNWallet, setCurrentUNWallet] = (0, _react.useState)(); const { signedNonce } = (0, _reactRedux.useSelector)(_pushProvisioningSlice.selectWallet); const { initializePushProvisioning } = (0, _useLaunchInitialize.useLaunchInitialize)(); const dispatch = (0, _reactRedux.useDispatch)(); const isRecoveringSignedNonceRef = (0, _react.useRef)(false); const shouldRecoverVPSDKForError = errorType => { const recoveringTypes = [_types.UNVPErrorType.PayloadDecryptionFailed, _types.UNVPErrorType.SessionExpired, _types.UNVPErrorType.InvalidNonce]; return recoveringTypes.includes(errorType); }; (0, _react.useEffect)(() => { const getEncryptedPayload = async () => { const env = _UnitSdkManager.UnitSDK.getEnv(); const customerToken = _UnitSdkManager.UnitSDK.getCustomerToken(); if (!env || !customerToken) return; // In case we use flow if (!signedNonce) { await initializePushProvisioning(); return; } const encryptedPayload = await (0, _UNWalletPayloadRequest.getMobileWalletPayload)(customerToken, cardId, env, signedNonce); return encryptedPayload; }; const getCardWalletData = async () => { const currentProvisioningModule = _UnitSdkManager.UnitSDK.getPushProvisionModule(); if (!currentProvisioningModule) return; try { const encryptedPayload = await getEncryptedPayload(); if (!encryptedPayload) return; const walletsResponse = await currentProvisioningModule.launchGetWallets(JSON.stringify({ encPayload: encryptedPayload })); const unWallet = parseWalletsResponse(walletsResponse); if (!unWallet) return; setCurrentUNWallet(unWallet); return; } catch (error) { console.error('Coudln\'t get card wallet data:', error); if (isRecoveringSignedNonceRef.current) return; isRecoveringSignedNonceRef.current = true; // handle unit network api errors if ((0, _errorHelpers.isUNError)(error)) { const errors = error.errors; // errors will return in an array but hold only a single error element if (errors[0]?.code === _error.UNErrorCodes.INVALID_NONCE) { dispatch((0, _pushProvisioningSlice.setSignedNonce)(null)); } return; } // handle VDE SDK errors const errorType = (0, _helpers.promiseRejectToUNVPErrorType)(error); if (!errorType) return; if (shouldRecoverVPSDKForError(errorType)) { dispatch((0, _pushProvisioningSlice.setSignedNonce)(null)); return; } } }; getCardWalletData(); }, [signedNonce, cardId]); return { currentUNWallet }; }; exports.useCardWallet = useCardWallet; const parseWalletsResponse = walletsResponse => { try { const parsedWalletsResponse = JSON.parse(walletsResponse); const wallets = parsedWalletsResponse.wallets; if (!wallets) return null; if (wallets[0].code === _wallet.UNWalletCode.Apple) { return { name: _wallet.UNWalletName.Apple, code: _wallet.UNWalletCode.Apple, status: wallets[0].status }; } else { const googleWallet = wallets.filter(wallet => { return wallet.name === _wallet.UNWalletName.Google; }); if (!googleWallet) return null; return { name: _wallet.UNWalletName.Google, code: _wallet.UNWalletCode.Google, status: googleWallet[0].status }; } } catch (error) { throw new Error('Error parsing wallet response'); } }; //# sourceMappingURL=useCardWallet.js.map