diff --git a/assets/icons/credit-card/diners-icon.tsx b/assets/icons/credit-card/diners-icon.tsx
new file mode 100644
index 000000000..bb6b57410
--- /dev/null
+++ b/assets/icons/credit-card/diners-icon.tsx
@@ -0,0 +1,32 @@
+import * as React from 'react';
+import Svg, { Path, SvgProps } from 'react-native-svg';
+
+export const DinersIcon = (props: SvgProps) => {
+ return (
+
+ );
+};
diff --git a/assets/icons/credit-card/elo-icon.tsx b/assets/icons/credit-card/elo-icon.tsx
new file mode 100644
index 000000000..2e1f1da19
--- /dev/null
+++ b/assets/icons/credit-card/elo-icon.tsx
@@ -0,0 +1,36 @@
+import * as React from 'react';
+import Svg, { Path, SvgProps } from 'react-native-svg';
+
+export const EloIcon = (props: SvgProps) => {
+ return (
+
+ );
+};
diff --git a/assets/icons/credit-card/mastercard-icon.tsx b/assets/icons/credit-card/mastercard-icon.tsx
new file mode 100644
index 000000000..054efc93e
--- /dev/null
+++ b/assets/icons/credit-card/mastercard-icon.tsx
@@ -0,0 +1,38 @@
+import * as React from 'react';
+import Svg, { Path, SvgProps } from 'react-native-svg';
+
+export const MasterCardIcon = (props: SvgProps) => {
+ return (
+
+ );
+};
diff --git a/assets/icons/credit-card/visa-icon.tsx b/assets/icons/credit-card/visa-icon.tsx
new file mode 100644
index 000000000..8ebf62b7e
--- /dev/null
+++ b/assets/icons/credit-card/visa-icon.tsx
@@ -0,0 +1,28 @@
+import * as React from 'react';
+import Svg, { Path, SvgProps } from 'react-native-svg';
+
+export const VisaIcon = (props: SvgProps) => {
+ return (
+
+ );
+};
diff --git a/common/components/inputs/DefaultInput.tsx b/common/components/inputs/DefaultInput.tsx
index e2e04d97b..4bfc3c712 100644
--- a/common/components/inputs/DefaultInput.tsx
+++ b/common/components/inputs/DefaultInput.tsx
@@ -6,10 +6,23 @@ import PaddedView from '../containers/PaddedView';
export interface DefaultInputProps extends TextInputProps {
title?: string;
children?: ReactNode;
+ trailing?: ReactNode;
+ errorMessage?: string;
}
export default React.forwardRef(
- ({ title, children, editable = true, style, ...props }: DefaultInputProps, externalRef) => {
+ (
+ {
+ title,
+ children,
+ editable = true,
+ style,
+ trailing,
+ errorMessage,
+ ...props
+ }: DefaultInputProps,
+ externalRef
+ ) => {
const internalRef = useRef(null);
const ref = (externalRef as React.RefObject) || internalRef;
const focus = useCallback(() => {
@@ -19,46 +32,54 @@ export default React.forwardRef(
// }
}, [ref]);
return (
-
-
- {title && (
-
-
- {title}
-
-
- )}
-
-
- {children}
-
+
+
+
+ {title && (
+
+
+ {title}
+
+
+ )}
+
+
+
+
+ {trailing}
+
+
+ {children}
+
+ {!!errorMessage && {errorMessage}}
+
);
}
);
diff --git a/common/utils/credit-card/CreditCard.ts b/common/utils/credit-card/CreditCard.ts
new file mode 100644
index 000000000..17b1cd414
--- /dev/null
+++ b/common/utils/credit-card/CreditCard.ts
@@ -0,0 +1,27 @@
+import { ReactNode } from 'react';
+
+export interface ICreditCard {
+ type: CreditCardType;
+
+ label: string;
+
+ icon?: ReactNode;
+}
+
+export enum CreditCardType {
+ american_express,
+ diners_club,
+ discover,
+ elo,
+ hiper,
+ hipercard,
+ jcb,
+ maestro,
+ mastercard,
+ mir,
+ unionpay,
+ visa,
+ undefined,
+}
+
+export type CreditCardTypeStrings = keyof typeof CreditCardType;
diff --git a/common/utils/credit-card/CreditCardImplementation.ts b/common/utils/credit-card/CreditCardImplementation.ts
new file mode 100644
index 000000000..caee09566
--- /dev/null
+++ b/common/utils/credit-card/CreditCardImplementation.ts
@@ -0,0 +1,128 @@
+import creditCardType from 'credit-card-type';
+import { DinersIcon } from '../../../assets/icons/credit-card/diners-icon';
+import { EloIcon } from '../../../assets/icons/credit-card/elo-icon';
+import { MasterCardIcon } from '../../../assets/icons/credit-card/mastercard-icon';
+import { VisaIcon } from '../../../assets/icons/credit-card/visa-icon';
+import { CreditCardType, CreditCardTypeStrings, ICreditCard } from './CreditCard';
+import { GetCreditCard, GetType, IsAllowed, StringToCreditCardType } from './ICreditCardRepository';
+
+const ALLOWED_CREDIT_CARD_TYPES: CreditCardType[] = [
+ CreditCardType.diners_club,
+ CreditCardType.elo,
+ CreditCardType.mastercard,
+ CreditCardType.visa,
+];
+
+/**
+ * Map credit card strings from package `credit-card-type` to `CreditCardType`.
+ */
+const stringToCreditCardType: StringToCreditCardType = {
+ 'american-express': CreditCardType.american_express,
+ 'diners-club': CreditCardType.diners_club,
+ 'discover': CreditCardType.discover,
+ 'elo': CreditCardType.elo,
+ 'hiper': CreditCardType.hiper,
+ 'hipercard': CreditCardType.hipercard,
+ 'jcb': CreditCardType.jcb,
+ 'maestro': CreditCardType.maestro,
+ 'mastercard': CreditCardType.mastercard,
+ 'mir': CreditCardType.mir,
+ 'unionpay': CreditCardType.unionpay,
+ 'visa': CreditCardType.visa,
+};
+
+/**
+ * Verifies credit card number and returns the corresponding `CreditCardType`.
+ *
+ * @param creditCardNumber - credit card number.
+ */
+const _getType: GetType = (creditCardNumber: string): CreditCardType => {
+ const typeCard = creditCardType(creditCardNumber);
+ const type = typeCard[0]?.type;
+
+ if (typeCard.length === 1 && type && Object.keys(stringToCreditCardType).includes(type)) {
+ return stringToCreditCardType[type];
+ }
+
+ return CreditCardType.undefined;
+};
+
+/**
+ * Returns credit card metadata from creditCardNumber.
+ *
+ * @param creditCardNumber - credit card number.
+ */
+export const getCreditCard: GetCreditCard = (creditCardNumber: string): ICreditCard => {
+ const type = CreditCardType[_getType(creditCardNumber)] as CreditCardTypeStrings;
+
+ return _creditCards[type];
+};
+
+/**
+ * Checks wheter the app supports the credit card type.
+ *
+ * @param creditCardType - credit card type.
+ */
+export const isAllowed: IsAllowed = (creditCardType: CreditCardType): boolean => {
+ return ALLOWED_CREDIT_CARD_TYPES.includes(creditCardType);
+};
+
+// TODO: Implement all credit card type icon.
+const _creditCards: Record = {
+ american_express: {
+ type: CreditCardType.american_express,
+ label: 'American Express',
+ },
+ diners_club: {
+ type: CreditCardType.diners_club,
+ label: 'Diners Club',
+ icon: DinersIcon,
+ },
+ discover: {
+ type: CreditCardType.discover,
+ label: 'Discover',
+ },
+ elo: {
+ type: CreditCardType.elo,
+ label: 'Elo',
+ icon: EloIcon,
+ },
+ hiper: {
+ type: CreditCardType.hiper,
+ label: 'Hiper',
+ },
+ hipercard: {
+ type: CreditCardType.hipercard,
+ label: 'Hipercard',
+ },
+ jcb: {
+ type: CreditCardType.jcb,
+ label: 'JCB',
+ },
+ maestro: {
+ type: CreditCardType.maestro,
+ label: 'Maestro',
+ },
+ mastercard: {
+ type: CreditCardType.mastercard,
+ label: 'Mastercard',
+ icon: MasterCardIcon,
+ },
+ mir: {
+ type: CreditCardType.mir,
+ label: 'Mir',
+ },
+ unionpay: {
+ type: CreditCardType.unionpay,
+ label: 'Union Pay',
+ },
+ visa: {
+ type: CreditCardType.visa,
+ label: 'Visa',
+ icon: VisaIcon,
+ },
+ undefined: {
+ type: CreditCardType.undefined,
+ label: '',
+ },
+};
diff --git a/common/utils/credit-card/ICreditCardRepository.ts b/common/utils/credit-card/ICreditCardRepository.ts
new file mode 100644
index 000000000..4acb223d5
--- /dev/null
+++ b/common/utils/credit-card/ICreditCardRepository.ts
@@ -0,0 +1,6 @@
+import { CreditCardType, ICreditCard } from './CreditCard';
+
+export type StringToCreditCardType = Record;
+export type GetCreditCard = (creditCardNumber: string) => ICreditCard;
+export type GetType = (creditCardNumber: string) => CreditCardType;
+export type IsAllowed = (creditCardType: CreditCardType) => boolean;
diff --git a/consumer/v2/main/profile/ProfileAddCard.tsx b/consumer/v2/main/profile/ProfileAddCard.tsx
index be5f5d618..c575705d3 100644
--- a/consumer/v2/main/profile/ProfileAddCard.tsx
+++ b/consumer/v2/main/profile/ProfileAddCard.tsx
@@ -2,7 +2,7 @@ import { Feather } from '@expo/vector-icons';
import { RouteProp } from '@react-navigation/native';
import { StackNavigationProp } from '@react-navigation/stack';
import { isEmpty, toNumber, trim } from 'lodash';
-import React from 'react';
+import React, { useCallback } from 'react';
import { Keyboard, Text, TextInput, View } from 'react-native';
import { ScrollView } from 'react-native-gesture-handler';
import { useDispatch } from 'react-redux';
@@ -11,7 +11,7 @@ import DefaultButton from '../../../../common/components/buttons/DefaultButton';
import DefaultInput from '../../../../common/components/inputs/DefaultInput';
import {
cardFormatter,
- cardMask,
+ cardMask
} from '../../../../common/components/inputs/pattern-input/formatters';
import { numbersOnlyParser } from '../../../../common/components/inputs/pattern-input/parsers';
import PatternInput from '../../../../common/components/inputs/PatternInput';
@@ -19,6 +19,11 @@ import useAxiosCancelToken from '../../../../common/hooks/useAxiosCancelToken';
import { useSegmentScreen } from '../../../../common/store/api/track';
import { showToast } from '../../../../common/store/ui/actions';
import { colors, halfPadding, padding, screens, texts } from '../../../../common/styles';
+import { CreditCardType } from '../../../../common/utils/credit-card/CreditCard';
+import {
+ getCreditCard,
+ isAllowed
+} from '../../../../common/utils/credit-card/CreditCardImplementation';
import { t } from '../../../../strings';
import { RestaurantNavigatorParamList } from '../../food/restaurant/types';
import { OngoingOrderNavigatorParamList } from '../../ongoing/types';
@@ -33,9 +38,9 @@ export type ProfileAddCardParamList = {
type ScreenNavigationProp = StackNavigationProp<
ProfileParamList &
- RestaurantNavigatorParamList &
- P2POrderNavigatorParamList &
- OngoingOrderNavigatorParamList,
+ RestaurantNavigatorParamList &
+ P2POrderNavigatorParamList &
+ OngoingOrderNavigatorParamList,
'ProfileAddCard'
>;
type ScreenRouteProp = RouteProp;
@@ -53,6 +58,10 @@ export default function ({ navigation, route }: Props) {
const dispatch = useDispatch();
// state
const [number, setNumber] = React.useState('');
+ const [numberError, setNumberError] = React.useState('');
+ const [yearError, setYearError] = React.useState('');
+ const [monthError, setMonthError] = React.useState('');
+ const [CreditCardIcon, setCreditCardIcon] = React.useState();
const [month, setMonth] = React.useState('');
const [year, setYear] = React.useState('');
const [cvv, setCVV] = React.useState('');
@@ -90,6 +99,58 @@ export default function ({ navigation, route }: Props) {
dispatch(showToast(error.toString(), 'error'));
}
};
+ const onChangeNumber = useCallback(
+ (text: string) => {
+ if (isNaN(toNumber(text))) return;
+
+ setNumber(text);
+
+ const { label, type, icon: creditCardIcon } = getCreditCard(text);
+
+ if (!isAllowed(type) && type !== CreditCardType.undefined) {
+ setNumberError(`Não aceitamos a bandeira ${label}`);
+ } else {
+ setNumberError('');
+ }
+
+ setCreditCardIcon(creditCardIcon);
+ },
+ [setNumber, setNumberError]
+ );
+ const onChangeYear = useCallback(
+ (yearString: string) => {
+ const yearNumber = toNumber(yearString);
+ if (isNaN(yearNumber)) return;
+
+ setYear(yearString);
+
+ const currentYear = new Date().getFullYear();
+ // TODO: Get upperbound limit year
+
+ if (currentYear > yearNumber && yearString.length === 4) {
+ setYearError('Digite um ano válido');
+ } else {
+ setYearError('');
+ }
+ },
+ [setYear, setYearError]
+ );
+ const onChangeMonth = useCallback(
+ (monthString: string) => {
+ const monthNumber = toNumber(monthString);
+ if (isNaN(monthNumber)) return;
+
+ setMonth(monthString);
+
+ // TODO: Dont show error when input is empty or only one zero
+ if ((monthNumber < 1 || monthNumber > 12) && monthString.length === 2) {
+ setMonthError('Digite um mês válido');
+ } else {
+ setMonthError('');
+ }
+ },
+ [setMonth, setMonthError]
+ );
// refs
const expirationMonthRef = React.useRef(null);
const expirationYearRef = React.useRef(null);
@@ -118,9 +179,9 @@ export default function ({ navigation, route }: Props) {
autoCompleteType="cc-number"
returnKeyType="next"
blurOnSubmit={false}
- onChangeText={(text) => {
- if (!isNaN(toNumber(text))) setNumber(text);
- }}
+ onChangeText={onChangeNumber}
+ trailing={CreditCardIcon}
+ errorMessage={numberError}
onSubmitEditing={() => expirationMonthRef.current?.focus()}
/>
@@ -135,9 +196,8 @@ export default function ({ navigation, route }: Props) {
returnKeyType="next"
autoCompleteType="cc-exp-month"
blurOnSubmit={false}
- onChangeText={(text) => {
- if (!isNaN(toNumber(text))) setMonth(text);
- }}
+ onChangeText={onChangeMonth}
+ errorMessage={monthError}
onSubmitEditing={() => expirationYearRef.current?.focus()}
/>
{
- if (!isNaN(toNumber(text))) setYear(text);
- }}
+ onChangeText={onChangeYear}
+ errorMessage={yearError}
onSubmitEditing={() => cvvRef.current?.focus()}
/>
diff --git a/consumer/v2/main/profile/ProfilePaymentMethods.tsx b/consumer/v2/main/profile/ProfilePaymentMethods.tsx
index eb7302af6..5d9c704a0 100644
--- a/consumer/v2/main/profile/ProfilePaymentMethods.tsx
+++ b/consumer/v2/main/profile/ProfilePaymentMethods.tsx
@@ -25,9 +25,9 @@ export type ProfilePaymentMethodsParamList = {
type ScreenNavigationProp = StackNavigationProp<
ProfileParamList &
- RestaurantNavigatorParamList &
- P2POrderNavigatorParamList &
- OngoingOrderNavigatorParamList,
+ RestaurantNavigatorParamList &
+ P2POrderNavigatorParamList &
+ OngoingOrderNavigatorParamList,
'ProfilePaymentMethods'
>;
type ScreenRouteProp = RouteProp;
@@ -105,7 +105,7 @@ export default function ({ navigation, route }: Props) {
ListFooterComponent={() => (
{
if (returnScreen) navigation.navigate('ProfileAddCard', { returnScreen });
else navigation.navigate('ProfileAddCard');
diff --git a/package-lock.json b/package-lock.json
index bc433c269..411683190 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -123,6 +123,8 @@
"dependencies": {
"@firebase/analytics": {
"version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/@firebase/analytics/-/analytics-0.5.0.tgz",
+ "integrity": "sha512-WyQ8BT6JSoXpg4q7SV9Yg5EPXbGbG8FkkXAIhV/AnslCglhpxegO1FU33qbuT4Grzc525hZJA97oqtQS8tm4Wg==",
"requires": {
"@firebase/analytics-types": "0.4.0",
"@firebase/component": "0.1.19",
@@ -133,10 +135,14 @@
}
},
"@firebase/analytics-types": {
- "version": "0.4.0"
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/@firebase/analytics-types/-/analytics-types-0.4.0.tgz",
+ "integrity": "sha512-Jj2xW+8+8XPfWGkv9HPv/uR+Qrmq37NPYT352wf7MvE9LrstpLVmFg3LqG6MCRr5miLAom5sen2gZ+iOhVDeRA=="
},
"@firebase/app": {
"version": "0.6.11",
+ "resolved": "https://registry.npmjs.org/@firebase/app/-/app-0.6.11.tgz",
+ "integrity": "sha512-FH++PaoyTzfTAVuJ0gITNYEIcjT5G+D0671La27MU8Vvr6MTko+5YUZ4xS9QItyotSeRF4rMJ1KR7G8LSyySiA==",
"requires": {
"@firebase/app-types": "0.6.1",
"@firebase/component": "0.1.19",
@@ -148,22 +154,32 @@
}
},
"@firebase/app-types": {
- "version": "0.6.1"
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/@firebase/app-types/-/app-types-0.6.1.tgz",
+ "integrity": "sha512-L/ZnJRAq7F++utfuoTKX4CLBG5YR7tFO3PLzG1/oXXKEezJ0kRL3CMRoueBEmTCzVb/6SIs2Qlaw++uDgi5Xyg=="
},
"@firebase/auth": {
"version": "0.14.9",
+ "resolved": "https://registry.npmjs.org/@firebase/auth/-/auth-0.14.9.tgz",
+ "integrity": "sha512-PxYa2r5qUEdheXTvqROFrMstK8W4uPiP7NVfp+2Bec+AjY5PxZapCx/YFDLkU0D7YBI82H74PtZrzdJZw7TJ4w==",
"requires": {
"@firebase/auth-types": "0.10.1"
}
},
"@firebase/auth-interop-types": {
- "version": "0.1.5"
+ "version": "0.1.5",
+ "resolved": "https://registry.npmjs.org/@firebase/auth-interop-types/-/auth-interop-types-0.1.5.tgz",
+ "integrity": "sha512-88h74TMQ6wXChPA6h9Q3E1Jg6TkTHep2+k63OWg3s0ozyGVMeY+TTOti7PFPzq5RhszQPQOoCi59es4MaRvgCw=="
},
"@firebase/auth-types": {
- "version": "0.10.1"
+ "version": "0.10.1",
+ "resolved": "https://registry.npmjs.org/@firebase/auth-types/-/auth-types-0.10.1.tgz",
+ "integrity": "sha512-/+gBHb1O9x/YlG7inXfxff/6X3BPZt4zgBv4kql6HEmdzNQCodIRlEYnI+/da+lN+dha7PjaFH7C7ewMmfV7rw=="
},
"@firebase/component": {
"version": "0.1.19",
+ "resolved": "https://registry.npmjs.org/@firebase/component/-/component-0.1.19.tgz",
+ "integrity": "sha512-L0S3g8eqaerg8y0zox3oOHSTwn/FE8RbcRHiurnbESvDViZtP5S5WnhuAPd7FnFxa8ElWK0z1Tr3ikzWDv1xdQ==",
"requires": {
"@firebase/util": "0.3.2",
"tslib": "^1.11.1"
@@ -171,6 +187,8 @@
},
"@firebase/database": {
"version": "0.6.12",
+ "resolved": "https://registry.npmjs.org/@firebase/database/-/database-0.6.12.tgz",
+ "integrity": "sha512-OLUxp8TkXiML4X5LWM5IACsSDvo3fcf4mTbTe5RF+N6TRFv0Svzlet5OgGIa3ET1dQvNiisrMX7zzRa0OTLs7Q==",
"requires": {
"@firebase/auth-interop-types": "0.1.5",
"@firebase/component": "0.1.19",
@@ -183,12 +201,16 @@
},
"@firebase/database-types": {
"version": "0.5.2",
+ "resolved": "https://registry.npmjs.org/@firebase/database-types/-/database-types-0.5.2.tgz",
+ "integrity": "sha512-ap2WQOS3LKmGuVFKUghFft7RxXTyZTDr0Xd8y2aqmWsbJVjgozi0huL/EUMgTjGFrATAjcf2A7aNs8AKKZ2a8g==",
"requires": {
"@firebase/app-types": "0.6.1"
}
},
"@firebase/firestore": {
"version": "1.16.7",
+ "resolved": "https://registry.npmjs.org/@firebase/firestore/-/firestore-1.16.7.tgz",
+ "integrity": "sha512-MrX7te1eUib2pUzD3dLWdRuM7EPcCxtPwO4M9og3IFYr1U3XlxybD7kxyYswltHcUm6+kba3VKL1rvkqZ1sn2g==",
"requires": {
"@firebase/component": "0.1.19",
"@firebase/firestore-types": "1.12.1",
@@ -202,10 +224,14 @@
}
},
"@firebase/firestore-types": {
- "version": "1.12.1"
+ "version": "1.12.1",
+ "resolved": "https://registry.npmjs.org/@firebase/firestore-types/-/firestore-types-1.12.1.tgz",
+ "integrity": "sha512-CpWcDriYnGDoAl0D9DcSuwX0b/fXqi7qOwuuTI1M0SYxau48G8cqhVjzjqPDgEM3kDGYJTnPN3ALS0Z4cnwERQ=="
},
"@firebase/functions": {
"version": "0.4.51",
+ "resolved": "https://registry.npmjs.org/@firebase/functions/-/functions-0.4.51.tgz",
+ "integrity": "sha512-PPx8eZcr4eoU9BITOUGUVurs4WZu8Thj3uCWx766dU3mV1W/7kRgtiptmW0XJUB18FZ1PT3+Hadd6V6vjtLgYw==",
"requires": {
"@firebase/component": "0.1.19",
"@firebase/functions-types": "0.3.17",
@@ -215,10 +241,14 @@
}
},
"@firebase/functions-types": {
- "version": "0.3.17"
+ "version": "0.3.17",
+ "resolved": "https://registry.npmjs.org/@firebase/functions-types/-/functions-types-0.3.17.tgz",
+ "integrity": "sha512-DGR4i3VI55KnYk4IxrIw7+VG7Q3gA65azHnZxo98Il8IvYLr2UTBlSh72dTLlDf25NW51HqvJgYJDKvSaAeyHQ=="
},
"@firebase/installations": {
"version": "0.4.17",
+ "resolved": "https://registry.npmjs.org/@firebase/installations/-/installations-0.4.17.tgz",
+ "integrity": "sha512-AE/TyzIpwkC4UayRJD419xTqZkKzxwk0FLht3Dci8WI2OEKHSwoZG9xv4hOBZebe+fDzoV2EzfatQY8c/6Avig==",
"requires": {
"@firebase/component": "0.1.19",
"@firebase/installations-types": "0.3.4",
@@ -228,13 +258,19 @@
}
},
"@firebase/installations-types": {
- "version": "0.3.4"
+ "version": "0.3.4",
+ "resolved": "https://registry.npmjs.org/@firebase/installations-types/-/installations-types-0.3.4.tgz",
+ "integrity": "sha512-RfePJFovmdIXb6rYwtngyxuEcWnOrzdZd9m7xAW0gRxDIjBT20n3BOhjpmgRWXo/DAxRmS7bRjWAyTHY9cqN7Q=="
},
"@firebase/logger": {
- "version": "0.2.6"
+ "version": "0.2.6",
+ "resolved": "https://registry.npmjs.org/@firebase/logger/-/logger-0.2.6.tgz",
+ "integrity": "sha512-KIxcUvW/cRGWlzK9Vd2KB864HlUnCfdTH0taHE0sXW5Xl7+W68suaeau1oKNEqmc3l45azkd4NzXTCWZRZdXrw=="
},
"@firebase/messaging": {
"version": "0.7.1",
+ "resolved": "https://registry.npmjs.org/@firebase/messaging/-/messaging-0.7.1.tgz",
+ "integrity": "sha512-iev/ST9v0xd/8YpGYrZtDcqdD9J6ZWzSuceRn8EKy5vIgQvW/rk2eTQc8axzvDpQ36ZfphMYuhW6XuNrR3Pd2Q==",
"requires": {
"@firebase/component": "0.1.19",
"@firebase/installations": "0.4.17",
@@ -245,10 +281,14 @@
}
},
"@firebase/messaging-types": {
- "version": "0.5.0"
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/@firebase/messaging-types/-/messaging-types-0.5.0.tgz",
+ "integrity": "sha512-QaaBswrU6umJYb/ZYvjR5JDSslCGOH6D9P136PhabFAHLTR4TWjsaACvbBXuvwrfCXu10DtcjMxqfhdNIB1Xfg=="
},
"@firebase/performance": {
"version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/@firebase/performance/-/performance-0.4.1.tgz",
+ "integrity": "sha512-eAqS3/456xnUwuTg4w58x2fYbvTtQpgt67lpBUX3DuhOqwiM8+JELRte52nDgum2lTaTZWiu5de9mPuAYx2WDg==",
"requires": {
"@firebase/component": "0.1.19",
"@firebase/installations": "0.4.17",
@@ -259,10 +299,14 @@
}
},
"@firebase/performance-types": {
- "version": "0.0.13"
+ "version": "0.0.13",
+ "resolved": "https://registry.npmjs.org/@firebase/performance-types/-/performance-types-0.0.13.tgz",
+ "integrity": "sha512-6fZfIGjQpwo9S5OzMpPyqgYAUZcFzZxHFqOyNtorDIgNXq33nlldTL/vtaUZA8iT9TT5cJlCrF/jthKU7X21EA=="
},
"@firebase/polyfill": {
"version": "0.3.36",
+ "resolved": "https://registry.npmjs.org/@firebase/polyfill/-/polyfill-0.3.36.tgz",
+ "integrity": "sha512-zMM9oSJgY6cT2jx3Ce9LYqb0eIpDE52meIzd/oe/y70F+v9u1LDqk5kUF5mf16zovGBWMNFmgzlsh6Wj0OsFtg==",
"requires": {
"core-js": "3.6.5",
"promise-polyfill": "8.1.3",
@@ -270,12 +314,16 @@
},
"dependencies": {
"whatwg-fetch": {
- "version": "2.0.4"
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-2.0.4.tgz",
+ "integrity": "sha512-dcQ1GWpOD/eEQ97k66aiEVpNnapVj90/+R+SXTPYGHpYBBypfKJEQjLrvMZ7YXbKm21gXd4NcuxUTjiv1YtLng=="
}
}
},
"@firebase/remote-config": {
"version": "0.1.28",
+ "resolved": "https://registry.npmjs.org/@firebase/remote-config/-/remote-config-0.1.28.tgz",
+ "integrity": "sha512-4zSdyxpt94jAnFhO8toNjG8oMKBD+xTuBIcK+Nw8BdQWeJhEamgXlupdBARUk1uf3AvYICngHH32+Si/dMVTbw==",
"requires": {
"@firebase/component": "0.1.19",
"@firebase/installations": "0.4.17",
@@ -286,10 +334,14 @@
}
},
"@firebase/remote-config-types": {
- "version": "0.1.9"
+ "version": "0.1.9",
+ "resolved": "https://registry.npmjs.org/@firebase/remote-config-types/-/remote-config-types-0.1.9.tgz",
+ "integrity": "sha512-G96qnF3RYGbZsTRut7NBX0sxyczxt1uyCgXQuH/eAfUCngxjEGcZQnBdy6mvSdqdJh5mC31rWPO4v9/s7HwtzA=="
},
"@firebase/storage": {
"version": "0.3.43",
+ "resolved": "https://registry.npmjs.org/@firebase/storage/-/storage-0.3.43.tgz",
+ "integrity": "sha512-Jp54jcuyimLxPhZHFVAhNbQmgTu3Sda7vXjXrNpPEhlvvMSq4yuZBR6RrZxe/OrNVprLHh/6lTCjwjOVSo3bWA==",
"requires": {
"@firebase/component": "0.1.19",
"@firebase/storage-types": "0.3.13",
@@ -298,19 +350,27 @@
}
},
"@firebase/storage-types": {
- "version": "0.3.13"
+ "version": "0.3.13",
+ "resolved": "https://registry.npmjs.org/@firebase/storage-types/-/storage-types-0.3.13.tgz",
+ "integrity": "sha512-pL7b8d5kMNCCL0w9hF7pr16POyKkb3imOW7w0qYrhBnbyJTdVxMWZhb0HxCFyQWC0w3EiIFFmxoz8NTFZDEFog=="
},
"@firebase/util": {
"version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/@firebase/util/-/util-0.3.2.tgz",
+ "integrity": "sha512-Dqs00++c8rwKky6KCKLLY2T1qYO4Q+X5t+lF7DInXDNF4ae1Oau35bkD+OpJ9u7l1pEv7KHowP6CUKuySCOc8g==",
"requires": {
"tslib": "^1.11.1"
}
},
"@firebase/webchannel-wrapper": {
- "version": "0.3.0"
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/@firebase/webchannel-wrapper/-/webchannel-wrapper-0.3.0.tgz",
+ "integrity": "sha512-VniCGPIgSGNEgOkh5phb3iKmSGIzcwrccy3IomMFRWPCMiCk2y98UQNJEoDs1yIHtZMstVjYWKYxnunIGzC5UQ=="
},
"@grpc/grpc-js": {
"version": "1.1.6",
+ "resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.1.6.tgz",
+ "integrity": "sha512-bUeaMN/dHTkt9AqU0Tc1xdHMB3jVLyPNfg8gZ5cMyhFyMeCwoJbFcJrNBgYqRCbvYhvtaEgzQwkw91NnY4Oktg==",
"requires": {
"@grpc/proto-loader": "^0.6.0-pre14",
"@types/node": "^12.12.47",
@@ -320,6 +380,8 @@
"dependencies": {
"@grpc/proto-loader": {
"version": "0.6.0-pre9",
+ "resolved": "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.6.0-pre9.tgz",
+ "integrity": "sha512-oM+LjpEjNzW5pNJjt4/hq1HYayNeQT+eGrOPABJnYHv7TyNPDNzkQ76rDYZF86X5swJOa4EujEMzQ9iiTdPgww==",
"requires": {
"@types/long": "^4.0.1",
"lodash.camelcase": "^4.3.0",
@@ -332,99 +394,149 @@
},
"@grpc/proto-loader": {
"version": "0.5.5",
+ "resolved": "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.5.5.tgz",
+ "integrity": "sha512-WwN9jVNdHRQoOBo9FDH7qU+mgfjPc8GygPYms3M+y3fbQLfnCe/Kv/E01t7JRgnrsOHH8euvSbed3mIalXhwqQ==",
"requires": {
"lodash.camelcase": "^4.3.0",
"protobufjs": "^6.8.6"
}
},
"@protobufjs/aspromise": {
- "version": "1.1.2"
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz",
+ "integrity": "sha1-m4sMxmPWaafY9vXQiToU00jzD78="
},
"@protobufjs/base64": {
- "version": "1.1.2"
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz",
+ "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg=="
},
"@protobufjs/codegen": {
- "version": "2.0.4"
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz",
+ "integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg=="
},
"@protobufjs/eventemitter": {
- "version": "1.1.0"
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz",
+ "integrity": "sha1-NVy8mLr61ZePntCV85diHx0Ga3A="
},
"@protobufjs/fetch": {
"version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz",
+ "integrity": "sha1-upn7WYYUr2VwDBYZ/wbUVLDYTEU=",
"requires": {
"@protobufjs/aspromise": "^1.1.1",
"@protobufjs/inquire": "^1.1.0"
}
},
"@protobufjs/float": {
- "version": "1.0.2"
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz",
+ "integrity": "sha1-Xp4avctz/Ap8uLKR33jIy9l7h9E="
},
"@protobufjs/inquire": {
- "version": "1.1.0"
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz",
+ "integrity": "sha1-/yAOPnzyQp4tyvwRQIKOjMY48Ik="
},
"@protobufjs/path": {
- "version": "1.1.2"
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz",
+ "integrity": "sha1-bMKyDFya1q0NzP0hynZz2Nf79o0="
},
"@protobufjs/pool": {
- "version": "1.1.0"
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz",
+ "integrity": "sha1-Cf0V8tbTq/qbZbw2ZQbWrXhG/1Q="
},
"@protobufjs/utf8": {
- "version": "1.1.0"
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz",
+ "integrity": "sha1-p3c2C1s5oaLlEG+OhY8v0tBgxXA="
},
"@types/color-name": {
- "version": "1.1.1"
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/@types/color-name/-/color-name-1.1.1.tgz",
+ "integrity": "sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ=="
},
"@types/firebase": {
"version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/@types/firebase/-/firebase-3.2.1.tgz",
+ "integrity": "sha512-G8XgHMu2jHlElfc2xVNaYP50F0qrqeTCjgeG1v5b4SRwWG4XKC4fCuEdVZuZaMRmVygcnbRZBAo9O7RsDvmkGQ==",
"requires": {
"firebase": "*"
}
},
"@types/long": {
- "version": "4.0.1"
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/@types/long/-/long-4.0.1.tgz",
+ "integrity": "sha512-5tXH6Bx/kNGd3MgffdmP4dy2Z+G4eaXw0SE81Tq3BNadtnMR5/ySMzX4SLEzHJzSmPNn4HIdpQsBvXMUykr58w=="
},
"@types/node": {
- "version": "12.12.58"
+ "version": "12.12.58",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-12.12.58.tgz",
+ "integrity": "sha512-Be46CNIHWAagEfINOjmriSxuv7IVcqbGe+sDSg2SYCEz/0CRBy7LRASGfRbD8KZkqoePU73Wsx3UvOSFcq/9hA=="
},
"abort-controller": {
"version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz",
+ "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==",
"requires": {
"event-target-shim": "^5.0.0"
}
},
"agent-base": {
"version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.1.tgz",
+ "integrity": "sha512-01q25QQDwLSsyfhrKbn8yuur+JNw0H+0Y4JiGIKd3z9aYk/w/2kxD/Upc+t2ZBBSUNff50VjPsSW2YxM8QYKVg==",
"requires": {
"debug": "4"
}
},
"ansi-regex": {
- "version": "5.0.0"
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz",
+ "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg=="
},
"ansi-styles": {
"version": "4.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz",
+ "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==",
"requires": {
"@types/color-name": "^1.1.1",
"color-convert": "^2.0.1"
}
},
"arrify": {
- "version": "2.0.1"
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz",
+ "integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug=="
},
"base64-js": {
- "version": "1.3.1"
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.1.tgz",
+ "integrity": "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g=="
},
"bignumber.js": {
- "version": "9.0.0"
+ "version": "9.0.0",
+ "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.0.0.tgz",
+ "integrity": "sha512-t/OYhhJ2SD+YGBQcjY8GzzDHEk9f3nerxjtfa6tlMXfe7frs/WozhvCNoGvpM0P3bNf3Gq5ZRMlGr5f3r4/N8A=="
},
"buffer-equal-constant-time": {
- "version": "1.0.1"
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz",
+ "integrity": "sha1-+OcRMvf/5uAaXJaXpMbz5I1cyBk="
},
"camelcase": {
- "version": "5.3.1"
+ "version": "5.3.1",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz",
+ "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg=="
},
"cliui": {
"version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz",
+ "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==",
"requires": {
"string-width": "^4.2.0",
"strip-ansi": "^6.0.0",
@@ -433,60 +545,88 @@
},
"color-convert": {
"version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
"requires": {
"color-name": "~1.1.4"
}
},
"color-name": {
- "version": "1.1.4"
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
},
"core-js": {
- "version": "3.6.5"
+ "version": "3.6.5",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.5.tgz",
+ "integrity": "sha512-vZVEEwZoIsI+vPEuoF9Iqf5H7/M3eeQqWlQnYa8FSKKePuYTf5MWnxb5SDAzCa60b3JBRS5g9b+Dq7b1y/RCrA=="
},
"debug": {
"version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
+ "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
"requires": {
"ms": "^2.1.1"
}
},
"decamelize": {
- "version": "1.2.0"
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
+ "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA="
},
"dom-storage": {
- "version": "2.1.0"
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/dom-storage/-/dom-storage-2.1.0.tgz",
+ "integrity": "sha512-g6RpyWXzl0RR6OTElHKBl7nwnK87GUyZMYC7JWsB/IA73vpqK2K6LT39x4VepLxlSsWBFrPVLnsSR5Jyty0+2Q=="
},
"ecdsa-sig-formatter": {
"version": "1.0.11",
+ "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz",
+ "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==",
"requires": {
"safe-buffer": "^5.0.1"
}
},
"emoji-regex": {
- "version": "8.0.0"
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
+ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="
},
"encoding": {
"version": "0.1.13",
+ "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz",
+ "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==",
"requires": {
"iconv-lite": "^0.6.2"
}
},
"event-target-shim": {
- "version": "5.0.1"
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz",
+ "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ=="
},
"extend": {
- "version": "3.0.2"
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
+ "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g=="
},
"fast-text-encoding": {
- "version": "1.0.3"
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/fast-text-encoding/-/fast-text-encoding-1.0.3.tgz",
+ "integrity": "sha512-dtm4QZH9nZtcDt8qJiOH9fcQd1NAgi+K1O2DbE6GG1PPCK/BWfOH3idCTRQ4ImXRUOyopDEgDEnVEE7Y/2Wrig=="
},
"faye-websocket": {
"version": "0.11.3",
+ "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.3.tgz",
+ "integrity": "sha512-D2y4bovYpzziGgbHYtGCMjlJM36vAl/y+xUyn1C+FVx8szd1E+86KwVw6XvYSzOP8iMpm1X0I4xJD+QtUb36OA==",
"requires": {
"websocket-driver": ">=0.5.1"
}
},
"find-up": {
"version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
+ "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
"requires": {
"locate-path": "^5.0.0",
"path-exists": "^4.0.0"
@@ -494,6 +634,8 @@
},
"firebase": {
"version": "7.20.0",
+ "resolved": "https://registry.npmjs.org/firebase/-/firebase-7.20.0.tgz",
+ "integrity": "sha512-ijgiUPB93UGWw2P2kgUQgghu5WOn/WR2J8C/V6ZSeI1PQqiEwsfn0kvw4iMJeqLQpA/FVeZz/+p0ubE5kzqhBA==",
"requires": {
"@firebase/analytics": "0.5.0",
"@firebase/app": "0.6.11",
@@ -513,6 +655,8 @@
},
"gaxios": {
"version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/gaxios/-/gaxios-3.1.0.tgz",
+ "integrity": "sha512-DDTn3KXVJJigtz+g0J3vhcfbDbKtAroSTxauWsdnP57sM5KZ3d2c/3D9RKFJ86s43hfw6WULg6TXYw/AYiBlpA==",
"requires": {
"abort-controller": "^3.0.0",
"extend": "^3.0.2",
@@ -523,16 +667,22 @@
},
"gcp-metadata": {
"version": "4.1.4",
+ "resolved": "https://registry.npmjs.org/gcp-metadata/-/gcp-metadata-4.1.4.tgz",
+ "integrity": "sha512-5J/GIH0yWt/56R3dNaNWPGQ/zXsZOddYECfJaqxFWgrZ9HC2Kvc5vl9upOgUUHKzURjAVf2N+f6tEJiojqXUuA==",
"requires": {
"gaxios": "^3.0.0",
"json-bigint": "^1.0.0"
}
},
"get-caller-file": {
- "version": "2.0.5"
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
+ "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg=="
},
"google-auth-library": {
"version": "6.0.6",
+ "resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-6.0.6.tgz",
+ "integrity": "sha512-fWYdRdg55HSJoRq9k568jJA1lrhg9i2xgfhVIMJbskUmbDpJGHsbv9l41DGhCDXM21F9Kn4kUwdysgxSYBYJUw==",
"requires": {
"arrify": "^2.0.0",
"base64-js": "^1.3.0",
@@ -547,12 +697,16 @@
},
"google-p12-pem": {
"version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/google-p12-pem/-/google-p12-pem-3.0.3.tgz",
+ "integrity": "sha512-wS0ek4ZtFx/ACKYF3JhyGe5kzH7pgiQ7J5otlumqR9psmWMYc+U9cErKlCYVYHoUaidXHdZ2xbo34kB+S+24hA==",
"requires": {
"node-forge": "^0.10.0"
}
},
"gtoken": {
"version": "5.0.3",
+ "resolved": "https://registry.npmjs.org/gtoken/-/gtoken-5.0.3.tgz",
+ "integrity": "sha512-Nyd1wZCMRc2dj/mAD0LlfQLcAO06uKdpKJXvK85SGrF5+5+Bpfil9u/2aw35ltvEHjvl0h5FMKN5knEU+9JrOg==",
"requires": {
"gaxios": "^3.0.0",
"google-p12-pem": "^3.0.0",
@@ -561,10 +715,14 @@
}
},
"http-parser-js": {
- "version": "0.5.2"
+ "version": "0.5.2",
+ "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.2.tgz",
+ "integrity": "sha512-opCO9ASqg5Wy2FNo7A0sxy71yGbbkJJXLdgMK04Tcypw9jr2MgWbyubb0+WdmDmGnFflO7fRbqbaihh/ENDlRQ=="
},
"https-proxy-agent": {
"version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz",
+ "integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==",
"requires": {
"agent-base": "6",
"debug": "4"
@@ -572,31 +730,45 @@
},
"iconv-lite": {
"version": "0.6.2",
+ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.2.tgz",
+ "integrity": "sha512-2y91h5OpQlolefMPmUlivelittSWy0rP+oYVpn6A7GwVHNE8AWzoYOBNmlwks3LobaJxgHCYZAnyNo2GgpNRNQ==",
"requires": {
"safer-buffer": ">= 2.1.2 < 3.0.0"
}
},
"idb": {
- "version": "3.0.2"
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/idb/-/idb-3.0.2.tgz",
+ "integrity": "sha512-+FLa/0sTXqyux0o6C+i2lOR0VoS60LU/jzUo5xjfY6+7sEEgy4Gz1O7yFBXvjd7N0NyIGWIRg8DcQSLEG+VSPw=="
},
"is-fullwidth-code-point": {
- "version": "3.0.0"
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
+ "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg=="
},
"is-stream": {
- "version": "2.0.0"
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz",
+ "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw=="
},
"isomorphic-fetch": {
"version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz",
+ "integrity": "sha1-YRrhrPFPXoH3KVB0coGf6XM1WKk=",
"requires": {
"node-fetch": "^1.0.1",
"whatwg-fetch": ">=0.10.0"
},
"dependencies": {
"is-stream": {
- "version": "1.1.0"
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz",
+ "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ="
},
"node-fetch": {
"version": "1.7.3",
+ "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-1.7.3.tgz",
+ "integrity": "sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ==",
"requires": {
"encoding": "^0.1.11",
"is-stream": "^1.0.1"
@@ -606,12 +778,16 @@
},
"json-bigint": {
"version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/json-bigint/-/json-bigint-1.0.0.tgz",
+ "integrity": "sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ==",
"requires": {
"bignumber.js": "^9.0.0"
}
},
"jwa": {
"version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/jwa/-/jwa-2.0.0.tgz",
+ "integrity": "sha512-jrZ2Qx916EA+fq9cEAeCROWPTfCwi1IVHqT2tapuqLEVVDKFDENFw1oL+MwrTvH6msKxsd1YTDVw6uKEcsrLEA==",
"requires": {
"buffer-equal-constant-time": "1.0.1",
"ecdsa-sig-formatter": "1.0.11",
@@ -620,6 +796,8 @@
},
"jws": {
"version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/jws/-/jws-4.0.0.tgz",
+ "integrity": "sha512-KDncfTmOZoOMTFG4mBlG0qUIOlc03fmzH+ru6RgYVZhPkyiy/92Owlt/8UEN+a4TXR1FQetfIpJE8ApdvdVxTg==",
"requires": {
"jwa": "^2.0.0",
"safe-buffer": "^5.0.1"
@@ -627,57 +805,85 @@
},
"locate-path": {
"version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
+ "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
"requires": {
"p-locate": "^4.1.0"
}
},
"lodash.camelcase": {
- "version": "4.3.0"
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz",
+ "integrity": "sha1-soqmKIorn8ZRA1x3EfZathkDMaY="
},
"long": {
- "version": "4.0.0"
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz",
+ "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA=="
},
"lru-cache": {
"version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
+ "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
"requires": {
"yallist": "^4.0.0"
}
},
"mime": {
- "version": "2.4.6"
+ "version": "2.4.6",
+ "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.6.tgz",
+ "integrity": "sha512-RZKhC3EmpBchfTGBVb8fb+RL2cWyw/32lshnsETttkBAyAUXSGHxbEJWWRXc751DrIxG1q04b8QwMbAwkRPpUA=="
},
"ms": {
- "version": "2.1.2"
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
},
"node-fetch": {
- "version": "2.6.0"
+ "version": "2.6.0",
+ "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.0.tgz",
+ "integrity": "sha512-8dG4H5ujfvFiqDmVu9fQ5bOHUC15JMjMY/Zumv26oOvvVJjM67KF8koCWIabKQ1GJIa9r2mMZscBq/TbdOcmNA=="
},
"node-forge": {
- "version": "0.10.0"
+ "version": "0.10.0",
+ "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.10.0.tgz",
+ "integrity": "sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA=="
},
"p-limit": {
"version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
+ "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
"requires": {
"p-try": "^2.0.0"
}
},
"p-locate": {
"version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
+ "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
"requires": {
"p-limit": "^2.2.0"
}
},
"p-try": {
- "version": "2.2.0"
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
+ "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ=="
},
"path-exists": {
- "version": "4.0.0"
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
+ "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w=="
},
"promise-polyfill": {
- "version": "8.1.3"
+ "version": "8.1.3",
+ "resolved": "https://registry.npmjs.org/promise-polyfill/-/promise-polyfill-8.1.3.tgz",
+ "integrity": "sha512-MG5r82wBzh7pSKDRa9y+vllNHz3e3d4CNj1PQE4BQYxLme0gKYYBm9YENq+UkEikyZ0XbiGWxYlVw3Rl9O/U8g=="
},
"protobufjs": {
"version": "6.10.1",
+ "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-6.10.1.tgz",
+ "integrity": "sha512-pb8kTchL+1Ceg4lFd5XUpK8PdWacbvV5SK2ULH2ebrYtl4GjJmS24m6CKME67jzV53tbJxHlnNOSqQHbTsR9JQ==",
"requires": {
"@protobufjs/aspromise": "^1.1.2",
"@protobufjs/base64": "^1.1.2",
@@ -695,30 +901,46 @@
},
"dependencies": {
"@types/node": {
- "version": "13.13.19"
+ "version": "13.13.19",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-13.13.19.tgz",
+ "integrity": "sha512-IVsULCpTdafcHhBDLYEPnV5l15xV0q065zvOHC1ZmzFYaBCMzku078eXnazoSG8907vZjRgEN/EQjku7GwwFyQ=="
}
}
},
"require-directory": {
- "version": "2.1.1"
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
+ "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I="
},
"require-main-filename": {
- "version": "2.0.0"
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz",
+ "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg=="
},
"safe-buffer": {
- "version": "5.2.1"
+ "version": "5.2.1",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
+ "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ=="
},
"safer-buffer": {
- "version": "2.1.2"
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
+ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
},
"semver": {
- "version": "6.3.0"
+ "version": "6.3.0",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
+ "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw=="
},
"set-blocking": {
- "version": "2.0.0"
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz",
+ "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc="
},
"string-width": {
"version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz",
+ "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==",
"requires": {
"emoji-regex": "^8.0.0",
"is-fullwidth-code-point": "^3.0.0",
@@ -727,15 +949,21 @@
},
"strip-ansi": {
"version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz",
+ "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==",
"requires": {
"ansi-regex": "^5.0.0"
}
},
"tslib": {
- "version": "1.13.0"
+ "version": "1.13.0",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.13.0.tgz",
+ "integrity": "sha512-i/6DQjL8Xf3be4K/E6Wgpekn5Qasl1usyw++dAA35Ue5orEn65VIxOA+YvNNl9HV3qv70T7CNwjODHZrLwvd1Q=="
},
"websocket-driver": {
"version": "0.7.4",
+ "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz",
+ "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==",
"requires": {
"http-parser-js": ">=0.5.1",
"safe-buffer": ">=5.1.0",
@@ -743,16 +971,24 @@
}
},
"websocket-extensions": {
- "version": "0.1.4"
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz",
+ "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg=="
},
"whatwg-fetch": {
- "version": "3.4.1"
+ "version": "3.4.1",
+ "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.4.1.tgz",
+ "integrity": "sha512-sofZVzE1wKwO+EYPbWfiwzaKovWiZXf4coEzjGP9b2GBVgQRLQUZ2QcuPpQExGDAW5GItpEm6Tl4OU5mywnAoQ=="
},
"which-module": {
- "version": "2.0.0"
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz",
+ "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho="
},
"wrap-ansi": {
"version": "6.2.0",
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz",
+ "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==",
"requires": {
"ansi-styles": "^4.0.0",
"string-width": "^4.1.0",
@@ -760,16 +996,24 @@
}
},
"xmlhttprequest": {
- "version": "1.8.0"
+ "version": "1.8.0",
+ "resolved": "https://registry.npmjs.org/xmlhttprequest/-/xmlhttprequest-1.8.0.tgz",
+ "integrity": "sha1-Z/4HXFwk/vOfnWX197f+dRcZaPw="
},
"y18n": {
- "version": "4.0.0"
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz",
+ "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w=="
},
"yallist": {
- "version": "4.0.0"
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
+ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="
},
"yargs": {
"version": "15.4.1",
+ "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz",
+ "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==",
"requires": {
"cliui": "^6.0.0",
"decamelize": "^1.2.0",
@@ -786,6 +1030,8 @@
},
"yargs-parser": {
"version": "18.1.3",
+ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz",
+ "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==",
"requires": {
"camelcase": "^5.0.0",
"decamelize": "^1.2.0"
@@ -5445,6 +5691,11 @@
"object-assign": "^4.1.1"
}
},
+ "credit-card-type": {
+ "version": "9.1.0",
+ "resolved": "https://registry.npmjs.org/credit-card-type/-/credit-card-type-9.1.0.tgz",
+ "integrity": "sha512-CpNFuLxiPFxuZqhSKml3M+t0K/484pMAnfYWH14JoD7OZMnmC0Lmo+P7JX9SobqFpRoo7ifA18kOHdxJywYPEA=="
+ },
"cross-fetch": {
"version": "3.1.4",
"resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.4.tgz",
@@ -5562,6 +5813,11 @@
"resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz",
"integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU="
},
+ "dedent": {
+ "version": "0.6.0",
+ "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.6.0.tgz",
+ "integrity": "sha1-Dm2o8M5Sg471zsXI+TlrDBtko8s="
+ },
"deep-assign": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/deep-assign/-/deep-assign-3.0.0.tgz",
@@ -9689,6 +9945,16 @@
"js-tokens": "^3.0.0 || ^4.0.0"
}
},
+ "lottie-react-native": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/lottie-react-native/-/lottie-react-native-4.0.2.tgz",
+ "integrity": "sha512-8X5SV8X+es5dJwUGYcSyRIbHIPeWIcUH6PiRaReUEy+6s1d+NLBp3rj4+9I75F1ZN0nbFGNkrgypnGsXOAXBTw==",
+ "requires": {
+ "invariant": "^2.2.2",
+ "prop-types": "^15.5.10",
+ "react-native-safe-modules": "^1.0.3"
+ }
+ },
"lru-cache": {
"version": "6.0.0",
"resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
@@ -11852,6 +12118,14 @@
"resolved": "https://registry.npmjs.org/react-native-safe-area-context/-/react-native-safe-area-context-3.2.0.tgz",
"integrity": "sha512-k2Nty4PwSnrg9HwrYeeE+EYqViYJoOFwEy9LxL5RIRfoqxAq/uQXNGwpUg2/u4gnKpBbEPa9eRh15KKMe/VHkA=="
},
+ "react-native-safe-modules": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/react-native-safe-modules/-/react-native-safe-modules-1.0.3.tgz",
+ "integrity": "sha512-DUxti4Z+AgJ/ZsO5U7p3uSCUBko8JT8GvFlCeOXk9bMd+4qjpoDvMYpfbixXKgL88M+HwmU/KI1YFN6gsQZyBA==",
+ "requires": {
+ "dedent": "^0.6.0"
+ }
+ },
"react-native-screens": {
"version": "3.4.0",
"resolved": "https://registry.npmjs.org/react-native-screens/-/react-native-screens-3.4.0.tgz",
diff --git a/package.json b/package.json
index 1948807ec..618b85eab 100644
--- a/package.json
+++ b/package.json
@@ -86,6 +86,7 @@
"@types/lodash": "^4.14.158",
"algoliasearch": "^4.8.3",
"axios": "^0.21.1",
+ "credit-card-type": "^9.1.0",
"dayjs": "^1.8.36",
"dotenv": "^8.2.0",
"expo": "^42.0.0",
@@ -115,6 +116,7 @@
"geokit": "^1.1.0",
"i18n-js": "^3.7.1",
"lodash": "^4.17.19",
+ "lottie-react-native": "4.0.2",
"marked": "^2.0.1",
"nanoid": "^3.1.10",
"normalizr": "^3.6.0",