From 676006008317bba667ecc9f4f9343128ce1cd5eb Mon Sep 17 00:00:00 2001
From: Blake Kaufman <68204898+BlakeKaufman@users.noreply.github.com>
Date: Sun, 19 Apr 2026 11:43:00 -0400
Subject: [PATCH] Simplify confirm split payment (#778)
* fix small style issues
* fix touch gap
* fixing podfile
* creating standardized amountIn function
* show tx ids not amounts
* use standardized amount in
* use standardized amount in
* fixed no payment information crash
* downgrade rn and react-native-quick-crypto
* only show margin if two elements exist
* adding backup amount
* wait till hompage to call analytics data
* fix restore bug
* updating firebase
* fix check logic
* wrap to handle thrown execptions
* use utils package directly
* adding error handling
* group notification payments insted of handling them sequentually
* handle payment requset on confirm page
* improving split payment ux
* adding translations
* adding firebase sdk warning
---
__tests__/calculateFlashnetAmountIn.test.js | 98 ++
.../analytics/analyticsBudgetPage.js | 34 +-
.../analytics/analyticsCreateBudgetPage.js | 4 +-
.../analytics/balancePieChart.js | 8 +-
.../contacts/createSplitBill.js | 120 +-
.../contacts/sendAndRequestPage.js | 9 +-
.../gifts/createGiftDuration.js | 32 +-
.../sendBitcoin/confirmSplitPayment.js | 1265 ++++++-----------
app/functions/checkGoogleServices.js | 9 +-
app/functions/messaging/publishMessage.js | 46 +-
.../payments/validateSplitPayment.js | 101 ++
app/functions/spark/bulkPaymentFunctions.js | 108 +-
app/functions/spark/flashnet.js | 108 +-
app/functions/spark/payments.js | 29 +-
app/functions/spark/swapAmountUtils.js | 100 ++
app/functions/spark/transformTxToPayment.js | 2 +-
app/hooks/useBudgetWarning.js | 24 +-
app/screens/inAccount/analyticsPage.js | 1 +
app/screens/inAccount/confirmTxPage.js | 48 +-
app/screens/inAccount/loadingScreen.js | 3 +
.../inAccount/technicalTransactionDetails.js | 33 +-
context-store/analyticsContext.js | 81 +-
ios/BlitzWallet.xcodeproj/project.pbxproj | 2 +-
.../xcschemes/BlitzWallet.xcscheme | 2 +-
ios/Podfile.lock | 1037 ++++++++------
locales/de-DE/translation.json | 3 +-
locales/en/translation.json | 3 +-
locales/es/translation.json | 3 +-
locales/fr/translation.json | 3 +-
locales/it/translation.json | 3 +-
locales/pt-BR/translation.json | 3 +-
locales/ru/translation.json | 3 +-
locales/sv/translation.json | 3 +-
package.json | 26 +-
yarn.lock | 855 +++++------
35 files changed, 2136 insertions(+), 2073 deletions(-)
create mode 100644 __tests__/calculateFlashnetAmountIn.test.js
create mode 100644 app/functions/payments/validateSplitPayment.js
create mode 100644 app/functions/spark/swapAmountUtils.js
diff --git a/__tests__/calculateFlashnetAmountIn.test.js b/__tests__/calculateFlashnetAmountIn.test.js
new file mode 100644
index 00000000..1d35793f
--- /dev/null
+++ b/__tests__/calculateFlashnetAmountIn.test.js
@@ -0,0 +1,98 @@
+import {
+ calculateFlashnetAmountIn,
+ SEND_AMOUNT_INCREASE_BUFFER,
+} from '../app/functions/spark/swapAmountUtils';
+
+const PRICE = 1_000_000; // 1 sat = $1.00 at this mock price (simplifies math)
+
+describe('calculateFlashnetAmountIn', () => {
+ describe('BTC→USD (isUsdAssetIn = false)', () => {
+ it('applies default 1% buffer to sats', () => {
+ const result = calculateFlashnetAmountIn({
+ baseAmountIn: 10_000,
+ isUsdAssetIn: false,
+ maxBalance: 100_000,
+ });
+ expect(result).toBe(Math.round(10_000 * SEND_AMOUNT_INCREASE_BUFFER));
+ });
+
+ it('caps to maxBalance when buffer exceeds it', () => {
+ const result = calculateFlashnetAmountIn({
+ baseAmountIn: 99_999,
+ isUsdAssetIn: false,
+ maxBalance: 100_000,
+ });
+ expect(result).toBe(100_000);
+ });
+
+ it('accepts a custom bufferMultiplier', () => {
+ const result = calculateFlashnetAmountIn({
+ baseAmountIn: 10_000,
+ isUsdAssetIn: false,
+ maxBalance: 100_000,
+ bufferMultiplier: 1.02,
+ });
+ expect(result).toBe(10_200);
+ });
+
+ it('returns integer', () => {
+ const result = calculateFlashnetAmountIn({
+ baseAmountIn: 9999,
+ isUsdAssetIn: false,
+ maxBalance: 50_000,
+ });
+ expect(Number.isInteger(result)).toBe(true);
+ });
+ });
+
+ describe('USD→BTC (isUsdAssetIn = true)', () => {
+ // 1_000_000 microdollars = $1.00
+ it('applies default 1% buffer and returns microdollars', () => {
+ // $10.00 in microdollars; PRICE = 1_000_000 means 1 sat = $1.00
+ // dollarBalanceSat = 1_000_000 → satsToDollars(1_000_000, 1_000_000) = $1_000_000
+ const base = 10_000_000;
+ const result = calculateFlashnetAmountIn({
+ baseAmountIn: base,
+ isUsdAssetIn: true,
+ dollarBalanceSat: 1_000_000,
+ currentPriceAInB: PRICE,
+ });
+ // buffer: 10.00 * 1.01 = 10.10 → 10_100_000 microdollars
+ expect(result).toBe(10_100_000);
+ });
+
+ it('caps to balance when buffer exceeds it (low balance scenario)', () => {
+ // base = $10 but USD balance only covers $5
+ // dollarBalanceSat = 5 sats, PRICE = 1_000_000 → satsToDollars(5, 1_000_000) = 5
+ const result = calculateFlashnetAmountIn({
+ baseAmountIn: 10_000_000, // $10
+ isUsdAssetIn: true,
+ dollarBalanceSat: 5, // 5 sats → $5 at PRICE
+ currentPriceAInB: PRICE,
+ });
+ // bufferedDollars = 10_000_000 * 1.01 / 1e6 = 10.10
+ // balanceDollars = satsToDollars(5, 1_000_000) = 5 * 1_000_000 / 1_000_000 = 5
+ // cappedDollars = min(10.10, 5) = 5.00
+ expect(result).toBe(5_000_000);
+ });
+
+ it('falls back to maxBalance/1e6 when dollarBalanceSat and currentPriceAInB are absent', () => {
+ const result = calculateFlashnetAmountIn({
+ baseAmountIn: 5_000_000, // $5.00
+ isUsdAssetIn: true,
+ maxBalance: 10_000_000, // $10.00 in microdollars
+ });
+ // 5.00 * 1.01 = 5.05 → 5_050_000
+ expect(result).toBe(5_050_000);
+ });
+
+ it('returns integer', () => {
+ const result = calculateFlashnetAmountIn({
+ baseAmountIn: 3_333_333,
+ isUsdAssetIn: true,
+ maxBalance: 100_000_000,
+ });
+ expect(Number.isInteger(result)).toBe(true);
+ });
+ });
+});
diff --git a/app/components/admin/homeComponents/analytics/analyticsBudgetPage.js b/app/components/admin/homeComponents/analytics/analyticsBudgetPage.js
index 504c5d4e..632d7b07 100644
--- a/app/components/admin/homeComponents/analytics/analyticsBudgetPage.js
+++ b/app/components/admin/homeComponents/analytics/analyticsBudgetPage.js
@@ -48,7 +48,7 @@ export default function AnalyticsBudgetPage() {
const { masterInfoObject } = useGlobalContextProvider();
const { fiatStats } = useNodeContext();
const { bottomPadding } = useGlobalInsets();
- const { textColor, backgroundOffset } = GetThemeColors();
+ const { textColor, backgroundOffset, backgroundColor } = GetThemeColors();
const { theme, darkModeType } = useGlobalThemeContext();
const { spentTotal, spentTxCount } = useAnalytics();
const { t } = useTranslation();
@@ -205,18 +205,13 @@ export default function AnalyticsBudgetPage() {
-
+
{/* Spent this month */}
@@ -238,17 +233,12 @@ export default function AnalyticsBudgetPage() {
-
+
{/* Left to spend */}
@@ -265,7 +255,7 @@ export default function AnalyticsBudgetPage() {
@@ -297,13 +287,17 @@ const styles = StyleSheet.create({
statusText: {
fontSize: SIZES.smedium,
fontFamily: FONT.Title_Regular,
+ includeFontPadding: false,
},
statusDivider: {
fontSize: SIZES.smedium,
+ fontFamily: FONT.Title_Regular,
+ includeFontPadding: false,
},
statusPeriod: {
fontSize: SIZES.smedium,
fontFamily: FONT.Title_Regular,
+ includeFontPadding: false,
},
circleContainer: {
width: CIRCLE_SIZE,
@@ -329,10 +323,6 @@ const styles = StyleSheet.create({
includeFontPadding: false,
opacity: HIDDEN_OPACITY,
},
- circleCenterAmount: {
- fontSize: SIZES.large,
- textAlign: 'center',
- },
statsCard: {
width: '100%',
borderRadius: 16,
@@ -370,11 +360,11 @@ const styles = StyleSheet.create({
gap: 8,
},
statsValue: {
- fontSize: SIZES.smedium,
textAlign: 'right',
+ includeFontPadding: false,
},
divider: {
- height: StyleSheet.hairlineWidth,
+ height: 2,
marginHorizontal: 16,
},
});
diff --git a/app/components/admin/homeComponents/analytics/analyticsCreateBudgetPage.js b/app/components/admin/homeComponents/analytics/analyticsCreateBudgetPage.js
index 354e7e2a..2cea0e87 100644
--- a/app/components/admin/homeComponents/analytics/analyticsCreateBudgetPage.js
+++ b/app/components/admin/homeComponents/analytics/analyticsCreateBudgetPage.js
@@ -34,8 +34,8 @@ export default function AnalyticsCreateBudgetPage() {
const formattedPresetAmount =
userBalanceDenomination === 'fiat'
- ? numberConverter(existingBudget?.amount, 'fiat', 2, fiatStats)
- : existingBudget?.amount;
+ ? numberConverter(existingBudget?.amount || 0, 'fiat', 2, fiatStats)
+ : existingBudget?.amount || 0;
const [amountValue, setAmountValue] = useState(
existingBudget?.amount ? String(formattedPresetAmount) : '',
diff --git a/app/components/admin/homeComponents/analytics/balancePieChart.js b/app/components/admin/homeComponents/analytics/balancePieChart.js
index c3ab087a..7ba22f4d 100644
--- a/app/components/admin/homeComponents/analytics/balancePieChart.js
+++ b/app/components/admin/homeComponents/analytics/balancePieChart.js
@@ -185,7 +185,7 @@ export default function BalancePieChart() {
{
+ if (!isUSD) return totalNative;
+ if (price <= 0) return 0;
+ return Math.round(dollarsToSats(totalNative / 100, price));
+ }, [isUSD, totalNative, price]);
+
+ const {
+ canPayBTC,
+ canPayUSD,
+ errorMessage: balanceErrorMessage,
+ } = useMemo(() => {
+ if (paymentType !== 'send' || totalAmountSats <= 0) {
+ return { canPayBTC: true, canPayUSD: true, errorMessage: null };
+ }
+ return validateSplitPayment({
+ totalSats: totalAmountSats,
+ paymentCurrency,
+ bitcoinBalance,
+ dollarBalanceSat,
+ swapLimits,
+ price,
+ masterInfoObject,
+ swapUSDPriceDollars,
+ t,
+ });
+ }, [
+ paymentType,
+ totalAmountSats,
+ paymentCurrency,
+ bitcoinBalance,
+ dollarBalanceSat,
+ swapLimits,
+ price,
+ masterInfoObject,
+ swapUSDPriceDollars,
+ t,
+ ]);
+
const canConfirm = useMemo(() => {
if (totalNative <= 0) return false;
if (!memo.trim()) return false;
+ if (paymentType === 'send' && !canPayBTC && !canPayUSD) return false;
if (splitMode === 'even') return perPersonNative > 0;
// custom: every contact must have a valid positive integer and sum must equal total
const allSet = selectedContacts.every(c => {
@@ -168,30 +213,49 @@ export default function CreateSplitBill(props) {
selectedContacts,
customAmounts,
customTotal,
+ paymentType,
+ canPayBTC,
+ canPayUSD,
]);
const buildRecipients = useCallback(() => {
return selectedContacts.map((contact, index) => {
+ const isLast = index === selectedContacts.length - 1;
+
if (isUSD) {
- const amountCents =
- splitMode === 'even'
- ? perPersonNative
- : typeof customAmounts[contact.uuid] === 'number'
- ? customAmounts[contact.uuid]
- : parseInt(customAmounts[contact.uuid] || '0', 10);
+ let amountCents;
+ if (splitMode === 'even') {
+ amountCents = isLast
+ ? totalNative - perPersonNative * (selectedContacts.length - 1)
+ : perPersonNative;
+ } else {
+ amountCents = parseInt(customAmounts[contact.uuid] || '0', 10);
+ }
const amountSat = dollarsToSats(
amountCents / 100,
poolInfoRef.currentPriceAInB,
);
return { contact, amountSats: amountSat, amountCents, currency: 'USD' };
}
- const amountSats =
- splitMode === 'even'
- ? perPersonNative
- : parseInt(customAmounts[contact.uuid] || '0', 10);
+
+ let amountSats;
+ if (splitMode === 'even') {
+ amountSats = isLast
+ ? totalNative - perPersonNative * (selectedContacts.length - 1)
+ : perPersonNative;
+ } else {
+ amountSats = parseInt(customAmounts[contact.uuid] || '0', 10);
+ }
return { contact, amountSats, amountCents: null, currency: 'BTC' };
});
- }, [selectedContacts, splitMode, perPersonNative, customAmounts, isUSD]);
+ }, [
+ selectedContacts,
+ isUSD,
+ splitMode,
+ perPersonNative,
+ totalNative,
+ customAmounts,
+ ]);
const handleConfirm = useCallback(async () => {
if (totalNative <= 0) {
@@ -208,7 +272,7 @@ export default function CreateSplitBill(props) {
});
return;
}
- if (splitMode === 'custom' && !canConfirm) {
+ if ((splitMode === 'custom' && !canConfirm) || perPersonNative <= 0) {
navigate.navigate('ErrorScreen', {
errorMessage: t('contacts.splitBill.errors.noAmount', {
context: 'custom',
@@ -216,7 +280,7 @@ export default function CreateSplitBill(props) {
});
return;
}
- if (!canConfirm || isLoading) return;
+ if (isLoading) return;
const recipients = buildRecipients();
@@ -257,6 +321,11 @@ export default function CreateSplitBill(props) {
setIsLoading(false);
}
} else {
+ if (balanceErrorMessage) {
+ navigate.navigate('ErrorScreen', { errorMessage: balanceErrorMessage });
+ return;
+ }
+
const docIds = recipients.map(r => r.contact.uuid);
const users = await getDocsByIds('blitzWalletUsers', docIds);
@@ -294,7 +363,6 @@ export default function CreateSplitBill(props) {
);
}
}, [
- canConfirm,
isLoading,
buildRecipients,
paymentType,
@@ -306,7 +374,11 @@ export default function CreateSplitBill(props) {
navigate,
t,
totalSatsInt,
+ totalCentsInt,
splitMode,
+ canConfirm,
+ balanceErrorMessage,
+ perPersonNative,
]);
const contactElements = useMemo(() => {
@@ -322,7 +394,12 @@ export default function CreateSplitBill(props) {
const amountChip = isUSD ? (
0 ? `$${(contactAmount / 100).toFixed(2)}` : '$0.00'
}
@@ -330,7 +407,10 @@ export default function CreateSplitBill(props) {
) : (
);
@@ -341,6 +421,8 @@ export default function CreateSplitBill(props) {
@@ -389,6 +471,8 @@ export default function CreateSplitBill(props) {
isUSD,
textInputBackground,
t,
+ textColor,
+ textInputColor,
]);
return (
diff --git a/app/components/admin/homeComponents/contacts/sendAndRequestPage.js b/app/components/admin/homeComponents/contacts/sendAndRequestPage.js
index 1e46bbe9..92c1f67c 100644
--- a/app/components/admin/homeComponents/contacts/sendAndRequestPage.js
+++ b/app/components/admin/homeComponents/contacts/sendAndRequestPage.js
@@ -934,14 +934,19 @@ const styles = StyleSheet.create({
gap: 10,
marginBottom: CONTENT_KEYBOARD_OFFSET,
},
- splitPayContainer: { flexDirection: 'row', alignItems: 'center', gap: 5 },
+ splitPayContainer: {
+ flexDirection: 'row',
+ alignItems: 'center',
+ gap: 5,
+ paddingHorizontal: 5,
+ },
splitPayIcon: {
width: 25,
height: 25,
alignItems: 'center',
justifyContent: 'center',
position: 'absolute',
- right: -30,
+ right: -25,
},
contactListLetterImage: {
height: 60,
diff --git a/app/components/admin/homeComponents/gifts/createGiftDuration.js b/app/components/admin/homeComponents/gifts/createGiftDuration.js
index 3ef572de..6338154d 100644
--- a/app/components/admin/homeComponents/gifts/createGiftDuration.js
+++ b/app/components/admin/homeComponents/gifts/createGiftDuration.js
@@ -57,6 +57,7 @@ import { useTranslation } from 'react-i18next';
import DropdownMenu from '../../../../functions/CustomElements/dropdownMenu';
import {
BTC_ASSET_ADDRESS,
+ calculateFlashnetAmountIn,
dollarsToSats,
executeSwap,
getUserSwapHistory,
@@ -678,24 +679,25 @@ export default function CreateGiftDuration(props) {
// and the amountOut guard below will catch it with a clean error.
const totalAmountIn =
determinePaymentMethod === 'BTC'
- ? Math.min(
- Math.round(
+ ? calculateFlashnetAmountIn({
+ // base = target output + explicit pool fee; buffer adds the integrator margin
+ baseAmountIn:
totalSatAmount +
+ Math.round(
dollarsToSats(
Number(simulation.feePaidAssetIn) / Math.pow(10, 6),
- ) +
- totalSatAmount * (INTEGRATOR_FEE + 0.005),
- ),
- bitcoinBalance,
- )
- : Math.min(
- Math.round(
- totalFiatAmount +
- Number(simulation.feePaidAssetIn) +
- totalFiatAmount * 0.005,
- ),
- dollarBalanceToken * Math.pow(10, 6),
- );
+ ),
+ ),
+ isUsdAssetIn: false,
+ maxBalance: bitcoinBalance,
+ })
+ : calculateFlashnetAmountIn({
+ // base = target output + explicit pool fee in microdollars
+ baseAmountIn:
+ totalFiatAmount + Number(simulation.feePaidAssetIn),
+ isUsdAssetIn: true,
+ maxBalance: dollarBalanceToken * Math.pow(10, 6),
+ });
const executionResponse = await executeSwap(currentWalletMnemoinc, {
poolId: poolInfoRef.lpPublicKey,
diff --git a/app/components/admin/homeComponents/sendBitcoin/confirmSplitPayment.js b/app/components/admin/homeComponents/sendBitcoin/confirmSplitPayment.js
index 3e9c51d4..86f8be79 100644
--- a/app/components/admin/homeComponents/sendBitcoin/confirmSplitPayment.js
+++ b/app/components/admin/homeComponents/sendBitcoin/confirmSplitPayment.js
@@ -1,10 +1,8 @@
-import { StyleSheet, View, TouchableOpacity, ScrollView } from 'react-native';
+import { StyleSheet, View, ScrollView, TouchableOpacity } from 'react-native';
import {
CENTER,
CONTENT_KEYBOARD_OFFSET,
IS_SPARK_ID,
- QUICK_PAY_STORAGE_KEY,
- USDB_TOKEN_ID,
} from '../../../../constants';
import { useCallback, useEffect, useRef, useState, useMemo } from 'react';
import { useGlobalContextProvider } from '../../../../../context-store/context';
@@ -13,14 +11,11 @@ import {
ThemeText,
} from '../../../../functions/CustomElements';
import SendTransactionFeeInfo from './components/feeInfo';
-import usePaymentValidation from './functions/paymentValidation';
import { useNavigation } from '@react-navigation/native';
import GetThemeColors from '../../../../hooks/themeColors';
import FormattedSatText from '../../../../functions/CustomElements/satTextDisplay';
-import FormattedBalanceInput from '../../../../functions/CustomElements/formattedBalanceInput';
import { useGlobalThemeContext } from '../../../../../context-store/theme';
import { useNodeContext } from '../../../../../context-store/nodeContext';
-import { useAppStatus } from '../../../../../context-store/appStatus';
import ErrorWithPayment from './components/errorScreen';
import SwipeButtonNew from '../../../../functions/CustomElements/sliderButton';
import {
@@ -41,10 +36,7 @@ import {
WINDOWWIDTH,
} from '../../../../constants/theme';
import { SliderProgressAnimation } from '../../../../functions/CustomElements/sendPaymentAnimation';
-import { InputTypes } from 'bitcoin-address-parser';
import CustomSettingsTopBar from '../../../../functions/CustomElements/settingsTopBar';
-import { useWebView } from '../../../../../context-store/webViewContext';
-import { useGlobalInsets } from '../../../../../context-store/insetsProvider';
import { useGlobalContacts } from '../../../../../context-store/globalContacts';
import { useKeysContext } from '../../../../../context-store/keys';
import { useUserBalanceContext } from '../../../../../context-store/userBalanceContext';
@@ -53,8 +45,8 @@ import { useFlashnet } from '../../../../../context-store/flashnetContext';
import SwapRatesChangedState from './components/swapRatesChangedState';
import {
BTC_ASSET_ADDRESS,
+ calculateFlashnetAmountIn,
INTEGRATOR_FEE,
- SEND_AMOUNT_INCREASE_BUFFER,
USD_ASSET_ADDRESS,
dollarsToSats,
executeSwap,
@@ -62,24 +54,20 @@ import {
satsToDollars,
simulateSwap,
} from '../../../../functions/spark/flashnet';
-import convertTextInputValue from '../../../../functions/textInputConvertValue';
-import usePaymentMethodSelection from '../../../../hooks/usePaymentMethodSelection';
-import { useBudgetWarning } from '../../../../hooks/useBudgetWarning';
-import usePaymentInputDisplay from '../../../../hooks/usePaymentInputDisplay';
import { setFlashnetTransfer } from '../../../../functions/spark/handleFlashnetTransferIds';
import {
getSingleTxDetails,
getSparkPaymentStatus,
} from '../../../../functions/spark';
+import { validateSplitPayment } from '../../../../functions/payments/validateSplitPayment';
+import FormattedBalanceInput from '../../../../functions/CustomElements/formattedBalanceInput';
+import usePaymentInputDisplay from '../../../../hooks/usePaymentInputDisplay';
export default function ConfirmSplitPayment(props) {
- console.log('CONFIRM SEND PAYMENT SCREEN');
const navigate = useNavigation();
const {
enteredPaymentInfo = {},
errorMessage,
- contactInfo,
- masterTokenInfo = {},
selectedPaymentMethod = '',
preSelectedPaymentMethod,
splitRecipients,
@@ -88,207 +76,58 @@ export default function ConfirmSplitPayment(props) {
const isUSDSplit = paymentCurrency === 'USD';
- console.log(isUSDSplit, 'tesint');
-
const { poolInfoRef, swapLimits, swapUSDPriceDollars } = useFlashnet();
const { t } = useTranslation();
const { bitcoinBalance, dollarBalanceSat, dollarBalanceToken } =
useUserBalanceContext();
- const { sendWebViewRequest } = useWebView();
const { currentWalletMnemoinc } = useActiveCustodyAccount();
- const { accountMnemoinc, contactsPrivateKey } = useKeysContext();
- const { sparkInformation, showTokensInformation, sparkInfoRef } =
- useSparkWallet();
+ const { contactsPrivateKey } = useKeysContext();
+ const { sparkInformation } = useSparkWallet();
const { masterInfoObject } = useGlobalContextProvider();
- const { liquidNodeInformation, fiatStats } = useNodeContext();
-
+ const { fiatStats } = useNodeContext();
const { globalContactsInformation } = useGlobalContacts();
const { theme, darkModeType } = useGlobalThemeContext();
const { textColor, backgroundOffset, backgroundColor } = GetThemeColors();
- const didWarnAboutBudget = useRef(null);
- const [rerenderInput, setRerenderInput] = useState(0);
- const [isAmountFocused, setIsAmountFocused] = useState(true);
- const [showProgressAnimation, setShowProgressAnimation] = useState(false);
- const progressAnimationRef = useRef(null);
- const hasTriggeredFastPay = useRef(false);
- const convertedSendAmountRef = useRef(null);
- const determinePaymentMethodRef = useRef(null);
- const didRequireChoiceRef = useRef(false);
- const uiStateRef = useRef(null);
- const primaryDisplayRef = useRef(null);
- const conversionFiatStatsRef = useRef(null);
- const swapFeeKeyRef = useRef(null);
-
- // Drives the SWAP_RATES_CHANGED uiState when Flashnet rate drift breaks swap viability.
- const [rateChangeDetected, setRateChangeDetected] = useState(false);
- // Captures swapUSDPriceDollars on CONFIRM_PAYMENT entry (ref = no extra re-render).
+ const isSendingPayment = useRef(null);
const rateAtConfirmEntryRef = useRef(null);
+ const swapFeeKeyRef = useRef(null);
+ const progressAnimationRef = useRef(null);
- const [didSelectPaymentMethod, setDidSelectPaymentMethod] = useState(false);
- const [isDecoding, setIsDecoding] = useState(false);
- const [paymentInfo, setPaymentInfo] = useState({});
- const prevSelectedPaymentInfo = useRef({
- preSelectedPaymentMethod,
- enteredInfo: enteredPaymentInfo?.inputCurrency,
- selectedPaymentMethod,
- });
-
- const paymentMode =
- preSelectedPaymentMethod === 'USD' ||
- enteredPaymentInfo?.inputCurrency === 'USD' ||
- selectedPaymentMethod === 'USD'
- ? 'USD'
- : 'BTC';
-
+ const [sendingMethod, setSendingMethod] = useState(null); // 'BTC' | 'USD'
+ const [methodConfirmed, setMethodConfirmed] = useState(false);
+ const [paymentFee, setPaymentFee] = useState(0);
+ const [swapPaymentQuote, setSwapPaymentQuote] = useState({});
+ const [rateChangeDetected, setRateChangeDetected] = useState(false);
+ const [showProgressAnimation, setShowProgressAnimation] = useState(false);
+ const [isCalculatingFeeQuote, setIsCalculatingFeeQuote] = useState(false);
const [userSetInputDenomination, setUserSetInputDenomination] =
useState(null);
-
const inputDenomination = userSetInputDenomination
? userSetInputDenomination
- : paymentMode === 'USD'
+ : isUSDSplit
? 'fiat'
- : masterInfoObject.userBalanceDenomination !== 'fiat'
- ? 'sats'
- : 'fiat';
+ : 'sats';
- const inputDenominationRef = useRef(inputDenomination);
- const [paymentDescription, setPaymentDescription] = useState('');
- const isSendingPayment = useRef(null);
- const userPaymentMethod = selectedPaymentMethod || preSelectedPaymentMethod;
- const combinedPaymentDescription =
- paymentDescription ||
- paymentInfo?.data?.label ||
- paymentInfo?.data?.message ||
- '';
+ // ── Derived totals ──────────────────────────────────────────────────────────
- // Payment type flags
- const isLightningPayment = paymentInfo?.paymentNetwork === 'lightning';
- const isLiquidPayment = paymentInfo?.paymentNetwork === 'liquid';
- const isBitcoinPayment = paymentInfo?.paymentNetwork === 'Bitcoin';
- const isSparkPayment = paymentInfo?.paymentNetwork === 'spark';
- const isLNURLPayment = paymentInfo?.type === InputTypes.LNURL_PAY;
+ const totalSplitSats = useMemo(
+ () =>
+ Math.round(
+ splitRecipients?.reduce((sum, r) => sum + (r.amountSats || 0), 0),
+ ) || 0,
+ [splitRecipients],
+ );
- const isBTCdenominated =
- inputDenomination === 'hidden' || inputDenomination === 'sats';
-
- const enabledLRC20 = showTokensInformation;
- const defaultToken = enabledLRC20
- ? masterInfoObject?.defaultSpendToken || 'Bitcoin'
- : 'Bitcoin';
-
- const tokensObject = sparkInformation?.tokens ?? {};
- const tokensList = useMemo(() => {
- return Object.entries(tokensObject)
- .filter(token => {
- const [key, value] = token;
- return !!value?.balance;
- })
- .map(item => item[0]);
- }, [tokensObject]);
-
- const useFullTokensDisplay =
- (tokensList.length >= 2 ||
- (tokensList.length === 1 && !tokensList.includes(USDB_TOKEN_ID)) ||
- (masterInfoObject.enabledBTKNTokens && tokensList.length)) &&
- isSparkPayment &&
- paymentInfo?.data?.expectedToken !== USDB_TOKEN_ID &&
- !contactInfo;
-
- const showSendMax = !dollarBalanceSat && !bitcoinBalance;
-
- const totalSplitSats = useMemo(() => {
- return (
- splitRecipients?.reduce((sum, r) => sum + (r.amountSats || 0), 0) || 0
- );
- }, [splitRecipients]);
-
- const totalSplitCents = useMemo(() => {
+ const totalSplitDollars = useMemo(() => {
if (!isUSDSplit) return 0;
- return (
- splitRecipients?.reduce((sum, r) => sum + (r.amountCents || 0), 0) || 0
+ const cents = splitRecipients?.reduce(
+ (sum, r) => sum + (r.amountCents || 0),
+ 0,
);
+ return (cents || 0) / 100;
}, [isUSDSplit, splitRecipients]);
- const totalSplitDollars = totalSplitCents / 100;
-
- // finds the true min swap amount
- const min_usd_swap_amount = useMemo(() => {
- return Math.round(
- dollarsToSats(swapLimits.usd, poolInfoRef.currentPriceAInB),
- );
- }, [poolInfoRef.currentPriceAInB, swapLimits]);
-
- const minLNURLSatAmount = isLNURLPayment
- ? paymentInfo?.data?.minSendable / 1000
- : 0;
- const maxLNURLSatAmount = isLNURLPayment
- ? paymentInfo?.data?.maxSendable / 1000
- : 0;
-
- const selectedLRC20Asset = masterTokenInfo?.tokenName || defaultToken;
- const seletctedToken =
- masterTokenInfo?.details ||
- sparkInformation?.tokens?.[selectedLRC20Asset] ||
- {};
- const tokenDecimals = seletctedToken?.tokenMetadata?.decimals ?? 0;
- const tokenBalance = seletctedToken?.balance ?? 0;
- const sparkBalance = sparkInformation?.balance ?? 0;
- const isUsingLRC20 = selectedLRC20Asset?.toLowerCase() !== 'bitcoin';
-
- const sendingAmount = paymentInfo?.sendAmount || 0;
- const canEditAmount = paymentInfo?.canEditPayment === true;
-
- const paymentFee =
- (paymentInfo?.paymentFee || 0) + (paymentInfo?.supportFee || 0);
- console.log(paymentInfo, 'payment info');
-
- const {
- determinePaymentMethod,
- needsToChoosePaymentMethod,
- hasBothUSDAndBitcoinBalance,
- } = usePaymentMethodSelection({
- paymentInfo,
- paymentFee,
- sparkBalance,
- bitcoinBalance,
- dollarBalanceSat,
- dollarBalanceToken,
- convertedSendAmount,
- min_usd_swap_amount,
- swapLimits,
- isUsingLRC20,
- useFullTokensDisplay,
- selectedPaymentMethod: userPaymentMethod,
- didSelectPaymentMethod,
- sparkInformation,
- });
-
- const { determinePaymentMethod: determinePaymentMethodForChoice } =
- usePaymentMethodSelection({
- paymentInfo,
- paymentFee,
- sparkBalance,
- bitcoinBalance,
- dollarBalanceSat,
- dollarBalanceToken,
- convertedSendAmount,
- min_usd_swap_amount,
- swapLimits,
- isUsingLRC20,
- useFullTokensDisplay,
- selectedPaymentMethod: '',
- didSelectPaymentMethod: false,
- sparkInformation,
- });
-
- // For split payments, allow CHOOSE_METHOD even with a preselected method
- const shouldShowChooseMethod =
- determinePaymentMethodForChoice === 'user-choice' &&
- !didSelectPaymentMethod &&
- !isUsingLRC20 &&
- hasBothUSDAndBitcoinBalance;
-
const {
primaryDisplay,
secondaryDisplay,
@@ -298,11 +137,7 @@ export default function ConfirmSplitPayment(props) {
getNextDenomination,
convertForToggle,
} = usePaymentInputDisplay({
- paymentMode:
- enteredPaymentInfo?.fromContacts &&
- !enteredPaymentInfo?.payingContactsRequest
- ? paymentMode
- : determinePaymentMethod,
+ paymentMode: paymentCurrency,
inputDenomination,
fiatStats,
usdFiatStats: { coin: 'USD', value: swapUSDPriceDollars },
@@ -310,259 +145,301 @@ export default function ConfirmSplitPayment(props) {
isSendingPayment: isSendingPayment.current,
});
- const displayAmount = canEditAmount
- ? sendingAmount // User is editing, so sendingAmount is in current display denomination
- : convertSatsToDisplay(sendingAmount); // Fixed from invoice, convert sats to display
+ const displayAmount = convertSatsToDisplay(totalSplitSats);
- const convertedSendAmount = !isUsingLRC20
- ? canEditAmount
- ? convertDisplayToSats(sendingAmount) // User entered amount, convert to sats
- : Number(sendingAmount) // Fixed invoice amount, already in sats
- : Number(sendingAmount);
+ const handleDenominationToggle = () => {
+ // For fixed amounts, just change the display denomination
+ const nextDenom = getNextDenomination();
+ setUserSetInputDenomination(nextDenom);
+ // No need to convert sendingAmount - it stays in sats
+ // The display will automatically update via convertSatsToDisplay
+ };
- // use stablepool info ref so the fiat amount doesnt change in between inputs leading to a false amount being sent.
- const fiatValueConvertedSendAmount = Math.round(
- satsToDollars(
- convertedSendAmount,
- enteredPaymentInfo?.stablePoolInfoRef?.currentPriceAInB ||
- poolInfoRef.currentPriceAInB,
- ).toFixed(2) * Math.pow(10, 6),
- );
+ // ── Balance validation ──────────────────────────────────────────────────────
- const { shouldWarn } = useBudgetWarning(convertedSendAmount);
-
- useEffect(() => {
- primaryDisplayRef.current = primaryDisplay;
- }, [primaryDisplay]);
- useEffect(() => {
- conversionFiatStatsRef.current = conversionFiatStats;
- }, [conversionFiatStats]);
-
- useEffect(() => {
- determinePaymentMethodRef.current = determinePaymentMethod;
- }, [determinePaymentMethod]);
-
- useEffect(() => {
- inputDenominationRef.current = inputDenomination;
- }, [inputDenomination]);
-
- useEffect(() => {
- if (shouldShowChooseMethod && !didRequireChoiceRef.current) {
- didRequireChoiceRef.current = true;
- }
- }, [shouldShowChooseMethod]);
-
- // Fast pay logic
- const canUseFastPay =
- sparkInformation.didConnect &&
- Object.keys(paymentInfo || {}).length > 0 &&
- masterInfoObject[QUICK_PAY_STORAGE_KEY]?.isFastPayEnabled &&
- masterInfoObject[QUICK_PAY_STORAGE_KEY]?.fastPayThresholdSats >=
- convertedSendAmount &&
- !isUsingLRC20 &&
- (!didRequireChoiceRef.current || didSelectPaymentMethod) &&
- determinePaymentMethod !== 'user-choice' &&
- convertedSendAmount >= paymentFee;
-
- const receiverExpectsCurrency = paymentInfo?.data?.expectedReceive || 'sats';
-
- const uiState = useMemo(() => {
- if (canEditAmount && !isSendingPayment.current) {
- return 'EDIT_AMOUNT'; // Show number pad + description input
- }
-
- // Rate-change intercept: show before CHOOSE_METHOD / CONFIRM_PAYMENT so it
- // takes over the screen whenever the Flashnet rate broke swap viability.
- if (rateChangeDetected) {
- return 'SWAP_RATES_CHANGED';
- }
-
- if (
- (shouldShowChooseMethod || !didSelectPaymentMethod) &&
- !isSendingPayment.current &&
- !isBitcoinPayment &&
- !isUsingLRC20 &&
- !canUseFastPay &&
- hasBothUSDAndBitcoinBalance
- ) {
- return 'CHOOSE_METHOD'; // Show info screen with button to select method
- }
-
- return 'CONFIRM_PAYMENT'; // Show swipe button
+ const { canPayBTC, canPayUSD } = useMemo(() => {
+ const price = poolInfoRef.currentPriceAInB;
+ return validateSplitPayment({
+ totalSats: totalSplitSats,
+ paymentCurrency,
+ bitcoinBalance,
+ dollarBalanceSat,
+ swapLimits,
+ price,
+ masterInfoObject,
+ swapUSDPriceDollars,
+ t,
+ });
+ // swapUSDPriceDollars used as reactive proxy for price changes
}, [
- canEditAmount,
- rateChangeDetected,
- shouldShowChooseMethod,
- didSelectPaymentMethod,
- isBitcoinPayment,
- isUsingLRC20,
- canUseFastPay,
- hasBothUSDAndBitcoinBalance,
- ]);
- console.log(
- shouldShowChooseMethod,
- didSelectPaymentMethod,
- isBitcoinPayment,
- isUsingLRC20,
- canUseFastPay,
- hasBothUSDAndBitcoinBalance,
- uiState,
- );
-
- useEffect(() => {
- uiStateRef.current = uiState;
- }, [uiState]);
-
- useEffect(() => {
- if (
- uiState === 'CONFIRM_PAYMENT' &&
- shouldWarn &&
- !didWarnAboutBudget.current
- ) {
- didWarnAboutBudget.current = true;
- navigate.navigate('CustomHalfModal', {
- wantedContent: 'nearBudgetLimitWarning',
- sliderHight: 0.6,
- sendingAmount: convertedSendAmount,
- });
- }
- }, [uiState, shouldWarn, convertedSendAmount]);
-
- useEffect(() => {
- if (
- prevSelectedPaymentInfo.current.preSelectedPaymentMethod !==
- preSelectedPaymentMethod ||
- prevSelectedPaymentInfo.current.enteredInfo !==
- enteredPaymentInfo?.inputCurrency ||
- prevSelectedPaymentInfo.current.selectedPaymentMethod !==
- selectedPaymentMethod
- ) {
- console.log(
- 'Payment method or input currency changed, resetting payment info',
- );
- if (uiStateRef.current !== 'EDIT_AMOUNT') return;
- console.log('Resetting payment info for new selection');
- setPaymentInfo(prev => ({
- ...prev,
- sendAmount: '',
- }));
- setUserSetInputDenomination(null);
- prevSelectedPaymentInfo.current = {
- preSelectedPaymentMethod,
- enteredInfo: enteredPaymentInfo?.inputCurrency,
- selectedPaymentMethod,
- };
- }
- }, [
- preSelectedPaymentMethod,
- enteredPaymentInfo?.inputCurrency,
- selectedPaymentMethod,
- ]);
-
- const paymentValidation = usePaymentValidation({
- paymentInfo,
- convertedSendAmount,
- paymentFee,
- determinePaymentMethod,
- selectedPaymentMethod: userPaymentMethod,
+ totalSplitSats,
+ paymentCurrency,
bitcoinBalance,
dollarBalanceSat,
- dollarBalanceToken,
- min_usd_swap_amount,
swapLimits,
- isUsingLRC20,
- seletctedToken,
- minLNURLSatAmount,
- maxLNURLSatAmount,
- isDecoding,
- canEditAmount,
- t,
masterInfoObject,
- fiatStats,
- inputDenomination: primaryDisplay.denomination,
- primaryDisplay,
- conversionFiatStats,
- sparkInformation,
- });
- console.log(paymentValidation, 'pv');
+ swapUSDPriceDollars,
+ swapUSDPriceDollars,
+ ]);
+
+ console.log(canPayBTC, canPayUSD, 'testing');
+
+ // ── Auto-select / initialize sending method on mount ───────────────────────
+
+ useEffect(() => {
+ if (canPayBTC && !canPayUSD) {
+ setSendingMethod('BTC');
+ setMethodConfirmed(true);
+ } else if (canPayUSD && !canPayBTC) {
+ setSendingMethod('USD');
+ setMethodConfirmed(true);
+ } else {
+ // Both viable — default to the pre-selected method for the picker display
+ const pre = selectedPaymentMethod || preSelectedPaymentMethod;
+ setSendingMethod(pre === 'USD' ? 'USD' : 'BTC');
+ }
+ }, []);
+
+ // ── Watch route params for method selection returning from modal ────────────
+
+ useEffect(() => {
+ const method = props.route.params?.selectedPaymentMethod;
+ if (method === 'BTC' && canPayBTC) setSendingMethod('BTC');
+ else if (method === 'USD' && canPayUSD) setSendingMethod('USD');
+ }, [props.route.params?.selectedPaymentMethod, canPayBTC, canPayUSD]);
+
+ // ── UI state machine ────────────────────────────────────────────────────────
+
+ const uiState = useMemo(() => {
+ if (rateChangeDetected) return 'SWAP_RATES_CHANGED';
+ if (!methodConfirmed) return 'CHOOSE_METHOD';
+ return 'CONFIRM_PAYMENT';
+ }, [rateChangeDetected, methodConfirmed]);
+
+ // ── Swap detection ──────────────────────────────────────────────────────────
+
+ const needsSwap =
+ (isUSDSplit && sendingMethod === 'BTC') ||
+ (!isUSDSplit && sendingMethod === 'USD');
+
+ const swapQuoteReady =
+ !needsSwap ||
+ (!!swapPaymentQuote && Object.keys(swapPaymentQuote).length > 0);
const canSendPayment =
- paymentValidation.canProceed &&
- sendingAmount !== 0 &&
- uiState === 'CONFIRM_PAYMENT';
+ uiState === 'CONFIRM_PAYMENT' &&
+ totalSplitSats > 0 &&
+ swapQuoteReady &&
+ !isSendingPayment.current;
- const isUsingFastPay = canUseFastPay && canSendPayment && !canEditAmount;
+ // ── Swap fee calculation ────────────────────────────────────────────────────
- // Rate-sensitive swap path: only Flashnet swaps (USD→BTC / BTC→USDB) are affected
- // by live rate changes. Mirrors needsSwap in paymentValidation.
- const needsRateSwap =
- (determinePaymentMethod === 'USD' && receiverExpectsCurrency === 'sats') ||
- (determinePaymentMethod === 'BTC' && receiverExpectsCurrency === 'tokens');
+ const min_usd_swap_amount = useMemo(
+ () =>
+ Math.round(dollarsToSats(swapLimits.usd, poolInfoRef.currentPriceAInB)),
+ [swapUSDPriceDollars, swapLimits],
+ );
+
+ useEffect(() => {
+ let cancelled = false;
+
+ const clearSwapFee = () => {
+ swapFeeKeyRef.current = null;
+ setPaymentFee(0);
+ setSwapPaymentQuote({});
+ setIsCalculatingFeeQuote(false);
+ };
+
+ const runSwapFeeCalc = async () => {
+ try {
+ if (isSendingPayment.current) return;
+ if (!poolInfoRef?.currentPriceAInB || !poolInfoRef?.lpPublicKey) return;
+ if (!sendingMethod || !needsSwap) {
+ clearSwapFee();
+ return;
+ }
+ setIsCalculatingFeeQuote(true);
+
+ const price = poolInfoRef.currentPriceAInB;
+
+ if (!isUSDSplit && sendingMethod === 'USD') {
+ // USD→BTC swap: user pays USD, recipients get BTC
+ const shortfallSats = totalSplitSats;
+ if (shortfallSats <= 0) {
+ clearSwapFee();
+ return;
+ }
+
+ const key = `usd-btc:${shortfallSats}:${price}:${dollarBalanceSat}`;
+ if (swapFeeKeyRef.current === key) return;
+ swapFeeKeyRef.current = key;
+
+ const amountToSendConversion = satsToDollars(shortfallSats, price);
+ const usdBalanceConversion = satsToDollars(dollarBalanceSat, price);
+
+ const maxAmount = Math.min(
+ amountToSendConversion,
+ usdBalanceConversion,
+ );
+ const usdAmount = Math.ceil(maxAmount.toFixed(2) * Math.pow(10, 6));
+
+ const result = await simulateSwap(currentWalletMnemoinc, {
+ poolId: poolInfoRef.lpPublicKey,
+ assetInAddress: USD_ASSET_ADDRESS,
+ assetOutAddress: BTC_ASSET_ADDRESS,
+ amountIn: usdAmount,
+ });
+
+ if (cancelled) return;
+ if (!result?.didWork) {
+ clearSwapFee();
+ return;
+ }
+
+ const fees = result.simulation.feePaidAssetIn;
+ const satFee = Math.round(
+ dollarsToSats(fees / Math.pow(10, 6), price),
+ );
+
+ setPaymentFee(satFee);
+ setSwapPaymentQuote({
+ ...result.simulation,
+ warn: parseFloat(result.simulation.priceImpact) > 3,
+ poolId: poolInfoRef.lpPublicKey,
+ assetInAddress: USD_ASSET_ADDRESS,
+ assetOutAddress: BTC_ASSET_ADDRESS,
+ amountIn: usdAmount,
+ satFee,
+ bitcoinBalance,
+ dollarBalanceSat,
+ });
+ }
+
+ if (isUSDSplit && sendingMethod === 'BTC') {
+ // BTC→USD swap: user pays BTC, recipients get USD
+ const satAmount = Math.round(dollarsToSats(totalSplitDollars, price));
+ if (satAmount <= 0) {
+ clearSwapFee();
+ return;
+ }
+
+ const key = `btc-usd:${satAmount}:${price}:${bitcoinBalance}`;
+ if (swapFeeKeyRef.current === key) return;
+ swapFeeKeyRef.current = key;
+
+ const result = await simulateSwap(currentWalletMnemoinc, {
+ poolId: poolInfoRef.lpPublicKey,
+ assetInAddress: BTC_ASSET_ADDRESS,
+ assetOutAddress: USD_ASSET_ADDRESS,
+ amountIn: satAmount,
+ });
+
+ if (cancelled) return;
+ if (!result?.didWork) {
+ clearSwapFee();
+ return;
+ }
+
+ const fees = Number(result.simulation.feePaidAssetIn);
+ const satFee = Math.round(
+ dollarsToSats(fees / Math.pow(10, 6), price) +
+ satAmount * INTEGRATOR_FEE,
+ );
+
+ setPaymentFee(satFee);
+ setSwapPaymentQuote({
+ ...result.simulation,
+ warn: parseFloat(result.simulation.priceImpact) > 3,
+ poolId: poolInfoRef.lpPublicKey,
+ assetInAddress: BTC_ASSET_ADDRESS,
+ assetOutAddress: USD_ASSET_ADDRESS,
+ amountIn: satAmount,
+ satFee,
+ bitcoinBalance,
+ dollarBalanceSat,
+ });
+ }
+ } catch (err) {
+ console.log('error calculating fee quote', err);
+ } finally {
+ setIsCalculatingFeeQuote(false);
+ }
+ };
+
+ runSwapFeeCalc();
+ return () => {
+ cancelled = true;
+ };
+ }, [
+ sendingMethod,
+ needsSwap,
+ isUSDSplit,
+ poolInfoRef,
+ totalSplitSats,
+ totalSplitDollars,
+ bitcoinBalance,
+ dollarBalanceSat,
+ min_usd_swap_amount,
+ swapLimits.bitcoin,
+ currentWalletMnemoinc,
+ ]);
+
+ // ── Rate-change detection ───────────────────────────────────────────────────
- // Snapshot + detection effect.
- // Captures the rate on CONFIRM_PAYMENT entry; when a subsequent rate tick
- // breaks swap viability (convertedSendAmount shrinks, min_usd_swap_amount rises),
- // sets rateChangeDetected → transitions to SWAP_RATES_CHANGED uiState.
- // Resets completely when the user leaves the confirm flow.
useEffect(() => {
if (uiState === 'CONFIRM_PAYMENT') {
- // Capture rate once on entry
if (rateAtConfirmEntryRef.current === null) {
rateAtConfirmEntryRef.current = swapUSDPriceDollars;
}
- // Detect drift that broke viability
if (
rateAtConfirmEntryRef.current !== null &&
swapUSDPriceDollars !== rateAtConfirmEntryRef.current &&
- !paymentValidation.canProceed &&
- needsRateSwap &&
+ needsSwap &&
+ !canSendPayment &&
!isSendingPayment.current
) {
setRateChangeDetected(true);
}
} else if (uiState !== 'SWAP_RATES_CHANGED') {
- // Leaving the confirm flow entirely (EDIT / CHOOSE / back) — full reset.
- // Guard against SWAP_RATES_CHANGED so the state doesn't clear itself.
rateAtConfirmEntryRef.current = null;
setRateChangeDetected(false);
}
- }, [
- uiState,
- swapUSDPriceDollars,
- paymentValidation.canProceed,
- needsRateSwap,
- ]);
+ }, [uiState, swapUSDPriceDollars, canSendPayment, needsSwap]);
+
+ // ── Handlers ────────────────────────────────────────────────────────────────
const handleRateChangedReset = useCallback(() => {
rateAtConfirmEntryRef.current = null;
setRateChangeDetected(false);
- if (isLNURLPayment || isSparkPayment) {
- // Full reset — mirrors hasParamsChanged effect sequence exactly
- setIsAmountFocused(true);
- setPaymentInfo({});
- isSendingPayment.current = null;
- setPaymentDescription('');
- hasTriggeredFastPay.current = false;
- didRequireChoiceRef.current = false;
- setUserSetInputDenomination(null);
- setDidSelectPaymentMethod(false);
- setShowProgressAnimation(false);
- } else {
- navigate.goBack();
- }
- }, [
- isLNURLPayment,
- isSparkPayment,
- navigate,
- sparkInformation.didConnect,
- sparkInformation.identityPubKey,
- t,
- ]);
+ setMethodConfirmed(false);
+ setSendingMethod(
+ canPayBTC && !canPayUSD
+ ? 'BTC'
+ : canPayUSD && !canPayBTC
+ ? 'USD'
+ : sendingMethod,
+ );
+ }, [canPayBTC, canPayUSD, sendingMethod]);
+
+ const handleSelectPaymentMethod = useCallback(
+ showNextScreen => {
+ if (showNextScreen) {
+ if (!sendingMethod) return;
+ setMethodConfirmed(true);
+ } else {
+ navigate.navigate('CustomHalfModal', {
+ wantedContent: 'SelectPaymentMethod',
+ selectedPaymentMethod: sendingMethod || 'user-choice',
+ fromPage: 'ConfirmSplitPayment',
+ });
+ }
+ },
+ [navigate, sendingMethod],
+ );
const errorMessageNavigation = useCallback(
reason => {
navigate.navigate('ConfirmSplitPayment', {
- comingFromAccept: null,
enteredPaymentInfo: {},
splitRecipients,
errorMessage:
@@ -573,261 +450,10 @@ export default function ConfirmSplitPayment(props) {
[navigate, t, splitRecipients],
);
- useEffect(() => {
- convertedSendAmountRef.current = convertedSendAmount;
- }, [convertedSendAmount]);
-
- // Pre-populate paymentInfo for split payments so amount display shows the total
- useEffect(() => {
- if (isUSDSplit) {
- const totalCents = splitRecipients.reduce(
- (sum, r) => sum + (r.amountCents ?? 0),
- 0,
- );
- const price = poolInfoRef?.currentPriceAInB;
- const approxSats =
- price > 0 ? Math.round(dollarsToSats(totalCents / 100, price)) : 0;
- setPaymentInfo({
- paymentNetwork: 'spark',
- sendAmount: approxSats,
- canEditPayment: false,
- data: {
- expectedReceive: 'tokens',
- },
- });
- return;
- }
- const totalSats =
- splitRecipients?.reduce((sum, r) => sum + r.amountSats, 0) || 0;
- setPaymentInfo({
- paymentNetwork: 'spark',
- sendAmount: totalSats,
- canEditPayment: false,
- data: {
- expectedReceive: 'sats',
- },
- });
- }, []); // eslint-disable-line react-hooks/exhaustive-deps
-
- // Calculate swap fee for split payments when funding source requires a swap.
- useEffect(() => {
- let cancelled = false;
-
- const clearSwapFee = () => {
- swapFeeKeyRef.current = null;
- setPaymentInfo(prev => {
- if (!prev || !Object.keys(prev).length) return prev;
- if (
- (prev.paymentFee || 0) === 0 &&
- (prev.supportFee || 0) === 0 &&
- (!prev.swapPaymentQuote ||
- Object.keys(prev.swapPaymentQuote).length === 0)
- ) {
- return prev;
- }
- return {
- ...prev,
- paymentFee: 0,
- supportFee: 0,
- swapPaymentQuote: {},
- };
- });
- };
-
- const runSwapFeeCalc = async () => {
- if (!poolInfoRef?.currentPriceAInB || !poolInfoRef?.lpPublicKey) return;
-
- if (!determinePaymentMethod || determinePaymentMethod === 'user-choice') {
- clearSwapFee();
- return;
- }
-
- const needsSwapForSplit =
- (paymentCurrency === 'BTC' && determinePaymentMethod === 'USD') ||
- (paymentCurrency === 'USD' && determinePaymentMethod === 'BTC');
-
- if (!needsSwapForSplit) {
- clearSwapFee();
- return;
- }
-
- const price = poolInfoRef.currentPriceAInB;
-
- if (paymentCurrency === 'BTC' && determinePaymentMethod === 'USD') {
- const shortfallSatsReg = totalSplitSats;
-
- if (shortfallSatsReg <= 0 || shortfallSatsReg < min_usd_swap_amount) {
- clearSwapFee();
- return;
- }
-
- const shortfallSats = shortfallSatsReg;
-
- const key = `usd-btc:${shortfallSats}:${price}:${dollarBalanceSat}`;
- if (swapFeeKeyRef.current === key) return;
- swapFeeKeyRef.current = key;
-
- const amountToSendConversion = satsToDollars(shortfallSats, price);
- const usdBalanceConversion = satsToDollars(dollarBalanceSat, price);
- const maxAmount = Math.min(
- amountToSendConversion,
- usdBalanceConversion,
- );
- const usdAmount = Math.ceil(maxAmount.toFixed(2) * Math.pow(10, 6));
-
- const result = await simulateSwap(currentWalletMnemoinc, {
- poolId: poolInfoRef.lpPublicKey,
- assetInAddress: USD_ASSET_ADDRESS,
- assetOutAddress: BTC_ASSET_ADDRESS,
- amountIn: usdAmount,
- });
-
- if (cancelled) return;
- if (!result?.didWork) {
- clearSwapFee();
- return;
- }
-
- const fees = result.simulation.feePaidAssetIn;
- const satFee = Math.round(dollarsToSats(fees / Math.pow(10, 6), price));
-
- setPaymentInfo(prev => ({
- ...prev,
- paymentFee: satFee,
- supportFee: 0,
- swapPaymentQuote: {
- warn: parseFloat(result.simulation.priceImpact) > 3,
- poolId: poolInfoRef.lpPublicKey,
- assetInAddress: USD_ASSET_ADDRESS,
- assetOutAddress: BTC_ASSET_ADDRESS,
- amountIn: usdAmount,
- satFee,
- bitcoinBalance,
- dollarBalanceSat,
- },
- }));
- }
-
- if (paymentCurrency === 'USD' && determinePaymentMethod === 'BTC') {
- const shortfallDollars = totalSplitDollars;
- console.log(shortfallDollars, 'short fall dollar');
- if (shortfallDollars <= 0) {
- clearSwapFee();
- return;
- }
- const shortFallSats = Math.round(
- dollarsToSats(shortfallDollars, price),
- );
- const satAmount = shortFallSats;
-
- console.log(satAmount, 'short fall sats');
- if (satAmount < swapLimits.bitcoin) {
- clearSwapFee();
- return;
- }
-
- const key = `btc-usd:${satAmount}:${price}:${bitcoinBalance}`;
- if (swapFeeKeyRef.current === key) return;
- swapFeeKeyRef.current = key;
-
- const result = await simulateSwap(currentWalletMnemoinc, {
- poolId: poolInfoRef.lpPublicKey,
- assetInAddress: BTC_ASSET_ADDRESS,
- assetOutAddress: USD_ASSET_ADDRESS,
- amountIn: satAmount,
- });
-
- if (cancelled) return;
- if (!result?.didWork) {
- clearSwapFee();
- return;
- }
-
- const fees = Number(result.simulation.feePaidAssetIn);
- let satFee = dollarsToSats(fees / Math.pow(10, 6), price);
- satFee += satAmount * INTEGRATOR_FEE;
-
- setPaymentInfo(prev => ({
- ...prev,
- paymentFee: Math.round(satFee),
- supportFee: 0,
- swapPaymentQuote: {
- warn: parseFloat(result.simulation.priceImpact) > 3,
- poolId: poolInfoRef.lpPublicKey,
- assetInAddress: BTC_ASSET_ADDRESS,
- assetOutAddress: USD_ASSET_ADDRESS,
- amountIn: satAmount,
- satFee: Math.round(satFee),
- bitcoinBalance,
- dollarBalanceSat,
- },
- }));
- }
- };
-
- runSwapFeeCalc();
-
- return () => {
- cancelled = true;
- };
- }, [
- paymentCurrency,
- paymentInfo,
- isUsingLRC20,
- poolInfoRef,
- determinePaymentMethod,
- totalSplitSats,
- totalSplitDollars,
- bitcoinBalance,
- dollarBalanceToken,
- dollarBalanceSat,
- min_usd_swap_amount,
- swapLimits.bitcoin,
- currentWalletMnemoinc,
- selectedPaymentMethod,
- ]);
-
- // Fast pay auto-trigger
- useEffect(() => {
- if (
- !isUsingFastPay ||
- hasTriggeredFastPay.current ||
- isSendingPayment.current
- )
- return;
-
- setShowProgressAnimation(true);
-
- if (progressAnimationRef.current) {
- requestAnimationFrame(() => {
- progressAnimationRef.current.startAtBeginning();
- });
- }
-
- const fastPayTrigger = setTimeout(() => {
- hasTriggeredFastPay.current = true;
- if (progressAnimationRef.current) {
- progressAnimationRef.current.startProgress();
- }
- sendPayment();
- }, 250);
-
- return () => {
- clearTimeout(fastPayTrigger);
- };
- }, [isUsingFastPay]);
-
- console.log(splitRecipients, 'split recitps');
-
+ // ── Payment execution ───────────────────────────────────────────────────────
+ console.log(swapPaymentQuote);
const sendPayment = useCallback(async () => {
- if (!paymentValidation.isValid) {
- const error = paymentValidation.getErrorMessage(
- paymentValidation.primaryError,
- );
- navigate.navigate('ErrorScreen', { errorMessage: error });
- return;
- }
-
+ if (!canSendPayment) return;
if (isSendingPayment.current) return;
isSendingPayment.current = true;
@@ -837,79 +463,73 @@ export default function ConfirmSplitPayment(props) {
const splitMemo = enteredPaymentInfo?.description || '';
let executionResponse;
- const expectedReceiveType = paymentInfo?.data?.expectedReceive || 'sats';
- const needsSwap =
- (determinePaymentMethod === 'USD' && expectedReceiveType === 'sats') ||
- (determinePaymentMethod === 'BTC' && expectedReceiveType === 'tokens');
-
if (needsSwap) {
- if (!paymentInfo?.swapPaymentQuote) {
+ if (!swapPaymentQuote || !Object.keys(swapPaymentQuote).length) {
throw new Error('Swap quote not available');
}
-
if (!poolInfoRef?.currentPriceAInB) {
throw new Error('Pool info not available');
}
- if (determinePaymentMethod === 'USD') {
- const amountInWithBuffer = Math.min(
- (paymentInfo.swapPaymentQuote.amountIn *
- SEND_AMOUNT_INCREASE_BUFFER) /
- Math.pow(10, 6),
- satsToDollars(dollarBalanceSat, poolInfoRef.currentPriceAInB),
- );
- const formatted = Math.round(
- amountInWithBuffer.toFixed(2) * Math.pow(10, 6),
- );
+ if (sendingMethod === 'USD') {
+ // USD→BTC swap
+ const formatted = calculateFlashnetAmountIn({
+ baseAmountIn:
+ swapPaymentQuote.amountIn +
+ Number(swapPaymentQuote.feePaidAssetIn),
+ isUsdAssetIn: true,
+ dollarBalanceSat,
+ currentPriceAInB: poolInfoRef.currentPriceAInB,
+ });
executionResponse = await executeSwap(currentWalletMnemoinc, {
- poolId:
- paymentInfo.swapPaymentQuote.poolId || poolInfoRef.lpPublicKey,
+ poolId: swapPaymentQuote.poolId || poolInfoRef.lpPublicKey,
assetInAddress: USD_ASSET_ADDRESS,
assetOutAddress: BTC_ASSET_ADDRESS,
amountIn: formatted,
});
} else {
- const amountInWithBuffer = Math.min(
- paymentInfo.swapPaymentQuote.amountIn * SEND_AMOUNT_INCREASE_BUFFER,
- bitcoinBalance,
- );
- const formatted = Math.round(amountInWithBuffer);
+ // BTC→USD swap
+ const formatted = calculateFlashnetAmountIn({
+ baseAmountIn:
+ swapPaymentQuote.amountIn +
+ Math.round(
+ dollarsToSats(
+ Number(swapPaymentQuote.feePaidAssetIn) / Math.pow(10, 6),
+ ),
+ ),
+ isUsdAssetIn: false,
+ maxBalance: bitcoinBalance,
+ });
executionResponse = await executeSwap(currentWalletMnemoinc, {
- poolId:
- paymentInfo.swapPaymentQuote.poolId || poolInfoRef.lpPublicKey,
+ poolId: swapPaymentQuote.poolId || poolInfoRef.lpPublicKey,
assetInAddress: BTC_ASSET_ADDRESS,
assetOutAddress: USD_ASSET_ADDRESS,
amountIn: formatted,
});
}
- if (!executionResponse?.didWork)
+ if (!executionResponse?.didWork) {
throw new Error(
executionResponse?.error || 'Error when executing swap',
);
+ }
const outboundTransferId = executionResponse.swap.outboundTransferId;
setFlashnetTransfer(outboundTransferId);
const userSwaps = await getUserSwapHistory(currentWalletMnemoinc, 5);
-
if (userSwaps.didWork) {
const swap = userSwaps.swaps.find(
- savedSwap => savedSwap.outboundTransferId === outboundTransferId,
+ s => s.outboundTransferId === outboundTransferId,
);
-
- if (swap) {
- setFlashnetTransfer(swap.inboundTransferId);
- }
+ if (swap) setFlashnetTransfer(swap.inboundTransferId);
}
const MAX_WAIT_TIME = 60000;
const startTime = Date.now();
-
while (true) {
- if (Date.now() - startTime > MAX_WAIT_TIME) {
+ if (Date.now() - startTime > MAX_WAIT_TIME)
throw new Error('Swap completion timeout');
- }
if (!IS_SPARK_ID.test(outboundTransferId)) {
await new Promise(res => setTimeout(res, 2500));
@@ -920,11 +540,11 @@ export default function ConfirmSplitPayment(props) {
currentWalletMnemoinc,
outboundTransferId,
);
+ if (
+ getSparkPaymentStatus(sparkTransferResponse?.status) === 'completed'
+ )
+ break;
- const status = getSparkPaymentStatus(sparkTransferResponse?.status);
- if (status === 'completed') break;
-
- console.log('Swap is not complete, waiting for completion');
await new Promise(res => setTimeout(res, 1500));
}
@@ -932,22 +552,13 @@ export default function ConfirmSplitPayment(props) {
await new Promise(res => setTimeout(res, 1500));
}
- let swapFee = 0;
- if (needsSwap) {
- if (determinePaymentMethod === 'USD') {
- swapFee = dollarsToSats(
+ const swapFee = needsSwap
+ ? dollarsToSats(
executionResponse.swap.feeAmount / Math.pow(10, 6),
poolInfoRef.currentPriceAInB,
- );
- } else {
- swapFee = dollarsToSats(
- executionResponse.swap.feeAmount / Math.pow(10, 6),
- poolInfoRef.currentPriceAInB,
- );
- }
- }
+ )
+ : 0;
- // ── Execute payment (BTC and USD paths both call bulkSparkPayment) ──────
const result = await bulkSparkPayment(
currentWalletMnemoinc,
splitRecipients,
@@ -962,7 +573,6 @@ export default function ConfirmSplitPayment(props) {
paymentCurrency,
swapFee,
);
- console.log(result, 'bulk payments result');
isSendingPayingEventEmiiter.emit(SENDING_PAYMENT_EVENT_NAME, false);
@@ -971,6 +581,7 @@ export default function ConfirmSplitPayment(props) {
await new Promise(res => setTimeout(res, 600));
}
+ // bug here if tx is undefind we crash the next page
requestAnimationFrame(() => {
requestAnimationFrame(() => {
navigate.reset({
@@ -982,6 +593,7 @@ export default function ConfirmSplitPayment(props) {
params: {
transaction: result?.transaction,
isSplitPayment: true,
+ error: result.error,
},
},
],
@@ -989,103 +601,50 @@ export default function ConfirmSplitPayment(props) {
});
});
} catch (error) {
- console.error('Error in sendPayment:', error);
- // Reset state on error
+ console.error('ConfirmSplitPayment sendPayment error:', error);
isSendingPayment.current = false;
setShowProgressAnimation(false);
- // Optionally show error to user
errorMessageNavigation(error.message);
}
}, [
- paymentInfo,
- selectedLRC20Asset,
+ canSendPayment,
+ needsSwap,
+ swapPaymentQuote,
+ sendingMethod,
enteredPaymentInfo,
- combinedPaymentDescription,
- isUsingLRC20,
- tokenDecimals,
- convertedSendAmount,
- masterInfoObject,
- paymentFee,
- sparkBalance,
- sparkInformation,
currentWalletMnemoinc,
- sendWebViewRequest,
- contactInfo,
+ splitRecipients,
+ paymentCurrency,
+ sparkInformation,
+ globalContactsInformation,
+ contactsPrivateKey,
+ masterInfoObject,
navigate,
errorMessageNavigation,
- determinePaymentMethod,
- fiatValueConvertedSendAmount,
- paymentValidation,
- splitRecipients,
bitcoinBalance,
dollarBalanceSat,
poolInfoRef,
- t,
- globalContactsInformation,
- contactsPrivateKey,
]);
- const handleSelectPaymentMethod = useCallback(
- showNextScreen => {
- setRerenderInput(prev => (prev += 1));
- if (showNextScreen) {
- if (!paymentValidation.isValid) {
- const error = paymentValidation.getErrorMessage(
- paymentValidation.primaryError,
- );
- navigate.navigate('ErrorScreen', { errorMessage: error });
- return;
- }
-
- setDidSelectPaymentMethod(true);
- } else {
- navigate.navigate('CustomHalfModal', {
- wantedContent: 'SelectPaymentMethod',
- selectedPaymentMethod: determinePaymentMethod,
- fromPage: 'ConfirmSplitPayment',
- });
- }
- },
- [navigate, paymentValidation, determinePaymentMethod],
- );
-
- const handleDenominationToggle = () => {
- if (!isAmountFocused) return;
- if (!canEditAmount) {
- // For fixed amounts, just change the display denomination
- const nextDenom = getNextDenomination();
- setUserSetInputDenomination(nextDenom);
- // No need to convert sendingAmount - it stays in sats
- // The display will automatically update via convertSatsToDisplay
- } else {
- // For editable amounts, convert the user-entered value
- const nextDenom = getNextDenomination();
- const convertedValue = convertForToggle(
- sendingAmount,
- convertTextInputValue,
- );
-
- setUserSetInputDenomination(nextDenom);
- setPaymentInfo(prev => ({
- ...prev,
- sendAmount: convertedValue,
- }));
- }
- };
-
- const sendingAsset =
- selectedLRC20Asset === 'Bitcoin'
- ? !isLightningPayment &&
- !isBitcoinPayment &&
- !(isSparkPayment && receiverExpectsCurrency === 'sats')
- ? t('constants.dollars_upper')
- : t('constants.bitcoin_upper')
- : seletctedToken?.tokenMetadata?.tokenTicker;
+ // ── Early exit for error state ──────────────────────────────────────────────
if (errorMessage) {
return ;
}
+ // ── Derived display ─────────────────────────────────────────────────────────
+
+ const sendingAsset =
+ sendingMethod === 'USD' || (!sendingMethod && isUSDSplit)
+ ? t('constants.dollars_upper')
+ : t('constants.bitcoin_upper');
+
+ const denomination = isUSDSplit
+ ? 'fiat'
+ : masterInfoObject.userBalanceDenomination || 'sats';
+
+ // ── Render ──────────────────────────────────────────────────────────────────
+
return (
@@ -1094,8 +653,9 @@ export default function ConfirmSplitPayment(props) {
containerStyles={{ marginBottom: 0 }}
/>
+
- {/* Amount display */}
+ {/* Amount display — always shown except during rate-change intercept */}
{uiState !== 'SWAP_RATES_CHANGED' && (
-
- {!isUsingLRC20 && (
-
- )}
+
)}
- {/* Fee info for fixed amount */}
+ {/* Fee info */}
{uiState === 'CONFIRM_PAYMENT' && (
)}
- {/* Invoice info */}
+ {/* Recipient summary */}
{uiState === 'CONFIRM_PAYMENT' && (
)}
+
+ {/* Payment method picker */}
{uiState === 'CHOOSE_METHOD' && (
)}
- {/* SWAP_RATES_CHANGED — rate drifted and broke swap viability */}
+ {/* Rates changed */}
{uiState === 'SWAP_RATES_CHANGED' && }
- {/* SELECT_PAYMENT method state - show button to take user to select half modal */}
+ {/* CHOOSE_METHOD — continue button */}
{uiState === 'CHOOSE_METHOD' && (
handleSelectPaymentMethod(true)}
textContent={t('constants.review')}
/>
)}
- {/* SWAP_RATES_CHANGED — primary CTA to re-enter amount */}
+ {/* SWAP_RATES_CHANGED — reset CTA */}
{uiState === 'SWAP_RATES_CHANGED' && (
)}
- {/* CONFIRM_PAYMENT State - Show swipe button or progress animation */}
+ {/* CONFIRM_PAYMENT — swipe slider or progress animation */}
{uiState === 'CONFIRM_PAYMENT' && (
- {showProgressAnimation || isUsingFastPay ? (
+ {showProgressAnimation ? (
{
+ const message = await sendPushNotification({
+ selectedContactUsername: p.selectedContact.uniqueName,
+ myProfile: p.globalContactsInformation.myProfile,
+ data: p.data,
+ privateKey: p.privateKey,
+ retrivedContact: p.retrivedContact,
+ masterInfoObject: p.masterInfoObject,
+ returnOnly: true,
+ });
+ return message || [];
+ }),
+ )
+ ).flat();
+
+ // fire and forget
+ await fetchBackend(
+ `bulkPushNoticications`,
+ { pushNotifications: messages },
+ privateKey,
+ globalContactsInformation.myProfile.uuid,
+ );
return true;
} catch (err) {
@@ -86,6 +104,7 @@ export async function sendPushNotification({
privateKey,
retrivedContact,
masterInfoObject,
+ returnOnly = false,
}) {
try {
crashlyticsLogReport('Sending push notification');
@@ -213,6 +232,11 @@ export async function sendPushNotification({
decryptPubKey: retrivedContact.uuid,
};
}
+ requestData.useNewNotifications = useNewNotifications;
+
+ if (returnOnly) {
+ return requestData;
+ }
const response = await fetchBackend(
`contactsPushNotificationV${useNewNotifications ? '4' : '3'}`,
diff --git a/app/functions/payments/validateSplitPayment.js b/app/functions/payments/validateSplitPayment.js
new file mode 100644
index 00000000..4fdb230c
--- /dev/null
+++ b/app/functions/payments/validateSplitPayment.js
@@ -0,0 +1,101 @@
+import displayCorrectDenomination from '../displayCorrectDenomination';
+import { dollarsToSats, satsToDollars } from '../spark/flashnet';
+
+/**
+ * Determines whether a split payment can be funded from BTC balance, USD balance,
+ * or neither. Used in both createSplitBill (to block navigation) and
+ * confirmSplitPayment (to derive valid sending options).
+ *
+ * @param {object} params
+ * @param {number} params.totalSats - Total payment amount in sats
+ * @param {string} params.paymentCurrency - 'BTC' | 'USD' — what recipients receive
+ * @param {number} params.bitcoinBalance - User's BTC balance in sats
+ * @param {number} params.dollarBalanceSat - User's USD balance expressed in sats
+ * @param {{usd: number, bitcoin: number}} params.swapLimits - Min swap amounts
+ * @param {number} params.price - poolInfo.currentPriceAInB (sats per dollar)
+ * @param {function} params.t - i18n translation function
+ * @returns {{ canPayBTC: boolean, canPayUSD: boolean, errorMessage: string|null }}
+ */
+export function validateSplitPayment({
+ totalSats,
+ paymentCurrency,
+ bitcoinBalance,
+ dollarBalanceSat,
+ swapLimits,
+ price,
+ masterInfoObject,
+ swapUSDPriceDollars,
+ t,
+}) {
+ const isUSD = paymentCurrency === 'USD';
+ const minUsdSwapSats =
+ price > 0 ? Math.round(dollarsToSats(swapLimits.usd, price)) : Infinity;
+ const minBtcSwapSats = swapLimits.bitcoin;
+
+ // Compare in integer USD cents to avoid fiat→sats round-trip rounding errors.
+ // Both user amount and limits are expressed at the same display precision (2 dp).
+ const totalCents =
+ price > 0 ? Math.round(satsToDollars(totalSats, price) * 100) : 0;
+ const minBtcSwapCents =
+ price > 0
+ ? Math.round(satsToDollars(minBtcSwapSats, price) * 100)
+ : Infinity;
+ const minUsdSwapCents = Math.round(swapLimits.usd * 100);
+
+ const hasBtcForAmount = bitcoinBalance >= totalSats;
+ const hasUsdForAmount = dollarBalanceSat >= totalSats;
+ const aboveBtcSwapMin = totalCents >= minBtcSwapCents;
+ const aboveUsdSwapMin = totalCents >= minUsdSwapCents;
+
+ let canPayBTC, canPayUSD;
+ if (isUSD) {
+ // Recipients receive USD tokens: direct USD or BTC→USD swap
+ canPayUSD = hasUsdForAmount;
+ canPayBTC = hasBtcForAmount && aboveBtcSwapMin;
+ } else {
+ // Recipients receive BTC: direct BTC or USD→BTC swap
+ canPayBTC = hasBtcForAmount;
+ canPayUSD = hasUsdForAmount && aboveUsdSwapMin;
+ }
+
+ let errorMessage = null;
+ if (!canPayBTC && !canPayUSD) {
+ if (isUSD && hasBtcForAmount && !aboveBtcSwapMin) {
+ errorMessage = t('wallet.sendPages.acceptButton.swapMinimumError', {
+ currency1: t('constants.bitcoin_upper'),
+ currency2: t('constants.dollars_upper'),
+ amount: displayCorrectDenomination({
+ amount: minBtcSwapSats,
+ masterInfoObject: {
+ ...masterInfoObject,
+ userBalanceDenomination: 'fiat',
+ },
+ fiatStats: {
+ value: swapUSDPriceDollars,
+ coin: 'USD',
+ },
+ }),
+ });
+ } else if (!isUSD && hasUsdForAmount && !aboveUsdSwapMin) {
+ errorMessage = t('wallet.sendPages.acceptButton.swapMinimumError', {
+ currency1: t('constants.dollars_upper'),
+ currency2: t('constants.bitcoin_upper'),
+ amount: displayCorrectDenomination({
+ amount: minUsdSwapSats,
+ masterInfoObject: {
+ ...masterInfoObject,
+ userBalanceDenomination: 'sats',
+ },
+ fiatStats: {
+ value: swapUSDPriceDollars,
+ coin: 'USD',
+ },
+ }),
+ });
+ } else {
+ errorMessage = t('wallet.sendPages.acceptButton.balanceError');
+ }
+ }
+
+ return { canPayBTC, canPayUSD, errorMessage };
+}
diff --git a/app/functions/spark/bulkPaymentFunctions.js b/app/functions/spark/bulkPaymentFunctions.js
index 0cc1f248..1734e9a5 100644
--- a/app/functions/spark/bulkPaymentFunctions.js
+++ b/app/functions/spark/bulkPaymentFunctions.js
@@ -10,10 +10,7 @@ import {
swapTokenToBitcoin,
USD_ASSET_ADDRESS,
} from './flashnet';
-import {
- publishMessage,
- publishBulkMessages,
-} from '../messaging/publishMessage';
+import { publishBulkMessages } from '../messaging/publishMessage';
import { bulkUpdateSparkTransactions } from './transactions';
import getReceiveAddressAndContactForContactsPayment from '../../components/admin/homeComponents/contacts/internalComponents/getReceiveAddressAndKindForPayment';
import customUUID from '../customUUID';
@@ -173,7 +170,13 @@ export async function bulkSparkPayment(
// Nothing to fulfill if every invoice failed to generate
if (invoiceBatch.length === 0) {
- return { successful: [], failed, totalPaid: 0, groupId: null };
+ return {
+ successful: [],
+ failed,
+ totalPaid: 0,
+ groupId: null,
+ error: failed[0].error,
+ };
}
// ── Phase 2: Single batch fulfill ─────────────────────────────────────────
@@ -198,7 +201,13 @@ export async function bulkSparkPayment(
}
if (!fulfillResult || !fulfillResult?.didWork)
- return { successful: [], failed, totalPaid: 0, groupId: null };
+ return {
+ successful: [],
+ failed,
+ totalPaid: 0,
+ groupId: null,
+ error: fulfillResult.error,
+ };
// ── Phase 3: Match results back to recipients ──────────────────────────────
// The SDK returns { invoice, transferResponse } / { invoice, error } in each
@@ -262,17 +271,17 @@ export async function bulkSparkPayment(
currentTime,
} = notifyParams;
- for (const {
- contact,
- amountSats,
- transferId,
- transfer,
- contactFull,
- currency,
- amountCents,
- } of successful) {
- try {
- await publishMessage({
+ const pushNotifications = successful.map(
+ ({
+ contact,
+ amountSats,
+ transferId,
+ transfer,
+ contactFull,
+ currency,
+ amountCents,
+ }) => {
+ return {
toPubKey: contact.uuid,
fromPubKey: globalContactsInformation.myProfile.uuid,
data: {
@@ -296,16 +305,15 @@ export async function bulkSparkPayment(
retrivedContact: contactFull,
currentTime,
masterInfoObject,
- });
- } catch (notifyErr) {
- // Notification failure is non-fatal
- console.log(
- 'bulkSparkPayment: notification failed for',
- contact.uniqueName,
- notifyErr,
- );
- }
- }
+ };
+ },
+ );
+
+ await publishBulkMessages(
+ pushNotifications,
+ privateKey,
+ globalContactsInformation,
+ );
}
// ── Phase 5: Persist to SQLite ─────────────────────────────────────────────
@@ -444,16 +452,16 @@ export async function bulkSparkPayment(
currentTime,
} = notifyParams;
- for (const {
- contact,
- amountSats,
- amountCents,
- currency,
- txHash: entryTxHash,
- contactFull,
- } of successful) {
- try {
- await publishMessage({
+ const pushNotifications = successful.map(
+ ({
+ contact,
+ amountSats,
+ amountCents,
+ currency,
+ txHash: entryTxHash,
+ contactFull,
+ }) => {
+ return {
toPubKey: contact.uuid,
fromPubKey: globalContactsInformation.myProfile.uuid,
data: {
@@ -463,7 +471,7 @@ export async function bulkSparkPayment(
isRequest: false,
didSend: true,
wasSeen: null,
- paymentDenomination: 'USD',
+ paymentDenomination: currency === 'USD' ? 'USD' : 'BTC',
amountDollars:
amountCents != null ? (amountCents / 100).toFixed(2) : null,
txid: entryTxHash,
@@ -475,15 +483,15 @@ export async function bulkSparkPayment(
retrivedContact: contactFull,
currentTime,
masterInfoObject,
- });
- } catch (notifyErr) {
- console.log(
- 'bulkSparkPayment: USD notification failed for',
- contact.uniqueName,
- notifyErr,
- );
- }
- }
+ };
+ },
+ );
+
+ await publishBulkMessages(
+ pushNotifications,
+ privateKey,
+ globalContactsInformation,
+ );
}
// ── Phase 5: Persist to SQLite ─────────────────────────────────────────────
@@ -627,7 +635,11 @@ export async function bulkPaymentRequest(recipients, memo, senderInfo) {
return { successful: [], failed };
}
- const success = await publishBulkMessages(payloads);
+ const success = await publishBulkMessages(
+ payloads,
+ privateKey,
+ globalContactsInformation,
+ );
if (!success) {
return {
diff --git a/app/functions/spark/flashnet.js b/app/functions/spark/flashnet.js
index 9426c3c8..1265c7e9 100644
--- a/app/functions/spark/flashnet.js
+++ b/app/functions/spark/flashnet.js
@@ -39,23 +39,35 @@ import {
import { decode } from 'bolt11';
// ============================================
-// CONSTANTS
+// CONSTANTS & PURE UTILITIES
// ============================================
+import {
+ BTC_ASSET_ADDRESS,
+ USD_ASSET_ADDRESS,
+ FLASHNET_POOL_IDENTITY_KEY,
+ DEFAULT_SLIPPAGE_BPS,
+ SEND_AMOUNT_INCREASE_BUFFER,
+ DEFAULT_MAX_SLIPPAGE_BPS,
+ INTEGRATOR_FEE,
+ INTEGRATOR_FEE_BPS,
+ satsToDollars,
+ dollarsToSats,
+ calculateFlashnetAmountIn,
+} from './swapAmountUtils';
-// Standard Bitcoin pubkey for pools (constant across Flashnet)
-export const BTC_ASSET_ADDRESS =
- '020202020202020202020202020202020202020202020202020202020202020202';
-export const USD_ASSET_ADDRESS =
- '3206c93b24a4d18ea19d0a9a213204af2c7e74a6d16c7535cc5d33eca4ad1eca';
-
-export const FLASHNET_POOL_IDENTITY_KEY =
- '02894808873b896e21d29856a6d7bb346fb13c019739adb9bf0b6a8b7e28da53da';
-
-// Default slippage tolerance
-export const DEFAULT_SLIPPAGE_BPS = 100; // 1%
-export const SEND_AMOUNT_INCREASE_BUFFER = 1.01; // 1%
-export const DEFAULT_MAX_SLIPPAGE_BPS = 300; // 3% for lightning payments
-export const INTEGRATOR_FEE = 0.005; // .5%
+export {
+ BTC_ASSET_ADDRESS,
+ USD_ASSET_ADDRESS,
+ FLASHNET_POOL_IDENTITY_KEY,
+ DEFAULT_SLIPPAGE_BPS,
+ SEND_AMOUNT_INCREASE_BUFFER,
+ DEFAULT_MAX_SLIPPAGE_BPS,
+ INTEGRATOR_FEE,
+ INTEGRATOR_FEE_BPS,
+ satsToDollars,
+ dollarsToSats,
+ calculateFlashnetAmountIn,
+};
// ============================================
// HELPER FUNCTIONS
@@ -364,7 +376,7 @@ export const simulateSwap = async (
assetInAddress,
assetOutAddress,
amountIn,
- integratorFeeRateBps = 50,
+ integratorFeeRateBps = INTEGRATOR_FEE_BPS,
},
) => {
try {
@@ -432,7 +444,7 @@ export const executeSwap = async (
amountIn,
minAmountOut, // Optional - will be calculated if not provided
maxSlippageBps = DEFAULT_SLIPPAGE_BPS,
- integratorFeeRateBps = 50,
+ integratorFeeRateBps = INTEGRATOR_FEE_BPS,
},
) => {
try {
@@ -705,7 +717,7 @@ export const getLightningPaymentQuote = async (
mnemonic,
invoice,
tokenAddress,
- integratorFeeRateBps = 50,
+ integratorFeeRateBps = INTEGRATOR_FEE_BPS,
maxSlippageBps = DEFAULT_MAX_SLIPPAGE_BPS,
) => {
try {
@@ -780,7 +792,7 @@ export const payLightningWithToken = async (
maxLightningFeeSats = null,
rollbackOnFailure = true,
useExistingBtcBalance = false,
- integratorFeeRateBps = 50,
+ integratorFeeRateBps = INTEGRATOR_FEE_BPS,
},
) => {
try {
@@ -1386,64 +1398,6 @@ export const getCurrentPrice = async (mnemonic, poolId) => {
}
};
-/**
- * Convert sats to dollars
- * @param {string|number|bigint} sats - Amount of satoshis (100,000,000)
- * @param {string|number|bigint} currentPriceAinB - Price of Bitcoin in dollars
- * @returns {number} Amount in dollars
- */
-export function satsToDollars(sats, currentPriceAinB) {
- try {
- const DOLLAR_DECIMALS = 1_000_000;
-
- const numSats = typeof sats === 'bigint' ? Number(sats) : Number(sats || 0);
- const numPrice =
- typeof currentPriceAinB === 'bigint'
- ? Number(currentPriceAinB)
- : Number(currentPriceAinB || 0);
-
- if (isNaN(numSats) || isNaN(numPrice) || numPrice === 0) {
- return 0;
- }
-
- return (numSats * numPrice) / DOLLAR_DECIMALS;
- } catch (error) {
- console.error('Error in satsToDollars:', error, { sats, currentPriceAinB });
- return 0;
- }
-}
-
-/**
- * Convert dollars to sats
- * @param {string|number|bigint} dollars - Amount of dollars (1,000,000)
- * @param {string|number|bigint} currentPriceAinB - Price of Bitcoin in dollars
- * @returns {number} Amount in sats
- */
-export function dollarsToSats(dollars, currentPriceAinB) {
- try {
- const DOLLAR_DECIMALS = 1_000_000;
-
- const numDollars =
- typeof dollars === 'bigint' ? Number(dollars) : Number(dollars || 0);
- const numPrice =
- typeof currentPriceAinB === 'bigint'
- ? Number(currentPriceAinB)
- : Number(currentPriceAinB || 0);
-
- if (isNaN(numDollars) || isNaN(numPrice) || numPrice === 0) {
- return 0;
- }
-
- return (numDollars * DOLLAR_DECIMALS) / numPrice;
- } catch (error) {
- console.error('Error in dollarsToSats:', error, {
- dollars,
- currentPriceAinB,
- });
- return 0;
- }
-}
-
/**
* Convert exchangeRate to fiat price
* @param {string|number|bigint} currentPriceAinB - Price of Bitcoin in dollars
diff --git a/app/functions/spark/payments.js b/app/functions/spark/payments.js
index 16d880dc..3a03ed26 100644
--- a/app/functions/spark/payments.js
+++ b/app/functions/spark/payments.js
@@ -28,12 +28,12 @@ import {
import sha256Hash from '../hash';
import calculateProgressiveBracketFee from './calculateSupportFee';
import {
+ calculateFlashnetAmountIn,
dollarsToSats,
executeSwap,
getUserSwapHistory,
payLightningWithToken,
satsToDollars,
- SEND_AMOUNT_INCREASE_BUFFER,
USD_ASSET_ADDRESS,
} from './flashnet';
import {
@@ -377,17 +377,12 @@ export const sparkPaymenWrapper = async ({
let usedUSDB = false;
if (needsSwap) {
if (usablePaymentMethod === 'USD') {
- const amountInWithBuffer = Math.min(
- (swapPaymentQuote.amountIn * SEND_AMOUNT_INCREASE_BUFFER) /
- Math.pow(10, 6),
- satsToDollars(
- swapPaymentQuote.dollarBalanceSat,
- poolInfoRef.currentPriceAInB,
- ),
- );
- const formatted = Math.round(
- amountInWithBuffer.toFixed(2) * Math.pow(10, 6),
- );
+ const formatted = calculateFlashnetAmountIn({
+ baseAmountIn: swapPaymentQuote.amountIn,
+ isUsdAssetIn: true,
+ dollarBalanceSat: swapPaymentQuote.dollarBalanceSat,
+ currentPriceAInB: poolInfoRef.currentPriceAInB,
+ });
executionResponse = await executeSwap(mnemonic, {
poolId: swapPaymentQuote.poolId,
assetInAddress: swapPaymentQuote.assetInAddress,
@@ -396,11 +391,11 @@ export const sparkPaymenWrapper = async ({
});
usedUSDB = true;
} else {
- const amountInWithBuffer = Math.min(
- swapPaymentQuote.amountIn * SEND_AMOUNT_INCREASE_BUFFER,
- swapPaymentQuote.bitcoinBalance,
- );
- const formatted = Math.round(amountInWithBuffer);
+ const formatted = calculateFlashnetAmountIn({
+ baseAmountIn: swapPaymentQuote.amountIn,
+ isUsdAssetIn: false,
+ maxBalance: swapPaymentQuote.bitcoinBalance,
+ });
executionResponse = await executeSwap(mnemonic, {
poolId: swapPaymentQuote.poolId,
assetInAddress: swapPaymentQuote.assetInAddress,
diff --git a/app/functions/spark/swapAmountUtils.js b/app/functions/spark/swapAmountUtils.js
new file mode 100644
index 00000000..e280ea82
--- /dev/null
+++ b/app/functions/spark/swapAmountUtils.js
@@ -0,0 +1,100 @@
+// Pure math utilities for Flashnet swap amount calculations.
+// No SDK imports — safe to test in Jest without mocking native modules.
+
+export const BTC_ASSET_ADDRESS =
+ '020202020202020202020202020202020202020202020202020202020202020202';
+export const USD_ASSET_ADDRESS =
+ '3206c93b24a4d18ea19d0a9a213204af2c7e74a6d16c7535cc5d33eca4ad1eca';
+export const FLASHNET_POOL_IDENTITY_KEY =
+ '02894808873b896e21d29856a6d7bb346fb13c019739adb9bf0b6a8b7e28da53da';
+
+export const DEFAULT_SLIPPAGE_BPS = 100; // 1%
+export const SEND_AMOUNT_INCREASE_BUFFER = 1.01; // 1%
+export const DEFAULT_MAX_SLIPPAGE_BPS = 300; // 3% for lightning payments
+export const INTEGRATOR_FEE = 0.005; // .5%
+export const INTEGRATOR_FEE_BPS = 50;
+
+/**
+ * Convert sats to dollars.
+ * @param {string|number|bigint} sats
+ * @param {string|number|bigint} currentPriceAinB - BTC price in dollars (microdollar units)
+ * @returns {number} Amount in dollars
+ */
+export function satsToDollars(sats, currentPriceAinB) {
+ try {
+ const DOLLAR_DECIMALS = 1_000_000;
+ const numSats = typeof sats === 'bigint' ? Number(sats) : Number(sats || 0);
+ const numPrice =
+ typeof currentPriceAinB === 'bigint'
+ ? Number(currentPriceAinB)
+ : Number(currentPriceAinB || 0);
+ if (isNaN(numSats) || isNaN(numPrice) || numPrice === 0) return 0;
+ return (numSats * numPrice) / DOLLAR_DECIMALS;
+ } catch (error) {
+ console.error('Error in satsToDollars:', error, { sats, currentPriceAinB });
+ return 0;
+ }
+}
+
+/**
+ * Convert dollars to sats.
+ * @param {string|number|bigint} dollars
+ * @param {string|number|bigint} currentPriceAinB - BTC price in dollars (microdollar units)
+ * @returns {number} Amount in sats
+ */
+export function dollarsToSats(dollars, currentPriceAinB) {
+ try {
+ const DOLLAR_DECIMALS = 1_000_000;
+ const numDollars =
+ typeof dollars === 'bigint' ? Number(dollars) : Number(dollars || 0);
+ const numPrice =
+ typeof currentPriceAinB === 'bigint'
+ ? Number(currentPriceAinB)
+ : Number(currentPriceAinB || 0);
+ if (isNaN(numDollars) || isNaN(numPrice) || numPrice === 0) return 0;
+ return (numDollars * DOLLAR_DECIMALS) / numPrice;
+ } catch (error) {
+ console.error('Error in dollarsToSats:', error, {
+ dollars,
+ currentPriceAinB,
+ });
+ return 0;
+ }
+}
+
+/**
+ * Calculate the final amountIn for a flashnet swap execution.
+ * Applies a buffer and caps to available balance.
+ * Always errs toward providing more input to avoid falling short of target output.
+ * Especially important when the swap output funds a subsequent payment.
+ *
+ * @param {number} baseAmountIn - In smallest units: sats (BTC path) or microdollars (USD path)
+ * @param {boolean} isUsdAssetIn - true = USD→BTC swap, false = BTC→USD swap
+ * @param {number} [maxBalance] - Balance cap in same units as baseAmountIn (required for BTC
+ * path; USD path can use dollarBalanceSat + currentPriceAInB)
+ * @param {number} [dollarBalanceSat] - USD balance expressed in sats (USD path precision cap)
+ * @param {number} [currentPriceAInB] - Pool price, required when dollarBalanceSat is provided
+ * @param {number} [bufferMultiplier] - Overshoot factor; defaults to SEND_AMOUNT_INCREASE_BUFFER
+ * @returns {number} Integer amountIn ready for executeSwap
+ */
+export function calculateFlashnetAmountIn({
+ baseAmountIn,
+ isUsdAssetIn,
+ maxBalance,
+ dollarBalanceSat,
+ currentPriceAInB,
+ bufferMultiplier = SEND_AMOUNT_INCREASE_BUFFER,
+}) {
+ if (isUsdAssetIn) {
+ // Work in dollars for cent-level precision, then convert back to microdollars.
+ const bufferedDollars = (baseAmountIn * bufferMultiplier) / Math.pow(10, 6);
+ const balanceDollars =
+ dollarBalanceSat != null && currentPriceAInB != null
+ ? satsToDollars(dollarBalanceSat, currentPriceAInB)
+ : maxBalance / Math.pow(10, 6);
+ const cappedDollars = Math.min(bufferedDollars, balanceDollars);
+ return Math.round(parseFloat(cappedDollars.toFixed(2)) * Math.pow(10, 6));
+ }
+ // BTC path: stay in sats
+ return Math.round(Math.min(baseAmountIn * bufferMultiplier, maxBalance));
+}
diff --git a/app/functions/spark/transformTxToPayment.js b/app/functions/spark/transformTxToPayment.js
index bf493be0..3e87d479 100644
--- a/app/functions/spark/transformTxToPayment.js
+++ b/app/functions/spark/transformTxToPayment.js
@@ -20,7 +20,7 @@ export async function transformTxToPaymentObject(
sparkAddress,
forcePaymentType,
isRestore,
- unpaidLNInvoices,
+ unpaidLNInvoices = [],
identityPubKey,
numTxsBeingRestored = 1,
forceOutgoing = false,
diff --git a/app/hooks/useBudgetWarning.js b/app/hooks/useBudgetWarning.js
index 07dcde5e..6d0b9055 100644
--- a/app/hooks/useBudgetWarning.js
+++ b/app/hooks/useBudgetWarning.js
@@ -7,7 +7,23 @@ import { NEAR_BUDGET_LIMIT, OVER_BUDGET_LIMIT } from '../constants';
// accepting them as parameters (test file defines its own copy inline).
export function computeBudgetWarning(budget, spentTotal) {
- if (!budget || !budget.amount || budget.amount <= 0) {
+ try {
+ if (!budget || !budget.amount || budget.amount <= 0) {
+ return {
+ shouldWarn: false,
+ isOverBudget: false,
+ spentPercent: 0,
+ leftToSpend: 0,
+ };
+ }
+ const budgetAmount = budget.amount;
+ const spentPercent = spentTotal / budgetAmount;
+ const leftToSpend = Math.max(budgetAmount - spentTotal, 0);
+ const shouldWarn = spentPercent >= NEAR_BUDGET_LIMIT;
+ const isOverBudget = spentPercent >= OVER_BUDGET_LIMIT;
+ return { shouldWarn, isOverBudget, spentPercent, leftToSpend };
+ } catch (err) {
+ console.log('compute budget warning error', err);
return {
shouldWarn: false,
isOverBudget: false,
@@ -15,12 +31,6 @@ export function computeBudgetWarning(budget, spentTotal) {
leftToSpend: 0,
};
}
- const budgetAmount = budget.amount;
- const spentPercent = spentTotal / budgetAmount;
- const leftToSpend = Math.max(budgetAmount - spentTotal, 0);
- const shouldWarn = spentPercent >= NEAR_BUDGET_LIMIT;
- const isOverBudget = spentPercent >= OVER_BUDGET_LIMIT;
- return { shouldWarn, isOverBudget, spentPercent, leftToSpend };
}
export function useBudgetWarning(sendingAmount = 0) {
diff --git a/app/screens/inAccount/analyticsPage.js b/app/screens/inAccount/analyticsPage.js
index 1c654e1d..1928e64b 100644
--- a/app/screens/inAccount/analyticsPage.js
+++ b/app/screens/inAccount/analyticsPage.js
@@ -316,6 +316,7 @@ const styles = StyleSheet.create({
budgetStatusLabel: {
fontSize: SIZES.smedium,
fontWeight: '500',
+ includeFontPadding: false,
},
progressBarTrack: {
height: 6,
diff --git a/app/screens/inAccount/confirmTxPage.js b/app/screens/inAccount/confirmTxPage.js
index 8a46c792..fdfd8f3b 100644
--- a/app/screens/inAccount/confirmTxPage.js
+++ b/app/screens/inAccount/confirmTxPage.js
@@ -48,8 +48,8 @@ export default function ConfirmTxPage(props) {
const [isAddingContact, setIsAddingContact] = useState(false);
const isLNURLAuth = props.route.params?.useLNURLAuth;
const transaction = props.route.params?.transaction;
- const hasError = props.route.params?.error;
- const paymentInformation = transaction?.details;
+ const paymentInformation = transaction?.details || {};
+ const hasError = props.route.params?.error || !paymentInformation;
const lnurlAddress = normalizeLNURLAddress(props.route.params?.lnurlAddress);
const isBlitzAddress = isBlitzLNURLAddress(lnurlAddress);
const lnurlUsername = lnurlAddress?.split('@')[0]?.toLowerCase();
@@ -87,7 +87,7 @@ export default function ConfirmTxPage(props) {
const paymentFee = paymentInformation?.fee;
- const errorMessage = hasError;
+ const errorMessage = hasError || t('errormessages.genericError');
const amount = paymentInformation?.amount || 0;
@@ -200,6 +200,48 @@ export default function ConfirmTxPage(props) {
);
}
+ if (props.route.params?.isSplitPayment && props.route.params?.isRequset) {
+ return (
+
+
+
+ {
+ requestAnimationFrame(() => {
+ requestAnimationFrame(() => {
+ navigate.popToTop();
+ });
+ });
+ }}
+ textContent={t('constants.continue')}
+ />
+
+ );
+ }
+
return (
@@ -182,15 +181,6 @@ export default function TechnicalTransactionDetails(props) {
// BTC: raw sats passed directly.
// USD: amountCents * 10_000 = micros (matches DB amount unit and
// what FormattedSatText + formatTokensNumber expect for LRC20).
- const rawAmount = isLRC20Payment
- ? (entry.amountCents ?? 0) * 10_000
- : entry.amountSats ?? 0;
- const displayBalance = isLRC20Payment
- ? formatTokensNumber(
- rawAmount,
- selectedToken?.tokenMetadata?.decimals,
- )
- : rawAmount;
const isLast = index === successfulGroup.length - 1;
@@ -219,15 +209,14 @@ export default function TechnicalTransactionDetails(props) {
styles={styles.infoName}
CustomNumberOfLines={1}
/>
+ {!details.isLRC20Payment && (
+
+ )}
-
{!isLast && (
@@ -271,6 +260,12 @@ const styles = StyleSheet.create({
includeFontPadding: false,
flexShrink: 1,
},
+ transferId: {
+ fontSize: SIZES.small,
+ opacity: HIDDEN_OPACITY,
+ includeFontPadding: false,
+ flexShrink: 1,
+ },
infoNameSmall: {
fontSize: SIZES.smedium,
opacity: HIDDEN_OPACITY,
diff --git a/context-store/analyticsContext.js b/context-store/analyticsContext.js
index e77bef96..70fa86af 100644
--- a/context-store/analyticsContext.js
+++ b/context-store/analyticsContext.js
@@ -10,27 +10,35 @@ import { useFlashnet } from './flashnetContext';
import { getMonthlyTransactions } from '../app/functions/spark/transactions';
import { getSatsFromTx } from '../app/functions/getSatsFromTx';
import { buildCumulativeData } from '../app/components/admin/homeComponents/analytics/cumulativeLineChartHelpers';
+import { useAppStatus } from './appStatus';
const AnalyticsContext = createContext(null);
export function AnalyticsProvider({ children }) {
const { sparkInformation } = useSparkWallet();
+ const { didGetToHomepage } = useAppStatus();
const { poolInfoRef } = useFlashnet();
const [inTxs, setInTxs] = useState([]);
const [outTxs, setOutTxs] = useState([]);
- const [isLoading, setIsLoading] = useState(true);
+ const [isLoading, setIsLoading] = useState(false);
useEffect(() => {
async function load() {
- if (!sparkInformation.identityPubKey) return;
+ if (!sparkInformation.identityPubKey || !didGetToHomepage) return;
setIsLoading(true);
try {
+ const startTime = Date.now();
const [incoming, outgoing] = await Promise.all([
getMonthlyTransactions(sparkInformation.identityPubKey, 'INCOMING'),
getMonthlyTransactions(sparkInformation.identityPubKey, 'OUTGOING'),
]);
setInTxs(incoming);
setOutTxs(outgoing);
+ const elapsed = Date.now() - startTime;
+ const minDuration = 500;
+ await new Promise(resolve =>
+ setTimeout(resolve, Math.max(60, minDuration - elapsed)),
+ );
} catch (e) {
console.error('AnalyticsContext load error', e);
} finally {
@@ -38,11 +46,15 @@ export function AnalyticsProvider({ children }) {
}
}
load();
- }, [sparkInformation.identityPubKey, sparkInformation.transactions]);
+ }, [
+ sparkInformation.identityPubKey,
+ sparkInformation.transactions,
+ didGetToHomepage,
+ ]);
- const incomeTotal = useMemo(
- () =>
- inTxs.reduce((sum, tx) => {
+ const incomeTotal = useMemo(() => {
+ try {
+ return inTxs.reduce((sum, tx) => {
try {
return (
sum + getSatsFromTx(tx, poolInfoRef.currentPriceAInB, 'INCOMING')
@@ -50,13 +62,16 @@ export function AnalyticsProvider({ children }) {
} catch {
return sum;
}
- }, 0),
- [inTxs],
- );
+ }, 0);
+ } catch (err) {
+ console.log('eror calcuating total', err);
+ return 0;
+ }
+ }, [inTxs]);
- const spentTotal = useMemo(
- () =>
- outTxs.reduce((sum, tx) => {
+ const spentTotal = useMemo(() => {
+ try {
+ return outTxs.reduce((sum, tx) => {
try {
return (
sum + getSatsFromTx(tx, poolInfoRef.currentPriceAInB, 'OUTGOING')
@@ -64,31 +79,40 @@ export function AnalyticsProvider({ children }) {
} catch {
return sum;
}
- }, 0),
- [outTxs],
- );
+ }, 0);
+ } catch (err) {
+ console.log('error calcuating spent', err);
+ return 0;
+ }
+ }, [outTxs]);
- const cumulativeIncomeData = useMemo(
- () =>
- buildCumulativeData(
+ const cumulativeIncomeData = useMemo(() => {
+ try {
+ return buildCumulativeData(
inTxs,
undefined,
poolInfoRef.currentPriceAInB,
'INCOMING',
- ),
- [inTxs],
- );
+ );
+ } catch (err) {
+ console.log('error creating cumulative income data', err);
+ return [];
+ }
+ }, [inTxs]);
- const cumulativeSpentData = useMemo(
- () =>
- buildCumulativeData(
+ const cumulativeSpentData = useMemo(() => {
+ try {
+ return buildCumulativeData(
outTxs,
undefined,
poolInfoRef.currentPriceAInB,
'OUTGOING',
- ),
- [outTxs],
- );
+ );
+ } catch (err) {
+ console.log('error creating cumulative spend data', err);
+ return [];
+ }
+ }, [outTxs]);
return (
RNFB build script started\"\necho \"info: 1) Locating ${_JSON_FILE_NAME} file:\"\n\nif [[ -z ${_CURRENT_SEARCH_DIR} ]]; then\n _CURRENT_SEARCH_DIR=$(pwd)\nfi;\n\nwhile true; do\n _CURRENT_SEARCH_DIR=$(dirname \"$_CURRENT_SEARCH_DIR\")\n if [[ \"$_CURRENT_SEARCH_DIR\" == \"/\" ]] || [[ ${_CURRENT_LOOKUPS} -gt ${_MAX_LOOKUPS} ]]; then break; fi;\n echo \"info: ($_CURRENT_LOOKUPS of $_MAX_LOOKUPS) Searching in '$_CURRENT_SEARCH_DIR' for a ${_JSON_FILE_NAME} file.\"\n _SEARCH_RESULT=$(find \"$_CURRENT_SEARCH_DIR\" -maxdepth 2 -name ${_JSON_FILE_NAME} -print | /usr/bin/head -n 1)\n if [[ ${_SEARCH_RESULT} ]]; then\n echo \"info: ${_JSON_FILE_NAME} found at $_SEARCH_RESULT\"\n break;\n fi;\n _CURRENT_LOOKUPS=$((_CURRENT_LOOKUPS+1))\ndone\n\nif [[ ${_SEARCH_RESULT} ]]; then\n _JSON_OUTPUT_RAW=$(cat \"${_SEARCH_RESULT}\")\n if ! _RN_ROOT_EXISTS=$(ruby -Ku -e \"require 'json'; output=JSON.parse('$_JSON_OUTPUT_RAW'); puts output[$_JSON_ROOT]\"); then\n echo \"error: Failed to parse firebase.json, check for syntax errors.\"\n exit 1\n fi\n\n if [[ ${_RN_ROOT_EXISTS} ]]; then\n if ! python3 --version >/dev/null 2>&1; then echo \"python3 not found, firebase.json file processing error.\" && exit 1; fi\n _JSON_OUTPUT_BASE64=$(python3 -c 'import json,sys,base64;print(base64.b64encode(bytes(json.dumps(json.loads(open('\"'${_SEARCH_RESULT}'\"', '\"'rb'\"').read())['${_JSON_ROOT}']), '\"'utf-8'\"')).decode())' || echo \"e30=\")\n fi\n\n _PLIST_ENTRY_KEYS+=(\"firebase_json_raw\")\n _PLIST_ENTRY_TYPES+=(\"string\")\n _PLIST_ENTRY_VALUES+=(\"$_JSON_OUTPUT_BASE64\")\n\n # config.app_data_collection_default_enabled\n _APP_DATA_COLLECTION_ENABLED=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"app_data_collection_default_enabled\")\n if [[ $_APP_DATA_COLLECTION_ENABLED ]]; then\n _PLIST_ENTRY_KEYS+=(\"FirebaseDataCollectionDefaultEnabled\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_APP_DATA_COLLECTION_ENABLED\")\")\n fi\n\n # config.analytics_auto_collection_enabled\n _ANALYTICS_AUTO_COLLECTION=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"analytics_auto_collection_enabled\")\n if [[ $_ANALYTICS_AUTO_COLLECTION ]]; then\n _PLIST_ENTRY_KEYS+=(\"FIREBASE_ANALYTICS_COLLECTION_ENABLED\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_ANALYTICS_AUTO_COLLECTION\")\")\n fi\n\n # config.analytics_collection_deactivated\n _ANALYTICS_DEACTIVATED=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"analytics_collection_deactivated\")\n if [[ $_ANALYTICS_DEACTIVATED ]]; then\n _PLIST_ENTRY_KEYS+=(\"FIREBASE_ANALYTICS_COLLECTION_DEACTIVATED\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_ANALYTICS_DEACTIVATED\")\")\n fi\n\n # config.analytics_idfv_collection_enabled\n _ANALYTICS_IDFV_COLLECTION=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"analytics_idfv_collection_enabled\")\n if [[ $_ANALYTICS_IDFV_COLLECTION ]]; then\n _PLIST_ENTRY_KEYS+=(\"GOOGLE_ANALYTICS_IDFV_COLLECTION_ENABLED\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_ANALYTICS_IDFV_COLLECTION\")\")\n fi\n\n # config.analytics_default_allow_analytics_storage\n _ANALYTICS_STORAGE=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"analytics_default_allow_analytics_storage\")\n if [[ $_ANALYTICS_STORAGE ]]; then\n _PLIST_ENTRY_KEYS+=(\"GOOGLE_ANALYTICS_DEFAULT_ALLOW_ANALYTICS_STORAGE\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_ANALYTICS_STORAGE\")\")\n fi\n\n # config.analytics_default_allow_ad_storage\n _ANALYTICS_AD_STORAGE=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"analytics_default_allow_ad_storage\")\n if [[ $_ANALYTICS_AD_STORAGE ]]; then\n _PLIST_ENTRY_KEYS+=(\"GOOGLE_ANALYTICS_DEFAULT_ALLOW_AD_STORAGE\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_ANALYTICS_AD_STORAGE\")\")\n fi\n\n # config.analytics_default_allow_ad_user_data\n _ANALYTICS_AD_USER_DATA=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"analytics_default_allow_ad_user_data\")\n if [[ $_ANALYTICS_AD_USER_DATA ]]; then\n _PLIST_ENTRY_KEYS+=(\"GOOGLE_ANALYTICS_DEFAULT_ALLOW_AD_USER_DATA\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_ANALYTICS_AD_USER_DATA\")\")\n fi\n\n # config.analytics_default_allow_ad_personalization_signals\n _ANALYTICS_PERSONALIZATION=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"analytics_default_allow_ad_personalization_signals\")\n if [[ $_ANALYTICS_PERSONALIZATION ]]; then\n _PLIST_ENTRY_KEYS+=(\"GOOGLE_ANALYTICS_DEFAULT_ALLOW_AD_PERSONALIZATION_SIGNALS\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_ANALYTICS_PERSONALIZATION\")\")\n fi\n\n # config.analytics_registration_with_ad_network_enabled\n _ANALYTICS_REGISTRATION_WITH_AD_NETWORK=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"google_analytics_registration_with_ad_network_enabled\")\n if [[ $_ANALYTICS_REGISTRATION_WITH_AD_NETWORK ]]; then\n _PLIST_ENTRY_KEYS+=(\"GOOGLE_ANALYTICS_REGISTRATION_WITH_AD_NETWORK_ENABLED\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_ANALYTICS_REGISTRATION_WITH_AD_NETWORK\")\")\n fi\n\n # config.google_analytics_automatic_screen_reporting_enabled\n _ANALYTICS_AUTO_SCREEN_REPORTING=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"google_analytics_automatic_screen_reporting_enabled\")\n if [[ $_ANALYTICS_AUTO_SCREEN_REPORTING ]]; then\n _PLIST_ENTRY_KEYS+=(\"FirebaseAutomaticScreenReportingEnabled\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_ANALYTICS_AUTO_SCREEN_REPORTING\")\")\n fi\n\n # config.perf_auto_collection_enabled\n _PERF_AUTO_COLLECTION=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"perf_auto_collection_enabled\")\n if [[ $_PERF_AUTO_COLLECTION ]]; then\n _PLIST_ENTRY_KEYS+=(\"firebase_performance_collection_enabled\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_PERF_AUTO_COLLECTION\")\")\n fi\n\n # config.perf_collection_deactivated\n _PERF_DEACTIVATED=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"perf_collection_deactivated\")\n if [[ $_PERF_DEACTIVATED ]]; then\n _PLIST_ENTRY_KEYS+=(\"firebase_performance_collection_deactivated\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_PERF_DEACTIVATED\")\")\n fi\n\n # config.messaging_auto_init_enabled\n _MESSAGING_AUTO_INIT=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"messaging_auto_init_enabled\")\n if [[ $_MESSAGING_AUTO_INIT ]]; then\n _PLIST_ENTRY_KEYS+=(\"FirebaseMessagingAutoInitEnabled\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_MESSAGING_AUTO_INIT\")\")\n fi\n\n # config.in_app_messaging_auto_colllection_enabled\n _FIAM_AUTO_INIT=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"in_app_messaging_auto_collection_enabled\")\n if [[ $_FIAM_AUTO_INIT ]]; then\n _PLIST_ENTRY_KEYS+=(\"FirebaseInAppMessagingAutomaticDataCollectionEnabled\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_FIAM_AUTO_INIT\")\")\n fi\n\n # config.app_check_token_auto_refresh\n _APP_CHECK_TOKEN_AUTO_REFRESH=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"app_check_token_auto_refresh\")\n if [[ $_APP_CHECK_TOKEN_AUTO_REFRESH ]]; then\n _PLIST_ENTRY_KEYS+=(\"FirebaseAppCheckTokenAutoRefreshEnabled\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_APP_CHECK_TOKEN_AUTO_REFRESH\")\")\n fi\n\n # config.crashlytics_disable_auto_disabler - undocumented for now - mainly for debugging, document if becomes useful\n _CRASHLYTICS_AUTO_DISABLE_ENABLED=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"crashlytics_disable_auto_disabler\")\n if [[ $_CRASHLYTICS_AUTO_DISABLE_ENABLED == \"true\" ]]; then\n echo \"Disabled Crashlytics auto disabler.\" # do nothing\n else\n _PLIST_ENTRY_KEYS+=(\"FirebaseCrashlyticsCollectionEnabled\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"NO\")\n fi\nelse\n _PLIST_ENTRY_KEYS+=(\"firebase_json_raw\")\n _PLIST_ENTRY_TYPES+=(\"string\")\n _PLIST_ENTRY_VALUES+=(\"$_JSON_OUTPUT_BASE64\")\n echo \"warning: A firebase.json file was not found, whilst this file is optional it is recommended to include it to configure firebase services in React Native Firebase.\"\nfi;\n\necho \"info: 2) Injecting Info.plist entries: \"\n\n# Log out the keys we're adding\nfor i in \"${!_PLIST_ENTRY_KEYS[@]}\"; do\n echo \" -> $i) ${_PLIST_ENTRY_KEYS[$i]}\" \"${_PLIST_ENTRY_TYPES[$i]}\" \"${_PLIST_ENTRY_VALUES[$i]}\"\ndone\n\nfor plist in \"${_TARGET_PLIST}\" \"${_DSYM_PLIST}\" ; do\n if [[ -f \"${plist}\" ]]; then\n\n # paths with spaces break the call to setPlistValue. temporarily modify\n # the shell internal field separator variable (IFS), which normally\n # includes spaces, to consist only of line breaks\n oldifs=$IFS\n IFS=\"\n\"\n\n for i in \"${!_PLIST_ENTRY_KEYS[@]}\"; do\n setPlistValue \"${_PLIST_ENTRY_KEYS[$i]}\" \"${_PLIST_ENTRY_TYPES[$i]}\" \"${_PLIST_ENTRY_VALUES[$i]}\" \"${plist}\"\n done\n\n # restore the original internal field separator value\n IFS=$oldifs\n else\n echo \"warning: A Info.plist build output file was not found (${plist})\"\n fi\ndone\n\necho \"info: <- RNFB build script finished\"\n";
+ shellScript = "#!/usr/bin/env bash\n#\n# Copyright (c) 2016-present Invertase Limited & Contributors\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this library except in compliance with the License.\n# You may obtain a copy of the License at\n#\n# http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n\n##########################################################################\n##########################################################################\n#\n# NOTE THAT IF YOU CHANGE THIS FILE YOU MUST RUN pod install AFTERWARDS\n#\n# This file is installed as an Xcode build script in the project file\n# by cocoapods, and you will not see your changes until you pod install\n#\n##########################################################################\n##########################################################################\n\nset -e\n\n_MAX_LOOKUPS=2;\n_SEARCH_RESULT=''\n_RN_ROOT_EXISTS=''\n_CURRENT_LOOKUPS=1\n_JSON_ROOT=\"'react-native'\"\n_JSON_FILE_NAME='firebase.json'\n_JSON_OUTPUT_BASE64='e30=' # { }\n_CURRENT_SEARCH_DIR=${PROJECT_DIR}\n_PLIST_BUDDY=/usr/libexec/PlistBuddy\n_TARGET_PLIST=\"${BUILT_PRODUCTS_DIR}/${INFOPLIST_PATH}\"\n_DSYM_PLIST=\"${DWARF_DSYM_FOLDER_PATH}/${DWARF_DSYM_FILE_NAME}/Contents/Info.plist\"\n\n# plist arrays\n_PLIST_ENTRY_KEYS=()\n_PLIST_ENTRY_TYPES=()\n_PLIST_ENTRY_VALUES=()\n\nfunction setPlistValue {\n echo \"note: setting plist entry '$1' of type '$2' in file '$4'\"\n ${_PLIST_BUDDY} -c \"Add :$1 $2 '$3'\" $4 || echo \"note: '$1' already exists\"\n}\n\nfunction getFirebaseJsonKeyValue () {\n if [[ ${_RN_ROOT_EXISTS} ]]; then\n ruby -Ku -e \"require 'rubygems';require 'json'; output=JSON.parse('$1'); puts output[$_JSON_ROOT]['$2']\"\n else\n echo \"\"\n fi;\n}\n\nfunction jsonBoolToYesNo () {\n if [[ $1 == \"false\" ]]; then\n echo \"NO\"\n elif [[ $1 == \"true\" ]]; then\n echo \"YES\"\n else echo \"NO\"\n fi\n}\n\necho \"note: -> RNFB build script started\"\necho \"note: 1) Locating ${_JSON_FILE_NAME} file:\"\n\nif [[ -z ${_CURRENT_SEARCH_DIR} ]]; then\n _CURRENT_SEARCH_DIR=$(pwd)\nfi;\n\nwhile true; do\n _CURRENT_SEARCH_DIR=$(dirname \"$_CURRENT_SEARCH_DIR\")\n if [[ \"$_CURRENT_SEARCH_DIR\" == \"/\" ]] || [[ ${_CURRENT_LOOKUPS} -gt ${_MAX_LOOKUPS} ]]; then break; fi;\n echo \"note: ($_CURRENT_LOOKUPS of $_MAX_LOOKUPS) Searching in '$_CURRENT_SEARCH_DIR' for a ${_JSON_FILE_NAME} file.\"\n _SEARCH_RESULT=$(find \"$_CURRENT_SEARCH_DIR\" -maxdepth 2 -name ${_JSON_FILE_NAME} -print | /usr/bin/head -n 1)\n if [[ ${_SEARCH_RESULT} ]]; then\n echo \"note: ${_JSON_FILE_NAME} found at $_SEARCH_RESULT\"\n break;\n fi;\n _CURRENT_LOOKUPS=$((_CURRENT_LOOKUPS+1))\ndone\n\nif [[ ${_SEARCH_RESULT} ]]; then\n _JSON_OUTPUT_RAW=$(cat \"${_SEARCH_RESULT}\")\n if ! _RN_ROOT_EXISTS=$(ruby -Ku -e \"require 'json'; output=JSON.parse('$_JSON_OUTPUT_RAW'); puts output[$_JSON_ROOT]\"); then\n echo \"error: Failed to parse firebase.json, check for syntax errors.\"\n exit 1\n fi\n\n if [[ ${_RN_ROOT_EXISTS} ]]; then\n if ! python3 --version >/dev/null 2>&1; then echo \"error: python3 not found, firebase.json file processing error.\" && exit 1; fi\n _JSON_OUTPUT_BASE64=$(python3 -c 'import json,sys,base64;print(base64.b64encode(bytes(json.dumps(json.loads(open('\"'${_SEARCH_RESULT}'\"', '\"'rb'\"').read())['${_JSON_ROOT}']), '\"'utf-8'\"')).decode())' || echo \"e30=\")\n fi\n\n _PLIST_ENTRY_KEYS+=(\"firebase_json_raw\")\n _PLIST_ENTRY_TYPES+=(\"string\")\n _PLIST_ENTRY_VALUES+=(\"$_JSON_OUTPUT_BASE64\")\n\n # config.app_data_collection_default_enabled\n _APP_DATA_COLLECTION_ENABLED=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"app_data_collection_default_enabled\")\n if [[ $_APP_DATA_COLLECTION_ENABLED ]]; then\n _PLIST_ENTRY_KEYS+=(\"FirebaseDataCollectionDefaultEnabled\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_APP_DATA_COLLECTION_ENABLED\")\")\n fi\n\n # config.analytics_auto_collection_enabled\n _ANALYTICS_AUTO_COLLECTION=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"analytics_auto_collection_enabled\")\n if [[ $_ANALYTICS_AUTO_COLLECTION ]]; then\n _PLIST_ENTRY_KEYS+=(\"FIREBASE_ANALYTICS_COLLECTION_ENABLED\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_ANALYTICS_AUTO_COLLECTION\")\")\n fi\n\n # config.analytics_collection_deactivated\n _ANALYTICS_DEACTIVATED=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"analytics_collection_deactivated\")\n if [[ $_ANALYTICS_DEACTIVATED ]]; then\n _PLIST_ENTRY_KEYS+=(\"FIREBASE_ANALYTICS_COLLECTION_DEACTIVATED\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_ANALYTICS_DEACTIVATED\")\")\n fi\n\n # config.analytics_idfv_collection_enabled\n _ANALYTICS_IDFV_COLLECTION=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"analytics_idfv_collection_enabled\")\n if [[ $_ANALYTICS_IDFV_COLLECTION ]]; then\n _PLIST_ENTRY_KEYS+=(\"GOOGLE_ANALYTICS_IDFV_COLLECTION_ENABLED\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_ANALYTICS_IDFV_COLLECTION\")\")\n fi\n\n # config.analytics_default_allow_analytics_storage\n _ANALYTICS_STORAGE=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"analytics_default_allow_analytics_storage\")\n if [[ $_ANALYTICS_STORAGE ]]; then\n _PLIST_ENTRY_KEYS+=(\"GOOGLE_ANALYTICS_DEFAULT_ALLOW_ANALYTICS_STORAGE\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_ANALYTICS_STORAGE\")\")\n fi\n\n # config.analytics_default_allow_ad_storage\n _ANALYTICS_AD_STORAGE=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"analytics_default_allow_ad_storage\")\n if [[ $_ANALYTICS_AD_STORAGE ]]; then\n _PLIST_ENTRY_KEYS+=(\"GOOGLE_ANALYTICS_DEFAULT_ALLOW_AD_STORAGE\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_ANALYTICS_AD_STORAGE\")\")\n fi\n\n # config.analytics_default_allow_ad_user_data\n _ANALYTICS_AD_USER_DATA=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"analytics_default_allow_ad_user_data\")\n if [[ $_ANALYTICS_AD_USER_DATA ]]; then\n _PLIST_ENTRY_KEYS+=(\"GOOGLE_ANALYTICS_DEFAULT_ALLOW_AD_USER_DATA\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_ANALYTICS_AD_USER_DATA\")\")\n fi\n\n # config.analytics_default_allow_ad_personalization_signals\n _ANALYTICS_PERSONALIZATION=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"analytics_default_allow_ad_personalization_signals\")\n if [[ $_ANALYTICS_PERSONALIZATION ]]; then\n _PLIST_ENTRY_KEYS+=(\"GOOGLE_ANALYTICS_DEFAULT_ALLOW_AD_PERSONALIZATION_SIGNALS\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_ANALYTICS_PERSONALIZATION\")\")\n fi\n\n # config.analytics_registration_with_ad_network_enabled\n _ANALYTICS_REGISTRATION_WITH_AD_NETWORK=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"google_analytics_registration_with_ad_network_enabled\")\n if [[ $_ANALYTICS_REGISTRATION_WITH_AD_NETWORK ]]; then\n _PLIST_ENTRY_KEYS+=(\"GOOGLE_ANALYTICS_REGISTRATION_WITH_AD_NETWORK_ENABLED\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_ANALYTICS_REGISTRATION_WITH_AD_NETWORK\")\")\n fi\n\n # config.google_analytics_automatic_screen_reporting_enabled\n _ANALYTICS_AUTO_SCREEN_REPORTING=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"google_analytics_automatic_screen_reporting_enabled\")\n if [[ $_ANALYTICS_AUTO_SCREEN_REPORTING ]]; then\n _PLIST_ENTRY_KEYS+=(\"FirebaseAutomaticScreenReportingEnabled\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_ANALYTICS_AUTO_SCREEN_REPORTING\")\")\n fi\n\n # config.perf_auto_collection_enabled\n _PERF_AUTO_COLLECTION=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"perf_auto_collection_enabled\")\n if [[ $_PERF_AUTO_COLLECTION ]]; then\n _PLIST_ENTRY_KEYS+=(\"firebase_performance_collection_enabled\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_PERF_AUTO_COLLECTION\")\")\n fi\n\n # config.perf_collection_deactivated\n _PERF_DEACTIVATED=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"perf_collection_deactivated\")\n if [[ $_PERF_DEACTIVATED ]]; then\n _PLIST_ENTRY_KEYS+=(\"firebase_performance_collection_deactivated\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_PERF_DEACTIVATED\")\")\n fi\n\n # config.messaging_auto_init_enabled\n _MESSAGING_AUTO_INIT=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"messaging_auto_init_enabled\")\n if [[ $_MESSAGING_AUTO_INIT ]]; then\n _PLIST_ENTRY_KEYS+=(\"FirebaseMessagingAutoInitEnabled\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_MESSAGING_AUTO_INIT\")\")\n fi\n\n # config.in_app_messaging_auto_colllection_enabled\n _FIAM_AUTO_INIT=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"in_app_messaging_auto_collection_enabled\")\n if [[ $_FIAM_AUTO_INIT ]]; then\n _PLIST_ENTRY_KEYS+=(\"FirebaseInAppMessagingAutomaticDataCollectionEnabled\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_FIAM_AUTO_INIT\")\")\n fi\n\n # config.app_check_token_auto_refresh\n _APP_CHECK_TOKEN_AUTO_REFRESH=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"app_check_token_auto_refresh\")\n if [[ $_APP_CHECK_TOKEN_AUTO_REFRESH ]]; then\n _PLIST_ENTRY_KEYS+=(\"FirebaseAppCheckTokenAutoRefreshEnabled\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_APP_CHECK_TOKEN_AUTO_REFRESH\")\")\n fi\n\n # config.crashlytics_disable_auto_disabler - undocumented for now - mainly for debugging, document if becomes useful\n _CRASHLYTICS_AUTO_DISABLE_ENABLED=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"crashlytics_disable_auto_disabler\")\n if [[ $_CRASHLYTICS_AUTO_DISABLE_ENABLED == \"true\" ]]; then\n echo \"Disabled Crashlytics auto disabler.\" # do nothing\n else\n _PLIST_ENTRY_KEYS+=(\"FirebaseCrashlyticsCollectionEnabled\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"NO\")\n fi\nelse\n _PLIST_ENTRY_KEYS+=(\"firebase_json_raw\")\n _PLIST_ENTRY_TYPES+=(\"string\")\n _PLIST_ENTRY_VALUES+=(\"$_JSON_OUTPUT_BASE64\")\n echo \"warning: A firebase.json file was not found, whilst this file is optional it is recommended to include it to configure firebase services in React Native Firebase.\"\nfi;\n\necho \"note: 2) Injecting Info.plist entries: \"\n\n# Log out the keys we're adding\nfor i in \"${!_PLIST_ENTRY_KEYS[@]}\"; do\n echo \" -> $i) ${_PLIST_ENTRY_KEYS[$i]}\" \"${_PLIST_ENTRY_TYPES[$i]}\" \"${_PLIST_ENTRY_VALUES[$i]}\"\ndone\n\nfor plist in \"${_TARGET_PLIST}\" \"${_DSYM_PLIST}\" ; do\n if [[ -f \"${plist}\" ]]; then\n\n # paths with spaces break the call to setPlistValue. temporarily modify\n # the shell internal field separator variable (IFS), which normally\n # includes spaces, to consist only of line breaks\n oldifs=$IFS\n IFS=\"\n\"\n\n for i in \"${!_PLIST_ENTRY_KEYS[@]}\"; do\n setPlistValue \"${_PLIST_ENTRY_KEYS[$i]}\" \"${_PLIST_ENTRY_TYPES[$i]}\" \"${_PLIST_ENTRY_VALUES[$i]}\" \"${plist}\"\n done\n\n # restore the original internal field separator value\n IFS=$oldifs\n else\n echo \"warning: A Info.plist build output file was not found (${plist})\"\n fi\ndone\n\necho \"note: <- RNFB build script finished\"\n";
};
C38B50BA6285516D6DCD4F65 /* [CP] Check Pods Manifest.lock */ = {
isa = PBXShellScriptBuildPhase;
diff --git a/ios/BlitzWallet.xcodeproj/xcshareddata/xcschemes/BlitzWallet.xcscheme b/ios/BlitzWallet.xcodeproj/xcshareddata/xcschemes/BlitzWallet.xcscheme
index d2881340..f05a2ad4 100644
--- a/ios/BlitzWallet.xcodeproj/xcshareddata/xcschemes/BlitzWallet.xcscheme
+++ b/ios/BlitzWallet.xcodeproj/xcshareddata/xcschemes/BlitzWallet.xcscheme
@@ -1,6 +1,6 @@
12.3.0)
- - Firebase/CoreOnly (12.3.0):
- - FirebaseCore (~> 12.3.0)
- - Firebase/Crashlytics (12.3.0):
+ - FirebaseAuth (~> 12.10.0)
+ - Firebase/CoreOnly (12.10.0):
+ - FirebaseCore (~> 12.10.0)
+ - Firebase/Crashlytics (12.10.0):
- Firebase/CoreOnly
- - FirebaseCrashlytics (~> 12.3.0)
- - Firebase/Firestore (12.3.0):
+ - FirebaseCrashlytics (~> 12.10.0)
+ - Firebase/Firestore (12.10.0):
- Firebase/CoreOnly
- - FirebaseFirestore (~> 12.3.0)
- - Firebase/Functions (12.3.0):
+ - FirebaseFirestore (~> 12.10.0)
+ - Firebase/Functions (12.10.0):
- Firebase/CoreOnly
- - FirebaseFunctions (~> 12.3.0)
- - Firebase/Messaging (12.3.0):
+ - FirebaseFunctions (~> 12.10.0)
+ - Firebase/Messaging (12.10.0):
- Firebase/CoreOnly
- - FirebaseMessaging (~> 12.3.0)
- - Firebase/Storage (12.3.0):
+ - FirebaseMessaging (~> 12.10.0)
+ - Firebase/Storage (12.10.0):
- Firebase/CoreOnly
- - FirebaseStorage (~> 12.3.0)
- - FirebaseAppCheckInterop (12.3.0)
- - FirebaseAuth (12.3.0):
- - FirebaseAppCheckInterop (~> 12.3.0)
- - FirebaseAuthInterop (~> 12.3.0)
- - FirebaseCore (~> 12.3.0)
- - FirebaseCoreExtension (~> 12.3.0)
+ - FirebaseStorage (~> 12.10.0)
+ - FirebaseAppCheckInterop (12.10.0)
+ - FirebaseAuth (12.10.0):
+ - FirebaseAppCheckInterop (~> 12.10.0)
+ - FirebaseAuthInterop (~> 12.10.0)
+ - FirebaseCore (~> 12.10.0)
+ - FirebaseCoreExtension (~> 12.10.0)
- GoogleUtilities/AppDelegateSwizzler (~> 8.1)
- GoogleUtilities/Environment (~> 8.1)
- GTMSessionFetcher/Core (< 6.0, >= 3.4)
- RecaptchaInterop (~> 101.0)
- - FirebaseAuthInterop (12.3.0)
- - FirebaseCore (12.3.0):
- - FirebaseCoreInternal (~> 12.3.0)
+ - FirebaseAuthInterop (12.10.0)
+ - FirebaseCore (12.10.0):
+ - FirebaseCoreInternal (~> 12.10.0)
- GoogleUtilities/Environment (~> 8.1)
- GoogleUtilities/Logger (~> 8.1)
- - FirebaseCoreExtension (12.3.0):
- - FirebaseCore (~> 12.3.0)
- - FirebaseCoreInternal (12.3.0):
+ - FirebaseCoreExtension (12.10.0):
+ - FirebaseCore (~> 12.10.0)
+ - FirebaseCoreInternal (12.10.0):
- "GoogleUtilities/NSData+zlib (~> 8.1)"
- - FirebaseCrashlytics (12.3.0):
- - FirebaseCore (~> 12.3.0)
- - FirebaseInstallations (~> 12.3.0)
- - FirebaseRemoteConfigInterop (~> 12.3.0)
- - FirebaseSessions (~> 12.3.0)
+ - FirebaseCrashlytics (12.10.0):
+ - FirebaseCore (~> 12.10.0)
+ - FirebaseInstallations (~> 12.10.0)
+ - FirebaseRemoteConfigInterop (~> 12.10.0)
+ - FirebaseSessions (~> 12.10.0)
- GoogleDataTransport (~> 10.1)
- GoogleUtilities/Environment (~> 8.1)
- nanopb (~> 3.30910.0)
- PromisesObjC (~> 2.4)
- - FirebaseFirestore (12.3.0):
- - FirebaseCore (~> 12.3.0)
- - FirebaseCoreExtension (~> 12.3.0)
- - FirebaseFirestoreInternal (~> 12.3.0)
- - FirebaseSharedSwift (~> 12.3.0)
- - FirebaseFirestoreInternal (12.3.0):
+ - FirebaseFirestore (12.10.0):
+ - FirebaseCore (~> 12.10.0)
+ - FirebaseCoreExtension (~> 12.10.0)
+ - FirebaseFirestoreInternal (~> 12.10.0)
+ - FirebaseSharedSwift (~> 12.10.0)
+ - FirebaseFirestoreInternal (12.10.0):
- abseil/algorithm (~> 1.20240722.0)
- abseil/base (~> 1.20240722.0)
- abseil/container/flat_hash_map (~> 1.20240722.0)
@@ -1383,51 +1383,51 @@ PODS:
- abseil/strings/strings (~> 1.20240722.0)
- abseil/time (~> 1.20240722.0)
- abseil/types (~> 1.20240722.0)
- - FirebaseAppCheckInterop (~> 12.3.0)
- - FirebaseCore (~> 12.3.0)
+ - FirebaseAppCheckInterop (~> 12.10.0)
+ - FirebaseCore (~> 12.10.0)
- "gRPC-C++ (~> 1.69.0)"
- gRPC-Core (~> 1.69.0)
- leveldb-library (~> 1.22)
- nanopb (~> 3.30910.0)
- - FirebaseFunctions (12.3.0):
- - FirebaseAppCheckInterop (~> 12.3.0)
- - FirebaseAuthInterop (~> 12.3.0)
- - FirebaseCore (~> 12.3.0)
- - FirebaseCoreExtension (~> 12.3.0)
- - FirebaseMessagingInterop (~> 12.3.0)
- - FirebaseSharedSwift (~> 12.3.0)
+ - FirebaseFunctions (12.10.0):
+ - FirebaseAppCheckInterop (~> 12.10.0)
+ - FirebaseAuthInterop (~> 12.10.0)
+ - FirebaseCore (~> 12.10.0)
+ - FirebaseCoreExtension (~> 12.10.0)
+ - FirebaseMessagingInterop (~> 12.10.0)
+ - FirebaseSharedSwift (~> 12.10.0)
- GTMSessionFetcher/Core (< 6.0, >= 3.4)
- - FirebaseInstallations (12.3.0):
- - FirebaseCore (~> 12.3.0)
+ - FirebaseInstallations (12.10.0):
+ - FirebaseCore (~> 12.10.0)
- GoogleUtilities/Environment (~> 8.1)
- GoogleUtilities/UserDefaults (~> 8.1)
- PromisesObjC (~> 2.4)
- - FirebaseMessaging (12.3.0):
- - FirebaseCore (~> 12.3.0)
- - FirebaseInstallations (~> 12.3.0)
+ - FirebaseMessaging (12.10.0):
+ - FirebaseCore (~> 12.10.0)
+ - FirebaseInstallations (~> 12.10.0)
- GoogleDataTransport (~> 10.1)
- GoogleUtilities/AppDelegateSwizzler (~> 8.1)
- GoogleUtilities/Environment (~> 8.1)
- GoogleUtilities/Reachability (~> 8.1)
- GoogleUtilities/UserDefaults (~> 8.1)
- nanopb (~> 3.30910.0)
- - FirebaseMessagingInterop (12.3.0)
- - FirebaseRemoteConfigInterop (12.3.0)
- - FirebaseSessions (12.3.0):
- - FirebaseCore (~> 12.3.0)
- - FirebaseCoreExtension (~> 12.3.0)
- - FirebaseInstallations (~> 12.3.0)
+ - FirebaseMessagingInterop (12.10.0)
+ - FirebaseRemoteConfigInterop (12.10.0)
+ - FirebaseSessions (12.10.0):
+ - FirebaseCore (~> 12.10.0)
+ - FirebaseCoreExtension (~> 12.10.0)
+ - FirebaseInstallations (~> 12.10.0)
- GoogleDataTransport (~> 10.1)
- GoogleUtilities/Environment (~> 8.1)
- GoogleUtilities/UserDefaults (~> 8.1)
- nanopb (~> 3.30910.0)
- PromisesSwift (~> 2.1)
- - FirebaseSharedSwift (12.3.0)
- - FirebaseStorage (12.3.0):
- - FirebaseAppCheckInterop (~> 12.3.0)
- - FirebaseAuthInterop (~> 12.3.0)
- - FirebaseCore (~> 12.3.0)
- - FirebaseCoreExtension (~> 12.3.0)
+ - FirebaseSharedSwift (12.10.0)
+ - FirebaseStorage (12.10.0):
+ - FirebaseAppCheckInterop (~> 12.10.0)
+ - FirebaseAuthInterop (~> 12.10.0)
+ - FirebaseCore (~> 12.10.0)
+ - FirebaseCoreExtension (~> 12.10.0)
- GoogleUtilities/Environment (~> 8.1)
- GTMSessionFetcher/Core (< 6.0, >= 3.4)
- fmt (12.1.0)
@@ -1552,9 +1552,9 @@ PODS:
- gRPC-Core/Interface (1.69.0)
- gRPC-Core/Privacy (1.69.0)
- GTMSessionFetcher/Core (5.2.0)
- - hermes-engine (0.81.5):
- - hermes-engine/Pre-built (= 0.81.5)
- - hermes-engine/Pre-built (0.81.5)
+ - hermes-engine (0.81.4):
+ - hermes-engine/Pre-built (= 0.81.4)
+ - hermes-engine/Pre-built (0.81.4)
- leveldb-library (1.22.6)
- libavif/core (1.0.0)
- libavif/libdav1d (1.0.0):
@@ -1637,39 +1637,10 @@ PODS:
- ReactCommon/turbomodule/core
- SocketRocket
- Yoga
+ - OpenSSL-Universal (3.6.0000)
- PromisesObjC (2.4.0)
- PromisesSwift (2.4.0):
- PromisesObjC (= 2.4.0)
- - QuickCrypto (1.0.16):
- - boost
- - DoubleConversion
- - fast_float
- - fmt
- - glog
- - hermes-engine
- - NitroModules
- - RCT-Folly
- - RCT-Folly/Fabric
- - RCTRequired
- - RCTTypeSafety
- - React-callinvoker
- - React-Core
- - React-debug
- - React-Fabric
- - React-featureflags
- - React-graphics
- - React-ImageManager
- - React-jsi
- - React-NativeModulesApple
- - React-RCTFabric
- - React-renderercss
- - React-rendererdebug
- - React-utils
- - ReactCodegen
- - ReactCommon/turbomodule/bridging
- - ReactCommon/turbomodule/core
- - SocketRocket
- - Yoga
- RCT-Folly (2024.11.18.00):
- boost
- DoubleConversion
@@ -1689,27 +1660,27 @@ PODS:
- fast_float (= 8.0.0)
- fmt (= 12.1.0)
- glog
- - RCTDeprecation (0.81.5)
- - RCTRequired (0.81.5)
- - RCTTypeSafety (0.81.5):
- - FBLazyVector (= 0.81.5)
- - RCTRequired (= 0.81.5)
- - React-Core (= 0.81.5)
- - React (0.81.5):
- - React-Core (= 0.81.5)
- - React-Core/DevSupport (= 0.81.5)
- - React-Core/RCTWebSocket (= 0.81.5)
- - React-RCTActionSheet (= 0.81.5)
- - React-RCTAnimation (= 0.81.5)
- - React-RCTBlob (= 0.81.5)
- - React-RCTImage (= 0.81.5)
- - React-RCTLinking (= 0.81.5)
- - React-RCTNetwork (= 0.81.5)
- - React-RCTSettings (= 0.81.5)
- - React-RCTText (= 0.81.5)
- - React-RCTVibration (= 0.81.5)
- - React-callinvoker (0.81.5)
- - React-Core (0.81.5):
+ - RCTDeprecation (0.81.4)
+ - RCTRequired (0.81.4)
+ - RCTTypeSafety (0.81.4):
+ - FBLazyVector (= 0.81.4)
+ - RCTRequired (= 0.81.4)
+ - React-Core (= 0.81.4)
+ - React (0.81.4):
+ - React-Core (= 0.81.4)
+ - React-Core/DevSupport (= 0.81.4)
+ - React-Core/RCTWebSocket (= 0.81.4)
+ - React-RCTActionSheet (= 0.81.4)
+ - React-RCTAnimation (= 0.81.4)
+ - React-RCTBlob (= 0.81.4)
+ - React-RCTImage (= 0.81.4)
+ - React-RCTLinking (= 0.81.4)
+ - React-RCTNetwork (= 0.81.4)
+ - React-RCTSettings (= 0.81.4)
+ - React-RCTText (= 0.81.4)
+ - React-RCTVibration (= 0.81.4)
+ - React-callinvoker (0.81.4)
+ - React-Core (0.81.4):
- boost
- DoubleConversion
- fast_float
@@ -1719,7 +1690,7 @@ PODS:
- RCT-Folly
- RCT-Folly/Fabric
- RCTDeprecation
- - React-Core/Default (= 0.81.5)
+ - React-Core/Default (= 0.81.4)
- React-cxxreact
- React-featureflags
- React-hermes
@@ -1734,7 +1705,7 @@ PODS:
- React-utils
- SocketRocket
- Yoga
- - React-Core/CoreModulesHeaders (0.81.5):
+ - React-Core/CoreModulesHeaders (0.81.4):
- boost
- DoubleConversion
- fast_float
@@ -1759,7 +1730,7 @@ PODS:
- React-utils
- SocketRocket
- Yoga
- - React-Core/Default (0.81.5):
+ - React-Core/Default (0.81.4):
- boost
- DoubleConversion
- fast_float
@@ -1783,7 +1754,7 @@ PODS:
- React-utils
- SocketRocket
- Yoga
- - React-Core/DevSupport (0.81.5):
+ - React-Core/DevSupport (0.81.4):
- boost
- DoubleConversion
- fast_float
@@ -1793,8 +1764,8 @@ PODS:
- RCT-Folly
- RCT-Folly/Fabric
- RCTDeprecation
- - React-Core/Default (= 0.81.5)
- - React-Core/RCTWebSocket (= 0.81.5)
+ - React-Core/Default (= 0.81.4)
+ - React-Core/RCTWebSocket (= 0.81.4)
- React-cxxreact
- React-featureflags
- React-hermes
@@ -1809,7 +1780,7 @@ PODS:
- React-utils
- SocketRocket
- Yoga
- - React-Core/RCTActionSheetHeaders (0.81.5):
+ - React-Core/RCTActionSheetHeaders (0.81.4):
- boost
- DoubleConversion
- fast_float
@@ -1834,7 +1805,7 @@ PODS:
- React-utils
- SocketRocket
- Yoga
- - React-Core/RCTAnimationHeaders (0.81.5):
+ - React-Core/RCTAnimationHeaders (0.81.4):
- boost
- DoubleConversion
- fast_float
@@ -1859,7 +1830,7 @@ PODS:
- React-utils
- SocketRocket
- Yoga
- - React-Core/RCTBlobHeaders (0.81.5):
+ - React-Core/RCTBlobHeaders (0.81.4):
- boost
- DoubleConversion
- fast_float
@@ -1884,7 +1855,7 @@ PODS:
- React-utils
- SocketRocket
- Yoga
- - React-Core/RCTImageHeaders (0.81.5):
+ - React-Core/RCTImageHeaders (0.81.4):
- boost
- DoubleConversion
- fast_float
@@ -1909,7 +1880,7 @@ PODS:
- React-utils
- SocketRocket
- Yoga
- - React-Core/RCTLinkingHeaders (0.81.5):
+ - React-Core/RCTLinkingHeaders (0.81.4):
- boost
- DoubleConversion
- fast_float
@@ -1934,7 +1905,7 @@ PODS:
- React-utils
- SocketRocket
- Yoga
- - React-Core/RCTNetworkHeaders (0.81.5):
+ - React-Core/RCTNetworkHeaders (0.81.4):
- boost
- DoubleConversion
- fast_float
@@ -1959,7 +1930,7 @@ PODS:
- React-utils
- SocketRocket
- Yoga
- - React-Core/RCTSettingsHeaders (0.81.5):
+ - React-Core/RCTSettingsHeaders (0.81.4):
- boost
- DoubleConversion
- fast_float
@@ -1984,7 +1955,7 @@ PODS:
- React-utils
- SocketRocket
- Yoga
- - React-Core/RCTTextHeaders (0.81.5):
+ - React-Core/RCTTextHeaders (0.81.4):
- boost
- DoubleConversion
- fast_float
@@ -2009,7 +1980,7 @@ PODS:
- React-utils
- SocketRocket
- Yoga
- - React-Core/RCTVibrationHeaders (0.81.5):
+ - React-Core/RCTVibrationHeaders (0.81.4):
- boost
- DoubleConversion
- fast_float
@@ -2034,7 +2005,7 @@ PODS:
- React-utils
- SocketRocket
- Yoga
- - React-Core/RCTWebSocket (0.81.5):
+ - React-Core/RCTWebSocket (0.81.4):
- boost
- DoubleConversion
- fast_float
@@ -2044,7 +2015,7 @@ PODS:
- RCT-Folly
- RCT-Folly/Fabric
- RCTDeprecation
- - React-Core/Default (= 0.81.5)
+ - React-Core/Default (= 0.81.4)
- React-cxxreact
- React-featureflags
- React-hermes
@@ -2059,7 +2030,7 @@ PODS:
- React-utils
- SocketRocket
- Yoga
- - React-CoreModules (0.81.5):
+ - React-CoreModules (0.81.4):
- boost
- DoubleConversion
- fast_float
@@ -2067,20 +2038,20 @@ PODS:
- glog
- RCT-Folly
- RCT-Folly/Fabric
- - RCTTypeSafety (= 0.81.5)
- - React-Core/CoreModulesHeaders (= 0.81.5)
- - React-jsi (= 0.81.5)
+ - RCTTypeSafety (= 0.81.4)
+ - React-Core/CoreModulesHeaders (= 0.81.4)
+ - React-jsi (= 0.81.4)
- React-jsinspector
- React-jsinspectorcdp
- React-jsinspectortracing
- React-NativeModulesApple
- React-RCTBlob
- React-RCTFBReactNativeSpec
- - React-RCTImage (= 0.81.5)
+ - React-RCTImage (= 0.81.4)
- React-runtimeexecutor
- ReactCommon
- SocketRocket
- - React-cxxreact (0.81.5):
+ - React-cxxreact (0.81.4):
- boost
- DoubleConversion
- fast_float
@@ -2089,19 +2060,19 @@ PODS:
- hermes-engine
- RCT-Folly
- RCT-Folly/Fabric
- - React-callinvoker (= 0.81.5)
- - React-debug (= 0.81.5)
- - React-jsi (= 0.81.5)
+ - React-callinvoker (= 0.81.4)
+ - React-debug (= 0.81.4)
+ - React-jsi (= 0.81.4)
- React-jsinspector
- React-jsinspectorcdp
- React-jsinspectortracing
- - React-logger (= 0.81.5)
- - React-perflogger (= 0.81.5)
+ - React-logger (= 0.81.4)
+ - React-perflogger (= 0.81.4)
- React-runtimeexecutor
- - React-timing (= 0.81.5)
+ - React-timing (= 0.81.4)
- SocketRocket
- - React-debug (0.81.5)
- - React-defaultsnativemodule (0.81.5):
+ - React-debug (0.81.4)
+ - React-defaultsnativemodule (0.81.4):
- boost
- DoubleConversion
- fast_float
@@ -2118,7 +2089,7 @@ PODS:
- React-microtasksnativemodule
- React-RCTFBReactNativeSpec
- SocketRocket
- - React-domnativemodule (0.81.5):
+ - React-domnativemodule (0.81.4):
- boost
- DoubleConversion
- fast_float
@@ -2138,7 +2109,7 @@ PODS:
- ReactCommon/turbomodule/core
- SocketRocket
- Yoga
- - React-Fabric (0.81.5):
+ - React-Fabric (0.81.4):
- boost
- DoubleConversion
- fast_float
@@ -2152,23 +2123,23 @@ PODS:
- React-Core
- React-cxxreact
- React-debug
- - React-Fabric/animations (= 0.81.5)
- - React-Fabric/attributedstring (= 0.81.5)
- - React-Fabric/bridging (= 0.81.5)
- - React-Fabric/componentregistry (= 0.81.5)
- - React-Fabric/componentregistrynative (= 0.81.5)
- - React-Fabric/components (= 0.81.5)
- - React-Fabric/consistency (= 0.81.5)
- - React-Fabric/core (= 0.81.5)
- - React-Fabric/dom (= 0.81.5)
- - React-Fabric/imagemanager (= 0.81.5)
- - React-Fabric/leakchecker (= 0.81.5)
- - React-Fabric/mounting (= 0.81.5)
- - React-Fabric/observers (= 0.81.5)
- - React-Fabric/scheduler (= 0.81.5)
- - React-Fabric/telemetry (= 0.81.5)
- - React-Fabric/templateprocessor (= 0.81.5)
- - React-Fabric/uimanager (= 0.81.5)
+ - React-Fabric/animations (= 0.81.4)
+ - React-Fabric/attributedstring (= 0.81.4)
+ - React-Fabric/bridging (= 0.81.4)
+ - React-Fabric/componentregistry (= 0.81.4)
+ - React-Fabric/componentregistrynative (= 0.81.4)
+ - React-Fabric/components (= 0.81.4)
+ - React-Fabric/consistency (= 0.81.4)
+ - React-Fabric/core (= 0.81.4)
+ - React-Fabric/dom (= 0.81.4)
+ - React-Fabric/imagemanager (= 0.81.4)
+ - React-Fabric/leakchecker (= 0.81.4)
+ - React-Fabric/mounting (= 0.81.4)
+ - React-Fabric/observers (= 0.81.4)
+ - React-Fabric/scheduler (= 0.81.4)
+ - React-Fabric/telemetry (= 0.81.4)
+ - React-Fabric/templateprocessor (= 0.81.4)
+ - React-Fabric/uimanager (= 0.81.4)
- React-featureflags
- React-graphics
- React-jsi
@@ -2180,7 +2151,7 @@ PODS:
- React-utils
- ReactCommon/turbomodule/core
- SocketRocket
- - React-Fabric/animations (0.81.5):
+ - React-Fabric/animations (0.81.4):
- boost
- DoubleConversion
- fast_float
@@ -2205,7 +2176,7 @@ PODS:
- React-utils
- ReactCommon/turbomodule/core
- SocketRocket
- - React-Fabric/attributedstring (0.81.5):
+ - React-Fabric/attributedstring (0.81.4):
- boost
- DoubleConversion
- fast_float
@@ -2230,7 +2201,7 @@ PODS:
- React-utils
- ReactCommon/turbomodule/core
- SocketRocket
- - React-Fabric/bridging (0.81.5):
+ - React-Fabric/bridging (0.81.4):
- boost
- DoubleConversion
- fast_float
@@ -2255,7 +2226,7 @@ PODS:
- React-utils
- ReactCommon/turbomodule/core
- SocketRocket
- - React-Fabric/componentregistry (0.81.5):
+ - React-Fabric/componentregistry (0.81.4):
- boost
- DoubleConversion
- fast_float
@@ -2280,7 +2251,7 @@ PODS:
- React-utils
- ReactCommon/turbomodule/core
- SocketRocket
- - React-Fabric/componentregistrynative (0.81.5):
+ - React-Fabric/componentregistrynative (0.81.4):
- boost
- DoubleConversion
- fast_float
@@ -2305,7 +2276,7 @@ PODS:
- React-utils
- ReactCommon/turbomodule/core
- SocketRocket
- - React-Fabric/components (0.81.5):
+ - React-Fabric/components (0.81.4):
- boost
- DoubleConversion
- fast_float
@@ -2319,10 +2290,10 @@ PODS:
- React-Core
- React-cxxreact
- React-debug
- - React-Fabric/components/legacyviewmanagerinterop (= 0.81.5)
- - React-Fabric/components/root (= 0.81.5)
- - React-Fabric/components/scrollview (= 0.81.5)
- - React-Fabric/components/view (= 0.81.5)
+ - React-Fabric/components/legacyviewmanagerinterop (= 0.81.4)
+ - React-Fabric/components/root (= 0.81.4)
+ - React-Fabric/components/scrollview (= 0.81.4)
+ - React-Fabric/components/view (= 0.81.4)
- React-featureflags
- React-graphics
- React-jsi
@@ -2334,7 +2305,7 @@ PODS:
- React-utils
- ReactCommon/turbomodule/core
- SocketRocket
- - React-Fabric/components/legacyviewmanagerinterop (0.81.5):
+ - React-Fabric/components/legacyviewmanagerinterop (0.81.4):
- boost
- DoubleConversion
- fast_float
@@ -2359,7 +2330,7 @@ PODS:
- React-utils
- ReactCommon/turbomodule/core
- SocketRocket
- - React-Fabric/components/root (0.81.5):
+ - React-Fabric/components/root (0.81.4):
- boost
- DoubleConversion
- fast_float
@@ -2384,7 +2355,7 @@ PODS:
- React-utils
- ReactCommon/turbomodule/core
- SocketRocket
- - React-Fabric/components/scrollview (0.81.5):
+ - React-Fabric/components/scrollview (0.81.4):
- boost
- DoubleConversion
- fast_float
@@ -2409,7 +2380,7 @@ PODS:
- React-utils
- ReactCommon/turbomodule/core
- SocketRocket
- - React-Fabric/components/view (0.81.5):
+ - React-Fabric/components/view (0.81.4):
- boost
- DoubleConversion
- fast_float
@@ -2436,7 +2407,7 @@ PODS:
- ReactCommon/turbomodule/core
- SocketRocket
- Yoga
- - React-Fabric/consistency (0.81.5):
+ - React-Fabric/consistency (0.81.4):
- boost
- DoubleConversion
- fast_float
@@ -2461,7 +2432,7 @@ PODS:
- React-utils
- ReactCommon/turbomodule/core
- SocketRocket
- - React-Fabric/core (0.81.5):
+ - React-Fabric/core (0.81.4):
- boost
- DoubleConversion
- fast_float
@@ -2486,7 +2457,7 @@ PODS:
- React-utils
- ReactCommon/turbomodule/core
- SocketRocket
- - React-Fabric/dom (0.81.5):
+ - React-Fabric/dom (0.81.4):
- boost
- DoubleConversion
- fast_float
@@ -2511,7 +2482,7 @@ PODS:
- React-utils
- ReactCommon/turbomodule/core
- SocketRocket
- - React-Fabric/imagemanager (0.81.5):
+ - React-Fabric/imagemanager (0.81.4):
- boost
- DoubleConversion
- fast_float
@@ -2536,7 +2507,7 @@ PODS:
- React-utils
- ReactCommon/turbomodule/core
- SocketRocket
- - React-Fabric/leakchecker (0.81.5):
+ - React-Fabric/leakchecker (0.81.4):
- boost
- DoubleConversion
- fast_float
@@ -2561,7 +2532,7 @@ PODS:
- React-utils
- ReactCommon/turbomodule/core
- SocketRocket
- - React-Fabric/mounting (0.81.5):
+ - React-Fabric/mounting (0.81.4):
- boost
- DoubleConversion
- fast_float
@@ -2586,7 +2557,7 @@ PODS:
- React-utils
- ReactCommon/turbomodule/core
- SocketRocket
- - React-Fabric/observers (0.81.5):
+ - React-Fabric/observers (0.81.4):
- boost
- DoubleConversion
- fast_float
@@ -2600,7 +2571,7 @@ PODS:
- React-Core
- React-cxxreact
- React-debug
- - React-Fabric/observers/events (= 0.81.5)
+ - React-Fabric/observers/events (= 0.81.4)
- React-featureflags
- React-graphics
- React-jsi
@@ -2612,7 +2583,7 @@ PODS:
- React-utils
- ReactCommon/turbomodule/core
- SocketRocket
- - React-Fabric/observers/events (0.81.5):
+ - React-Fabric/observers/events (0.81.4):
- boost
- DoubleConversion
- fast_float
@@ -2637,7 +2608,7 @@ PODS:
- React-utils
- ReactCommon/turbomodule/core
- SocketRocket
- - React-Fabric/scheduler (0.81.5):
+ - React-Fabric/scheduler (0.81.4):
- boost
- DoubleConversion
- fast_float
@@ -2664,7 +2635,7 @@ PODS:
- React-utils
- ReactCommon/turbomodule/core
- SocketRocket
- - React-Fabric/telemetry (0.81.5):
+ - React-Fabric/telemetry (0.81.4):
- boost
- DoubleConversion
- fast_float
@@ -2689,7 +2660,7 @@ PODS:
- React-utils
- ReactCommon/turbomodule/core
- SocketRocket
- - React-Fabric/templateprocessor (0.81.5):
+ - React-Fabric/templateprocessor (0.81.4):
- boost
- DoubleConversion
- fast_float
@@ -2714,7 +2685,7 @@ PODS:
- React-utils
- ReactCommon/turbomodule/core
- SocketRocket
- - React-Fabric/uimanager (0.81.5):
+ - React-Fabric/uimanager (0.81.4):
- boost
- DoubleConversion
- fast_float
@@ -2728,7 +2699,7 @@ PODS:
- React-Core
- React-cxxreact
- React-debug
- - React-Fabric/uimanager/consistency (= 0.81.5)
+ - React-Fabric/uimanager/consistency (= 0.81.4)
- React-featureflags
- React-graphics
- React-jsi
@@ -2741,7 +2712,7 @@ PODS:
- React-utils
- ReactCommon/turbomodule/core
- SocketRocket
- - React-Fabric/uimanager/consistency (0.81.5):
+ - React-Fabric/uimanager/consistency (0.81.4):
- boost
- DoubleConversion
- fast_float
@@ -2767,7 +2738,7 @@ PODS:
- React-utils
- ReactCommon/turbomodule/core
- SocketRocket
- - React-FabricComponents (0.81.5):
+ - React-FabricComponents (0.81.4):
- boost
- DoubleConversion
- fast_float
@@ -2782,8 +2753,8 @@ PODS:
- React-cxxreact
- React-debug
- React-Fabric
- - React-FabricComponents/components (= 0.81.5)
- - React-FabricComponents/textlayoutmanager (= 0.81.5)
+ - React-FabricComponents/components (= 0.81.4)
+ - React-FabricComponents/textlayoutmanager (= 0.81.4)
- React-featureflags
- React-graphics
- React-jsi
@@ -2796,7 +2767,7 @@ PODS:
- ReactCommon/turbomodule/core
- SocketRocket
- Yoga
- - React-FabricComponents/components (0.81.5):
+ - React-FabricComponents/components (0.81.4):
- boost
- DoubleConversion
- fast_float
@@ -2811,17 +2782,17 @@ PODS:
- React-cxxreact
- React-debug
- React-Fabric
- - React-FabricComponents/components/inputaccessory (= 0.81.5)
- - React-FabricComponents/components/iostextinput (= 0.81.5)
- - React-FabricComponents/components/modal (= 0.81.5)
- - React-FabricComponents/components/rncore (= 0.81.5)
- - React-FabricComponents/components/safeareaview (= 0.81.5)
- - React-FabricComponents/components/scrollview (= 0.81.5)
- - React-FabricComponents/components/switch (= 0.81.5)
- - React-FabricComponents/components/text (= 0.81.5)
- - React-FabricComponents/components/textinput (= 0.81.5)
- - React-FabricComponents/components/unimplementedview (= 0.81.5)
- - React-FabricComponents/components/virtualview (= 0.81.5)
+ - React-FabricComponents/components/inputaccessory (= 0.81.4)
+ - React-FabricComponents/components/iostextinput (= 0.81.4)
+ - React-FabricComponents/components/modal (= 0.81.4)
+ - React-FabricComponents/components/rncore (= 0.81.4)
+ - React-FabricComponents/components/safeareaview (= 0.81.4)
+ - React-FabricComponents/components/scrollview (= 0.81.4)
+ - React-FabricComponents/components/switch (= 0.81.4)
+ - React-FabricComponents/components/text (= 0.81.4)
+ - React-FabricComponents/components/textinput (= 0.81.4)
+ - React-FabricComponents/components/unimplementedview (= 0.81.4)
+ - React-FabricComponents/components/virtualview (= 0.81.4)
- React-featureflags
- React-graphics
- React-jsi
@@ -2834,7 +2805,7 @@ PODS:
- ReactCommon/turbomodule/core
- SocketRocket
- Yoga
- - React-FabricComponents/components/inputaccessory (0.81.5):
+ - React-FabricComponents/components/inputaccessory (0.81.4):
- boost
- DoubleConversion
- fast_float
@@ -2861,7 +2832,7 @@ PODS:
- ReactCommon/turbomodule/core
- SocketRocket
- Yoga
- - React-FabricComponents/components/iostextinput (0.81.5):
+ - React-FabricComponents/components/iostextinput (0.81.4):
- boost
- DoubleConversion
- fast_float
@@ -2888,7 +2859,7 @@ PODS:
- ReactCommon/turbomodule/core
- SocketRocket
- Yoga
- - React-FabricComponents/components/modal (0.81.5):
+ - React-FabricComponents/components/modal (0.81.4):
- boost
- DoubleConversion
- fast_float
@@ -2915,7 +2886,7 @@ PODS:
- ReactCommon/turbomodule/core
- SocketRocket
- Yoga
- - React-FabricComponents/components/rncore (0.81.5):
+ - React-FabricComponents/components/rncore (0.81.4):
- boost
- DoubleConversion
- fast_float
@@ -2942,7 +2913,7 @@ PODS:
- ReactCommon/turbomodule/core
- SocketRocket
- Yoga
- - React-FabricComponents/components/safeareaview (0.81.5):
+ - React-FabricComponents/components/safeareaview (0.81.4):
- boost
- DoubleConversion
- fast_float
@@ -2969,7 +2940,7 @@ PODS:
- ReactCommon/turbomodule/core
- SocketRocket
- Yoga
- - React-FabricComponents/components/scrollview (0.81.5):
+ - React-FabricComponents/components/scrollview (0.81.4):
- boost
- DoubleConversion
- fast_float
@@ -2996,7 +2967,7 @@ PODS:
- ReactCommon/turbomodule/core
- SocketRocket
- Yoga
- - React-FabricComponents/components/switch (0.81.5):
+ - React-FabricComponents/components/switch (0.81.4):
- boost
- DoubleConversion
- fast_float
@@ -3023,7 +2994,7 @@ PODS:
- ReactCommon/turbomodule/core
- SocketRocket
- Yoga
- - React-FabricComponents/components/text (0.81.5):
+ - React-FabricComponents/components/text (0.81.4):
- boost
- DoubleConversion
- fast_float
@@ -3050,7 +3021,7 @@ PODS:
- ReactCommon/turbomodule/core
- SocketRocket
- Yoga
- - React-FabricComponents/components/textinput (0.81.5):
+ - React-FabricComponents/components/textinput (0.81.4):
- boost
- DoubleConversion
- fast_float
@@ -3077,7 +3048,7 @@ PODS:
- ReactCommon/turbomodule/core
- SocketRocket
- Yoga
- - React-FabricComponents/components/unimplementedview (0.81.5):
+ - React-FabricComponents/components/unimplementedview (0.81.4):
- boost
- DoubleConversion
- fast_float
@@ -3104,7 +3075,7 @@ PODS:
- ReactCommon/turbomodule/core
- SocketRocket
- Yoga
- - React-FabricComponents/components/virtualview (0.81.5):
+ - React-FabricComponents/components/virtualview (0.81.4):
- boost
- DoubleConversion
- fast_float
@@ -3131,7 +3102,7 @@ PODS:
- ReactCommon/turbomodule/core
- SocketRocket
- Yoga
- - React-FabricComponents/textlayoutmanager (0.81.5):
+ - React-FabricComponents/textlayoutmanager (0.81.4):
- boost
- DoubleConversion
- fast_float
@@ -3158,7 +3129,7 @@ PODS:
- ReactCommon/turbomodule/core
- SocketRocket
- Yoga
- - React-FabricImage (0.81.5):
+ - React-FabricImage (0.81.4):
- boost
- DoubleConversion
- fast_float
@@ -3167,21 +3138,21 @@ PODS:
- hermes-engine
- RCT-Folly
- RCT-Folly/Fabric
- - RCTRequired (= 0.81.5)
- - RCTTypeSafety (= 0.81.5)
+ - RCTRequired (= 0.81.4)
+ - RCTTypeSafety (= 0.81.4)
- React-Fabric
- React-featureflags
- React-graphics
- React-ImageManager
- React-jsi
- - React-jsiexecutor (= 0.81.5)
+ - React-jsiexecutor (= 0.81.4)
- React-logger
- React-rendererdebug
- React-utils
- ReactCommon
- SocketRocket
- Yoga
- - React-featureflags (0.81.5):
+ - React-featureflags (0.81.4):
- boost
- DoubleConversion
- fast_float
@@ -3190,7 +3161,7 @@ PODS:
- RCT-Folly
- RCT-Folly/Fabric
- SocketRocket
- - React-featureflagsnativemodule (0.81.5):
+ - React-featureflagsnativemodule (0.81.4):
- boost
- DoubleConversion
- fast_float
@@ -3205,7 +3176,7 @@ PODS:
- React-RCTFBReactNativeSpec
- ReactCommon/turbomodule/core
- SocketRocket
- - React-graphics (0.81.5):
+ - React-graphics (0.81.4):
- boost
- DoubleConversion
- fast_float
@@ -3218,7 +3189,7 @@ PODS:
- React-jsiexecutor
- React-utils
- SocketRocket
- - React-hermes (0.81.5):
+ - React-hermes (0.81.4):
- boost
- DoubleConversion
- fast_float
@@ -3227,16 +3198,16 @@ PODS:
- hermes-engine
- RCT-Folly
- RCT-Folly/Fabric
- - React-cxxreact (= 0.81.5)
+ - React-cxxreact (= 0.81.4)
- React-jsi
- - React-jsiexecutor (= 0.81.5)
+ - React-jsiexecutor (= 0.81.4)
- React-jsinspector
- React-jsinspectorcdp
- React-jsinspectortracing
- - React-perflogger (= 0.81.5)
+ - React-perflogger (= 0.81.4)
- React-runtimeexecutor
- SocketRocket
- - React-idlecallbacksnativemodule (0.81.5):
+ - React-idlecallbacksnativemodule (0.81.4):
- boost
- DoubleConversion
- fast_float
@@ -3252,7 +3223,7 @@ PODS:
- React-runtimescheduler
- ReactCommon/turbomodule/core
- SocketRocket
- - React-ImageManager (0.81.5):
+ - React-ImageManager (0.81.4):
- boost
- DoubleConversion
- fast_float
@@ -3267,7 +3238,7 @@ PODS:
- React-rendererdebug
- React-utils
- SocketRocket
- - React-jserrorhandler (0.81.5):
+ - React-jserrorhandler (0.81.4):
- boost
- DoubleConversion
- fast_float
@@ -3282,7 +3253,7 @@ PODS:
- React-jsi
- ReactCommon/turbomodule/bridging
- SocketRocket
- - React-jsi (0.81.5):
+ - React-jsi (0.81.4):
- boost
- DoubleConversion
- fast_float
@@ -3292,7 +3263,7 @@ PODS:
- RCT-Folly
- RCT-Folly/Fabric
- SocketRocket
- - React-jsiexecutor (0.81.5):
+ - React-jsiexecutor (0.81.4):
- boost
- DoubleConversion
- fast_float
@@ -3301,15 +3272,15 @@ PODS:
- hermes-engine
- RCT-Folly
- RCT-Folly/Fabric
- - React-cxxreact (= 0.81.5)
- - React-jsi (= 0.81.5)
+ - React-cxxreact (= 0.81.4)
+ - React-jsi (= 0.81.4)
- React-jsinspector
- React-jsinspectorcdp
- React-jsinspectortracing
- - React-perflogger (= 0.81.5)
+ - React-perflogger (= 0.81.4)
- React-runtimeexecutor
- SocketRocket
- - React-jsinspector (0.81.5):
+ - React-jsinspector (0.81.4):
- boost
- DoubleConversion
- fast_float
@@ -3324,10 +3295,10 @@ PODS:
- React-jsinspectornetwork
- React-jsinspectortracing
- React-oscompat
- - React-perflogger (= 0.81.5)
+ - React-perflogger (= 0.81.4)
- React-runtimeexecutor
- SocketRocket
- - React-jsinspectorcdp (0.81.5):
+ - React-jsinspectorcdp (0.81.4):
- boost
- DoubleConversion
- fast_float
@@ -3336,7 +3307,7 @@ PODS:
- RCT-Folly
- RCT-Folly/Fabric
- SocketRocket
- - React-jsinspectornetwork (0.81.5):
+ - React-jsinspectornetwork (0.81.4):
- boost
- DoubleConversion
- fast_float
@@ -3349,7 +3320,7 @@ PODS:
- React-performancetimeline
- React-timing
- SocketRocket
- - React-jsinspectortracing (0.81.5):
+ - React-jsinspectortracing (0.81.4):
- boost
- DoubleConversion
- fast_float
@@ -3360,7 +3331,7 @@ PODS:
- React-oscompat
- React-timing
- SocketRocket
- - React-jsitooling (0.81.5):
+ - React-jsitooling (0.81.4):
- boost
- DoubleConversion
- fast_float
@@ -3368,16 +3339,16 @@ PODS:
- glog
- RCT-Folly
- RCT-Folly/Fabric
- - React-cxxreact (= 0.81.5)
- - React-jsi (= 0.81.5)
+ - React-cxxreact (= 0.81.4)
+ - React-jsi (= 0.81.4)
- React-jsinspector
- React-jsinspectorcdp
- React-jsinspectortracing
- React-runtimeexecutor
- SocketRocket
- - React-jsitracing (0.81.5):
+ - React-jsitracing (0.81.4):
- React-jsi
- - React-logger (0.81.5):
+ - React-logger (0.81.4):
- boost
- DoubleConversion
- fast_float
@@ -3386,7 +3357,7 @@ PODS:
- RCT-Folly
- RCT-Folly/Fabric
- SocketRocket
- - React-Mapbuffer (0.81.5):
+ - React-Mapbuffer (0.81.4):
- boost
- DoubleConversion
- fast_float
@@ -3396,7 +3367,7 @@ PODS:
- RCT-Folly/Fabric
- React-debug
- SocketRocket
- - React-microtasksnativemodule (0.81.5):
+ - React-microtasksnativemodule (0.81.4):
- boost
- DoubleConversion
- fast_float
@@ -3555,6 +3526,36 @@ PODS:
- Yoga
- react-native-quick-base64 (2.2.2):
- React-Core
+ - react-native-quick-crypto (0.7.17):
+ - boost
+ - DoubleConversion
+ - fast_float
+ - fmt
+ - glog
+ - hermes-engine
+ - OpenSSL-Universal
+ - RCT-Folly
+ - RCT-Folly/Fabric
+ - RCTRequired
+ - RCTTypeSafety
+ - React
+ - React-Core
+ - React-debug
+ - React-Fabric
+ - React-featureflags
+ - React-graphics
+ - React-ImageManager
+ - React-jsi
+ - React-NativeModulesApple
+ - React-RCTFabric
+ - React-renderercss
+ - React-rendererdebug
+ - React-utils
+ - ReactCodegen
+ - ReactCommon/turbomodule/bridging
+ - ReactCommon/turbomodule/core
+ - SocketRocket
+ - Yoga
- react-native-safe-area-context (5.6.1):
- boost
- DoubleConversion
@@ -3698,7 +3699,7 @@ PODS:
- ReactCommon/turbomodule/core
- SocketRocket
- Yoga
- - React-NativeModulesApple (0.81.5):
+ - React-NativeModulesApple (0.81.4):
- boost
- DoubleConversion
- fast_float
@@ -3718,8 +3719,8 @@ PODS:
- ReactCommon/turbomodule/bridging
- ReactCommon/turbomodule/core
- SocketRocket
- - React-oscompat (0.81.5)
- - React-perflogger (0.81.5):
+ - React-oscompat (0.81.4)
+ - React-perflogger (0.81.4):
- boost
- DoubleConversion
- fast_float
@@ -3728,7 +3729,7 @@ PODS:
- RCT-Folly
- RCT-Folly/Fabric
- SocketRocket
- - React-performancetimeline (0.81.5):
+ - React-performancetimeline (0.81.4):
- boost
- DoubleConversion
- fast_float
@@ -3741,9 +3742,9 @@ PODS:
- React-perflogger
- React-timing
- SocketRocket
- - React-RCTActionSheet (0.81.5):
- - React-Core/RCTActionSheetHeaders (= 0.81.5)
- - React-RCTAnimation (0.81.5):
+ - React-RCTActionSheet (0.81.4):
+ - React-Core/RCTActionSheetHeaders (= 0.81.4)
+ - React-RCTAnimation (0.81.4):
- boost
- DoubleConversion
- fast_float
@@ -3759,7 +3760,7 @@ PODS:
- React-RCTFBReactNativeSpec
- ReactCommon
- SocketRocket
- - React-RCTAppDelegate (0.81.5):
+ - React-RCTAppDelegate (0.81.4):
- boost
- DoubleConversion
- fast_float
@@ -3793,7 +3794,7 @@ PODS:
- React-utils
- ReactCommon
- SocketRocket
- - React-RCTBlob (0.81.5):
+ - React-RCTBlob (0.81.4):
- boost
- DoubleConversion
- fast_float
@@ -3812,7 +3813,7 @@ PODS:
- React-RCTNetwork
- ReactCommon
- SocketRocket
- - React-RCTFabric (0.81.5):
+ - React-RCTFabric (0.81.4):
- boost
- DoubleConversion
- fast_float
@@ -3847,7 +3848,7 @@ PODS:
- React-utils
- SocketRocket
- Yoga
- - React-RCTFBReactNativeSpec (0.81.5):
+ - React-RCTFBReactNativeSpec (0.81.4):
- boost
- DoubleConversion
- fast_float
@@ -3861,10 +3862,10 @@ PODS:
- React-Core
- React-jsi
- React-NativeModulesApple
- - React-RCTFBReactNativeSpec/components (= 0.81.5)
+ - React-RCTFBReactNativeSpec/components (= 0.81.4)
- ReactCommon
- SocketRocket
- - React-RCTFBReactNativeSpec/components (0.81.5):
+ - React-RCTFBReactNativeSpec/components (0.81.4):
- boost
- DoubleConversion
- fast_float
@@ -3887,7 +3888,7 @@ PODS:
- ReactCommon
- SocketRocket
- Yoga
- - React-RCTImage (0.81.5):
+ - React-RCTImage (0.81.4):
- boost
- DoubleConversion
- fast_float
@@ -3903,14 +3904,14 @@ PODS:
- React-RCTNetwork
- ReactCommon
- SocketRocket
- - React-RCTLinking (0.81.5):
- - React-Core/RCTLinkingHeaders (= 0.81.5)
- - React-jsi (= 0.81.5)
+ - React-RCTLinking (0.81.4):
+ - React-Core/RCTLinkingHeaders (= 0.81.4)
+ - React-jsi (= 0.81.4)
- React-NativeModulesApple
- React-RCTFBReactNativeSpec
- ReactCommon
- - ReactCommon/turbomodule/core (= 0.81.5)
- - React-RCTNetwork (0.81.5):
+ - ReactCommon/turbomodule/core (= 0.81.4)
+ - React-RCTNetwork (0.81.4):
- boost
- DoubleConversion
- fast_float
@@ -3928,7 +3929,7 @@ PODS:
- React-RCTFBReactNativeSpec
- ReactCommon
- SocketRocket
- - React-RCTRuntime (0.81.5):
+ - React-RCTRuntime (0.81.4):
- boost
- DoubleConversion
- fast_float
@@ -3948,7 +3949,7 @@ PODS:
- React-runtimeexecutor
- React-RuntimeHermes
- SocketRocket
- - React-RCTSettings (0.81.5):
+ - React-RCTSettings (0.81.4):
- boost
- DoubleConversion
- fast_float
@@ -3963,10 +3964,10 @@ PODS:
- React-RCTFBReactNativeSpec
- ReactCommon
- SocketRocket
- - React-RCTText (0.81.5):
- - React-Core/RCTTextHeaders (= 0.81.5)
+ - React-RCTText (0.81.4):
+ - React-Core/RCTTextHeaders (= 0.81.4)
- Yoga
- - React-RCTVibration (0.81.5):
+ - React-RCTVibration (0.81.4):
- boost
- DoubleConversion
- fast_float
@@ -3980,11 +3981,11 @@ PODS:
- React-RCTFBReactNativeSpec
- ReactCommon
- SocketRocket
- - React-rendererconsistency (0.81.5)
- - React-renderercss (0.81.5):
+ - React-rendererconsistency (0.81.4)
+ - React-renderercss (0.81.4):
- React-debug
- React-utils
- - React-rendererdebug (0.81.5):
+ - React-rendererdebug (0.81.4):
- boost
- DoubleConversion
- fast_float
@@ -3994,7 +3995,7 @@ PODS:
- RCT-Folly/Fabric
- React-debug
- SocketRocket
- - React-RuntimeApple (0.81.5):
+ - React-RuntimeApple (0.81.4):
- boost
- DoubleConversion
- fast_float
@@ -4023,7 +4024,7 @@ PODS:
- React-runtimescheduler
- React-utils
- SocketRocket
- - React-RuntimeCore (0.81.5):
+ - React-RuntimeCore (0.81.4):
- boost
- DoubleConversion
- fast_float
@@ -4045,7 +4046,7 @@ PODS:
- React-runtimescheduler
- React-utils
- SocketRocket
- - React-runtimeexecutor (0.81.5):
+ - React-runtimeexecutor (0.81.4):
- boost
- DoubleConversion
- fast_float
@@ -4055,10 +4056,10 @@ PODS:
- RCT-Folly/Fabric
- React-debug
- React-featureflags
- - React-jsi (= 0.81.5)
+ - React-jsi (= 0.81.4)
- React-utils
- SocketRocket
- - React-RuntimeHermes (0.81.5):
+ - React-RuntimeHermes (0.81.4):
- boost
- DoubleConversion
- fast_float
@@ -4079,7 +4080,7 @@ PODS:
- React-runtimeexecutor
- React-utils
- SocketRocket
- - React-runtimescheduler (0.81.5):
+ - React-runtimescheduler (0.81.4):
- boost
- DoubleConversion
- fast_float
@@ -4101,9 +4102,9 @@ PODS:
- React-timing
- React-utils
- SocketRocket
- - React-timing (0.81.5):
+ - React-timing (0.81.4):
- React-debug
- - React-utils (0.81.5):
+ - React-utils (0.81.4):
- boost
- DoubleConversion
- fast_float
@@ -4113,11 +4114,11 @@ PODS:
- RCT-Folly
- RCT-Folly/Fabric
- React-debug
- - React-jsi (= 0.81.5)
+ - React-jsi (= 0.81.4)
- SocketRocket
- - ReactAppDependencyProvider (0.81.5):
+ - ReactAppDependencyProvider (0.81.4):
- ReactCodegen
- - ReactCodegen (0.81.5):
+ - ReactCodegen (0.81.4):
- boost
- DoubleConversion
- fast_float
@@ -4143,7 +4144,7 @@ PODS:
- ReactCommon/turbomodule/bridging
- ReactCommon/turbomodule/core
- SocketRocket
- - ReactCommon (0.81.5):
+ - ReactCommon (0.81.4):
- boost
- DoubleConversion
- fast_float
@@ -4151,9 +4152,9 @@ PODS:
- glog
- RCT-Folly
- RCT-Folly/Fabric
- - ReactCommon/turbomodule (= 0.81.5)
+ - ReactCommon/turbomodule (= 0.81.4)
- SocketRocket
- - ReactCommon/turbomodule (0.81.5):
+ - ReactCommon/turbomodule (0.81.4):
- boost
- DoubleConversion
- fast_float
@@ -4162,15 +4163,15 @@ PODS:
- hermes-engine
- RCT-Folly
- RCT-Folly/Fabric
- - React-callinvoker (= 0.81.5)
- - React-cxxreact (= 0.81.5)
- - React-jsi (= 0.81.5)
- - React-logger (= 0.81.5)
- - React-perflogger (= 0.81.5)
- - ReactCommon/turbomodule/bridging (= 0.81.5)
- - ReactCommon/turbomodule/core (= 0.81.5)
+ - React-callinvoker (= 0.81.4)
+ - React-cxxreact (= 0.81.4)
+ - React-jsi (= 0.81.4)
+ - React-logger (= 0.81.4)
+ - React-perflogger (= 0.81.4)
+ - ReactCommon/turbomodule/bridging (= 0.81.4)
+ - ReactCommon/turbomodule/core (= 0.81.4)
- SocketRocket
- - ReactCommon/turbomodule/bridging (0.81.5):
+ - ReactCommon/turbomodule/bridging (0.81.4):
- boost
- DoubleConversion
- fast_float
@@ -4179,13 +4180,13 @@ PODS:
- hermes-engine
- RCT-Folly
- RCT-Folly/Fabric
- - React-callinvoker (= 0.81.5)
- - React-cxxreact (= 0.81.5)
- - React-jsi (= 0.81.5)
- - React-logger (= 0.81.5)
- - React-perflogger (= 0.81.5)
+ - React-callinvoker (= 0.81.4)
+ - React-cxxreact (= 0.81.4)
+ - React-jsi (= 0.81.4)
+ - React-logger (= 0.81.4)
+ - React-perflogger (= 0.81.4)
- SocketRocket
- - ReactCommon/turbomodule/core (0.81.5):
+ - ReactCommon/turbomodule/core (0.81.4):
- boost
- DoubleConversion
- fast_float
@@ -4194,14 +4195,14 @@ PODS:
- hermes-engine
- RCT-Folly
- RCT-Folly/Fabric
- - React-callinvoker (= 0.81.5)
- - React-cxxreact (= 0.81.5)
- - React-debug (= 0.81.5)
- - React-featureflags (= 0.81.5)
- - React-jsi (= 0.81.5)
- - React-logger (= 0.81.5)
- - React-perflogger (= 0.81.5)
- - React-utils (= 0.81.5)
+ - React-callinvoker (= 0.81.4)
+ - React-cxxreact (= 0.81.4)
+ - React-debug (= 0.81.4)
+ - React-featureflags (= 0.81.4)
+ - React-jsi (= 0.81.4)
+ - React-logger (= 0.81.4)
+ - React-perflogger (= 0.81.4)
+ - React-utils (= 0.81.4)
- SocketRocket
- RecaptchaInterop (101.0.0)
- RestartNewArch (1.0.85):
@@ -4290,35 +4291,217 @@ PODS:
- Yoga
- RNDeviceInfo (14.1.1):
- React-Core
- - RNFBApp (23.4.0):
- - Firebase/CoreOnly (= 12.3.0)
+ - RNFBApp (24.0.0):
+ - boost
+ - DoubleConversion
+ - fast_float
+ - Firebase/CoreOnly (= 12.10.0)
+ - fmt
+ - glog
+ - hermes-engine
+ - RCT-Folly
+ - RCT-Folly/Fabric
+ - RCTRequired
+ - RCTTypeSafety
- React-Core
- - RNFBAuth (23.4.0):
- - Firebase/Auth (= 12.3.0)
+ - React-debug
+ - React-Fabric
+ - React-featureflags
+ - React-graphics
+ - React-ImageManager
+ - React-jsi
+ - React-NativeModulesApple
+ - React-RCTFabric
+ - React-renderercss
+ - React-rendererdebug
+ - React-utils
+ - ReactCodegen
+ - ReactCommon/turbomodule/bridging
+ - ReactCommon/turbomodule/core
+ - SocketRocket
+ - Yoga
+ - RNFBAuth (24.0.0):
+ - boost
+ - DoubleConversion
+ - fast_float
+ - Firebase/Auth (= 12.10.0)
+ - fmt
+ - glog
+ - hermes-engine
+ - RCT-Folly
+ - RCT-Folly/Fabric
+ - RCTRequired
+ - RCTTypeSafety
- React-Core
+ - React-debug
+ - React-Fabric
+ - React-featureflags
+ - React-graphics
+ - React-ImageManager
+ - React-jsi
+ - React-NativeModulesApple
+ - React-RCTFabric
+ - React-renderercss
+ - React-rendererdebug
+ - React-utils
+ - ReactCodegen
+ - ReactCommon/turbomodule/bridging
+ - ReactCommon/turbomodule/core
- RNFBApp
- - RNFBCrashlytics (23.4.0):
- - Firebase/Crashlytics (= 12.3.0)
+ - SocketRocket
+ - Yoga
+ - RNFBCrashlytics (24.0.0):
+ - boost
+ - DoubleConversion
+ - fast_float
+ - Firebase/Crashlytics (= 12.10.0)
- FirebaseCoreExtension
+ - fmt
+ - glog
+ - hermes-engine
+ - RCT-Folly
+ - RCT-Folly/Fabric
+ - RCTRequired
+ - RCTTypeSafety
- React-Core
+ - React-debug
+ - React-Fabric
+ - React-featureflags
+ - React-graphics
+ - React-ImageManager
+ - React-jsi
+ - React-NativeModulesApple
+ - React-RCTFabric
+ - React-renderercss
+ - React-rendererdebug
+ - React-utils
+ - ReactCodegen
+ - ReactCommon/turbomodule/bridging
+ - ReactCommon/turbomodule/core
- RNFBApp
- - RNFBFirestore (23.4.0):
- - Firebase/Firestore (= 12.3.0)
+ - SocketRocket
+ - Yoga
+ - RNFBFirestore (24.0.0):
+ - boost
+ - DoubleConversion
+ - fast_float
+ - Firebase/Firestore (= 12.10.0)
+ - fmt
+ - glog
+ - hermes-engine
+ - RCT-Folly
+ - RCT-Folly/Fabric
+ - RCTRequired
+ - RCTTypeSafety
- React-Core
+ - React-debug
+ - React-Fabric
+ - React-featureflags
+ - React-graphics
+ - React-ImageManager
+ - React-jsi
+ - React-NativeModulesApple
+ - React-RCTFabric
+ - React-renderercss
+ - React-rendererdebug
+ - React-utils
+ - ReactCodegen
+ - ReactCommon/turbomodule/bridging
+ - ReactCommon/turbomodule/core
- RNFBApp
- - RNFBFunctions (23.4.0):
- - Firebase/Functions (= 12.3.0)
+ - SocketRocket
+ - Yoga
+ - RNFBFunctions (24.0.0):
+ - boost
+ - DoubleConversion
+ - fast_float
+ - Firebase/Functions (= 12.10.0)
+ - fmt
+ - glog
+ - hermes-engine
+ - RCT-Folly
+ - RCT-Folly/Fabric
+ - RCTRequired
+ - RCTTypeSafety
- React-Core
+ - React-debug
+ - React-Fabric
+ - React-featureflags
+ - React-graphics
+ - React-ImageManager
+ - React-jsi
+ - React-NativeModulesApple
+ - React-RCTFabric
+ - React-renderercss
+ - React-rendererdebug
+ - React-utils
+ - ReactCodegen
+ - ReactCommon/turbomodule/bridging
+ - ReactCommon/turbomodule/core
- RNFBApp
- - RNFBMessaging (23.4.0):
- - Firebase/Messaging (= 12.3.0)
+ - SocketRocket
+ - Yoga
+ - RNFBMessaging (24.0.0):
+ - boost
+ - DoubleConversion
+ - fast_float
+ - Firebase/Messaging (= 12.10.0)
- FirebaseCoreExtension
+ - fmt
+ - glog
+ - hermes-engine
+ - RCT-Folly
+ - RCT-Folly/Fabric
+ - RCTRequired
+ - RCTTypeSafety
- React-Core
+ - React-debug
+ - React-Fabric
+ - React-featureflags
+ - React-graphics
+ - React-ImageManager
+ - React-jsi
+ - React-NativeModulesApple
+ - React-RCTFabric
+ - React-renderercss
+ - React-rendererdebug
+ - React-utils
+ - ReactCodegen
+ - ReactCommon/turbomodule/bridging
+ - ReactCommon/turbomodule/core
- RNFBApp
- - RNFBStorage (23.4.0):
- - Firebase/Storage (= 12.3.0)
+ - SocketRocket
+ - Yoga
+ - RNFBStorage (24.0.0):
+ - boost
+ - DoubleConversion
+ - fast_float
+ - Firebase/Storage (= 12.10.0)
+ - fmt
+ - glog
+ - hermes-engine
+ - RCT-Folly
+ - RCT-Folly/Fabric
+ - RCTRequired
+ - RCTTypeSafety
- React-Core
+ - React-debug
+ - React-Fabric
+ - React-featureflags
+ - React-graphics
+ - React-ImageManager
+ - React-jsi
+ - React-NativeModulesApple
+ - React-RCTFabric
+ - React-renderercss
+ - React-rendererdebug
+ - React-utils
+ - ReactCodegen
+ - ReactCommon/turbomodule/bridging
+ - ReactCommon/turbomodule/core
- RNFBApp
+ - SocketRocket
+ - Yoga
- RNGestureHandler (2.28.0):
- boost
- DoubleConversion
@@ -4766,7 +4949,6 @@ DEPENDENCIES:
- hermes-engine (from `../node_modules/react-native/sdks/hermes-engine/hermes-engine.podspec`)
- lottie-react-native (from `../node_modules/lottie-react-native`)
- NitroModules (from `../node_modules/react-native-nitro-modules`)
- - QuickCrypto (from `../node_modules/react-native-quick-crypto`)
- RCT-Folly (from `../node_modules/react-native/third-party-podspecs/RCT-Folly.podspec`)
- RCTDeprecation (from `../node_modules/react-native/ReactApple/Libraries/RCTFoundation/RCTDeprecation`)
- RCTRequired (from `../node_modules/react-native/Libraries/Required`)
@@ -4807,6 +4989,7 @@ DEPENDENCIES:
- react-native-pager-view (from `../node_modules/react-native-pager-view`)
- react-native-pdf-from-image (from `../node_modules/react-native-pdf-from-image`)
- react-native-quick-base64 (from `../node_modules/react-native-quick-base64`)
+ - react-native-quick-crypto (from `../node_modules/react-native-quick-crypto`)
- react-native-safe-area-context (from `../node_modules/react-native-safe-area-context`)
- react-native-view-shot (from `../node_modules/react-native-view-shot`)
- react-native-webview (from `../node_modules/react-native-webview`)
@@ -4899,6 +5082,7 @@ SPEC REPOS:
- libwebp
- lottie-ios
- nanopb
+ - OpenSSL-Universal
- PromisesObjC
- PromisesSwift
- RecaptchaInterop
@@ -4983,8 +5167,6 @@ EXTERNAL SOURCES:
:path: "../node_modules/lottie-react-native"
NitroModules:
:path: "../node_modules/react-native-nitro-modules"
- QuickCrypto:
- :path: "../node_modules/react-native-quick-crypto"
RCT-Folly:
:podspec: "../node_modules/react-native/third-party-podspecs/RCT-Folly.podspec"
RCTDeprecation:
@@ -5063,6 +5245,8 @@ EXTERNAL SOURCES:
:path: "../node_modules/react-native-pdf-from-image"
react-native-quick-base64:
:path: "../node_modules/react-native-quick-base64"
+ react-native-quick-crypto:
+ :path: "../node_modules/react-native-quick-crypto"
react-native-safe-area-context:
:path: "../node_modules/react-native-safe-area-context"
react-native-view-shot:
@@ -5209,25 +5393,25 @@ SPEC CHECKSUMS:
ExpoWebBrowser: d04a0d6247a0bea4519fbc2ea816610019ad83e0
EXTaskManager: cf225704fab8de8794a6f57f7fa41a90c0e2cd47
fast_float: b32c788ed9c6a8c584d114d0047beda9664e7cc6
- FBLazyVector: 5beb8028d5a2e75dd9634917f23e23d3a061d2aa
- Firebase: f5439b235721ceeef14ca1f327c0da8e4e8556b5
- FirebaseAppCheckInterop: 3a8527abb8bb89fb1bd2bd3d1d7b463c0ceb0cbf
- FirebaseAuth: 4fdd7ee2da745f79145124f5191639d2ea756a77
- FirebaseAuthInterop: a7c394818a93d374c543ca085f3a46ab7c71372e
- FirebaseCore: ff47fe1ad3ab9ef66edd3e8bc4647b493d2067f8
- FirebaseCoreExtension: 898ca55c7cb126f83747b32cb0daa95394b10853
- FirebaseCoreInternal: a9e1ff270f217489d9258563b693d11a312903bf
- FirebaseCrashlytics: a2a9947c0c265575a98213e7c25b0d777f6921b3
- FirebaseFirestore: 93138b63239303eeb035d922920f4e48216f0c2d
- FirebaseFirestoreInternal: 81150153b7b25b5eee4633cc5c7f08ab83bda966
- FirebaseFunctions: 7ed4b5e4834c9cf6db02753723ee29fce3f5f440
- FirebaseInstallations: ca48ec60ea51b66b9f214a91847ea3720cde97f5
- FirebaseMessaging: 919ce76cb353f0c36d463f5461d8ab584e6ed765
- FirebaseMessagingInterop: f5ed999a2c51bd454beb9f75a5f966b321660884
- FirebaseRemoteConfigInterop: 66d61ad6cee1cd2137cb8dedf468112e9ba92c6a
- FirebaseSessions: 352b204966530e5cb7036c02d8c366922210e681
- FirebaseSharedSwift: a08758c5e2617f3ebb47865b45ecca6f02cd35ea
- FirebaseStorage: 23c8869d6e9d93f159766c4f81f6ead6410aff4f
+ FBLazyVector: 941bef1c8eeabd9fe1f501e30a5220beee913886
+ Firebase: 99f203d3a114c6ba591f3b32263a9626e450af65
+ FirebaseAppCheckInterop: 2480ab50a070a6bc02e26e62733874361f017a11
+ FirebaseAuth: 7109e33998bbd96f983dc02b97289b535f6f4141
+ FirebaseAuthInterop: f9c841843d840cae6a7db7551452eac520ffa3bd
+ FirebaseCore: f4428e22415ea3b3eca652c2098413dabf2a23a9
+ FirebaseCoreExtension: 3473a6ec16a91aee29fb75994a86c0220d2cddf3
+ FirebaseCoreInternal: e7bbaeb00ab73011298f35ed223aa7371e212948
+ FirebaseCrashlytics: cd1baeb80302ec5ea1012f732ab94df7d76f09f7
+ FirebaseFirestore: 3c85b7fc1cbad3bcfc0ba807861aa55e0ad4af22
+ FirebaseFirestoreInternal: a5120d3aea03c837ff9937c90e8a95f81e6a0706
+ FirebaseFunctions: 8fcae1e736d3665f4411ea647d407cb3a8151454
+ FirebaseInstallations: 047343aa91fd6a1ebfa3eb374ddecf36a8aaddfd
+ FirebaseMessaging: ed18fb50634e6e85b5d3e77e628c21e2c928cc53
+ FirebaseMessagingInterop: 2729786ffbc2b3414d157ed832420859248f03e3
+ FirebaseRemoteConfigInterop: a169873f4093b241eb5e27a4fbad91af36d64b8d
+ FirebaseSessions: dba7635960740ad77cc2f3387d90ff22a7942f82
+ FirebaseSharedSwift: 3d1e448b7202e36821a492941c84592d1308ea14
+ FirebaseStorage: dd2dcbd47f603777206c04d2bd837e5f47ca3f4d
fmt: 530618a01105dae0fa3a2f27c81ae11fa8f67eac
glog: 5683914934d5b6e4240e497e0f4a3b42d1854183
GoogleDataTransport: aae35b7ea0c09004c3797d53c8c41f66f219d6a7
@@ -5235,7 +5419,7 @@ SPEC CHECKSUMS:
"gRPC-C++": cc207623316fb041a7a3e774c252cf68a058b9e8
gRPC-Core: 860978b7db482de8b4f5e10677216309b5ff6330
GTMSessionFetcher: 904bdd2a82c635bcd6f44edf94cc8775c5d1d6e6
- hermes-engine: 9f4dfe93326146a1c99eb535b1cb0b857a3cd172
+ hermes-engine: 35c763d57c9832d0eef764316ca1c4d043581394
leveldb-library: cc8b8f8e013647a295ad3f8cd2ddf49a6f19be19
libavif: 5f8e715bea24debec477006f21ef9e95432e254d
libdav1d: 23581a4d8ec811ff171ed5e2e05cd27bad64c39f
@@ -5244,93 +5428,94 @@ SPEC CHECKSUMS:
lottie-react-native: d2b7601b28c063bde347fac764166b5362037846
nanopb: fad817b59e0457d11a5dfbde799381cd727c1275
NitroModules: f8c2cc3025e4550aee15ff77c525622bf98e774a
+ OpenSSL-Universal: 9110d21982bb7e8b22a962b6db56a8aa805afde7
PromisesObjC: f5707f49cb48b9636751c5b2e7d227e43fba9f47
PromisesSwift: 9d77319bbe72ebf6d872900551f7eeba9bce2851
- QuickCrypto: f74d286d21d8e36afb04dafd1c080877937d4374
RCT-Folly: b29feb752b08042c62badaef7d453f3bb5e6ae23
- RCTDeprecation: 5eb1d2eeff5fb91151e8a8eef45b6c7658b6c897
- RCTRequired: cebcf9442fc296c9b89ac791dfd463021d9f6f23
- RCTTypeSafety: b99aa872829ee18f6e777e0ef55852521c5a6788
- React: 914f8695f9bf38e6418228c2ffb70021e559f92f
- React-callinvoker: 23cd4e33928608bd0cc35357597568b8b9a5f068
- React-Core: 6a0a97598e9455348113bfe4c573fe8edac34469
- React-CoreModules: a88a6ca48b668401b9780e272e2a607e70f9f955
- React-cxxreact: 06265fd7e8d5c3b6b49e00d328ef76e5f1ae9c8b
- React-debug: 29aed758c756956a51b4560223edbd15191ca4c5
- React-defaultsnativemodule: c406bf7cd78036efffb7dec9df469257a1bca58c
- React-domnativemodule: 925ea5ff8cb05c68e910057e6349e5898cce00f3
- React-Fabric: 13130d0a70f17e913865b04673ee64603d6c42fe
- React-FabricComponents: 1f01ea24a1314bf9abcac4743bb7ad8791336be6
- React-FabricImage: f364dc54fcf8b0ef77192674a009aa4f65b34d75
- React-featureflags: 32217ac18a8c216fc571044186fb04164af72772
- React-featureflagsnativemodule: 9c552bb908a7434baa846002ee1752a77b1a5520
- React-graphics: 3034a698e46e947f74a443e761f1feef742e9d71
- React-hermes: a852be3ab9e1f515e46ba3ea9f48c31d4a9df437
- React-idlecallbacksnativemodule: c43fe1f2221b0548cc366bf15f88efb3b3221bbf
- React-ImageManager: 7efd7b19cdfaa3a82482e9e6ac0b56606a3ec271
- React-jserrorhandler: 597057d0b9d158c03e02aa376a4a95f64f46a910
- React-jsi: 7b53959aea60909ac6bbe4dd0bdec6c10d7dc597
- React-jsiexecutor: 19938072af05ade148474bac41e0324a2d733f44
- React-jsinspector: eb6bb244a75cbd56f32767daf2efdb344e2ff10c
- React-jsinspectorcdp: 727f37537e9c7ab22b6b86c802d879efae5e2757
- React-jsinspectornetwork: 11d47e644701c58038ef8d7f54a405ddd62b3b16
- React-jsinspectortracing: 8875637e6c65b3b9a3852b006856562e874e7a78
- React-jsitooling: b6e6a2551459a6ef9e1529df2ea981fa27ed3a91
- React-jsitracing: 879e2b2f80dd33d84175989de0a8db5d662505db
- React-logger: a913317214a26565cd4c045347edf1bcacb80a3f
- React-Mapbuffer: 017336879e2e0fb7537bbc08c24f34e2384c9260
- React-microtasksnativemodule: 63ee6730cec233feab9cdcc0c100dc28a12e4165
+ RCTDeprecation: c0ed3249a97243002615517dff789bf4666cf585
+ RCTRequired: 58719f5124f9267b5f9649c08bf23d9aea845b23
+ RCTTypeSafety: 4aefa8328ab1f86da273f08517f1f6b343f6c2cc
+ React: 2073376f47c71b7e9a0af7535986a77522ce1049
+ React-callinvoker: 751b6f2c83347a0486391c3f266f291f0f53b27e
+ React-Core: dff5d29973349b11dd6631c9498456d75f846d5e
+ React-CoreModules: c0ae04452e4c5d30e06f8e94692a49107657f537
+ React-cxxreact: 376fd672c95dfb64ad5cc246e6a1e9edb78dec4c
+ React-debug: d4955c86870792887ed695df6ebf0e94e39dc7e1
+ React-defaultsnativemodule: bd2b805c6daa85d430d034aa748544b377ada152
+ React-domnativemodule: b5c04a4a74ed9c3cb25adc72583b017868600464
+ React-Fabric: 93a9ff378f1edf29e9a22a24ad55a1be061e7985
+ React-FabricComponents: 83bd54366d4ecb8bec563aa1a78d49915763d503
+ React-FabricImage: 8bcd88e553047d4ed5c7ea3def8d6c0e3dd88cfc
+ React-featureflags: 4ea691ab154d505277859416aa226ae32edeef5f
+ React-featureflagsnativemodule: b8f00b01436294a30dc62fb5e50b70aa3910309c
+ React-graphics: d6207795fe822668daeb9c6e1f1470a8500d9eec
+ React-hermes: fcbdc45ecf38259fe3b12642bd0757c52270a107
+ React-idlecallbacksnativemodule: f390a518e1a862453f45f86a1bc248350634d858
+ React-ImageManager: acb99e093632b7fc2953dd45f2abaeeea2d9588e
+ React-jserrorhandler: 958ab9afbe7acdbfe8ca225f7503313409b1319a
+ React-jsi: 59ec3190dd364cca86a58869e7755477d2468948
+ React-jsiexecutor: b87d78a2e8dd7a6f56e9cdac038da45de98c944f
+ React-jsinspector: 9c33e0c4eeeb10a23b61c4501947b57977980e0e
+ React-jsinspectorcdp: d7b2c3feddd3669f0eaad2ac1e0f7afbc1d1cf18
+ React-jsinspectornetwork: 696d0cf07016e69c053deffba30003fa448904a3
+ React-jsinspectortracing: 05d49cd8795db15a279eab6f7604dfa9fe9622f1
+ React-jsitooling: 0f9894c3656c3c13d4fcfe6e1dc964fd340acf49
+ React-jsitracing: dc11027f9e4e829d32bf17626ec831581ea05223
+ React-logger: a3cb5b29c32b8e447b5a96919340e89334062b48
+ React-Mapbuffer: e4a65db5f4df53369f39558c0cf2f480f6d3d6c7
+ React-microtasksnativemodule: 86334c5c06315e0bccb7b6e6f2c905e92f98b615
react-native-context-menu-view: 418877dcac6add4abba8fc2ee92c39f05b763f3a
react-native-get-random-values: 5c2e7ce0c1eedefde8e97fe60152601887fcfa08
react-native-keyboard-controller: c4ca61f44d66c2f8987a7e67e9b78e80dc965c45
react-native-pager-view: 0e228ec2dfdd87807d125c7bbfb83299edede19c
react-native-pdf-from-image: af6ff3b4b4dd840d02fb733e0e7b047b9ebab4ae
react-native-quick-base64: 6568199bb2ac8e72ecdfdc73a230fbc5c1d3aac4
+ react-native-quick-crypto: 2c53f72c27485924b444dda124639ee363cf1d69
react-native-safe-area-context: ee1e8e2a7abf737a8d4d9d1a5686a7f2e7466236
react-native-view-shot: aab9ffbcc2f01035ee8ffd9a00c773e215b35c8b
react-native-webview: d73728424a0e24989d71ffdc6fcf15d5f74ff4a2
- React-NativeModulesApple: cbceb3c4cb726838c461b13802a76cefa6f3476f
- React-oscompat: eb0626e8ba1a2c61673c991bf9dc21834898475d
- React-perflogger: 509e1f9a3ee28df71b0a66de806ac515ce951246
- React-performancetimeline: 9ce28cce1cded27410c293283f99fe62bebdb920
- React-RCTActionSheet: 30fe8f9f8d86db4a25ff34595a658ecd837485fc
- React-RCTAnimation: 3126eb1cb8e7a6ca33a52fd833d8018aa9311af1
- React-RCTAppDelegate: b03981c790aa40cf26e0f78cc0f1f2df8287ead4
- React-RCTBlob: 53c35e85c85d6bdaa55dc81a0b290d4e78431095
- React-RCTFabric: 59ad9008775f123019c508efff260594a8509791
- React-RCTFBReactNativeSpec: 82b605ab4f6f8da0a7ad88641161df5a0bafb1fb
- React-RCTImage: 074b2faa71a152a456c974e118b60c9eeda94a64
- React-RCTLinking: e5ca17a4f7ae2ad7b0c0483be77e1b383ecd0a8a
- React-RCTNetwork: c508d7548c9eceac30a8100a846ea00033a03366
- React-RCTRuntime: 6979568c0bc276fe785e085894f954fa15e0ec7e
- React-RCTSettings: dd84c857a4fce42c1e08c1dabcda894e25af4a6e
- React-RCTText: 6e4b177d047f98bccb90d6fb1ebdd3391cf8b299
- React-RCTVibration: 9572d4a06a0c92650bcc62913e50eb2a89f19fb6
- React-rendererconsistency: a7b47f8b186af64ff8509c8caec4114a2f1ae63f
- React-renderercss: 9845c5063b3a2d0462ed4e4c7fc34219a5d608ed
- React-rendererdebug: 3905e346c06347b86c6e49d427062cdd638a3044
- React-RuntimeApple: 97233caf2b635c40819bf5be38d818777f8229ab
- React-RuntimeCore: dc41f86fcdf1fbb42a5b8388a29bf59dfa56b2f8
- React-runtimeexecutor: d16d045faaf6cd7de8d1aa8e31a51c13d8db84a4
- React-RuntimeHermes: 5a9d132554c8d6b416d794cd4ac7d927b2f88f7b
- React-runtimescheduler: 689d805d43c28b8fb1ab390914e042d10e2ea2ab
- React-timing: c39eeb992274aeaeb9f4666dc97a36a31d33fe94
- React-utils: 2f9ba0088251788ad66aa1855ff99ed2424024d2
- ReactAppDependencyProvider: 1bcd3527ac0390a1c898c114f81ff954be35ed79
- ReactCodegen: 2e921a931c5a4dd1d8ab37ade085fdf58fcfe1dd
- ReactCommon: 6d0fa86a4510730da7c72560e0ced14258292ab9
+ React-NativeModulesApple: 8c7eb6057b00c191a11ad5ced41826ec5a0e4d78
+ React-oscompat: 93b5535ea7f7dff46aaee4f78309a70979bdde9d
+ React-perflogger: 5536d2df3d18fe0920263466f7b46a56351c0510
+ React-performancetimeline: c6c9393c1a0453a51e1852e3531defe60790b36c
+ React-RCTActionSheet: 42195ae666e6d79b4af2346770f765b7c29435b9
+ React-RCTAnimation: fa103ccc3503b1ed8dedca7e62e7823937748843
+ React-RCTAppDelegate: 665d4baf19424cef08276e9ac0d8771eec4519f9
+ React-RCTBlob: 0fa9530c255644db095f2c4fd8d89738d9d9ecc0
+ React-RCTFabric: 95eb4a92c5c166e21bae07231d327174e56f202d
+ React-RCTFBReactNativeSpec: fd66225b71f902a8bfa939fb5f7ec743958298df
+ React-RCTImage: ba824e61ce2e920a239a65d130b83c3a1d426dff
+ React-RCTLinking: d2dc199c37e71e6f505d9eca3e5c33be930014d4
+ React-RCTNetwork: 87137d4b9bd77e5068f854dd5c1f30d4b072faf6
+ React-RCTRuntime: b10bd5e5506af0d6205c4101dd1560fe7beead95
+ React-RCTSettings: 71f5c7fd7b5f4e725a4e2114a4b4373d0e46048f
+ React-RCTText: b94d4699b49285bee22b8ebf768924d607eccee3
+ React-RCTVibration: 6e3993c4f6c36a3899059f9a9ead560ddaf5a7d7
+ React-rendererconsistency: 612d0f6603d9837bb1236d7fd5194203b35c8799
+ React-renderercss: e5c2c3b84976f7a587cde8423c671db07a6a77da
+ React-rendererdebug: cc7a6131733605b8897754f72c0c35c79f77da9e
+ React-RuntimeApple: 3f96102fc1ebf738d36719cdce5422a5769293fb
+ React-RuntimeCore: f05563107927f155180dfa008fed2ac1316a6aec
+ React-runtimeexecutor: dd3ec3b76761b43e7b37d07a70de91fc1dd24e7e
+ React-RuntimeHermes: 7fcb384acc111ea21bcffe2e4a15f31b58bb702e
+ React-runtimescheduler: 7d2eaa4e7d652a391f47df7ff510260413429bd9
+ React-timing: f5d4ba74be96a24b9b2a1a910142ed14e03013d9
+ React-utils: eb92d1db56a9bb5911b2c77fb4c2e8d331c8b9dd
+ ReactAppDependencyProvider: 433ddfb4536948630aadd5bd925aff8a632d2fe3
+ ReactCodegen: 2cfa890e84ecf7f3a708f1ed9c0f2c0b22a23c9a
+ ReactCommon: e9ab32f1d1482d207867b4fdd139361302b9dcc6
RecaptchaInterop: 11e0b637842dfb48308d242afc3f448062325aba
RestartNewArch: 658794e23d94410cb51e6f8c1831edadf09c77b2
RNCAsyncStorage: fd44f4b03e007e642e98df6726737bc66e9ba609
RNCMaskedView: d707a83784c67099b54b37d056ababb2767ce15e
RNDeviceInfo: bcce8752b5043a623fe3c26789679b473f705d3c
- RNFBApp: 0211ae65fadcb017cc787b2bd539847330687b93
- RNFBAuth: 867bf4293ca2d48c7266d9eff9e970f882331578
- RNFBCrashlytics: 25573e9e170a6bd9b5c48d3fab6611405e7b500b
- RNFBFirestore: bde0e0ad46387b6e88fdefa530fcdcba0468c538
- RNFBFunctions: 8ea7a8f1d95e5cbaa61dae4ef9af81142d23d327
- RNFBMessaging: 97dc90cb79d1d015250d9d10032c920f1d49c354
- RNFBStorage: 5c21c866bfd7c9e1c0c2f25d5de1a424b83f620e
+ RNFBApp: 59a5f1280d8c7d48ed5cb658682ed12904bca65e
+ RNFBAuth: dd62a2385ba9bca1532108ae77cd983ef37be556
+ RNFBCrashlytics: be487839f66b7339b49e9fd56463bcfbaa43a66d
+ RNFBFirestore: f4722afdf9ae700f76a72c76f109c2368465092b
+ RNFBFunctions: 0ca089c5cd66c4697fb679f26c3bae052c583a8b
+ RNFBMessaging: 296600da7f02e92bb6631c11ef5e19bc1b89a54d
+ RNFBStorage: be773adcf213c4e22a33d0a277c1ff64d11e75f4
RNGestureHandler: b8d2e75c2e88fc2a1f6be3b3beeeed80b88fa37d
RNLocalize: a0bf70cf27f116db4e32be09a6f549715db0686d
RNQrGenerator: 52e7e215efc31a88dc2cdbfa97903b6ab486ced9
@@ -5346,7 +5531,7 @@ SPEC CHECKSUMS:
spark-sdk: 5fb05f37f18abd8a480f1ea994fabdd7b14b1e7f
UMAppLoader: e1234c45d2b7da239e9e90fc4bbeacee12afd5b6
VisionCamera: 7187b3dac1ff3071234ead959ce311875748e14f
- Yoga: cc4a6600d61e4e9276e860d4d68eebb834a050ba
+ Yoga: 9b30b783a17681321b52ac507a37219d7d795ace
ZXingObjC: 8898711ab495761b2dbbdec76d90164a6d7e14c5
PODFILE CHECKSUM: b32f867d7020aa569d4ef0fb33463b7ae90bf924
diff --git a/locales/de-DE/translation.json b/locales/de-DE/translation.json
index dcc6902f..9e044ed9 100644
--- a/locales/de-DE/translation.json
+++ b/locales/de-DE/translation.json
@@ -2037,7 +2037,8 @@
"quoteId": "Angebots-ID",
"destinationAddress": "Zieladresse",
"destinationAsset": "Ziel-Asset",
- "destinationChain": "Ziel-Kette"
+ "destinationChain": "Ziel-Kette",
+ "transferIds": "Enthaltene Personen"
},
"viewAllTxPage": {
"title": "Transaktionen",
diff --git a/locales/en/translation.json b/locales/en/translation.json
index aa9f4f22..69ff43f0 100644
--- a/locales/en/translation.json
+++ b/locales/en/translation.json
@@ -2037,7 +2037,8 @@
"quoteId": "Quote ID",
"destinationAddress": "Destination Address",
"destinationAsset": "Destination Asset",
- "destinationChain": "Destination Chain"
+ "destinationChain": "Destination Chain",
+ "transferIds": "People Included"
},
"viewAllTxPage": {
"title": "Transactions",
diff --git a/locales/es/translation.json b/locales/es/translation.json
index 4f1f73e6..927f35ac 100644
--- a/locales/es/translation.json
+++ b/locales/es/translation.json
@@ -2037,7 +2037,8 @@
"quoteId": "ID de Cotización",
"destinationAddress": "Dirección de Destino",
"destinationAsset": "Activo de Destino",
- "destinationChain": "Cadena de Destino"
+ "destinationChain": "Cadena de Destino",
+ "transferIds": "Personas incluidas"
},
"viewAllTxPage": {
"title": "Transacciones",
diff --git a/locales/fr/translation.json b/locales/fr/translation.json
index cf6edeea..08ad16b1 100644
--- a/locales/fr/translation.json
+++ b/locales/fr/translation.json
@@ -2037,7 +2037,8 @@
"quoteId": "ID du Devis",
"destinationAddress": "Adresse de Destination",
"destinationAsset": "Actif de Destination",
- "destinationChain": "Chaîne de Destination"
+ "destinationChain": "Chaîne de Destination",
+ "transferIds": "Personnes incluses"
},
"viewAllTxPage": {
"title": "Transactions",
diff --git a/locales/it/translation.json b/locales/it/translation.json
index 3e7a5e15..4fa3cf7b 100644
--- a/locales/it/translation.json
+++ b/locales/it/translation.json
@@ -2037,7 +2037,8 @@
"quoteId": "ID Quotazione",
"destinationAddress": "Indirizzo di Destinazione",
"destinationAsset": "Asset di Destinazione",
- "destinationChain": "Catena di Destinazione"
+ "destinationChain": "Catena di Destinazione",
+ "transferIds": "Persone incluse"
},
"viewAllTxPage": {
"title": "Transazioni",
diff --git a/locales/pt-BR/translation.json b/locales/pt-BR/translation.json
index 655e8081..1feceb9d 100644
--- a/locales/pt-BR/translation.json
+++ b/locales/pt-BR/translation.json
@@ -2037,7 +2037,8 @@
"quoteId": "ID da cotação",
"destinationAddress": "Endereço de destino",
"destinationAsset": "Moeda de destino",
- "destinationChain": "Rede de destino"
+ "destinationChain": "Rede de destino",
+ "transferIds": "Pessoas incluídas"
},
"viewAllTxPage": {
"title": "Transações",
diff --git a/locales/ru/translation.json b/locales/ru/translation.json
index 849ec93c..faee160d 100644
--- a/locales/ru/translation.json
+++ b/locales/ru/translation.json
@@ -2038,7 +2038,8 @@
"quoteId": "ID котировки",
"destinationAddress": "Адрес назначения",
"destinationAsset": "Актив назначения",
- "destinationChain": "Сеть назначения"
+ "destinationChain": "Сеть назначения",
+ "transferIds": "Включённые участники"
},
"viewAllTxPage": {
"title": "Транзакции",
diff --git a/locales/sv/translation.json b/locales/sv/translation.json
index 86fc33f2..6c420dc8 100644
--- a/locales/sv/translation.json
+++ b/locales/sv/translation.json
@@ -2037,7 +2037,8 @@
"quoteId": "Offert-ID",
"destinationAddress": "Destinationsadress",
"destinationAsset": "Destinations-tillgång",
- "destinationChain": "Destinations-kedja"
+ "destinationChain": "Destinations-kedja",
+ "transferIds": "Inkluderade personer"
},
"viewAllTxPage": {
"title": "Transaktioner",
diff --git a/package.json b/package.json
index bbc842d2..8680e38b 100644
--- a/package.json
+++ b/package.json
@@ -25,13 +25,13 @@
"@noble/hashes": "^1.8.0",
"@noble/secp256k1": "^3.0.0",
"@react-native-async-storage/async-storage": "2.2.0",
- "@react-native-firebase/app": "^23.4.0",
- "@react-native-firebase/auth": "^23.4.0",
- "@react-native-firebase/crashlytics": "^23.4.0",
- "@react-native-firebase/firestore": "^23.4.0",
- "@react-native-firebase/functions": "^23.4.0",
- "@react-native-firebase/messaging": "^23.4.0",
- "@react-native-firebase/storage": "^23.4.0",
+ "@react-native-firebase/app": "^24.0.0",
+ "@react-native-firebase/auth": "^24.0.0",
+ "@react-native-firebase/crashlytics": "^24.0.0",
+ "@react-native-firebase/firestore": "^24.0.0",
+ "@react-native-firebase/functions": "^24.0.0",
+ "@react-native-firebase/messaging": "^24.0.0",
+ "@react-native-firebase/storage": "^24.0.0",
"@react-native-masked-view/masked-view": "^0.3.2",
"@react-navigation/bottom-tabs": "^7.3.13",
"@react-navigation/drawer": "^7.3.12",
@@ -78,7 +78,7 @@
"nostr-tools": "^2.15.0",
"react": "19.1.0",
"react-i18next": "^16.0.0",
- "react-native": "0.81.5",
+ "react-native": "0.81.4",
"react-native-context-menu-view": "^1.19.0",
"react-native-country-flag": "^2.0.2",
"react-native-country-picker-modal": "^2.0.0",
@@ -93,7 +93,7 @@
"react-native-pdf-from-image": "^0.3.6",
"react-native-qrcode-svg": "^6.3.15",
"react-native-quick-base64": "^2.2.2",
- "react-native-quick-crypto": "^1.0.16",
+ "react-native-quick-crypto": "0.7.17",
"react-native-reanimated": "^4.2.2",
"react-native-restart-newarch": "^1.0.85",
"react-native-safe-area-context": "~5.6.0",
@@ -119,10 +119,10 @@
"@react-native-community/cli": "20.0.0",
"@react-native-community/cli-platform-android": "20.0.0",
"@react-native-community/cli-platform-ios": "20.0.0",
- "@react-native/babel-preset": "0.81.5",
- "@react-native/eslint-config": "0.81.5",
- "@react-native/metro-config": "0.81.5",
- "@react-native/typescript-config": "0.81.5",
+ "@react-native/babel-preset": "0.81.4",
+ "@react-native/eslint-config": "0.81.4",
+ "@react-native/metro-config": "0.81.4",
+ "@react-native/typescript-config": "0.81.4",
"@types/jest": "^29.5.13",
"@types/react": "~19.1.10",
"@types/react-test-renderer": "^19.1.0",
diff --git a/yarn.lock b/yarn.lock
index c773c6ce..4355dad4 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -1656,7 +1656,17 @@ __metadata:
languageName: node
linkType: hard
-"@craftzdog/react-native-buffer@npm:6.1.0, @craftzdog/react-native-buffer@npm:^6.1.0":
+"@craftzdog/react-native-buffer@npm:^6.0.5":
+ version: 6.1.1
+ resolution: "@craftzdog/react-native-buffer@npm:6.1.1"
+ dependencies:
+ ieee754: ^1.2.1
+ react-native-quick-base64: ^2.2.2
+ checksum: bf8ae64b9631b14677d667c07c82fe6397ef5f317f58ab3d3617a716da757bd0eaf9cc092687103bc3f1448f095305be9672fb10d036331ed0ad4590b3036959
+ languageName: node
+ linkType: hard
+
+"@craftzdog/react-native-buffer@npm:^6.1.0":
version: 6.1.0
resolution: "@craftzdog/react-native-buffer@npm:6.1.0"
dependencies:
@@ -2166,34 +2176,34 @@ __metadata:
languageName: node
linkType: hard
-"@firebase/ai@npm:2.2.1":
- version: 2.2.1
- resolution: "@firebase/ai@npm:2.2.1"
+"@firebase/ai@npm:2.9.0":
+ version: 2.9.0
+ resolution: "@firebase/ai@npm:2.9.0"
dependencies:
"@firebase/app-check-interop-types": 0.3.3
- "@firebase/component": 0.7.0
+ "@firebase/component": 0.7.1
"@firebase/logger": 0.5.0
- "@firebase/util": 1.13.0
+ "@firebase/util": 1.14.0
tslib: ^2.1.0
peerDependencies:
"@firebase/app": 0.x
"@firebase/app-types": 0.x
- checksum: 7011f16c66e948e58e8a0e40e6fce6ef5bbd48afc8550f8c569ee77991ba497a981e95bb3a81357e957824f73b5183abbd753b12615375dfc83a957962f6fa59
+ checksum: 04b5eb35946f53b1aa3c30214d607d6409f53173609a5cf9deb7fd8ae318fd2880afbdf8a2a7cdd1eef8ce10dcd5ba58b3495672738b6014a0bd16ad166a4387
languageName: node
linkType: hard
-"@firebase/analytics-compat@npm:0.2.24":
- version: 0.2.24
- resolution: "@firebase/analytics-compat@npm:0.2.24"
+"@firebase/analytics-compat@npm:0.2.26":
+ version: 0.2.26
+ resolution: "@firebase/analytics-compat@npm:0.2.26"
dependencies:
- "@firebase/analytics": 0.10.18
+ "@firebase/analytics": 0.10.20
"@firebase/analytics-types": 0.8.3
- "@firebase/component": 0.7.0
- "@firebase/util": 1.13.0
+ "@firebase/component": 0.7.1
+ "@firebase/util": 1.14.0
tslib: ^2.1.0
peerDependencies:
"@firebase/app-compat": 0.x
- checksum: 4c3579bf8d2c24d5d6c84d0dce455c1cbcafa9bb474518b26c7c417b661f1a2d542f274688b16ba43a8b6e1c6225ffcc1c0e3175aa466bc067beabcdf3cb713d
+ checksum: e3250962fe490505027366a4d0c91f88f6b7bf31c56a6904911940274abc7f9d30b58b15a13c9d849154910ceb26320470aa477d42f693ac1175c6d0eaccf8fd
languageName: node
linkType: hard
@@ -2204,34 +2214,34 @@ __metadata:
languageName: node
linkType: hard
-"@firebase/analytics@npm:0.10.18":
- version: 0.10.18
- resolution: "@firebase/analytics@npm:0.10.18"
+"@firebase/analytics@npm:0.10.20":
+ version: 0.10.20
+ resolution: "@firebase/analytics@npm:0.10.20"
dependencies:
- "@firebase/component": 0.7.0
- "@firebase/installations": 0.6.19
+ "@firebase/component": 0.7.1
+ "@firebase/installations": 0.6.20
"@firebase/logger": 0.5.0
- "@firebase/util": 1.13.0
+ "@firebase/util": 1.14.0
tslib: ^2.1.0
peerDependencies:
"@firebase/app": 0.x
- checksum: f7d2e1d3a2c7587349236880d8be1d508e004ead18360706f842a87b5a7ad15b7bbc7f7f1f4244eeedb8eaae0fa1fff2053e77f60d28c2d3e0413fb4363b07fd
+ checksum: 1584a640489d8b37bb82112e0f180d69f8ba076ebae8a3323ebaf374de8b2cd9e513ba4838a4ef63cbfe955565b32b8bfe8d617020b4c00070c70e493f5ab72e
languageName: node
linkType: hard
-"@firebase/app-check-compat@npm:0.4.0":
- version: 0.4.0
- resolution: "@firebase/app-check-compat@npm:0.4.0"
+"@firebase/app-check-compat@npm:0.4.1":
+ version: 0.4.1
+ resolution: "@firebase/app-check-compat@npm:0.4.1"
dependencies:
- "@firebase/app-check": 0.11.0
+ "@firebase/app-check": 0.11.1
"@firebase/app-check-types": 0.5.3
- "@firebase/component": 0.7.0
+ "@firebase/component": 0.7.1
"@firebase/logger": 0.5.0
- "@firebase/util": 1.13.0
+ "@firebase/util": 1.14.0
tslib: ^2.1.0
peerDependencies:
"@firebase/app-compat": 0.x
- checksum: 9302a1d454a96453c9a6ef4c19c0d4c0e406fe8f9d7b151428f69c3148786eb01212fb56b82e69d17be0c7f3b96c9fb407ee53c3761933f233f159836870c1c8
+ checksum: 8893ef043f91653d5a980752dbc5a3ad0a18d5e3e50774dfb6f7ff7be40befecc9aeb72cdd3e15d3277827be89ce2c71c5d2740a120432e210e142b02b34bc8b
languageName: node
linkType: hard
@@ -2249,30 +2259,30 @@ __metadata:
languageName: node
linkType: hard
-"@firebase/app-check@npm:0.11.0":
- version: 0.11.0
- resolution: "@firebase/app-check@npm:0.11.0"
+"@firebase/app-check@npm:0.11.1":
+ version: 0.11.1
+ resolution: "@firebase/app-check@npm:0.11.1"
dependencies:
- "@firebase/component": 0.7.0
+ "@firebase/component": 0.7.1
"@firebase/logger": 0.5.0
- "@firebase/util": 1.13.0
+ "@firebase/util": 1.14.0
tslib: ^2.1.0
peerDependencies:
"@firebase/app": 0.x
- checksum: df7d57d2e0da3954e45692e63769e4e2b3ffa57ade441a3510e06a0c9e8ea22e925dbe45393065299e6e5360031a1bb109138a657580e59365f8155a9da4b843
+ checksum: f4ee6186ebfd78e8ce5373a19c9f5b7b3d7e6f52e2149a0a82e235e63ca8c7120e6fde20c37c2c259399bcfd62038b8adbf60a856a1934da5a61a5769397a523
languageName: node
linkType: hard
-"@firebase/app-compat@npm:0.5.2":
- version: 0.5.2
- resolution: "@firebase/app-compat@npm:0.5.2"
+"@firebase/app-compat@npm:0.5.9":
+ version: 0.5.9
+ resolution: "@firebase/app-compat@npm:0.5.9"
dependencies:
- "@firebase/app": 0.14.2
- "@firebase/component": 0.7.0
+ "@firebase/app": 0.14.9
+ "@firebase/component": 0.7.1
"@firebase/logger": 0.5.0
- "@firebase/util": 1.13.0
+ "@firebase/util": 1.14.0
tslib: ^2.1.0
- checksum: a78f8065a93ac3635e8ecb79e274ce37ed482d6a32bfeef0dcb3f8e7ff2333499853da874d82871f0a7c7b538376af6c22d9c150156a505cb92cc21d428b6ffc
+ checksum: d2989f4d9d1d86ffd4fde93da3d8a6ef897df0eb2f6b7775159862b9efedcce48d33a2a5f31744117fa546e23c38fb0aeea815977b569b40414e706c302f6122
languageName: node
linkType: hard
@@ -2283,31 +2293,31 @@ __metadata:
languageName: node
linkType: hard
-"@firebase/app@npm:0.14.2":
- version: 0.14.2
- resolution: "@firebase/app@npm:0.14.2"
+"@firebase/app@npm:0.14.9":
+ version: 0.14.9
+ resolution: "@firebase/app@npm:0.14.9"
dependencies:
- "@firebase/component": 0.7.0
+ "@firebase/component": 0.7.1
"@firebase/logger": 0.5.0
- "@firebase/util": 1.13.0
+ "@firebase/util": 1.14.0
idb: 7.1.1
tslib: ^2.1.0
- checksum: a1a48de2f8a356c846729482ebd3ff398c617ed0c9211963beb9b1a3b0b2c83ef0ab4909b86135cfb7d653b150d1d5263d25fac577a20db75964e71e29f84f7e
+ checksum: afc17b985d56d5e9b0ca3d7eb11164325084fa9b594f6ecd85d526660dc18ccaa3e8c5bf1b34ccfd24a510974c98009b73a91e002ec9df7a13946e5558991f60
languageName: node
linkType: hard
-"@firebase/auth-compat@npm:0.6.0":
- version: 0.6.0
- resolution: "@firebase/auth-compat@npm:0.6.0"
+"@firebase/auth-compat@npm:0.6.3":
+ version: 0.6.3
+ resolution: "@firebase/auth-compat@npm:0.6.3"
dependencies:
- "@firebase/auth": 1.11.0
+ "@firebase/auth": 1.12.1
"@firebase/auth-types": 0.13.0
- "@firebase/component": 0.7.0
- "@firebase/util": 1.13.0
+ "@firebase/component": 0.7.1
+ "@firebase/util": 1.14.0
tslib: ^2.1.0
peerDependencies:
"@firebase/app-compat": 0.x
- checksum: 335d0039e49d7cfb80b1b0d647e6b13db436c968bfc5fedc79468197bdcc831dea41e436f2b5654809b23c56aa15151c7219ed9f0882a0fd05a4efcefe5550c7
+ checksum: 3bdacefa2f683a522453bcef1d64d6067ea63b172527b99761b79adc3222e65c4a5351ae023b6bc08fe439e811e389aa993a8fd1b4608d5a3c658bcf90147fc1
languageName: node
linkType: hard
@@ -2328,100 +2338,100 @@ __metadata:
languageName: node
linkType: hard
-"@firebase/auth@npm:1.11.0":
- version: 1.11.0
- resolution: "@firebase/auth@npm:1.11.0"
+"@firebase/auth@npm:1.12.1":
+ version: 1.12.1
+ resolution: "@firebase/auth@npm:1.12.1"
dependencies:
- "@firebase/component": 0.7.0
+ "@firebase/component": 0.7.1
"@firebase/logger": 0.5.0
- "@firebase/util": 1.13.0
+ "@firebase/util": 1.14.0
tslib: ^2.1.0
peerDependencies:
"@firebase/app": 0.x
- "@react-native-async-storage/async-storage": ^1.18.1
+ "@react-native-async-storage/async-storage": ^2.2.0
peerDependenciesMeta:
"@react-native-async-storage/async-storage":
optional: true
- checksum: 41cb98104ccf47c93c8ca35b73af583bc6237e38c99a2ccc8107594801525f291d4978b1f3ec1aa32b2ca9b01c198bd5ba716004403db9c3dbe049708cfa4966
+ checksum: cb79e50a1bb42195ecbc7a8fb4c76aaee3452252f08b3b1b3f160f25b3510d784f7fa784904dbdc09aa6676623451a1ed3b3b4a372d3ea093551bd7b917964bb
languageName: node
linkType: hard
-"@firebase/component@npm:0.7.0":
- version: 0.7.0
- resolution: "@firebase/component@npm:0.7.0"
+"@firebase/component@npm:0.7.1":
+ version: 0.7.1
+ resolution: "@firebase/component@npm:0.7.1"
dependencies:
- "@firebase/util": 1.13.0
+ "@firebase/util": 1.14.0
tslib: ^2.1.0
- checksum: 0db5c9d0ea427add4501692f4e2251175c805242d1e7f953fb59f118319dec6dd256f36fbcfa2abfd8a8c996aeaf9f76e20dbc35076deefc85b04aa31af6297c
+ checksum: 97726c1055280e4f2c055c248d71b8a08e90414dac88ea0bc14610669e7d2b333085ef5c7c8f2a35594a23e85204deed2dee80b75fa43af67d46edc61027fdbe
languageName: node
linkType: hard
-"@firebase/data-connect@npm:0.3.11":
- version: 0.3.11
- resolution: "@firebase/data-connect@npm:0.3.11"
+"@firebase/data-connect@npm:0.4.0":
+ version: 0.4.0
+ resolution: "@firebase/data-connect@npm:0.4.0"
dependencies:
"@firebase/auth-interop-types": 0.2.4
- "@firebase/component": 0.7.0
+ "@firebase/component": 0.7.1
"@firebase/logger": 0.5.0
- "@firebase/util": 1.13.0
+ "@firebase/util": 1.14.0
tslib: ^2.1.0
peerDependencies:
"@firebase/app": 0.x
- checksum: 1f3ee6d3eadec4a25563cce799e9e68e14b98372833318ad4da527cf64ecb8cb3ea2edc4609161734a4ffce028ae269f63488164db408ec772817cdecca6f95d
+ checksum: 25fa48ef05b23c71d3e83df02180bcb0652bcda279e71a5571a138586cda635ef3890a62d1e95c3b162b94604e038ba752da330a586988a3e164e065d237b1ca
languageName: node
linkType: hard
-"@firebase/database-compat@npm:2.1.0":
- version: 2.1.0
- resolution: "@firebase/database-compat@npm:2.1.0"
+"@firebase/database-compat@npm:2.1.1":
+ version: 2.1.1
+ resolution: "@firebase/database-compat@npm:2.1.1"
dependencies:
- "@firebase/component": 0.7.0
- "@firebase/database": 1.1.0
- "@firebase/database-types": 1.0.16
+ "@firebase/component": 0.7.1
+ "@firebase/database": 1.1.1
+ "@firebase/database-types": 1.0.17
"@firebase/logger": 0.5.0
- "@firebase/util": 1.13.0
+ "@firebase/util": 1.14.0
tslib: ^2.1.0
- checksum: 454a023dafe11dfc56031c7c02fa89b2d98fd9191d4f347cb37153e7e00e98be77fa30bf81eabfa2d0331264deb2aa861580998f10e64f4716dbfacf9bc49b40
+ checksum: a33dd38271772c11a47f0d893ca1998ad96fc2319d44384f0ba84e13f9c735048619b2ab416e2ae7c5c7c339dd0072b803d9412ad9e176b4c9e5f7d3dde9398b
languageName: node
linkType: hard
-"@firebase/database-types@npm:1.0.16":
- version: 1.0.16
- resolution: "@firebase/database-types@npm:1.0.16"
+"@firebase/database-types@npm:1.0.17":
+ version: 1.0.17
+ resolution: "@firebase/database-types@npm:1.0.17"
dependencies:
"@firebase/app-types": 0.9.3
- "@firebase/util": 1.13.0
- checksum: df60c8635b442a3bbe35b3a04a7a2569f4e01c3b13e65e775079254ed34b7988ed73954685f9fb4f55359902c931aad0d49ac7b052d74f39222eb69bd18c97db
+ "@firebase/util": 1.14.0
+ checksum: 3e94ee958f7d8d62a8a86e278e91a7437819bac1b6ae5cc0953198ee692be96441e771c4e2cc97cc18b5412d27f0e8a85ed2334ea90366a6071ac864145daa51
languageName: node
linkType: hard
-"@firebase/database@npm:1.1.0":
- version: 1.1.0
- resolution: "@firebase/database@npm:1.1.0"
+"@firebase/database@npm:1.1.1":
+ version: 1.1.1
+ resolution: "@firebase/database@npm:1.1.1"
dependencies:
"@firebase/app-check-interop-types": 0.3.3
"@firebase/auth-interop-types": 0.2.4
- "@firebase/component": 0.7.0
+ "@firebase/component": 0.7.1
"@firebase/logger": 0.5.0
- "@firebase/util": 1.13.0
+ "@firebase/util": 1.14.0
faye-websocket: 0.11.4
tslib: ^2.1.0
- checksum: acac0dfb088c3246c4064f31489f16dd0e2cd2fd4803e62732544b4d1cf144808d25674e76ce5029cfa59488e9f3639e29c95198b663002c477ac45113b6fee7
+ checksum: 184a71cd95dde67e30e45c536afaaf09f82a7905adc7cec84be44a1e4bb4fbfa7e1b846274403b0038d897e70f94049fbc6b2e322a9599991d14d6484c2bc556
languageName: node
linkType: hard
-"@firebase/firestore-compat@npm:0.4.1":
- version: 0.4.1
- resolution: "@firebase/firestore-compat@npm:0.4.1"
+"@firebase/firestore-compat@npm:0.4.6":
+ version: 0.4.6
+ resolution: "@firebase/firestore-compat@npm:0.4.6"
dependencies:
- "@firebase/component": 0.7.0
- "@firebase/firestore": 4.9.1
+ "@firebase/component": 0.7.1
+ "@firebase/firestore": 4.12.0
"@firebase/firestore-types": 3.0.3
- "@firebase/util": 1.13.0
+ "@firebase/util": 1.14.0
tslib: ^2.1.0
peerDependencies:
"@firebase/app-compat": 0.x
- checksum: 805df6d0987249b0afa14d6969f29cec671b960b187ad55361078cac97decbbb789846470108570b72aed51a395b1b3f5a79c5e42e6d6784908c1ed27f45faf2
+ checksum: c5512c4596e04c62f9d9425c2b470492c6e0c3d6ad52e45f581b138a1be66c4f1c83ff9fac43616d6ed3d461b63d4b6a8e10aa1d37b20c4a85dc488f4d53a6cc
languageName: node
linkType: hard
@@ -2435,35 +2445,35 @@ __metadata:
languageName: node
linkType: hard
-"@firebase/firestore@npm:4.9.1":
- version: 4.9.1
- resolution: "@firebase/firestore@npm:4.9.1"
+"@firebase/firestore@npm:4.12.0":
+ version: 4.12.0
+ resolution: "@firebase/firestore@npm:4.12.0"
dependencies:
- "@firebase/component": 0.7.0
+ "@firebase/component": 0.7.1
"@firebase/logger": 0.5.0
- "@firebase/util": 1.13.0
- "@firebase/webchannel-wrapper": 1.0.4
+ "@firebase/util": 1.14.0
+ "@firebase/webchannel-wrapper": 1.0.5
"@grpc/grpc-js": ~1.9.0
"@grpc/proto-loader": ^0.7.8
tslib: ^2.1.0
peerDependencies:
"@firebase/app": 0.x
- checksum: c8f7ff062e0f86bc2bf69a24d7c14ad98cdd417df1839dbae9647f99f4fac900eca6cd5885e6595b40fa78667caee380b594c4002eb1a5284a9eda87c1cc1aa1
+ checksum: d33b0f49b035fb2482cf5cf746710658fd07b73073af3c0517a37922ba0e281e758f6cbb231f393e8a245edb7142335ac4b931faea3cf440ff2cd247a86dff10
languageName: node
linkType: hard
-"@firebase/functions-compat@npm:0.4.1":
- version: 0.4.1
- resolution: "@firebase/functions-compat@npm:0.4.1"
+"@firebase/functions-compat@npm:0.4.2":
+ version: 0.4.2
+ resolution: "@firebase/functions-compat@npm:0.4.2"
dependencies:
- "@firebase/component": 0.7.0
- "@firebase/functions": 0.13.1
+ "@firebase/component": 0.7.1
+ "@firebase/functions": 0.13.2
"@firebase/functions-types": 0.6.3
- "@firebase/util": 1.13.0
+ "@firebase/util": 1.14.0
tslib: ^2.1.0
peerDependencies:
"@firebase/app-compat": 0.x
- checksum: 513ab515e44725aa6ef935312ea78ebb13c80df89433e7e1f27d4dcd8ad7aa30ebf0db764b971343d39f77a8f2d283503a9d9296c00f825eef6f7c31c1b2ef0d
+ checksum: d712b63f4667274029be52c99eabfd0229d69c7ad5ba267050fcc3f17d7bc59325160ba5130ed6f42e2c8194f45822610291cb4ba67a6a738dfcf7fc8b7aa251
languageName: node
linkType: hard
@@ -2474,34 +2484,34 @@ __metadata:
languageName: node
linkType: hard
-"@firebase/functions@npm:0.13.1":
- version: 0.13.1
- resolution: "@firebase/functions@npm:0.13.1"
+"@firebase/functions@npm:0.13.2":
+ version: 0.13.2
+ resolution: "@firebase/functions@npm:0.13.2"
dependencies:
"@firebase/app-check-interop-types": 0.3.3
"@firebase/auth-interop-types": 0.2.4
- "@firebase/component": 0.7.0
+ "@firebase/component": 0.7.1
"@firebase/messaging-interop-types": 0.2.3
- "@firebase/util": 1.13.0
+ "@firebase/util": 1.14.0
tslib: ^2.1.0
peerDependencies:
"@firebase/app": 0.x
- checksum: 1eb3cb9e9cdb232691f07f1f8701059c051ff737afc6f5e6009b2784ab1fe3cc5a204a7ae79c0e5efa70c5d7e8a8ca13e3e87ff80bd8109c8bdf17d215cce378
+ checksum: e5011068f1d1ca792da4f574dec2f27d32a581d1acb7c2ca48d2b0877be06a006c751b6a06dc866e2dfefbcfce9c3f3302a32e34b1bc80c0977b8029890d725c
languageName: node
linkType: hard
-"@firebase/installations-compat@npm:0.2.19":
- version: 0.2.19
- resolution: "@firebase/installations-compat@npm:0.2.19"
+"@firebase/installations-compat@npm:0.2.20":
+ version: 0.2.20
+ resolution: "@firebase/installations-compat@npm:0.2.20"
dependencies:
- "@firebase/component": 0.7.0
- "@firebase/installations": 0.6.19
+ "@firebase/component": 0.7.1
+ "@firebase/installations": 0.6.20
"@firebase/installations-types": 0.5.3
- "@firebase/util": 1.13.0
+ "@firebase/util": 1.14.0
tslib: ^2.1.0
peerDependencies:
"@firebase/app-compat": 0.x
- checksum: a72d1e1026dd86ac77eb596bc171324e3884866640321745551a948bc3f5f83cfd986f258c9bba5cd34334d3b08bc6f90fe4c30835b6549e765098d267ef35ed
+ checksum: 8f21f123ab2afbe20ec47e680a86aba73abec9ced556714d1d035cfe0a464a2f1c141d00da4b19a561cd7922333cc0de14d5e30ae90d627f51548ca5ad931b64
languageName: node
linkType: hard
@@ -2514,17 +2524,17 @@ __metadata:
languageName: node
linkType: hard
-"@firebase/installations@npm:0.6.19":
- version: 0.6.19
- resolution: "@firebase/installations@npm:0.6.19"
+"@firebase/installations@npm:0.6.20":
+ version: 0.6.20
+ resolution: "@firebase/installations@npm:0.6.20"
dependencies:
- "@firebase/component": 0.7.0
- "@firebase/util": 1.13.0
+ "@firebase/component": 0.7.1
+ "@firebase/util": 1.14.0
idb: 7.1.1
tslib: ^2.1.0
peerDependencies:
"@firebase/app": 0.x
- checksum: ec9cb1d18338b2a08446d8731c833fdef968d8d8219c1c28613af9502841cd0091c6cdc9222100d33db87554061555398c650d1728116ca024639072996fc3d1
+ checksum: 8be9bc8fa82fd594d84a30bce26004ac71fe68afe10d93ae6d470dbc490c1802af097b0214c41532dde3f3830228566dee664c953eee932ac752654b105d8582
languageName: node
linkType: hard
@@ -2537,17 +2547,17 @@ __metadata:
languageName: node
linkType: hard
-"@firebase/messaging-compat@npm:0.2.23":
- version: 0.2.23
- resolution: "@firebase/messaging-compat@npm:0.2.23"
+"@firebase/messaging-compat@npm:0.2.24":
+ version: 0.2.24
+ resolution: "@firebase/messaging-compat@npm:0.2.24"
dependencies:
- "@firebase/component": 0.7.0
- "@firebase/messaging": 0.12.23
- "@firebase/util": 1.13.0
+ "@firebase/component": 0.7.1
+ "@firebase/messaging": 0.12.24
+ "@firebase/util": 1.14.0
tslib: ^2.1.0
peerDependencies:
"@firebase/app-compat": 0.x
- checksum: c52ac4f279edfcfcc506752ad54f89497d6f79c1a9616d57f6ff24014fc1700ba46c1bdbe310330868103a4a55c6dbb30e7784089663b335e58952a10765ce6d
+ checksum: b3b0f269832bbdafac7ef1baf73ba46d1e5cbe076625ea1aa1bdf6e0d11b355e8e6a2afc66bc02ebf5b56e1a21e52ae44099d3fc3cecd0321ded724d34f63890
languageName: node
linkType: hard
@@ -2558,35 +2568,35 @@ __metadata:
languageName: node
linkType: hard
-"@firebase/messaging@npm:0.12.23":
- version: 0.12.23
- resolution: "@firebase/messaging@npm:0.12.23"
+"@firebase/messaging@npm:0.12.24":
+ version: 0.12.24
+ resolution: "@firebase/messaging@npm:0.12.24"
dependencies:
- "@firebase/component": 0.7.0
- "@firebase/installations": 0.6.19
+ "@firebase/component": 0.7.1
+ "@firebase/installations": 0.6.20
"@firebase/messaging-interop-types": 0.2.3
- "@firebase/util": 1.13.0
+ "@firebase/util": 1.14.0
idb: 7.1.1
tslib: ^2.1.0
peerDependencies:
"@firebase/app": 0.x
- checksum: 5e9edc216b24ce822107de31287d762228b852e3bdf6dea7d47048ca32dc71edb0f01b82d28c280d6cc644c8462f3bba9efa2a9612fb2245a20285019f47dea3
+ checksum: 93c3c151185b048482e9dc3dc9d2eb211759b3d744bffef1c71817cf492ffbaa01dd5a64060fdbab334d3c7746e0380d0b9492017bbf675447edb1a5dcb5f6a8
languageName: node
linkType: hard
-"@firebase/performance-compat@npm:0.2.22":
- version: 0.2.22
- resolution: "@firebase/performance-compat@npm:0.2.22"
+"@firebase/performance-compat@npm:0.2.23":
+ version: 0.2.23
+ resolution: "@firebase/performance-compat@npm:0.2.23"
dependencies:
- "@firebase/component": 0.7.0
+ "@firebase/component": 0.7.1
"@firebase/logger": 0.5.0
- "@firebase/performance": 0.7.9
+ "@firebase/performance": 0.7.10
"@firebase/performance-types": 0.2.3
- "@firebase/util": 1.13.0
+ "@firebase/util": 1.14.0
tslib: ^2.1.0
peerDependencies:
"@firebase/app-compat": 0.x
- checksum: 5cfc54ab3a4f4ddd2fe6577cc6f78c02e5a23e0f70792cc178897fffece02cc3eeaf4e9d544c57cc8736510acaea64e75a32a5c545b23acbd95e437d6891e6d4
+ checksum: 03a7c20207b6cbb538b4da439a5e826c15a33736570e4f331b81fe1c8e9d530e8f9c9354740f3b4cab7d95de240156ceee87f60b620f0f101861edd5bab68066
languageName: node
linkType: hard
@@ -2597,72 +2607,72 @@ __metadata:
languageName: node
linkType: hard
-"@firebase/performance@npm:0.7.9":
- version: 0.7.9
- resolution: "@firebase/performance@npm:0.7.9"
+"@firebase/performance@npm:0.7.10":
+ version: 0.7.10
+ resolution: "@firebase/performance@npm:0.7.10"
dependencies:
- "@firebase/component": 0.7.0
- "@firebase/installations": 0.6.19
+ "@firebase/component": 0.7.1
+ "@firebase/installations": 0.6.20
"@firebase/logger": 0.5.0
- "@firebase/util": 1.13.0
+ "@firebase/util": 1.14.0
tslib: ^2.1.0
web-vitals: ^4.2.4
peerDependencies:
"@firebase/app": 0.x
- checksum: d972c6198162847ce0cce2035251bf99eea0212108fdcceda2f4b8a2ad45d396ca54f3e5b345ee4bc3aa7405839e31ce3dee4d16a6a58ccd0c11919c8686a044
+ checksum: 62f31fc16e5987a3213a7311e8bca8e5c037825d66fbf42c8540fed4208964c26f4db8279cf16dc58febe594e38dc224ebb327884be17989eb431656e261db63
languageName: node
linkType: hard
-"@firebase/remote-config-compat@npm:0.2.19":
- version: 0.2.19
- resolution: "@firebase/remote-config-compat@npm:0.2.19"
+"@firebase/remote-config-compat@npm:0.2.22":
+ version: 0.2.22
+ resolution: "@firebase/remote-config-compat@npm:0.2.22"
dependencies:
- "@firebase/component": 0.7.0
+ "@firebase/component": 0.7.1
"@firebase/logger": 0.5.0
- "@firebase/remote-config": 0.6.6
- "@firebase/remote-config-types": 0.4.0
- "@firebase/util": 1.13.0
+ "@firebase/remote-config": 0.8.1
+ "@firebase/remote-config-types": 0.5.0
+ "@firebase/util": 1.14.0
tslib: ^2.1.0
peerDependencies:
"@firebase/app-compat": 0.x
- checksum: fb10c9ee720bc4dfe15cc930c7c9c62be1c3562ac70d8019fb67d459c80a4c4c4b8bd679eeaac7ed9c5cdb07c3ac1b0b5244e2e4ad516ed602e12e10b70c4665
+ checksum: 66852d926228b910a089e5f6fbe989c24a04fe93fca166d07f6f8d4463927fadefb311238f0877619fecfcfabe7f5e6060496fc2d5db7b3f2ddc9077a54cb498
languageName: node
linkType: hard
-"@firebase/remote-config-types@npm:0.4.0":
- version: 0.4.0
- resolution: "@firebase/remote-config-types@npm:0.4.0"
- checksum: 68c2acad00ad9fb3eb92c42683b841667b4f0c11371fc5f3e656294a7ada0044d9bb8bd4e7b763aa23cb8e2e41de511df1ba1ff58bde2ed4488d95aced2d60f9
+"@firebase/remote-config-types@npm:0.5.0":
+ version: 0.5.0
+ resolution: "@firebase/remote-config-types@npm:0.5.0"
+ checksum: 758d2b6d364636b38fdba5abca2489e062cf6080753a2a35fea650d1a60728759fb907940cfedac0993fe5f64baf4699cbf22d369a2fc9b23871d4a5c37e5397
languageName: node
linkType: hard
-"@firebase/remote-config@npm:0.6.6":
- version: 0.6.6
- resolution: "@firebase/remote-config@npm:0.6.6"
+"@firebase/remote-config@npm:0.8.1":
+ version: 0.8.1
+ resolution: "@firebase/remote-config@npm:0.8.1"
dependencies:
- "@firebase/component": 0.7.0
- "@firebase/installations": 0.6.19
+ "@firebase/component": 0.7.1
+ "@firebase/installations": 0.6.20
"@firebase/logger": 0.5.0
- "@firebase/util": 1.13.0
+ "@firebase/util": 1.14.0
tslib: ^2.1.0
peerDependencies:
"@firebase/app": 0.x
- checksum: d5b2f65f8a514ae31becd52f8786ec4d8824d4efbad502be948697d12634abbee41b41a4ca6acff991d26e4766ffa9cb1019bb921aa7f26c892cefd3959d6b59
+ checksum: 77ff6272deff186ffae4e0b342bbc4e99d8ab2028fbdaa53dee4126db542fff493bdf42f1e41a74f5dbf3d9fb04fec66655fd5c81117d15d2fdc7ee495af6abd
languageName: node
linkType: hard
-"@firebase/storage-compat@npm:0.4.0":
- version: 0.4.0
- resolution: "@firebase/storage-compat@npm:0.4.0"
+"@firebase/storage-compat@npm:0.4.1":
+ version: 0.4.1
+ resolution: "@firebase/storage-compat@npm:0.4.1"
dependencies:
- "@firebase/component": 0.7.0
- "@firebase/storage": 0.14.0
+ "@firebase/component": 0.7.1
+ "@firebase/storage": 0.14.1
"@firebase/storage-types": 0.8.3
- "@firebase/util": 1.13.0
+ "@firebase/util": 1.14.0
tslib: ^2.1.0
peerDependencies:
"@firebase/app-compat": 0.x
- checksum: 0bd371846a6b03755f1fd1b347c071d45e191eba2cf9e8f2ba7e17ebe23dfd39df4e8bcac6ad5fa7818ed41ef570f1cfa49d9f4d1844fc0d722ce6655f6844d9
+ checksum: b400d9063357ef8658aef11482b9dbdc186d1988d76336ef6c47d2f7e30f32169c239db6553884e9aca499edc4821c7f201e2119804963dcd972fc24cb0b1598
languageName: node
linkType: hard
@@ -2676,32 +2686,32 @@ __metadata:
languageName: node
linkType: hard
-"@firebase/storage@npm:0.14.0":
- version: 0.14.0
- resolution: "@firebase/storage@npm:0.14.0"
+"@firebase/storage@npm:0.14.1":
+ version: 0.14.1
+ resolution: "@firebase/storage@npm:0.14.1"
dependencies:
- "@firebase/component": 0.7.0
- "@firebase/util": 1.13.0
+ "@firebase/component": 0.7.1
+ "@firebase/util": 1.14.0
tslib: ^2.1.0
peerDependencies:
"@firebase/app": 0.x
- checksum: f36f10360478237e1c5e6cb88129089b1efb69a61f812c8aafbb56dae0a33fcf7e2a5fd20025aaa8ec2a42738592295aa870f5ec1ad7c53990a46b5a09182987
+ checksum: 0d1015ef7c62d8527b4cbb7059f97e1c7937e8b223c8b7b450e54353c37c7df93db72cf9c94c165731fb758850cc44bf03e047a47d4cfe5e9045b7c5bd026520
languageName: node
linkType: hard
-"@firebase/util@npm:1.13.0":
- version: 1.13.0
- resolution: "@firebase/util@npm:1.13.0"
+"@firebase/util@npm:1.14.0":
+ version: 1.14.0
+ resolution: "@firebase/util@npm:1.14.0"
dependencies:
tslib: ^2.1.0
- checksum: 11ce1acf9bfad6b61ea35148d7403b019fcb170deb3103eeac5012aa07989fbfb5f1cfe7876195ac9ea784b58b75162242b08490c74c5cd5d50335c1cf3958c1
+ checksum: 503c413cbd29f3a619df635062416e2d8cb790edf9346c1c597a13bbfa907de0d83f1da0d198d9e2aad34bb91ee6fc39ebe071deedb0844caebe804d4893788a
languageName: node
linkType: hard
-"@firebase/webchannel-wrapper@npm:1.0.4":
- version: 1.0.4
- resolution: "@firebase/webchannel-wrapper@npm:1.0.4"
- checksum: 0691fdae4f7bbe1d178a03ef8d1222e623a638e0abfab948d185461b71632cd2a1f0bf9fae68a2317b241a4fefb7c0277b264619562651ceea15876e7522a884
+"@firebase/webchannel-wrapper@npm:1.0.5":
+ version: 1.0.5
+ resolution: "@firebase/webchannel-wrapper@npm:1.0.5"
+ checksum: 24010527f6b1f026f67bef460e70194d90697ab3d9d14d48fcf142106438ef5acc36fccdcd2afaf51ce66df27ec509b88a7ec36b89f7a18c77aeaa3972680ba0
languageName: node
linkType: hard
@@ -3716,11 +3726,11 @@ __metadata:
languageName: node
linkType: hard
-"@react-native-firebase/app@npm:^23.4.0":
- version: 23.4.0
- resolution: "@react-native-firebase/app@npm:23.4.0"
+"@react-native-firebase/app@npm:^24.0.0":
+ version: 24.0.0
+ resolution: "@react-native-firebase/app@npm:24.0.0"
dependencies:
- firebase: 12.2.1
+ firebase: 12.10.0
peerDependencies:
expo: ">=47.0.0"
react: "*"
@@ -3728,79 +3738,79 @@ __metadata:
peerDependenciesMeta:
expo:
optional: true
- checksum: 3441828e35dc957c002eddbb2a3332d21c6af9f539ac5b8c95adba48344d0d56a78ecdaa6e6ebbf3c12537dc0518f1491337cbd04b73749b863b7f36aeb03923
+ checksum: 90e5b9fa78eabed012789bf09b3e49972087e471231c02c315a3564af2ea11a9cb2c7e152d7121b2c749bf358176dfd0e0c6e5b1ceb6dad3718f192df233c91e
languageName: node
linkType: hard
-"@react-native-firebase/auth@npm:^23.4.0":
- version: 23.4.0
- resolution: "@react-native-firebase/auth@npm:23.4.0"
+"@react-native-firebase/auth@npm:^24.0.0":
+ version: 24.0.0
+ resolution: "@react-native-firebase/auth@npm:24.0.0"
dependencies:
plist: ^3.1.0
peerDependencies:
- "@react-native-firebase/app": 23.4.0
+ "@react-native-firebase/app": 24.0.0
expo: ">=47.0.0"
peerDependenciesMeta:
expo:
optional: true
- checksum: e04166b393455caa5005c9d4bdaea845f41eec6f390349dc749b42a29d731d8cf25335b43624bcd7e7bc645b9cb256941572ba48ca82d89e04f2e8b6c4c349c5
+ checksum: 79bdf6d85a8e5f26c6c867c25f2edcd67539adf85af161fc8243de2962ff81390a4a8e9d6d7e82aa1d106c3c55c84fe8008f7c4462e272e4f941f61b5ab695a3
languageName: node
linkType: hard
-"@react-native-firebase/crashlytics@npm:^23.4.0":
- version: 23.4.0
- resolution: "@react-native-firebase/crashlytics@npm:23.4.0"
+"@react-native-firebase/crashlytics@npm:^24.0.0":
+ version: 24.0.0
+ resolution: "@react-native-firebase/crashlytics@npm:24.0.0"
dependencies:
stacktrace-js: ^2.0.2
peerDependencies:
- "@react-native-firebase/app": 23.4.0
+ "@react-native-firebase/app": 24.0.0
expo: ">=47.0.0"
peerDependenciesMeta:
expo:
optional: true
- checksum: 0e3402f0c5a8515fc45261840978762f4296803c6702e05fdcde0ce8c560a427f17a3cf762e72a167ab0795a3e6f9f92d291af5bfb73798b972b7389a1af2d42
+ checksum: 42c0a3b4e6d9df4ea2bdaeba20107b070f9e24abd40f0008a72167b9ed79cea38a2ec0d371f8e8e6f08e7ac7f43e32547b20775bf114823c8fd5b424281eb1c3
languageName: node
linkType: hard
-"@react-native-firebase/firestore@npm:^23.4.0":
- version: 23.4.0
- resolution: "@react-native-firebase/firestore@npm:23.4.0"
+"@react-native-firebase/firestore@npm:^24.0.0":
+ version: 24.0.0
+ resolution: "@react-native-firebase/firestore@npm:24.0.0"
dependencies:
- react-native-url-polyfill: 2.0.0
+ react-native-url-polyfill: 3.0.0
peerDependencies:
- "@react-native-firebase/app": 23.4.0
- checksum: b0b3fd3bd97187dfbb69e4cbaff38cc85fd02f703d8aae3a0b415e0c8c9219a2208b5d8e0405c9132fa462c3b20bd614f835276d75300be979b93c6a4da4a4b8
+ "@react-native-firebase/app": 24.0.0
+ checksum: e6ee63e33e106b01dd6c2e995dab0ff22c3ebdb3f2b41b23941eef0e4697d983789a53b63f1b5c957e079bd9c01e166131b8cec1224b0d5bafe789307f492169
languageName: node
linkType: hard
-"@react-native-firebase/functions@npm:^23.4.0":
- version: 23.4.0
- resolution: "@react-native-firebase/functions@npm:23.4.0"
+"@react-native-firebase/functions@npm:^24.0.0":
+ version: 24.0.0
+ resolution: "@react-native-firebase/functions@npm:24.0.0"
peerDependencies:
- "@react-native-firebase/app": 23.4.0
- checksum: b56f77aa8c2f39546f3e2c65dba723fc58c4f1b421b1df3c926b78b97e833e256ef3eb3a56f77a74a015c02cd6d3da6ea1854d2d76c89033a0c8fdbf7643da73
+ "@react-native-firebase/app": 24.0.0
+ checksum: 355cf279168a351786ad53bb8ff769c951260e7fa3a18d74646b34fc52f004dfd10a6f72b6203d9b6c764f130f0a2dc527a06265dbd7be0b0341affb07b80ac8
languageName: node
linkType: hard
-"@react-native-firebase/messaging@npm:^23.4.0":
- version: 23.4.0
- resolution: "@react-native-firebase/messaging@npm:23.4.0"
+"@react-native-firebase/messaging@npm:^24.0.0":
+ version: 24.0.0
+ resolution: "@react-native-firebase/messaging@npm:24.0.0"
peerDependencies:
- "@react-native-firebase/app": 23.4.0
+ "@react-native-firebase/app": 24.0.0
expo: ">=47.0.0"
peerDependenciesMeta:
expo:
optional: true
- checksum: 5e7dedb7bb62ff24a11528d75b32f56ec062554e21628c7ddb2ffb71caeab9f1202121408632e315ddc0a45e8557b0d726c4cceb2f749919ecc6ccd9da71e079
+ checksum: 81dabf2f77c435736a2f5cd55afdb41cadb4d14908f4a15e0b80faef3b2241b06c6f3a462dbf9e65c9883c94b299afd0ca852edb86c1a93fb6e5384ebc314340
languageName: node
linkType: hard
-"@react-native-firebase/storage@npm:^23.4.0":
- version: 23.4.0
- resolution: "@react-native-firebase/storage@npm:23.4.0"
+"@react-native-firebase/storage@npm:^24.0.0":
+ version: 24.0.0
+ resolution: "@react-native-firebase/storage@npm:24.0.0"
peerDependencies:
- "@react-native-firebase/app": 23.4.0
- checksum: b927e8aeb95eff3f0311905e11d1f156258ca1acd5cbc673a07fceff2ff2091e6fbe1dcfec23cc79c6b362c680b579bfec9c52392ec0e2c2259465b8831b1e01
+ "@react-native-firebase/app": 24.0.0
+ checksum: 9e44aae0a089edfb556ab78e69ae18f3fe49f8edf31a07a34a4e81b001377ee182429a293cafa83b68438b263ff106f2a6ed979a7f4289958758c5777dc2498a
languageName: node
linkType: hard
@@ -3814,10 +3824,10 @@ __metadata:
languageName: node
linkType: hard
-"@react-native/assets-registry@npm:0.81.5":
- version: 0.81.5
- resolution: "@react-native/assets-registry@npm:0.81.5"
- checksum: c92a5731eb755a7f6702efa5568974fe11a58e5cd5b7c25883b55fe8ab0cc606a294d9e2b97afd163cc5619207fc7557f80a4052d990855a890d3694bcf8a635
+"@react-native/assets-registry@npm:0.81.4":
+ version: 0.81.4
+ resolution: "@react-native/assets-registry@npm:0.81.4"
+ checksum: 23ee2fce6a5f74ff801a7b08ede9c1cd5bc53148bf94103185b9c55b2b0e1b98134b9fd3e637e11ec39988a1cee456f358d0a20bc124bf942253bd096efeb7c5
languageName: node
linkType: hard
@@ -3831,16 +3841,6 @@ __metadata:
languageName: node
linkType: hard
-"@react-native/babel-plugin-codegen@npm:0.81.5":
- version: 0.81.5
- resolution: "@react-native/babel-plugin-codegen@npm:0.81.5"
- dependencies:
- "@babel/traverse": ^7.25.3
- "@react-native/codegen": 0.81.5
- checksum: 939aab253c762df32c5d94a3700971a7a560c7d77b6dd516e8284efdc6a9226e83b30c78455fee6311da0d5e50155e99e279a74015661c4e90b6f4b67a697aa9
- languageName: node
- linkType: hard
-
"@react-native/babel-preset@npm:0.81.4":
version: 0.81.4
resolution: "@react-native/babel-preset@npm:0.81.4"
@@ -3896,61 +3896,6 @@ __metadata:
languageName: node
linkType: hard
-"@react-native/babel-preset@npm:0.81.5":
- version: 0.81.5
- resolution: "@react-native/babel-preset@npm:0.81.5"
- dependencies:
- "@babel/core": ^7.25.2
- "@babel/plugin-proposal-export-default-from": ^7.24.7
- "@babel/plugin-syntax-dynamic-import": ^7.8.3
- "@babel/plugin-syntax-export-default-from": ^7.24.7
- "@babel/plugin-syntax-nullish-coalescing-operator": ^7.8.3
- "@babel/plugin-syntax-optional-chaining": ^7.8.3
- "@babel/plugin-transform-arrow-functions": ^7.24.7
- "@babel/plugin-transform-async-generator-functions": ^7.25.4
- "@babel/plugin-transform-async-to-generator": ^7.24.7
- "@babel/plugin-transform-block-scoping": ^7.25.0
- "@babel/plugin-transform-class-properties": ^7.25.4
- "@babel/plugin-transform-classes": ^7.25.4
- "@babel/plugin-transform-computed-properties": ^7.24.7
- "@babel/plugin-transform-destructuring": ^7.24.8
- "@babel/plugin-transform-flow-strip-types": ^7.25.2
- "@babel/plugin-transform-for-of": ^7.24.7
- "@babel/plugin-transform-function-name": ^7.25.1
- "@babel/plugin-transform-literals": ^7.25.2
- "@babel/plugin-transform-logical-assignment-operators": ^7.24.7
- "@babel/plugin-transform-modules-commonjs": ^7.24.8
- "@babel/plugin-transform-named-capturing-groups-regex": ^7.24.7
- "@babel/plugin-transform-nullish-coalescing-operator": ^7.24.7
- "@babel/plugin-transform-numeric-separator": ^7.24.7
- "@babel/plugin-transform-object-rest-spread": ^7.24.7
- "@babel/plugin-transform-optional-catch-binding": ^7.24.7
- "@babel/plugin-transform-optional-chaining": ^7.24.8
- "@babel/plugin-transform-parameters": ^7.24.7
- "@babel/plugin-transform-private-methods": ^7.24.7
- "@babel/plugin-transform-private-property-in-object": ^7.24.7
- "@babel/plugin-transform-react-display-name": ^7.24.7
- "@babel/plugin-transform-react-jsx": ^7.25.2
- "@babel/plugin-transform-react-jsx-self": ^7.24.7
- "@babel/plugin-transform-react-jsx-source": ^7.24.7
- "@babel/plugin-transform-regenerator": ^7.24.7
- "@babel/plugin-transform-runtime": ^7.24.7
- "@babel/plugin-transform-shorthand-properties": ^7.24.7
- "@babel/plugin-transform-spread": ^7.24.7
- "@babel/plugin-transform-sticky-regex": ^7.24.7
- "@babel/plugin-transform-typescript": ^7.25.2
- "@babel/plugin-transform-unicode-regex": ^7.24.7
- "@babel/template": ^7.25.0
- "@react-native/babel-plugin-codegen": 0.81.5
- babel-plugin-syntax-hermes-parser: 0.29.1
- babel-plugin-transform-flow-enums: ^0.0.2
- react-refresh: ^0.14.0
- peerDependencies:
- "@babel/core": "*"
- checksum: 80aebb02b4a1f68198e8bc939599def949844666f9601014af561f9cbd167f1fe325b193a5c9ffb7d0a07c9e9ab1a290e8a2ace2ce2ad470aae23f5376fc931e
- languageName: node
- linkType: hard
-
"@react-native/codegen@npm:0.81.4":
version: 0.81.4
resolution: "@react-native/codegen@npm:0.81.4"
@@ -3968,28 +3913,11 @@ __metadata:
languageName: node
linkType: hard
-"@react-native/codegen@npm:0.81.5":
- version: 0.81.5
- resolution: "@react-native/codegen@npm:0.81.5"
+"@react-native/community-cli-plugin@npm:0.81.4":
+ version: 0.81.4
+ resolution: "@react-native/community-cli-plugin@npm:0.81.4"
dependencies:
- "@babel/core": ^7.25.2
- "@babel/parser": ^7.25.3
- glob: ^7.1.1
- hermes-parser: 0.29.1
- invariant: ^2.2.4
- nullthrows: ^1.1.1
- yargs: ^17.6.2
- peerDependencies:
- "@babel/core": "*"
- checksum: 32a82c43efc6299b2667ab931b88c52da5cb4eecf0875f9b4f95a574144b23cf8d7db5bd40d2a9626c41c5de8153b6b95173810be8ab30cb5d5d678e482f80dc
- languageName: node
- linkType: hard
-
-"@react-native/community-cli-plugin@npm:0.81.5":
- version: 0.81.5
- resolution: "@react-native/community-cli-plugin@npm:0.81.5"
- dependencies:
- "@react-native/dev-middleware": 0.81.5
+ "@react-native/dev-middleware": 0.81.4
debug: ^4.4.0
invariant: ^2.2.4
metro: ^0.83.1
@@ -4004,7 +3932,7 @@ __metadata:
optional: true
"@react-native/metro-config":
optional: true
- checksum: 4f3f871f8d05b5bedd28b12d7a1e67bbe7fac9dc09306d5c0f9708df8cf5e58118b9a635616a22985746f3f1b2caa954de317484c907e7d878a44c04630ba814
+ checksum: 7b2997e30fae7da1d0231768214554c266543630758bddd59e648861d1b5fc1a34af7e46144daf625a2f452d33f24d9731f885ae4b2c5b146da2acde95e21382
languageName: node
linkType: hard
@@ -4015,13 +3943,6 @@ __metadata:
languageName: node
linkType: hard
-"@react-native/debugger-frontend@npm:0.81.5":
- version: 0.81.5
- resolution: "@react-native/debugger-frontend@npm:0.81.5"
- checksum: 684f0d562388d336744c68a530801e5d7c9088a76d40e158d20e8a7ed019259ccf6fc20dc0616823d5ce6e8981d302e9a5537032bf3006082ddc1b2734a0d881
- languageName: node
- linkType: hard
-
"@react-native/dev-middleware@npm:0.81.4":
version: 0.81.4
resolution: "@react-native/dev-middleware@npm:0.81.4"
@@ -4041,32 +3962,13 @@ __metadata:
languageName: node
linkType: hard
-"@react-native/dev-middleware@npm:0.81.5":
- version: 0.81.5
- resolution: "@react-native/dev-middleware@npm:0.81.5"
- dependencies:
- "@isaacs/ttlcache": ^1.4.1
- "@react-native/debugger-frontend": 0.81.5
- chrome-launcher: ^0.15.2
- chromium-edge-launcher: ^0.2.0
- connect: ^3.6.5
- debug: ^4.4.0
- invariant: ^2.2.4
- nullthrows: ^1.1.1
- open: ^7.0.3
- serve-static: ^1.16.2
- ws: ^6.2.3
- checksum: 725f85bc3f91158ab5097738cbbbaa38470d9e54e5672697219fea482ba7f2f223912b14ad54319a0cc2058537d1f5202e1ec8e745a74abd39121acabd0e6353
- languageName: node
- linkType: hard
-
-"@react-native/eslint-config@npm:0.81.5":
- version: 0.81.5
- resolution: "@react-native/eslint-config@npm:0.81.5"
+"@react-native/eslint-config@npm:0.81.4":
+ version: 0.81.4
+ resolution: "@react-native/eslint-config@npm:0.81.4"
dependencies:
"@babel/core": ^7.25.2
"@babel/eslint-parser": ^7.25.1
- "@react-native/eslint-plugin": 0.81.5
+ "@react-native/eslint-plugin": 0.81.4
"@typescript-eslint/eslint-plugin": ^7.1.1
"@typescript-eslint/parser": ^7.1.1
eslint-config-prettier: ^8.5.0
@@ -4079,54 +3981,54 @@ __metadata:
peerDependencies:
eslint: ">=8"
prettier: ">=2"
- checksum: adb3cc87ee656ed258408f2c05983d2ba1e0ce6900e570be9a6c3d2a7f325d4bf7b0b05128c72f11f8994608852eb305631550d4bb03df5afe883c5e92dd564d
+ checksum: e601fe1298710557916a0ab3c32975ab0e65319c78edaca7369eded6eea4f94ab4a00c1eafd437f93a82baa93cdfbd2a930ceb1b82b4a2e92f51d490184dd1b1
languageName: node
linkType: hard
-"@react-native/eslint-plugin@npm:0.81.5":
- version: 0.81.5
- resolution: "@react-native/eslint-plugin@npm:0.81.5"
- checksum: 2560b0b1a5ffcae76121efd89b0579ddc62f1789dc98882eecb6198e1cec39da0a6f496eee771f5183d3d365aed5a6804da8debf43509717ad20f6a0e394245d
+"@react-native/eslint-plugin@npm:0.81.4":
+ version: 0.81.4
+ resolution: "@react-native/eslint-plugin@npm:0.81.4"
+ checksum: e9c3ada247dfa410ae5f0ed20fb12ec79193a1140ec643d2cf822d472f7951e51247b4b235924faef0763efed73432dcfb203fd4af3c7abd8ccc10442efa6c31
languageName: node
linkType: hard
-"@react-native/gradle-plugin@npm:0.81.5":
- version: 0.81.5
- resolution: "@react-native/gradle-plugin@npm:0.81.5"
- checksum: e62c3e9f72364064c930b325a6e4714e3d3c8a65c87f5e703e6772fd13110aee70892a6dec41f23dd05fe8cbe731a686c7ec8cbd31d0fedfd85afe32ac3158c1
+"@react-native/gradle-plugin@npm:0.81.4":
+ version: 0.81.4
+ resolution: "@react-native/gradle-plugin@npm:0.81.4"
+ checksum: 98d71e2257c4c4bd41effe29cb3033beeb42194b7482d83c87458b641cc0c9a183206507dcf9b777d748540cd7bbab9754f5e9b13c712d6a6f6a552746fdb44e
languageName: node
linkType: hard
-"@react-native/js-polyfills@npm:0.81.5":
- version: 0.81.5
- resolution: "@react-native/js-polyfills@npm:0.81.5"
- checksum: 3cf56cf90a4d7315e452a4ca7c5557acf3b22deb3b2da89bca2b51da1611d21679da740ab3c80834698c64d7fc178427fb9d032900f4b41317aef016bee8e879
+"@react-native/js-polyfills@npm:0.81.4":
+ version: 0.81.4
+ resolution: "@react-native/js-polyfills@npm:0.81.4"
+ checksum: 5a2d6e2e0c588f39570a826d8632f5ac70607f69939c4961fbe26bd104a71aec83c5503f87a02f160ee8e5174c8e3e309c106e8634bd5f706c53acfd1dea4631
languageName: node
linkType: hard
-"@react-native/metro-babel-transformer@npm:0.81.5":
- version: 0.81.5
- resolution: "@react-native/metro-babel-transformer@npm:0.81.5"
+"@react-native/metro-babel-transformer@npm:0.81.4":
+ version: 0.81.4
+ resolution: "@react-native/metro-babel-transformer@npm:0.81.4"
dependencies:
"@babel/core": ^7.25.2
- "@react-native/babel-preset": 0.81.5
+ "@react-native/babel-preset": 0.81.4
hermes-parser: 0.29.1
nullthrows: ^1.1.1
peerDependencies:
"@babel/core": "*"
- checksum: 20ba6238591324aa5838d3424e75f1033142214d556131cad78faf5d26ed22ead26d4aef73e801cf852e43bc8b0d95bab2c48caaf9fe83929bba633ca0313929
+ checksum: 46f2793a1190becedaebc7a85070e03cd386180805d1082af1e206255b6395e7f749d82ba6736f343f8c9b447755c79d6c5ab11cde36688c45add9d56388db88
languageName: node
linkType: hard
-"@react-native/metro-config@npm:0.81.5":
- version: 0.81.5
- resolution: "@react-native/metro-config@npm:0.81.5"
+"@react-native/metro-config@npm:0.81.4":
+ version: 0.81.4
+ resolution: "@react-native/metro-config@npm:0.81.4"
dependencies:
- "@react-native/js-polyfills": 0.81.5
- "@react-native/metro-babel-transformer": 0.81.5
+ "@react-native/js-polyfills": 0.81.4
+ "@react-native/metro-babel-transformer": 0.81.4
metro-config: ^0.83.1
metro-runtime: ^0.83.1
- checksum: 13af9cb8f743e8ae51fe0c77db4c61070ef31074b985911ad03b53ec79985f3ba261f1b0026bc62b1b070a3954c8928b73d2d956fc13bad6ece3699b3f5d7254
+ checksum: 3ae2a2c55cb988da8a35f5f119b19a476dd85388d4c4970e33fc9af7886d2bba7d894743b997a4cac7389125b87ed1aac436cd0e2426d3ea06bc1cde4838d866
languageName: node
linkType: hard
@@ -4144,16 +4046,16 @@ __metadata:
languageName: node
linkType: hard
-"@react-native/typescript-config@npm:0.81.5":
- version: 0.81.5
- resolution: "@react-native/typescript-config@npm:0.81.5"
- checksum: fbcc83ec60d6820a0d5d86644c33284bba35aa3312fd9b620f50f3de5343ed3aac9808aa6915d2a1726f69bbe877c1b92452954e661a2fee16c60c1be88fc8c5
+"@react-native/typescript-config@npm:0.81.4":
+ version: 0.81.4
+ resolution: "@react-native/typescript-config@npm:0.81.4"
+ checksum: 21e517036fe5e423d4bb67739168743374c40641dfb2dde080b13bdd68126f280707ebf7d2780df23f5cf7805c759f1db2705473de35f1d3b7761256d2694c7e
languageName: node
linkType: hard
-"@react-native/virtualized-lists@npm:0.81.5":
- version: 0.81.5
- resolution: "@react-native/virtualized-lists@npm:0.81.5"
+"@react-native/virtualized-lists@npm:0.81.4":
+ version: 0.81.4
+ resolution: "@react-native/virtualized-lists@npm:0.81.4"
dependencies:
invariant: ^2.2.4
nullthrows: ^1.1.1
@@ -4164,7 +4066,7 @@ __metadata:
peerDependenciesMeta:
"@types/react":
optional: true
- checksum: c3dc4f36dca2ced9ec7cdaaa0f262d0ca2387d348f7d97673466f4704eb8db38eeb8124852d225e1a18aeed4431d3ae112189af436e4d2238cdef65c9bbd35ae
+ checksum: 4a398ada7a072dea8f8275c299201ad107da14b189a453b892942adcf60ccabb311be477c979cfa0313df0b0099b7fafb4cba9c10ed939aec80e3a9a76b0535d
languageName: node
linkType: hard
@@ -4948,18 +4850,18 @@ __metadata:
"@react-native-community/cli": 20.0.0
"@react-native-community/cli-platform-android": 20.0.0
"@react-native-community/cli-platform-ios": 20.0.0
- "@react-native-firebase/app": ^23.4.0
- "@react-native-firebase/auth": ^23.4.0
- "@react-native-firebase/crashlytics": ^23.4.0
- "@react-native-firebase/firestore": ^23.4.0
- "@react-native-firebase/functions": ^23.4.0
- "@react-native-firebase/messaging": ^23.4.0
- "@react-native-firebase/storage": ^23.4.0
+ "@react-native-firebase/app": ^24.0.0
+ "@react-native-firebase/auth": ^24.0.0
+ "@react-native-firebase/crashlytics": ^24.0.0
+ "@react-native-firebase/firestore": ^24.0.0
+ "@react-native-firebase/functions": ^24.0.0
+ "@react-native-firebase/messaging": ^24.0.0
+ "@react-native-firebase/storage": ^24.0.0
"@react-native-masked-view/masked-view": ^0.3.2
- "@react-native/babel-preset": 0.81.5
- "@react-native/eslint-config": 0.81.5
- "@react-native/metro-config": 0.81.5
- "@react-native/typescript-config": 0.81.5
+ "@react-native/babel-preset": 0.81.4
+ "@react-native/eslint-config": 0.81.4
+ "@react-native/metro-config": 0.81.4
+ "@react-native/typescript-config": 0.81.4
"@react-navigation/bottom-tabs": ^7.3.13
"@react-navigation/drawer": ^7.3.12
"@react-navigation/native": ^7.1.9
@@ -5015,7 +4917,7 @@ __metadata:
prettier: 2.8.8
react: 19.1.0
react-i18next: ^16.0.0
- react-native: 0.81.5
+ react-native: 0.81.4
react-native-context-menu-view: ^1.19.0
react-native-country-flag: ^2.0.2
react-native-country-picker-modal: ^2.0.0
@@ -5031,7 +4933,7 @@ __metadata:
react-native-pdf-from-image: ^0.3.6
react-native-qrcode-svg: ^6.3.15
react-native-quick-base64: ^2.2.2
- react-native-quick-crypto: ^1.0.16
+ react-native-quick-crypto: 0.7.17
react-native-reanimated: ^4.2.2
react-native-restart-newarch: ^1.0.85
react-native-safe-area-context: ~5.6.0
@@ -8039,7 +7941,7 @@ __metadata:
languageName: node
linkType: hard
-"events@npm:3.3.0, events@npm:^3.3.0":
+"events@npm:^3.3.0":
version: 3.3.0
resolution: "events@npm:3.3.0"
checksum: f6f487ad2198aa41d878fa31452f1a3c00958f46e9019286ff4787c84aac329332ab45c9cdc8c445928fc6d7ded294b9e005a7fce9426488518017831b272780
@@ -8697,39 +8599,39 @@ __metadata:
languageName: node
linkType: hard
-"firebase@npm:12.2.1":
- version: 12.2.1
- resolution: "firebase@npm:12.2.1"
+"firebase@npm:12.10.0":
+ version: 12.10.0
+ resolution: "firebase@npm:12.10.0"
dependencies:
- "@firebase/ai": 2.2.1
- "@firebase/analytics": 0.10.18
- "@firebase/analytics-compat": 0.2.24
- "@firebase/app": 0.14.2
- "@firebase/app-check": 0.11.0
- "@firebase/app-check-compat": 0.4.0
- "@firebase/app-compat": 0.5.2
+ "@firebase/ai": 2.9.0
+ "@firebase/analytics": 0.10.20
+ "@firebase/analytics-compat": 0.2.26
+ "@firebase/app": 0.14.9
+ "@firebase/app-check": 0.11.1
+ "@firebase/app-check-compat": 0.4.1
+ "@firebase/app-compat": 0.5.9
"@firebase/app-types": 0.9.3
- "@firebase/auth": 1.11.0
- "@firebase/auth-compat": 0.6.0
- "@firebase/data-connect": 0.3.11
- "@firebase/database": 1.1.0
- "@firebase/database-compat": 2.1.0
- "@firebase/firestore": 4.9.1
- "@firebase/firestore-compat": 0.4.1
- "@firebase/functions": 0.13.1
- "@firebase/functions-compat": 0.4.1
- "@firebase/installations": 0.6.19
- "@firebase/installations-compat": 0.2.19
- "@firebase/messaging": 0.12.23
- "@firebase/messaging-compat": 0.2.23
- "@firebase/performance": 0.7.9
- "@firebase/performance-compat": 0.2.22
- "@firebase/remote-config": 0.6.6
- "@firebase/remote-config-compat": 0.2.19
- "@firebase/storage": 0.14.0
- "@firebase/storage-compat": 0.4.0
- "@firebase/util": 1.13.0
- checksum: 5873b79e9fa42bbafd4bc6667affb649c51876c1de46ea667b7c3a2b3eeea6eecf6339d28aa8a94f756bf62fdf1bd46777c4ce1a45c5034942804ccad3cd2d01
+ "@firebase/auth": 1.12.1
+ "@firebase/auth-compat": 0.6.3
+ "@firebase/data-connect": 0.4.0
+ "@firebase/database": 1.1.1
+ "@firebase/database-compat": 2.1.1
+ "@firebase/firestore": 4.12.0
+ "@firebase/firestore-compat": 0.4.6
+ "@firebase/functions": 0.13.2
+ "@firebase/functions-compat": 0.4.2
+ "@firebase/installations": 0.6.20
+ "@firebase/installations-compat": 0.2.20
+ "@firebase/messaging": 0.12.24
+ "@firebase/messaging-compat": 0.2.24
+ "@firebase/performance": 0.7.10
+ "@firebase/performance-compat": 0.2.23
+ "@firebase/remote-config": 0.8.1
+ "@firebase/remote-config-compat": 0.2.22
+ "@firebase/storage": 0.14.1
+ "@firebase/storage-compat": 0.4.1
+ "@firebase/util": 1.14.0
+ checksum: b76b9a8710401366c8920fd81fb8a8f742e39a13fa5189e28e9e4c743f4daec327ef9afd56cbf56b35bb1a06527d5ca6120e9ba3f3214367316a62188231a9fe
languageName: node
linkType: hard
@@ -13159,29 +13061,16 @@ __metadata:
languageName: node
linkType: hard
-"react-native-quick-crypto@npm:^1.0.16":
- version: 1.0.16
- resolution: "react-native-quick-crypto@npm:1.0.16"
+"react-native-quick-crypto@npm:0.7.17":
+ version: 0.7.17
+ resolution: "react-native-quick-crypto@npm:0.7.17"
dependencies:
- "@craftzdog/react-native-buffer": 6.1.0
- events: 3.3.0
- readable-stream: 4.5.2
- safe-buffer: ^5.2.1
+ "@craftzdog/react-native-buffer": ^6.0.5
+ events: ^3.3.0
+ readable-stream: ^4.5.2
string_decoder: ^1.3.0
- util: 0.12.5
- peerDependencies:
- expo: ">=48.0.0"
- expo-build-properties: "*"
- react: "*"
- react-native: "*"
- react-native-nitro-modules: ">=0.29.1"
- react-native-quick-base64: ">=2.1.0"
- peerDependenciesMeta:
- expo:
- optional: true
- expo-build-properties:
- optional: true
- checksum: 73cc7507e66c8a2d2d87ba9b5858acc6973b7dd08fabdb2db10c09ad112666496813a6e48f50018708468f5b6060ca52eb6ad85a7a0eae6b9a7b3eae2e203bb8
+ util: ^0.12.5
+ checksum: 5864b483900b504bff353721dffce2458635d7ad15a4bb87389a9161d83fd60a809c2881293a58ef03de3492ded8e9bf19efc8ae1d1694b500feedc26eee1e5c
languageName: node
linkType: hard
@@ -13262,14 +13151,14 @@ __metadata:
languageName: node
linkType: hard
-"react-native-url-polyfill@npm:2.0.0":
- version: 2.0.0
- resolution: "react-native-url-polyfill@npm:2.0.0"
+"react-native-url-polyfill@npm:3.0.0":
+ version: 3.0.0
+ resolution: "react-native-url-polyfill@npm:3.0.0"
dependencies:
whatwg-url-without-unicode: 8.0.0-3
peerDependencies:
react-native: "*"
- checksum: 1a2e1030a62fd093764b5330ce0ff34d72246e581dd2892cddc347d8621931aeb2c9ea3e054960484a1259230e8461e569e1890f1ff452d3c5c0adef70190fc3
+ checksum: 3d6e02b8c32933bca588b70e86c1b2981cd2d9f4055f7ce5ba5f321596ffae5ce89fea41af8d13eca7b4f29daf685406354c761696e5a4bdfb5698468e54a527
languageName: node
linkType: hard
@@ -13362,18 +13251,18 @@ __metadata:
languageName: node
linkType: hard
-"react-native@npm:0.81.5":
- version: 0.81.5
- resolution: "react-native@npm:0.81.5"
+"react-native@npm:0.81.4":
+ version: 0.81.4
+ resolution: "react-native@npm:0.81.4"
dependencies:
"@jest/create-cache-key-function": ^29.7.0
- "@react-native/assets-registry": 0.81.5
- "@react-native/codegen": 0.81.5
- "@react-native/community-cli-plugin": 0.81.5
- "@react-native/gradle-plugin": 0.81.5
- "@react-native/js-polyfills": 0.81.5
- "@react-native/normalize-colors": 0.81.5
- "@react-native/virtualized-lists": 0.81.5
+ "@react-native/assets-registry": 0.81.4
+ "@react-native/codegen": 0.81.4
+ "@react-native/community-cli-plugin": 0.81.4
+ "@react-native/gradle-plugin": 0.81.4
+ "@react-native/js-polyfills": 0.81.4
+ "@react-native/normalize-colors": 0.81.4
+ "@react-native/virtualized-lists": 0.81.4
abort-controller: ^3.0.0
anser: ^1.4.9
ansi-regex: ^5.0.0
@@ -13408,7 +13297,7 @@ __metadata:
optional: true
bin:
react-native: cli.js
- checksum: 52c8d47b30f32c593c0d26a233a7edab2fe8de0ba8de8d9e9a52a20d8efb42ab348012de3c7482e9f08743ffae6b5c2171f2d776b1765be19a2e52d6b2f7f21c
+ checksum: f5d3f726722b37c948ead0ac7971b5daa484e3533184238e7cc12ae36a7cadd74f125f06bee6e2940cce13c4fddcd1e3137532ec5a6f0fbef07b1c03443fa637
languageName: node
linkType: hard
@@ -13438,19 +13327,6 @@ __metadata:
languageName: node
linkType: hard
-"readable-stream@npm:4.5.2":
- version: 4.5.2
- resolution: "readable-stream@npm:4.5.2"
- dependencies:
- abort-controller: ^3.0.0
- buffer: ^6.0.3
- events: ^3.3.0
- process: ^0.11.10
- string_decoder: ^1.3.0
- checksum: c4030ccff010b83e4f33289c535f7830190773e274b3fcb6e2541475070bdfd69c98001c3b0cb78763fc00c8b62f514d96c2b10a8bd35d5ce45203a25fa1d33a
- languageName: node
- linkType: hard
-
"readable-stream@npm:^2.3.8":
version: 2.3.8
resolution: "readable-stream@npm:2.3.8"
@@ -13477,6 +13353,19 @@ __metadata:
languageName: node
linkType: hard
+"readable-stream@npm:^4.5.2":
+ version: 4.7.0
+ resolution: "readable-stream@npm:4.7.0"
+ dependencies:
+ abort-controller: ^3.0.0
+ buffer: ^6.0.3
+ events: ^3.3.0
+ process: ^0.11.10
+ string_decoder: ^1.3.0
+ checksum: 03ec762faed8e149dc6452798b60394a8650861a1bb4bf936fa07b94044826bc25abe73696f5f45372abc404eec01876c560f64b479eba108b56397312dbe2ae
+ languageName: node
+ linkType: hard
+
"reflect.getprototypeof@npm:^1.0.6, reflect.getprototypeof@npm:^1.0.9":
version: 1.0.10
resolution: "reflect.getprototypeof@npm:1.0.10"
@@ -15288,7 +15177,7 @@ __metadata:
languageName: node
linkType: hard
-"util@npm:0.12.5, util@npm:^0.12.5":
+"util@npm:^0.12.5":
version: 0.12.5
resolution: "util@npm:0.12.5"
dependencies: