react-native-unit-components
Version:
Unit React Native components
115 lines (112 loc) • 4.44 kB
JavaScript
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
;