feat(mobile): FirebaseAuthProvider (e-post/lösen) bakom AuthProvider-gränssnittet (AUTH-4)

This commit is contained in:
Sven (AAMOS AI)
2026-08-15 20:39:29 +07:00
parent 8f61ef1592
commit 8352c3a0ce
3 changed files with 642 additions and 26 deletions
+1
View File
@@ -32,6 +32,7 @@
"expo-splash-screen": "~31.0.13",
"expo-status-bar": "~3.0.9",
"expo-system-ui": "~6.0.9",
"firebase": "^12.17.1",
"i18next": "^26.3.6",
"react": "19.1.0",
"react-dom": "19.1.0",
@@ -0,0 +1,88 @@
import { initializeApp, getApps, getApp } from "firebase/app";
import {
initializeAuth,
getAuth,
onAuthStateChanged as fbOnAuthStateChanged,
signInWithEmailAndPassword,
createUserWithEmailAndPassword,
signOut as fbSignOut,
type Auth,
type User,
type Persistence,
} from "firebase/auth";
import * as fbAuth from "firebase/auth";
import AsyncStorage from "@react-native-async-storage/async-storage";
import type { AuthProvider, AuthUser, Unsubscribe } from "./types";
/**
* ENDA mobilfilen som importerar Firebase. App-koden använder bara
* AuthProvider-gränssnittet. Byt till Zitadel => byt bara denna fil.
* Publik klient-config (identifierare, ingen hemlighet).
*/
const firebaseConfig = {
apiKey: "AIzaSyAH2F-aZRvZXQtGD7X8cF9Zp3yXUhEl3sM",
authDomain: "cibello-c2ff3.firebaseapp.com",
projectId: "cibello-c2ff3",
storageBucket: "cibello-c2ff3.firebasestorage.app",
messagingSenderId: "1034102905039",
appId: "1:1034102905039:web:12e31120989655f34affba",
};
const app = getApps().length ? getApp() : initializeApp(firebaseConfig);
// getReactNativePersistence finns i runtime men saknas ibland i typerna
// (firebase-js-sdk#9316) hämtas därför via en typsäker modul-cast.
const getReactNativePersistence = (
fbAuth as unknown as { getReactNativePersistence: (storage: unknown) => Persistence }
).getReactNativePersistence;
// AsyncStorage-persistens så inloggningen överlever app-omstart.
let auth: Auth;
try {
auth = initializeAuth(app, { persistence: getReactNativePersistence(AsyncStorage) });
} catch {
// initializeAuth kastar om den redan körts (Fast Refresh) återanvänd instansen.
auth = getAuth(app);
}
function toAuthUser(u: User | null): AuthUser | null {
if (!u) return null;
return {
uid: u.uid,
email: u.email,
emailVerified: u.emailVerified,
displayName: u.displayName,
providerId: u.providerData[0]?.providerId ?? null,
};
}
export const firebaseAuthProvider: AuthProvider = {
async signUpWithEmail(email, password) {
const cred = await createUserWithEmailAndPassword(auth, email, password);
return toAuthUser(cred.user)!;
},
async signInWithEmail(email, password) {
const cred = await signInWithEmailAndPassword(auth, email, password);
return toAuthUser(cred.user)!;
},
async signInWithGoogle(): Promise<AuthUser> {
throw new Error("Google-inloggning läggs till i AUTH-6.");
},
async signInWithApple(): Promise<AuthUser> {
throw new Error("Apple-inloggning läggs till i AUTH-6.");
},
async signOut() {
await fbSignOut(auth);
},
currentUser() {
return toAuthUser(auth.currentUser);
},
onAuthStateChanged(callback): Unsubscribe {
return fbOnAuthStateChanged(auth, (u) => callback(toAuthUser(u)));
},
async getIdToken(forceRefresh = false) {
const u = auth.currentUser;
if (!u) return null;
return u.getIdToken(forceRefresh);
},
};
+553 -26
View File
@@ -134,7 +134,7 @@ importers:
version: 5.1.0
firebase-admin:
specifier: ^14.2.0
version: 14.2.0
version: 14.2.0(@firebase/app-compat@0.5.16)(@firebase/app@0.16.0)
ioredis:
specifier: ^6.0.0
version: 6.0.0
@@ -223,6 +223,9 @@ importers:
expo-system-ui:
specifier: ~6.0.9
version: 6.0.9(expo@54.0.36)(react-native-web@0.21.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.86.2(@babel/core@7.29.7))(@types/react@19.1.17)(react@19.1.0))
firebase:
specifier: ^12.17.1
version: 12.17.1(@react-native-async-storage/async-storage@2.2.0(react-native@0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.86.2(@babel/core@7.29.7))(@types/react@19.1.17)(react@19.1.0)))
i18next:
specifier: ^26.3.6
version: 26.3.6(typescript@5.9.3)
@@ -1940,19 +1943,92 @@ packages:
'@fastify/rate-limit@10.3.0':
resolution: {integrity: sha512-eIGkG9XKQs0nyynatApA3EVrojHOuq4l6fhB4eeCk4PIOeadvOJz9/4w3vGI44Go17uaXOWEcPkaD8kuKm7g6Q==}
'@firebase/ai@2.14.0':
resolution: {integrity: sha512-TYEQqCQUTyVHuG/HVi9vau6F9kvEaS49o/hmdn/yUuN6ZXQkwIml2nNJTIBfjNl/r9LOxwUNILgcOY16nxObug==}
engines: {node: '>=20.0.0'}
peerDependencies:
'@firebase/app': 0.x
'@firebase/app-types': 0.x
'@firebase/analytics-compat@0.2.29':
resolution: {integrity: sha512-allztvCvCUlItZzD97TiRAtGoFJzR1FQFmLxbaLc6PvgscqD9cl5NdKPTtka6keShVYXvCZJpzWcRoH4TME8rw==}
peerDependencies:
'@firebase/app': 0.x
'@firebase/app-compat': 0.x
'@firebase/analytics-types@0.8.4':
resolution: {integrity: sha512-zQ+XTgkwH6CY/eUSHJRP7e4LxM30RCxlCmob5sy2axs25GE3Ny0XdgpDscMTHHQIGqWkxPXad4w2Mw9sCgT8zQ==}
'@firebase/analytics@0.10.23':
resolution: {integrity: sha512-34ALWXzWA6PTRUA5hipZmsm1RKzeecw5J1+qTCXsiMzwLqONC+GuTIQSdmm91MmTAEA+wG1Q5t0IFahcYQOqAA==}
peerDependencies:
'@firebase/app': 0.x
'@firebase/app-check-compat@0.4.6':
resolution: {integrity: sha512-2pzNEZEkX84jSqy6TH6FI1HSLA1lc7kakRUybBbKjg9YhIttPlW/XX3N9CDtChji2PTTPWVPZiWhB10exHfA+A==}
engines: {node: '>=20.0.0'}
peerDependencies:
'@firebase/app': 0.x
'@firebase/app-compat': 0.x
'@firebase/app-check-interop-types@0.3.4':
resolution: {integrity: sha512-zz3i6e13B8BfWiLy8MABtTh8aGIACgKbf9UVnyHcWs+yQzJXgQcl8A46b0zfaiJHdQ+niF0ouAfcpuf+3LMPQg==}
'@firebase/app-check-types@0.5.4':
resolution: {integrity: sha512-xV7JsIyzVr15aA7f3Pi0rB9gdBuVubs89FGA8VkRYA4g0l78poADgdfrScgf7NndSg9mm7cR7PJyY0+t22KaGw==}
'@firebase/app-check@0.13.0':
resolution: {integrity: sha512-AbMttBKazQvGVXBZhQdVAdPzRhwHyJAY3Ghu5y2C7IZKIDIppzNYz0shTZ1mP4FBJa+28BuC4t+5h1Q6pT3Asg==}
engines: {node: '>=20.0.0'}
peerDependencies:
'@firebase/app': 0.x
'@firebase/app-compat@0.5.16':
resolution: {integrity: sha512-shQq37O8qELDzvsVwYPlDXwD1zlcrZ0m2bpBF5ov2HSbY8x+AHsnL5TtJ2e1JAfkQN05qHao1AfabS69PN6GiA==}
engines: {node: '>=20.0.0'}
'@firebase/app-types@0.9.5':
resolution: {integrity: sha512-YevqTjvo7Iujsa9Dwowmd6dSoElhzmD63ZSrq6bzjvQ6POjYgNjOFHLmNIgJs48eNO093NCERibuFnxbfOvU7A==}
'@firebase/app@0.16.0':
resolution: {integrity: sha512-G+ZGEyVP8YTb3ay6A+XpcYgFH3sTESHcnHU/EyTktodqhz2BHkLq+QEP7IVwjiMX0cxYwpVKip0/wC0KZcn9vQ==}
engines: {node: '>=20.0.0'}
'@firebase/auth-compat@0.6.9':
resolution: {integrity: sha512-/hHeTBmQ61+N5J1RECls+WfskZTY78JXr7aO5EMOfUpqJvDqvoS+568k0rp6Ss/4UWwBjadILs+H+SGy1zCS3A==}
engines: {node: '>=20.0.0'}
peerDependencies:
'@firebase/app': 0.x
'@firebase/app-compat': 0.x
'@firebase/auth-interop-types@0.2.5':
resolution: {integrity: sha512-1Li/YuBDBAXcKv7BzY4U28gontUmAaw53sYiqbaVOMCFb2lFKK/c3CGMUWqtwe7+TXrl3poWnTCL5umYBg85Eg==}
'@firebase/auth-types@0.13.1':
resolution: {integrity: sha512-0c1Mnid0uMDfGJHeUS4zfvBa4/CedJXotGy/n/NZJnBjwiJawt0ZYU+wH2VAVLiRCEfG2ncCkAX3yd1/2nrB7g==}
peerDependencies:
'@firebase/app-types': 0.x
'@firebase/util': 1.x
'@firebase/auth@1.13.4':
resolution: {integrity: sha512-s+NS1aV0DDyyfoIMeSz53HXnVTv7ufJjJfrP63XyaWHweJ5vOoxKWrTm5tO7S7PDqvyOa/Wi3oP0dgAo6JTMMA==}
engines: {node: '>=20.0.0'}
peerDependencies:
'@firebase/app': 0.x
'@react-native-async-storage/async-storage': ^2.2.0 || ^3.0.0
peerDependenciesMeta:
'@react-native-async-storage/async-storage':
optional: true
'@firebase/component@0.7.4':
resolution: {integrity: sha512-tLpOaaCol9ugUIYp2R3CbWPPA8Ajg/papX/XHEy8U52b/QXH3BbX8tTJX9aShDCjp+9sMAxMLD94i7lresdugQ==}
engines: {node: '>=20.0.0'}
'@firebase/data-connect@0.7.3':
resolution: {integrity: sha512-nHBFk3Ntl+NZCRIUG2d5j7I69P0otjyQ/duhVKLbw4+5cNke/F6RK1pdE5Jnf831/QOTs2Bd00LlxlZ+jNsb9w==}
peerDependencies:
'@firebase/app': 0.x
'@firebase/database-compat@2.1.6':
resolution: {integrity: sha512-mu7S/75UIajB1A5M9Vfojk69LttW55uABp9nHEtWrV/mIaSEwvoaIe9GySsEzS2EKFK5/3f5okcAuUbihhYeJg==}
engines: {node: '>=20.0.0'}
@@ -1972,14 +2048,129 @@ packages:
resolution: {integrity: sha512-D+j4+8uhGtNd1tVD+X+c8JrC4ppStGJKyujSQt2NPwdN26QcCk0BeIxue+UqspHkHiFHyQOimwlzjLewGq6S+A==}
engines: {node: '>=20.0.0'}
'@firebase/firestore-compat@0.4.12':
resolution: {integrity: sha512-k2uX81Ao/S0jnFcWGPOQpKK1cPlJHvD9WIqh/RE1XBDP2yg5zhE4rHhSg1rtB11k39q3nKon9XLNDDrPjGclag==}
engines: {node: '>=20.0.0'}
peerDependencies:
'@firebase/app': 0.x
'@firebase/app-compat': 0.x
'@firebase/firestore-types@3.0.4':
resolution: {integrity: sha512-jGn+JSS4X9zZsrfu7Yw66v5YRdOLD1oyQh4USR0xWl4CUqV/DA6bNIXRPpxH/cUl3iVTNiP6MN7g+EL42A4qfA==}
peerDependencies:
'@firebase/app-types': 0.x
'@firebase/util': 1.x
'@firebase/firestore@4.17.0':
resolution: {integrity: sha512-P9tof6pyO1bnLlMWbux+5O7WFJqlb7OTPMKxxOiXKYiQl7mxykAvxr1BFCgWeEXUU7DZxQncyJ040B0IhFVZCg==}
engines: {node: '>=20.0.0'}
peerDependencies:
'@firebase/app': 0.x
'@firebase/functions-compat@0.4.6':
resolution: {integrity: sha512-dj9sOet+FIU91jeU4A3vGJoXHty7NqkSfjRLCwLgJXPDk1m72KFuxD3nlFgw/yXx/Fr7UjqzbxZ0LrIOdpx7+w==}
engines: {node: '>=20.0.0'}
peerDependencies:
'@firebase/app': 0.x
'@firebase/app-compat': 0.x
'@firebase/functions-types@0.6.4':
resolution: {integrity: sha512-zV6kgqtduR4rUAdC/ilS7kmb93XD7bEZoJDlVBZqlOw2uGGGCNBQBuleww2rr0Ulr3L9o2TDjumEt68/l1f9DQ==}
'@firebase/functions@0.13.6':
resolution: {integrity: sha512-9obLnzeQUivK5lmtGFOU2ucQ38BjTp+jpPtbfFp/mDsdVCvEpRqdWNvMMQ6aQwR4vcVc/utsvngm5BRkXbc7ZA==}
engines: {node: '>=20.0.0'}
peerDependencies:
'@firebase/app': 0.x
'@firebase/installations-compat@0.2.23':
resolution: {integrity: sha512-isaXmjb9roM83eVeXAe+ZRNKYNsSo2s0aNM+cy04AAGEyVL/d8Aa11GwEXovRFeYjl9+1yRAOxRDTOukZRwTxA==}
peerDependencies:
'@firebase/app': 0.x
'@firebase/app-compat': 0.x
'@firebase/installations-types@0.5.4':
resolution: {integrity: sha512-U2eFapdHwjb43Vx9o+Pmj4dFfvcHEK1IirEFLqMtWrTHvmdrS3gBpBD1kmJk/9HjsOtoHZxJ2Paoe79e+L1ZPg==}
peerDependencies:
'@firebase/app-types': 0.x
'@firebase/installations@0.6.23':
resolution: {integrity: sha512-MBkbcQfd+3qHjW+slsH4s7jH5qTdGlYpwqmxEZ7QcIpgDxu1SKyU0f+mCZhCt1BCacLNiOWF5L0R06N0LtlfMg==}
peerDependencies:
'@firebase/app': 0.x
'@firebase/logger@0.5.1':
resolution: {integrity: sha512-vZKLsqE1ABOy8OjQiE7cUTFn4gvaqlk88yp8N94Pk/sDpq61YqZGqmVFZTvOyflTwuYFcWirBdYGoJgbDaXKYQ==}
engines: {node: '>=20.0.0'}
'@firebase/messaging-compat@0.2.28':
resolution: {integrity: sha512-/AmMqHRnSQhPsdeED3ocs+s30/tpFvZDiiwIYY2uXFRvLujo1fnbPOeCFoe4Y+dRy1LCSjpvJf+dy5ZTsxi1yg==}
peerDependencies:
'@firebase/app': 0.x
'@firebase/app-compat': 0.x
'@firebase/messaging-interop-types@0.2.5':
resolution: {integrity: sha512-tUEKnaAP2Y/MNIqgnriPpV6e5l13Vs/+p2yrd6NGlncPJT9O3a8muYZtdnWe+IJ4fgKLHJVC79n/asxk/N5Msw==}
'@firebase/messaging@0.13.1':
resolution: {integrity: sha512-kL8fdjbNBI7hprlXJrUjktDWosrpT4JtfwXtVVevImPF/rBRAsC+LS/jIs+kgQVuotnvMhaBCgAFipBoY9YU9g==}
peerDependencies:
'@firebase/app': 0.x
'@firebase/performance-compat@0.2.26':
resolution: {integrity: sha512-jgoocXLN6ao26xWQ8pzosmzQ33uLzGBJQPNK0NTbVy1XvIHr5pfgBf9hWLOxsWe+R7sJq5bjD+8ybXprmt61mA==}
peerDependencies:
'@firebase/app': 0.x
'@firebase/app-compat': 0.x
'@firebase/performance-types@0.2.4':
resolution: {integrity: sha512-kJSEk7b0uhpcPRyL4SQ/GPujLqk52XNKcXlnsKDbWGAb9vugcLvOU3u6zfEdwd+d8hWJb5S5ZizV1JFFI0nkKg==}
'@firebase/performance@0.7.13':
resolution: {integrity: sha512-1u6fuXP9cj0s+lkTFAspr/ttfPebPbEdpx+5Wdr4mPZbp8qH2KCMxOddEAR1ZMRa5GI0E7hDYSnolEmbqOFOAg==}
peerDependencies:
'@firebase/app': 0.x
'@firebase/remote-config-compat@0.2.28':
resolution: {integrity: sha512-kEO9Gn6fbmVj7eNUtZ6d59mLgUDUD0qo7aCicGOWNfuRWTaUv3CF9DMYychO61zaEQ3cfA+CEny4V1E8A1gRGA==}
peerDependencies:
'@firebase/app': 0.x
'@firebase/app-compat': 0.x
'@firebase/remote-config-types@0.5.1':
resolution: {integrity: sha512-cX/1LT6KQwkXzck2eSzeKnuvXZCyr8qaPpDcikoJs7jmI+oBOXixpDLeDtWj1U6GNMkIoXrEDNoyT2Ypcyp5/A==}
'@firebase/remote-config@0.9.1':
resolution: {integrity: sha512-nzQUSJnk1zAZEl2Q5O3I7Z61cYLK5JI4H6wyyOiHkVZ+bmgy1YXNNMptNbVjixMQ/eCzgA6nZRaC+1eBcJGUFA==}
peerDependencies:
'@firebase/app': 0.x
'@firebase/storage-compat@0.4.4':
resolution: {integrity: sha512-qSRgCB9f2R/nCp8t/8OC101cIFBFeUazlRInOMdzbnLzvrQBzEfx19SrR4pvdj/0+M+P/y8AK/a2s+3EB+B1Pw==}
engines: {node: '>=20.0.0'}
peerDependencies:
'@firebase/app': 0.x
'@firebase/app-compat': 0.x
'@firebase/storage-types@0.8.4':
resolution: {integrity: sha512-BT7cwxJOx8SWwlQfrlC+bD/Sk3Cw+1odCi8UZNFNWTVZoPsBnA5W+mqtZzVnvsdJpXCFGSGQ7R7vOR6dtM/BRA==}
peerDependencies:
'@firebase/app-types': 0.x
'@firebase/util': 1.x
'@firebase/storage@0.14.4':
resolution: {integrity: sha512-jfzEWZb3Fpsq3FwAB2ifoc8mcSh935qXdDou3TpyjDWa45hhNcZUv8/w28/10njByhfK7snbakKN30nwnzQ3/w==}
engines: {node: '>=20.0.0'}
peerDependencies:
'@firebase/app': 0.x
'@firebase/util@1.15.2':
resolution: {integrity: sha512-974pWIZVLDMc5GW5YAsj8y0XxULxIy/sPUy7tsxmWbF93KRIyh9xpuHlh0zDL+shUcf5nHDjFOg9YLiQ763eiA==}
engines: {node: '>=20.0.0'}
'@firebase/webchannel-wrapper@1.0.6':
resolution: {integrity: sha512-Vr/Mqu79dMwGRAyGbJ4uN4+BtXB3/mRTdzetD1daWNeG8QaWuzhhbG77GltO5c0yYmYls8i250iX73624GJd7Q==}
'@google-cloud/firestore@8.7.1':
resolution: {integrity: sha512-Hp/WI8sH569ANitsko6RNvCUkzTCYudHoINOkQjiJq2FBG6kKnofBAW7PtS823cu6RMxHqK2RxRcspdjrRpUFA==}
engines: {node: '>=18'}
@@ -2004,6 +2195,15 @@ packages:
resolution: {integrity: sha512-k9Dj3DV/itK9D06Y8f190Qgop7/Ui+D0njFV3LHMPwPT75DpXLQohE9Wmz0QElrJnzsjB7KPWiKJbOl7IPDArQ==}
engines: {node: '>=12.10.0'}
'@grpc/grpc-js@1.9.16':
resolution: {integrity: sha512-wE4Ut/olIzfKqp631XrG+wbF0v1vWFN4YL9FyXC2LJiG33DsV7PLzURjrCvY/6je2ntdRkeLpPDluzSRGaVltQ==}
engines: {node: ^8.13.0 || >=10.10.0}
'@grpc/proto-loader@0.7.15':
resolution: {integrity: sha512-tMXdRCfYVixjuFK+Hk0Q1s38gV9zDiDJfWL3h1rv4Qc39oILCu1TRTDt7+fGUI8K4G1Fj125Hx/ru3azECWTyQ==}
engines: {node: '>=6'}
hasBin: true
'@grpc/proto-loader@0.8.1':
resolution: {integrity: sha512-wtF6h+DY6M3YaDBPAmvuuA6jV8Sif9MjtOI5euKFWRgCDl5PeDpPsHR9u2l6St5ceY8AZgoNDww5+HvEsXFsGg==}
engines: {node: '>=6'}
@@ -4095,6 +4295,9 @@ packages:
resolution: {integrity: sha512-zfs5PdccEgjX479bbMmz95Rqc7ttQ4LV3qkGFlPiqOaOu/suBZc3fG52Qzn2hQjiSHkBM4NP2AZV5r2NvAt0TQ==}
engines: {node: '>=22'}
firebase@12.17.1:
resolution: {integrity: sha512-dhp41ye9jMQvhx5FwjMkf/hjDHJApl7gXmvzOZGvP0M7c/GZGUnQ4qvsvlOBkF0Pa7wAwHMdcpL0ON2pXCQ4Sw==}
fix-dts-default-cjs-exports@1.0.1:
resolution: {integrity: sha512-pVIECanWFC61Hzl2+oOCtoJ3F17kglZC/6N94eRWycFgBH35hHx0Li604ZIzhseh97mf2p0cv7vVrOZGoqhlEg==}
@@ -4365,6 +4568,9 @@ packages:
typescript:
optional: true
idb@7.1.1:
resolution: {integrity: sha512-gchesWBzyvGHRO9W8tzUWFDycow5gwjvFKfyV9FF32Y7F50yZMp7mP+T2mJIWFx49zicqyC4uefHM17o6xKIVQ==}
ieee754@1.2.1:
resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==}
@@ -5363,6 +5569,10 @@ packages:
resolution: {integrity: sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==}
hasBin: true
re2js@2.8.6:
resolution: {integrity: sha512-xLgQil4kIUCrAzVk9fRSkxkFNwmygLFjVxXrLc65aE1F0+Zsb8rxumFBy4XKyvgMCTL6kilDq3EZ0piE2dP/Dg==}
engines: {node: '>=18.0.0'}
react-devtools-core@6.1.5:
resolution: {integrity: sha512-ePrwPfxAnB+7hgnEr8vpKxL9cmnp7F322t8oqcPshbIQQhDKgFDW4tjhF2wjVbdXF9O/nyuy3sQWd9JGpiLPvA==}
@@ -6250,6 +6460,9 @@ packages:
resolution: {integrity: sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==}
engines: {node: '>= 8'}
web-vitals@4.2.4:
resolution: {integrity: sha512-r4DIlprAGwJ7YM11VZp4R884m0Vmgr6EAKe3P+kO0PPj3Unqyvv59rczf6UiGcb9Z8QxZVcqKNwv/g0WNdWwsw==}
webidl-conversions@3.0.1:
resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==}
@@ -7949,20 +8162,125 @@ snapshots:
fastify-plugin: 5.1.0
toad-cache: 3.7.4
'@firebase/ai@2.14.0(@firebase/app-types@0.9.5)(@firebase/app@0.16.0)':
dependencies:
'@firebase/app': 0.16.0
'@firebase/app-check-interop-types': 0.3.4
'@firebase/app-types': 0.9.5
'@firebase/component': 0.7.4
'@firebase/logger': 0.5.1
'@firebase/util': 1.15.2
tslib: 2.8.1
'@firebase/analytics-compat@0.2.29(@firebase/app-compat@0.5.16)(@firebase/app@0.16.0)':
dependencies:
'@firebase/analytics': 0.10.23(@firebase/app@0.16.0)
'@firebase/analytics-types': 0.8.4
'@firebase/app': 0.16.0
'@firebase/app-compat': 0.5.16
'@firebase/component': 0.7.4
'@firebase/util': 1.15.2
tslib: 2.8.1
'@firebase/analytics-types@0.8.4': {}
'@firebase/analytics@0.10.23(@firebase/app@0.16.0)':
dependencies:
'@firebase/app': 0.16.0
'@firebase/component': 0.7.4
'@firebase/installations': 0.6.23(@firebase/app@0.16.0)
'@firebase/logger': 0.5.1
'@firebase/util': 1.15.2
tslib: 2.8.1
'@firebase/app-check-compat@0.4.6(@firebase/app-compat@0.5.16)(@firebase/app@0.16.0)':
dependencies:
'@firebase/app': 0.16.0
'@firebase/app-check': 0.13.0(@firebase/app@0.16.0)
'@firebase/app-check-types': 0.5.4
'@firebase/app-compat': 0.5.16
'@firebase/component': 0.7.4
'@firebase/logger': 0.5.1
'@firebase/util': 1.15.2
tslib: 2.8.1
'@firebase/app-check-interop-types@0.3.4': {}
'@firebase/app-check-types@0.5.4': {}
'@firebase/app-check@0.13.0(@firebase/app@0.16.0)':
dependencies:
'@firebase/app': 0.16.0
'@firebase/component': 0.7.4
'@firebase/logger': 0.5.1
'@firebase/util': 1.15.2
tslib: 2.8.1
'@firebase/app-compat@0.5.16':
dependencies:
'@firebase/app': 0.16.0
'@firebase/component': 0.7.4
'@firebase/logger': 0.5.1
'@firebase/util': 1.15.2
tslib: 2.8.1
'@firebase/app-types@0.9.5':
dependencies:
'@firebase/logger': 0.5.1
'@firebase/app@0.16.0':
dependencies:
'@firebase/component': 0.7.4
'@firebase/logger': 0.5.1
'@firebase/util': 1.15.2
idb: 7.1.1
tslib: 2.8.1
'@firebase/auth-compat@0.6.9(@firebase/app-compat@0.5.16)(@firebase/app-types@0.9.5)(@firebase/app@0.16.0)(@react-native-async-storage/async-storage@2.2.0(react-native@0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.86.2(@babel/core@7.29.7))(@types/react@19.1.17)(react@19.1.0)))':
dependencies:
'@firebase/app': 0.16.0
'@firebase/app-compat': 0.5.16
'@firebase/auth': 1.13.4(@firebase/app@0.16.0)(@react-native-async-storage/async-storage@2.2.0(react-native@0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.86.2(@babel/core@7.29.7))(@types/react@19.1.17)(react@19.1.0)))
'@firebase/auth-types': 0.13.1(@firebase/app-types@0.9.5)(@firebase/util@1.15.2)
'@firebase/component': 0.7.4
'@firebase/util': 1.15.2
tslib: 2.8.1
transitivePeerDependencies:
- '@firebase/app-types'
- '@react-native-async-storage/async-storage'
'@firebase/auth-interop-types@0.2.5': {}
'@firebase/auth-types@0.13.1(@firebase/app-types@0.9.5)(@firebase/util@1.15.2)':
dependencies:
'@firebase/app-types': 0.9.5
'@firebase/util': 1.15.2
'@firebase/auth@1.13.4(@firebase/app@0.16.0)(@react-native-async-storage/async-storage@2.2.0(react-native@0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.86.2(@babel/core@7.29.7))(@types/react@19.1.17)(react@19.1.0)))':
dependencies:
'@firebase/app': 0.16.0
'@firebase/component': 0.7.4
'@firebase/logger': 0.5.1
'@firebase/util': 1.15.2
tslib: 2.8.1
optionalDependencies:
'@react-native-async-storage/async-storage': 2.2.0(react-native@0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.86.2(@babel/core@7.29.7))(@types/react@19.1.17)(react@19.1.0))
'@firebase/component@0.7.4':
dependencies:
'@firebase/util': 1.15.2
tslib: 2.8.1
'@firebase/database-compat@2.1.6':
'@firebase/data-connect@0.7.3(@firebase/app@0.16.0)':
dependencies:
'@firebase/app': 0.16.0
'@firebase/auth-interop-types': 0.2.5
'@firebase/component': 0.7.4
'@firebase/logger': 0.5.1
'@firebase/util': 1.15.2
tslib: 2.8.1
'@firebase/database-compat@2.1.6(@firebase/app-compat@0.5.16)(@firebase/app@0.16.0)':
dependencies:
'@firebase/component': 0.7.4
'@firebase/database': 1.1.4
@@ -7970,6 +8288,9 @@ snapshots:
'@firebase/logger': 0.5.1
'@firebase/util': 1.15.2
tslib: 2.8.1
optionalDependencies:
'@firebase/app': 0.16.0
'@firebase/app-compat': 0.5.16
'@firebase/database-types@1.0.21':
dependencies:
@@ -7986,14 +8307,181 @@ snapshots:
faye-websocket: 0.11.4
tslib: 2.8.1
'@firebase/firestore-compat@0.4.12(@firebase/app-compat@0.5.16)(@firebase/app-types@0.9.5)(@firebase/app@0.16.0)':
dependencies:
'@firebase/app': 0.16.0
'@firebase/app-compat': 0.5.16
'@firebase/component': 0.7.4
'@firebase/firestore': 4.17.0(@firebase/app@0.16.0)
'@firebase/firestore-types': 3.0.4(@firebase/app-types@0.9.5)(@firebase/util@1.15.2)
'@firebase/util': 1.15.2
tslib: 2.8.1
transitivePeerDependencies:
- '@firebase/app-types'
'@firebase/firestore-types@3.0.4(@firebase/app-types@0.9.5)(@firebase/util@1.15.2)':
dependencies:
'@firebase/app-types': 0.9.5
'@firebase/util': 1.15.2
'@firebase/firestore@4.17.0(@firebase/app@0.16.0)':
dependencies:
'@firebase/app': 0.16.0
'@firebase/component': 0.7.4
'@firebase/logger': 0.5.1
'@firebase/util': 1.15.2
'@firebase/webchannel-wrapper': 1.0.6
'@grpc/grpc-js': 1.9.16
'@grpc/proto-loader': 0.7.15
re2js: 2.8.6
tslib: 2.8.1
'@firebase/functions-compat@0.4.6(@firebase/app-compat@0.5.16)(@firebase/app@0.16.0)':
dependencies:
'@firebase/app': 0.16.0
'@firebase/app-compat': 0.5.16
'@firebase/component': 0.7.4
'@firebase/functions': 0.13.6(@firebase/app@0.16.0)
'@firebase/functions-types': 0.6.4
'@firebase/util': 1.15.2
tslib: 2.8.1
'@firebase/functions-types@0.6.4': {}
'@firebase/functions@0.13.6(@firebase/app@0.16.0)':
dependencies:
'@firebase/app': 0.16.0
'@firebase/app-check-interop-types': 0.3.4
'@firebase/auth-interop-types': 0.2.5
'@firebase/component': 0.7.4
'@firebase/messaging-interop-types': 0.2.5
'@firebase/util': 1.15.2
tslib: 2.8.1
'@firebase/installations-compat@0.2.23(@firebase/app-compat@0.5.16)(@firebase/app-types@0.9.5)(@firebase/app@0.16.0)':
dependencies:
'@firebase/app': 0.16.0
'@firebase/app-compat': 0.5.16
'@firebase/component': 0.7.4
'@firebase/installations': 0.6.23(@firebase/app@0.16.0)
'@firebase/installations-types': 0.5.4(@firebase/app-types@0.9.5)
'@firebase/util': 1.15.2
tslib: 2.8.1
transitivePeerDependencies:
- '@firebase/app-types'
'@firebase/installations-types@0.5.4(@firebase/app-types@0.9.5)':
dependencies:
'@firebase/app-types': 0.9.5
'@firebase/installations@0.6.23(@firebase/app@0.16.0)':
dependencies:
'@firebase/app': 0.16.0
'@firebase/component': 0.7.4
'@firebase/util': 1.15.2
idb: 7.1.1
tslib: 2.8.1
'@firebase/logger@0.5.1':
dependencies:
tslib: 2.8.1
'@firebase/messaging-compat@0.2.28(@firebase/app-compat@0.5.16)(@firebase/app@0.16.0)':
dependencies:
'@firebase/app': 0.16.0
'@firebase/app-compat': 0.5.16
'@firebase/component': 0.7.4
'@firebase/messaging': 0.13.1(@firebase/app@0.16.0)
'@firebase/util': 1.15.2
tslib: 2.8.1
'@firebase/messaging-interop-types@0.2.5': {}
'@firebase/messaging@0.13.1(@firebase/app@0.16.0)':
dependencies:
'@firebase/app': 0.16.0
'@firebase/component': 0.7.4
'@firebase/installations': 0.6.23(@firebase/app@0.16.0)
'@firebase/messaging-interop-types': 0.2.5
'@firebase/util': 1.15.2
idb: 7.1.1
tslib: 2.8.1
'@firebase/performance-compat@0.2.26(@firebase/app-compat@0.5.16)(@firebase/app@0.16.0)':
dependencies:
'@firebase/app': 0.16.0
'@firebase/app-compat': 0.5.16
'@firebase/component': 0.7.4
'@firebase/logger': 0.5.1
'@firebase/performance': 0.7.13(@firebase/app@0.16.0)
'@firebase/performance-types': 0.2.4
'@firebase/util': 1.15.2
tslib: 2.8.1
'@firebase/performance-types@0.2.4': {}
'@firebase/performance@0.7.13(@firebase/app@0.16.0)':
dependencies:
'@firebase/app': 0.16.0
'@firebase/component': 0.7.4
'@firebase/installations': 0.6.23(@firebase/app@0.16.0)
'@firebase/logger': 0.5.1
'@firebase/util': 1.15.2
tslib: 2.8.1
web-vitals: 4.2.4
'@firebase/remote-config-compat@0.2.28(@firebase/app-compat@0.5.16)(@firebase/app@0.16.0)':
dependencies:
'@firebase/app': 0.16.0
'@firebase/app-compat': 0.5.16
'@firebase/component': 0.7.4
'@firebase/logger': 0.5.1
'@firebase/remote-config': 0.9.1(@firebase/app@0.16.0)
'@firebase/remote-config-types': 0.5.1
'@firebase/util': 1.15.2
tslib: 2.8.1
'@firebase/remote-config-types@0.5.1': {}
'@firebase/remote-config@0.9.1(@firebase/app@0.16.0)':
dependencies:
'@firebase/app': 0.16.0
'@firebase/component': 0.7.4
'@firebase/installations': 0.6.23(@firebase/app@0.16.0)
'@firebase/logger': 0.5.1
'@firebase/util': 1.15.2
tslib: 2.8.1
'@firebase/storage-compat@0.4.4(@firebase/app-compat@0.5.16)(@firebase/app-types@0.9.5)(@firebase/app@0.16.0)':
dependencies:
'@firebase/app': 0.16.0
'@firebase/app-compat': 0.5.16
'@firebase/component': 0.7.4
'@firebase/storage': 0.14.4(@firebase/app@0.16.0)
'@firebase/storage-types': 0.8.4(@firebase/app-types@0.9.5)(@firebase/util@1.15.2)
'@firebase/util': 1.15.2
tslib: 2.8.1
transitivePeerDependencies:
- '@firebase/app-types'
'@firebase/storage-types@0.8.4(@firebase/app-types@0.9.5)(@firebase/util@1.15.2)':
dependencies:
'@firebase/app-types': 0.9.5
'@firebase/util': 1.15.2
'@firebase/storage@0.14.4(@firebase/app@0.16.0)':
dependencies:
'@firebase/app': 0.16.0
'@firebase/component': 0.7.4
'@firebase/util': 1.15.2
tslib: 2.8.1
'@firebase/util@1.15.2':
dependencies:
tslib: 2.8.1
'@firebase/webchannel-wrapper@1.0.6': {}
'@google-cloud/firestore@8.7.1':
dependencies:
'@opentelemetry/api': 1.9.1
@@ -8044,6 +8532,18 @@ snapshots:
'@js-sdsl/ordered-map': 4.4.2
optional: true
'@grpc/grpc-js@1.9.16':
dependencies:
'@grpc/proto-loader': 0.7.15
'@types/node': 22.20.1
'@grpc/proto-loader@0.7.15':
dependencies:
lodash.camelcase: 4.3.0
long: 5.3.2
protobufjs: 7.6.5
yargs: 17.7.3
'@grpc/proto-loader@0.8.1':
dependencies:
lodash.camelcase: 4.3.0
@@ -8198,34 +8698,25 @@ snapshots:
'@pkgjs/parseargs@0.11.0':
optional: true
'@protobufjs/aspromise@1.1.2':
optional: true
'@protobufjs/aspromise@1.1.2': {}
'@protobufjs/base64@1.1.2':
optional: true
'@protobufjs/base64@1.1.2': {}
'@protobufjs/codegen@2.0.5':
optional: true
'@protobufjs/codegen@2.0.5': {}
'@protobufjs/eventemitter@1.1.1':
optional: true
'@protobufjs/eventemitter@1.1.1': {}
'@protobufjs/fetch@1.1.1':
dependencies:
'@protobufjs/aspromise': 1.1.2
optional: true
'@protobufjs/float@1.0.2':
optional: true
'@protobufjs/float@1.0.2': {}
'@protobufjs/path@1.1.2':
optional: true
'@protobufjs/path@1.1.2': {}
'@protobufjs/pool@1.1.0':
optional: true
'@protobufjs/pool@1.1.0': {}
'@protobufjs/utf8@1.1.2':
optional: true
'@protobufjs/utf8@1.1.2': {}
'@radix-ui/primitive@1.1.7': {}
@@ -10273,10 +10764,10 @@ snapshots:
locate-path: 5.0.0
path-exists: 4.0.0
firebase-admin@14.2.0:
firebase-admin@14.2.0(@firebase/app-compat@0.5.16)(@firebase/app@0.16.0):
dependencies:
'@fastify/busboy': 3.2.1
'@firebase/database-compat': 2.1.6
'@firebase/database-compat': 2.1.6(@firebase/app-compat@0.5.16)(@firebase/app@0.16.0)
'@firebase/database-types': 1.0.21
fast-deep-equal: 3.1.3
google-auth-library: 10.9.1
@@ -10291,6 +10782,39 @@ snapshots:
- encoding
- supports-color
firebase@12.17.1(@react-native-async-storage/async-storage@2.2.0(react-native@0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.86.2(@babel/core@7.29.7))(@types/react@19.1.17)(react@19.1.0))):
dependencies:
'@firebase/ai': 2.14.0(@firebase/app-types@0.9.5)(@firebase/app@0.16.0)
'@firebase/analytics': 0.10.23(@firebase/app@0.16.0)
'@firebase/analytics-compat': 0.2.29(@firebase/app-compat@0.5.16)(@firebase/app@0.16.0)
'@firebase/app': 0.16.0
'@firebase/app-check': 0.13.0(@firebase/app@0.16.0)
'@firebase/app-check-compat': 0.4.6(@firebase/app-compat@0.5.16)(@firebase/app@0.16.0)
'@firebase/app-compat': 0.5.16
'@firebase/app-types': 0.9.5
'@firebase/auth': 1.13.4(@firebase/app@0.16.0)(@react-native-async-storage/async-storage@2.2.0(react-native@0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.86.2(@babel/core@7.29.7))(@types/react@19.1.17)(react@19.1.0)))
'@firebase/auth-compat': 0.6.9(@firebase/app-compat@0.5.16)(@firebase/app-types@0.9.5)(@firebase/app@0.16.0)(@react-native-async-storage/async-storage@2.2.0(react-native@0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.86.2(@babel/core@7.29.7))(@types/react@19.1.17)(react@19.1.0)))
'@firebase/data-connect': 0.7.3(@firebase/app@0.16.0)
'@firebase/database': 1.1.4
'@firebase/database-compat': 2.1.6(@firebase/app-compat@0.5.16)(@firebase/app@0.16.0)
'@firebase/firestore': 4.17.0(@firebase/app@0.16.0)
'@firebase/firestore-compat': 0.4.12(@firebase/app-compat@0.5.16)(@firebase/app-types@0.9.5)(@firebase/app@0.16.0)
'@firebase/functions': 0.13.6(@firebase/app@0.16.0)
'@firebase/functions-compat': 0.4.6(@firebase/app-compat@0.5.16)(@firebase/app@0.16.0)
'@firebase/installations': 0.6.23(@firebase/app@0.16.0)
'@firebase/installations-compat': 0.2.23(@firebase/app-compat@0.5.16)(@firebase/app-types@0.9.5)(@firebase/app@0.16.0)
'@firebase/messaging': 0.13.1(@firebase/app@0.16.0)
'@firebase/messaging-compat': 0.2.28(@firebase/app-compat@0.5.16)(@firebase/app@0.16.0)
'@firebase/performance': 0.7.13(@firebase/app@0.16.0)
'@firebase/performance-compat': 0.2.26(@firebase/app-compat@0.5.16)(@firebase/app@0.16.0)
'@firebase/remote-config': 0.9.1(@firebase/app@0.16.0)
'@firebase/remote-config-compat': 0.2.28(@firebase/app-compat@0.5.16)(@firebase/app@0.16.0)
'@firebase/storage': 0.14.4(@firebase/app@0.16.0)
'@firebase/storage-compat': 0.4.4(@firebase/app-compat@0.5.16)(@firebase/app-types@0.9.5)(@firebase/app@0.16.0)
'@firebase/util': 1.15.2
transitivePeerDependencies:
- '@react-native-async-storage/async-storage'
fix-dts-default-cjs-exports@1.0.1:
dependencies:
magic-string: 0.30.21
@@ -10679,6 +11203,8 @@ snapshots:
optionalDependencies:
typescript: 5.9.3
idb@7.1.1: {}
ieee754@1.2.1: {}
ignore@5.3.2: {}
@@ -10990,8 +11516,7 @@ snapshots:
dependencies:
p-locate: 4.1.0
lodash.camelcase@4.3.0:
optional: true
lodash.camelcase@4.3.0: {}
lodash.chunk@4.2.0: {}
@@ -11021,8 +11546,7 @@ snapshots:
dependencies:
chalk: 2.4.2
long@5.3.2:
optional: true
long@5.3.2: {}
loose-envify@1.4.0:
dependencies:
@@ -11842,7 +12366,6 @@ snapshots:
'@protobufjs/utf8': 1.1.2
'@types/node': 22.20.1
long: 5.3.2
optional: true
pump@3.0.4:
dependencies:
@@ -11877,6 +12400,8 @@ snapshots:
minimist: 1.2.8
strip-json-comments: 2.0.1
re2js@2.8.6: {}
react-devtools-core@6.1.5:
dependencies:
shell-quote: 1.10.0
@@ -12745,6 +13270,8 @@ snapshots:
web-streams-polyfill@3.3.3: {}
web-vitals@4.2.4: {}
webidl-conversions@3.0.1: {}
webidl-conversions@5.0.0: {}