diff --git a/apps/web/package.json b/apps/web/package.json index 66600d52de..fb75096fc7 100644 --- a/apps/web/package.json +++ b/apps/web/package.json @@ -72,7 +72,7 @@ "date-fns": "^2.30.0", "ethers": "^6.13.4", "exponential-backoff": "^3.1.0", - "firebase": "^10.3.1", + "firebase": "^11.1.0", "fuse.js": "^7.0.0", "idb-keyval": "^6.2.1", "js-cookie": "^3.0.1", diff --git a/apps/web/src/components/common/Notifications/index.tsx b/apps/web/src/components/common/Notifications/index.tsx index 6cf42948f4..bc2940102a 100644 --- a/apps/web/src/components/common/Notifications/index.tsx +++ b/apps/web/src/components/common/Notifications/index.tsx @@ -1,11 +1,11 @@ import type { ReactElement, SyntheticEvent } from 'react' -import { useCallback, useEffect } from 'react' +import React, { useCallback, useEffect } from 'react' import groupBy from 'lodash/groupBy' import { useAppDispatch, useAppSelector } from '@/store' import type { Notification } from '@/store/notificationsSlice' import { closeNotification, readNotification, selectNotifications } from '@/store/notificationsSlice' import type { AlertColor, SnackbarCloseReason } from '@mui/material' -import { Alert, Link, Snackbar, Typography } from '@mui/material' +import { Alert, Box, Link, Snackbar, Typography } from '@mui/material' import css from './styles.module.css' import NextLink from 'next/link' import ChevronRightIcon from '@mui/icons-material/ChevronRight' @@ -26,20 +26,39 @@ export const NotificationLink = ({ return null } + const LinkWrapper = ({ children }: React.PropsWithChildren) => + 'href' in link ? ( + + {children} + + ) : ( + {children} + ) + + const handleClick = (event: SyntheticEvent) => { + if ('onClick' in link) { + link.onClick() + } + onClick(event) + } + const isExternal = - typeof link.href === 'string' ? !isRelativeUrl(link.href) : !!(link.href.host || link.href.hostname) + 'href' in link && + (typeof link.href === 'string' ? !isRelativeUrl(link.href) : !!(link.href.host || link.href.hostname)) return ( - + - {link.title} + {link.title} + - + ) } diff --git a/apps/web/src/components/notification-center/NotificationCenter/index.tsx b/apps/web/src/components/notification-center/NotificationCenter/index.tsx index bd7c47371e..543cec35a4 100644 --- a/apps/web/src/components/notification-center/NotificationCenter/index.tsx +++ b/apps/web/src/components/notification-center/NotificationCenter/index.tsx @@ -27,6 +27,7 @@ import { trackEvent, OVERVIEW_EVENTS } from '@/services/analytics' import SvgIcon from '@mui/icons-material/ExpandLess' import { useHasFeature } from '@/hooks/useChains' import { FEATURES } from '@/utils/chains' +import { useNotificationsRenewal } from '@/components/settings/PushNotifications/hooks/useNotificationsRenewal' const NOTIFICATION_CENTER_LIMIT = 4 @@ -38,6 +39,9 @@ const NotificationCenter = (): ReactElement => { const hasPushNotifications = useHasFeature(FEATURES.PUSH_NOTIFICATIONS) const dispatch = useAppDispatch() + // This hook is used to show the notification renewal message when the app is opened + useNotificationsRenewal(true) + const notifications = useAppSelector(selectNotifications) const chronologicalNotifications = useMemo(() => { // Clone as Redux returns read-only array diff --git a/apps/web/src/components/notification-center/NotificationRenewal/index.tsx b/apps/web/src/components/notification-center/NotificationRenewal/index.tsx new file mode 100644 index 0000000000..7cd5eeb196 --- /dev/null +++ b/apps/web/src/components/notification-center/NotificationRenewal/index.tsx @@ -0,0 +1,60 @@ +import { useState, type ReactElement } from 'react' +import { Alert, Box, Button, Typography } from '@mui/material' +import useSafeInfo from '@/hooks/useSafeInfo' +import CheckWallet from '@/components/common/CheckWallet' +import { useNotificationsRenewal } from '@/components/settings/PushNotifications/hooks/useNotificationsRenewal' +import { useIsNotificationsRenewalEnabled } from '@/components/settings/PushNotifications/hooks/useNotificationsTokenVersion' + +const NotificationRenewal = (): ReactElement => { + const { safe, safeLoaded } = useSafeInfo() + const [isRegistering, setIsRegistering] = useState(false) + const { renewNotifications, needsRenewal, numberChainsForRenewal } = useNotificationsRenewal() + const isNotificationsRenewalEnabled = useIsNotificationsRenewalEnabled() + + if (!needsRenewal || !isNotificationsRenewalEnabled) { + // No need to renew any Safe's notifications + return <> + } + + const handeSignClick = async () => { + setIsRegistering(true) + await renewNotifications() + setIsRegistering(false) + } + + const message = `We’ve upgraded your notification experience. Sign ${safeLoaded || numberChainsForRenewal < 2 ? 'the message' : `${numberChainsForRenewal} messages`} now to keep receiving important updates seamlessly.` + + return ( + <> + + + Signature needed + + {message} + + + + {(isOk) => ( + + )} + + + + ) +} + +export default NotificationRenewal diff --git a/apps/web/src/components/settings/PushNotifications/GlobalPushNotifications.tsx b/apps/web/src/components/settings/PushNotifications/GlobalPushNotifications.tsx index eb44de9c74..ff63d00e46 100644 --- a/apps/web/src/components/settings/PushNotifications/GlobalPushNotifications.tsx +++ b/apps/web/src/components/settings/PushNotifications/GlobalPushNotifications.tsx @@ -30,7 +30,7 @@ import { useNotificationPreferences } from './hooks/useNotificationPreferences' import { useNotificationRegistrations } from './hooks/useNotificationRegistrations' import { trackEvent } from '@/services/analytics' import { PUSH_NOTIFICATION_EVENTS } from '@/services/analytics/events/push-notifications' -import { requestNotificationPermission } from './logic' +import { mergeNotifiableSafes, requestNotificationPermission } from './logic' import type { NotifiableSafes } from './logic' import type { PushNotificationPreferences } from '@/services/push-notifications/preferences' import CheckWallet from '@/components/common/CheckWallet' @@ -40,6 +40,7 @@ import useAllOwnedSafes from '@/features/myAccounts/hooks/useAllOwnedSafes' import useWallet from '@/hooks/wallets/useWallet' import { selectAllAddedSafes, type AddedSafesState } from '@/store/addedSafesSlice' import { maybePlural } from '@/utils/formatters' +import { useNotificationsRenewal } from './hooks/useNotificationsRenewal' // UI logic @@ -268,6 +269,8 @@ export const GlobalPushNotifications = (): ReactElement | null => { const { unregisterDeviceNotifications, unregisterSafeNotifications, registerNotifications } = useNotificationRegistrations() + const { safesForRenewal } = useNotificationsRenewal() + // Safes selected in the UI const [selectedSafes, setSelectedSafes] = useState({}) @@ -349,7 +352,11 @@ export const GlobalPushNotifications = (): ReactElement | null => { const registrationPromises: Array> = [] - const safesToRegister = _getSafesToRegister(selectedSafes, currentNotifiedSafes) + const newlySelectedSafes = _getSafesToRegister(selectedSafes, currentNotifiedSafes) + + // Merge Safes that need to be registered with the ones for which notifications need to be renewed + const safesToRegister = mergeNotifiableSafes(newlySelectedSafes, safesForRenewal) + if (safesToRegister) { registrationPromises.push(registerNotifications(safesToRegister)) } diff --git a/apps/web/src/components/settings/PushNotifications/hooks/useNotificationPreferences.ts b/apps/web/src/components/settings/PushNotifications/hooks/useNotificationPreferences.ts index 4cc26e7cc7..68bd489fb0 100644 --- a/apps/web/src/components/settings/PushNotifications/hooks/useNotificationPreferences.ts +++ b/apps/web/src/components/settings/PushNotifications/hooks/useNotificationPreferences.ts @@ -57,6 +57,7 @@ export const useNotificationPreferences = (): { [PushNotificationPrefsKey, PushNotificationPreferences[PushNotificationPrefsKey]][] > _deleteManyPreferenceKeys: (keysToDelete: PushNotificationPrefsKey[]) => void + getChainPreferences: (chainId: string) => PushNotificationPreferences[PushNotificationPrefsKey][] } => { // State const uuid = useUuid() @@ -72,6 +73,14 @@ export const useNotificationPreferences = (): { return preferences }, [preferences]) + // Get list of preferences for specified chain + const getChainPreferences = useCallback( + (chainId: string) => { + return Object.values(preferences || {}).filter((pref) => chainId === pref.chainId) + }, + [preferences], + ) + // idb-keyval stores const uuidStore = useMemo(() => { if (typeof indexedDB !== 'undefined') { @@ -253,5 +262,6 @@ export const useNotificationPreferences = (): { deleteAllChainPreferences, _getAllPreferenceEntries, _deleteManyPreferenceKeys, + getChainPreferences, } } diff --git a/apps/web/src/components/settings/PushNotifications/hooks/useNotificationRegistrations.ts b/apps/web/src/components/settings/PushNotifications/hooks/useNotificationRegistrations.ts index bb59d75e35..16528df21b 100644 --- a/apps/web/src/components/settings/PushNotifications/hooks/useNotificationRegistrations.ts +++ b/apps/web/src/components/settings/PushNotifications/hooks/useNotificationRegistrations.ts @@ -11,6 +11,8 @@ import { logError } from '@/services/exceptions' import ErrorCodes from '@/services/exceptions/ErrorCodes' import useWallet from '@/hooks/wallets/useWallet' import type { NotifiableSafes } from '../logic' +import { NotificationsTokenVersion } from '@/services/push-notifications/preferences' +import { useNotificationsTokenVersion } from './useNotificationsTokenVersion' const registrationFlow = async (registrationFn: Promise, callback: () => void): Promise => { let success = false @@ -40,6 +42,7 @@ export const useNotificationRegistrations = (): { const dispatch = useAppDispatch() const wallet = useWallet() + const { setTokenVersion } = useNotificationsTokenVersion() const { uuid, createPreferences, deletePreferences, deleteAllChainPreferences } = useNotificationPreferences() const registerNotifications = async (safesToRegister: NotifiableSafes) => { @@ -65,6 +68,9 @@ export const useNotificationRegistrations = (): { 0, ) + // Set the token version to V2 to indicate that the user has registered their token for the new notification service + setTokenVersion(NotificationsTokenVersion.V2, safesToRegister) + trackEvent({ ...PUSH_NOTIFICATION_EVENTS.REGISTER_SAFES, label: totalRegistered, diff --git a/apps/web/src/components/settings/PushNotifications/hooks/useNotificationsRenewal.ts b/apps/web/src/components/settings/PushNotifications/hooks/useNotificationsRenewal.ts new file mode 100644 index 0000000000..8cfc4ceb8b --- /dev/null +++ b/apps/web/src/components/settings/PushNotifications/hooks/useNotificationsRenewal.ts @@ -0,0 +1,169 @@ +import useSafeInfo from '@/hooks/useSafeInfo' +import { useNotificationPreferences } from './useNotificationPreferences' +import { useNotificationRegistrations } from './useNotificationRegistrations' +import { useCallback, useEffect, useMemo } from 'react' +import { useAppDispatch, useAppSelector } from '@/store' +import { selectNotifications, showNotification } from '@/store/notificationsSlice' +import useWallet from '@/hooks/wallets/useWallet' +import { NotificationsTokenVersion } from '@/services/push-notifications/preferences' +import { useIsNotificationsRenewalEnabled, useNotificationsTokenVersion } from './useNotificationsTokenVersion' +import type { NotifiableSafes } from '../logic' +import { flatten, isEmpty } from 'lodash' +import useIsWrongChain from '@/hooks/useIsWrongChain' + +/** + * Hook to manage the renewal of notifications + * @param shouldShowRenewalNotification a boolean to determine if the renewal notification should be shown + * @returns an object containing the safes for renewal, the number of chains for renewal, the number of safes for renewal, + * the renewNotifications function and a boolean indicating if a renewal is needed + */ +export const useNotificationsRenewal = (shouldShowRenewalNotification = false) => { + const wallet = useWallet() + const dispatch = useAppDispatch() + const { safe, safeLoaded } = useSafeInfo() + const { registerNotifications } = useNotificationRegistrations() + const { getPreferences, getAllPreferences, getChainPreferences } = useNotificationPreferences() + const preferences = getPreferences(safe.chainId, safe.address.value) + const allPreferences = getAllPreferences() + const notifications = useAppSelector(selectNotifications) + const { safeTokenVersion, allTokenVersions, setTokenVersion } = useNotificationsTokenVersion() + const isWrongChain = useIsWrongChain() + const isNotificationsRenewalEnabled = useIsNotificationsRenewalEnabled() + + // Check if a renewal notification is already present + const hasNotificationMessage = useMemo( + () => notifications.some((notification) => notification.groupKey === 'renewal'), + [notifications], + ) + + /** + * Function to check if a renewal is needed for a specific Safe based on the locally stored token version + * @param chainId the chainId of the Safe + * @param safeAddress the address of the Safe + * @returns a boolean indicating if a renewal is needed + */ + const checkIsRenewalNeeded = useCallback( + (chainId: string, safeAddress: string) => + allTokenVersions?.[chainId]?.[safeAddress] !== NotificationsTokenVersion.V2, + [allTokenVersions], + ) + + // Safes that need to be renewed based on the locally stored token version. If a Safe is loaded, only the relevant + // Safes for the corresponding chain are returned. Otherwise, all Safes that need to be renewed are returned. + const safesForRenewal = useMemo(() => { + if (!isNotificationsRenewalEnabled) { + // Notifications renewal feature flag is not enabled + return undefined + } + + if (safeLoaded) { + // If the Safe is loaded, only the Safes for the corresponding chain are checked + const chainPreferences = getChainPreferences(safe.chainId) + + // Determine the Safes that need to be renewed for the loaded Safe's chain + const safeAddressesForRenewal = chainPreferences + .map((pref) => pref.safeAddress) + .filter((address) => checkIsRenewalNeeded(safe.chainId, address)) + + if (safeAddressesForRenewal.length === 0) { + return undefined + } + + return { [safe.chainId]: safeAddressesForRenewal } + } + + if (!allPreferences) { + return undefined + } + + // Determine the Safes that need to be renewed for all chains + const safesForRenewal = Object.values(allPreferences).reduce( + (acc, { chainId, safeAddress }) => + checkIsRenewalNeeded(chainId, safeAddress) + ? { ...acc, [chainId]: [...(acc[chainId] || []), safeAddress] } + : acc, + {}, + ) + + return isEmpty(safesForRenewal) ? undefined : safesForRenewal + }, [ + safeLoaded, + safe.chainId, + allPreferences, + getChainPreferences, + checkIsRenewalNeeded, + isNotificationsRenewalEnabled, + ]) + + // Number of Safes that need to be renewed for notifications + const numberSafesForRenewal = useMemo(() => { + return safesForRenewal ? flatten(Object.values(safesForRenewal)).length : 0 + }, [safesForRenewal]) + + // Number of chains with Safes that need to be renewed for notifications + const numberChainsForRenewal = useMemo(() => { + return safesForRenewal ? Object.values(safesForRenewal).filter((addresses) => addresses.length > 0).length : 0 + }, [safesForRenewal]) + + // Boolean indicating if a notifications renewal is needed for any Safe + const needsRenewal = useMemo(() => { + if (safeLoaded) { + return safesForRenewal?.[safe.chainId]?.includes(safe.address.value) || false + } + return numberSafesForRenewal > 0 + }, [numberSafesForRenewal, safe.address.value, safe.chainId, safeLoaded, safesForRenewal]) + + /** + * Function to renew the notifications for the Safes that need it + * @returns a Promise that resolves when the notifications have been renewed + */ + const renewNotifications = useCallback(async () => { + if (safesForRenewal) { + return registerNotifications(safesForRenewal) + } + }, [safesForRenewal, registerNotifications]) + + useEffect(() => { + if ( + shouldShowRenewalNotification && + !!wallet && + !!preferences && + safeLoaded && + !isWrongChain && + !safeTokenVersion && + !hasNotificationMessage && + isNotificationsRenewalEnabled + ) { + dispatch( + showNotification({ + message: + 'We’ve upgraded your notification experience. Sign this message to keep receiving important updates seamlessly.', + variant: 'warning', + groupKey: 'renewal', + link: { + onClick: () => renewNotifications(), + title: 'Sign', + }, + }), + ) + + // Set the token version to V1 to avoid showing the notification again + setTokenVersion(NotificationsTokenVersion.V1) + } + }, [ + dispatch, + renewNotifications, + shouldShowRenewalNotification, + preferences, + safeLoaded, + safe, + safeTokenVersion, + isWrongChain, + hasNotificationMessage, + wallet, + setTokenVersion, + isNotificationsRenewalEnabled, + ]) + + return { safesForRenewal, numberChainsForRenewal, numberSafesForRenewal, renewNotifications, needsRenewal } +} diff --git a/apps/web/src/components/settings/PushNotifications/hooks/useNotificationsTokenVersion.ts b/apps/web/src/components/settings/PushNotifications/hooks/useNotificationsTokenVersion.ts new file mode 100644 index 0000000000..c43c29ce8a --- /dev/null +++ b/apps/web/src/components/settings/PushNotifications/hooks/useNotificationsTokenVersion.ts @@ -0,0 +1,86 @@ +import useSafeInfo from '@/hooks/useSafeInfo' +import useLocalStorage from '@/services/local-storage/useLocalStorage' +import type { NotificationsTokenVersion } from '@/services/push-notifications/preferences' +import type { NotifiableSafes } from '../logic' +import { useHasFeature } from '@/hooks/useChains' +import { FEATURES } from '@/utils/chains' + +const NOTIFICATIONS_TOKEN_VERSION_KEY = 'notificationsTokenVersion' + +type TokenVersionStore = { + [chainId: string]: { + [safeAddress: string]: NotificationsTokenVersion | undefined + } +} + +export const useIsNotificationsRenewalEnabled = () => { + return useHasFeature(FEATURES.RENEW_NOTIFICATIONS_TOKEN) +} + +/** + * Hook to get and update the token versions for the notifications in the local storage. + * @returns an object with the token version for the current loaded Safe, all token versions stored in the local storage, + * and a function to update the token version. + */ +export const useNotificationsTokenVersion = () => { + const isNotificationsRenewalEnabled = useIsNotificationsRenewalEnabled() + const { safe, safeLoaded } = useSafeInfo() + const safeAddress = safe.address.value + + // Token versions are stored in local storage + const [allTokenVersions, setAllTokenVersionsStore] = useLocalStorage( + NOTIFICATIONS_TOKEN_VERSION_KEY, + ) + + /** + * Updates the token version for the specified Safes in the local storage. + * @param tokenVersion new token version + * @param safes object with Safes to update the token version. If not provided, the token version will be + * updated for the current loaded Safe only. + */ + const setTokenVersion = ( + tokenVersion: NotificationsTokenVersion | undefined, + safes: NotifiableSafes | undefined = safeLoaded ? { [safe.chainId]: [safeAddress] } : undefined, + ) => { + const currentTokenVersionStore = allTokenVersions || {} + + if (!isNotificationsRenewalEnabled) { + // Notifications renewal is not enabled, nothing to update + return + } + + if (!safes) { + // No Safes provided and no Safe loaded, nothing to update + return + } + + // Update the token version for the provided Safes + const newTokenVersionStore = Object.keys(safes).reduce( + (acc, chainId) => ({ + ...acc, + [chainId]: { + ...(acc[chainId] || {}), + ...Object.fromEntries(safes[chainId].map((safeAddress) => [safeAddress, tokenVersion])), + }, + }), + currentTokenVersionStore, + ) + + setAllTokenVersionsStore(newTokenVersionStore) + } + + if (!isNotificationsRenewalEnabled) { + // Notifications renewal is not enabled, no token versions stored + return { safeTokenVersion: undefined, allTokenVersions: undefined, setTokenVersion } + } + + if (!allTokenVersions) { + // No token versions stored + return { safeTokenVersion: undefined, allTokenVersions, setTokenVersion } + } + + // Get the stored token version for the current loaded Safe + const safeTokenVersion = safeLoaded ? allTokenVersions[safe.chainId]?.[safeAddress] : undefined + + return { safeTokenVersion, allTokenVersions, setTokenVersion } +} diff --git a/apps/web/src/components/settings/PushNotifications/index.tsx b/apps/web/src/components/settings/PushNotifications/index.tsx index 4e8b50283e..d50f7e02af 100644 --- a/apps/web/src/components/settings/PushNotifications/index.tsx +++ b/apps/web/src/components/settings/PushNotifications/index.tsx @@ -33,6 +33,7 @@ import ExternalLink from '@/components/common/ExternalLink' import css from './styles.module.css' import NetworkWarning from '@/components/new-safe/create/NetworkWarning' +import NotificationRenewal from '@/components/notification-center/NotificationRenewal' export const PushNotifications = (): ReactElement => { const { safe, safeLoaded } = useSafeInfo() @@ -108,6 +109,8 @@ export const PushNotifications = (): ReactElement => { flexDirection: 'column', }} > + + Enable push notifications for {safeLoaded ? 'this Safe Account' : 'your Safe Accounts'} in your browser with your signature. You will need to enable them again if you clear your browser cache. Learn more diff --git a/apps/web/src/components/settings/PushNotifications/logic.ts b/apps/web/src/components/settings/PushNotifications/logic.ts index 12185b4086..35768ad377 100644 --- a/apps/web/src/components/settings/PushNotifications/logic.ts +++ b/apps/web/src/components/settings/PushNotifications/logic.ts @@ -12,6 +12,7 @@ import { checksumAddress } from '@/utils/addresses' import { isLedger } from '@/utils/wallets' import { createWeb3 } from '@/hooks/wallets/web3' import type { ConnectedWallet } from '@/hooks/wallets/useOnboard' +import { isEmpty } from 'lodash' type WithRequired = T & { [P in K]-?: T[P] } @@ -86,6 +87,25 @@ const getSafeRegistrationSignature = async ({ export type NotifiableSafes = { [chainId: string]: Array } +// Merges two NotifiableSafes objects, keeping only unique safe addresses +export const mergeNotifiableSafes = ( + existingSafes: NotifiableSafes = {}, + newSafes: NotifiableSafes = {}, +): NotifiableSafes | undefined => { + const mergedSafes = { ...existingSafes } + + for (const [chainId, safeAddresses] of Object.entries(newSafes)) { + if (!mergedSafes[chainId]) { + mergedSafes[chainId] = safeAddresses + continue + } + + mergedSafes[chainId] = [...new Set([...mergedSafes[chainId], ...safeAddresses])] + } + + return isEmpty(mergedSafes) ? undefined : mergedSafes +} + export const getRegisterDevicePayload = async ({ safesToRegister, uuid, diff --git a/apps/web/src/services/push-notifications/preferences.ts b/apps/web/src/services/push-notifications/preferences.ts index 10119ecf93..185437705b 100644 --- a/apps/web/src/services/push-notifications/preferences.ts +++ b/apps/web/src/services/push-notifications/preferences.ts @@ -6,6 +6,13 @@ import type { WebhookType } from '@/service-workers/firebase-messaging/webhook-t export type PushNotificationPrefsKey = `${string}:${string}` +export enum NotificationsTokenVersion { + // V1 is the initial version of the notifications token + V1 = 1, + // V2 is the version after the migration to the new notification service + V2 = 2, +} + export type PushNotificationPreferences = { [safeKey: PushNotificationPrefsKey]: { chainId: string diff --git a/apps/web/src/store/notificationsSlice.ts b/apps/web/src/store/notificationsSlice.ts index 36f4703877..d988d11d6a 100644 --- a/apps/web/src/store/notificationsSlice.ts +++ b/apps/web/src/store/notificationsSlice.ts @@ -13,7 +13,7 @@ export type Notification = { timestamp: number isDismissed?: boolean isRead?: boolean - link?: { href: LinkProps['href']; title: string } + link?: { href: LinkProps['href']; title: string } | { onClick: () => void; title: string } onClose?: () => void } diff --git a/apps/web/src/utils/chains.ts b/apps/web/src/utils/chains.ts index 971212b90d..7ab31f318a 100644 --- a/apps/web/src/utils/chains.ts +++ b/apps/web/src/utils/chains.ts @@ -39,6 +39,7 @@ export enum FEATURES { PROPOSERS = 'PROPOSERS', TARGETED_SURVEY = 'TARGETED_SURVEY', BRIDGE = 'BRIDGE', + RENEW_NOTIFICATIONS_TOKEN = 'RENEW_NOTIFICATIONS_TOKEN', } export const FeatureRoutes = { diff --git a/yarn.lock b/yarn.lock index b345021f10..1c773f22ae 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3807,546 +3807,541 @@ __metadata: languageName: node linkType: hard -"@firebase/analytics-compat@npm:0.2.14": - version: 0.2.14 - resolution: "@firebase/analytics-compat@npm:0.2.14" - dependencies: - "@firebase/analytics": "npm:0.10.8" - "@firebase/analytics-types": "npm:0.8.2" - "@firebase/component": "npm:0.6.9" - "@firebase/util": "npm:1.10.0" +"@firebase/analytics-compat@npm:0.2.16": + version: 0.2.16 + resolution: "@firebase/analytics-compat@npm:0.2.16" + dependencies: + "@firebase/analytics": "npm:0.10.10" + "@firebase/analytics-types": "npm:0.8.3" + "@firebase/component": "npm:0.6.11" + "@firebase/util": "npm:1.10.2" tslib: "npm:^2.1.0" peerDependencies: "@firebase/app-compat": 0.x - checksum: 10/0e368159d24223076b488b27308c11e5ef50456aff49fc58e1f66616228021c61e60c3299f63ce52ddc2f7099d803e9048bc28cd952cf5c302917002c03c85ee + checksum: 10/33562eaad2f7f4e51847d13190d1433c44209ae7cf6331511ed1fd98c76ad15f47a89f8ff91abd05e9d732b65d4571dde54856d2fd07513ddf76d35e84b688b4 languageName: node linkType: hard -"@firebase/analytics-types@npm:0.8.2": - version: 0.8.2 - resolution: "@firebase/analytics-types@npm:0.8.2" - checksum: 10/297fb7becbc51950c7de5809fed896c391d1e87b4d8bb4bf88f4e8760b2e32f903a7dd8e92de4424b49c4e2ecb60a44d49e2f9c68ac3f7ffe3a0194f78910392 +"@firebase/analytics-types@npm:0.8.3": + version: 0.8.3 + resolution: "@firebase/analytics-types@npm:0.8.3" + checksum: 10/8292a400af00b08d201dd833095e041602c460d6fb3da54251a1a8811da1416fd82a8b8bd162574fe75decf233a4a07367b4d794d1d85cde91c7ae52747b1b20 languageName: node linkType: hard -"@firebase/analytics@npm:0.10.8": - version: 0.10.8 - resolution: "@firebase/analytics@npm:0.10.8" +"@firebase/analytics@npm:0.10.10": + version: 0.10.10 + resolution: "@firebase/analytics@npm:0.10.10" dependencies: - "@firebase/component": "npm:0.6.9" - "@firebase/installations": "npm:0.6.9" - "@firebase/logger": "npm:0.4.2" - "@firebase/util": "npm:1.10.0" + "@firebase/component": "npm:0.6.11" + "@firebase/installations": "npm:0.6.11" + "@firebase/logger": "npm:0.4.4" + "@firebase/util": "npm:1.10.2" tslib: "npm:^2.1.0" peerDependencies: "@firebase/app": 0.x - checksum: 10/152ddaf68146f02baa7060d34426c25ec13890a53942ffa2db09faa148bef35f59ee9810e6fb8f561fb3d115b71d1fb9fb111d2a0f0199aa510220782557c765 + checksum: 10/8f0b3d9504a480809a3b5f6bfa9c5ee8892a5b43f0592f6c11604739994e52f85691df00af9ba6a2b0a3197e42a2a18b19549faded6906d45126cba62d63c87d languageName: node linkType: hard -"@firebase/app-check-compat@npm:0.3.15": - version: 0.3.15 - resolution: "@firebase/app-check-compat@npm:0.3.15" +"@firebase/app-check-compat@npm:0.3.17": + version: 0.3.17 + resolution: "@firebase/app-check-compat@npm:0.3.17" dependencies: - "@firebase/app-check": "npm:0.8.8" - "@firebase/app-check-types": "npm:0.5.2" - "@firebase/component": "npm:0.6.9" - "@firebase/logger": "npm:0.4.2" - "@firebase/util": "npm:1.10.0" + "@firebase/app-check": "npm:0.8.10" + "@firebase/app-check-types": "npm:0.5.3" + "@firebase/component": "npm:0.6.11" + "@firebase/logger": "npm:0.4.4" + "@firebase/util": "npm:1.10.2" tslib: "npm:^2.1.0" peerDependencies: "@firebase/app-compat": 0.x - checksum: 10/ae541d324d5f91dbb7b479855d3380c4fe73e365013b80973a54620405093e6fd2f8e418549155b3a527530472a19b6edf6df1481a708f823eba42e376105b28 + checksum: 10/67e85e6ef87e1e4083ed27c7947c9b4fa64c287b31b1fe416be21d0dcfcc0cfeccc9d50d8e71f17960daa82afb81a0831956c45e2795006944bc0a70bfa28a06 languageName: node linkType: hard -"@firebase/app-check-interop-types@npm:0.3.2": - version: 0.3.2 - resolution: "@firebase/app-check-interop-types@npm:0.3.2" - checksum: 10/3effe656a4762c541838f4bde91b4498e51d48389046b930dc3dbb012e54b6ab0727f7c68a3e94198f633d57833346fc337a0847b6b03d2407030e1489d466fe +"@firebase/app-check-interop-types@npm:0.3.3": + version: 0.3.3 + resolution: "@firebase/app-check-interop-types@npm:0.3.3" + checksum: 10/55d92d9907fa137ae0e71ff14ad3be2d11c86d0e04bed7e8e58ba8f08531ce4867fa6fc75d9f8da86c0f8d05df15f34b13fe40014c3210e98ac00d2d9a0d4faa languageName: node linkType: hard -"@firebase/app-check-types@npm:0.5.2": - version: 0.5.2 - resolution: "@firebase/app-check-types@npm:0.5.2" - checksum: 10/2b33a7adfb7b6ebf5423940bf0af5909df69bf2d6184e12e989f6c76062077be16c31193795349862b4f8aab6b3059806b732a92995cae30fd77419f19a86c6e +"@firebase/app-check-types@npm:0.5.3": + version: 0.5.3 + resolution: "@firebase/app-check-types@npm:0.5.3" + checksum: 10/8ffdd1a678060abe10daa9b7fbf2e0d30585b5e7b066adbcaf6aa89daee94d02683d3b41225fde7dd8b0d7cc8c3ac1d9053685099167aff5d407427dfbaeebcf languageName: node linkType: hard -"@firebase/app-check@npm:0.8.8": - version: 0.8.8 - resolution: "@firebase/app-check@npm:0.8.8" +"@firebase/app-check@npm:0.8.10": + version: 0.8.10 + resolution: "@firebase/app-check@npm:0.8.10" dependencies: - "@firebase/component": "npm:0.6.9" - "@firebase/logger": "npm:0.4.2" - "@firebase/util": "npm:1.10.0" + "@firebase/component": "npm:0.6.11" + "@firebase/logger": "npm:0.4.4" + "@firebase/util": "npm:1.10.2" tslib: "npm:^2.1.0" peerDependencies: "@firebase/app": 0.x - checksum: 10/a3676f2143c8e438d7e8ac11bb163af30880f6ce6acc5cc54cfcc214b8efd5dabce14c040626f8a64a3967db144b99834f1108c2076a0eae8a6baf864b5a3d77 + checksum: 10/ffa15926b2ee8bf2ed00194cc2dfb39261d1856e785d3963918189290b3c63917b27e6f76631fa3508d0c10ada49f681c20830da1ee9a6a4007009ebf0624824 languageName: node linkType: hard -"@firebase/app-compat@npm:0.2.43": - version: 0.2.43 - resolution: "@firebase/app-compat@npm:0.2.43" +"@firebase/app-compat@npm:0.2.47": + version: 0.2.47 + resolution: "@firebase/app-compat@npm:0.2.47" dependencies: - "@firebase/app": "npm:0.10.13" - "@firebase/component": "npm:0.6.9" - "@firebase/logger": "npm:0.4.2" - "@firebase/util": "npm:1.10.0" + "@firebase/app": "npm:0.10.17" + "@firebase/component": "npm:0.6.11" + "@firebase/logger": "npm:0.4.4" + "@firebase/util": "npm:1.10.2" tslib: "npm:^2.1.0" - checksum: 10/e27340dbc9804ffd0d469cc1fa919cd61b6e04fe96599d14414aa06c3dcbe75b23c324f0bedfff4dbd5d9b829b8dde5a2e8b5464f1f686d66f9c00971d9d4c56 + checksum: 10/9162f9c991334c5ce4dca96855b85905de9cfc1da756bc459bf444d596a6501bab4e6b01a1f7c3c444dc22c10da087699fccc3904c9c9641896a1aabbca2e858 languageName: node linkType: hard -"@firebase/app-types@npm:0.9.2": - version: 0.9.2 - resolution: "@firebase/app-types@npm:0.9.2" - checksum: 10/566b3714a4d7e8180514258e4b1549bf5b28ae0383b4ff53d3532a45e114048afdd27c1fef8688d871dd9e5ad5307e749776e23f094122655ac6b0fb550eb11a +"@firebase/app-types@npm:0.9.3": + version: 0.9.3 + resolution: "@firebase/app-types@npm:0.9.3" + checksum: 10/a980165e1433f0c4bb269be1f5cf25bf1d048a0e9f161779a71eb028def9bdcea82852cecee19baecee4fa602e5e62414120aabdf2b9722b8349c877f222b85a languageName: node linkType: hard -"@firebase/app@npm:0.10.13": - version: 0.10.13 - resolution: "@firebase/app@npm:0.10.13" +"@firebase/app@npm:0.10.17": + version: 0.10.17 + resolution: "@firebase/app@npm:0.10.17" dependencies: - "@firebase/component": "npm:0.6.9" - "@firebase/logger": "npm:0.4.2" - "@firebase/util": "npm:1.10.0" + "@firebase/component": "npm:0.6.11" + "@firebase/logger": "npm:0.4.4" + "@firebase/util": "npm:1.10.2" idb: "npm:7.1.1" tslib: "npm:^2.1.0" - checksum: 10/54ec64b3a992c2f30c800fb5638bf586e7e7f351899887c701d5f946ad8ca445d8c1d3024007b7939a7e6ae29a51d90567552a863323594dc6fca22f1e811e0b + checksum: 10/399087eeeafca308f5440c47a34046a3e49384e431a4c07f655f2a541aeaf04f6006b159ae05c99f37e115ae969c569d7a8e50267ed7e2c55dd68bbd048b16d7 languageName: node linkType: hard -"@firebase/auth-compat@npm:0.5.14": - version: 0.5.14 - resolution: "@firebase/auth-compat@npm:0.5.14" +"@firebase/auth-compat@npm:0.5.16": + version: 0.5.16 + resolution: "@firebase/auth-compat@npm:0.5.16" dependencies: - "@firebase/auth": "npm:1.7.9" - "@firebase/auth-types": "npm:0.12.2" - "@firebase/component": "npm:0.6.9" - "@firebase/util": "npm:1.10.0" + "@firebase/auth": "npm:1.8.1" + "@firebase/auth-types": "npm:0.12.3" + "@firebase/component": "npm:0.6.11" + "@firebase/util": "npm:1.10.2" tslib: "npm:^2.1.0" - undici: "npm:6.19.7" peerDependencies: "@firebase/app-compat": 0.x - checksum: 10/85d5259e7b04b14b5d02dc1fb19b015d742c594c14138f33f13146ed9f6caa7ed9d19d65bb99aaca57e70ffd2a491e520d8638eadefbd00f839d37ef972cbbda + checksum: 10/0781f14b0b624bfd2594f06ab5afe62f5597e48874b2b5c98bc55e02e9162a50b77b40d2deb7d5dcc601be1f824d00baee1643c2d07eaef132ec599db0c0bfdc languageName: node linkType: hard -"@firebase/auth-interop-types@npm:0.2.3": - version: 0.2.3 - resolution: "@firebase/auth-interop-types@npm:0.2.3" - checksum: 10/e55b8ded6bd1a5e6a2845c9c7ed520bb9a8a76e4ddf90249bf685986ac7b1fb079be2fa4edcb6a3aa81d1d56870a470eadcd5a8f20b797dccd803d72ed4c80aa +"@firebase/auth-interop-types@npm:0.2.4": + version: 0.2.4 + resolution: "@firebase/auth-interop-types@npm:0.2.4" + checksum: 10/a76abd5037e6e45e79f90fce4e3741142c12b24963aabb07a5098690ef4da2a6073e6a81437d926b1a27716f4f9edc56b7296f7160cb6cc48464969cb77197bc languageName: node linkType: hard -"@firebase/auth-types@npm:0.12.2": - version: 0.12.2 - resolution: "@firebase/auth-types@npm:0.12.2" +"@firebase/auth-types@npm:0.12.3": + version: 0.12.3 + resolution: "@firebase/auth-types@npm:0.12.3" peerDependencies: "@firebase/app-types": 0.x "@firebase/util": 1.x - checksum: 10/f55449381de8e2a24ffaf19f12b5c4a093c8323034253ea7a5f7afc946327d20b09f32a483c12960862a1c4814645ea80bc4343f0a9f22db5dc048ca82773132 + checksum: 10/5eda88380e9b33a6c91b0f8dd6a581895c2770aa5b46b1928a006a74d35c6a310bfe737141ff013764a4e02815efa530f1576d674f09f905fbe3b14050dc7fce languageName: node linkType: hard -"@firebase/auth@npm:1.7.9": - version: 1.7.9 - resolution: "@firebase/auth@npm:1.7.9" +"@firebase/auth@npm:1.8.1": + version: 1.8.1 + resolution: "@firebase/auth@npm:1.8.1" dependencies: - "@firebase/component": "npm:0.6.9" - "@firebase/logger": "npm:0.4.2" - "@firebase/util": "npm:1.10.0" + "@firebase/component": "npm:0.6.11" + "@firebase/logger": "npm:0.4.4" + "@firebase/util": "npm:1.10.2" tslib: "npm:^2.1.0" - undici: "npm:6.19.7" peerDependencies: "@firebase/app": 0.x "@react-native-async-storage/async-storage": ^1.18.1 peerDependenciesMeta: "@react-native-async-storage/async-storage": optional: true - checksum: 10/010013ec339c9ef7b4d9278c6cacfd8e2eb3282f27a3e4e89c42a5968955976a26277421f34fda3e9400409a22a61f632bcc03e713b3f39d71e4777bc003165d + checksum: 10/9201278960f5bdbd8c83406a9cd525a0a0c4535ba531bbb3601acf9a9508d0fe73284e689231d01f4053c8b1adcfba2c0a9f6c3e0fc3d8c6b67756e415c6c49a languageName: node linkType: hard -"@firebase/component@npm:0.6.9": - version: 0.6.9 - resolution: "@firebase/component@npm:0.6.9" +"@firebase/component@npm:0.6.11": + version: 0.6.11 + resolution: "@firebase/component@npm:0.6.11" dependencies: - "@firebase/util": "npm:1.10.0" + "@firebase/util": "npm:1.10.2" tslib: "npm:^2.1.0" - checksum: 10/76c865d640e4b24a0e50876ecdc0e1199df38af562131a937b5a4bac924d61b6933339afb7906881dca509f38f3b0c511cd6b5008e061424c61b20876de9531e + checksum: 10/a70b88dfed7ec16766c472722362d65709fb88c9dfb9e61277e735f9515c88747196942d91c988f4fa4690fc4eb0b924f6f7fe2042d22c38a25b9cff82158fa6 languageName: node linkType: hard -"@firebase/data-connect@npm:0.1.0": - version: 0.1.0 - resolution: "@firebase/data-connect@npm:0.1.0" +"@firebase/data-connect@npm:0.1.3": + version: 0.1.3 + resolution: "@firebase/data-connect@npm:0.1.3" dependencies: - "@firebase/auth-interop-types": "npm:0.2.3" - "@firebase/component": "npm:0.6.9" - "@firebase/logger": "npm:0.4.2" - "@firebase/util": "npm:1.10.0" + "@firebase/auth-interop-types": "npm:0.2.4" + "@firebase/component": "npm:0.6.11" + "@firebase/logger": "npm:0.4.4" + "@firebase/util": "npm:1.10.2" tslib: "npm:^2.1.0" peerDependencies: "@firebase/app": 0.x - checksum: 10/20dac7c4755a0dde17abea0c99b41e96c9f7eea6ea39c36fd85f3f5554991b718a25b4bc1f92850208ec1f0e3b1ee584b1cf1913c4ad6c41643655682c06a2b0 + checksum: 10/8cb2b00971c5e04ba003eb8718584d817ec23c3bcdbb1820aeb08159bd3aa638689aa7b3e1b24192c4052e0a0a4bfffd11bcd2f69925609ae285991243decd44 languageName: node linkType: hard -"@firebase/database-compat@npm:1.0.8": - version: 1.0.8 - resolution: "@firebase/database-compat@npm:1.0.8" +"@firebase/database-compat@npm:2.0.1": + version: 2.0.1 + resolution: "@firebase/database-compat@npm:2.0.1" dependencies: - "@firebase/component": "npm:0.6.9" - "@firebase/database": "npm:1.0.8" - "@firebase/database-types": "npm:1.0.5" - "@firebase/logger": "npm:0.4.2" - "@firebase/util": "npm:1.10.0" + "@firebase/component": "npm:0.6.11" + "@firebase/database": "npm:1.0.10" + "@firebase/database-types": "npm:1.0.7" + "@firebase/logger": "npm:0.4.4" + "@firebase/util": "npm:1.10.2" tslib: "npm:^2.1.0" - checksum: 10/28389efcc87da77b822cb27c31707824fe98e7b0a3bf9cbf2b0c0fccd9edd72e2681a9467b76b120281464dbfc814852ebca63d99a385a9cb68fb55c7b334105 + checksum: 10/55e0aa5f0c14e74206d0d69753bae70f4944fb81bd698285c571fe0e640d6960eea1b9f88b3dabb0513d04ed2673c825013e0f879e52b5382f72a511242185c9 languageName: node linkType: hard -"@firebase/database-types@npm:1.0.5": - version: 1.0.5 - resolution: "@firebase/database-types@npm:1.0.5" +"@firebase/database-types@npm:1.0.7": + version: 1.0.7 + resolution: "@firebase/database-types@npm:1.0.7" dependencies: - "@firebase/app-types": "npm:0.9.2" - "@firebase/util": "npm:1.10.0" - checksum: 10/bdf667da0369dce8623987fc01cad8db09cfe1895130f69ab581d34a0ee043ca6113c32457629147ae1441a934d985ede9d7cbe104ac346de6d0c21629903a8b + "@firebase/app-types": "npm:0.9.3" + "@firebase/util": "npm:1.10.2" + checksum: 10/4e9357f70c6e02ed0a6098deb89f82e43b2635f13cfec46455eb92da52aec9018c4a246b0f61a0a72bc28f027181faf3823110e96ba828563dc0c11eecb4e9fc languageName: node linkType: hard -"@firebase/database@npm:1.0.8": - version: 1.0.8 - resolution: "@firebase/database@npm:1.0.8" +"@firebase/database@npm:1.0.10": + version: 1.0.10 + resolution: "@firebase/database@npm:1.0.10" dependencies: - "@firebase/app-check-interop-types": "npm:0.3.2" - "@firebase/auth-interop-types": "npm:0.2.3" - "@firebase/component": "npm:0.6.9" - "@firebase/logger": "npm:0.4.2" - "@firebase/util": "npm:1.10.0" + "@firebase/app-check-interop-types": "npm:0.3.3" + "@firebase/auth-interop-types": "npm:0.2.4" + "@firebase/component": "npm:0.6.11" + "@firebase/logger": "npm:0.4.4" + "@firebase/util": "npm:1.10.2" faye-websocket: "npm:0.11.4" tslib: "npm:^2.1.0" - checksum: 10/adb199a6ad7866b418e8b319cc505e108bfc8200b5406f21857706df0849d4e5982a1b0e44e07001821edebef73c4dfffc7f96fb77a2cff10bb9ac26f17d40c3 + checksum: 10/2fcc48fa1d25316c817f595bd4f976d30fe559f2941b29c56ee0ff777da0fb7530b9a96a5172d72399b9de37d4a8447affffac7285254c09e71787e5455e15fe languageName: node linkType: hard -"@firebase/firestore-compat@npm:0.3.38": - version: 0.3.38 - resolution: "@firebase/firestore-compat@npm:0.3.38" +"@firebase/firestore-compat@npm:0.3.40": + version: 0.3.40 + resolution: "@firebase/firestore-compat@npm:0.3.40" dependencies: - "@firebase/component": "npm:0.6.9" - "@firebase/firestore": "npm:4.7.3" - "@firebase/firestore-types": "npm:3.0.2" - "@firebase/util": "npm:1.10.0" + "@firebase/component": "npm:0.6.11" + "@firebase/firestore": "npm:4.7.5" + "@firebase/firestore-types": "npm:3.0.3" + "@firebase/util": "npm:1.10.2" tslib: "npm:^2.1.0" peerDependencies: "@firebase/app-compat": 0.x - checksum: 10/de9e92b5ac612ea73322407b65b1d90067f7138d2159bcfd2400535d09968ea8c8b44956282172129eca78bf951f74a6991394b2634913458927570bb4fa8cd8 + checksum: 10/5e0f765a7089a42a9def7c367de6aa615f2911383a5c6605e14a1288189448953cff773191c00f6bac00c99f260cd109600865c8ebae6eedc97b79c3edc19fbb languageName: node linkType: hard -"@firebase/firestore-types@npm:3.0.2": - version: 3.0.2 - resolution: "@firebase/firestore-types@npm:3.0.2" +"@firebase/firestore-types@npm:3.0.3": + version: 3.0.3 + resolution: "@firebase/firestore-types@npm:3.0.3" peerDependencies: "@firebase/app-types": 0.x "@firebase/util": 1.x - checksum: 10/81e91f836a026ecb70937407ca8699add7abb5b050d8815620cde97c3eec3f78f7dfbb366225758909f0df31d9f21e98a84ba62701bd27ee38b2609898c11acd + checksum: 10/98b5153b3b98d5a1aa67385962619966352752e49d1120425e608bb4b715d60674943808d9bdb7587a8e7ab2e821fc2d470974d7e0d7419cb333e846c1ab038c languageName: node linkType: hard -"@firebase/firestore@npm:4.7.3": - version: 4.7.3 - resolution: "@firebase/firestore@npm:4.7.3" +"@firebase/firestore@npm:4.7.5": + version: 4.7.5 + resolution: "@firebase/firestore@npm:4.7.5" dependencies: - "@firebase/component": "npm:0.6.9" - "@firebase/logger": "npm:0.4.2" - "@firebase/util": "npm:1.10.0" - "@firebase/webchannel-wrapper": "npm:1.0.1" + "@firebase/component": "npm:0.6.11" + "@firebase/logger": "npm:0.4.4" + "@firebase/util": "npm:1.10.2" + "@firebase/webchannel-wrapper": "npm:1.0.3" "@grpc/grpc-js": "npm:~1.9.0" "@grpc/proto-loader": "npm:^0.7.8" tslib: "npm:^2.1.0" - undici: "npm:6.19.7" peerDependencies: "@firebase/app": 0.x - checksum: 10/f46a6e3c03eadfa970d8ecc17627d0d696931a19092fcf5be4b2056a209da3691be0bd040a11d333d26c15fd14329ce0fb5dfc32bf2cfa530a4d035b45ef4edf + checksum: 10/d63912eade105de102bda9f0505935a1e85d5e87a99fd5dd7a2b6ddb48ebb7b76a47f646bcc0f2bbdbfb32c53b27d037b2162911cf097a67faf2c39b8c57a5aa languageName: node linkType: hard -"@firebase/functions-compat@npm:0.3.14": - version: 0.3.14 - resolution: "@firebase/functions-compat@npm:0.3.14" +"@firebase/functions-compat@npm:0.3.17": + version: 0.3.17 + resolution: "@firebase/functions-compat@npm:0.3.17" dependencies: - "@firebase/component": "npm:0.6.9" - "@firebase/functions": "npm:0.11.8" - "@firebase/functions-types": "npm:0.6.2" - "@firebase/util": "npm:1.10.0" + "@firebase/component": "npm:0.6.11" + "@firebase/functions": "npm:0.12.0" + "@firebase/functions-types": "npm:0.6.3" + "@firebase/util": "npm:1.10.2" tslib: "npm:^2.1.0" peerDependencies: "@firebase/app-compat": 0.x - checksum: 10/a8d6cbcdc646d78adecfcdc1f8fa14a5d9af2394dd69cac00c6826106b923e01d246c67fb7e09025ca7cfb876f8d5df97240cc056c64ccee8899ca5f17178a6c + checksum: 10/435f6f5c2f2fd31932ceee3b23f385d4a48459bfff8559c16caf3f40090d67421dacebacb0e6bec67ee105448f6b586712103423ecab1933c2dd5e73cf9e8994 languageName: node linkType: hard -"@firebase/functions-types@npm:0.6.2": - version: 0.6.2 - resolution: "@firebase/functions-types@npm:0.6.2" - checksum: 10/5b8733f9d4bd85a617d35dd10ce296d9ec0490494e584697c4eda8098ff1e865607d7880b84194e86c35d438bbcd714977c111180502d0d1b6b2da1cde1b37ca +"@firebase/functions-types@npm:0.6.3": + version: 0.6.3 + resolution: "@firebase/functions-types@npm:0.6.3" + checksum: 10/95fc99d7c1420f119136d1e048c9bf32e5bf644453c8c3a406e0fd11506f2191f9b4b1df087e6e978daeb7d1b52a98bb8de9f9acec8a1934f925e9004a0ade47 languageName: node linkType: hard -"@firebase/functions@npm:0.11.8": - version: 0.11.8 - resolution: "@firebase/functions@npm:0.11.8" +"@firebase/functions@npm:0.12.0": + version: 0.12.0 + resolution: "@firebase/functions@npm:0.12.0" dependencies: - "@firebase/app-check-interop-types": "npm:0.3.2" - "@firebase/auth-interop-types": "npm:0.2.3" - "@firebase/component": "npm:0.6.9" - "@firebase/messaging-interop-types": "npm:0.2.2" - "@firebase/util": "npm:1.10.0" + "@firebase/app-check-interop-types": "npm:0.3.3" + "@firebase/auth-interop-types": "npm:0.2.4" + "@firebase/component": "npm:0.6.11" + "@firebase/messaging-interop-types": "npm:0.2.3" + "@firebase/util": "npm:1.10.2" tslib: "npm:^2.1.0" - undici: "npm:6.19.7" peerDependencies: "@firebase/app": 0.x - checksum: 10/44f3e42df189f3f3cb3c366b38e93a0ffdfaa1a7b3f6dba624bcd9a7cda3d3271df66f2769b7cbe7e1e5ff01bf6ab3bef6c1e1e15c6646e34514d1e2ebb60555 + checksum: 10/1d9c2a17d3c4be52ca2678a1ab36be5e9bab8a4a40660996312e22cdcde0c4d25f9830c4f00a8896d378f23cd78907d824805293d3a9a14f8f81557c3903cacd languageName: node linkType: hard -"@firebase/installations-compat@npm:0.2.9": - version: 0.2.9 - resolution: "@firebase/installations-compat@npm:0.2.9" +"@firebase/installations-compat@npm:0.2.11": + version: 0.2.11 + resolution: "@firebase/installations-compat@npm:0.2.11" dependencies: - "@firebase/component": "npm:0.6.9" - "@firebase/installations": "npm:0.6.9" - "@firebase/installations-types": "npm:0.5.2" - "@firebase/util": "npm:1.10.0" + "@firebase/component": "npm:0.6.11" + "@firebase/installations": "npm:0.6.11" + "@firebase/installations-types": "npm:0.5.3" + "@firebase/util": "npm:1.10.2" tslib: "npm:^2.1.0" peerDependencies: "@firebase/app-compat": 0.x - checksum: 10/919e1a4f4b63f5fe757a3c9cefb4a36cbab92deb4a6e15f249c94d6e80d1c6d37e5e384a460af8c17fc88e3091594bf43d036c88b704516c279b5ab8401977e1 + checksum: 10/0c4373542e7ce88867891e675cbb77ed23ee6c6bc9cf830acb55fa2101fc7059c52e24e16fb26d39dc68ba2a35fba39c1daf16998b858c7399f347818331cc90 languageName: node linkType: hard -"@firebase/installations-types@npm:0.5.2": - version: 0.5.2 - resolution: "@firebase/installations-types@npm:0.5.2" +"@firebase/installations-types@npm:0.5.3": + version: 0.5.3 + resolution: "@firebase/installations-types@npm:0.5.3" peerDependencies: "@firebase/app-types": 0.x - checksum: 10/2e795280c299d644b8c8e3fdfa5c6f20cb367dd3b7df32317211f84393fa169b33dee0cbed28de407f3b22dc8f1fb2f7a11ae5a373f8082cc570ef61ef6b91ba + checksum: 10/7f3fbdc028bda9124b6d46609be5bf6dfd18e76b62da6a5a1bc233e750f0aa81a996b010049083c475abeec6b304d0b0b9a6d87e713f0b3c7db8c7c702c16d05 languageName: node linkType: hard -"@firebase/installations@npm:0.6.9": - version: 0.6.9 - resolution: "@firebase/installations@npm:0.6.9" +"@firebase/installations@npm:0.6.11": + version: 0.6.11 + resolution: "@firebase/installations@npm:0.6.11" dependencies: - "@firebase/component": "npm:0.6.9" - "@firebase/util": "npm:1.10.0" + "@firebase/component": "npm:0.6.11" + "@firebase/util": "npm:1.10.2" idb: "npm:7.1.1" tslib: "npm:^2.1.0" peerDependencies: "@firebase/app": 0.x - checksum: 10/349c8b7e877b002fb29f274f4d239fbca4c2c266ccb66ecfb5f1762f973a7fe1be99cc3346184d1230e6e35feb2b6f9e8b7169479fa0018b53e4a83837848619 + checksum: 10/60deb19363ab6648609f8ba39451636fd253bda8858e975a3270eee13eb8b113fe278c14f5140ecedab2f02784c7b0ed2a8a52e571b3d3ea076aabd8a71559cb languageName: node linkType: hard -"@firebase/logger@npm:0.4.2": - version: 0.4.2 - resolution: "@firebase/logger@npm:0.4.2" +"@firebase/logger@npm:0.4.4": + version: 0.4.4 + resolution: "@firebase/logger@npm:0.4.4" dependencies: tslib: "npm:^2.1.0" - checksum: 10/961b4605220c0a56c5f3ccf4e6049e44c27303c1ca998c6fa1d19de785c76d93e3b1a3da455e9f40655711345d8d779912366e4f369d93eda8d08c407cc5b140 + checksum: 10/fb47ac92c86a77f997cef19775afd97edc7e46a28d8c10e2829b2f343da6115c73b9108a34d52f419cf7789c596af53177bf4a9d06dc53e2a31427e448ba347e languageName: node linkType: hard -"@firebase/messaging-compat@npm:0.2.12": - version: 0.2.12 - resolution: "@firebase/messaging-compat@npm:0.2.12" +"@firebase/messaging-compat@npm:0.2.15": + version: 0.2.15 + resolution: "@firebase/messaging-compat@npm:0.2.15" dependencies: - "@firebase/component": "npm:0.6.9" - "@firebase/messaging": "npm:0.12.12" - "@firebase/util": "npm:1.10.0" + "@firebase/component": "npm:0.6.11" + "@firebase/messaging": "npm:0.12.15" + "@firebase/util": "npm:1.10.2" tslib: "npm:^2.1.0" peerDependencies: "@firebase/app-compat": 0.x - checksum: 10/0437ba6b24327d9eb02dc87ba61146fbb9720491ad671dc554438ac87e162d5fb154c704400d55c87ce01dd5aeedada9d0367fd114d840ead0d07802475eaa60 + checksum: 10/1899d40fef5f2221276a835c5b7cf14eb4d47c3b98952f5d57aa2e51353473fb2de14faf6cb0fa08e4ff1e2f675e5aabb59a42f53fa34c618c0b878a42a02e66 languageName: node linkType: hard -"@firebase/messaging-interop-types@npm:0.2.2": - version: 0.2.2 - resolution: "@firebase/messaging-interop-types@npm:0.2.2" - checksum: 10/547f8ebf2c5a8dcbc484991b97d76bd3dc3eb4bd9d4e6ea2ffc652097c7065d92dc68d389ddb19fba41e0ce3b5f4cd757ed22f96b4744801149b0f8dbf323af7 +"@firebase/messaging-interop-types@npm:0.2.3": + version: 0.2.3 + resolution: "@firebase/messaging-interop-types@npm:0.2.3" + checksum: 10/3359f2675d884f7908c7c0146098db6a6f88ba4d91021f822edb638633a3fc7f6554e647a71f44265ec7afc40e6b26a4824afeb0ee3883110bb77ceff4b95c14 languageName: node linkType: hard -"@firebase/messaging@npm:0.12.12": - version: 0.12.12 - resolution: "@firebase/messaging@npm:0.12.12" +"@firebase/messaging@npm:0.12.15": + version: 0.12.15 + resolution: "@firebase/messaging@npm:0.12.15" dependencies: - "@firebase/component": "npm:0.6.9" - "@firebase/installations": "npm:0.6.9" - "@firebase/messaging-interop-types": "npm:0.2.2" - "@firebase/util": "npm:1.10.0" + "@firebase/component": "npm:0.6.11" + "@firebase/installations": "npm:0.6.11" + "@firebase/messaging-interop-types": "npm:0.2.3" + "@firebase/util": "npm:1.10.2" idb: "npm:7.1.1" tslib: "npm:^2.1.0" peerDependencies: "@firebase/app": 0.x - checksum: 10/a00125489085782faf189ad42f75bed108c6632b9d198d114e0a8ce28d89f9455b4f78ff8f7d24d4a86ad13e1e14e0f17fa2ff3605c6dd0c8ff1b65fef23ce3d + checksum: 10/29daf4f8d970b3893b234c4a38dff22233ac8d541c940de737803e5ff5a1da84271b96f5ab142fd8c7ae0afb95df2d4939c294dccc99ac7ebf9343827097fe0a languageName: node linkType: hard -"@firebase/performance-compat@npm:0.2.9": - version: 0.2.9 - resolution: "@firebase/performance-compat@npm:0.2.9" +"@firebase/performance-compat@npm:0.2.11": + version: 0.2.11 + resolution: "@firebase/performance-compat@npm:0.2.11" dependencies: - "@firebase/component": "npm:0.6.9" - "@firebase/logger": "npm:0.4.2" - "@firebase/performance": "npm:0.6.9" - "@firebase/performance-types": "npm:0.2.2" - "@firebase/util": "npm:1.10.0" + "@firebase/component": "npm:0.6.11" + "@firebase/logger": "npm:0.4.4" + "@firebase/performance": "npm:0.6.11" + "@firebase/performance-types": "npm:0.2.3" + "@firebase/util": "npm:1.10.2" tslib: "npm:^2.1.0" peerDependencies: "@firebase/app-compat": 0.x - checksum: 10/bc4e8b0208c9bc603518e1388713ec80658ee109c6af80d429479447ccb85e8e831269383233c379ed66bf37469d13f5c234074d0c0c9e7e69e909be5fdeca4f + checksum: 10/c39bfcea6f1168158d2a30613d2ee6d97ebc4131dc4849f641babd76433e9a0986143c54e0a10ef99eaa087f44ee3c31228fcd9c8b5faaff8048d29c3ed12155 languageName: node linkType: hard -"@firebase/performance-types@npm:0.2.2": - version: 0.2.2 - resolution: "@firebase/performance-types@npm:0.2.2" - checksum: 10/d25ae06cb75ab6b44ffacf7affadc1f651881f283e58381c444eb63b62dfb74c33c544ab89843518ec1d15367ba7c4343b4d6b22de1f1df35126a1283baa578d +"@firebase/performance-types@npm:0.2.3": + version: 0.2.3 + resolution: "@firebase/performance-types@npm:0.2.3" + checksum: 10/1c9724ce59db4bddfed90627fe47d47877a51c33fc3e9dea0417c54adec2cf812ab8e90b6f15c7d6992823cb7d4a47e255ac33de221a1470d2e2c80342de1a10 languageName: node linkType: hard -"@firebase/performance@npm:0.6.9": - version: 0.6.9 - resolution: "@firebase/performance@npm:0.6.9" +"@firebase/performance@npm:0.6.11": + version: 0.6.11 + resolution: "@firebase/performance@npm:0.6.11" dependencies: - "@firebase/component": "npm:0.6.9" - "@firebase/installations": "npm:0.6.9" - "@firebase/logger": "npm:0.4.2" - "@firebase/util": "npm:1.10.0" + "@firebase/component": "npm:0.6.11" + "@firebase/installations": "npm:0.6.11" + "@firebase/logger": "npm:0.4.4" + "@firebase/util": "npm:1.10.2" tslib: "npm:^2.1.0" peerDependencies: "@firebase/app": 0.x - checksum: 10/d682d0b1e342ed3eda1a5ddab39c8ddac33afc9edb2c7335a2f9a28eb8c268b975bbf450a3bad5443138edebaf2aa731dca0b774bcf3211a6dc215b35d86d849 + checksum: 10/28e6e079b288bd788a255eefbb829d7ec01f2b71ac4b80eb8ea8f847b11abebffafa4e3fcb43a407f8d0b2f36af7d48ac692ec0208da51f25883f550143bbd49 languageName: node linkType: hard -"@firebase/remote-config-compat@npm:0.2.9": - version: 0.2.9 - resolution: "@firebase/remote-config-compat@npm:0.2.9" +"@firebase/remote-config-compat@npm:0.2.11": + version: 0.2.11 + resolution: "@firebase/remote-config-compat@npm:0.2.11" dependencies: - "@firebase/component": "npm:0.6.9" - "@firebase/logger": "npm:0.4.2" - "@firebase/remote-config": "npm:0.4.9" - "@firebase/remote-config-types": "npm:0.3.2" - "@firebase/util": "npm:1.10.0" + "@firebase/component": "npm:0.6.11" + "@firebase/logger": "npm:0.4.4" + "@firebase/remote-config": "npm:0.4.11" + "@firebase/remote-config-types": "npm:0.3.3" + "@firebase/util": "npm:1.10.2" tslib: "npm:^2.1.0" peerDependencies: "@firebase/app-compat": 0.x - checksum: 10/a6db7509512d8d22b7ddf1127c741715e379e04e5b3246372bb0302d7c84afb421a94550adebecddcce5def115d61729a9580940dce6e65f8d77f9af30f69fe1 + checksum: 10/122d446677c89d0655b0c3e38bed1abc62d6dee5bb29c8349d038772673798b1a9136e0be969a1e1411b7136cc19bbc93815f75d52b8047a190c2380f5aedb0a languageName: node linkType: hard -"@firebase/remote-config-types@npm:0.3.2": - version: 0.3.2 - resolution: "@firebase/remote-config-types@npm:0.3.2" - checksum: 10/6c91599c653825708aba9fe9e4562997f108c3e4f3eaf5d188f31c859a6ad013414aa7a213b6b021b68049dd0dd57158546dbc9fb64384652274ef7f57ce7d7d +"@firebase/remote-config-types@npm:0.3.3": + version: 0.3.3 + resolution: "@firebase/remote-config-types@npm:0.3.3" + checksum: 10/1f183c305c8c775d4e200593c57cac1e4abf9bb43be9a84a02af360ef0a448aa9bb869a547dc31dd40b69f07f8cc3459b06a03ff475bda11198c263bba28fa97 languageName: node linkType: hard -"@firebase/remote-config@npm:0.4.9": - version: 0.4.9 - resolution: "@firebase/remote-config@npm:0.4.9" +"@firebase/remote-config@npm:0.4.11": + version: 0.4.11 + resolution: "@firebase/remote-config@npm:0.4.11" dependencies: - "@firebase/component": "npm:0.6.9" - "@firebase/installations": "npm:0.6.9" - "@firebase/logger": "npm:0.4.2" - "@firebase/util": "npm:1.10.0" + "@firebase/component": "npm:0.6.11" + "@firebase/installations": "npm:0.6.11" + "@firebase/logger": "npm:0.4.4" + "@firebase/util": "npm:1.10.2" tslib: "npm:^2.1.0" peerDependencies: "@firebase/app": 0.x - checksum: 10/f14189f38c8cf75db16bf8b85dd004486b1dd8242f62d697c716fa85cd32928aed549ccea8c632a528870a424fc7f04f1132a14b3b099276cd7696c78e644b28 + checksum: 10/a55a2ca45e5e99c54ad76a06f721399112e0ad8000aa6217171742bee06bcbf47385d2eb48d49ee0123c671b25a7b63222a08ab9b85ac25d1398e53622e5adb2 languageName: node linkType: hard -"@firebase/storage-compat@npm:0.3.12": - version: 0.3.12 - resolution: "@firebase/storage-compat@npm:0.3.12" +"@firebase/storage-compat@npm:0.3.14": + version: 0.3.14 + resolution: "@firebase/storage-compat@npm:0.3.14" dependencies: - "@firebase/component": "npm:0.6.9" - "@firebase/storage": "npm:0.13.2" - "@firebase/storage-types": "npm:0.8.2" - "@firebase/util": "npm:1.10.0" + "@firebase/component": "npm:0.6.11" + "@firebase/storage": "npm:0.13.4" + "@firebase/storage-types": "npm:0.8.3" + "@firebase/util": "npm:1.10.2" tslib: "npm:^2.1.0" peerDependencies: "@firebase/app-compat": 0.x - checksum: 10/4eea49a57f1d7537da697e5ff8b4e035ff1af69e416e7eab14485753c39c25eaa5a71bd2bafba0985ac6a7ce803f98f2f2f83c613c78c8f74bce286e3259b8ec + checksum: 10/7e3d7421c3576c33a34e49fd94bc27d4bd34bdee0446dffc75d95ba6795cfcb5b1d5b22ebb22044ee5027809a229b7bf7bfa75dd4f307b70518e86f07a849840 languageName: node linkType: hard -"@firebase/storage-types@npm:0.8.2": - version: 0.8.2 - resolution: "@firebase/storage-types@npm:0.8.2" +"@firebase/storage-types@npm:0.8.3": + version: 0.8.3 + resolution: "@firebase/storage-types@npm:0.8.3" peerDependencies: "@firebase/app-types": 0.x "@firebase/util": 1.x - checksum: 10/e00716932370d2004dc9f7ef6d7e3aff72305b91569fa6ec15e8bc2ec784b03a150391e8be2c063234edbbfda7796da915d48e26ce2f1f7c5d3343acd39afd99 + checksum: 10/ffee882352ec2d475d4cebc13a01d150621a2e4842b4b252ba12d731d68c4d3c0a03181202192af04014e3fb61c0d6fc51f9929985cc67e25948daa223159fc6 languageName: node linkType: hard -"@firebase/storage@npm:0.13.2": - version: 0.13.2 - resolution: "@firebase/storage@npm:0.13.2" +"@firebase/storage@npm:0.13.4": + version: 0.13.4 + resolution: "@firebase/storage@npm:0.13.4" dependencies: - "@firebase/component": "npm:0.6.9" - "@firebase/util": "npm:1.10.0" + "@firebase/component": "npm:0.6.11" + "@firebase/util": "npm:1.10.2" tslib: "npm:^2.1.0" - undici: "npm:6.19.7" peerDependencies: "@firebase/app": 0.x - checksum: 10/d887f80cf95ef5daa80ffb2e6d564d25abb8a3e84099bee9730c95082597a12028bbf73bfe66fca2df3cdf04eaadea8e9d74ec0a826f946bc8f002293a9983ea + checksum: 10/bd8d2a0e01dbaba0533e5651a06937ff943415e2c4e79a90e9d61660787f7aadb6b05e8c2fdcf556dcae013f9d6f9972e529bd91d2c13cc13d960cffa628fc68 languageName: node linkType: hard -"@firebase/util@npm:1.10.0": - version: 1.10.0 - resolution: "@firebase/util@npm:1.10.0" +"@firebase/util@npm:1.10.2": + version: 1.10.2 + resolution: "@firebase/util@npm:1.10.2" dependencies: tslib: "npm:^2.1.0" - checksum: 10/eb161f1c6294ff097f3c40236820e9e6e29cd6582e5e1254148157143272493580535ee2cb9e7c6055d3909b3ef39d8b64086895b071c665827acb66742b63eb + checksum: 10/5a07cc9b21e710449e6b8ebee0042e89d8a6160e4a7b99ba733c60a762c29a2ef79a0ed2c40090f6dcda0e7d38244fb9445637a169ce80220031dcfd7ae05b12 languageName: node linkType: hard -"@firebase/vertexai-preview@npm:0.0.4": - version: 0.0.4 - resolution: "@firebase/vertexai-preview@npm:0.0.4" +"@firebase/vertexai@npm:1.0.2": + version: 1.0.2 + resolution: "@firebase/vertexai@npm:1.0.2" dependencies: - "@firebase/app-check-interop-types": "npm:0.3.2" - "@firebase/component": "npm:0.6.9" - "@firebase/logger": "npm:0.4.2" - "@firebase/util": "npm:1.10.0" + "@firebase/app-check-interop-types": "npm:0.3.3" + "@firebase/component": "npm:0.6.11" + "@firebase/logger": "npm:0.4.4" + "@firebase/util": "npm:1.10.2" tslib: "npm:^2.1.0" peerDependencies: "@firebase/app": 0.x "@firebase/app-types": 0.x - checksum: 10/8ec48d81f48aebdcc63b65d802c67bf36880f256e5c2f5f3b152dc91c8c0e924053fba2fac5218716612f8ee720b25d0822337a214f16f5b7e51ce0247dfc4e5 + checksum: 10/637916b2398a23d0de2ab2252297b4a4907f52880d51acf5c997b8f0c2ee002e36423169b25fd57e4f1253b775503a1a862254f7b8b3fac3b72cbf4d34311621 languageName: node linkType: hard -"@firebase/webchannel-wrapper@npm:1.0.1": - version: 1.0.1 - resolution: "@firebase/webchannel-wrapper@npm:1.0.1" - checksum: 10/22fc7e1e6dd36ab7c13f3a6c1ff51f4d405304424dc323cb146109e7a3ab3b592e2ddb29f53197ee5719a8448cdedb98d9e86a080f9365e389f8429b1c6555c2 +"@firebase/webchannel-wrapper@npm:1.0.3": + version: 1.0.3 + resolution: "@firebase/webchannel-wrapper@npm:1.0.3" + checksum: 10/f4b491274855bd7b33b0339896c9f62049aab0de034f3196493531d0f4a19242a281570293e12b36b5ebfc8ba898e0329036646ff2b0f9a9b1f7d86f4e4593b4 languageName: node linkType: hard @@ -7519,7 +7514,7 @@ __metadata: ethers: "npm:^6.13.4" exponential-backoff: "npm:^3.1.0" fake-indexeddb: "npm:^4.0.2" - firebase: "npm:^10.3.1" + firebase: "npm:^11.1.0" fuse.js: "npm:^7.0.0" gray-matter: "npm:^4.0.3" husky: "npm:^9.0.11" @@ -19442,39 +19437,39 @@ __metadata: languageName: node linkType: hard -"firebase@npm:^10.3.1": - version: 10.14.1 - resolution: "firebase@npm:10.14.1" - dependencies: - "@firebase/analytics": "npm:0.10.8" - "@firebase/analytics-compat": "npm:0.2.14" - "@firebase/app": "npm:0.10.13" - "@firebase/app-check": "npm:0.8.8" - "@firebase/app-check-compat": "npm:0.3.15" - "@firebase/app-compat": "npm:0.2.43" - "@firebase/app-types": "npm:0.9.2" - "@firebase/auth": "npm:1.7.9" - "@firebase/auth-compat": "npm:0.5.14" - "@firebase/data-connect": "npm:0.1.0" - "@firebase/database": "npm:1.0.8" - "@firebase/database-compat": "npm:1.0.8" - "@firebase/firestore": "npm:4.7.3" - "@firebase/firestore-compat": "npm:0.3.38" - "@firebase/functions": "npm:0.11.8" - "@firebase/functions-compat": "npm:0.3.14" - "@firebase/installations": "npm:0.6.9" - "@firebase/installations-compat": "npm:0.2.9" - "@firebase/messaging": "npm:0.12.12" - "@firebase/messaging-compat": "npm:0.2.12" - "@firebase/performance": "npm:0.6.9" - "@firebase/performance-compat": "npm:0.2.9" - "@firebase/remote-config": "npm:0.4.9" - "@firebase/remote-config-compat": "npm:0.2.9" - "@firebase/storage": "npm:0.13.2" - "@firebase/storage-compat": "npm:0.3.12" - "@firebase/util": "npm:1.10.0" - "@firebase/vertexai-preview": "npm:0.0.4" - checksum: 10/1b2fd7b653f632d2bb0cf3b87e7eda0ae69d28b702a7de00d2a166c7985b8747ef9d15f7ac151847d242f91a1cb08c689d0a07197e8b80561ff1a679398bf9f8 +"firebase@npm:^11.1.0": + version: 11.1.0 + resolution: "firebase@npm:11.1.0" + dependencies: + "@firebase/analytics": "npm:0.10.10" + "@firebase/analytics-compat": "npm:0.2.16" + "@firebase/app": "npm:0.10.17" + "@firebase/app-check": "npm:0.8.10" + "@firebase/app-check-compat": "npm:0.3.17" + "@firebase/app-compat": "npm:0.2.47" + "@firebase/app-types": "npm:0.9.3" + "@firebase/auth": "npm:1.8.1" + "@firebase/auth-compat": "npm:0.5.16" + "@firebase/data-connect": "npm:0.1.3" + "@firebase/database": "npm:1.0.10" + "@firebase/database-compat": "npm:2.0.1" + "@firebase/firestore": "npm:4.7.5" + "@firebase/firestore-compat": "npm:0.3.40" + "@firebase/functions": "npm:0.12.0" + "@firebase/functions-compat": "npm:0.3.17" + "@firebase/installations": "npm:0.6.11" + "@firebase/installations-compat": "npm:0.2.11" + "@firebase/messaging": "npm:0.12.15" + "@firebase/messaging-compat": "npm:0.2.15" + "@firebase/performance": "npm:0.6.11" + "@firebase/performance-compat": "npm:0.2.11" + "@firebase/remote-config": "npm:0.4.11" + "@firebase/remote-config-compat": "npm:0.2.11" + "@firebase/storage": "npm:0.13.4" + "@firebase/storage-compat": "npm:0.3.14" + "@firebase/util": "npm:1.10.2" + "@firebase/vertexai": "npm:1.0.2" + checksum: 10/ff75b0b09b99b5cc28e54f0408a5791f5d96d5d63fb795a514fbb699fbb5ed745b77f0ca715d852bad06c564c22c27ad0303046eca776fcc9cfd000a65f8deb7 languageName: node linkType: hard @@ -31779,13 +31774,6 @@ __metadata: languageName: node linkType: hard -"undici@npm:6.19.7": - version: 6.19.7 - resolution: "undici@npm:6.19.7" - checksum: 10/77fb8b0377388f6dba8244b015841318d621031211b4f3c2273d809304b77ec44adeba4b89dfd6708bdc044190e18f068e5b231882ef15d057d4624e46f544e3 - languageName: node - linkType: hard - "undici@npm:^6.11.1, undici@npm:^6.18.2": version: 6.21.0 resolution: "undici@npm:6.21.0"